1 //===-- llvm/CodeGen/DwarfCompileUnit.cpp - Dwarf Compile Unit ------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file contains support for constructing a dwarf compile unit.
12 //===----------------------------------------------------------------------===//
14 #define DEBUG_TYPE "dwarfdebug"
16 #include "DwarfCompileUnit.h"
17 #include "DwarfAccelTable.h"
18 #include "DwarfDebug.h"
19 #include "llvm/ADT/APFloat.h"
20 #include "llvm/DIBuilder.h"
21 #include "llvm/IR/Constants.h"
22 #include "llvm/IR/DataLayout.h"
23 #include "llvm/IR/GlobalVariable.h"
24 #include "llvm/IR/Instructions.h"
25 #include "llvm/MC/MCSection.h"
26 #include "llvm/MC/MCStreamer.h"
27 #include "llvm/Target/Mangler.h"
28 #include "llvm/Target/TargetFrameLowering.h"
29 #include "llvm/Target/TargetMachine.h"
30 #include "llvm/Target/TargetLoweringObjectFile.h"
31 #include "llvm/Target/TargetRegisterInfo.h"
32 #include "llvm/Support/CommandLine.h"
36 static cl::opt<bool> GenerateTypeUnits("generate-type-units", cl::Hidden,
37 cl::desc("Generate DWARF4 type units."),
40 /// CompileUnit - Compile unit constructor.
41 CompileUnit::CompileUnit(unsigned UID, DIE *D, DICompileUnit Node,
42 AsmPrinter *A, DwarfDebug *DW, DwarfUnits *DWU)
43 : UniqueID(UID), Node(Node), Language(Node.getLanguage()), CUDie(D),
44 DebugInfoOffset(0), Asm(A), DD(DW), DU(DWU), IndexTyDie(0) {
45 DIEIntegerOne = new (DIEValueAllocator) DIEInteger(1);
49 CompileUnit::CompileUnit(unsigned UID, DIE *D, uint16_t Language, AsmPrinter *A,
50 DwarfDebug *DD, DwarfUnits *DU)
51 : UniqueID(UID), Node(NULL), Language(Language), CUDie(D),
52 DebugInfoOffset(0), Asm(A), DD(DD), DU(DU), IndexTyDie(0) {
53 DIEIntegerOne = new (DIEValueAllocator) DIEInteger(1);
56 /// ~CompileUnit - Destructor for compile unit.
57 CompileUnit::~CompileUnit() {
58 for (unsigned j = 0, M = DIEBlocks.size(); j < M; ++j)
59 DIEBlocks[j]->~DIEBlock();
62 /// createDIEEntry - Creates a new DIEEntry to be a proxy for a debug
63 /// information entry.
64 DIEEntry *CompileUnit::createDIEEntry(DIE *Entry) {
65 DIEEntry *Value = new (DIEValueAllocator) DIEEntry(Entry);
69 /// getDefaultLowerBound - Return the default lower bound for an array. If the
70 /// DWARF version doesn't handle the language, return -1.
71 int64_t CompileUnit::getDefaultLowerBound() const {
72 switch (getLanguage()) {
76 case dwarf::DW_LANG_C89:
77 case dwarf::DW_LANG_C99:
78 case dwarf::DW_LANG_C:
79 case dwarf::DW_LANG_C_plus_plus:
80 case dwarf::DW_LANG_ObjC:
81 case dwarf::DW_LANG_ObjC_plus_plus:
84 case dwarf::DW_LANG_Fortran77:
85 case dwarf::DW_LANG_Fortran90:
86 case dwarf::DW_LANG_Fortran95:
89 // The languages below have valid values only if the DWARF version >= 4.
90 case dwarf::DW_LANG_Java:
91 case dwarf::DW_LANG_Python:
92 case dwarf::DW_LANG_UPC:
93 case dwarf::DW_LANG_D:
94 if (dwarf::DWARF_VERSION >= 4)
98 case dwarf::DW_LANG_Ada83:
99 case dwarf::DW_LANG_Ada95:
100 case dwarf::DW_LANG_Cobol74:
101 case dwarf::DW_LANG_Cobol85:
102 case dwarf::DW_LANG_Modula2:
103 case dwarf::DW_LANG_Pascal83:
104 case dwarf::DW_LANG_PLI:
105 if (dwarf::DWARF_VERSION >= 4)
113 /// Check whether the DIE for this MDNode can be shared across CUs.
114 static bool isShareableAcrossCUs(DIDescriptor D) {
115 // When the MDNode can be part of the type system, the DIE can be shared
117 // Combining type units and cross-CU DIE sharing is lower value (since
118 // cross-CU DIE sharing is used in LTO and removes type redundancy at that
119 // level already) but may be implementable for some value in projects
120 // building multiple independent libraries with LTO and then linking those
122 return (D.isType() ||
123 (D.isSubprogram() && !DISubprogram(D).isDefinition())) &&
127 /// getDIE - Returns the debug information entry map slot for the
128 /// specified debug variable. We delegate the request to DwarfDebug
129 /// when the DIE for this MDNode can be shared across CUs. The mappings
130 /// will be kept in DwarfDebug for shareable DIEs.
131 DIE *CompileUnit::getDIE(DIDescriptor D) const {
132 if (isShareableAcrossCUs(D))
133 return DD->getDIE(D);
134 return MDNodeToDieMap.lookup(D);
137 /// insertDIE - Insert DIE into the map. We delegate the request to DwarfDebug
138 /// when the DIE for this MDNode can be shared across CUs. The mappings
139 /// will be kept in DwarfDebug for shareable DIEs.
140 void CompileUnit::insertDIE(DIDescriptor Desc, DIE *D) {
141 if (isShareableAcrossCUs(Desc)) {
142 DD->insertDIE(Desc, D);
145 MDNodeToDieMap.insert(std::make_pair(Desc, D));
148 /// addFlag - Add a flag that is true.
149 void CompileUnit::addFlag(DIE *Die, dwarf::Attribute Attribute) {
150 if (DD->getDwarfVersion() >= 4)
151 Die->addValue(Attribute, dwarf::DW_FORM_flag_present, DIEIntegerOne);
153 Die->addValue(Attribute, dwarf::DW_FORM_flag, DIEIntegerOne);
156 /// addUInt - Add an unsigned integer attribute data and value.
158 void CompileUnit::addUInt(DIE *Die, dwarf::Attribute Attribute,
159 Optional<dwarf::Form> Form, uint64_t Integer) {
161 Form = DIEInteger::BestForm(false, Integer);
162 DIEValue *Value = Integer == 1 ? DIEIntegerOne : new (DIEValueAllocator)
164 Die->addValue(Attribute, *Form, Value);
167 void CompileUnit::addUInt(DIEBlock *Block, dwarf::Form Form, uint64_t Integer) {
168 addUInt(Block, (dwarf::Attribute)0, Form, Integer);
171 /// addSInt - Add an signed integer attribute data and value.
173 void CompileUnit::addSInt(DIE *Die, dwarf::Attribute Attribute,
174 Optional<dwarf::Form> Form, int64_t Integer) {
176 Form = DIEInteger::BestForm(true, Integer);
177 DIEValue *Value = new (DIEValueAllocator) DIEInteger(Integer);
178 Die->addValue(Attribute, *Form, Value);
181 void CompileUnit::addSInt(DIEBlock *Die, Optional<dwarf::Form> Form,
183 addSInt(Die, (dwarf::Attribute)0, Form, Integer);
186 /// addString - Add a string attribute data and value. We always emit a
187 /// reference to the string pool instead of immediate strings so that DIEs have
188 /// more predictable sizes. In the case of split dwarf we emit an index
189 /// into another table which gets us the static offset into the string
191 void CompileUnit::addString(DIE *Die, dwarf::Attribute Attribute,
195 if (!DD->useSplitDwarf()) {
196 MCSymbol *Symb = DU->getStringPoolEntry(String);
197 if (Asm->needsRelocationsForDwarfStringPool())
198 Value = new (DIEValueAllocator) DIELabel(Symb);
200 MCSymbol *StringPool = DU->getStringPoolSym();
201 Value = new (DIEValueAllocator) DIEDelta(Symb, StringPool);
203 Form = dwarf::DW_FORM_strp;
205 unsigned idx = DU->getStringPoolIndex(String);
206 Value = new (DIEValueAllocator) DIEInteger(idx);
207 Form = dwarf::DW_FORM_GNU_str_index;
209 DIEValue *Str = new (DIEValueAllocator) DIEString(Value, String);
210 Die->addValue(Attribute, Form, Str);
213 /// addLocalString - Add a string attribute data and value. This is guaranteed
214 /// to be in the local string pool instead of indirected.
215 void CompileUnit::addLocalString(DIE *Die, dwarf::Attribute Attribute,
217 MCSymbol *Symb = DU->getStringPoolEntry(String);
219 if (Asm->needsRelocationsForDwarfStringPool())
220 Value = new (DIEValueAllocator) DIELabel(Symb);
222 MCSymbol *StringPool = DU->getStringPoolSym();
223 Value = new (DIEValueAllocator) DIEDelta(Symb, StringPool);
225 Die->addValue(Attribute, dwarf::DW_FORM_strp, Value);
228 /// addExpr - Add a Dwarf expression attribute data and value.
230 void CompileUnit::addExpr(DIEBlock *Die, dwarf::Form Form, const MCExpr *Expr) {
231 DIEValue *Value = new (DIEValueAllocator) DIEExpr(Expr);
232 Die->addValue((dwarf::Attribute)0, Form, Value);
235 /// addLabel - Add a Dwarf label attribute data and value.
237 void CompileUnit::addLabel(DIE *Die, dwarf::Attribute Attribute,
238 dwarf::Form Form, const MCSymbol *Label) {
239 DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
240 Die->addValue(Attribute, Form, Value);
243 void CompileUnit::addLabel(DIEBlock *Die, dwarf::Form Form,
244 const MCSymbol *Label) {
245 addLabel(Die, (dwarf::Attribute)0, Form, Label);
248 /// addSectionLabel - Add a Dwarf section label attribute data and value.
250 void CompileUnit::addSectionLabel(DIE *Die, dwarf::Attribute Attribute,
251 const MCSymbol *Label) {
252 if (DD->getDwarfVersion() >= 4)
253 addLabel(Die, Attribute, dwarf::DW_FORM_sec_offset, Label);
255 addLabel(Die, Attribute, dwarf::DW_FORM_data4, Label);
258 /// addSectionOffset - Add an offset into a section attribute data and value.
260 void CompileUnit::addSectionOffset(DIE *Die, dwarf::Attribute Attribute,
262 if (DD->getDwarfVersion() >= 4)
263 addUInt(Die, Attribute, dwarf::DW_FORM_sec_offset, Integer);
265 addUInt(Die, Attribute, dwarf::DW_FORM_data4, Integer);
268 /// addLabelAddress - Add a dwarf label attribute data and value using
269 /// DW_FORM_addr or DW_FORM_GNU_addr_index.
271 void CompileUnit::addLabelAddress(DIE *Die, dwarf::Attribute Attribute,
274 DD->addArangeLabel(SymbolCU(this, Label));
276 if (!DD->useSplitDwarf()) {
278 DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
279 Die->addValue(Attribute, dwarf::DW_FORM_addr, Value);
281 DIEValue *Value = new (DIEValueAllocator) DIEInteger(0);
282 Die->addValue(Attribute, dwarf::DW_FORM_addr, Value);
285 unsigned idx = DU->getAddrPoolIndex(Label);
286 DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
287 Die->addValue(Attribute, dwarf::DW_FORM_GNU_addr_index, Value);
291 /// addOpAddress - Add a dwarf op address data and value using the
292 /// form given and an op of either DW_FORM_addr or DW_FORM_GNU_addr_index.
294 void CompileUnit::addOpAddress(DIEBlock *Die, const MCSymbol *Sym) {
295 DD->addArangeLabel(SymbolCU(this, Sym));
296 if (!DD->useSplitDwarf()) {
297 addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
298 addLabel(Die, dwarf::DW_FORM_udata, Sym);
300 addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_addr_index);
301 addUInt(Die, dwarf::DW_FORM_GNU_addr_index, DU->getAddrPoolIndex(Sym));
305 /// addSectionDelta - Add a section label delta attribute data and value.
307 void CompileUnit::addSectionDelta(DIE *Die, dwarf::Attribute Attribute,
308 const MCSymbol *Hi, const MCSymbol *Lo) {
309 DIEValue *Value = new (DIEValueAllocator) DIEDelta(Hi, Lo);
310 if (DD->getDwarfVersion() >= 4)
311 Die->addValue(Attribute, dwarf::DW_FORM_sec_offset, Value);
313 Die->addValue(Attribute, dwarf::DW_FORM_data4, Value);
316 /// addDIEEntry - Add a DIE attribute data and value.
318 void CompileUnit::addDIEEntry(DIE *Die, dwarf::Attribute Attribute,
320 addDIEEntry(Die, Attribute, createDIEEntry(Entry));
323 void CompileUnit::addDIEEntry(DIE *Die, dwarf::Attribute Attribute,
325 const DIE *DieCU = Die->getUnitOrNull();
326 const DIE *EntryCU = Entry->getEntry()->getUnitOrNull();
328 // We assume that Die belongs to this CU, if it is not linked to any CU yet.
331 EntryCU = getCUDie();
332 Die->addValue(Attribute, EntryCU == DieCU ? dwarf::DW_FORM_ref4
333 : dwarf::DW_FORM_ref_addr,
337 /// Create a DIE with the given Tag, add the DIE to its parent, and
338 /// call insertDIE if MD is not null.
339 DIE *CompileUnit::createAndAddDIE(unsigned Tag, DIE &Parent, DIDescriptor N) {
340 DIE *Die = new DIE(Tag);
341 Parent.addChild(Die);
347 /// addBlock - Add block data.
349 void CompileUnit::addBlock(DIE *Die, dwarf::Attribute Attribute,
351 Block->ComputeSize(Asm);
352 DIEBlocks.push_back(Block); // Memoize so we can call the destructor later on.
353 Die->addValue(Attribute, Block->BestForm(), Block);
356 /// addSourceLine - Add location information to specified debug information
358 void CompileUnit::addSourceLine(DIE *Die, DIVariable V) {
363 unsigned Line = V.getLineNumber();
367 DD->getOrCreateSourceID(V.getContext().getFilename(),
368 V.getContext().getDirectory(), getUniqueID());
369 assert(FileID && "Invalid file id");
370 addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
371 addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
374 /// addSourceLine - Add location information to specified debug information
376 void CompileUnit::addSourceLine(DIE *Die, DIGlobalVariable G) {
377 // Verify global variable.
378 if (!G.isGlobalVariable())
381 unsigned Line = G.getLineNumber();
385 DD->getOrCreateSourceID(G.getFilename(), G.getDirectory(), getUniqueID());
386 assert(FileID && "Invalid file id");
387 addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
388 addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
391 /// addSourceLine - Add location information to specified debug information
393 void CompileUnit::addSourceLine(DIE *Die, DISubprogram SP) {
394 // Verify subprogram.
395 if (!SP.isSubprogram())
398 // If the line number is 0, don't add it.
399 unsigned Line = SP.getLineNumber();
403 unsigned FileID = DD->getOrCreateSourceID(SP.getFilename(), SP.getDirectory(),
405 assert(FileID && "Invalid file id");
406 addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
407 addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
410 /// addSourceLine - Add location information to specified debug information
412 void CompileUnit::addSourceLine(DIE *Die, DIType Ty) {
417 unsigned Line = Ty.getLineNumber();
420 unsigned FileID = DD->getOrCreateSourceID(Ty.getFilename(), Ty.getDirectory(),
422 assert(FileID && "Invalid file id");
423 addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
424 addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
427 /// addSourceLine - Add location information to specified debug information
429 void CompileUnit::addSourceLine(DIE *Die, DIObjCProperty Ty) {
431 if (!Ty.isObjCProperty())
434 unsigned Line = Ty.getLineNumber();
437 DIFile File = Ty.getFile();
438 unsigned FileID = DD->getOrCreateSourceID(File.getFilename(),
439 File.getDirectory(), getUniqueID());
440 assert(FileID && "Invalid file id");
441 addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
442 addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
445 /// addSourceLine - Add location information to specified debug information
447 void CompileUnit::addSourceLine(DIE *Die, DINameSpace NS) {
452 unsigned Line = NS.getLineNumber();
455 StringRef FN = NS.getFilename();
458 DD->getOrCreateSourceID(FN, NS.getDirectory(), getUniqueID());
459 assert(FileID && "Invalid file id");
460 addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
461 addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
464 /// addVariableAddress - Add DW_AT_location attribute for a
465 /// DbgVariable based on provided MachineLocation.
466 void CompileUnit::addVariableAddress(const DbgVariable &DV, DIE *Die,
467 MachineLocation Location) {
468 if (DV.variableHasComplexAddress())
469 addComplexAddress(DV, Die, dwarf::DW_AT_location, Location);
470 else if (DV.isBlockByrefVariable())
471 addBlockByrefAddress(DV, Die, dwarf::DW_AT_location, Location);
473 addAddress(Die, dwarf::DW_AT_location, Location,
474 DV.getVariable().isIndirect());
477 /// addRegisterOp - Add register operand.
478 void CompileUnit::addRegisterOp(DIEBlock *TheDie, unsigned Reg) {
479 const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
480 unsigned DWReg = RI->getDwarfRegNum(Reg, false);
482 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + DWReg);
484 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_regx);
485 addUInt(TheDie, dwarf::DW_FORM_udata, DWReg);
489 /// addRegisterOffset - Add register offset.
490 void CompileUnit::addRegisterOffset(DIEBlock *TheDie, unsigned Reg,
492 const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
493 unsigned DWReg = RI->getDwarfRegNum(Reg, false);
494 const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
495 if (Reg == TRI->getFrameRegister(*Asm->MF))
496 // If variable offset is based in frame register then use fbreg.
497 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_fbreg);
499 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + DWReg);
501 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx);
502 addUInt(TheDie, dwarf::DW_FORM_udata, DWReg);
504 addSInt(TheDie, dwarf::DW_FORM_sdata, Offset);
507 /// addAddress - Add an address attribute to a die based on the location
509 void CompileUnit::addAddress(DIE *Die, dwarf::Attribute Attribute,
510 const MachineLocation &Location, bool Indirect) {
511 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
513 if (Location.isReg() && !Indirect)
514 addRegisterOp(Block, Location.getReg());
516 addRegisterOffset(Block, Location.getReg(), Location.getOffset());
517 if (Indirect && !Location.isReg()) {
518 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
522 // Now attach the location information to the DIE.
523 addBlock(Die, Attribute, Block);
526 /// addComplexAddress - Start with the address based on the location provided,
527 /// and generate the DWARF information necessary to find the actual variable
528 /// given the extra address information encoded in the DIVariable, starting from
529 /// the starting location. Add the DWARF information to the die.
531 void CompileUnit::addComplexAddress(const DbgVariable &DV, DIE *Die,
532 dwarf::Attribute Attribute,
533 const MachineLocation &Location) {
534 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
535 unsigned N = DV.getNumAddrElements();
537 if (Location.isReg()) {
538 if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
539 // If first address element is OpPlus then emit
540 // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
541 addRegisterOffset(Block, Location.getReg(), DV.getAddrElement(1));
544 addRegisterOp(Block, Location.getReg());
546 addRegisterOffset(Block, Location.getReg(), Location.getOffset());
549 uint64_t Element = DV.getAddrElement(i);
550 if (Element == DIBuilder::OpPlus) {
551 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
552 addUInt(Block, dwarf::DW_FORM_udata, DV.getAddrElement(++i));
553 } else if (Element == DIBuilder::OpDeref) {
554 if (!Location.isReg())
555 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
557 llvm_unreachable("unknown DIBuilder Opcode");
560 // Now attach the location information to the DIE.
561 addBlock(Die, Attribute, Block);
564 /* Byref variables, in Blocks, are declared by the programmer as "SomeType
565 VarName;", but the compiler creates a __Block_byref_x_VarName struct, and
566 gives the variable VarName either the struct, or a pointer to the struct, as
567 its type. This is necessary for various behind-the-scenes things the
568 compiler needs to do with by-reference variables in Blocks.
570 However, as far as the original *programmer* is concerned, the variable
571 should still have type 'SomeType', as originally declared.
573 The function getBlockByrefType dives into the __Block_byref_x_VarName
574 struct to find the original type of the variable, which is then assigned to
575 the variable's Debug Information Entry as its real type. So far, so good.
576 However now the debugger will expect the variable VarName to have the type
577 SomeType. So we need the location attribute for the variable to be an
578 expression that explains to the debugger how to navigate through the
579 pointers and struct to find the actual variable of type SomeType.
581 The following function does just that. We start by getting
582 the "normal" location for the variable. This will be the location
583 of either the struct __Block_byref_x_VarName or the pointer to the
584 struct __Block_byref_x_VarName.
586 The struct will look something like:
588 struct __Block_byref_x_VarName {
590 struct __Block_byref_x_VarName *forwarding;
591 ... <various other fields>
593 ... <maybe more fields>
596 If we are given the struct directly (as our starting point) we
597 need to tell the debugger to:
599 1). Add the offset of the forwarding field.
601 2). Follow that pointer to get the real __Block_byref_x_VarName
602 struct to use (the real one may have been copied onto the heap).
604 3). Add the offset for the field VarName, to find the actual variable.
606 If we started with a pointer to the struct, then we need to
607 dereference that pointer first, before the other steps.
608 Translating this into DWARF ops, we will need to append the following
609 to the current location description for the variable:
611 DW_OP_deref -- optional, if we start with a pointer
612 DW_OP_plus_uconst <forward_fld_offset>
614 DW_OP_plus_uconst <varName_fld_offset>
616 That is what this function does. */
618 /// addBlockByrefAddress - Start with the address based on the location
619 /// provided, and generate the DWARF information necessary to find the
620 /// actual Block variable (navigating the Block struct) based on the
621 /// starting location. Add the DWARF information to the die. For
622 /// more information, read large comment just above here.
624 void CompileUnit::addBlockByrefAddress(const DbgVariable &DV, DIE *Die,
625 dwarf::Attribute Attribute,
626 const MachineLocation &Location) {
627 DIType Ty = DV.getType();
629 uint16_t Tag = Ty.getTag();
630 bool isPointer = false;
632 StringRef varName = DV.getName();
634 if (Tag == dwarf::DW_TAG_pointer_type) {
635 DIDerivedType DTy(Ty);
636 TmpTy = resolve(DTy.getTypeDerivedFrom());
640 DICompositeType blockStruct(TmpTy);
642 // Find the __forwarding field and the variable field in the __Block_byref
644 DIArray Fields = blockStruct.getTypeArray();
645 DIDerivedType varField;
646 DIDerivedType forwardingField;
648 for (unsigned i = 0, N = Fields.getNumElements(); i < N; ++i) {
649 DIDerivedType DT(Fields.getElement(i));
650 StringRef fieldName = DT.getName();
651 if (fieldName == "__forwarding")
652 forwardingField = DT;
653 else if (fieldName == varName)
657 // Get the offsets for the forwarding field and the variable field.
658 unsigned forwardingFieldOffset = forwardingField.getOffsetInBits() >> 3;
659 unsigned varFieldOffset = varField.getOffsetInBits() >> 2;
661 // Decode the original location, and use that as the start of the byref
662 // variable's location.
663 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
665 if (Location.isReg())
666 addRegisterOp(Block, Location.getReg());
668 addRegisterOffset(Block, Location.getReg(), Location.getOffset());
670 // If we started with a pointer to the __Block_byref... struct, then
671 // the first thing we need to do is dereference the pointer (DW_OP_deref).
673 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
675 // Next add the offset for the '__forwarding' field:
676 // DW_OP_plus_uconst ForwardingFieldOffset. Note there's no point in
677 // adding the offset if it's 0.
678 if (forwardingFieldOffset > 0) {
679 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
680 addUInt(Block, dwarf::DW_FORM_udata, forwardingFieldOffset);
683 // Now dereference the __forwarding field to get to the real __Block_byref
684 // struct: DW_OP_deref.
685 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
687 // Now that we've got the real __Block_byref... struct, add the offset
688 // for the variable's field to get to the location of the actual variable:
689 // DW_OP_plus_uconst varFieldOffset. Again, don't add if it's 0.
690 if (varFieldOffset > 0) {
691 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
692 addUInt(Block, dwarf::DW_FORM_udata, varFieldOffset);
695 // Now attach the location information to the DIE.
696 addBlock(Die, Attribute, Block);
699 /// isTypeSigned - Return true if the type is signed.
700 static bool isTypeSigned(DwarfDebug *DD, DIType Ty, int *SizeInBits) {
701 if (Ty.isDerivedType())
702 return isTypeSigned(DD, DD->resolve(DIDerivedType(Ty).getTypeDerivedFrom()),
704 if (Ty.isBasicType())
705 if (DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed ||
706 DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed_char) {
707 *SizeInBits = Ty.getSizeInBits();
713 /// Return true if type encoding is unsigned.
714 static bool isUnsignedDIType(DwarfDebug *DD, DIType Ty) {
715 DIDerivedType DTy(Ty);
716 if (DTy.isDerivedType())
717 return isUnsignedDIType(DD, DD->resolve(DTy.getTypeDerivedFrom()));
720 if (BTy.isBasicType()) {
721 unsigned Encoding = BTy.getEncoding();
722 if (Encoding == dwarf::DW_ATE_unsigned ||
723 Encoding == dwarf::DW_ATE_unsigned_char ||
724 Encoding == dwarf::DW_ATE_boolean)
730 /// If this type is derived from a base type then return base type size.
731 static uint64_t getBaseTypeSize(DwarfDebug *DD, DIDerivedType Ty) {
732 unsigned Tag = Ty.getTag();
734 if (Tag != dwarf::DW_TAG_member && Tag != dwarf::DW_TAG_typedef &&
735 Tag != dwarf::DW_TAG_const_type && Tag != dwarf::DW_TAG_volatile_type &&
736 Tag != dwarf::DW_TAG_restrict_type)
737 return Ty.getSizeInBits();
739 DIType BaseType = DD->resolve(Ty.getTypeDerivedFrom());
741 // If this type is not derived from any type then take conservative approach.
742 if (!BaseType.isValid())
743 return Ty.getSizeInBits();
745 // If this is a derived type, go ahead and get the base type, unless it's a
746 // reference then it's just the size of the field. Pointer types have no need
747 // of this since they're a different type of qualification on the type.
748 if (BaseType.getTag() == dwarf::DW_TAG_reference_type ||
749 BaseType.getTag() == dwarf::DW_TAG_rvalue_reference_type)
750 return Ty.getSizeInBits();
752 if (BaseType.isDerivedType())
753 return getBaseTypeSize(DD, DIDerivedType(BaseType));
755 return BaseType.getSizeInBits();
758 /// addConstantValue - Add constant value entry in variable DIE.
759 void CompileUnit::addConstantValue(DIE *Die, const MachineOperand &MO,
761 // FIXME: This is a bit conservative/simple - it emits negative values at
762 // their maximum bit width which is a bit unfortunate (& doesn't prefer
763 // udata/sdata over dataN as suggested by the DWARF spec)
764 assert(MO.isImm() && "Invalid machine operand!");
766 bool SignedConstant = isTypeSigned(DD, Ty, &SizeInBits);
769 // If we're a signed constant definitely use sdata.
770 if (SignedConstant) {
771 addSInt(Die, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, MO.getImm());
775 // Else use data for now unless it's larger than we can deal with.
776 switch (SizeInBits) {
778 Form = dwarf::DW_FORM_data1;
781 Form = dwarf::DW_FORM_data2;
784 Form = dwarf::DW_FORM_data4;
787 Form = dwarf::DW_FORM_data8;
790 Form = dwarf::DW_FORM_udata;
791 addUInt(Die, dwarf::DW_AT_const_value, Form, MO.getImm());
794 addUInt(Die, dwarf::DW_AT_const_value, Form, MO.getImm());
797 /// addConstantFPValue - Add constant value entry in variable DIE.
798 void CompileUnit::addConstantFPValue(DIE *Die, const MachineOperand &MO) {
799 assert(MO.isFPImm() && "Invalid machine operand!");
800 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
801 APFloat FPImm = MO.getFPImm()->getValueAPF();
803 // Get the raw data form of the floating point.
804 const APInt FltVal = FPImm.bitcastToAPInt();
805 const char *FltPtr = (const char *)FltVal.getRawData();
807 int NumBytes = FltVal.getBitWidth() / 8; // 8 bits per byte.
808 bool LittleEndian = Asm->getDataLayout().isLittleEndian();
809 int Incr = (LittleEndian ? 1 : -1);
810 int Start = (LittleEndian ? 0 : NumBytes - 1);
811 int Stop = (LittleEndian ? NumBytes : -1);
813 // Output the constant to DWARF one byte at a time.
814 for (; Start != Stop; Start += Incr)
815 addUInt(Block, dwarf::DW_FORM_data1, (unsigned char)0xFF & FltPtr[Start]);
817 addBlock(Die, dwarf::DW_AT_const_value, Block);
820 /// addConstantFPValue - Add constant value entry in variable DIE.
821 void CompileUnit::addConstantFPValue(DIE *Die, const ConstantFP *CFP) {
822 // Pass this down to addConstantValue as an unsigned bag of bits.
823 addConstantValue(Die, CFP->getValueAPF().bitcastToAPInt(), true);
826 /// addConstantValue - Add constant value entry in variable DIE.
827 void CompileUnit::addConstantValue(DIE *Die, const ConstantInt *CI,
829 addConstantValue(Die, CI->getValue(), Unsigned);
832 // addConstantValue - Add constant value entry in variable DIE.
833 void CompileUnit::addConstantValue(DIE *Die, const APInt &Val, bool Unsigned) {
834 unsigned CIBitWidth = Val.getBitWidth();
835 if (CIBitWidth <= 64) {
836 // If we're a signed constant definitely use sdata.
838 addSInt(Die, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata,
843 // Else use data for now unless it's larger than we can deal with.
845 switch (CIBitWidth) {
847 Form = dwarf::DW_FORM_data1;
850 Form = dwarf::DW_FORM_data2;
853 Form = dwarf::DW_FORM_data4;
856 Form = dwarf::DW_FORM_data8;
859 addUInt(Die, dwarf::DW_AT_const_value, dwarf::DW_FORM_udata,
863 addUInt(Die, dwarf::DW_AT_const_value, Form, Val.getZExtValue());
867 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
869 // Get the raw data form of the large APInt.
870 const uint64_t *Ptr64 = Val.getRawData();
872 int NumBytes = Val.getBitWidth() / 8; // 8 bits per byte.
873 bool LittleEndian = Asm->getDataLayout().isLittleEndian();
875 // Output the constant to DWARF one byte at a time.
876 for (int i = 0; i < NumBytes; i++) {
879 c = Ptr64[i / 8] >> (8 * (i & 7));
881 c = Ptr64[(NumBytes - 1 - i) / 8] >> (8 * ((NumBytes - 1 - i) & 7));
882 addUInt(Block, dwarf::DW_FORM_data1, c);
885 addBlock(Die, dwarf::DW_AT_const_value, Block);
888 /// addTemplateParams - Add template parameters into buffer.
889 void CompileUnit::addTemplateParams(DIE &Buffer, DIArray TParams) {
890 // Add template parameters.
891 for (unsigned i = 0, e = TParams.getNumElements(); i != e; ++i) {
892 DIDescriptor Element = TParams.getElement(i);
893 if (Element.isTemplateTypeParameter())
894 constructTemplateTypeParameterDIE(Buffer,
895 DITemplateTypeParameter(Element));
896 else if (Element.isTemplateValueParameter())
897 constructTemplateValueParameterDIE(Buffer,
898 DITemplateValueParameter(Element));
902 /// getOrCreateContextDIE - Get context owner's DIE.
903 DIE *CompileUnit::getOrCreateContextDIE(DIScope Context) {
904 if (!Context || Context.isFile())
906 if (Context.isType())
907 return getOrCreateTypeDIE(DIType(Context));
908 if (Context.isNameSpace())
909 return getOrCreateNameSpace(DINameSpace(Context));
910 if (Context.isSubprogram())
911 return getOrCreateSubprogramDIE(DISubprogram(Context));
912 return getDIE(Context);
915 DIE *CompileUnit::createTypeDIE(DICompositeType Ty) {
916 DIE *ContextDIE = getOrCreateContextDIE(resolve(Ty.getContext()));
918 DIE *TyDIE = getDIE(Ty);
923 TyDIE = createAndAddDIE(Ty.getTag(), *ContextDIE, Ty);
925 constructTypeDIEImpl(*TyDIE, Ty);
927 updateAcceleratorTables(Ty, TyDIE);
931 /// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
933 DIE *CompileUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
940 // Construct the context before querying for the existence of the DIE in case
941 // such construction creates the DIE.
942 DIE *ContextDIE = getOrCreateContextDIE(resolve(Ty.getContext()));
945 DIE *TyDIE = getDIE(Ty);
950 TyDIE = createAndAddDIE(Ty.getTag(), *ContextDIE, Ty);
952 if (Ty.isBasicType())
953 constructTypeDIE(*TyDIE, DIBasicType(Ty));
954 else if (Ty.isCompositeType())
955 constructTypeDIE(*TyDIE, DICompositeType(Ty));
957 assert(Ty.isDerivedType() && "Unknown kind of DIType");
958 constructTypeDIE(*TyDIE, DIDerivedType(Ty));
961 updateAcceleratorTables(Ty, TyDIE);
966 void CompileUnit::updateAcceleratorTables(DIType Ty, const DIE *TyDIE) {
967 if (!Ty.getName().empty() && !Ty.isForwardDecl()) {
968 bool IsImplementation = 0;
969 if (Ty.isCompositeType()) {
970 DICompositeType CT(Ty);
971 // A runtime language of 0 actually means C/C++ and that any
972 // non-negative value is some version of Objective-C/C++.
973 IsImplementation = (CT.getRunTimeLang() == 0) || CT.isObjcClassComplete();
975 unsigned Flags = IsImplementation ? dwarf::DW_FLAG_type_implementation : 0;
976 addAccelType(Ty.getName(), std::make_pair(TyDIE, Flags));
980 /// addType - Add a new type attribute to the specified entity.
981 void CompileUnit::addType(DIE *Entity, DIType Ty, dwarf::Attribute Attribute) {
982 assert(Ty && "Trying to add a type that doesn't exist?");
984 // Check for pre-existence.
985 DIEEntry *Entry = getDIEEntry(Ty);
986 // If it exists then use the existing value.
988 addDIEEntry(Entity, Attribute, Entry);
993 DIE *Buffer = getOrCreateTypeDIE(Ty);
996 Entry = createDIEEntry(Buffer);
997 insertDIEEntry(Ty, Entry);
998 addDIEEntry(Entity, Attribute, Entry);
1000 // If this is a complete composite type then include it in the
1001 // list of global types.
1005 // Accelerator table mutators - add each name along with its companion
1006 // DIE to the proper table while ensuring that the name that we're going
1007 // to reference is in the string table. We do this since the names we
1008 // add may not only be identical to the names in the DIE.
1009 void CompileUnit::addAccelName(StringRef Name, const DIE *Die) {
1010 DU->getStringPoolEntry(Name);
1011 std::vector<const DIE *> &DIEs = AccelNames[Name];
1012 DIEs.push_back(Die);
1015 void CompileUnit::addAccelObjC(StringRef Name, const DIE *Die) {
1016 DU->getStringPoolEntry(Name);
1017 std::vector<const DIE *> &DIEs = AccelObjC[Name];
1018 DIEs.push_back(Die);
1021 void CompileUnit::addAccelNamespace(StringRef Name, const DIE *Die) {
1022 DU->getStringPoolEntry(Name);
1023 std::vector<const DIE *> &DIEs = AccelNamespace[Name];
1024 DIEs.push_back(Die);
1027 void CompileUnit::addAccelType(StringRef Name,
1028 std::pair<const DIE *, unsigned> Die) {
1029 DU->getStringPoolEntry(Name);
1030 std::vector<std::pair<const DIE *, unsigned> > &DIEs = AccelTypes[Name];
1031 DIEs.push_back(Die);
1034 /// addGlobalName - Add a new global name to the compile unit.
1035 void CompileUnit::addGlobalName(StringRef Name, DIE *Die, DIScope Context) {
1036 std::string FullName = getParentContextString(Context) + Name.str();
1037 GlobalNames[FullName] = Die;
1040 /// addGlobalType - Add a new global type to the compile unit.
1042 void CompileUnit::addGlobalType(DIType Ty) {
1043 DIScope Context = resolve(Ty.getContext());
1044 if (!Ty.getName().empty() && !Ty.isForwardDecl() &&
1045 (!Context || Context.isCompileUnit() || Context.isFile() ||
1046 Context.isNameSpace()))
1047 if (DIEEntry *Entry = getDIEEntry(Ty)) {
1048 std::string FullName =
1049 getParentContextString(Context) + Ty.getName().str();
1050 GlobalTypes[FullName] = Entry->getEntry();
1054 /// getParentContextString - Walks the metadata parent chain in a language
1055 /// specific manner (using the compile unit language) and returns
1056 /// it as a string. This is done at the metadata level because DIEs may
1057 /// not currently have been added to the parent context and walking the
1058 /// DIEs looking for names is more expensive than walking the metadata.
1059 std::string CompileUnit::getParentContextString(DIScope Context) const {
1063 // FIXME: Decide whether to implement this for non-C++ languages.
1064 if (getLanguage() != dwarf::DW_LANG_C_plus_plus)
1068 SmallVector<DIScope, 1> Parents;
1069 while (!Context.isCompileUnit()) {
1070 Parents.push_back(Context);
1071 if (Context.getContext())
1072 Context = resolve(Context.getContext());
1074 // Structure, etc types will have a NULL context if they're at the top
1079 // Reverse iterate over our list to go from the outermost construct to the
1081 for (SmallVectorImpl<DIScope>::reverse_iterator I = Parents.rbegin(),
1085 StringRef Name = Ctx.getName();
1086 if (!Name.empty()) {
1094 /// addPubTypes - Add subprogram argument types for pubtypes section.
1095 void CompileUnit::addPubTypes(DISubprogram SP) {
1096 DICompositeType SPTy = SP.getType();
1097 uint16_t SPTag = SPTy.getTag();
1098 if (SPTag != dwarf::DW_TAG_subroutine_type)
1101 DIArray Args = SPTy.getTypeArray();
1102 for (unsigned i = 0, e = Args.getNumElements(); i != e; ++i) {
1103 DIType ATy(Args.getElement(i));
1110 /// constructTypeDIE - Construct basic type die from DIBasicType.
1111 void CompileUnit::constructTypeDIE(DIE &Buffer, DIBasicType BTy) {
1112 // Get core information.
1113 StringRef Name = BTy.getName();
1114 // Add name if not anonymous or intermediate type.
1116 addString(&Buffer, dwarf::DW_AT_name, Name);
1118 // An unspecified type only has a name attribute.
1119 if (BTy.getTag() == dwarf::DW_TAG_unspecified_type)
1122 addUInt(&Buffer, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1125 uint64_t Size = BTy.getSizeInBits() >> 3;
1126 addUInt(&Buffer, dwarf::DW_AT_byte_size, None, Size);
1129 /// constructTypeDIE - Construct derived type die from DIDerivedType.
1130 void CompileUnit::constructTypeDIE(DIE &Buffer, DIDerivedType DTy) {
1131 // Get core information.
1132 StringRef Name = DTy.getName();
1133 uint64_t Size = DTy.getSizeInBits() >> 3;
1134 uint16_t Tag = Buffer.getTag();
1136 // Map to main type, void will not have a type.
1137 DIType FromTy = resolve(DTy.getTypeDerivedFrom());
1139 addType(&Buffer, FromTy);
1141 // Add name if not anonymous or intermediate type.
1143 addString(&Buffer, dwarf::DW_AT_name, Name);
1145 // Add size if non-zero (derived types might be zero-sized.)
1146 if (Size && Tag != dwarf::DW_TAG_pointer_type)
1147 addUInt(&Buffer, dwarf::DW_AT_byte_size, None, Size);
1149 if (Tag == dwarf::DW_TAG_ptr_to_member_type)
1150 addDIEEntry(&Buffer, dwarf::DW_AT_containing_type,
1151 getOrCreateTypeDIE(resolve(DTy.getClassType())));
1152 // Add source line info if available and TyDesc is not a forward declaration.
1153 if (!DTy.isForwardDecl())
1154 addSourceLine(&Buffer, DTy);
1157 /// Return true if the type is appropriately scoped to be contained inside
1158 /// its own type unit.
1159 static bool isTypeUnitScoped(DIType Ty, const DwarfDebug *DD) {
1160 DIScope Parent = DD->resolve(Ty.getContext());
1162 // Don't generate a hash for anything scoped inside a function.
1163 if (Parent.isSubprogram())
1165 Parent = DD->resolve(Parent.getContext());
1170 /// Return true if the type should be split out into a type unit.
1171 static bool shouldCreateTypeUnit(DICompositeType CTy, const DwarfDebug *DD) {
1172 if (!GenerateTypeUnits)
1175 uint16_t Tag = CTy.getTag();
1178 case dwarf::DW_TAG_structure_type:
1179 case dwarf::DW_TAG_union_type:
1180 case dwarf::DW_TAG_enumeration_type:
1181 case dwarf::DW_TAG_class_type:
1182 // If this is a class, structure, union, or enumeration type
1183 // that is a definition (not a declaration), and not scoped
1184 // inside a function then separate this out as a type unit.
1185 return !CTy.isForwardDecl() && isTypeUnitScoped(CTy, DD);
1191 /// constructTypeDIE - Construct type DIE from DICompositeType.
1192 void CompileUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
1193 // If this is a type applicable to a type unit it then add it to the
1194 // list of types we'll compute a hash for later.
1195 if (shouldCreateTypeUnit(CTy, DD))
1196 DD->addTypeUnitType(&Buffer, CTy);
1198 constructTypeDIEImpl(Buffer, CTy);
1201 void CompileUnit::constructTypeDIEImpl(DIE &Buffer, DICompositeType CTy) {
1202 // Add name if not anonymous or intermediate type.
1203 StringRef Name = CTy.getName();
1205 uint64_t Size = CTy.getSizeInBits() >> 3;
1206 uint16_t Tag = Buffer.getTag();
1209 case dwarf::DW_TAG_array_type:
1210 constructArrayTypeDIE(Buffer, CTy);
1212 case dwarf::DW_TAG_enumeration_type:
1213 constructEnumTypeDIE(Buffer, CTy);
1215 case dwarf::DW_TAG_subroutine_type: {
1216 // Add return type. A void return won't have a type.
1217 DIArray Elements = CTy.getTypeArray();
1218 DIType RTy(Elements.getElement(0));
1220 addType(&Buffer, RTy);
1222 bool isPrototyped = true;
1224 for (unsigned i = 1, N = Elements.getNumElements(); i < N; ++i) {
1225 DIDescriptor Ty = Elements.getElement(i);
1226 if (Ty.isUnspecifiedParameter()) {
1227 createAndAddDIE(dwarf::DW_TAG_unspecified_parameters, Buffer);
1228 isPrototyped = false;
1230 DIE *Arg = createAndAddDIE(dwarf::DW_TAG_formal_parameter, Buffer);
1231 addType(Arg, DIType(Ty));
1232 if (DIType(Ty).isArtificial())
1233 addFlag(Arg, dwarf::DW_AT_artificial);
1236 // Add prototype flag if we're dealing with a C language and the
1237 // function has been prototyped.
1238 uint16_t Language = getLanguage();
1240 (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||
1241 Language == dwarf::DW_LANG_ObjC))
1242 addFlag(&Buffer, dwarf::DW_AT_prototyped);
1244 case dwarf::DW_TAG_structure_type:
1245 case dwarf::DW_TAG_union_type:
1246 case dwarf::DW_TAG_class_type: {
1247 // Add elements to structure type.
1248 DIArray Elements = CTy.getTypeArray();
1249 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1250 DIDescriptor Element = Elements.getElement(i);
1251 DIE *ElemDie = NULL;
1252 if (Element.isSubprogram()) {
1253 DISubprogram SP(Element);
1254 ElemDie = getOrCreateSubprogramDIE(SP);
1255 if (SP.isProtected())
1256 addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1257 dwarf::DW_ACCESS_protected);
1258 else if (SP.isPrivate())
1259 addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1260 dwarf::DW_ACCESS_private);
1262 addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1263 dwarf::DW_ACCESS_public);
1264 if (SP.isExplicit())
1265 addFlag(ElemDie, dwarf::DW_AT_explicit);
1266 } else if (Element.isDerivedType()) {
1267 DIDerivedType DDTy(Element);
1268 if (DDTy.getTag() == dwarf::DW_TAG_friend) {
1269 ElemDie = createAndAddDIE(dwarf::DW_TAG_friend, Buffer);
1270 addType(ElemDie, resolve(DDTy.getTypeDerivedFrom()),
1271 dwarf::DW_AT_friend);
1272 } else if (DDTy.isStaticMember()) {
1273 getOrCreateStaticMemberDIE(DDTy);
1275 constructMemberDIE(Buffer, DDTy);
1277 } else if (Element.isObjCProperty()) {
1278 DIObjCProperty Property(Element);
1279 ElemDie = createAndAddDIE(Property.getTag(), Buffer);
1280 StringRef PropertyName = Property.getObjCPropertyName();
1281 addString(ElemDie, dwarf::DW_AT_APPLE_property_name, PropertyName);
1282 addType(ElemDie, Property.getType());
1283 addSourceLine(ElemDie, Property);
1284 StringRef GetterName = Property.getObjCPropertyGetterName();
1285 if (!GetterName.empty())
1286 addString(ElemDie, dwarf::DW_AT_APPLE_property_getter, GetterName);
1287 StringRef SetterName = Property.getObjCPropertySetterName();
1288 if (!SetterName.empty())
1289 addString(ElemDie, dwarf::DW_AT_APPLE_property_setter, SetterName);
1290 unsigned PropertyAttributes = 0;
1291 if (Property.isReadOnlyObjCProperty())
1292 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readonly;
1293 if (Property.isReadWriteObjCProperty())
1294 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readwrite;
1295 if (Property.isAssignObjCProperty())
1296 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_assign;
1297 if (Property.isRetainObjCProperty())
1298 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_retain;
1299 if (Property.isCopyObjCProperty())
1300 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_copy;
1301 if (Property.isNonAtomicObjCProperty())
1302 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_nonatomic;
1303 if (PropertyAttributes)
1304 addUInt(ElemDie, dwarf::DW_AT_APPLE_property_attribute, None,
1305 PropertyAttributes);
1307 DIEEntry *Entry = getDIEEntry(Element);
1309 Entry = createDIEEntry(ElemDie);
1310 insertDIEEntry(Element, Entry);
1316 if (CTy.isAppleBlockExtension())
1317 addFlag(&Buffer, dwarf::DW_AT_APPLE_block);
1319 DICompositeType ContainingType(resolve(CTy.getContainingType()));
1321 addDIEEntry(&Buffer, dwarf::DW_AT_containing_type,
1322 getOrCreateTypeDIE(ContainingType));
1324 if (CTy.isObjcClassComplete())
1325 addFlag(&Buffer, dwarf::DW_AT_APPLE_objc_complete_type);
1327 // Add template parameters to a class, structure or union types.
1328 // FIXME: The support isn't in the metadata for this yet.
1329 if (Tag == dwarf::DW_TAG_class_type ||
1330 Tag == dwarf::DW_TAG_structure_type || Tag == dwarf::DW_TAG_union_type)
1331 addTemplateParams(Buffer, CTy.getTemplateParams());
1339 // Add name if not anonymous or intermediate type.
1341 addString(&Buffer, dwarf::DW_AT_name, Name);
1343 if (Tag == dwarf::DW_TAG_enumeration_type ||
1344 Tag == dwarf::DW_TAG_class_type || Tag == dwarf::DW_TAG_structure_type ||
1345 Tag == dwarf::DW_TAG_union_type) {
1346 // Add size if non-zero (derived types might be zero-sized.)
1347 // TODO: Do we care about size for enum forward declarations?
1349 addUInt(&Buffer, dwarf::DW_AT_byte_size, None, Size);
1350 else if (!CTy.isForwardDecl())
1351 // Add zero size if it is not a forward declaration.
1352 addUInt(&Buffer, dwarf::DW_AT_byte_size, None, 0);
1354 // If we're a forward decl, say so.
1355 if (CTy.isForwardDecl())
1356 addFlag(&Buffer, dwarf::DW_AT_declaration);
1358 // Add source line info if available.
1359 if (!CTy.isForwardDecl())
1360 addSourceLine(&Buffer, CTy);
1362 // No harm in adding the runtime language to the declaration.
1363 unsigned RLang = CTy.getRunTimeLang();
1365 addUInt(&Buffer, dwarf::DW_AT_APPLE_runtime_class, dwarf::DW_FORM_data1,
1370 /// constructTemplateTypeParameterDIE - Construct new DIE for the given
1371 /// DITemplateTypeParameter.
1373 CompileUnit::constructTemplateTypeParameterDIE(DIE &Buffer,
1374 DITemplateTypeParameter TP) {
1376 createAndAddDIE(dwarf::DW_TAG_template_type_parameter, Buffer);
1377 // Add the type if it exists, it could be void and therefore no type.
1379 addType(ParamDIE, resolve(TP.getType()));
1380 if (!TP.getName().empty())
1381 addString(ParamDIE, dwarf::DW_AT_name, TP.getName());
1384 /// constructTemplateValueParameterDIE - Construct new DIE for the given
1385 /// DITemplateValueParameter.
1387 CompileUnit::constructTemplateValueParameterDIE(DIE &Buffer,
1388 DITemplateValueParameter VP) {
1389 DIE *ParamDIE = createAndAddDIE(VP.getTag(), Buffer);
1391 // Add the type if there is one, template template and template parameter
1392 // packs will not have a type.
1393 if (VP.getTag() == dwarf::DW_TAG_template_value_parameter)
1394 addType(ParamDIE, resolve(VP.getType()));
1395 if (!VP.getName().empty())
1396 addString(ParamDIE, dwarf::DW_AT_name, VP.getName());
1397 if (Value *Val = VP.getValue()) {
1398 if (ConstantInt *CI = dyn_cast<ConstantInt>(Val))
1399 addConstantValue(ParamDIE, CI,
1400 isUnsignedDIType(DD, resolve(VP.getType())));
1401 else if (GlobalValue *GV = dyn_cast<GlobalValue>(Val)) {
1402 // For declaration non-type template parameters (such as global values and
1404 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1405 addOpAddress(Block, Asm->getSymbol(GV));
1406 // Emit DW_OP_stack_value to use the address as the immediate value of the
1407 // parameter, rather than a pointer to it.
1408 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_stack_value);
1409 addBlock(ParamDIE, dwarf::DW_AT_location, Block);
1410 } else if (VP.getTag() == dwarf::DW_TAG_GNU_template_template_param) {
1411 assert(isa<MDString>(Val));
1412 addString(ParamDIE, dwarf::DW_AT_GNU_template_name,
1413 cast<MDString>(Val)->getString());
1414 } else if (VP.getTag() == dwarf::DW_TAG_GNU_template_parameter_pack) {
1415 assert(isa<MDNode>(Val));
1416 DIArray A(cast<MDNode>(Val));
1417 addTemplateParams(*ParamDIE, A);
1422 /// getOrCreateNameSpace - Create a DIE for DINameSpace.
1423 DIE *CompileUnit::getOrCreateNameSpace(DINameSpace NS) {
1424 // Construct the context before querying for the existence of the DIE in case
1425 // such construction creates the DIE.
1426 DIE *ContextDIE = getOrCreateContextDIE(NS.getContext());
1428 DIE *NDie = getDIE(NS);
1431 NDie = createAndAddDIE(dwarf::DW_TAG_namespace, *ContextDIE, NS);
1433 if (!NS.getName().empty()) {
1434 addString(NDie, dwarf::DW_AT_name, NS.getName());
1435 addAccelNamespace(NS.getName(), NDie);
1436 addGlobalName(NS.getName(), NDie, NS.getContext());
1438 addAccelNamespace("(anonymous namespace)", NDie);
1439 addSourceLine(NDie, NS);
1443 /// getOrCreateSubprogramDIE - Create new DIE using SP.
1444 DIE *CompileUnit::getOrCreateSubprogramDIE(DISubprogram SP) {
1445 // Construct the context before querying for the existence of the DIE in case
1446 // such construction creates the DIE (as is the case for member function
1448 DIE *ContextDIE = getOrCreateContextDIE(resolve(SP.getContext()));
1450 DIE *SPDie = getDIE(SP);
1454 DISubprogram SPDecl = SP.getFunctionDeclaration();
1455 if (SPDecl.isSubprogram())
1456 // Add subprogram definitions to the CU die directly.
1457 ContextDIE = CUDie.get();
1459 // DW_TAG_inlined_subroutine may refer to this DIE.
1460 SPDie = createAndAddDIE(dwarf::DW_TAG_subprogram, *ContextDIE, SP);
1462 DIE *DeclDie = NULL;
1463 if (SPDecl.isSubprogram())
1464 DeclDie = getOrCreateSubprogramDIE(SPDecl);
1466 // Add function template parameters.
1467 addTemplateParams(*SPDie, SP.getTemplateParams());
1469 // If this DIE is going to refer declaration info using AT_specification
1470 // then there is no need to add other attributes.
1472 // Refer function declaration directly.
1473 addDIEEntry(SPDie, dwarf::DW_AT_specification, DeclDie);
1478 // Add the linkage name if we have one.
1479 StringRef LinkageName = SP.getLinkageName();
1480 if (!LinkageName.empty())
1481 addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
1482 GlobalValue::getRealLinkageName(LinkageName));
1484 // Constructors and operators for anonymous aggregates do not have names.
1485 if (!SP.getName().empty())
1486 addString(SPDie, dwarf::DW_AT_name, SP.getName());
1488 addSourceLine(SPDie, SP);
1490 // Add the prototype if we have a prototype and we have a C like
1492 uint16_t Language = getLanguage();
1493 if (SP.isPrototyped() &&
1494 (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||
1495 Language == dwarf::DW_LANG_ObjC))
1496 addFlag(SPDie, dwarf::DW_AT_prototyped);
1498 DICompositeType SPTy = SP.getType();
1499 assert(SPTy.getTag() == dwarf::DW_TAG_subroutine_type &&
1500 "the type of a subprogram should be a subroutine");
1502 DIArray Args = SPTy.getTypeArray();
1503 // Add a return type. If this is a type like a C/C++ void type we don't add a
1505 if (Args.getElement(0))
1506 addType(SPDie, DIType(Args.getElement(0)));
1508 unsigned VK = SP.getVirtuality();
1510 addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1, VK);
1511 DIEBlock *Block = getDIEBlock();
1512 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1513 addUInt(Block, dwarf::DW_FORM_udata, SP.getVirtualIndex());
1514 addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, Block);
1515 ContainingTypeMap.insert(
1516 std::make_pair(SPDie, resolve(SP.getContainingType())));
1519 if (!SP.isDefinition()) {
1520 addFlag(SPDie, dwarf::DW_AT_declaration);
1522 // Add arguments. Do not add arguments for subprogram definition. They will
1523 // be handled while processing variables.
1524 for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
1525 DIE *Arg = createAndAddDIE(dwarf::DW_TAG_formal_parameter, *SPDie);
1526 DIType ATy(Args.getElement(i));
1528 if (ATy.isArtificial())
1529 addFlag(Arg, dwarf::DW_AT_artificial);
1533 if (SP.isArtificial())
1534 addFlag(SPDie, dwarf::DW_AT_artificial);
1536 if (!SP.isLocalToUnit())
1537 addFlag(SPDie, dwarf::DW_AT_external);
1539 if (SP.isOptimized())
1540 addFlag(SPDie, dwarf::DW_AT_APPLE_optimized);
1542 if (unsigned isa = Asm->getISAEncoding()) {
1543 addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa);
1549 // Return const expression if value is a GEP to access merged global
1551 // i8* getelementptr ({ i8, i8, i8, i8 }* @_MergedGlobals, i32 0, i32 0)
1552 static const ConstantExpr *getMergedGlobalExpr(const Value *V) {
1553 const ConstantExpr *CE = dyn_cast_or_null<ConstantExpr>(V);
1554 if (!CE || CE->getNumOperands() != 3 ||
1555 CE->getOpcode() != Instruction::GetElementPtr)
1558 // First operand points to a global struct.
1559 Value *Ptr = CE->getOperand(0);
1560 if (!isa<GlobalValue>(Ptr) ||
1561 !isa<StructType>(cast<PointerType>(Ptr->getType())->getElementType()))
1564 // Second operand is zero.
1565 const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(CE->getOperand(1));
1566 if (!CI || !CI->isZero())
1569 // Third operand is offset.
1570 if (!isa<ConstantInt>(CE->getOperand(2)))
1576 /// createGlobalVariableDIE - create global variable DIE.
1577 void CompileUnit::createGlobalVariableDIE(DIGlobalVariable GV) {
1578 // Check for pre-existence.
1582 if (!GV.isGlobalVariable())
1585 DIScope GVContext = GV.getContext();
1586 DIType GTy = GV.getType();
1588 // If this is a static data member definition, some attributes belong
1589 // to the declaration DIE.
1590 DIE *VariableDIE = NULL;
1591 bool IsStaticMember = false;
1592 DIDerivedType SDMDecl = GV.getStaticDataMemberDeclaration();
1593 if (SDMDecl.Verify()) {
1594 assert(SDMDecl.isStaticMember() && "Expected static member decl");
1595 // We need the declaration DIE that is in the static member's class.
1596 VariableDIE = getOrCreateStaticMemberDIE(SDMDecl);
1597 IsStaticMember = true;
1600 // If this is not a static data member definition, create the variable
1601 // DIE and add the initial set of attributes to it.
1603 // Construct the context before querying for the existence of the DIE in
1604 // case such construction creates the DIE.
1605 DIE *ContextDIE = getOrCreateContextDIE(GVContext);
1608 VariableDIE = createAndAddDIE(GV.getTag(), *ContextDIE, GV);
1610 // Add name and type.
1611 addString(VariableDIE, dwarf::DW_AT_name, GV.getDisplayName());
1612 addType(VariableDIE, GTy);
1614 // Add scoping info.
1615 if (!GV.isLocalToUnit())
1616 addFlag(VariableDIE, dwarf::DW_AT_external);
1618 // Add line number info.
1619 addSourceLine(VariableDIE, GV);
1623 bool addToAccelTable = false;
1624 DIE *VariableSpecDIE = NULL;
1625 bool isGlobalVariable = GV.getGlobal() != NULL;
1626 if (isGlobalVariable) {
1627 addToAccelTable = true;
1628 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1629 const MCSymbol *Sym = Asm->getSymbol(GV.getGlobal());
1630 if (GV.getGlobal()->isThreadLocal()) {
1631 // FIXME: Make this work with -gsplit-dwarf.
1632 unsigned PointerSize = Asm->getDataLayout().getPointerSize();
1633 assert((PointerSize == 4 || PointerSize == 8) &&
1634 "Add support for other sizes if necessary");
1635 const MCExpr *Expr =
1636 Asm->getObjFileLowering().getDebugThreadLocalSymbol(Sym);
1637 // Based on GCC's support for TLS:
1638 if (!DD->useSplitDwarf()) {
1639 // 1) Start with a constNu of the appropriate pointer size
1640 addUInt(Block, dwarf::DW_FORM_data1,
1641 PointerSize == 4 ? dwarf::DW_OP_const4u : dwarf::DW_OP_const8u);
1642 // 2) containing the (relocated) offset of the TLS variable
1643 // within the module's TLS block.
1644 addExpr(Block, dwarf::DW_FORM_udata, Expr);
1646 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_const_index);
1647 addUInt(Block, dwarf::DW_FORM_udata, DU->getAddrPoolIndex(Expr));
1649 // 3) followed by a custom OP to make the debugger do a TLS lookup.
1650 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_push_tls_address);
1652 addOpAddress(Block, Sym);
1653 // Do not create specification DIE if context is either compile unit
1655 if (GVContext && GV.isDefinition() && !GVContext.isCompileUnit() &&
1656 !GVContext.isFile() && !DD->isSubprogramContext(GVContext)) {
1657 // Create specification DIE.
1658 VariableSpecDIE = createAndAddDIE(dwarf::DW_TAG_variable, *CUDie);
1659 addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification, VariableDIE);
1660 addBlock(VariableSpecDIE, dwarf::DW_AT_location, Block);
1661 // A static member's declaration is already flagged as such.
1662 if (!SDMDecl.Verify())
1663 addFlag(VariableDIE, dwarf::DW_AT_declaration);
1665 addBlock(VariableDIE, dwarf::DW_AT_location, Block);
1667 // Add the linkage name.
1668 StringRef LinkageName = GV.getLinkageName();
1669 if (!LinkageName.empty())
1670 // From DWARF4: DIEs to which DW_AT_linkage_name may apply include:
1671 // TAG_common_block, TAG_constant, TAG_entry_point, TAG_subprogram and
1673 addString(IsStaticMember && VariableSpecDIE ? VariableSpecDIE
1675 dwarf::DW_AT_MIPS_linkage_name,
1676 GlobalValue::getRealLinkageName(LinkageName));
1677 } else if (const ConstantInt *CI =
1678 dyn_cast_or_null<ConstantInt>(GV.getConstant())) {
1679 // AT_const_value was added when the static member was created. To avoid
1680 // emitting AT_const_value multiple times, we only add AT_const_value when
1681 // it is not a static member.
1682 if (!IsStaticMember)
1683 addConstantValue(VariableDIE, CI, isUnsignedDIType(DD, GTy));
1684 } else if (const ConstantExpr *CE = getMergedGlobalExpr(GV->getOperand(11))) {
1685 addToAccelTable = true;
1686 // GV is a merged global.
1687 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1688 Value *Ptr = CE->getOperand(0);
1689 addOpAddress(Block, Asm->getSymbol(cast<GlobalValue>(Ptr)));
1690 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1691 SmallVector<Value *, 3> Idx(CE->op_begin() + 1, CE->op_end());
1692 addUInt(Block, dwarf::DW_FORM_udata,
1693 Asm->getDataLayout().getIndexedOffset(Ptr->getType(), Idx));
1694 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1695 addBlock(VariableDIE, dwarf::DW_AT_location, Block);
1698 if (addToAccelTable) {
1699 DIE *AddrDIE = VariableSpecDIE ? VariableSpecDIE : VariableDIE;
1700 addAccelName(GV.getName(), AddrDIE);
1702 // If the linkage name is different than the name, go ahead and output
1703 // that as well into the name table.
1704 if (GV.getLinkageName() != "" && GV.getName() != GV.getLinkageName())
1705 addAccelName(GV.getLinkageName(), AddrDIE);
1708 if (!GV.isLocalToUnit())
1709 addGlobalName(GV.getName(), VariableSpecDIE ? VariableSpecDIE : VariableDIE,
1713 /// constructSubrangeDIE - Construct subrange DIE from DISubrange.
1714 void CompileUnit::constructSubrangeDIE(DIE &Buffer, DISubrange SR,
1716 DIE *DW_Subrange = createAndAddDIE(dwarf::DW_TAG_subrange_type, Buffer);
1717 addDIEEntry(DW_Subrange, dwarf::DW_AT_type, IndexTy);
1719 // The LowerBound value defines the lower bounds which is typically zero for
1720 // C/C++. The Count value is the number of elements. Values are 64 bit. If
1721 // Count == -1 then the array is unbounded and we do not emit
1722 // DW_AT_lower_bound and DW_AT_upper_bound attributes. If LowerBound == 0 and
1723 // Count == 0, then the array has zero elements in which case we do not emit
1725 int64_t LowerBound = SR.getLo();
1726 int64_t DefaultLowerBound = getDefaultLowerBound();
1727 int64_t Count = SR.getCount();
1729 if (DefaultLowerBound == -1 || LowerBound != DefaultLowerBound)
1730 addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, None, LowerBound);
1732 if (Count != -1 && Count != 0)
1733 // FIXME: An unbounded array should reference the expression that defines
1735 addUInt(DW_Subrange, dwarf::DW_AT_upper_bound, None,
1736 LowerBound + Count - 1);
1739 /// constructArrayTypeDIE - Construct array type DIE from DICompositeType.
1740 void CompileUnit::constructArrayTypeDIE(DIE &Buffer, DICompositeType CTy) {
1742 addFlag(&Buffer, dwarf::DW_AT_GNU_vector);
1744 // Emit the element type.
1745 addType(&Buffer, resolve(CTy.getTypeDerivedFrom()));
1747 // Get an anonymous type for index type.
1748 // FIXME: This type should be passed down from the front end
1749 // as different languages may have different sizes for indexes.
1750 DIE *IdxTy = getIndexTyDie();
1752 // Construct an anonymous type for index type.
1753 IdxTy = createAndAddDIE(dwarf::DW_TAG_base_type, *CUDie.get());
1754 addString(IdxTy, dwarf::DW_AT_name, "int");
1755 addUInt(IdxTy, dwarf::DW_AT_byte_size, None, sizeof(int32_t));
1756 addUInt(IdxTy, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1757 dwarf::DW_ATE_signed);
1758 setIndexTyDie(IdxTy);
1761 // Add subranges to array type.
1762 DIArray Elements = CTy.getTypeArray();
1763 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1764 DIDescriptor Element = Elements.getElement(i);
1765 if (Element.getTag() == dwarf::DW_TAG_subrange_type)
1766 constructSubrangeDIE(Buffer, DISubrange(Element), IdxTy);
1770 /// constructEnumTypeDIE - Construct an enum type DIE from DICompositeType.
1771 void CompileUnit::constructEnumTypeDIE(DIE &Buffer, DICompositeType CTy) {
1772 DIArray Elements = CTy.getTypeArray();
1774 // Add enumerators to enumeration type.
1775 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1776 DIEnumerator Enum(Elements.getElement(i));
1777 if (Enum.isEnumerator()) {
1778 DIE *Enumerator = createAndAddDIE(dwarf::DW_TAG_enumerator, Buffer);
1779 StringRef Name = Enum.getName();
1780 addString(Enumerator, dwarf::DW_AT_name, Name);
1781 int64_t Value = Enum.getEnumValue();
1782 addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata,
1786 DIType DTy = resolve(CTy.getTypeDerivedFrom());
1788 addType(&Buffer, DTy);
1789 addFlag(&Buffer, dwarf::DW_AT_enum_class);
1793 /// constructContainingTypeDIEs - Construct DIEs for types that contain
1795 void CompileUnit::constructContainingTypeDIEs() {
1796 for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(),
1797 CE = ContainingTypeMap.end();
1799 DIE *SPDie = CI->first;
1800 DIDescriptor D(CI->second);
1803 DIE *NDie = getDIE(D);
1806 addDIEEntry(SPDie, dwarf::DW_AT_containing_type, NDie);
1810 /// constructVariableDIE - Construct a DIE for the given DbgVariable.
1811 DIE *CompileUnit::constructVariableDIE(DbgVariable &DV, bool isScopeAbstract) {
1812 StringRef Name = DV.getName();
1814 // Define variable debug information entry.
1815 DIE *VariableDie = new DIE(DV.getTag());
1816 DbgVariable *AbsVar = DV.getAbstractVariable();
1817 DIE *AbsDIE = AbsVar ? AbsVar->getDIE() : NULL;
1819 addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin, AbsDIE);
1822 addString(VariableDie, dwarf::DW_AT_name, Name);
1823 addSourceLine(VariableDie, DV.getVariable());
1824 addType(VariableDie, DV.getType());
1827 if (DV.isArtificial())
1828 addFlag(VariableDie, dwarf::DW_AT_artificial);
1830 if (isScopeAbstract) {
1831 DV.setDIE(VariableDie);
1835 // Add variable address.
1837 unsigned Offset = DV.getDotDebugLocOffset();
1838 if (Offset != ~0U) {
1839 addSectionLabel(VariableDie, dwarf::DW_AT_location,
1840 Asm->GetTempSymbol("debug_loc", Offset));
1841 DV.setDIE(VariableDie);
1845 // Check if variable is described by a DBG_VALUE instruction.
1846 if (const MachineInstr *DVInsn = DV.getMInsn()) {
1847 assert(DVInsn->getNumOperands() == 3);
1848 if (DVInsn->getOperand(0).isReg()) {
1849 const MachineOperand RegOp = DVInsn->getOperand(0);
1850 // If the second operand is an immediate, this is an indirect value.
1851 if (DVInsn->getOperand(1).isImm()) {
1852 MachineLocation Location(RegOp.getReg(),
1853 DVInsn->getOperand(1).getImm());
1854 addVariableAddress(DV, VariableDie, Location);
1855 } else if (RegOp.getReg())
1856 addVariableAddress(DV, VariableDie, MachineLocation(RegOp.getReg()));
1857 } else if (DVInsn->getOperand(0).isImm())
1858 addConstantValue(VariableDie, DVInsn->getOperand(0), DV.getType());
1859 else if (DVInsn->getOperand(0).isFPImm())
1860 addConstantFPValue(VariableDie, DVInsn->getOperand(0));
1861 else if (DVInsn->getOperand(0).isCImm())
1862 addConstantValue(VariableDie, DVInsn->getOperand(0).getCImm(),
1863 isUnsignedDIType(DD, DV.getType()));
1865 DV.setDIE(VariableDie);
1868 // .. else use frame index.
1869 int FI = DV.getFrameIndex();
1871 unsigned FrameReg = 0;
1872 const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
1873 int Offset = TFI->getFrameIndexReference(*Asm->MF, FI, FrameReg);
1874 MachineLocation Location(FrameReg, Offset);
1875 addVariableAddress(DV, VariableDie, Location);
1879 DV.setDIE(VariableDie);
1883 /// constructMemberDIE - Construct member DIE from DIDerivedType.
1884 void CompileUnit::constructMemberDIE(DIE &Buffer, DIDerivedType DT) {
1885 DIE *MemberDie = createAndAddDIE(DT.getTag(), Buffer);
1886 StringRef Name = DT.getName();
1888 addString(MemberDie, dwarf::DW_AT_name, Name);
1890 addType(MemberDie, resolve(DT.getTypeDerivedFrom()));
1892 addSourceLine(MemberDie, DT);
1894 DIEBlock *MemLocationDie = new (DIEValueAllocator) DIEBlock();
1895 addUInt(MemLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
1897 if (DT.getTag() == dwarf::DW_TAG_inheritance && DT.isVirtual()) {
1899 // For C++, virtual base classes are not at fixed offset. Use following
1900 // expression to extract appropriate offset from vtable.
1901 // BaseAddr = ObAddr + *((*ObAddr) - Offset)
1903 DIEBlock *VBaseLocationDie = new (DIEValueAllocator) DIEBlock();
1904 addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_dup);
1905 addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1906 addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1907 addUInt(VBaseLocationDie, dwarf::DW_FORM_udata, DT.getOffsetInBits());
1908 addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_minus);
1909 addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1910 addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1912 addBlock(MemberDie, dwarf::DW_AT_data_member_location, VBaseLocationDie);
1914 uint64_t Size = DT.getSizeInBits();
1915 uint64_t FieldSize = getBaseTypeSize(DD, DT);
1916 uint64_t OffsetInBytes;
1918 if (Size != FieldSize) {
1920 addUInt(MemberDie, dwarf::DW_AT_byte_size, None,
1921 getBaseTypeSize(DD, DT) >> 3);
1922 addUInt(MemberDie, dwarf::DW_AT_bit_size, None, DT.getSizeInBits());
1924 uint64_t Offset = DT.getOffsetInBits();
1925 uint64_t AlignMask = ~(DT.getAlignInBits() - 1);
1926 uint64_t HiMark = (Offset + FieldSize) & AlignMask;
1927 uint64_t FieldOffset = (HiMark - FieldSize);
1928 Offset -= FieldOffset;
1930 // Maybe we need to work from the other end.
1931 if (Asm->getDataLayout().isLittleEndian())
1932 Offset = FieldSize - (Offset + Size);
1933 addUInt(MemberDie, dwarf::DW_AT_bit_offset, None, Offset);
1935 // Here WD_AT_data_member_location points to the anonymous
1936 // field that includes this bit field.
1937 OffsetInBytes = FieldOffset >> 3;
1939 // This is not a bitfield.
1940 OffsetInBytes = DT.getOffsetInBits() >> 3;
1941 addUInt(MemberDie, dwarf::DW_AT_data_member_location, None, OffsetInBytes);
1944 if (DT.isProtected())
1945 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1946 dwarf::DW_ACCESS_protected);
1947 else if (DT.isPrivate())
1948 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1949 dwarf::DW_ACCESS_private);
1950 // Otherwise C++ member and base classes are considered public.
1952 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1953 dwarf::DW_ACCESS_public);
1955 addUInt(MemberDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1,
1956 dwarf::DW_VIRTUALITY_virtual);
1958 // Objective-C properties.
1959 if (MDNode *PNode = DT.getObjCProperty())
1960 if (DIEEntry *PropertyDie = getDIEEntry(PNode))
1961 MemberDie->addValue(dwarf::DW_AT_APPLE_property, dwarf::DW_FORM_ref4,
1964 if (DT.isArtificial())
1965 addFlag(MemberDie, dwarf::DW_AT_artificial);
1968 /// getOrCreateStaticMemberDIE - Create new DIE for C++ static member.
1969 DIE *CompileUnit::getOrCreateStaticMemberDIE(DIDerivedType DT) {
1973 // Construct the context before querying for the existence of the DIE in case
1974 // such construction creates the DIE.
1975 DIE *ContextDIE = getOrCreateContextDIE(resolve(DT.getContext()));
1976 assert(dwarf::isType(ContextDIE->getTag()) &&
1977 "Static member should belong to a type.");
1979 DIE *StaticMemberDIE = getDIE(DT);
1980 if (StaticMemberDIE)
1981 return StaticMemberDIE;
1983 StaticMemberDIE = createAndAddDIE(DT.getTag(), *ContextDIE, DT);
1985 DIType Ty = resolve(DT.getTypeDerivedFrom());
1987 addString(StaticMemberDIE, dwarf::DW_AT_name, DT.getName());
1988 addType(StaticMemberDIE, Ty);
1989 addSourceLine(StaticMemberDIE, DT);
1990 addFlag(StaticMemberDIE, dwarf::DW_AT_external);
1991 addFlag(StaticMemberDIE, dwarf::DW_AT_declaration);
1993 // FIXME: We could omit private if the parent is a class_type, and
1994 // public if the parent is something else.
1995 if (DT.isProtected())
1996 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1997 dwarf::DW_ACCESS_protected);
1998 else if (DT.isPrivate())
1999 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
2000 dwarf::DW_ACCESS_private);
2002 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
2003 dwarf::DW_ACCESS_public);
2005 if (const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(DT.getConstant()))
2006 addConstantValue(StaticMemberDIE, CI, isUnsignedDIType(DD, Ty));
2007 if (const ConstantFP *CFP = dyn_cast_or_null<ConstantFP>(DT.getConstant()))
2008 addConstantFPValue(StaticMemberDIE, CFP);
2010 return StaticMemberDIE;
2013 void CompileUnit::emitHeader(const MCSection *ASection,
2014 const MCSymbol *ASectionSym) {
2015 Asm->OutStreamer.AddComment("DWARF version number");
2016 Asm->EmitInt16(DD->getDwarfVersion());
2017 Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
2018 Asm->EmitSectionOffset(Asm->GetTempSymbol(ASection->getLabelBeginName()),
2020 Asm->OutStreamer.AddComment("Address Size (in bytes)");
2021 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());