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