DwarfCompileUnit.h revision c20bdf194ad4c824ee6a5f163410d73513ae5c81
18b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel//===-- llvm/CodeGen/DwarfCompileUnit.h - Dwarf Compile Unit ---*- C++ -*--===//
28b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel//
38b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel//                     The LLVM Compiler Infrastructure
48b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel//
58b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel// This file is distributed under the University of Illinois Open Source
68b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel// License. See LICENSE.TXT for details.
78b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel//
88b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel//===----------------------------------------------------------------------===//
98b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel//
108b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel// This file contains support for writing dwarf compile unit.
118b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel//
128b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel//===----------------------------------------------------------------------===//
138b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
148b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel#ifndef CODEGEN_ASMPRINTER_DWARFCOMPILEUNIT_H
158b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel#define CODEGEN_ASMPRINTER_DWARFCOMPILEUNIT_H
168b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
178b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel#include "DIE.h"
183cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel#include "llvm/Analysis/DebugInfo.h"
198b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel#include "llvm/ADT/DenseMap.h"
208b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel#include "llvm/ADT/StringMap.h"
218b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel#include "llvm/ADT/OwningPtr.h"
228b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
238b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patelnamespace llvm {
248b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
253cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patelclass DwarfDebug;
263cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patelclass MachineLocation;
273cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patelclass MachineOperand;
283cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patelclass ConstantInt;
293cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patelclass DbgVariable;
303cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
318b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel//===----------------------------------------------------------------------===//
328b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel/// CompileUnit - This dwarf writer support class manages information associate
338b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel/// with a source file.
348b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patelclass CompileUnit {
358b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// ID - File identifier for source.
368b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  ///
378b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  unsigned ID;
388b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
398b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// Die - Compile unit debug information entry.
408b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  ///
418b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  const OwningPtr<DIE> CUDie;
428b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
433cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// Asm - Target of Dwarf emission.
443cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  AsmPrinter *Asm;
453cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
463cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  DwarfDebug *DD;
473cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
488b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// IndexTyDie - An anonymous type for index type.  Owned by CUDie.
498b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  DIE *IndexTyDie;
508b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
518b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// MDNodeToDieMap - Tracks the mapping of unit level debug informaton
528b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// variables to debug information entries.
538b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  DenseMap<const MDNode *, DIE *> MDNodeToDieMap;
548b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
558b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// MDNodeToDIEEntryMap - Tracks the mapping of unit level debug informaton
568b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// descriptors to debug information entries using a DIEEntry proxy.
578b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  DenseMap<const MDNode *, DIEEntry *> MDNodeToDIEEntryMap;
588b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
598b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// Globals - A map of globally visible named entities for this unit.
608b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  ///
618b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  StringMap<DIE*> Globals;
628b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
638b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// GlobalTypes - A map of globally visible types for this unit.
648b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  ///
658b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  StringMap<DIE*> GlobalTypes;
668b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
673cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// DIEBlocks - A list of all the DIEBlocks in use.
683cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  std::vector<DIEBlock *> DIEBlocks;
693cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
708b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patelpublic:
715d6076383171cb4f676b24bead5292f8e3fc4973Devang Patel  CompileUnit(unsigned I, DIE *D, AsmPrinter *A, DwarfDebug *DW);
723cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  ~CompileUnit();
738b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
748b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  // Accessors.
758b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  unsigned getID()                  const { return ID; }
768b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  DIE* getCUDie()                   const { return CUDie.get(); }
778b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  const StringMap<DIE*> &getGlobals()     const { return Globals; }
788b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  const StringMap<DIE*> &getGlobalTypes() const { return GlobalTypes; }
798b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
808b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// hasContent - Return true if this compile unit has something to write out.
818b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  ///
828b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  bool hasContent() const { return !CUDie->getChildren().empty(); }
838b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
848b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// addGlobal - Add a new global entity to the compile unit.
858b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  ///
868b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  void addGlobal(StringRef Name, DIE *Die) { Globals[Name] = Die; }
878b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
888b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// addGlobalType - Add a new global type to the compile unit.
898b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  ///
90c20bdf194ad4c824ee6a5f163410d73513ae5c81Devang Patel  void addGlobalType(DIType Ty);
918b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
928b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// getDIE - Returns the debug information entry map slot for the
938b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// specified debug variable.
948b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  DIE *getDIE(const MDNode *N) { return MDNodeToDieMap.lookup(N); }
958b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
963cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  DIEBlock *getDIEBlock() {
973cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel    return new (DIEValueAllocator) DIEBlock();
983cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  }
993cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
1008b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// insertDIE - Insert DIE into the map.
1018b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  void insertDIE(const MDNode *N, DIE *D) {
1028b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel    MDNodeToDieMap.insert(std::make_pair(N, D));
1038b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  }
1048b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
1051585ce7e8c1bd1b3521a9ef4406dbac728685e70Jim Grosbach  /// getDIEEntry - Returns the debug information entry for the specified
1068b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// debug variable.
1078b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  DIEEntry *getDIEEntry(const MDNode *N) {
1088b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel    DenseMap<const MDNode *, DIEEntry *>::iterator I =
1098b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel      MDNodeToDIEEntryMap.find(N);
1108b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel    if (I == MDNodeToDIEEntryMap.end())
1118b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel      return NULL;
1128b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel    return I->second;
1138b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  }
1148b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
1158b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// insertDIEEntry - Insert debug information entry into the map.
1168b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  void insertDIEEntry(const MDNode *N, DIEEntry *E) {
1178b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel    MDNodeToDIEEntryMap.insert(std::make_pair(N, E));
1188b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  }
1198b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
1208b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  /// addDie - Adds or interns the DIE to the compile unit.
1218b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  ///
1228b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  void addDie(DIE *Buffer) {
1238b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel    this->CUDie->addChild(Buffer);
1248b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  }
1258b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
1268b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  // getIndexTyDie - Get an anonymous type for index type.
1278b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  DIE *getIndexTyDie() {
1288b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel    return IndexTyDie;
1298b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  }
1308b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
1318b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  // setIndexTyDie - Set D as anonymous type for index which can be reused
1328b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  // later.
1338b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  void setIndexTyDie(DIE *D) {
1348b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel    IndexTyDie = D;
1358b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel  }
1363cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patelpublic:
1373cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
1383cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// addUInt - Add an unsigned integer attribute data and value.
1393cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  ///
1403cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addUInt(DIE *Die, unsigned Attribute, unsigned Form, uint64_t Integer);
1413cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
1423cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// addSInt - Add an signed integer attribute data and value.
1433cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  ///
1443cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addSInt(DIE *Die, unsigned Attribute, unsigned Form, int64_t Integer);
1453cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
1463cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// addString - Add a string attribute data and value.
1473cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  ///
1483cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addString(DIE *Die, unsigned Attribute, unsigned Form,
1493cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel                 const StringRef Str);
1503cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
1513cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// addLabel - Add a Dwarf label attribute data and value.
1523cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  ///
1533cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addLabel(DIE *Die, unsigned Attribute, unsigned Form,
1543cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel                const MCSymbol *Label);
1553cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
1563cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// addDelta - Add a label delta attribute data and value.
1573cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  ///
1583cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addDelta(DIE *Die, unsigned Attribute, unsigned Form,
1593cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel                const MCSymbol *Hi, const MCSymbol *Lo);
1603cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
1613cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// addDIEEntry - Add a DIE attribute data and value.
1623cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  ///
1633cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addDIEEntry(DIE *Die, unsigned Attribute, unsigned Form, DIE *Entry);
1643cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
1653cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// addBlock - Add block data.
1663cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  ///
1673cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addBlock(DIE *Die, unsigned Attribute, unsigned Form, DIEBlock *Block);
1683cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
1693cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// addSourceLine - Add location information to specified debug information
1703cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// entry.
1713cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addSourceLine(DIE *Die, DIVariable V);
1723cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addSourceLine(DIE *Die, DIGlobalVariable G);
1733cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addSourceLine(DIE *Die, DISubprogram SP);
1743cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addSourceLine(DIE *Die, DIType Ty);
1753cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addSourceLine(DIE *Die, DINameSpace NS);
1763cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
1773cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// addAddress - Add an address attribute to a die based on the location
1783cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// provided.
1793cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addAddress(DIE *Die, unsigned Attribute,
1803cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel                  const MachineLocation &Location);
1813cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
1823cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// addConstantValue - Add constant value entry in variable DIE.
183b58128e2b2375173aafb07905bd53014d622e4baDevang Patel  bool addConstantValue(DIE *Die, const MachineOperand &MO, DIType Ty);
1843cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  bool addConstantValue(DIE *Die, ConstantInt *CI, bool Unsigned);
1853cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
1863cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// addConstantFPValue - Add constant value entry in variable DIE.
1873cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  bool addConstantFPValue(DIE *Die, const MachineOperand &MO);
1883cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
1893cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// addTemplateParams - Add template parameters in buffer.
1903cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addTemplateParams(DIE &Buffer, DIArray TParams);
1913cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
192116da2fbe93861bb60ffff26dce1d0e76d9ccf15Devang Patel  /// addRegisterOp - Add register operand.
193116da2fbe93861bb60ffff26dce1d0e76d9ccf15Devang Patel  void addRegisterOp(DIE *TheDie, unsigned Reg);
194116da2fbe93861bb60ffff26dce1d0e76d9ccf15Devang Patel
195116da2fbe93861bb60ffff26dce1d0e76d9ccf15Devang Patel  /// addRegisterOffset - Add register offset.
196116da2fbe93861bb60ffff26dce1d0e76d9ccf15Devang Patel  void addRegisterOffset(DIE *TheDie, unsigned Reg, int64_t Offset);
197116da2fbe93861bb60ffff26dce1d0e76d9ccf15Devang Patel
1983cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// addComplexAddress - Start with the address based on the location provided,
1993cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// and generate the DWARF information necessary to find the actual variable
2003cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// (navigating the extra location information encoded in the type) based on
2013cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// the starting location.  Add the DWARF information to the die.
2023cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  ///
2033cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addComplexAddress(DbgVariable *&DV, DIE *Die, unsigned Attribute,
2043cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel                         const MachineLocation &Location);
2053cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
2063cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  // FIXME: Should be reformulated in terms of addComplexAddress.
2073cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// addBlockByrefAddress - Start with the address based on the location
2083cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// provided, and generate the DWARF information necessary to find the
2093cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// actual Block variable (navigating the Block struct) based on the
2103cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// starting location.  Add the DWARF information to the die.  Obsolete,
2113cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// please use addComplexAddress instead.
2123cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  ///
2133cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addBlockByrefAddress(DbgVariable *&DV, DIE *Die, unsigned Attribute,
2143cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel                            const MachineLocation &Location);
2153cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
216e1cdf84ee5ca72a38f4dedd6b12cce21cf83e415Devang Patel  /// addVariableAddress - Add DW_AT_location attribute for a
217e1cdf84ee5ca72a38f4dedd6b12cce21cf83e415Devang Patel  /// DbgVariable based on provided MachineLocation.
218e1cdf84ee5ca72a38f4dedd6b12cce21cf83e415Devang Patel  void addVariableAddress(DbgVariable *&DV, DIE *Die, MachineLocation Location);
2193cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
2203cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// addToContextOwner - Add Die into the list of its context owner's children.
2213cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addToContextOwner(DIE *Die, DIDescriptor Context);
2223cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
2233cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// addType - Add a new type attribute to the specified entity.
2243cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addType(DIE *Entity, DIType Ty);
2253cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
2263cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// getOrCreateNameSpace - Create a DIE for DINameSpace.
2273cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  DIE *getOrCreateNameSpace(DINameSpace NS);
2283cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
2293cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
2303cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// given DIType.
2313cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  DIE *getOrCreateTypeDIE(DIType Ty);
2323cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
2333cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// getOrCreateTemplateTypeParameterDIE - Find existing DIE or create new DIE
2343cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// for the given DITemplateTypeParameter.
2353cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  DIE *getOrCreateTemplateTypeParameterDIE(DITemplateTypeParameter TP);
2363cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
2373cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// getOrCreateTemplateValueParameterDIE - Find existing DIE or create new DIE
2383cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// for the given DITemplateValueParameter.
2393cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  DIE *getOrCreateTemplateValueParameterDIE(DITemplateValueParameter TVP);
2403cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
2413cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// createDIEEntry - Creates a new DIEEntry to be a proxy for a debug
2423cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// information entry.
2433cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  DIEEntry *createDIEEntry(DIE *Entry);
2443cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
2453cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void addPubTypes(DISubprogram SP);
2463cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
2473cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// constructTypeDIE - Construct basic type die from DIBasicType.
2483cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void constructTypeDIE(DIE &Buffer,
2493cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel                        DIBasicType BTy);
2503cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
2513cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// constructTypeDIE - Construct derived type die from DIDerivedType.
2523cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void constructTypeDIE(DIE &Buffer,
2533cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel                        DIDerivedType DTy);
2543cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
2553cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// constructTypeDIE - Construct type DIE from DICompositeType.
2563cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void constructTypeDIE(DIE &Buffer,
2573cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel                        DICompositeType CTy);
2583cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
2593cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// constructSubrangeDIE - Construct subrange DIE from DISubrange.
2603cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void constructSubrangeDIE(DIE &Buffer, DISubrange SR, DIE *IndexTy);
2613cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
2623cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// constructArrayTypeDIE - Construct array type DIE from DICompositeType.
2633cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  void constructArrayTypeDIE(DIE &Buffer,
2643cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel                             DICompositeType *CTy);
2653cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
2663cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// constructEnumTypeDIE - Construct enum type DIE from DIEnumerator.
2673cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  DIE *constructEnumTypeDIE(DIEnumerator ETy);
2683cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
2693cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  /// createMemberDIE - Create new member DIE.
2703cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  DIE *createMemberDIE(DIDerivedType DT);
2713cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel
2723cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patelprivate:
2738b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
2743cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  // DIEValueAllocator - All DIEValues are allocated through this allocator.
2753cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  BumpPtrAllocator DIEValueAllocator;
2763cbee30eacd5d918a00f21c08dbd10ee9ae73925Devang Patel  DIEInteger *DIEIntegerOne;
2778b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel};
2788b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel
2798b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel} // end llvm namespace
2808b9df62d0227beab8c7adb487fb909e67bbc7237Devang Patel#endif
281