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 DU->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 DU->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 return addLocalString(Die, Attribute, String);
207 addIndexedString(Die, Attribute, String);
210 void DwarfUnit::addIndexedString(DIE &Die, dwarf::Attribute Attribute,
212 unsigned idx = DU->getStringPool().getIndex(*Asm, String);
213 DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
214 DIEValue *Str = new (DIEValueAllocator) DIEString(Value, String);
215 Die.addValue(Attribute, dwarf::DW_FORM_GNU_str_index, Str);
218 /// addLocalString - Add a string attribute data and value. This is guaranteed
219 /// to be in the local string pool instead of indirected.
220 void DwarfUnit::addLocalString(DIE &Die, dwarf::Attribute Attribute,
222 MCSymbol *Symb = DU->getStringPool().getSymbol(*Asm, String);
224 if (Asm->MAI->doesDwarfUseRelocationsAcrossSections())
225 Value = new (DIEValueAllocator) DIELabel(Symb);
227 Value = new (DIEValueAllocator) DIEDelta(Symb, DD->getDebugStrSym());
228 DIEValue *Str = new (DIEValueAllocator) DIEString(Value, String);
229 Die.addValue(Attribute, dwarf::DW_FORM_strp, Str);
232 /// addLabel - Add a Dwarf label attribute data and value.
234 void DwarfUnit::addLabel(DIE &Die, dwarf::Attribute Attribute, dwarf::Form Form,
235 const MCSymbol *Label) {
236 DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
237 Die.addValue(Attribute, Form, Value);
240 void DwarfUnit::addLabel(DIELoc &Die, dwarf::Form Form, const MCSymbol *Label) {
241 addLabel(Die, (dwarf::Attribute)0, Form, Label);
244 /// addSectionOffset - Add an offset into a section attribute data and value.
246 void DwarfUnit::addSectionOffset(DIE &Die, dwarf::Attribute Attribute,
248 if (DD->getDwarfVersion() >= 4)
249 addUInt(Die, Attribute, dwarf::DW_FORM_sec_offset, Integer);
251 addUInt(Die, Attribute, dwarf::DW_FORM_data4, Integer);
254 unsigned DwarfTypeUnit::getOrCreateSourceID(StringRef FileName, StringRef DirName) {
255 return SplitLineTable ? SplitLineTable->getFile(DirName, FileName)
256 : getCU().getOrCreateSourceID(FileName, DirName);
259 /// addOpAddress - Add a dwarf op address data and value using the
260 /// form given and an op of either DW_FORM_addr or DW_FORM_GNU_addr_index.
262 void DwarfUnit::addOpAddress(DIELoc &Die, const MCSymbol *Sym) {
263 if (!DD->useSplitDwarf()) {
264 addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
265 addLabel(Die, dwarf::DW_FORM_udata, Sym);
267 addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_addr_index);
268 addUInt(Die, dwarf::DW_FORM_GNU_addr_index,
269 DD->getAddressPool().getIndex(Sym));
273 void DwarfUnit::addLabelDelta(DIE &Die, dwarf::Attribute Attribute,
274 const MCSymbol *Hi, const MCSymbol *Lo) {
275 DIEValue *Value = new (DIEValueAllocator) DIEDelta(Hi, Lo);
276 Die.addValue(Attribute, dwarf::DW_FORM_data4, Value);
279 /// addDIEEntry - Add a DIE attribute data and value.
281 void DwarfUnit::addDIEEntry(DIE &Die, dwarf::Attribute Attribute, DIE &Entry) {
282 addDIEEntry(Die, Attribute, createDIEEntry(Entry));
285 void DwarfUnit::addDIETypeSignature(DIE &Die, const DwarfTypeUnit &Type) {
286 // Flag the type unit reference as a declaration so that if it contains
287 // members (implicit special members, static data member definitions, member
288 // declarations for definitions in this CU, etc) consumers don't get confused
289 // and think this is a full definition.
290 addFlag(Die, dwarf::DW_AT_declaration);
292 Die.addValue(dwarf::DW_AT_signature, dwarf::DW_FORM_ref_sig8,
293 new (DIEValueAllocator) DIETypeSignature(Type));
296 void DwarfUnit::addDIEEntry(DIE &Die, dwarf::Attribute Attribute,
298 const DIE *DieCU = Die.getUnitOrNull();
299 const DIE *EntryCU = Entry->getEntry().getUnitOrNull();
301 // We assume that Die belongs to this CU, if it is not linked to any CU yet.
302 DieCU = &getUnitDie();
304 EntryCU = &getUnitDie();
305 Die.addValue(Attribute,
306 EntryCU == DieCU ? dwarf::DW_FORM_ref4 : dwarf::DW_FORM_ref_addr,
310 /// Create a DIE with the given Tag, add the DIE to its parent, and
311 /// call insertDIE if MD is not null.
312 DIE &DwarfUnit::createAndAddDIE(unsigned Tag, DIE &Parent, DIDescriptor N) {
313 assert(Tag != dwarf::DW_TAG_auto_variable &&
314 Tag != dwarf::DW_TAG_arg_variable);
315 Parent.addChild(make_unique<DIE>((dwarf::Tag)Tag));
316 DIE &Die = *Parent.getChildren().back();
322 /// addBlock - Add block data.
324 void DwarfUnit::addBlock(DIE &Die, dwarf::Attribute Attribute, DIELoc *Loc) {
325 Loc->ComputeSize(Asm);
326 DIELocs.push_back(Loc); // Memoize so we can call the destructor later on.
327 Die.addValue(Attribute, Loc->BestForm(DD->getDwarfVersion()), Loc);
330 void DwarfUnit::addBlock(DIE &Die, dwarf::Attribute Attribute,
332 Block->ComputeSize(Asm);
333 DIEBlocks.push_back(Block); // Memoize so we can call the destructor later on.
334 Die.addValue(Attribute, Block->BestForm(), Block);
337 /// addSourceLine - Add location information to specified debug information
339 void DwarfUnit::addSourceLine(DIE &Die, unsigned Line, StringRef File,
340 StringRef Directory) {
344 unsigned FileID = getOrCreateSourceID(File, Directory);
345 assert(FileID && "Invalid file id");
346 addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
347 addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
350 /// addSourceLine - Add location information to specified debug information
352 void DwarfUnit::addSourceLine(DIE &Die, DIVariable V) {
353 assert(V.isVariable());
355 addSourceLine(Die, V.getLineNumber(), V.getContext().getFilename(),
356 V.getContext().getDirectory());
359 /// addSourceLine - Add location information to specified debug information
361 void DwarfUnit::addSourceLine(DIE &Die, DIGlobalVariable G) {
362 assert(G.isGlobalVariable());
364 addSourceLine(Die, G.getLineNumber(), G.getFilename(), G.getDirectory());
367 /// addSourceLine - Add location information to specified debug information
369 void DwarfUnit::addSourceLine(DIE &Die, DISubprogram SP) {
370 assert(SP.isSubprogram());
372 addSourceLine(Die, SP.getLineNumber(), SP.getFilename(), SP.getDirectory());
375 /// addSourceLine - Add location information to specified debug information
377 void DwarfUnit::addSourceLine(DIE &Die, DIType Ty) {
380 addSourceLine(Die, Ty.getLineNumber(), Ty.getFilename(), Ty.getDirectory());
383 /// addSourceLine - Add location information to specified debug information
385 void DwarfUnit::addSourceLine(DIE &Die, DIObjCProperty Ty) {
386 assert(Ty.isObjCProperty());
388 DIFile File = Ty.getFile();
389 addSourceLine(Die, Ty.getLineNumber(), File.getFilename(),
390 File.getDirectory());
393 /// addSourceLine - Add location information to specified debug information
395 void DwarfUnit::addSourceLine(DIE &Die, DINameSpace NS) {
398 addSourceLine(Die, NS.getLineNumber(), NS.getFilename(), NS.getDirectory());
401 /// addRegisterOp - Add register operand.
402 // FIXME: Ideally, this would share the implementation with
403 // AsmPrinter::EmitDwarfRegOpPiece.
404 bool DwarfUnit::addRegisterOpPiece(DIELoc &TheDie, unsigned Reg,
405 unsigned SizeInBits, unsigned OffsetInBits) {
406 const TargetRegisterInfo *RI = Asm->TM.getSubtargetImpl()->getRegisterInfo();
407 int DWReg = RI->getDwarfRegNum(Reg, false);
408 bool isSubRegister = DWReg < 0;
412 // Go up the super-register chain until we hit a valid dwarf register number.
413 for (MCSuperRegIterator SR(Reg, RI); SR.isValid() && DWReg < 0; ++SR) {
414 DWReg = RI->getDwarfRegNum(*SR, false);
416 Idx = RI->getSubRegIndex(*SR, Reg);
424 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + DWReg);
426 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_regx);
427 addUInt(TheDie, dwarf::DW_FORM_udata, DWReg);
431 bool isPiece = SizeInBits > 0;
432 if (isSubRegister || isPiece) {
433 const unsigned SizeOfByte = 8;
434 unsigned RegSizeInBits = RI->getSubRegIdxSize(Idx);
435 unsigned RegOffsetInBits = RI->getSubRegIdxOffset(Idx);
436 unsigned PieceSizeInBits = std::max(SizeInBits, RegSizeInBits);
437 unsigned PieceOffsetInBits = OffsetInBits ? OffsetInBits : RegOffsetInBits;
438 assert(RegSizeInBits >= SizeInBits && "register smaller than value");
440 if (RegOffsetInBits != PieceOffsetInBits) {
441 // Manually shift the value into place, since the DW_OP_piece
442 // describes the part of the variable, not the position of the
444 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
445 addUInt(TheDie, dwarf::DW_FORM_data1, RegOffsetInBits);
446 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_shr);
449 if (PieceOffsetInBits > 0 || PieceSizeInBits % SizeOfByte) {
450 assert(PieceSizeInBits > 0 && "piece has zero size");
451 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_bit_piece);
452 addUInt(TheDie, dwarf::DW_FORM_data1, PieceSizeInBits);
453 addUInt(TheDie, dwarf::DW_FORM_data1, PieceOffsetInBits);
455 assert(PieceSizeInBits > 0 && "piece has zero size");
456 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_piece);
457 addUInt(TheDie, dwarf::DW_FORM_data1, PieceSizeInBits/SizeOfByte);
463 /// addRegisterOffset - Add register offset.
464 bool DwarfUnit::addRegisterOffset(DIELoc &TheDie, unsigned Reg,
466 const TargetRegisterInfo *TRI = Asm->TM.getSubtargetImpl()->getRegisterInfo();
467 int DWReg = TRI->getDwarfRegNum(Reg, false);
471 if (Reg == TRI->getFrameRegister(*Asm->MF))
472 // If variable offset is based in frame register then use fbreg.
473 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_fbreg);
475 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + DWReg);
477 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx);
478 addUInt(TheDie, dwarf::DW_FORM_udata, DWReg);
480 addSInt(TheDie, dwarf::DW_FORM_sdata, Offset);
484 /* Byref variables, in Blocks, are declared by the programmer as "SomeType
485 VarName;", but the compiler creates a __Block_byref_x_VarName struct, and
486 gives the variable VarName either the struct, or a pointer to the struct, as
487 its type. This is necessary for various behind-the-scenes things the
488 compiler needs to do with by-reference variables in Blocks.
490 However, as far as the original *programmer* is concerned, the variable
491 should still have type 'SomeType', as originally declared.
493 The function getBlockByrefType dives into the __Block_byref_x_VarName
494 struct to find the original type of the variable, which is then assigned to
495 the variable's Debug Information Entry as its real type. So far, so good.
496 However now the debugger will expect the variable VarName to have the type
497 SomeType. So we need the location attribute for the variable to be an
498 expression that explains to the debugger how to navigate through the
499 pointers and struct to find the actual variable of type SomeType.
501 The following function does just that. We start by getting
502 the "normal" location for the variable. This will be the location
503 of either the struct __Block_byref_x_VarName or the pointer to the
504 struct __Block_byref_x_VarName.
506 The struct will look something like:
508 struct __Block_byref_x_VarName {
510 struct __Block_byref_x_VarName *forwarding;
511 ... <various other fields>
513 ... <maybe more fields>
516 If we are given the struct directly (as our starting point) we
517 need to tell the debugger to:
519 1). Add the offset of the forwarding field.
521 2). Follow that pointer to get the real __Block_byref_x_VarName
522 struct to use (the real one may have been copied onto the heap).
524 3). Add the offset for the field VarName, to find the actual variable.
526 If we started with a pointer to the struct, then we need to
527 dereference that pointer first, before the other steps.
528 Translating this into DWARF ops, we will need to append the following
529 to the current location description for the variable:
531 DW_OP_deref -- optional, if we start with a pointer
532 DW_OP_plus_uconst <forward_fld_offset>
534 DW_OP_plus_uconst <varName_fld_offset>
536 That is what this function does. */
538 /// addBlockByrefAddress - Start with the address based on the location
539 /// provided, and generate the DWARF information necessary to find the
540 /// actual Block variable (navigating the Block struct) based on the
541 /// starting location. Add the DWARF information to the die. For
542 /// more information, read large comment just above here.
544 void DwarfUnit::addBlockByrefAddress(const DbgVariable &DV, DIE &Die,
545 dwarf::Attribute Attribute,
546 const MachineLocation &Location) {
547 DIType Ty = DV.getType();
549 uint16_t Tag = Ty.getTag();
550 bool isPointer = false;
552 StringRef varName = DV.getName();
554 if (Tag == dwarf::DW_TAG_pointer_type) {
555 DIDerivedType DTy(Ty);
556 TmpTy = resolve(DTy.getTypeDerivedFrom());
560 DICompositeType blockStruct(TmpTy);
562 // Find the __forwarding field and the variable field in the __Block_byref
564 DIArray Fields = blockStruct.getElements();
565 DIDerivedType varField;
566 DIDerivedType forwardingField;
568 for (unsigned i = 0, N = Fields.getNumElements(); i < N; ++i) {
569 DIDerivedType DT(Fields.getElement(i));
570 StringRef fieldName = DT.getName();
571 if (fieldName == "__forwarding")
572 forwardingField = DT;
573 else if (fieldName == varName)
577 // Get the offsets for the forwarding field and the variable field.
578 unsigned forwardingFieldOffset = forwardingField.getOffsetInBits() >> 3;
579 unsigned varFieldOffset = varField.getOffsetInBits() >> 2;
581 // Decode the original location, and use that as the start of the byref
582 // variable's location.
583 DIELoc *Loc = new (DIEValueAllocator) DIELoc();
586 if (Location.isReg())
587 validReg = addRegisterOpPiece(*Loc, Location.getReg());
589 validReg = addRegisterOffset(*Loc, Location.getReg(), Location.getOffset());
594 // If we started with a pointer to the __Block_byref... struct, then
595 // the first thing we need to do is dereference the pointer (DW_OP_deref).
597 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
599 // Next add the offset for the '__forwarding' field:
600 // DW_OP_plus_uconst ForwardingFieldOffset. Note there's no point in
601 // adding the offset if it's 0.
602 if (forwardingFieldOffset > 0) {
603 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
604 addUInt(*Loc, dwarf::DW_FORM_udata, forwardingFieldOffset);
607 // Now dereference the __forwarding field to get to the real __Block_byref
608 // struct: DW_OP_deref.
609 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
611 // Now that we've got the real __Block_byref... struct, add the offset
612 // for the variable's field to get to the location of the actual variable:
613 // DW_OP_plus_uconst varFieldOffset. Again, don't add if it's 0.
614 if (varFieldOffset > 0) {
615 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
616 addUInt(*Loc, dwarf::DW_FORM_udata, varFieldOffset);
619 // Now attach the location information to the DIE.
620 addBlock(Die, Attribute, Loc);
623 /// Return true if type encoding is unsigned.
624 static bool isUnsignedDIType(DwarfDebug *DD, DIType Ty) {
625 DIDerivedType DTy(Ty);
626 if (DTy.isDerivedType()) {
627 dwarf::Tag T = (dwarf::Tag)Ty.getTag();
628 // Encode pointer constants as unsigned bytes. This is used at least for
629 // null pointer constant emission.
630 // FIXME: reference and rvalue_reference /probably/ shouldn't be allowed
631 // here, but accept them for now due to a bug in SROA producing bogus
633 if (T == dwarf::DW_TAG_array_type ||
634 T == dwarf::DW_TAG_class_type ||
635 T == dwarf::DW_TAG_pointer_type ||
636 T == dwarf::DW_TAG_ptr_to_member_type ||
637 T == dwarf::DW_TAG_reference_type ||
638 T == dwarf::DW_TAG_rvalue_reference_type ||
639 T == dwarf::DW_TAG_structure_type)
641 assert(T == dwarf::DW_TAG_typedef || T == dwarf::DW_TAG_const_type ||
642 T == dwarf::DW_TAG_volatile_type ||
643 T == dwarf::DW_TAG_restrict_type ||
644 T == dwarf::DW_TAG_enumeration_type);
645 if (DITypeRef Deriv = DTy.getTypeDerivedFrom())
646 return isUnsignedDIType(DD, DD->resolve(Deriv));
647 // FIXME: Enums without a fixed underlying type have unknown signedness
648 // here, leading to incorrectly emitted constants.
649 assert(DTy.getTag() == dwarf::DW_TAG_enumeration_type);
654 assert(BTy.isBasicType());
655 unsigned Encoding = BTy.getEncoding();
656 assert((Encoding == dwarf::DW_ATE_unsigned ||
657 Encoding == dwarf::DW_ATE_unsigned_char ||
658 Encoding == dwarf::DW_ATE_signed ||
659 Encoding == dwarf::DW_ATE_signed_char ||
660 Encoding == dwarf::DW_ATE_UTF || Encoding == dwarf::DW_ATE_boolean ||
661 (Ty.getTag() == dwarf::DW_TAG_unspecified_type &&
662 Ty.getName() == "decltype(nullptr)")) &&
663 "Unsupported encoding");
664 return (Encoding == dwarf::DW_ATE_unsigned ||
665 Encoding == dwarf::DW_ATE_unsigned_char ||
666 Encoding == dwarf::DW_ATE_UTF || Encoding == dwarf::DW_ATE_boolean ||
667 Ty.getTag() == dwarf::DW_TAG_unspecified_type);
670 /// If this type is derived from a base type then return base type size.
671 static uint64_t getBaseTypeSize(DwarfDebug *DD, DIDerivedType Ty) {
672 unsigned Tag = Ty.getTag();
674 if (Tag != dwarf::DW_TAG_member && Tag != dwarf::DW_TAG_typedef &&
675 Tag != dwarf::DW_TAG_const_type && Tag != dwarf::DW_TAG_volatile_type &&
676 Tag != dwarf::DW_TAG_restrict_type)
677 return Ty.getSizeInBits();
679 DIType BaseType = DD->resolve(Ty.getTypeDerivedFrom());
681 // If this type is not derived from any type or the type is a declaration then
682 // take conservative approach.
683 if (!BaseType.isValid() || BaseType.isForwardDecl())
684 return Ty.getSizeInBits();
686 // If this is a derived type, go ahead and get the base type, unless it's a
687 // reference then it's just the size of the field. Pointer types have no need
688 // of this since they're a different type of qualification on the type.
689 if (BaseType.getTag() == dwarf::DW_TAG_reference_type ||
690 BaseType.getTag() == dwarf::DW_TAG_rvalue_reference_type)
691 return Ty.getSizeInBits();
693 if (BaseType.isDerivedType())
694 return getBaseTypeSize(DD, DIDerivedType(BaseType));
696 return BaseType.getSizeInBits();
699 /// addConstantFPValue - Add constant value entry in variable DIE.
700 void DwarfUnit::addConstantFPValue(DIE &Die, const MachineOperand &MO) {
701 assert(MO.isFPImm() && "Invalid machine operand!");
702 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
703 APFloat FPImm = MO.getFPImm()->getValueAPF();
705 // Get the raw data form of the floating point.
706 const APInt FltVal = FPImm.bitcastToAPInt();
707 const char *FltPtr = (const char *)FltVal.getRawData();
709 int NumBytes = FltVal.getBitWidth() / 8; // 8 bits per byte.
710 bool LittleEndian = Asm->getDataLayout().isLittleEndian();
711 int Incr = (LittleEndian ? 1 : -1);
712 int Start = (LittleEndian ? 0 : NumBytes - 1);
713 int Stop = (LittleEndian ? NumBytes : -1);
715 // Output the constant to DWARF one byte at a time.
716 for (; Start != Stop; Start += Incr)
717 addUInt(*Block, dwarf::DW_FORM_data1, (unsigned char)0xFF & FltPtr[Start]);
719 addBlock(Die, dwarf::DW_AT_const_value, Block);
722 /// addConstantFPValue - Add constant value entry in variable DIE.
723 void DwarfUnit::addConstantFPValue(DIE &Die, const ConstantFP *CFP) {
724 // Pass this down to addConstantValue as an unsigned bag of bits.
725 addConstantValue(Die, CFP->getValueAPF().bitcastToAPInt(), true);
728 /// addConstantValue - Add constant value entry in variable DIE.
729 void DwarfUnit::addConstantValue(DIE &Die, const ConstantInt *CI, DIType Ty) {
730 addConstantValue(Die, CI->getValue(), Ty);
733 /// addConstantValue - Add constant value entry in variable DIE.
734 void DwarfUnit::addConstantValue(DIE &Die, const MachineOperand &MO,
736 assert(MO.isImm() && "Invalid machine operand!");
738 addConstantValue(Die, isUnsignedDIType(DD, Ty), MO.getImm());
741 void DwarfUnit::addConstantValue(DIE &Die, bool Unsigned, uint64_t Val) {
742 // FIXME: This is a bit conservative/simple - it emits negative values always
743 // sign extended to 64 bits rather than minimizing the number of bytes.
744 addUInt(Die, dwarf::DW_AT_const_value,
745 Unsigned ? dwarf::DW_FORM_udata : dwarf::DW_FORM_sdata, Val);
748 void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, DIType Ty) {
749 addConstantValue(Die, Val, isUnsignedDIType(DD, Ty));
752 // addConstantValue - Add constant value entry in variable DIE.
753 void DwarfUnit::addConstantValue(DIE &Die, const APInt &Val, bool Unsigned) {
754 unsigned CIBitWidth = Val.getBitWidth();
755 if (CIBitWidth <= 64) {
756 addConstantValue(Die, Unsigned,
757 Unsigned ? Val.getZExtValue() : Val.getSExtValue());
761 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
763 // Get the raw data form of the large APInt.
764 const uint64_t *Ptr64 = Val.getRawData();
766 int NumBytes = Val.getBitWidth() / 8; // 8 bits per byte.
767 bool LittleEndian = Asm->getDataLayout().isLittleEndian();
769 // Output the constant to DWARF one byte at a time.
770 for (int i = 0; i < NumBytes; i++) {
773 c = Ptr64[i / 8] >> (8 * (i & 7));
775 c = Ptr64[(NumBytes - 1 - i) / 8] >> (8 * ((NumBytes - 1 - i) & 7));
776 addUInt(*Block, dwarf::DW_FORM_data1, c);
779 addBlock(Die, dwarf::DW_AT_const_value, Block);
782 /// addTemplateParams - Add template parameters into buffer.
783 void DwarfUnit::addTemplateParams(DIE &Buffer, DIArray TParams) {
784 // Add template parameters.
785 for (unsigned i = 0, e = TParams.getNumElements(); i != e; ++i) {
786 DIDescriptor Element = TParams.getElement(i);
787 if (Element.isTemplateTypeParameter())
788 constructTemplateTypeParameterDIE(Buffer,
789 DITemplateTypeParameter(Element));
790 else if (Element.isTemplateValueParameter())
791 constructTemplateValueParameterDIE(Buffer,
792 DITemplateValueParameter(Element));
796 /// getOrCreateContextDIE - Get context owner's DIE.
797 DIE *DwarfUnit::getOrCreateContextDIE(DIScope Context) {
798 if (!Context || Context.isFile())
799 return &getUnitDie();
800 if (Context.isType())
801 return getOrCreateTypeDIE(DIType(Context));
802 if (Context.isNameSpace())
803 return getOrCreateNameSpace(DINameSpace(Context));
804 if (Context.isSubprogram())
805 return getOrCreateSubprogramDIE(DISubprogram(Context));
806 return getDIE(Context);
809 DIE *DwarfUnit::createTypeDIE(DICompositeType Ty) {
810 DIScope Context = resolve(Ty.getContext());
811 DIE *ContextDIE = getOrCreateContextDIE(Context);
813 if (DIE *TyDIE = getDIE(Ty))
817 DIE &TyDIE = createAndAddDIE(Ty.getTag(), *ContextDIE, Ty);
819 constructTypeDIE(TyDIE, Ty);
821 updateAcceleratorTables(Context, Ty, TyDIE);
825 /// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
827 DIE *DwarfUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
833 assert(Ty == resolve(Ty.getRef()) &&
834 "type was not uniqued, possible ODR violation.");
836 // DW_TAG_restrict_type is not supported in DWARF2
837 if (Ty.getTag() == dwarf::DW_TAG_restrict_type && DD->getDwarfVersion() <= 2)
838 return getOrCreateTypeDIE(resolve(DIDerivedType(Ty).getTypeDerivedFrom()));
840 // Construct the context before querying for the existence of the DIE in case
841 // such construction creates the DIE.
842 DIScope Context = resolve(Ty.getContext());
843 DIE *ContextDIE = getOrCreateContextDIE(Context);
846 if (DIE *TyDIE = getDIE(Ty))
850 DIE &TyDIE = createAndAddDIE(Ty.getTag(), *ContextDIE, Ty);
852 updateAcceleratorTables(Context, Ty, TyDIE);
854 if (Ty.isBasicType())
855 constructTypeDIE(TyDIE, DIBasicType(Ty));
856 else if (Ty.isCompositeType()) {
857 DICompositeType CTy(Ty);
858 if (GenerateDwarfTypeUnits && !Ty.isForwardDecl())
859 if (MDString *TypeId = CTy.getIdentifier()) {
860 DD->addDwarfTypeUnitType(getCU(), TypeId->getString(), TyDIE, CTy);
861 // Skip updating the accelerator tables since this is not the full type.
864 constructTypeDIE(TyDIE, CTy);
866 assert(Ty.isDerivedType() && "Unknown kind of DIType");
867 constructTypeDIE(TyDIE, DIDerivedType(Ty));
873 void DwarfUnit::updateAcceleratorTables(DIScope Context, DIType Ty,
875 if (!Ty.getName().empty() && !Ty.isForwardDecl()) {
876 bool IsImplementation = 0;
877 if (Ty.isCompositeType()) {
878 DICompositeType CT(Ty);
879 // A runtime language of 0 actually means C/C++ and that any
880 // non-negative value is some version of Objective-C/C++.
881 IsImplementation = (CT.getRunTimeLang() == 0) || CT.isObjcClassComplete();
883 unsigned Flags = IsImplementation ? dwarf::DW_FLAG_type_implementation : 0;
884 DD->addAccelType(Ty.getName(), TyDIE, Flags);
886 if (!Context || Context.isCompileUnit() || Context.isFile() ||
887 Context.isNameSpace())
888 addGlobalType(Ty, TyDIE, Context);
892 /// addType - Add a new type attribute to the specified entity.
893 void DwarfUnit::addType(DIE &Entity, DIType Ty, dwarf::Attribute Attribute) {
894 assert(Ty && "Trying to add a type that doesn't exist?");
896 // Check for pre-existence.
897 DIEEntry *Entry = getDIEEntry(Ty);
898 // If it exists then use the existing value.
900 addDIEEntry(Entity, Attribute, Entry);
905 DIE *Buffer = getOrCreateTypeDIE(Ty);
908 Entry = createDIEEntry(*Buffer);
909 insertDIEEntry(Ty, Entry);
910 addDIEEntry(Entity, Attribute, Entry);
913 /// getParentContextString - Walks the metadata parent chain in a language
914 /// specific manner (using the compile unit language) and returns
915 /// it as a string. This is done at the metadata level because DIEs may
916 /// not currently have been added to the parent context and walking the
917 /// DIEs looking for names is more expensive than walking the metadata.
918 std::string DwarfUnit::getParentContextString(DIScope Context) const {
922 // FIXME: Decide whether to implement this for non-C++ languages.
923 if (getLanguage() != dwarf::DW_LANG_C_plus_plus)
927 SmallVector<DIScope, 1> Parents;
928 while (!Context.isCompileUnit()) {
929 Parents.push_back(Context);
930 if (Context.getContext())
931 Context = resolve(Context.getContext());
933 // Structure, etc types will have a NULL context if they're at the top
938 // Reverse iterate over our list to go from the outermost construct to the
940 for (SmallVectorImpl<DIScope>::reverse_iterator I = Parents.rbegin(),
944 StringRef Name = Ctx.getName();
945 if (Name.empty() && Ctx.isNameSpace())
946 Name = "(anonymous namespace)";
955 /// constructTypeDIE - Construct basic type die from DIBasicType.
956 void DwarfUnit::constructTypeDIE(DIE &Buffer, DIBasicType BTy) {
957 // Get core information.
958 StringRef Name = BTy.getName();
959 // Add name if not anonymous or intermediate type.
961 addString(Buffer, dwarf::DW_AT_name, Name);
963 // An unspecified type only has a name attribute.
964 if (BTy.getTag() == dwarf::DW_TAG_unspecified_type)
967 addUInt(Buffer, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
970 uint64_t Size = BTy.getSizeInBits() >> 3;
971 addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
974 /// constructTypeDIE - Construct derived type die from DIDerivedType.
975 void DwarfUnit::constructTypeDIE(DIE &Buffer, DIDerivedType DTy) {
976 // Get core information.
977 StringRef Name = DTy.getName();
978 uint64_t Size = DTy.getSizeInBits() >> 3;
979 uint16_t Tag = Buffer.getTag();
981 // Map to main type, void will not have a type.
982 DIType FromTy = resolve(DTy.getTypeDerivedFrom());
984 addType(Buffer, FromTy);
986 // Add name if not anonymous or intermediate type.
988 addString(Buffer, dwarf::DW_AT_name, Name);
990 // Add size if non-zero (derived types might be zero-sized.)
991 if (Size && Tag != dwarf::DW_TAG_pointer_type
992 && Tag != dwarf::DW_TAG_ptr_to_member_type)
993 addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
995 if (Tag == dwarf::DW_TAG_ptr_to_member_type)
996 addDIEEntry(Buffer, dwarf::DW_AT_containing_type,
997 *getOrCreateTypeDIE(resolve(DTy.getClassType())));
998 // Add source line info if available and TyDesc is not a forward declaration.
999 if (!DTy.isForwardDecl())
1000 addSourceLine(Buffer, DTy);
1003 /// constructSubprogramArguments - Construct function argument DIEs.
1004 void DwarfUnit::constructSubprogramArguments(DIE &Buffer, DITypeArray Args) {
1005 for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
1006 DIType Ty = resolve(Args.getElement(i));
1008 assert(i == N-1 && "Unspecified parameter must be the last argument");
1009 createAndAddDIE(dwarf::DW_TAG_unspecified_parameters, Buffer);
1011 DIE &Arg = createAndAddDIE(dwarf::DW_TAG_formal_parameter, Buffer);
1013 if (Ty.isArtificial())
1014 addFlag(Arg, dwarf::DW_AT_artificial);
1019 /// constructTypeDIE - Construct type DIE from DICompositeType.
1020 void DwarfUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
1021 // Add name if not anonymous or intermediate type.
1022 StringRef Name = CTy.getName();
1024 uint64_t Size = CTy.getSizeInBits() >> 3;
1025 uint16_t Tag = Buffer.getTag();
1028 case dwarf::DW_TAG_array_type:
1029 constructArrayTypeDIE(Buffer, CTy);
1031 case dwarf::DW_TAG_enumeration_type:
1032 constructEnumTypeDIE(Buffer, CTy);
1034 case dwarf::DW_TAG_subroutine_type: {
1035 // Add return type. A void return won't have a type.
1036 DITypeArray Elements = DISubroutineType(CTy).getTypeArray();
1037 DIType RTy(resolve(Elements.getElement(0)));
1039 addType(Buffer, RTy);
1041 bool isPrototyped = true;
1042 if (Elements.getNumElements() == 2 &&
1043 !Elements.getElement(1))
1044 isPrototyped = false;
1046 constructSubprogramArguments(Buffer, Elements);
1048 // Add prototype flag if we're dealing with a C language and the
1049 // function has been prototyped.
1050 uint16_t Language = getLanguage();
1052 (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||
1053 Language == dwarf::DW_LANG_ObjC))
1054 addFlag(Buffer, dwarf::DW_AT_prototyped);
1056 if (CTy.isLValueReference())
1057 addFlag(Buffer, dwarf::DW_AT_reference);
1059 if (CTy.isRValueReference())
1060 addFlag(Buffer, dwarf::DW_AT_rvalue_reference);
1062 case dwarf::DW_TAG_structure_type:
1063 case dwarf::DW_TAG_union_type:
1064 case dwarf::DW_TAG_class_type: {
1065 // Add elements to structure type.
1066 DIArray Elements = CTy.getElements();
1067 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1068 DIDescriptor Element = Elements.getElement(i);
1069 if (Element.isSubprogram())
1070 getOrCreateSubprogramDIE(DISubprogram(Element));
1071 else if (Element.isDerivedType()) {
1072 DIDerivedType DDTy(Element);
1073 if (DDTy.getTag() == dwarf::DW_TAG_friend) {
1074 DIE &ElemDie = createAndAddDIE(dwarf::DW_TAG_friend, Buffer);
1075 addType(ElemDie, resolve(DDTy.getTypeDerivedFrom()),
1076 dwarf::DW_AT_friend);
1077 } else if (DDTy.isStaticMember()) {
1078 getOrCreateStaticMemberDIE(DDTy);
1080 constructMemberDIE(Buffer, DDTy);
1082 } else if (Element.isObjCProperty()) {
1083 DIObjCProperty Property(Element);
1084 DIE &ElemDie = createAndAddDIE(Property.getTag(), Buffer);
1085 StringRef PropertyName = Property.getObjCPropertyName();
1086 addString(ElemDie, dwarf::DW_AT_APPLE_property_name, PropertyName);
1087 if (Property.getType())
1088 addType(ElemDie, Property.getType());
1089 addSourceLine(ElemDie, Property);
1090 StringRef GetterName = Property.getObjCPropertyGetterName();
1091 if (!GetterName.empty())
1092 addString(ElemDie, dwarf::DW_AT_APPLE_property_getter, GetterName);
1093 StringRef SetterName = Property.getObjCPropertySetterName();
1094 if (!SetterName.empty())
1095 addString(ElemDie, dwarf::DW_AT_APPLE_property_setter, SetterName);
1096 unsigned PropertyAttributes = 0;
1097 if (Property.isReadOnlyObjCProperty())
1098 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readonly;
1099 if (Property.isReadWriteObjCProperty())
1100 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readwrite;
1101 if (Property.isAssignObjCProperty())
1102 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_assign;
1103 if (Property.isRetainObjCProperty())
1104 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_retain;
1105 if (Property.isCopyObjCProperty())
1106 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_copy;
1107 if (Property.isNonAtomicObjCProperty())
1108 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_nonatomic;
1109 if (PropertyAttributes)
1110 addUInt(ElemDie, dwarf::DW_AT_APPLE_property_attribute, None,
1111 PropertyAttributes);
1113 DIEEntry *Entry = getDIEEntry(Element);
1115 Entry = createDIEEntry(ElemDie);
1116 insertDIEEntry(Element, Entry);
1122 if (CTy.isAppleBlockExtension())
1123 addFlag(Buffer, dwarf::DW_AT_APPLE_block);
1125 // This is outside the DWARF spec, but GDB expects a DW_AT_containing_type
1126 // inside C++ composite types to point to the base class with the vtable.
1127 DICompositeType ContainingType(resolve(CTy.getContainingType()));
1129 addDIEEntry(Buffer, dwarf::DW_AT_containing_type,
1130 *getOrCreateTypeDIE(ContainingType));
1132 if (CTy.isObjcClassComplete())
1133 addFlag(Buffer, dwarf::DW_AT_APPLE_objc_complete_type);
1135 // Add template parameters to a class, structure or union types.
1136 // FIXME: The support isn't in the metadata for this yet.
1137 if (Tag == dwarf::DW_TAG_class_type ||
1138 Tag == dwarf::DW_TAG_structure_type || Tag == dwarf::DW_TAG_union_type)
1139 addTemplateParams(Buffer, CTy.getTemplateParams());
1147 // Add name if not anonymous or intermediate type.
1149 addString(Buffer, dwarf::DW_AT_name, Name);
1151 if (Tag == dwarf::DW_TAG_enumeration_type ||
1152 Tag == dwarf::DW_TAG_class_type || Tag == dwarf::DW_TAG_structure_type ||
1153 Tag == dwarf::DW_TAG_union_type) {
1154 // Add size if non-zero (derived types might be zero-sized.)
1155 // TODO: Do we care about size for enum forward declarations?
1157 addUInt(Buffer, dwarf::DW_AT_byte_size, None, Size);
1158 else if (!CTy.isForwardDecl())
1159 // Add zero size if it is not a forward declaration.
1160 addUInt(Buffer, dwarf::DW_AT_byte_size, None, 0);
1162 // If we're a forward decl, say so.
1163 if (CTy.isForwardDecl())
1164 addFlag(Buffer, dwarf::DW_AT_declaration);
1166 // Add source line info if available.
1167 if (!CTy.isForwardDecl())
1168 addSourceLine(Buffer, CTy);
1170 // No harm in adding the runtime language to the declaration.
1171 unsigned RLang = CTy.getRunTimeLang();
1173 addUInt(Buffer, dwarf::DW_AT_APPLE_runtime_class, dwarf::DW_FORM_data1,
1178 /// constructTemplateTypeParameterDIE - Construct new DIE for the given
1179 /// DITemplateTypeParameter.
1180 void DwarfUnit::constructTemplateTypeParameterDIE(DIE &Buffer,
1181 DITemplateTypeParameter TP) {
1183 createAndAddDIE(dwarf::DW_TAG_template_type_parameter, Buffer);
1184 // Add the type if it exists, it could be void and therefore no type.
1186 addType(ParamDIE, resolve(TP.getType()));
1187 if (!TP.getName().empty())
1188 addString(ParamDIE, dwarf::DW_AT_name, TP.getName());
1191 /// constructTemplateValueParameterDIE - Construct new DIE for the given
1192 /// DITemplateValueParameter.
1194 DwarfUnit::constructTemplateValueParameterDIE(DIE &Buffer,
1195 DITemplateValueParameter VP) {
1196 DIE &ParamDIE = createAndAddDIE(VP.getTag(), Buffer);
1198 // Add the type if there is one, template template and template parameter
1199 // packs will not have a type.
1200 if (VP.getTag() == dwarf::DW_TAG_template_value_parameter)
1201 addType(ParamDIE, resolve(VP.getType()));
1202 if (!VP.getName().empty())
1203 addString(ParamDIE, dwarf::DW_AT_name, VP.getName());
1204 if (Metadata *Val = VP.getValue()) {
1205 if (ConstantInt *CI = mdconst::dyn_extract<ConstantInt>(Val))
1206 addConstantValue(ParamDIE, CI, resolve(VP.getType()));
1207 else if (GlobalValue *GV = mdconst::dyn_extract<GlobalValue>(Val)) {
1208 // For declaration non-type template parameters (such as global values and
1210 DIELoc *Loc = new (DIEValueAllocator) DIELoc();
1211 addOpAddress(*Loc, Asm->getSymbol(GV));
1212 // Emit DW_OP_stack_value to use the address as the immediate value of the
1213 // parameter, rather than a pointer to it.
1214 addUInt(*Loc, dwarf::DW_FORM_data1, dwarf::DW_OP_stack_value);
1215 addBlock(ParamDIE, dwarf::DW_AT_location, Loc);
1216 } else if (VP.getTag() == dwarf::DW_TAG_GNU_template_template_param) {
1217 assert(isa<MDString>(Val));
1218 addString(ParamDIE, dwarf::DW_AT_GNU_template_name,
1219 cast<MDString>(Val)->getString());
1220 } else if (VP.getTag() == dwarf::DW_TAG_GNU_template_parameter_pack) {
1221 assert(isa<MDNode>(Val));
1222 DIArray A(cast<MDNode>(Val));
1223 addTemplateParams(ParamDIE, A);
1228 /// getOrCreateNameSpace - Create a DIE for DINameSpace.
1229 DIE *DwarfUnit::getOrCreateNameSpace(DINameSpace NS) {
1230 // Construct the context before querying for the existence of the DIE in case
1231 // such construction creates the DIE.
1232 DIE *ContextDIE = getOrCreateContextDIE(NS.getContext());
1234 if (DIE *NDie = getDIE(NS))
1236 DIE &NDie = createAndAddDIE(dwarf::DW_TAG_namespace, *ContextDIE, NS);
1238 StringRef Name = NS.getName();
1240 addString(NDie, dwarf::DW_AT_name, NS.getName());
1242 Name = "(anonymous namespace)";
1243 DD->addAccelNamespace(Name, NDie);
1244 addGlobalName(Name, NDie, NS.getContext());
1245 addSourceLine(NDie, NS);
1249 /// getOrCreateSubprogramDIE - Create new DIE using SP.
1250 DIE *DwarfUnit::getOrCreateSubprogramDIE(DISubprogram SP, bool Minimal) {
1251 // Construct the context before querying for the existence of the DIE in case
1252 // such construction creates the DIE (as is the case for member function
1255 Minimal ? &getUnitDie() : getOrCreateContextDIE(resolve(SP.getContext()));
1257 if (DIE *SPDie = getDIE(SP))
1260 if (DISubprogram SPDecl = SP.getFunctionDeclaration()) {
1262 // Add subprogram definitions to the CU die directly.
1263 ContextDIE = &getUnitDie();
1264 // Build the decl now to ensure it precedes the definition.
1265 getOrCreateSubprogramDIE(SPDecl);
1269 // DW_TAG_inlined_subroutine may refer to this DIE.
1270 DIE &SPDie = createAndAddDIE(dwarf::DW_TAG_subprogram, *ContextDIE, SP);
1272 // Stop here and fill this in later, depending on whether or not this
1273 // subprogram turns out to have inlined instances or not.
1274 if (SP.isDefinition())
1277 applySubprogramAttributes(SP, SPDie);
1281 bool DwarfUnit::applySubprogramDefinitionAttributes(DISubprogram SP,
1283 DIE *DeclDie = nullptr;
1284 StringRef DeclLinkageName;
1285 if (DISubprogram SPDecl = SP.getFunctionDeclaration()) {
1286 DeclDie = getDIE(SPDecl);
1287 assert(DeclDie && "This DIE should've already been constructed when the "
1288 "definition DIE was created in "
1289 "getOrCreateSubprogramDIE");
1290 DeclLinkageName = SPDecl.getLinkageName();
1293 // Add function template parameters.
1294 addTemplateParams(SPDie, SP.getTemplateParams());
1296 // Add the linkage name if we have one and it isn't in the Decl.
1297 StringRef LinkageName = SP.getLinkageName();
1298 assert(((LinkageName.empty() || DeclLinkageName.empty()) ||
1299 LinkageName == DeclLinkageName) &&
1300 "decl has a linkage name and it is different");
1301 if (!LinkageName.empty() && DeclLinkageName.empty())
1302 addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
1303 GlobalValue::getRealLinkageName(LinkageName));
1308 // Refer to the function declaration where all the other attributes will be
1310 addDIEEntry(SPDie, dwarf::DW_AT_specification, *DeclDie);
1314 void DwarfUnit::applySubprogramAttributes(DISubprogram SP, DIE &SPDie,
1317 if (applySubprogramDefinitionAttributes(SP, SPDie))
1320 // Constructors and operators for anonymous aggregates do not have names.
1321 if (!SP.getName().empty())
1322 addString(SPDie, dwarf::DW_AT_name, SP.getName());
1324 // Skip the rest of the attributes under -gmlt to save space.
1328 addSourceLine(SPDie, SP);
1330 // Add the prototype if we have a prototype and we have a C like
1332 uint16_t Language = getLanguage();
1333 if (SP.isPrototyped() &&
1334 (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||
1335 Language == dwarf::DW_LANG_ObjC))
1336 addFlag(SPDie, dwarf::DW_AT_prototyped);
1338 DISubroutineType SPTy = SP.getType();
1339 assert(SPTy.getTag() == dwarf::DW_TAG_subroutine_type &&
1340 "the type of a subprogram should be a subroutine");
1342 DITypeArray Args = SPTy.getTypeArray();
1343 // Add a return type. If this is a type like a C/C++ void type we don't add a
1345 if (resolve(Args.getElement(0)))
1346 addType(SPDie, DIType(resolve(Args.getElement(0))));
1348 unsigned VK = SP.getVirtuality();
1350 addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1, VK);
1351 DIELoc *Block = getDIELoc();
1352 addUInt(*Block, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1353 addUInt(*Block, dwarf::DW_FORM_udata, SP.getVirtualIndex());
1354 addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, Block);
1355 ContainingTypeMap.insert(
1356 std::make_pair(&SPDie, resolve(SP.getContainingType())));
1359 if (!SP.isDefinition()) {
1360 addFlag(SPDie, dwarf::DW_AT_declaration);
1362 // Add arguments. Do not add arguments for subprogram definition. They will
1363 // be handled while processing variables.
1364 constructSubprogramArguments(SPDie, Args);
1367 if (SP.isArtificial())
1368 addFlag(SPDie, dwarf::DW_AT_artificial);
1370 if (!SP.isLocalToUnit())
1371 addFlag(SPDie, dwarf::DW_AT_external);
1373 if (SP.isOptimized())
1374 addFlag(SPDie, dwarf::DW_AT_APPLE_optimized);
1376 if (unsigned isa = Asm->getISAEncoding()) {
1377 addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa);
1380 if (SP.isLValueReference())
1381 addFlag(SPDie, dwarf::DW_AT_reference);
1383 if (SP.isRValueReference())
1384 addFlag(SPDie, dwarf::DW_AT_rvalue_reference);
1386 if (SP.isProtected())
1387 addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1388 dwarf::DW_ACCESS_protected);
1389 else if (SP.isPrivate())
1390 addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1391 dwarf::DW_ACCESS_private);
1392 else if (SP.isPublic())
1393 addUInt(SPDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1394 dwarf::DW_ACCESS_public);
1396 if (SP.isExplicit())
1397 addFlag(SPDie, dwarf::DW_AT_explicit);
1400 /// constructSubrangeDIE - Construct subrange DIE from DISubrange.
1401 void DwarfUnit::constructSubrangeDIE(DIE &Buffer, DISubrange SR, DIE *IndexTy) {
1402 DIE &DW_Subrange = createAndAddDIE(dwarf::DW_TAG_subrange_type, Buffer);
1403 addDIEEntry(DW_Subrange, dwarf::DW_AT_type, *IndexTy);
1405 // The LowerBound value defines the lower bounds which is typically zero for
1406 // C/C++. The Count value is the number of elements. Values are 64 bit. If
1407 // Count == -1 then the array is unbounded and we do not emit
1408 // DW_AT_lower_bound and DW_AT_count attributes.
1409 int64_t LowerBound = SR.getLo();
1410 int64_t DefaultLowerBound = getDefaultLowerBound();
1411 int64_t Count = SR.getCount();
1413 if (DefaultLowerBound == -1 || LowerBound != DefaultLowerBound)
1414 addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, None, LowerBound);
1417 // FIXME: An unbounded array should reference the expression that defines
1419 addUInt(DW_Subrange, dwarf::DW_AT_count, None, Count);
1422 DIE *DwarfUnit::getIndexTyDie() {
1425 // Construct an integer type to use for indexes.
1426 IndexTyDie = &createAndAddDIE(dwarf::DW_TAG_base_type, UnitDie);
1427 addString(*IndexTyDie, dwarf::DW_AT_name, "sizetype");
1428 addUInt(*IndexTyDie, dwarf::DW_AT_byte_size, None, sizeof(int64_t));
1429 addUInt(*IndexTyDie, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1430 dwarf::DW_ATE_unsigned);
1434 /// constructArrayTypeDIE - Construct array type DIE from DICompositeType.
1435 void DwarfUnit::constructArrayTypeDIE(DIE &Buffer, DICompositeType CTy) {
1437 addFlag(Buffer, dwarf::DW_AT_GNU_vector);
1439 // Emit the element type.
1440 addType(Buffer, resolve(CTy.getTypeDerivedFrom()));
1442 // Get an anonymous type for index type.
1443 // FIXME: This type should be passed down from the front end
1444 // as different languages may have different sizes for indexes.
1445 DIE *IdxTy = getIndexTyDie();
1447 // Add subranges to array type.
1448 DIArray Elements = CTy.getElements();
1449 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1450 DIDescriptor Element = Elements.getElement(i);
1451 if (Element.getTag() == dwarf::DW_TAG_subrange_type)
1452 constructSubrangeDIE(Buffer, DISubrange(Element), IdxTy);
1456 /// constructEnumTypeDIE - Construct an enum type DIE from DICompositeType.
1457 void DwarfUnit::constructEnumTypeDIE(DIE &Buffer, DICompositeType CTy) {
1458 DIArray Elements = CTy.getElements();
1460 // Add enumerators to enumeration type.
1461 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1462 DIEnumerator Enum(Elements.getElement(i));
1463 if (Enum.isEnumerator()) {
1464 DIE &Enumerator = createAndAddDIE(dwarf::DW_TAG_enumerator, Buffer);
1465 StringRef Name = Enum.getName();
1466 addString(Enumerator, dwarf::DW_AT_name, Name);
1467 int64_t Value = Enum.getEnumValue();
1468 addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata,
1472 DIType DTy = resolve(CTy.getTypeDerivedFrom());
1474 addType(Buffer, DTy);
1475 addFlag(Buffer, dwarf::DW_AT_enum_class);
1479 /// constructContainingTypeDIEs - Construct DIEs for types that contain
1481 void DwarfUnit::constructContainingTypeDIEs() {
1482 for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(),
1483 CE = ContainingTypeMap.end();
1485 DIE &SPDie = *CI->first;
1486 DIDescriptor D(CI->second);
1489 DIE *NDie = getDIE(D);
1492 addDIEEntry(SPDie, dwarf::DW_AT_containing_type, *NDie);
1496 /// constructMemberDIE - Construct member DIE from DIDerivedType.
1497 void DwarfUnit::constructMemberDIE(DIE &Buffer, DIDerivedType DT) {
1498 DIE &MemberDie = createAndAddDIE(DT.getTag(), Buffer);
1499 StringRef Name = DT.getName();
1501 addString(MemberDie, dwarf::DW_AT_name, Name);
1503 addType(MemberDie, resolve(DT.getTypeDerivedFrom()));
1505 addSourceLine(MemberDie, DT);
1507 if (DT.getTag() == dwarf::DW_TAG_inheritance && DT.isVirtual()) {
1509 // For C++, virtual base classes are not at fixed offset. Use following
1510 // expression to extract appropriate offset from vtable.
1511 // BaseAddr = ObAddr + *((*ObAddr) - Offset)
1513 DIELoc *VBaseLocationDie = new (DIEValueAllocator) DIELoc();
1514 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_dup);
1515 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1516 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1517 addUInt(*VBaseLocationDie, dwarf::DW_FORM_udata, DT.getOffsetInBits());
1518 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_minus);
1519 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1520 addUInt(*VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1522 addBlock(MemberDie, dwarf::DW_AT_data_member_location, VBaseLocationDie);
1524 uint64_t Size = DT.getSizeInBits();
1525 uint64_t FieldSize = getBaseTypeSize(DD, DT);
1526 uint64_t OffsetInBytes;
1528 if (Size != FieldSize) {
1529 // Handle bitfield, assume bytes are 8 bits.
1530 addUInt(MemberDie, dwarf::DW_AT_byte_size, None, FieldSize/8);
1531 addUInt(MemberDie, dwarf::DW_AT_bit_size, None, Size);
1533 uint64_t Offset = DT.getOffsetInBits();
1534 uint64_t AlignMask = ~(DT.getAlignInBits() - 1);
1535 uint64_t HiMark = (Offset + FieldSize) & AlignMask;
1536 uint64_t FieldOffset = (HiMark - FieldSize);
1537 Offset -= FieldOffset;
1539 // Maybe we need to work from the other end.
1540 if (Asm->getDataLayout().isLittleEndian())
1541 Offset = FieldSize - (Offset + Size);
1542 addUInt(MemberDie, dwarf::DW_AT_bit_offset, None, Offset);
1544 // Here DW_AT_data_member_location points to the anonymous
1545 // field that includes this bit field.
1546 OffsetInBytes = FieldOffset >> 3;
1548 // This is not a bitfield.
1549 OffsetInBytes = DT.getOffsetInBits() >> 3;
1551 if (DD->getDwarfVersion() <= 2) {
1552 DIELoc *MemLocationDie = new (DIEValueAllocator) DIELoc();
1553 addUInt(*MemLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
1554 addUInt(*MemLocationDie, dwarf::DW_FORM_udata, OffsetInBytes);
1555 addBlock(MemberDie, dwarf::DW_AT_data_member_location, MemLocationDie);
1557 addUInt(MemberDie, dwarf::DW_AT_data_member_location, None,
1561 if (DT.isProtected())
1562 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1563 dwarf::DW_ACCESS_protected);
1564 else if (DT.isPrivate())
1565 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1566 dwarf::DW_ACCESS_private);
1567 // Otherwise C++ member and base classes are considered public.
1568 else if (DT.isPublic())
1569 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1570 dwarf::DW_ACCESS_public);
1572 addUInt(MemberDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1,
1573 dwarf::DW_VIRTUALITY_virtual);
1575 // Objective-C properties.
1576 if (MDNode *PNode = DT.getObjCProperty())
1577 if (DIEEntry *PropertyDie = getDIEEntry(PNode))
1578 MemberDie.addValue(dwarf::DW_AT_APPLE_property, dwarf::DW_FORM_ref4,
1581 if (DT.isArtificial())
1582 addFlag(MemberDie, dwarf::DW_AT_artificial);
1585 /// getOrCreateStaticMemberDIE - Create new DIE for C++ static member.
1586 DIE *DwarfUnit::getOrCreateStaticMemberDIE(DIDerivedType DT) {
1590 // Construct the context before querying for the existence of the DIE in case
1591 // such construction creates the DIE.
1592 DIE *ContextDIE = getOrCreateContextDIE(resolve(DT.getContext()));
1593 assert(dwarf::isType(ContextDIE->getTag()) &&
1594 "Static member should belong to a type.");
1596 if (DIE *StaticMemberDIE = getDIE(DT))
1597 return StaticMemberDIE;
1599 DIE &StaticMemberDIE = createAndAddDIE(DT.getTag(), *ContextDIE, DT);
1601 DIType Ty = resolve(DT.getTypeDerivedFrom());
1603 addString(StaticMemberDIE, dwarf::DW_AT_name, DT.getName());
1604 addType(StaticMemberDIE, Ty);
1605 addSourceLine(StaticMemberDIE, DT);
1606 addFlag(StaticMemberDIE, dwarf::DW_AT_external);
1607 addFlag(StaticMemberDIE, dwarf::DW_AT_declaration);
1609 // FIXME: We could omit private if the parent is a class_type, and
1610 // public if the parent is something else.
1611 if (DT.isProtected())
1612 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1613 dwarf::DW_ACCESS_protected);
1614 else if (DT.isPrivate())
1615 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1616 dwarf::DW_ACCESS_private);
1617 else if (DT.isPublic())
1618 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1619 dwarf::DW_ACCESS_public);
1621 if (const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(DT.getConstant()))
1622 addConstantValue(StaticMemberDIE, CI, Ty);
1623 if (const ConstantFP *CFP = dyn_cast_or_null<ConstantFP>(DT.getConstant()))
1624 addConstantFPValue(StaticMemberDIE, CFP);
1626 return &StaticMemberDIE;
1629 void DwarfUnit::emitHeader(const MCSymbol *ASectionSym) const {
1630 // Emit size of content not including length itself
1631 Asm->OutStreamer.AddComment("Length of Unit");
1632 Asm->EmitInt32(getHeaderSize() + UnitDie.getSize());
1634 Asm->OutStreamer.AddComment("DWARF version number");
1635 Asm->EmitInt16(DD->getDwarfVersion());
1636 Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1637 // We share one abbreviations table across all units so it's always at the
1638 // start of the section. Use a relocatable offset where needed to ensure
1639 // linking doesn't invalidate that offset.
1641 Asm->EmitSectionOffset(ASectionSym, ASectionSym);
1643 // Use a constant value when no symbol is provided.
1645 Asm->OutStreamer.AddComment("Address Size (in bytes)");
1646 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());
1649 void DwarfUnit::initSection(const MCSection *Section) {
1650 assert(!this->Section);
1651 this->Section = Section;
1654 void DwarfTypeUnit::emitHeader(const MCSymbol *ASectionSym) const {
1655 DwarfUnit::emitHeader(ASectionSym);
1656 Asm->OutStreamer.AddComment("Type Signature");
1657 Asm->OutStreamer.EmitIntValue(TypeSignature, sizeof(TypeSignature));
1658 Asm->OutStreamer.AddComment("Type DIE Offset");
1659 // In a skeleton type unit there is no type DIE so emit a zero offset.
1660 Asm->OutStreamer.EmitIntValue(Ty ? Ty->getOffset() : 0,
1661 sizeof(Ty->getOffset()));
1664 bool DwarfTypeUnit::isDwoUnit() const {
1665 // Since there are no skeleton type units, all type units are dwo type units
1666 // when split DWARF is being used.
1667 return DD->useSplitDwarf();