1 //===-- llvm/CodeGen/DwarfUnit.cpp - Dwarf Type and Compile Units ---------===//
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 #include "DwarfUnit.h"
16 #include "DwarfAccelTable.h"
17 #include "DwarfCompileUnit.h"
18 #include "DwarfDebug.h"
19 #include "llvm/ADT/APFloat.h"
20 #include "llvm/IR/Constants.h"
21 #include "llvm/IR/DIBuilder.h"
22 #include "llvm/IR/DataLayout.h"
23 #include "llvm/IR/GlobalVariable.h"
24 #include "llvm/IR/Instructions.h"
25 #include "llvm/IR/Mangler.h"
26 #include "llvm/MC/MCAsmInfo.h"
27 #include "llvm/MC/MCContext.h"
28 #include "llvm/MC/MCSection.h"
29 #include "llvm/MC/MCStreamer.h"
30 #include "llvm/Support/CommandLine.h"
31 #include "llvm/Target/TargetFrameLowering.h"
32 #include "llvm/Target/TargetLoweringObjectFile.h"
33 #include "llvm/Target/TargetMachine.h"
34 #include "llvm/Target/TargetRegisterInfo.h"
35 #include "llvm/Target/TargetSubtargetInfo.h"
39 #define DEBUG_TYPE "dwarfdebug"
42 GenerateDwarfTypeUnits("generate-type-units", cl::Hidden,
43 cl::desc("Generate DWARF4 type units."),
46 /// Unit - Unit constructor.
47 DwarfUnit::DwarfUnit(unsigned UID, dwarf::Tag UnitTag, DICompileUnit Node,
48 AsmPrinter *A, DwarfDebug *DW, DwarfFile *DWU)
49 : UniqueID(UID), CUNode(Node), UnitDie(UnitTag), DebugInfoOffset(0), Asm(A),
50 DD(DW), DU(DWU), IndexTyDie(nullptr), Section(nullptr) {
51 assert(UnitTag == dwarf::DW_TAG_compile_unit ||
52 UnitTag == dwarf::DW_TAG_type_unit);
53 DIEIntegerOne = new (DIEValueAllocator) DIEInteger(1);
56 DwarfTypeUnit::DwarfTypeUnit(unsigned UID, DwarfCompileUnit &CU, AsmPrinter *A,
57 DwarfDebug *DW, DwarfFile *DWU,
58 MCDwarfDwoLineTable *SplitLineTable)
59 : DwarfUnit(UID, dwarf::DW_TAG_type_unit, CU.getCUNode(), A, DW, DWU),
60 CU(CU), SplitLineTable(SplitLineTable) {
62 addSectionOffset(UnitDie, dwarf::DW_AT_stmt_list, 0);
65 /// ~Unit - Destructor for compile unit.
66 DwarfUnit::~DwarfUnit() {
67 for (unsigned j = 0, M = DIEBlocks.size(); j < M; ++j)
68 DIEBlocks[j]->~DIEBlock();
69 for (unsigned j = 0, M = DIELocs.size(); j < M; ++j)
70 DIELocs[j]->~DIELoc();
73 /// createDIEEntry - Creates a new DIEEntry to be a proxy for a debug
74 /// information entry.
75 DIEEntry *DwarfUnit::createDIEEntry(DIE &Entry) {
76 DIEEntry *Value = new (DIEValueAllocator) DIEEntry(Entry);
80 /// getDefaultLowerBound - Return the default lower bound for an array. If the
81 /// DWARF version doesn't handle the language, return -1.
82 int64_t DwarfUnit::getDefaultLowerBound() const {
83 switch (getLanguage()) {
87 case dwarf::DW_LANG_C89:
88 case dwarf::DW_LANG_C99:
89 case dwarf::DW_LANG_C:
90 case dwarf::DW_LANG_C_plus_plus:
91 case dwarf::DW_LANG_ObjC:
92 case dwarf::DW_LANG_ObjC_plus_plus:
95 case dwarf::DW_LANG_Fortran77:
96 case dwarf::DW_LANG_Fortran90:
97 case dwarf::DW_LANG_Fortran95:
100 // The languages below have valid values only if the DWARF version >= 4.
101 case dwarf::DW_LANG_Java:
102 case dwarf::DW_LANG_Python:
103 case dwarf::DW_LANG_UPC:
104 case dwarf::DW_LANG_D:
105 if (dwarf::DWARF_VERSION >= 4)
109 case dwarf::DW_LANG_Ada83:
110 case dwarf::DW_LANG_Ada95:
111 case dwarf::DW_LANG_Cobol74:
112 case dwarf::DW_LANG_Cobol85:
113 case dwarf::DW_LANG_Modula2:
114 case dwarf::DW_LANG_Pascal83:
115 case dwarf::DW_LANG_PLI:
116 if (dwarf::DWARF_VERSION >= 4)
124 /// Check whether the DIE for this MDNode can be shared across CUs.
125 static bool isShareableAcrossCUs(DIDescriptor D) {
126 // When the MDNode can be part of the type system, the DIE can be shared
128 // Combining type units and cross-CU DIE sharing is lower value (since
129 // cross-CU DIE sharing is used in LTO and removes type redundancy at that
130 // level already) but may be implementable for some value in projects
131 // building multiple independent libraries with LTO and then linking those
133 return (D.isType() ||
134 (D.isSubprogram() && !DISubprogram(D).isDefinition())) &&
135 !GenerateDwarfTypeUnits;
138 /// getDIE - Returns the debug information entry map slot for the
139 /// specified debug variable. We delegate the request to DwarfDebug
140 /// when the DIE for this MDNode can be shared across CUs. The mappings
141 /// will be kept in DwarfDebug for shareable DIEs.
142 DIE *DwarfUnit::getDIE(DIDescriptor D) const {
143 if (isShareableAcrossCUs(D))
144 return DD->getDIE(D);
145 return MDNodeToDieMap.lookup(D);
148 /// insertDIE - Insert DIE into the map. We delegate the request to DwarfDebug
149 /// when the DIE for this MDNode can be shared across CUs. The mappings
150 /// will be kept in DwarfDebug for shareable DIEs.
151 void DwarfUnit::insertDIE(DIDescriptor Desc, DIE *D) {
152 if (isShareableAcrossCUs(Desc)) {
153 DD->insertDIE(Desc, D);
156 MDNodeToDieMap.insert(std::make_pair(Desc, D));
159 /// addFlag - Add a flag that is true.
160 void DwarfUnit::addFlag(DIE &Die, dwarf::Attribute Attribute) {
161 if (DD->getDwarfVersion() >= 4)
162 Die.addValue(Attribute, dwarf::DW_FORM_flag_present, DIEIntegerOne);
164 Die.addValue(Attribute, dwarf::DW_FORM_flag, DIEIntegerOne);
167 /// addUInt - Add an unsigned integer attribute data and value.
169 void DwarfUnit::addUInt(DIE &Die, dwarf::Attribute Attribute,
170 Optional<dwarf::Form> Form, uint64_t Integer) {
172 Form = DIEInteger::BestForm(false, Integer);
173 DIEValue *Value = Integer == 1 ? DIEIntegerOne : new (DIEValueAllocator)
175 Die.addValue(Attribute, *Form, Value);
178 void DwarfUnit::addUInt(DIE &Block, dwarf::Form Form, uint64_t Integer) {
179 addUInt(Block, (dwarf::Attribute)0, Form, Integer);
182 /// addSInt - Add an signed integer attribute data and value.
184 void DwarfUnit::addSInt(DIE &Die, dwarf::Attribute Attribute,
185 Optional<dwarf::Form> Form, int64_t Integer) {
187 Form = DIEInteger::BestForm(true, Integer);
188 DIEValue *Value = new (DIEValueAllocator) DIEInteger(Integer);
189 Die.addValue(Attribute, *Form, Value);
192 void DwarfUnit::addSInt(DIELoc &Die, Optional<dwarf::Form> Form,
194 addSInt(Die, (dwarf::Attribute)0, Form, Integer);
197 /// addString - Add a string attribute data and value. We always emit a
198 /// reference to the string pool instead of immediate strings so that DIEs have
199 /// more predictable sizes. In the case of split dwarf we emit an index
200 /// into another table which gets us the static offset into the string
202 void DwarfUnit::addString(DIE &Die, dwarf::Attribute Attribute,
205 if (!DD->useSplitDwarf())
206 return addLocalString(Die, Attribute, String);
208 unsigned idx = DU->getStringPool().getIndex(*Asm, String);
209 DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
210 DIEValue *Str = new (DIEValueAllocator) DIEString(Value, String);
211 Die.addValue(Attribute, dwarf::DW_FORM_GNU_str_index, Str);
214 /// addLocalString - Add a string attribute data and value. This is guaranteed
215 /// to be in the local string pool instead of indirected.
216 void DwarfUnit::addLocalString(DIE &Die, dwarf::Attribute Attribute,
218 MCSymbol *Symb = DU->getStringPool().getSymbol(*Asm, String);
220 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
221 Value = new (DIEValueAllocator) DIELabel(Symb);
223 Value = new (DIEValueAllocator) DIEDelta(Symb, DD->getDebugStrSym());
224 DIEValue *Str = new (DIEValueAllocator) DIEString(Value, String);
225 Die.addValue(Attribute, dwarf::DW_FORM_strp, Str);
228 /// addLabel - Add a Dwarf label attribute data and value.
230 void DwarfUnit::addLabel(DIE &Die, dwarf::Attribute Attribute, dwarf::Form Form,
231 const MCSymbol *Label) {
232 DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
233 Die.addValue(Attribute, Form, Value);
236 void DwarfUnit::addLabel(DIELoc &Die, dwarf::Form Form, const MCSymbol *Label) {
237 addLabel(Die, (dwarf::Attribute)0, Form, Label);
240 /// addSectionOffset - Add an offset into a section attribute data and value.
242 void DwarfUnit::addSectionOffset(DIE &Die, dwarf::Attribute Attribute,
244 if (DD->getDwarfVersion() >= 4)
245 addUInt(Die, Attribute, dwarf::DW_FORM_sec_offset, Integer);
247 addUInt(Die, Attribute, dwarf::DW_FORM_data4, Integer);
250 unsigned DwarfTypeUnit::getOrCreateSourceID(StringRef FileName, StringRef DirName) {
251 return SplitLineTable ? SplitLineTable->getFile(DirName, FileName)
252 : getCU().getOrCreateSourceID(FileName, DirName);
255 /// addOpAddress - Add a dwarf op address data and value using the
256 /// form given and an op of either DW_FORM_addr or DW_FORM_GNU_addr_index.
258 void DwarfUnit::addOpAddress(DIELoc &Die, const MCSymbol *Sym) {
259 if (!DD->useSplitDwarf()) {
260 addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
261 addLabel(Die, dwarf::DW_FORM_udata, Sym);
263 addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_addr_index);
264 addUInt(Die, dwarf::DW_FORM_GNU_addr_index,
265 DD->getAddressPool().getIndex(Sym));
269 void DwarfUnit::addLabelDelta(DIE &Die, dwarf::Attribute Attribute,
270 const MCSymbol *Hi, const MCSymbol *Lo) {
271 DIEValue *Value = new (DIEValueAllocator) DIEDelta(Hi, Lo);
272 Die.addValue(Attribute, dwarf::DW_FORM_data4, Value);
275 /// addDIEEntry - Add a DIE attribute data and value.
277 void DwarfUnit::addDIEEntry(DIE &Die, dwarf::Attribute Attribute, DIE &Entry) {
278 addDIEEntry(Die, Attribute, createDIEEntry(Entry));
281 void DwarfUnit::addDIETypeSignature(DIE &Die, const DwarfTypeUnit &Type) {
282 // Flag the type unit reference as a declaration so that if it contains
283 // members (implicit special members, static data member definitions, member
284 // declarations for definitions in this CU, etc) consumers don't get confused
285 // and think this is a full definition.
286 addFlag(Die, dwarf::DW_AT_declaration);
288 Die.addValue(dwarf::DW_AT_signature, dwarf::DW_FORM_ref_sig8,
289 new (DIEValueAllocator) DIETypeSignature(Type));
292 void DwarfUnit::addDIEEntry(DIE &Die, dwarf::Attribute Attribute,
294 const DIE *DieCU = Die.getUnitOrNull();
295 const DIE *EntryCU = Entry->getEntry().getUnitOrNull();
297 // We assume that Die belongs to this CU, if it is not linked to any CU yet.
298 DieCU = &getUnitDie();
300 EntryCU = &getUnitDie();
301 Die.addValue(Attribute,
302 EntryCU == DieCU ? dwarf::DW_FORM_ref4 : dwarf::DW_FORM_ref_addr,
306 /// Create a DIE with the given Tag, add the DIE to its parent, and
307 /// call insertDIE if MD is not null.
308 DIE &DwarfUnit::createAndAddDIE(unsigned Tag, DIE &Parent, DIDescriptor N) {
309 assert(Tag != dwarf::DW_TAG_auto_variable &&
310 Tag != dwarf::DW_TAG_arg_variable);
311 Parent.addChild(make_unique<DIE>((dwarf::Tag)Tag));
312 DIE &Die = *Parent.getChildren().back();
318 /// addBlock - Add block data.
320 void DwarfUnit::addBlock(DIE &Die, dwarf::Attribute Attribute, DIELoc *Loc) {
321 Loc->ComputeSize(Asm);
322 DIELocs.push_back(Loc); // Memoize so we can call the destructor later on.
323 Die.addValue(Attribute, Loc->BestForm(DD->getDwarfVersion()), Loc);
326 void DwarfUnit::addBlock(DIE &Die, dwarf::Attribute Attribute,
328 Block->ComputeSize(Asm);
329 DIEBlocks.push_back(Block); // Memoize so we can call the destructor later on.
330 Die.addValue(Attribute, Block->BestForm(), Block);
333 /// addSourceLine - Add location information to specified debug information
335 void DwarfUnit::addSourceLine(DIE &Die, unsigned Line, StringRef File,
336 StringRef Directory) {
340 unsigned FileID = getOrCreateSourceID(File, Directory);
341 assert(FileID && "Invalid file id");
342 addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
343 addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
346 /// addSourceLine - Add location information to specified debug information
348 void DwarfUnit::addSourceLine(DIE &Die, DIVariable V) {
349 assert(V.isVariable());
351 addSourceLine(Die, V.getLineNumber(), V.getContext().getFilename(),
352 V.getContext().getDirectory());
355 /// addSourceLine - Add location information to specified debug information
357 void DwarfUnit::addSourceLine(DIE &Die, DIGlobalVariable G) {
358 assert(G.isGlobalVariable());
360 addSourceLine(Die, G.getLineNumber(), G.getFilename(), G.getDirectory());
363 /// addSourceLine - Add location information to specified debug information
365 void DwarfUnit::addSourceLine(DIE &Die, DISubprogram SP) {
366 assert(SP.isSubprogram());
368 addSourceLine(Die, SP.getLineNumber(), SP.getFilename(), SP.getDirectory());
371 /// addSourceLine - Add location information to specified debug information
373 void DwarfUnit::addSourceLine(DIE &Die, DIType Ty) {
376 addSourceLine(Die, Ty.getLineNumber(), Ty.getFilename(), Ty.getDirectory());
379 /// addSourceLine - Add location information to specified debug information
381 void DwarfUnit::addSourceLine(DIE &Die, DIObjCProperty Ty) {
382 assert(Ty.isObjCProperty());
384 DIFile File = Ty.getFile();
385 addSourceLine(Die, Ty.getLineNumber(), File.getFilename(),
386 File.getDirectory());
389 /// addSourceLine - Add location information to specified debug information
391 void DwarfUnit::addSourceLine(DIE &Die, DINameSpace NS) {
394 addSourceLine(Die, NS.getLineNumber(), NS.getFilename(), NS.getDirectory());
397 /// addRegisterOp - Add register operand.
398 // FIXME: Ideally, this would share the implementation with
399 // AsmPrinter::EmitDwarfRegOpPiece.
400 void DwarfUnit::addRegisterOpPiece(DIELoc &TheDie, unsigned Reg,
401 unsigned SizeInBits, unsigned OffsetInBits) {
402 const TargetRegisterInfo *RI = Asm->TM.getSubtargetImpl()->getRegisterInfo();
403 int DWReg = RI->getDwarfRegNum(Reg, false);
404 bool isSubRegister = DWReg < 0;
408 // Go up the super-register chain until we hit a valid dwarf register number.
409 for (MCSuperRegIterator SR(Reg, RI); SR.isValid() && DWReg < 0; ++SR) {
410 DWReg = RI->getDwarfRegNum(*SR, false);
412 Idx = RI->getSubRegIndex(*SR, Reg);
416 DEBUG(dbgs() << "Invalid Dwarf register number.\n");
417 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_nop);
423 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + DWReg);
425 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_regx);
426 addUInt(TheDie, dwarf::DW_FORM_udata, DWReg);
430 bool isPiece = SizeInBits > 0;
431 if (isSubRegister || isPiece) {
432 const unsigned SizeOfByte = 8;
433 unsigned RegSizeInBits = RI->getSubRegIdxSize(Idx);
434 unsigned RegOffsetInBits = RI->getSubRegIdxOffset(Idx);
435 unsigned PieceSizeInBits = std::max(SizeInBits, RegSizeInBits);
436 unsigned PieceOffsetInBits = OffsetInBits ? OffsetInBits : RegOffsetInBits;
437 assert(RegSizeInBits >= SizeInBits && "register smaller than value");
439 if (RegOffsetInBits != PieceOffsetInBits) {
440 // Manually shift the value into place, since the DW_OP_piece
441 // describes the part of the variable, not the position of the
443 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
444 addUInt(TheDie, dwarf::DW_FORM_data1, RegOffsetInBits);
445 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_shr);
448 if (PieceOffsetInBits > 0 || PieceSizeInBits % SizeOfByte) {
449 assert(PieceSizeInBits > 0 && "piece has zero size");
450 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_bit_piece);
451 addUInt(TheDie, dwarf::DW_FORM_data1, PieceSizeInBits);
452 addUInt(TheDie, dwarf::DW_FORM_data1, PieceOffsetInBits);
454 assert(PieceSizeInBits > 0 && "piece has zero size");
455 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_piece);
456 addUInt(TheDie, dwarf::DW_FORM_data1, PieceSizeInBits/SizeOfByte);
461 /// addRegisterOffset - Add register offset.
462 void DwarfUnit::addRegisterOffset(DIELoc &TheDie, unsigned Reg,
464 const TargetRegisterInfo *RI = Asm->TM.getSubtargetImpl()->getRegisterInfo();
465 unsigned DWReg = RI->getDwarfRegNum(Reg, false);
466 const TargetRegisterInfo *TRI = Asm->TM.getSubtargetImpl()->getRegisterInfo();
467 if (Reg == TRI->getFrameRegister(*Asm->MF))
468 // If variable offset is based in frame register then use fbreg.
469 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_fbreg);
471 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + DWReg);
473 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx);
474 addUInt(TheDie, dwarf::DW_FORM_udata, DWReg);
476 addSInt(TheDie, dwarf::DW_FORM_sdata, Offset);
479 /* Byref variables, in Blocks, are declared by the programmer as "SomeType
480 VarName;", but the compiler creates a __Block_byref_x_VarName struct, and
481 gives the variable VarName either the struct, or a pointer to the struct, as
482 its type. This is necessary for various behind-the-scenes things the
483 compiler needs to do with by-reference variables in Blocks.
485 However, as far as the original *programmer* is concerned, the variable
486 should still have type 'SomeType', as originally declared.
488 The function getBlockByrefType dives into the __Block_byref_x_VarName
489 struct to find the original type of the variable, which is then assigned to
490 the variable's Debug Information Entry as its real type. So far, so good.
491 However now the debugger will expect the variable VarName to have the type
492 SomeType. So we need the location attribute for the variable to be an
493 expression that explains to the debugger how to navigate through the
494 pointers and struct to find the actual variable of type SomeType.
496 The following function does just that. We start by getting
497 the "normal" location for the variable. This will be the location
498 of either the struct __Block_byref_x_VarName or the pointer to the
499 struct __Block_byref_x_VarName.
501 The struct will look something like:
503 struct __Block_byref_x_VarName {
505 struct __Block_byref_x_VarName *forwarding;
506 ... <various other fields>
508 ... <maybe more fields>
511 If we are given the struct directly (as our starting point) we
512 need to tell the debugger to:
514 1). Add the offset of the forwarding field.
516 2). Follow that pointer to get the real __Block_byref_x_VarName
517 struct to use (the real one may have been copied onto the heap).
519 3). Add the offset for the field VarName, to find the actual variable.
521 If we started with a pointer to the struct, then we need to
522 dereference that pointer first, before the other steps.
523 Translating this into DWARF ops, we will need to append the following
524 to the current location description for the variable:
526 DW_OP_deref -- optional, if we start with a pointer
527 DW_OP_plus_uconst <forward_fld_offset>
529 DW_OP_plus_uconst <varName_fld_offset>
531 That is what this function does. */
533 /// addBlockByrefAddress - Start with the address based on the location
534 /// provided, and generate the DWARF information necessary to find the
535 /// actual Block variable (navigating the Block struct) based on the
536 /// starting location. Add the DWARF information to the die. For
537 /// more information, read large comment just above here.
539 void DwarfUnit::addBlockByrefAddress(const DbgVariable &DV, DIE &Die,
540 dwarf::Attribute Attribute,
541 const MachineLocation &Location) {
542 DIType Ty = DV.getType();
544 uint16_t Tag = Ty.getTag();
545 bool isPointer = false;
547 StringRef varName = DV.getName();
549 if (Tag == dwarf::DW_TAG_pointer_type) {
550 DIDerivedType DTy(Ty);
551 TmpTy = resolve(DTy.getTypeDerivedFrom());
555 DICompositeType blockStruct(TmpTy);
557 // Find the __forwarding field and the variable field in the __Block_byref
559 DIArray Fields = blockStruct.getElements();
560 DIDerivedType varField;
561 DIDerivedType forwardingField;
563 for (unsigned i = 0, N = Fields.getNumElements(); i < N; ++i) {
564 DIDerivedType DT(Fields.getElement(i));
565 StringRef fieldName = DT.getName();
566 if (fieldName == "__forwarding")
567 forwardingField = DT;
568 else if (fieldName == varName)
572 // Get the offsets for the forwarding field and the variable field.
573 unsigned forwardingFieldOffset = forwardingField.getOffsetInBits() >> 3;
574 unsigned varFieldOffset = varField.getOffsetInBits() >> 2;
576 // Decode the original location, and use that as the start of the byref
577 // variable's location.
578 DIELoc *Loc = new (DIEValueAllocator) DIELoc();
580 if (Location.isReg())
581 addRegisterOpPiece(*Loc, Location.getReg());
583 addRegisterOffset(*Loc, Location.getReg(), Location.getOffset());
585 // If we started with a pointer to the __Block_byref... struct, then
586 // the first thing we need to do is dereference the pointer (DW_OP_deref).
588 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
590 // Next add the offset for the '__forwarding' field:
591 // DW_OP_plus_uconst ForwardingFieldOffset. Note there's no point in
592 // adding the offset if it's 0.
593 if (forwardingFieldOffset > 0) {
594 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
595 addUInt(*Loc, dwarf::DW_FORM_udata, forwardingFieldOffset);
598 // Now dereference the __forwarding field to get to the real __Block_byref
599 // struct: DW_OP_deref.
600 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
602 // Now that we've got the real __Block_byref... struct, add the offset
603 // for the variable's field to get to the location of the actual variable:
604 // DW_OP_plus_uconst varFieldOffset. Again, don't add if it's 0.
605 if (varFieldOffset > 0) {
606 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
607 addUInt(*Loc, dwarf::DW_FORM_udata, varFieldOffset);
610 // Now attach the location information to the DIE.
611 addBlock(Die, Attribute, Loc);
614 /// Return true if type encoding is unsigned.
615 static bool isUnsignedDIType(DwarfDebug *DD, DIType Ty) {
616 DIDerivedType DTy(Ty);
617 if (DTy.isDerivedType()) {
618 dwarf::Tag T = (dwarf::Tag)Ty.getTag();
619 // Encode pointer constants as unsigned bytes. This is used at least for
620 // null pointer constant emission.
621 // FIXME: reference and rvalue_reference /probably/ shouldn't be allowed
622 // here, but accept them for now due to a bug in SROA producing bogus
624 if (T == dwarf::DW_TAG_pointer_type ||
625 T == dwarf::DW_TAG_ptr_to_member_type ||
626 T == dwarf::DW_TAG_reference_type ||
627 T == dwarf::DW_TAG_rvalue_reference_type)
629 assert(T == dwarf::DW_TAG_typedef || T == dwarf::DW_TAG_const_type ||
630 T == dwarf::DW_TAG_volatile_type ||
631 T == dwarf::DW_TAG_restrict_type ||
632 T == dwarf::DW_TAG_enumeration_type);
633 if (DITypeRef Deriv = DTy.getTypeDerivedFrom())
634 return isUnsignedDIType(DD, DD->resolve(Deriv));
635 // FIXME: Enums without a fixed underlying type have unknown signedness
636 // here, leading to incorrectly emitted constants.
637 assert(DTy.getTag() == dwarf::DW_TAG_enumeration_type);
642 assert(BTy.isBasicType());
643 unsigned Encoding = BTy.getEncoding();
644 assert((Encoding == dwarf::DW_ATE_unsigned ||
645 Encoding == dwarf::DW_ATE_unsigned_char ||
646 Encoding == dwarf::DW_ATE_signed ||
647 Encoding == dwarf::DW_ATE_signed_char ||
648 Encoding == dwarf::DW_ATE_UTF || Encoding == dwarf::DW_ATE_boolean) &&
649 "Unsupported encoding");
650 return (Encoding == dwarf::DW_ATE_unsigned ||
651 Encoding == dwarf::DW_ATE_unsigned_char ||
652 Encoding == dwarf::DW_ATE_UTF || Encoding == dwarf::DW_ATE_boolean);
655 /// If this type is derived from a base type then return base type size.
656 static uint64_t getBaseTypeSize(DwarfDebug *DD, DIDerivedType Ty) {
657 unsigned Tag = Ty.getTag();
659 if (Tag != dwarf::DW_TAG_member && Tag != dwarf::DW_TAG_typedef &&
660 Tag != dwarf::DW_TAG_const_type && Tag != dwarf::DW_TAG_volatile_type &&
661 Tag != dwarf::DW_TAG_restrict_type)
662 return Ty.getSizeInBits();
664 DIType BaseType = DD->resolve(Ty.getTypeDerivedFrom());
666 // If this type is not derived from any type or the type is a declaration then
667 // take conservative approach.
668 if (!BaseType.isValid() || BaseType.isForwardDecl())
669 return Ty.getSizeInBits();
671 // If this is a derived type, go ahead and get the base type, unless it's a
672 // reference then it's just the size of the field. Pointer types have no need
673 // of this since they're a different type of qualification on the type.
674 if (BaseType.getTag() == dwarf::DW_TAG_reference_type ||
675 BaseType.getTag() == dwarf::DW_TAG_rvalue_reference_type)
676 return Ty.getSizeInBits();
678 if (BaseType.isDerivedType())
679 return getBaseTypeSize(DD, DIDerivedType(BaseType));
681 return BaseType.getSizeInBits();
684 /// addConstantFPValue - Add constant value entry in variable DIE.
685 void DwarfUnit::addConstantFPValue(DIE &Die, const MachineOperand &MO) {
686 assert(MO.isFPImm() && "Invalid machine operand!");
687 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
688 APFloat FPImm = MO.getFPImm()->getValueAPF();
690 // Get the raw data form of the floating point.
691 const APInt FltVal = FPImm.bitcastToAPInt();
692 const char *FltPtr = (const char *)FltVal.getRawData();
694 int NumBytes = FltVal.getBitWidth() / 8; // 8 bits per byte.
695 bool LittleEndian = Asm->getDataLayout().isLittleEndian();
696 int Incr = (LittleEndian ? 1 : -1);
697 int Start = (LittleEndian ? 0 : NumBytes - 1);
698 int Stop = (LittleEndian ? NumBytes : -1);
700 // Output the constant to DWARF one byte at a time.
701 for (; Start != Stop; Start += Incr)
702 addUInt(*Block, dwarf::DW_FORM_data1, (unsigned char)0xFF & FltPtr[Start]);
704 addBlock(Die, dwarf::DW_AT_const_value, Block);
707 /// addConstantFPValue - Add constant value entry in variable DIE.
708 void DwarfUnit::addConstantFPValue(DIE &Die, const ConstantFP *CFP) {
709 // Pass this down to addConstantValue as an unsigned bag of bits.
710 addConstantValue(Die, CFP->getValueAPF().bitcastToAPInt(), true);
713 /// addConstantValue - Add constant value entry in variable DIE.
714 void DwarfUnit::addConstantValue(DIE &Die, const ConstantInt *CI, DIType Ty) {
715 addConstantValue(Die, CI->getValue(), Ty);
718 /// addConstantValue - Add constant value entry in variable DIE.
719 void DwarfUnit::addConstantValue(DIE &Die, const MachineOperand &MO,
721 assert(MO.isImm() && "Invalid machine operand!");
723 addConstantValue(Die, isUnsignedDIType(DD, Ty), MO.getImm());
726 void DwarfUnit::addConstantValue(DIE &Die, bool Unsigned, uint64_t Val) {
727 // FIXME: This is a bit conservative/simple - it emits negative values always
728 // sign extended to 64 bits rather than minimizing the number of bytes.
729 addUInt(Die, dwarf::DW_AT_const_value,
730 Unsigned ? dwarf::DW_FORM_udata : dwarf::DW_FORM_sdata, Val);
733 void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, DIType Ty) {
734 addConstantValue(Die, Val, isUnsignedDIType(DD, Ty));
737 // addConstantValue - Add constant value entry in variable DIE.
738 void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, bool Unsigned) {
739 unsigned CIBitWidth = Val.getBitWidth();
740 if (CIBitWidth <= 64) {
741 addConstantValue(Die, Unsigned,
742 Unsigned ? Val.getZExtValue() : Val.getSExtValue());
746 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
748 // Get the raw data form of the large APInt.
749 const uint64_t *Ptr64 = Val.getRawData();
751 int NumBytes = Val.getBitWidth() / 8; // 8 bits per byte.
752 bool LittleEndian = Asm->getDataLayout().isLittleEndian();
754 // Output the constant to DWARF one byte at a time.
755 for (int i = 0; i < NumBytes; i++) {
758 c = Ptr64[i / 8] >> (8 * (i & 7));
760 c = Ptr64[(NumBytes - 1 - i) / 8] >> (8 * ((NumBytes - 1 - i) & 7));
761 addUInt(*Block, dwarf::DW_FORM_data1, c);
764 addBlock(Die, dwarf::DW_AT_const_value, Block);
767 /// addTemplateParams - Add template parameters into buffer.
768 void DwarfUnit::addTemplateParams(DIE &Buffer, DIArray TParams) {
769 // Add template parameters.
770 for (unsigned i = 0, e = TParams.getNumElements(); i != e; ++i) {
771 DIDescriptor Element = TParams.getElement(i);
772 if (Element.isTemplateTypeParameter())
773 constructTemplateTypeParameterDIE(Buffer,
774 DITemplateTypeParameter(Element));
775 else if (Element.isTemplateValueParameter())
776 constructTemplateValueParameterDIE(Buffer,
777 DITemplateValueParameter(Element));
781 /// getOrCreateContextDIE - Get context owner's DIE.
782 DIE *DwarfUnit::getOrCreateContextDIE(DIScope Context) {
783 if (!Context || Context.isFile())
784 return &getUnitDie();
785 if (Context.isType())
786 return getOrCreateTypeDIE(DIType(Context));
787 if (Context.isNameSpace())
788 return getOrCreateNameSpace(DINameSpace(Context));
789 if (Context.isSubprogram())
790 return getOrCreateSubprogramDIE(DISubprogram(Context));
791 return getDIE(Context);
794 DIE *DwarfUnit::createTypeDIE(DICompositeType Ty) {
795 DIScope Context = resolve(Ty.getContext());
796 DIE *ContextDIE = getOrCreateContextDIE(Context);
798 if (DIE *TyDIE = getDIE(Ty))
802 DIE &TyDIE = createAndAddDIE(Ty.getTag(), *ContextDIE, Ty);
804 constructTypeDIE(TyDIE, Ty);
806 updateAcceleratorTables(Context, Ty, TyDIE);
810 /// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
812 DIE *DwarfUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
818 assert(Ty == resolve(Ty.getRef()) &&
819 "type was not uniqued, possible ODR violation.");
821 // DW_TAG_restrict_type is not supported in DWARF2
822 if (Ty.getTag() == dwarf::DW_TAG_restrict_type && DD->getDwarfVersion() <= 2)
823 return getOrCreateTypeDIE(resolve(DIDerivedType(Ty).getTypeDerivedFrom()));
825 // Construct the context before querying for the existence of the DIE in case
826 // such construction creates the DIE.
827 DIScope Context = resolve(Ty.getContext());
828 DIE *ContextDIE = getOrCreateContextDIE(Context);
831 if (DIE *TyDIE = getDIE(Ty))
835 DIE &TyDIE = createAndAddDIE(Ty.getTag(), *ContextDIE, Ty);
837 updateAcceleratorTables(Context, Ty, TyDIE);
839 if (Ty.isBasicType())
840 constructTypeDIE(TyDIE, DIBasicType(Ty));
841 else if (Ty.isCompositeType()) {
842 DICompositeType CTy(Ty);
843 if (GenerateDwarfTypeUnits && !Ty.isForwardDecl())
844 if (MDString *TypeId = CTy.getIdentifier()) {
845 DD->addDwarfTypeUnitType(getCU(), TypeId->getString(), TyDIE, CTy);
846 // Skip updating the accelerator tables since this is not the full type.
849 constructTypeDIE(TyDIE, CTy);
851 assert(Ty.isDerivedType() && "Unknown kind of DIType");
852 constructTypeDIE(TyDIE, DIDerivedType(Ty));
858 void DwarfUnit::updateAcceleratorTables(DIScope Context, DIType Ty,
860 if (!Ty.getName().empty() && !Ty.isForwardDecl()) {
861 bool IsImplementation = 0;
862 if (Ty.isCompositeType()) {
863 DICompositeType CT(Ty);
864 // A runtime language of 0 actually means C/C++ and that any
865 // non-negative value is some version of Objective-C/C++.
866 IsImplementation = (CT.getRunTimeLang() == 0) || CT.isObjcClassComplete();
868 unsigned Flags = IsImplementation ? dwarf::DW_FLAG_type_implementation : 0;
869 DD->addAccelType(Ty.getName(), TyDIE, Flags);
871 if (!Context || Context.isCompileUnit() || Context.isFile() ||
872 Context.isNameSpace())
873 addGlobalType(Ty, TyDIE, Context);
877 /// addType - Add a new type attribute to the specified entity.
878 void DwarfUnit::addType(DIE &Entity, DIType Ty, dwarf::Attribute Attribute) {
879 assert(Ty && "Trying to add a type that doesn't exist?");
881 // Check for pre-existence.
882 DIEEntry *Entry = getDIEEntry(Ty);
883 // If it exists then use the existing value.
885 addDIEEntry(Entity, Attribute, Entry);
890 DIE *Buffer = getOrCreateTypeDIE(Ty);
893 Entry = createDIEEntry(*Buffer);
894 insertDIEEntry(Ty, Entry);
895 addDIEEntry(Entity, Attribute, Entry);
898 /// getParentContextString - Walks the metadata parent chain in a language
899 /// specific manner (using the compile unit language) and returns
900 /// it as a string. This is done at the metadata level because DIEs may
901 /// not currently have been added to the parent context and walking the
902 /// DIEs looking for names is more expensive than walking the metadata.
903 std::string DwarfUnit::getParentContextString(DIScope Context) const {
907 // FIXME: Decide whether to implement this for non-C++ languages.
908 if (getLanguage() != dwarf::DW_LANG_C_plus_plus)
912 SmallVector<DIScope, 1> Parents;
913 while (!Context.isCompileUnit()) {
914 Parents.push_back(Context);
915 if (Context.getContext())
916 Context = resolve(Context.getContext());
918 // Structure, etc types will have a NULL context if they're at the top
923 // Reverse iterate over our list to go from the outermost construct to the
925 for (SmallVectorImpl<DIScope>::reverse_iterator I = Parents.rbegin(),
929 StringRef Name = Ctx.getName();
930 if (Name.empty() && Ctx.isNameSpace())
931 Name = "(anonymous namespace)";
940 /// constructTypeDIE - Construct basic type die from DIBasicType.
941 void DwarfUnit::constructTypeDIE(DIE &Buffer, DIBasicType BTy) {
942 // Get core information.
943 StringRef Name = BTy.getName();
944 // Add name if not anonymous or intermediate type.
946 addString(Buffer, dwarf::DW_AT_name, Name);
948 // An unspecified type only has a name attribute.
949 if (BTy.getTag() == dwarf::DW_TAG_unspecified_type)
952 addUInt(Buffer, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
955 uint64_t Size = BTy.getSizeInBits() >> 3;
956 addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
959 /// constructTypeDIE - Construct derived type die from DIDerivedType.
960 void DwarfUnit::constructTypeDIE(DIE &Buffer, DIDerivedType DTy) {
961 // Get core information.
962 StringRef Name = DTy.getName();
963 uint64_t Size = DTy.getSizeInBits() >> 3;
964 uint16_t Tag = Buffer.getTag();
966 // Map to main type, void will not have a type.
967 DIType FromTy = resolve(DTy.getTypeDerivedFrom());
969 addType(Buffer, FromTy);
971 // Add name if not anonymous or intermediate type.
973 addString(Buffer, dwarf::DW_AT_name, Name);
975 // Add size if non-zero (derived types might be zero-sized.)
976 if (Size && Tag != dwarf::DW_TAG_pointer_type)
977 addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
979 if (Tag == dwarf::DW_TAG_ptr_to_member_type)
980 addDIEEntry(Buffer, dwarf::DW_AT_containing_type,
981 *getOrCreateTypeDIE(resolve(DTy.getClassType())));
982 // Add source line info if available and TyDesc is not a forward declaration.
983 if (!DTy.isForwardDecl())
984 addSourceLine(Buffer, DTy);
987 /// constructSubprogramArguments - Construct function argument DIEs.
988 void DwarfUnit::constructSubprogramArguments(DIE &Buffer, DITypeArray Args) {
989 for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
990 DIType Ty = resolve(Args.getElement(i));
992 assert(i == N-1 && "Unspecified parameter must be the last argument");
993 createAndAddDIE(dwarf::DW_TAG_unspecified_parameters, Buffer);
995 DIE &Arg = createAndAddDIE(dwarf::DW_TAG_formal_parameter, Buffer);
997 if (Ty.isArtificial())
998 addFlag(Arg, dwarf::DW_AT_artificial);
1003 /// constructTypeDIE - Construct type DIE from DICompositeType.
1004 void DwarfUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
1005 // Add name if not anonymous or intermediate type.
1006 StringRef Name = CTy.getName();
1008 uint64_t Size = CTy.getSizeInBits() >> 3;
1009 uint16_t Tag = Buffer.getTag();
1012 case dwarf::DW_TAG_array_type:
1013 constructArrayTypeDIE(Buffer, CTy);
1015 case dwarf::DW_TAG_enumeration_type:
1016 constructEnumTypeDIE(Buffer, CTy);
1018 case dwarf::DW_TAG_subroutine_type: {
1019 // Add return type. A void return won't have a type.
1020 DITypeArray Elements = DISubroutineType(CTy).getTypeArray();
1021 DIType RTy(resolve(Elements.getElement(0)));
1023 addType(Buffer, RTy);
1025 bool isPrototyped = true;
1026 if (Elements.getNumElements() == 2 &&
1027 !Elements.getElement(1))
1028 isPrototyped = false;
1030 constructSubprogramArguments(Buffer, Elements);
1032 // Add prototype flag if we're dealing with a C language and the
1033 // function has been prototyped.
1034 uint16_t Language = getLanguage();
1036 (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||
1037 Language == dwarf::DW_LANG_ObjC))
1038 addFlag(Buffer, dwarf::DW_AT_prototyped);
1040 if (CTy.isLValueReference())
1041 addFlag(Buffer, dwarf::DW_AT_reference);
1043 if (CTy.isRValueReference())
1044 addFlag(Buffer, dwarf::DW_AT_rvalue_reference);
1046 case dwarf::DW_TAG_structure_type:
1047 case dwarf::DW_TAG_union_type:
1048 case dwarf::DW_TAG_class_type: {
1049 // Add elements to structure type.
1050 DIArray Elements = CTy.getElements();
1051 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1052 DIDescriptor Element = Elements.getElement(i);
1053 if (Element.isSubprogram())
1054 getOrCreateSubprogramDIE(DISubprogram(Element));
1055 else if (Element.isDerivedType()) {
1056 DIDerivedType DDTy(Element);
1057 if (DDTy.getTag() == dwarf::DW_TAG_friend) {
1058 DIE &ElemDie = createAndAddDIE(dwarf::DW_TAG_friend, Buffer);
1059 addType(ElemDie, resolve(DDTy.getTypeDerivedFrom()),
1060 dwarf::DW_AT_friend);
1061 } else if (DDTy.isStaticMember()) {
1062 getOrCreateStaticMemberDIE(DDTy);
1064 constructMemberDIE(Buffer, DDTy);
1066 } else if (Element.isObjCProperty()) {
1067 DIObjCProperty Property(Element);
1068 DIE &ElemDie = createAndAddDIE(Property.getTag(), Buffer);
1069 StringRef PropertyName = Property.getObjCPropertyName();
1070 addString(ElemDie, dwarf::DW_AT_APPLE_property_name, PropertyName);
1071 if (Property.getType())
1072 addType(ElemDie, Property.getType());
1073 addSourceLine(ElemDie, Property);
1074 StringRef GetterName = Property.getObjCPropertyGetterName();
1075 if (!GetterName.empty())
1076 addString(ElemDie, dwarf::DW_AT_APPLE_property_getter, GetterName);
1077 StringRef SetterName = Property.getObjCPropertySetterName();
1078 if (!SetterName.empty())
1079 addString(ElemDie, dwarf::DW_AT_APPLE_property_setter, SetterName);
1080 unsigned PropertyAttributes = 0;
1081 if (Property.isReadOnlyObjCProperty())
1082 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readonly;
1083 if (Property.isReadWriteObjCProperty())
1084 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readwrite;
1085 if (Property.isAssignObjCProperty())
1086 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_assign;
1087 if (Property.isRetainObjCProperty())
1088 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_retain;
1089 if (Property.isCopyObjCProperty())
1090 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_copy;
1091 if (Property.isNonAtomicObjCProperty())
1092 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_nonatomic;
1093 if (PropertyAttributes)
1094 addUInt(ElemDie, dwarf::DW_AT_APPLE_property_attribute, None,
1095 PropertyAttributes);
1097 DIEEntry *Entry = getDIEEntry(Element);
1099 Entry = createDIEEntry(ElemDie);
1100 insertDIEEntry(Element, Entry);
1106 if (CTy.isAppleBlockExtension())
1107 addFlag(Buffer, dwarf::DW_AT_APPLE_block);
1109 DICompositeType ContainingType(resolve(CTy.getContainingType()));
1111 addDIEEntry(Buffer, dwarf::DW_AT_containing_type,
1112 *getOrCreateTypeDIE(ContainingType));
1114 if (CTy.isObjcClassComplete())
1115 addFlag(Buffer, dwarf::DW_AT_APPLE_objc_complete_type);
1117 // Add template parameters to a class, structure or union types.
1118 // FIXME: The support isn't in the metadata for this yet.
1119 if (Tag == dwarf::DW_TAG_class_type ||
1120 Tag == dwarf::DW_TAG_structure_type || Tag == dwarf::DW_TAG_union_type)
1121 addTemplateParams(Buffer, CTy.getTemplateParams());
1129 // Add name if not anonymous or intermediate type.
1131 addString(Buffer, dwarf::DW_AT_name, Name);
1133 if (Tag == dwarf::DW_TAG_enumeration_type ||
1134 Tag == dwarf::DW_TAG_class_type || Tag == dwarf::DW_TAG_structure_type ||
1135 Tag == dwarf::DW_TAG_union_type) {
1136 // Add size if non-zero (derived types might be zero-sized.)
1137 // TODO: Do we care about size for enum forward declarations?
1139 addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
1140 else if (!CTy.isForwardDecl())
1141 // Add zero size if it is not a forward declaration.
1142 addUInt(Buffer, dwarf::DW_AT_byte_size, None, 0);
1144 // If we're a forward decl, say so.
1145 if (CTy.isForwardDecl())
1146 addFlag(Buffer, dwarf::DW_AT_declaration);
1148 // Add source line info if available.
1149 if (!CTy.isForwardDecl())
1150 addSourceLine(Buffer, CTy);
1152 // No harm in adding the runtime language to the declaration.
1153 unsigned RLang = CTy.getRunTimeLang();
1155 addUInt(Buffer, dwarf::DW_AT_APPLE_runtime_class, dwarf::DW_FORM_data1,
1160 /// constructTemplateTypeParameterDIE - Construct new DIE for the given
1161 /// DITemplateTypeParameter.
1162 void DwarfUnit::constructTemplateTypeParameterDIE(DIE &Buffer,
1163 DITemplateTypeParameter TP) {
1165 createAndAddDIE(dwarf::DW_TAG_template_type_parameter, Buffer);
1166 // Add the type if it exists, it could be void and therefore no type.
1168 addType(ParamDIE, resolve(TP.getType()));
1169 if (!TP.getName().empty())
1170 addString(ParamDIE, dwarf::DW_AT_name, TP.getName());
1173 /// constructTemplateValueParameterDIE - Construct new DIE for the given
1174 /// DITemplateValueParameter.
1176 DwarfUnit::constructTemplateValueParameterDIE(DIE &Buffer,
1177 DITemplateValueParameter VP) {
1178 DIE &ParamDIE = createAndAddDIE(VP.getTag(), Buffer);
1180 // Add the type if there is one, template template and template parameter
1181 // packs will not have a type.
1182 if (VP.getTag() == dwarf::DW_TAG_template_value_parameter)
1183 addType(ParamDIE, resolve(VP.getType()));
1184 if (!VP.getName().empty())
1185 addString(ParamDIE, dwarf::DW_AT_name, VP.getName());
1186 if (Value *Val = VP.getValue()) {
1187 if (ConstantInt *CI = dyn_cast<ConstantInt>(Val))
1188 addConstantValue(ParamDIE, CI, resolve(VP.getType()));
1189 else if (GlobalValue *GV = dyn_cast<GlobalValue>(Val)) {
1190 // For declaration non-type template parameters (such as global values and
1192 DIELoc *Loc = new (DIEValueAllocator) DIELoc();
1193 addOpAddress(*Loc, Asm->getSymbol(GV));
1194 // Emit DW_OP_stack_value to use the address as the immediate value of the
1195 // parameter, rather than a pointer to it.
1196 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_stack_value);
1197 addBlock(ParamDIE, dwarf::DW_AT_location, Loc);
1198 } else if (VP.getTag() == dwarf::DW_TAG_GNU_template_template_param) {
1199 assert(isa<MDString>(Val));
1200 addString(ParamDIE, dwarf::DW_AT_GNU_template_name,
1201 cast<MDString>(Val)->getString());
1202 } else if (VP.getTag() == dwarf::DW_TAG_GNU_template_parameter_pack) {
1203 assert(isa<MDNode>(Val));
1204 DIArray A(cast<MDNode>(Val));
1205 addTemplateParams(ParamDIE, A);
1210 /// getOrCreateNameSpace - Create a DIE for DINameSpace.
1211 DIE *DwarfUnit::getOrCreateNameSpace(DINameSpace NS) {
1212 // Construct the context before querying for the existence of the DIE in case
1213 // such construction creates the DIE.
1214 DIE *ContextDIE = getOrCreateContextDIE(NS.getContext());
1216 if (DIE *NDie = getDIE(NS))
1218 DIE &NDie = createAndAddDIE(dwarf::DW_TAG_namespace, *ContextDIE, NS);
1220 StringRef Name = NS.getName();
1222 addString(NDie, dwarf::DW_AT_name, NS.getName());
1224 Name = "(anonymous namespace)";
1225 DD->addAccelNamespace(Name, NDie);
1226 addGlobalName(Name, NDie, NS.getContext());
1227 addSourceLine(NDie, NS);
1231 /// getOrCreateSubprogramDIE - Create new DIE using SP.
1232 DIE *DwarfUnit::getOrCreateSubprogramDIE(DISubprogram SP) {
1233 // Construct the context before querying for the existence of the DIE in case
1234 // such construction creates the DIE (as is the case for member function
1236 DIE *ContextDIE = getOrCreateContextDIE(resolve(SP.getContext()));
1238 if (DIE *SPDie = getDIE(SP))
1241 if (DISubprogram SPDecl = SP.getFunctionDeclaration()) {
1242 // Add subprogram definitions to the CU die directly.
1243 ContextDIE = &getUnitDie();
1244 // Build the decl now to ensure it precedes the definition.
1245 getOrCreateSubprogramDIE(SPDecl);
1248 // DW_TAG_inlined_subroutine may refer to this DIE.
1249 DIE &SPDie = createAndAddDIE(dwarf::DW_TAG_subprogram, *ContextDIE, SP);
1251 // Stop here and fill this in later, depending on whether or not this
1252 // subprogram turns out to have inlined instances or not.
1253 if (SP.isDefinition())
1256 applySubprogramAttributes(SP, SPDie);
1260 void DwarfUnit::applySubprogramAttributes(DISubprogram SP, DIE &SPDie) {
1261 DIE *DeclDie = nullptr;
1262 StringRef DeclLinkageName;
1263 if (DISubprogram SPDecl = SP.getFunctionDeclaration()) {
1264 DeclDie = getDIE(SPDecl);
1265 assert(DeclDie && "This DIE should've already been constructed when the "
1266 "definition DIE was created in "
1267 "getOrCreateSubprogramDIE");
1268 DeclLinkageName = SPDecl.getLinkageName();
1271 // Add function template parameters.
1272 addTemplateParams(SPDie, SP.getTemplateParams());
1274 // Add the linkage name if we have one and it isn't in the Decl.
1275 StringRef LinkageName = SP.getLinkageName();
1276 assert(((LinkageName.empty() || DeclLinkageName.empty()) ||
1277 LinkageName == DeclLinkageName) &&
1278 "decl has a linkage name and it is different");
1279 if (!LinkageName.empty() && DeclLinkageName.empty())
1280 addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
1281 GlobalValue::getRealLinkageName(LinkageName));
1284 // Refer to the function declaration where all the other attributes will be
1286 addDIEEntry(SPDie, dwarf::DW_AT_specification, *DeclDie);
1290 // Constructors and operators for anonymous aggregates do not have names.
1291 if (!SP.getName().empty())
1292 addString(SPDie, dwarf::DW_AT_name, SP.getName());
1294 // Skip the rest of the attributes under -gmlt to save space.
1295 if(getCUNode().getEmissionKind() == DIBuilder::LineTablesOnly)
1298 addSourceLine(SPDie, SP);
1300 // Add the prototype if we have a prototype and we have a C like
1302 uint16_t Language = getLanguage();
1303 if (SP.isPrototyped() &&
1304 (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||
1305 Language == dwarf::DW_LANG_ObjC))
1306 addFlag(SPDie, dwarf::DW_AT_prototyped);
1308 DISubroutineType SPTy = SP.getType();
1309 assert(SPTy.getTag() == dwarf::DW_TAG_subroutine_type &&
1310 "the type of a subprogram should be a subroutine");
1312 DITypeArray Args = SPTy.getTypeArray();
1313 // Add a return type. If this is a type like a C/C++ void type we don't add a
1315 if (resolve(Args.getElement(0)))
1316 addType(SPDie, DIType(resolve(Args.getElement(0))));
1318 unsigned VK = SP.getVirtuality();
1320 addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1, VK);
1321 DIELoc *Block = getDIELoc();
1322 addUInt(*Block, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1323 addUInt(*Block, dwarf::DW_FORM_udata, SP.getVirtualIndex());
1324 addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, Block);
1325 ContainingTypeMap.insert(
1326 std::make_pair(&SPDie, resolve(SP.getContainingType())));
1329 if (!SP.isDefinition()) {
1330 addFlag(SPDie, dwarf::DW_AT_declaration);
1332 // Add arguments. Do not add arguments for subprogram definition. They will
1333 // be handled while processing variables.
1334 constructSubprogramArguments(SPDie, Args);
1337 if (SP.isArtificial())
1338 addFlag(SPDie, dwarf::DW_AT_artificial);
1340 if (!SP.isLocalToUnit())
1341 addFlag(SPDie, dwarf::DW_AT_external);
1343 if (SP.isOptimized())
1344 addFlag(SPDie, dwarf::DW_AT_APPLE_optimized);
1346 if (unsigned isa = Asm->getISAEncoding()) {
1347 addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa);
1350 if (SP.isLValueReference())
1351 addFlag(SPDie, dwarf::DW_AT_reference);
1353 if (SP.isRValueReference())
1354 addFlag(SPDie, dwarf::DW_AT_rvalue_reference);
1356 if (SP.isProtected())
1357 addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1358 dwarf::DW_ACCESS_protected);
1359 else if (SP.isPrivate())
1360 addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1361 dwarf::DW_ACCESS_private);
1362 else if (SP.isPublic())
1363 addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1364 dwarf::DW_ACCESS_public);
1366 if (SP.isExplicit())
1367 addFlag(SPDie, dwarf::DW_AT_explicit);
1370 /// constructSubrangeDIE - Construct subrange DIE from DISubrange.
1371 void DwarfUnit::constructSubrangeDIE(DIE &Buffer, DISubrange SR, DIE *IndexTy) {
1372 DIE &DW_Subrange = createAndAddDIE(dwarf::DW_TAG_subrange_type, Buffer);
1373 addDIEEntry(DW_Subrange, dwarf::DW_AT_type, *IndexTy);
1375 // The LowerBound value defines the lower bounds which is typically zero for
1376 // C/C++. The Count value is the number of elements. Values are 64 bit. If
1377 // Count == -1 then the array is unbounded and we do not emit
1378 // DW_AT_lower_bound and DW_AT_count attributes.
1379 int64_t LowerBound = SR.getLo();
1380 int64_t DefaultLowerBound = getDefaultLowerBound();
1381 int64_t Count = SR.getCount();
1383 if (DefaultLowerBound == -1 || LowerBound != DefaultLowerBound)
1384 addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, None, LowerBound);
1387 // FIXME: An unbounded array should reference the expression that defines
1389 addUInt(DW_Subrange, dwarf::DW_AT_count, None, Count);
1392 DIE *DwarfUnit::getIndexTyDie() {
1395 // Construct an integer type to use for indexes.
1396 IndexTyDie = &createAndAddDIE(dwarf::DW_TAG_base_type, UnitDie);
1397 addString(*IndexTyDie, dwarf::DW_AT_name, "sizetype");
1398 addUInt(*IndexTyDie, dwarf::DW_AT_byte_size, None, sizeof(int64_t));
1399 addUInt(*IndexTyDie, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1400 dwarf::DW_ATE_unsigned);
1404 /// constructArrayTypeDIE - Construct array type DIE from DICompositeType.
1405 void DwarfUnit::constructArrayTypeDIE(DIE &Buffer, DICompositeType CTy) {
1407 addFlag(Buffer, dwarf::DW_AT_GNU_vector);
1409 // Emit the element type.
1410 addType(Buffer, resolve(CTy.getTypeDerivedFrom()));
1412 // Get an anonymous type for index type.
1413 // FIXME: This type should be passed down from the front end
1414 // as different languages may have different sizes for indexes.
1415 DIE *IdxTy = getIndexTyDie();
1417 // Add subranges to array type.
1418 DIArray Elements = CTy.getElements();
1419 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1420 DIDescriptor Element = Elements.getElement(i);
1421 if (Element.getTag() == dwarf::DW_TAG_subrange_type)
1422 constructSubrangeDIE(Buffer, DISubrange(Element), IdxTy);
1426 /// constructEnumTypeDIE - Construct an enum type DIE from DICompositeType.
1427 void DwarfUnit::constructEnumTypeDIE(DIE &Buffer, DICompositeType CTy) {
1428 DIArray Elements = CTy.getElements();
1430 // Add enumerators to enumeration type.
1431 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1432 DIEnumerator Enum(Elements.getElement(i));
1433 if (Enum.isEnumerator()) {
1434 DIE &Enumerator = createAndAddDIE(dwarf::DW_TAG_enumerator, Buffer);
1435 StringRef Name = Enum.getName();
1436 addString(Enumerator, dwarf::DW_AT_name, Name);
1437 int64_t Value = Enum.getEnumValue();
1438 addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata,
1442 DIType DTy = resolve(CTy.getTypeDerivedFrom());
1444 addType(Buffer, DTy);
1445 addFlag(Buffer, dwarf::DW_AT_enum_class);
1449 /// constructContainingTypeDIEs - Construct DIEs for types that contain
1451 void DwarfUnit::constructContainingTypeDIEs() {
1452 for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(),
1453 CE = ContainingTypeMap.end();
1455 DIE &SPDie = *CI->first;
1456 DIDescriptor D(CI->second);
1459 DIE *NDie = getDIE(D);
1462 addDIEEntry(SPDie, dwarf::DW_AT_containing_type, *NDie);
1466 /// constructMemberDIE - Construct member DIE from DIDerivedType.
1467 void DwarfUnit::constructMemberDIE(DIE &Buffer, DIDerivedType DT) {
1468 DIE &MemberDie = createAndAddDIE(DT.getTag(), Buffer);
1469 StringRef Name = DT.getName();
1471 addString(MemberDie, dwarf::DW_AT_name, Name);
1473 addType(MemberDie, resolve(DT.getTypeDerivedFrom()));
1475 addSourceLine(MemberDie, DT);
1477 if (DT.getTag() == dwarf::DW_TAG_inheritance && DT.isVirtual()) {
1479 // For C++, virtual base classes are not at fixed offset. Use following
1480 // expression to extract appropriate offset from vtable.
1481 // BaseAddr = ObAddr + *((*ObAddr) - Offset)
1483 DIELoc *VBaseLocationDie = new (DIEValueAllocator) DIELoc();
1484 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_dup);
1485 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1486 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1487 addUInt(*VBaseLocationDie, dwarf::DW_FORM_udata, DT.getOffsetInBits());
1488 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_minus);
1489 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1490 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1492 addBlock(MemberDie, dwarf::DW_AT_data_member_location, VBaseLocationDie);
1494 uint64_t Size = DT.getSizeInBits();
1495 uint64_t FieldSize = getBaseTypeSize(DD, DT);
1496 uint64_t OffsetInBytes;
1498 if (Size != FieldSize) {
1499 // Handle bitfield, assume bytes are 8 bits.
1500 addUInt(MemberDie, dwarf::DW_AT_byte_size, None, FieldSize/8);
1501 addUInt(MemberDie, dwarf::DW_AT_bit_size, None, Size);
1503 uint64_t Offset = DT.getOffsetInBits();
1504 uint64_t AlignMask = ~(DT.getAlignInBits() - 1);
1505 uint64_t HiMark = (Offset + FieldSize) & AlignMask;
1506 uint64_t FieldOffset = (HiMark - FieldSize);
1507 Offset -= FieldOffset;
1509 // Maybe we need to work from the other end.
1510 if (Asm->getDataLayout().isLittleEndian())
1511 Offset = FieldSize - (Offset + Size);
1512 addUInt(MemberDie, dwarf::DW_AT_bit_offset, None, Offset);
1514 // Here DW_AT_data_member_location points to the anonymous
1515 // field that includes this bit field.
1516 OffsetInBytes = FieldOffset >> 3;
1518 // This is not a bitfield.
1519 OffsetInBytes = DT.getOffsetInBits() >> 3;
1521 if (DD->getDwarfVersion() <= 2) {
1522 DIELoc *MemLocationDie = new (DIEValueAllocator) DIELoc();
1523 addUInt(*MemLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
1524 addUInt(*MemLocationDie, dwarf::DW_FORM_udata, OffsetInBytes);
1525 addBlock(MemberDie, dwarf::DW_AT_data_member_location, MemLocationDie);
1527 addUInt(MemberDie, dwarf::DW_AT_data_member_location, None,
1531 if (DT.isProtected())
1532 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1533 dwarf::DW_ACCESS_protected);
1534 else if (DT.isPrivate())
1535 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1536 dwarf::DW_ACCESS_private);
1537 // Otherwise C++ member and base classes are considered public.
1538 else if (DT.isPublic())
1539 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1540 dwarf::DW_ACCESS_public);
1542 addUInt(MemberDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1,
1543 dwarf::DW_VIRTUALITY_virtual);
1545 // Objective-C properties.
1546 if (MDNode *PNode = DT.getObjCProperty())
1547 if (DIEEntry *PropertyDie = getDIEEntry(PNode))
1548 MemberDie.addValue(dwarf::DW_AT_APPLE_property, dwarf::DW_FORM_ref4,
1551 if (DT.isArtificial())
1552 addFlag(MemberDie, dwarf::DW_AT_artificial);
1555 /// getOrCreateStaticMemberDIE - Create new DIE for C++ static member.
1556 DIE *DwarfUnit::getOrCreateStaticMemberDIE(DIDerivedType DT) {
1560 // Construct the context before querying for the existence of the DIE in case
1561 // such construction creates the DIE.
1562 DIE *ContextDIE = getOrCreateContextDIE(resolve(DT.getContext()));
1563 assert(dwarf::isType(ContextDIE->getTag()) &&
1564 "Static member should belong to a type.");
1566 if (DIE *StaticMemberDIE = getDIE(DT))
1567 return StaticMemberDIE;
1569 DIE &StaticMemberDIE = createAndAddDIE(DT.getTag(), *ContextDIE, DT);
1571 DIType Ty = resolve(DT.getTypeDerivedFrom());
1573 addString(StaticMemberDIE, dwarf::DW_AT_name, DT.getName());
1574 addType(StaticMemberDIE, Ty);
1575 addSourceLine(StaticMemberDIE, DT);
1576 addFlag(StaticMemberDIE, dwarf::DW_AT_external);
1577 addFlag(StaticMemberDIE, dwarf::DW_AT_declaration);
1579 // FIXME: We could omit private if the parent is a class_type, and
1580 // public if the parent is something else.
1581 if (DT.isProtected())
1582 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1583 dwarf::DW_ACCESS_protected);
1584 else if (DT.isPrivate())
1585 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1586 dwarf::DW_ACCESS_private);
1587 else if (DT.isPublic())
1588 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1589 dwarf::DW_ACCESS_public);
1591 if (const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(DT.getConstant()))
1592 addConstantValue(StaticMemberDIE, CI, Ty);
1593 if (const ConstantFP *CFP = dyn_cast_or_null<ConstantFP>(DT.getConstant()))
1594 addConstantFPValue(StaticMemberDIE, CFP);
1596 return &StaticMemberDIE;
1599 void DwarfUnit::emitHeader(const MCSymbol *ASectionSym) const {
1600 // Emit size of content not including length itself
1601 Asm->OutStreamer.AddComment("Length of Unit");
1602 Asm->EmitInt32(getHeaderSize() + UnitDie.getSize());
1604 Asm->OutStreamer.AddComment("DWARF version number");
1605 Asm->EmitInt16(DD->getDwarfVersion());
1606 Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1607 // We share one abbreviations table across all units so it's always at the
1608 // start of the section. Use a relocatable offset where needed to ensure
1609 // linking doesn't invalidate that offset.
1611 Asm->EmitSectionOffset(ASectionSym, ASectionSym);
1613 // Use a constant value when no symbol is provided.
1615 Asm->OutStreamer.AddComment("Address Size (in bytes)");
1616 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
1619 void DwarfUnit::initSection(const MCSection *Section) {
1620 assert(!this->Section);
1621 this->Section = Section;
1624 void DwarfTypeUnit::emitHeader(const MCSymbol *ASectionSym) const {
1625 DwarfUnit::emitHeader(ASectionSym);
1626 Asm->OutStreamer.AddComment("Type Signature");
1627 Asm->OutStreamer.EmitIntValue(TypeSignature, sizeof(TypeSignature));
1628 Asm->OutStreamer.AddComment("Type DIE Offset");
1629 // In a skeleton type unit there is no type DIE so emit a zero offset.
1630 Asm->OutStreamer.EmitIntValue(Ty ? Ty->getOffset() : 0,
1631 sizeof(Ty->getOffset()));