1 //===-- llvm/CodeGen/DwarfCompileUnit.cpp - Dwarf Compile Unit ------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file contains support for constructing a dwarf compile unit.
12 //===----------------------------------------------------------------------===//
14 #define DEBUG_TYPE "dwarfdebug"
16 #include "DwarfCompileUnit.h"
17 #include "DwarfAccelTable.h"
18 #include "DwarfDebug.h"
19 #include "llvm/ADT/APFloat.h"
20 #include "llvm/DIBuilder.h"
21 #include "llvm/IR/Constants.h"
22 #include "llvm/IR/DataLayout.h"
23 #include "llvm/IR/GlobalVariable.h"
24 #include "llvm/IR/Instructions.h"
25 #include "llvm/MC/MCSection.h"
26 #include "llvm/MC/MCStreamer.h"
27 #include "llvm/Target/Mangler.h"
28 #include "llvm/Target/TargetFrameLowering.h"
29 #include "llvm/Target/TargetMachine.h"
30 #include "llvm/Target/TargetLoweringObjectFile.h"
31 #include "llvm/Target/TargetRegisterInfo.h"
35 /// CompileUnit - Compile unit constructor.
36 CompileUnit::CompileUnit(unsigned UID, DIE *D, const MDNode *N, AsmPrinter *A,
37 DwarfDebug *DW, DwarfUnits *DWU)
38 : UniqueID(UID), Node(N), CUDie(D), Asm(A), DD(DW), DU(DWU), IndexTyDie(0),
40 DIEIntegerOne = new (DIEValueAllocator) DIEInteger(1);
44 /// ~CompileUnit - Destructor for compile unit.
45 CompileUnit::~CompileUnit() {
46 for (unsigned j = 0, M = DIEBlocks.size(); j < M; ++j)
47 DIEBlocks[j]->~DIEBlock();
50 /// createDIEEntry - Creates a new DIEEntry to be a proxy for a debug
51 /// information entry.
52 DIEEntry *CompileUnit::createDIEEntry(DIE *Entry) {
53 DIEEntry *Value = new (DIEValueAllocator) DIEEntry(Entry);
57 /// getDefaultLowerBound - Return the default lower bound for an array. If the
58 /// DWARF version doesn't handle the language, return -1.
59 int64_t CompileUnit::getDefaultLowerBound() const {
60 switch (DICompileUnit(Node).getLanguage()) {
64 case dwarf::DW_LANG_C89:
65 case dwarf::DW_LANG_C99:
66 case dwarf::DW_LANG_C:
67 case dwarf::DW_LANG_C_plus_plus:
68 case dwarf::DW_LANG_ObjC:
69 case dwarf::DW_LANG_ObjC_plus_plus:
72 case dwarf::DW_LANG_Fortran77:
73 case dwarf::DW_LANG_Fortran90:
74 case dwarf::DW_LANG_Fortran95:
77 // The languages below have valid values only if the DWARF version >= 4.
78 case dwarf::DW_LANG_Java:
79 case dwarf::DW_LANG_Python:
80 case dwarf::DW_LANG_UPC:
81 case dwarf::DW_LANG_D:
82 if (dwarf::DWARF_VERSION >= 4)
86 case dwarf::DW_LANG_Ada83:
87 case dwarf::DW_LANG_Ada95:
88 case dwarf::DW_LANG_Cobol74:
89 case dwarf::DW_LANG_Cobol85:
90 case dwarf::DW_LANG_Modula2:
91 case dwarf::DW_LANG_Pascal83:
92 case dwarf::DW_LANG_PLI:
93 if (dwarf::DWARF_VERSION >= 4)
101 /// Check whether the DIE for this MDNode can be shared across CUs.
102 static bool isShareableAcrossCUs(const MDNode *N) {
103 // When the MDNode can be part of the type system, the DIE can be
104 // shared across CUs.
105 return DIDescriptor(N).isType() ||
106 (DIDescriptor(N).isSubprogram() && !DISubprogram(N).isDefinition());
109 /// getDIE - Returns the debug information entry map slot for the
110 /// specified debug variable. We delegate the request to DwarfDebug
111 /// when the DIE for this MDNode can be shared across CUs. The mappings
112 /// will be kept in DwarfDebug for shareable DIEs.
113 DIE *CompileUnit::getDIE(const MDNode *N) const {
114 if (isShareableAcrossCUs(N))
115 return DD->getDIE(N);
116 return MDNodeToDieMap.lookup(N);
119 /// insertDIE - Insert DIE into the map. We delegate the request to DwarfDebug
120 /// when the DIE for this MDNode can be shared across CUs. The mappings
121 /// will be kept in DwarfDebug for shareable DIEs.
122 void CompileUnit::insertDIE(const MDNode *N, DIE *D) {
123 if (isShareableAcrossCUs(N)) {
127 MDNodeToDieMap.insert(std::make_pair(N, D));
130 /// addFlag - Add a flag that is true.
131 void CompileUnit::addFlag(DIE *Die, dwarf::Attribute Attribute) {
132 if (DD->getDwarfVersion() >= 4)
133 Die->addValue(Attribute, dwarf::DW_FORM_flag_present, DIEIntegerOne);
135 Die->addValue(Attribute, dwarf::DW_FORM_flag, DIEIntegerOne);
138 /// addUInt - Add an unsigned integer attribute data and value.
140 void CompileUnit::addUInt(DIE *Die, dwarf::Attribute Attribute,
141 Optional<dwarf::Form> Form, uint64_t Integer) {
143 Form = DIEInteger::BestForm(false, Integer);
144 DIEValue *Value = Integer == 1 ? DIEIntegerOne : new (DIEValueAllocator)
146 Die->addValue(Attribute, *Form, Value);
149 void CompileUnit::addUInt(DIEBlock *Block, dwarf::Form Form, uint64_t Integer) {
150 addUInt(Block, (dwarf::Attribute)0, Form, Integer);
153 /// addSInt - Add an signed integer attribute data and value.
155 void CompileUnit::addSInt(DIE *Die, dwarf::Attribute Attribute,
156 Optional<dwarf::Form> Form, int64_t Integer) {
158 Form = DIEInteger::BestForm(true, Integer);
159 DIEValue *Value = new (DIEValueAllocator) DIEInteger(Integer);
160 Die->addValue(Attribute, *Form, Value);
163 void CompileUnit::addSInt(DIEBlock *Die, Optional<dwarf::Form> Form,
165 addSInt(Die, (dwarf::Attribute)0, Form, Integer);
168 /// addString - Add a string attribute data and value. We always emit a
169 /// reference to the string pool instead of immediate strings so that DIEs have
170 /// more predictable sizes. In the case of split dwarf we emit an index
171 /// into another table which gets us the static offset into the string
173 void CompileUnit::addString(DIE *Die, dwarf::Attribute Attribute,
177 if (!DD->useSplitDwarf()) {
178 MCSymbol *Symb = DU->getStringPoolEntry(String);
179 if (Asm->needsRelocationsForDwarfStringPool())
180 Value = new (DIEValueAllocator) DIELabel(Symb);
182 MCSymbol *StringPool = DU->getStringPoolSym();
183 Value = new (DIEValueAllocator) DIEDelta(Symb, StringPool);
185 Form = dwarf::DW_FORM_strp;
187 unsigned idx = DU->getStringPoolIndex(String);
188 Value = new (DIEValueAllocator) DIEInteger(idx);
189 Form = dwarf::DW_FORM_GNU_str_index;
191 DIEValue *Str = new (DIEValueAllocator) DIEString(Value, String);
192 Die->addValue(Attribute, Form, Str);
195 /// addLocalString - Add a string attribute data and value. This is guaranteed
196 /// to be in the local string pool instead of indirected.
197 void CompileUnit::addLocalString(DIE *Die, dwarf::Attribute Attribute,
199 MCSymbol *Symb = DU->getStringPoolEntry(String);
201 if (Asm->needsRelocationsForDwarfStringPool())
202 Value = new (DIEValueAllocator) DIELabel(Symb);
204 MCSymbol *StringPool = DU->getStringPoolSym();
205 Value = new (DIEValueAllocator) DIEDelta(Symb, StringPool);
207 Die->addValue(Attribute, dwarf::DW_FORM_strp, Value);
210 /// addExpr - Add a Dwarf expression attribute data and value.
212 void CompileUnit::addExpr(DIEBlock *Die, dwarf::Form Form, const MCExpr *Expr) {
213 DIEValue *Value = new (DIEValueAllocator) DIEExpr(Expr);
214 Die->addValue((dwarf::Attribute)0, Form, Value);
217 /// addLabel - Add a Dwarf label attribute data and value.
219 void CompileUnit::addLabel(DIE *Die, dwarf::Attribute Attribute,
220 dwarf::Form Form, const MCSymbol *Label) {
221 DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
222 Die->addValue(Attribute, Form, Value);
225 void CompileUnit::addLabel(DIEBlock *Die, dwarf::Form Form,
226 const MCSymbol *Label) {
227 addLabel(Die, (dwarf::Attribute)0, Form, Label);
230 /// addLabelAddress - Add a dwarf label attribute data and value using
231 /// DW_FORM_addr or DW_FORM_GNU_addr_index.
233 void CompileUnit::addLabelAddress(DIE *Die, dwarf::Attribute Attribute,
236 DD->addArangeLabel(SymbolCU(this, Label));
238 if (!DD->useSplitDwarf()) {
240 DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
241 Die->addValue(Attribute, dwarf::DW_FORM_addr, Value);
243 DIEValue *Value = new (DIEValueAllocator) DIEInteger(0);
244 Die->addValue(Attribute, dwarf::DW_FORM_addr, Value);
247 unsigned idx = DU->getAddrPoolIndex(Label);
248 DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
249 Die->addValue(Attribute, dwarf::DW_FORM_GNU_addr_index, Value);
253 /// addOpAddress - Add a dwarf op address data and value using the
254 /// form given and an op of either DW_FORM_addr or DW_FORM_GNU_addr_index.
256 void CompileUnit::addOpAddress(DIEBlock *Die, const MCSymbol *Sym) {
257 DD->addArangeLabel(SymbolCU(this, Sym));
258 if (!DD->useSplitDwarf()) {
259 addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
260 addLabel(Die, dwarf::DW_FORM_udata, Sym);
262 addUInt(Die, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_addr_index);
263 addUInt(Die, dwarf::DW_FORM_GNU_addr_index, DU->getAddrPoolIndex(Sym));
267 /// addDelta - Add a label delta attribute data and value.
269 void CompileUnit::addDelta(DIE *Die, dwarf::Attribute Attribute,
270 dwarf::Form Form, const MCSymbol *Hi,
271 const MCSymbol *Lo) {
272 DIEValue *Value = new (DIEValueAllocator) DIEDelta(Hi, Lo);
273 Die->addValue(Attribute, Form, Value);
276 /// addDIEEntry - Add a DIE attribute data and value.
278 void CompileUnit::addDIEEntry(DIE *Die, dwarf::Attribute Attribute,
280 addDIEEntry(Die, Attribute, createDIEEntry(Entry));
283 void CompileUnit::addDIEEntry(DIE *Die, dwarf::Attribute Attribute,
285 const DIE *DieCU = Die->getCompileUnitOrNull();
286 const DIE *EntryCU = Entry->getEntry()->getCompileUnitOrNull();
288 // We assume that Die belongs to this CU, if it is not linked to any CU yet.
291 EntryCU = getCUDie();
292 Die->addValue(Attribute, EntryCU == DieCU ? dwarf::DW_FORM_ref4
293 : dwarf::DW_FORM_ref_addr,
297 /// Create a DIE with the given Tag, add the DIE to its parent, and
298 /// call insertDIE if MD is not null.
299 DIE *CompileUnit::createAndAddDIE(unsigned Tag, DIE &Parent, const MDNode *MD) {
300 DIE *Die = new DIE(Tag);
301 Parent.addChild(Die);
307 /// addBlock - Add block data.
309 void CompileUnit::addBlock(DIE *Die, dwarf::Attribute Attribute,
311 Block->ComputeSize(Asm);
312 DIEBlocks.push_back(Block); // Memoize so we can call the destructor later on.
313 Die->addValue(Attribute, Block->BestForm(), Block);
316 /// addSourceLine - Add location information to specified debug information
318 void CompileUnit::addSourceLine(DIE *Die, DIVariable V) {
323 unsigned Line = V.getLineNumber();
327 DD->getOrCreateSourceID(V.getContext().getFilename(),
328 V.getContext().getDirectory(), getUniqueID());
329 assert(FileID && "Invalid file id");
330 addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
331 addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
334 /// addSourceLine - Add location information to specified debug information
336 void CompileUnit::addSourceLine(DIE *Die, DIGlobalVariable G) {
337 // Verify global variable.
338 if (!G.isGlobalVariable())
341 unsigned Line = G.getLineNumber();
345 DD->getOrCreateSourceID(G.getFilename(), G.getDirectory(), getUniqueID());
346 assert(FileID && "Invalid file id");
347 addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
348 addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
351 /// addSourceLine - Add location information to specified debug information
353 void CompileUnit::addSourceLine(DIE *Die, DISubprogram SP) {
354 // Verify subprogram.
355 if (!SP.isSubprogram())
358 // If the line number is 0, don't add it.
359 unsigned Line = SP.getLineNumber();
363 unsigned FileID = DD->getOrCreateSourceID(SP.getFilename(), SP.getDirectory(),
365 assert(FileID && "Invalid file id");
366 addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
367 addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
370 /// addSourceLine - Add location information to specified debug information
372 void CompileUnit::addSourceLine(DIE *Die, DIType Ty) {
377 unsigned Line = Ty.getLineNumber();
380 unsigned FileID = DD->getOrCreateSourceID(Ty.getFilename(), Ty.getDirectory(),
382 assert(FileID && "Invalid file id");
383 addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
384 addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
387 /// addSourceLine - Add location information to specified debug information
389 void CompileUnit::addSourceLine(DIE *Die, DIObjCProperty Ty) {
391 if (!Ty.isObjCProperty())
394 unsigned Line = Ty.getLineNumber();
397 DIFile File = Ty.getFile();
398 unsigned FileID = DD->getOrCreateSourceID(File.getFilename(),
399 File.getDirectory(), getUniqueID());
400 assert(FileID && "Invalid file id");
401 addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
402 addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
405 /// addSourceLine - Add location information to specified debug information
407 void CompileUnit::addSourceLine(DIE *Die, DINameSpace NS) {
412 unsigned Line = NS.getLineNumber();
415 StringRef FN = NS.getFilename();
418 DD->getOrCreateSourceID(FN, NS.getDirectory(), getUniqueID());
419 assert(FileID && "Invalid file id");
420 addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
421 addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
424 /// addVariableAddress - Add DW_AT_location attribute for a
425 /// DbgVariable based on provided MachineLocation.
426 void CompileUnit::addVariableAddress(const DbgVariable &DV, DIE *Die,
427 MachineLocation Location) {
428 if (DV.variableHasComplexAddress())
429 addComplexAddress(DV, Die, dwarf::DW_AT_location, Location);
430 else if (DV.isBlockByrefVariable())
431 addBlockByrefAddress(DV, Die, dwarf::DW_AT_location, Location);
433 addAddress(Die, dwarf::DW_AT_location, Location,
434 DV.getVariable().isIndirect());
437 /// addRegisterOp - Add register operand.
438 void CompileUnit::addRegisterOp(DIEBlock *TheDie, unsigned Reg) {
439 const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
440 unsigned DWReg = RI->getDwarfRegNum(Reg, false);
442 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + DWReg);
444 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_regx);
445 addUInt(TheDie, dwarf::DW_FORM_udata, DWReg);
449 /// addRegisterOffset - Add register offset.
450 void CompileUnit::addRegisterOffset(DIEBlock *TheDie, unsigned Reg,
452 const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
453 unsigned DWReg = RI->getDwarfRegNum(Reg, false);
454 const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
455 if (Reg == TRI->getFrameRegister(*Asm->MF))
456 // If variable offset is based in frame register then use fbreg.
457 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_fbreg);
459 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + DWReg);
461 addUInt(TheDie, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx);
462 addUInt(TheDie, dwarf::DW_FORM_udata, DWReg);
464 addSInt(TheDie, dwarf::DW_FORM_sdata, Offset);
467 /// addAddress - Add an address attribute to a die based on the location
469 void CompileUnit::addAddress(DIE *Die, dwarf::Attribute Attribute,
470 const MachineLocation &Location, bool Indirect) {
471 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
473 if (Location.isReg() && !Indirect)
474 addRegisterOp(Block, Location.getReg());
476 addRegisterOffset(Block, Location.getReg(), Location.getOffset());
477 if (Indirect && !Location.isReg()) {
478 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
482 // Now attach the location information to the DIE.
483 addBlock(Die, Attribute, Block);
486 /// addComplexAddress - Start with the address based on the location provided,
487 /// and generate the DWARF information necessary to find the actual variable
488 /// given the extra address information encoded in the DIVariable, starting from
489 /// the starting location. Add the DWARF information to the die.
491 void CompileUnit::addComplexAddress(const DbgVariable &DV, DIE *Die,
492 dwarf::Attribute Attribute,
493 const MachineLocation &Location) {
494 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
495 unsigned N = DV.getNumAddrElements();
497 if (Location.isReg()) {
498 if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
499 // If first address element is OpPlus then emit
500 // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
501 addRegisterOffset(Block, Location.getReg(), DV.getAddrElement(1));
504 addRegisterOp(Block, Location.getReg());
506 addRegisterOffset(Block, Location.getReg(), Location.getOffset());
509 uint64_t Element = DV.getAddrElement(i);
510 if (Element == DIBuilder::OpPlus) {
511 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
512 addUInt(Block, dwarf::DW_FORM_udata, DV.getAddrElement(++i));
513 } else if (Element == DIBuilder::OpDeref) {
514 if (!Location.isReg())
515 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
517 llvm_unreachable("unknown DIBuilder Opcode");
520 // Now attach the location information to the DIE.
521 addBlock(Die, Attribute, Block);
524 /* Byref variables, in Blocks, are declared by the programmer as "SomeType
525 VarName;", but the compiler creates a __Block_byref_x_VarName struct, and
526 gives the variable VarName either the struct, or a pointer to the struct, as
527 its type. This is necessary for various behind-the-scenes things the
528 compiler needs to do with by-reference variables in Blocks.
530 However, as far as the original *programmer* is concerned, the variable
531 should still have type 'SomeType', as originally declared.
533 The function getBlockByrefType dives into the __Block_byref_x_VarName
534 struct to find the original type of the variable, which is then assigned to
535 the variable's Debug Information Entry as its real type. So far, so good.
536 However now the debugger will expect the variable VarName to have the type
537 SomeType. So we need the location attribute for the variable to be an
538 expression that explains to the debugger how to navigate through the
539 pointers and struct to find the actual variable of type SomeType.
541 The following function does just that. We start by getting
542 the "normal" location for the variable. This will be the location
543 of either the struct __Block_byref_x_VarName or the pointer to the
544 struct __Block_byref_x_VarName.
546 The struct will look something like:
548 struct __Block_byref_x_VarName {
550 struct __Block_byref_x_VarName *forwarding;
551 ... <various other fields>
553 ... <maybe more fields>
556 If we are given the struct directly (as our starting point) we
557 need to tell the debugger to:
559 1). Add the offset of the forwarding field.
561 2). Follow that pointer to get the real __Block_byref_x_VarName
562 struct to use (the real one may have been copied onto the heap).
564 3). Add the offset for the field VarName, to find the actual variable.
566 If we started with a pointer to the struct, then we need to
567 dereference that pointer first, before the other steps.
568 Translating this into DWARF ops, we will need to append the following
569 to the current location description for the variable:
571 DW_OP_deref -- optional, if we start with a pointer
572 DW_OP_plus_uconst <forward_fld_offset>
574 DW_OP_plus_uconst <varName_fld_offset>
576 That is what this function does. */
578 /// addBlockByrefAddress - Start with the address based on the location
579 /// provided, and generate the DWARF information necessary to find the
580 /// actual Block variable (navigating the Block struct) based on the
581 /// starting location. Add the DWARF information to the die. For
582 /// more information, read large comment just above here.
584 void CompileUnit::addBlockByrefAddress(const DbgVariable &DV, DIE *Die,
585 dwarf::Attribute Attribute,
586 const MachineLocation &Location) {
587 DIType Ty = DV.getType();
589 uint16_t Tag = Ty.getTag();
590 bool isPointer = false;
592 StringRef varName = DV.getName();
594 if (Tag == dwarf::DW_TAG_pointer_type) {
595 DIDerivedType DTy = DIDerivedType(Ty);
596 TmpTy = resolve(DTy.getTypeDerivedFrom());
600 DICompositeType blockStruct = DICompositeType(TmpTy);
602 // Find the __forwarding field and the variable field in the __Block_byref
604 DIArray Fields = blockStruct.getTypeArray();
605 DIDescriptor varField = DIDescriptor();
606 DIDescriptor forwardingField = DIDescriptor();
608 for (unsigned i = 0, N = Fields.getNumElements(); i < N; ++i) {
609 DIDescriptor Element = Fields.getElement(i);
610 DIDerivedType DT = DIDerivedType(Element);
611 StringRef fieldName = DT.getName();
612 if (fieldName == "__forwarding")
613 forwardingField = Element;
614 else if (fieldName == varName)
618 // Get the offsets for the forwarding field and the variable field.
619 unsigned forwardingFieldOffset =
620 DIDerivedType(forwardingField).getOffsetInBits() >> 3;
621 unsigned varFieldOffset = DIDerivedType(varField).getOffsetInBits() >> 3;
623 // Decode the original location, and use that as the start of the byref
624 // variable's location.
625 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
627 if (Location.isReg())
628 addRegisterOp(Block, Location.getReg());
630 addRegisterOffset(Block, Location.getReg(), Location.getOffset());
632 // If we started with a pointer to the __Block_byref... struct, then
633 // the first thing we need to do is dereference the pointer (DW_OP_deref).
635 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
637 // Next add the offset for the '__forwarding' field:
638 // DW_OP_plus_uconst ForwardingFieldOffset. Note there's no point in
639 // adding the offset if it's 0.
640 if (forwardingFieldOffset > 0) {
641 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
642 addUInt(Block, dwarf::DW_FORM_udata, forwardingFieldOffset);
645 // Now dereference the __forwarding field to get to the real __Block_byref
646 // struct: DW_OP_deref.
647 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
649 // Now that we've got the real __Block_byref... struct, add the offset
650 // for the variable's field to get to the location of the actual variable:
651 // DW_OP_plus_uconst varFieldOffset. Again, don't add if it's 0.
652 if (varFieldOffset > 0) {
653 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
654 addUInt(Block, dwarf::DW_FORM_udata, varFieldOffset);
657 // Now attach the location information to the DIE.
658 addBlock(Die, Attribute, Block);
661 /// isTypeSigned - Return true if the type is signed.
662 static bool isTypeSigned(DwarfDebug *DD, DIType Ty, int *SizeInBits) {
663 if (Ty.isDerivedType())
664 return isTypeSigned(DD, DD->resolve(DIDerivedType(Ty).getTypeDerivedFrom()),
666 if (Ty.isBasicType())
667 if (DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed ||
668 DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed_char) {
669 *SizeInBits = Ty.getSizeInBits();
675 /// Return true if type encoding is unsigned.
676 static bool isUnsignedDIType(DwarfDebug *DD, DIType Ty) {
677 DIDerivedType DTy(Ty);
678 if (DTy.isDerivedType())
679 return isUnsignedDIType(DD, DD->resolve(DTy.getTypeDerivedFrom()));
682 if (BTy.isBasicType()) {
683 unsigned Encoding = BTy.getEncoding();
684 if (Encoding == dwarf::DW_ATE_unsigned ||
685 Encoding == dwarf::DW_ATE_unsigned_char ||
686 Encoding == dwarf::DW_ATE_boolean)
692 /// If this type is derived from a base type then return base type size.
693 static uint64_t getBaseTypeSize(DwarfDebug *DD, DIDerivedType Ty) {
694 unsigned Tag = Ty.getTag();
696 if (Tag != dwarf::DW_TAG_member && Tag != dwarf::DW_TAG_typedef &&
697 Tag != dwarf::DW_TAG_const_type && Tag != dwarf::DW_TAG_volatile_type &&
698 Tag != dwarf::DW_TAG_restrict_type)
699 return Ty.getSizeInBits();
701 DIType BaseType = DD->resolve(Ty.getTypeDerivedFrom());
703 // If this type is not derived from any type then take conservative approach.
704 if (!BaseType.isValid())
705 return Ty.getSizeInBits();
707 // If this is a derived type, go ahead and get the base type, unless it's a
708 // reference then it's just the size of the field. Pointer types have no need
709 // of this since they're a different type of qualification on the type.
710 if (BaseType.getTag() == dwarf::DW_TAG_reference_type ||
711 BaseType.getTag() == dwarf::DW_TAG_rvalue_reference_type)
712 return Ty.getSizeInBits();
714 if (BaseType.isDerivedType())
715 return getBaseTypeSize(DD, DIDerivedType(BaseType));
717 return BaseType.getSizeInBits();
720 /// addConstantValue - Add constant value entry in variable DIE.
721 void CompileUnit::addConstantValue(DIE *Die, const MachineOperand &MO,
723 // FIXME: This is a bit conservative/simple - it emits negative values at
724 // their maximum bit width which is a bit unfortunate (& doesn't prefer
725 // udata/sdata over dataN as suggested by the DWARF spec)
726 assert(MO.isImm() && "Invalid machine operand!");
728 bool SignedConstant = isTypeSigned(DD, Ty, &SizeInBits);
731 // If we're a signed constant definitely use sdata.
732 if (SignedConstant) {
733 addSInt(Die, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, MO.getImm());
737 // Else use data for now unless it's larger than we can deal with.
738 switch (SizeInBits) {
740 Form = dwarf::DW_FORM_data1;
743 Form = dwarf::DW_FORM_data2;
746 Form = dwarf::DW_FORM_data4;
749 Form = dwarf::DW_FORM_data8;
752 Form = dwarf::DW_FORM_udata;
753 addUInt(Die, dwarf::DW_AT_const_value, Form, MO.getImm());
756 addUInt(Die, dwarf::DW_AT_const_value, Form, MO.getImm());
759 /// addConstantFPValue - Add constant value entry in variable DIE.
760 void CompileUnit::addConstantFPValue(DIE *Die, const MachineOperand &MO) {
761 assert(MO.isFPImm() && "Invalid machine operand!");
762 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
763 APFloat FPImm = MO.getFPImm()->getValueAPF();
765 // Get the raw data form of the floating point.
766 const APInt FltVal = FPImm.bitcastToAPInt();
767 const char *FltPtr = (const char *)FltVal.getRawData();
769 int NumBytes = FltVal.getBitWidth() / 8; // 8 bits per byte.
770 bool LittleEndian = Asm->getDataLayout().isLittleEndian();
771 int Incr = (LittleEndian ? 1 : -1);
772 int Start = (LittleEndian ? 0 : NumBytes - 1);
773 int Stop = (LittleEndian ? NumBytes : -1);
775 // Output the constant to DWARF one byte at a time.
776 for (; Start != Stop; Start += Incr)
777 addUInt(Block, dwarf::DW_FORM_data1, (unsigned char)0xFF & FltPtr[Start]);
779 addBlock(Die, dwarf::DW_AT_const_value, Block);
782 /// addConstantFPValue - Add constant value entry in variable DIE.
783 void CompileUnit::addConstantFPValue(DIE *Die, const ConstantFP *CFP) {
784 // Pass this down to addConstantValue as an unsigned bag of bits.
785 addConstantValue(Die, CFP->getValueAPF().bitcastToAPInt(), true);
788 /// addConstantValue - Add constant value entry in variable DIE.
789 void CompileUnit::addConstantValue(DIE *Die, const ConstantInt *CI,
791 addConstantValue(Die, CI->getValue(), Unsigned);
794 // addConstantValue - Add constant value entry in variable DIE.
795 void CompileUnit::addConstantValue(DIE *Die, const APInt &Val, bool Unsigned) {
796 unsigned CIBitWidth = Val.getBitWidth();
797 if (CIBitWidth <= 64) {
798 // If we're a signed constant definitely use sdata.
800 addSInt(Die, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata,
805 // Else use data for now unless it's larger than we can deal with.
807 switch (CIBitWidth) {
809 Form = dwarf::DW_FORM_data1;
812 Form = dwarf::DW_FORM_data2;
815 Form = dwarf::DW_FORM_data4;
818 Form = dwarf::DW_FORM_data8;
821 addUInt(Die, dwarf::DW_AT_const_value, dwarf::DW_FORM_udata,
825 addUInt(Die, dwarf::DW_AT_const_value, Form, Val.getZExtValue());
829 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
831 // Get the raw data form of the large APInt.
832 const uint64_t *Ptr64 = Val.getRawData();
834 int NumBytes = Val.getBitWidth() / 8; // 8 bits per byte.
835 bool LittleEndian = Asm->getDataLayout().isLittleEndian();
837 // Output the constant to DWARF one byte at a time.
838 for (int i = 0; i < NumBytes; i++) {
841 c = Ptr64[i / 8] >> (8 * (i & 7));
843 c = Ptr64[(NumBytes - 1 - i) / 8] >> (8 * ((NumBytes - 1 - i) & 7));
844 addUInt(Block, dwarf::DW_FORM_data1, c);
847 addBlock(Die, dwarf::DW_AT_const_value, Block);
850 /// addTemplateParams - Add template parameters into buffer.
851 void CompileUnit::addTemplateParams(DIE &Buffer, DIArray TParams) {
852 // Add template parameters.
853 for (unsigned i = 0, e = TParams.getNumElements(); i != e; ++i) {
854 DIDescriptor Element = TParams.getElement(i);
855 if (Element.isTemplateTypeParameter())
856 constructTemplateTypeParameterDIE(Buffer,
857 DITemplateTypeParameter(Element));
858 else if (Element.isTemplateValueParameter())
859 constructTemplateValueParameterDIE(Buffer,
860 DITemplateValueParameter(Element));
864 /// getOrCreateContextDIE - Get context owner's DIE.
865 DIE *CompileUnit::getOrCreateContextDIE(DIScope Context) {
866 if (Context.isType())
867 return getOrCreateTypeDIE(DIType(Context));
868 if (Context.isNameSpace())
869 return getOrCreateNameSpace(DINameSpace(Context));
870 if (Context.isSubprogram())
871 return getOrCreateSubprogramDIE(DISubprogram(Context));
872 return getDIE(Context);
875 /// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
877 DIE *CompileUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
882 // Construct the context before querying for the existence of the DIE in case
883 // such construction creates the DIE.
884 DIE *ContextDIE = getOrCreateContextDIE(resolve(Ty.getContext()));
886 ContextDIE = CUDie.get();
888 DIE *TyDIE = getDIE(Ty);
893 TyDIE = createAndAddDIE(Ty.getTag(), *ContextDIE, Ty);
895 if (Ty.isBasicType())
896 constructTypeDIE(*TyDIE, DIBasicType(Ty));
897 else if (Ty.isCompositeType())
898 constructTypeDIE(*TyDIE, DICompositeType(Ty));
900 assert(Ty.isDerivedType() && "Unknown kind of DIType");
901 constructTypeDIE(*TyDIE, DIDerivedType(Ty));
903 // If this is a named finished type then include it in the list of types
904 // for the accelerator tables.
905 if (!Ty.getName().empty() && !Ty.isForwardDecl()) {
906 bool IsImplementation = 0;
907 if (Ty.isCompositeType()) {
908 DICompositeType CT(Ty);
909 // A runtime language of 0 actually means C/C++ and that any
910 // non-negative value is some version of Objective-C/C++.
911 IsImplementation = (CT.getRunTimeLang() == 0) || CT.isObjcClassComplete();
913 unsigned Flags = IsImplementation ? dwarf::DW_FLAG_type_implementation : 0;
914 addAccelType(Ty.getName(), std::make_pair(TyDIE, Flags));
920 /// addType - Add a new type attribute to the specified entity.
921 void CompileUnit::addType(DIE *Entity, DIType Ty, dwarf::Attribute Attribute) {
922 assert(Ty && "Trying to add a type that doesn't exist?");
924 // Check for pre-existence.
925 DIEEntry *Entry = getDIEEntry(Ty);
926 // If it exists then use the existing value.
928 addDIEEntry(Entity, Attribute, Entry);
933 DIE *Buffer = getOrCreateTypeDIE(Ty);
936 Entry = createDIEEntry(Buffer);
937 insertDIEEntry(Ty, Entry);
938 addDIEEntry(Entity, Attribute, Entry);
940 // If this is a complete composite type then include it in the
941 // list of global types.
945 // Accelerator table mutators - add each name along with its companion
946 // DIE to the proper table while ensuring that the name that we're going
947 // to reference is in the string table. We do this since the names we
948 // add may not only be identical to the names in the DIE.
949 void CompileUnit::addAccelName(StringRef Name, DIE *Die) {
950 DU->getStringPoolEntry(Name);
951 std::vector<DIE *> &DIEs = AccelNames[Name];
955 void CompileUnit::addAccelObjC(StringRef Name, DIE *Die) {
956 DU->getStringPoolEntry(Name);
957 std::vector<DIE *> &DIEs = AccelObjC[Name];
961 void CompileUnit::addAccelNamespace(StringRef Name, DIE *Die) {
962 DU->getStringPoolEntry(Name);
963 std::vector<DIE *> &DIEs = AccelNamespace[Name];
967 void CompileUnit::addAccelType(StringRef Name, std::pair<DIE *, unsigned> Die) {
968 DU->getStringPoolEntry(Name);
969 std::vector<std::pair<DIE *, unsigned> > &DIEs = AccelTypes[Name];
973 /// addGlobalName - Add a new global name to the compile unit.
974 void CompileUnit::addGlobalName(StringRef Name, DIE *Die, DIScope Context) {
975 std::string FullName = getParentContextString(Context) + Name.str();
976 GlobalNames[FullName] = Die;
979 /// addGlobalType - Add a new global type to the compile unit.
981 void CompileUnit::addGlobalType(DIType Ty) {
982 DIScope Context = resolve(Ty.getContext());
983 if (!Ty.getName().empty() && !Ty.isForwardDecl() &&
984 (!Context || Context.isCompileUnit() || Context.isFile() ||
985 Context.isNameSpace()))
986 if (DIEEntry *Entry = getDIEEntry(Ty)) {
987 std::string FullName =
988 getParentContextString(Context) + Ty.getName().str();
989 GlobalTypes[FullName] = Entry->getEntry();
993 /// getParentContextString - Walks the metadata parent chain in a language
994 /// specific manner (using the compile unit language) and returns
995 /// it as a string. This is done at the metadata level because DIEs may
996 /// not currently have been added to the parent context and walking the
997 /// DIEs looking for names is more expensive than walking the metadata.
998 std::string CompileUnit::getParentContextString(DIScope Context) const {
1002 // FIXME: Decide whether to implement this for non-C++ languages.
1003 if (getLanguage() != dwarf::DW_LANG_C_plus_plus)
1007 SmallVector<DIScope, 1> Parents;
1008 while (!Context.isCompileUnit()) {
1009 Parents.push_back(Context);
1010 if (Context.getContext())
1011 Context = resolve(Context.getContext());
1013 // Structure, etc types will have a NULL context if they're at the top
1018 // Reverse iterate over our list to go from the outermost construct to the
1020 for (SmallVectorImpl<DIScope>::reverse_iterator I = Parents.rbegin(),
1024 StringRef Name = Ctx.getName();
1025 if (!Name.empty()) {
1033 /// addPubTypes - Add subprogram argument types for pubtypes section.
1034 void CompileUnit::addPubTypes(DISubprogram SP) {
1035 DICompositeType SPTy = SP.getType();
1036 uint16_t SPTag = SPTy.getTag();
1037 if (SPTag != dwarf::DW_TAG_subroutine_type)
1040 DIArray Args = SPTy.getTypeArray();
1041 for (unsigned i = 0, e = Args.getNumElements(); i != e; ++i) {
1042 DIType ATy(Args.getElement(i));
1049 /// constructTypeDIE - Construct basic type die from DIBasicType.
1050 void CompileUnit::constructTypeDIE(DIE &Buffer, DIBasicType BTy) {
1051 // Get core information.
1052 StringRef Name = BTy.getName();
1053 // Add name if not anonymous or intermediate type.
1055 addString(&Buffer, dwarf::DW_AT_name, Name);
1057 // An unspecified type only has a name attribute.
1058 if (BTy.getTag() == dwarf::DW_TAG_unspecified_type)
1061 addUInt(&Buffer, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1064 uint64_t Size = BTy.getSizeInBits() >> 3;
1065 addUInt(&Buffer, dwarf::DW_AT_byte_size, None, Size);
1068 /// constructTypeDIE - Construct derived type die from DIDerivedType.
1069 void CompileUnit::constructTypeDIE(DIE &Buffer, DIDerivedType DTy) {
1070 // Get core information.
1071 StringRef Name = DTy.getName();
1072 uint64_t Size = DTy.getSizeInBits() >> 3;
1073 uint16_t Tag = Buffer.getTag();
1075 // Map to main type, void will not have a type.
1076 DIType FromTy = resolve(DTy.getTypeDerivedFrom());
1078 addType(&Buffer, FromTy);
1080 // Add name if not anonymous or intermediate type.
1082 addString(&Buffer, dwarf::DW_AT_name, Name);
1084 // Add size if non-zero (derived types might be zero-sized.)
1085 if (Size && Tag != dwarf::DW_TAG_pointer_type)
1086 addUInt(&Buffer, dwarf::DW_AT_byte_size, None, Size);
1088 if (Tag == dwarf::DW_TAG_ptr_to_member_type)
1089 addDIEEntry(&Buffer, dwarf::DW_AT_containing_type,
1090 getOrCreateTypeDIE(resolve(DTy.getClassType())));
1091 // Add source line info if available and TyDesc is not a forward declaration.
1092 if (!DTy.isForwardDecl())
1093 addSourceLine(&Buffer, DTy);
1096 /// Return true if the type is appropriately scoped to be contained inside
1097 /// its own type unit.
1098 static bool isTypeUnitScoped(DIType Ty, const DwarfDebug *DD) {
1099 DIScope Parent = DD->resolve(Ty.getContext());
1101 // Don't generate a hash for anything scoped inside a function.
1102 if (Parent.isSubprogram())
1104 Parent = DD->resolve(Parent.getContext());
1109 /// Return true if the type should be split out into a type unit.
1110 static bool shouldCreateTypeUnit(DICompositeType CTy, const DwarfDebug *DD) {
1111 uint16_t Tag = CTy.getTag();
1114 case dwarf::DW_TAG_structure_type:
1115 case dwarf::DW_TAG_union_type:
1116 case dwarf::DW_TAG_enumeration_type:
1117 case dwarf::DW_TAG_class_type:
1118 // If this is a class, structure, union, or enumeration type
1119 // that is a definition (not a declaration), and not scoped
1120 // inside a function then separate this out as a type unit.
1121 return !CTy.isForwardDecl() && isTypeUnitScoped(CTy, DD);
1127 /// constructTypeDIE - Construct type DIE from DICompositeType.
1128 void CompileUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
1129 // Get core information.
1130 StringRef Name = CTy.getName();
1132 uint64_t Size = CTy.getSizeInBits() >> 3;
1133 uint16_t Tag = Buffer.getTag();
1136 case dwarf::DW_TAG_array_type:
1137 constructArrayTypeDIE(Buffer, CTy);
1139 case dwarf::DW_TAG_enumeration_type:
1140 constructEnumTypeDIE(Buffer, CTy);
1142 case dwarf::DW_TAG_subroutine_type: {
1143 // Add return type. A void return won't have a type.
1144 DIArray Elements = CTy.getTypeArray();
1145 DIDescriptor RTy = Elements.getElement(0);
1147 addType(&Buffer, DIType(RTy));
1149 bool isPrototyped = true;
1151 for (unsigned i = 1, N = Elements.getNumElements(); i < N; ++i) {
1152 DIDescriptor Ty = Elements.getElement(i);
1153 if (Ty.isUnspecifiedParameter()) {
1154 createAndAddDIE(dwarf::DW_TAG_unspecified_parameters, Buffer);
1155 isPrototyped = false;
1157 DIE *Arg = createAndAddDIE(dwarf::DW_TAG_formal_parameter, Buffer);
1158 addType(Arg, DIType(Ty));
1159 if (DIType(Ty).isArtificial())
1160 addFlag(Arg, dwarf::DW_AT_artificial);
1163 // Add prototype flag if we're dealing with a C language and the
1164 // function has been prototyped.
1165 uint16_t Language = DICompileUnit(Node).getLanguage();
1167 (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||
1168 Language == dwarf::DW_LANG_ObjC))
1169 addFlag(&Buffer, dwarf::DW_AT_prototyped);
1171 case dwarf::DW_TAG_structure_type:
1172 case dwarf::DW_TAG_union_type:
1173 case dwarf::DW_TAG_class_type: {
1174 // Add elements to structure type.
1175 DIArray Elements = CTy.getTypeArray();
1176 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1177 DIDescriptor Element = Elements.getElement(i);
1178 DIE *ElemDie = NULL;
1179 if (Element.isSubprogram()) {
1180 DISubprogram SP(Element);
1181 ElemDie = getOrCreateSubprogramDIE(DISubprogram(Element));
1182 if (SP.isProtected())
1183 addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1184 dwarf::DW_ACCESS_protected);
1185 else if (SP.isPrivate())
1186 addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1187 dwarf::DW_ACCESS_private);
1189 addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1190 dwarf::DW_ACCESS_public);
1191 if (SP.isExplicit())
1192 addFlag(ElemDie, dwarf::DW_AT_explicit);
1193 } else if (Element.isDerivedType()) {
1194 DIDerivedType DDTy(Element);
1195 if (DDTy.getTag() == dwarf::DW_TAG_friend) {
1196 ElemDie = createAndAddDIE(dwarf::DW_TAG_friend, Buffer);
1197 addType(ElemDie, resolve(DDTy.getTypeDerivedFrom()),
1198 dwarf::DW_AT_friend);
1199 } else if (DDTy.isStaticMember()) {
1200 getOrCreateStaticMemberDIE(DDTy);
1202 constructMemberDIE(Buffer, DDTy);
1204 } else if (Element.isObjCProperty()) {
1205 DIObjCProperty Property(Element);
1206 ElemDie = createAndAddDIE(Property.getTag(), Buffer);
1207 StringRef PropertyName = Property.getObjCPropertyName();
1208 addString(ElemDie, dwarf::DW_AT_APPLE_property_name, PropertyName);
1209 addType(ElemDie, Property.getType());
1210 addSourceLine(ElemDie, Property);
1211 StringRef GetterName = Property.getObjCPropertyGetterName();
1212 if (!GetterName.empty())
1213 addString(ElemDie, dwarf::DW_AT_APPLE_property_getter, GetterName);
1214 StringRef SetterName = Property.getObjCPropertySetterName();
1215 if (!SetterName.empty())
1216 addString(ElemDie, dwarf::DW_AT_APPLE_property_setter, SetterName);
1217 unsigned PropertyAttributes = 0;
1218 if (Property.isReadOnlyObjCProperty())
1219 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readonly;
1220 if (Property.isReadWriteObjCProperty())
1221 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readwrite;
1222 if (Property.isAssignObjCProperty())
1223 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_assign;
1224 if (Property.isRetainObjCProperty())
1225 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_retain;
1226 if (Property.isCopyObjCProperty())
1227 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_copy;
1228 if (Property.isNonAtomicObjCProperty())
1229 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_nonatomic;
1230 if (PropertyAttributes)
1231 addUInt(ElemDie, dwarf::DW_AT_APPLE_property_attribute, None,
1232 PropertyAttributes);
1234 DIEEntry *Entry = getDIEEntry(Element);
1236 Entry = createDIEEntry(ElemDie);
1237 insertDIEEntry(Element, Entry);
1243 if (CTy.isAppleBlockExtension())
1244 addFlag(&Buffer, dwarf::DW_AT_APPLE_block);
1246 DICompositeType ContainingType(resolve(CTy.getContainingType()));
1247 if (DIDescriptor(ContainingType).isCompositeType())
1248 addDIEEntry(&Buffer, dwarf::DW_AT_containing_type,
1249 getOrCreateTypeDIE(DIType(ContainingType)));
1251 if (CTy.isObjcClassComplete())
1252 addFlag(&Buffer, dwarf::DW_AT_APPLE_objc_complete_type);
1254 // Add template parameters to a class, structure or union types.
1255 // FIXME: The support isn't in the metadata for this yet.
1256 if (Tag == dwarf::DW_TAG_class_type ||
1257 Tag == dwarf::DW_TAG_structure_type || Tag == dwarf::DW_TAG_union_type)
1258 addTemplateParams(Buffer, CTy.getTemplateParams());
1266 // Add name if not anonymous or intermediate type.
1268 addString(&Buffer, dwarf::DW_AT_name, Name);
1270 if (Tag == dwarf::DW_TAG_enumeration_type ||
1271 Tag == dwarf::DW_TAG_class_type || Tag == dwarf::DW_TAG_structure_type ||
1272 Tag == dwarf::DW_TAG_union_type) {
1273 // Add size if non-zero (derived types might be zero-sized.)
1274 // TODO: Do we care about size for enum forward declarations?
1276 addUInt(&Buffer, dwarf::DW_AT_byte_size, None, Size);
1277 else if (!CTy.isForwardDecl())
1278 // Add zero size if it is not a forward declaration.
1279 addUInt(&Buffer, dwarf::DW_AT_byte_size, None, 0);
1281 // If we're a forward decl, say so.
1282 if (CTy.isForwardDecl())
1283 addFlag(&Buffer, dwarf::DW_AT_declaration);
1285 // Add source line info if available.
1286 if (!CTy.isForwardDecl())
1287 addSourceLine(&Buffer, CTy);
1289 // No harm in adding the runtime language to the declaration.
1290 unsigned RLang = CTy.getRunTimeLang();
1292 addUInt(&Buffer, dwarf::DW_AT_APPLE_runtime_class, dwarf::DW_FORM_data1,
1295 // If this is a type applicable to a type unit it then add it to the
1296 // list of types we'll compute a hash for later.
1297 if (shouldCreateTypeUnit(CTy, DD))
1298 DD->addTypeUnitType(&Buffer);
1301 /// constructTemplateTypeParameterDIE - Construct new DIE for the given
1302 /// DITemplateTypeParameter.
1304 CompileUnit::constructTemplateTypeParameterDIE(DIE &Buffer,
1305 DITemplateTypeParameter TP) {
1307 createAndAddDIE(dwarf::DW_TAG_template_type_parameter, Buffer);
1308 // Add the type if it exists, it could be void and therefore no type.
1310 addType(ParamDIE, resolve(TP.getType()));
1311 if (!TP.getName().empty())
1312 addString(ParamDIE, dwarf::DW_AT_name, TP.getName());
1315 /// constructTemplateValueParameterDIE - Construct new DIE for the given
1316 /// DITemplateValueParameter.
1318 CompileUnit::constructTemplateValueParameterDIE(DIE &Buffer,
1319 DITemplateValueParameter VP) {
1320 DIE *ParamDIE = createAndAddDIE(VP.getTag(), Buffer);
1322 // Add the type if there is one, template template and template parameter
1323 // packs will not have a type.
1324 if (VP.getTag() == dwarf::DW_TAG_template_value_parameter)
1325 addType(ParamDIE, resolve(VP.getType()));
1326 if (!VP.getName().empty())
1327 addString(ParamDIE, dwarf::DW_AT_name, VP.getName());
1328 if (Value *Val = VP.getValue()) {
1329 if (ConstantInt *CI = dyn_cast<ConstantInt>(Val))
1330 addConstantValue(ParamDIE, CI,
1331 isUnsignedDIType(DD, resolve(VP.getType())));
1332 else if (GlobalValue *GV = dyn_cast<GlobalValue>(Val)) {
1333 // For declaration non-type template parameters (such as global values and
1335 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1336 addOpAddress(Block, Asm->getSymbol(GV));
1337 // Emit DW_OP_stack_value to use the address as the immediate value of the
1338 // parameter, rather than a pointer to it.
1339 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_stack_value);
1340 addBlock(ParamDIE, dwarf::DW_AT_location, Block);
1341 } else if (VP.getTag() == dwarf::DW_TAG_GNU_template_template_param) {
1342 assert(isa<MDString>(Val));
1343 addString(ParamDIE, dwarf::DW_AT_GNU_template_name,
1344 cast<MDString>(Val)->getString());
1345 } else if (VP.getTag() == dwarf::DW_TAG_GNU_template_parameter_pack) {
1346 assert(isa<MDNode>(Val));
1347 DIArray A(cast<MDNode>(Val));
1348 addTemplateParams(*ParamDIE, A);
1353 /// getOrCreateNameSpace - Create a DIE for DINameSpace.
1354 DIE *CompileUnit::getOrCreateNameSpace(DINameSpace NS) {
1355 // Construct the context before querying for the existence of the DIE in case
1356 // such construction creates the DIE.
1357 DIE *ContextDIE = getOrCreateContextDIE(NS.getContext());
1359 // If the context is null, DIE should belong to the CU we call construct
1361 ContextDIE = CUDie.get();
1363 DIE *NDie = getDIE(NS);
1366 NDie = createAndAddDIE(dwarf::DW_TAG_namespace, *ContextDIE, NS);
1368 if (!NS.getName().empty()) {
1369 addString(NDie, dwarf::DW_AT_name, NS.getName());
1370 addAccelNamespace(NS.getName(), NDie);
1371 addGlobalName(NS.getName(), NDie, NS.getContext());
1373 addAccelNamespace("(anonymous namespace)", NDie);
1374 addSourceLine(NDie, NS);
1378 /// getOrCreateSubprogramDIE - Create new DIE using SP.
1379 DIE *CompileUnit::getOrCreateSubprogramDIE(DISubprogram SP) {
1380 // Construct the context before querying for the existence of the DIE in case
1381 // such construction creates the DIE (as is the case for member function
1383 DIE *ContextDIE = getOrCreateContextDIE(resolve(SP.getContext()));
1385 ContextDIE = CUDie.get();
1387 DIE *SPDie = getDIE(SP);
1391 DISubprogram SPDecl = SP.getFunctionDeclaration();
1392 if (SPDecl.isSubprogram())
1393 // Add subprogram definitions to the CU die directly.
1394 ContextDIE = CUDie.get();
1396 // DW_TAG_inlined_subroutine may refer to this DIE.
1397 SPDie = createAndAddDIE(dwarf::DW_TAG_subprogram, *ContextDIE, SP);
1399 DIE *DeclDie = NULL;
1400 if (SPDecl.isSubprogram())
1401 DeclDie = getOrCreateSubprogramDIE(SPDecl);
1403 // Add function template parameters.
1404 addTemplateParams(*SPDie, SP.getTemplateParams());
1406 // If this DIE is going to refer declaration info using AT_specification
1407 // then there is no need to add other attributes.
1409 // Refer function declaration directly.
1410 addDIEEntry(SPDie, dwarf::DW_AT_specification, DeclDie);
1415 // Add the linkage name if we have one.
1416 StringRef LinkageName = SP.getLinkageName();
1417 if (!LinkageName.empty())
1418 addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
1419 GlobalValue::getRealLinkageName(LinkageName));
1421 // Constructors and operators for anonymous aggregates do not have names.
1422 if (!SP.getName().empty())
1423 addString(SPDie, dwarf::DW_AT_name, SP.getName());
1425 addSourceLine(SPDie, SP);
1427 // Add the prototype if we have a prototype and we have a C like
1429 uint16_t Language = DICompileUnit(Node).getLanguage();
1430 if (SP.isPrototyped() &&
1431 (Language == dwarf::DW_LANG_C89 || Language == dwarf::DW_LANG_C99 ||
1432 Language == dwarf::DW_LANG_ObjC))
1433 addFlag(SPDie, dwarf::DW_AT_prototyped);
1435 DICompositeType SPTy = SP.getType();
1436 assert(SPTy.getTag() == dwarf::DW_TAG_subroutine_type &&
1437 "the type of a subprogram should be a subroutine");
1439 DIArray Args = SPTy.getTypeArray();
1440 // Add a return type. If this is a type like a C/C++ void type we don't add a
1442 if (Args.getElement(0))
1443 addType(SPDie, DIType(Args.getElement(0)));
1445 unsigned VK = SP.getVirtuality();
1447 addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1, VK);
1448 DIEBlock *Block = getDIEBlock();
1449 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1450 addUInt(Block, dwarf::DW_FORM_udata, SP.getVirtualIndex());
1451 addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, Block);
1452 ContainingTypeMap.insert(
1453 std::make_pair(SPDie, resolve(SP.getContainingType())));
1456 if (!SP.isDefinition()) {
1457 addFlag(SPDie, dwarf::DW_AT_declaration);
1459 // Add arguments. Do not add arguments for subprogram definition. They will
1460 // be handled while processing variables.
1461 for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
1462 DIE *Arg = createAndAddDIE(dwarf::DW_TAG_formal_parameter, *SPDie);
1463 DIType ATy = DIType(Args.getElement(i));
1465 if (ATy.isArtificial())
1466 addFlag(Arg, dwarf::DW_AT_artificial);
1470 if (SP.isArtificial())
1471 addFlag(SPDie, dwarf::DW_AT_artificial);
1473 if (!SP.isLocalToUnit())
1474 addFlag(SPDie, dwarf::DW_AT_external);
1476 if (SP.isOptimized())
1477 addFlag(SPDie, dwarf::DW_AT_APPLE_optimized);
1479 if (unsigned isa = Asm->getISAEncoding()) {
1480 addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa);
1486 // Return const expression if value is a GEP to access merged global
1488 // i8* getelementptr ({ i8, i8, i8, i8 }* @_MergedGlobals, i32 0, i32 0)
1489 static const ConstantExpr *getMergedGlobalExpr(const Value *V) {
1490 const ConstantExpr *CE = dyn_cast_or_null<ConstantExpr>(V);
1491 if (!CE || CE->getNumOperands() != 3 ||
1492 CE->getOpcode() != Instruction::GetElementPtr)
1495 // First operand points to a global struct.
1496 Value *Ptr = CE->getOperand(0);
1497 if (!isa<GlobalValue>(Ptr) ||
1498 !isa<StructType>(cast<PointerType>(Ptr->getType())->getElementType()))
1501 // Second operand is zero.
1502 const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(CE->getOperand(1));
1503 if (!CI || !CI->isZero())
1506 // Third operand is offset.
1507 if (!isa<ConstantInt>(CE->getOperand(2)))
1513 /// createGlobalVariableDIE - create global variable DIE.
1514 void CompileUnit::createGlobalVariableDIE(const MDNode *N) {
1515 // Check for pre-existence.
1519 DIGlobalVariable GV(N);
1520 if (!GV.isGlobalVariable())
1523 DIScope GVContext = GV.getContext();
1524 DIType GTy = GV.getType();
1526 // If this is a static data member definition, some attributes belong
1527 // to the declaration DIE.
1528 DIE *VariableDIE = NULL;
1529 bool IsStaticMember = false;
1530 DIDerivedType SDMDecl = GV.getStaticDataMemberDeclaration();
1531 if (SDMDecl.Verify()) {
1532 assert(SDMDecl.isStaticMember() && "Expected static member decl");
1533 // We need the declaration DIE that is in the static member's class.
1534 VariableDIE = getOrCreateStaticMemberDIE(SDMDecl);
1535 IsStaticMember = true;
1538 // If this is not a static data member definition, create the variable
1539 // DIE and add the initial set of attributes to it.
1541 // Construct the context before querying for the existence of the DIE in
1542 // case such construction creates the DIE.
1543 DIE *ContextDIE = getOrCreateContextDIE(GVContext);
1545 ContextDIE = CUDie.get();
1548 VariableDIE = createAndAddDIE(GV.getTag(), *ContextDIE, N);
1550 // Add name and type.
1551 addString(VariableDIE, dwarf::DW_AT_name, GV.getDisplayName());
1552 addType(VariableDIE, GTy);
1554 // Add scoping info.
1555 if (!GV.isLocalToUnit())
1556 addFlag(VariableDIE, dwarf::DW_AT_external);
1558 // Add line number info.
1559 addSourceLine(VariableDIE, GV);
1563 bool addToAccelTable = false;
1564 DIE *VariableSpecDIE = NULL;
1565 bool isGlobalVariable = GV.getGlobal() != NULL;
1566 if (isGlobalVariable) {
1567 addToAccelTable = true;
1568 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1569 const MCSymbol *Sym = Asm->getSymbol(GV.getGlobal());
1570 if (GV.getGlobal()->isThreadLocal()) {
1571 // FIXME: Make this work with -gsplit-dwarf.
1572 unsigned PointerSize = Asm->getDataLayout().getPointerSize();
1573 assert((PointerSize == 4 || PointerSize == 8) &&
1574 "Add support for other sizes if necessary");
1575 const MCExpr *Expr =
1576 Asm->getObjFileLowering().getDebugThreadLocalSymbol(Sym);
1577 // Based on GCC's support for TLS:
1578 if (!DD->useSplitDwarf()) {
1579 // 1) Start with a constNu of the appropriate pointer size
1580 addUInt(Block, dwarf::DW_FORM_data1,
1581 PointerSize == 4 ? dwarf::DW_OP_const4u : dwarf::DW_OP_const8u);
1582 // 2) containing the (relocated) offset of the TLS variable
1583 // within the module's TLS block.
1584 addExpr(Block, dwarf::DW_FORM_udata, Expr);
1586 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_const_index);
1587 addUInt(Block, dwarf::DW_FORM_udata, DU->getAddrPoolIndex(Expr));
1589 // 3) followed by a custom OP to make the debugger do a TLS lookup.
1590 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_push_tls_address);
1592 addOpAddress(Block, Sym);
1593 // Do not create specification DIE if context is either compile unit
1595 if (GVContext && GV.isDefinition() && !GVContext.isCompileUnit() &&
1596 !GVContext.isFile() && !DD->isSubprogramContext(GVContext)) {
1597 // Create specification DIE.
1598 VariableSpecDIE = createAndAddDIE(dwarf::DW_TAG_variable, *CUDie.get());
1599 addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification, VariableDIE);
1600 addBlock(VariableSpecDIE, dwarf::DW_AT_location, Block);
1601 // A static member's declaration is already flagged as such.
1602 if (!SDMDecl.Verify())
1603 addFlag(VariableDIE, dwarf::DW_AT_declaration);
1605 addBlock(VariableDIE, dwarf::DW_AT_location, Block);
1607 // Add the linkage name.
1608 StringRef LinkageName = GV.getLinkageName();
1609 if (!LinkageName.empty())
1610 // From DWARF4: DIEs to which DW_AT_linkage_name may apply include:
1611 // TAG_common_block, TAG_constant, TAG_entry_point, TAG_subprogram and
1613 addString(IsStaticMember && VariableSpecDIE ? VariableSpecDIE
1615 dwarf::DW_AT_MIPS_linkage_name,
1616 GlobalValue::getRealLinkageName(LinkageName));
1617 } else if (const ConstantInt *CI =
1618 dyn_cast_or_null<ConstantInt>(GV.getConstant())) {
1619 // AT_const_value was added when the static member was created. To avoid
1620 // emitting AT_const_value multiple times, we only add AT_const_value when
1621 // it is not a static member.
1622 if (!IsStaticMember)
1623 addConstantValue(VariableDIE, CI, isUnsignedDIType(DD, GTy));
1624 } else if (const ConstantExpr *CE = getMergedGlobalExpr(N->getOperand(11))) {
1625 addToAccelTable = true;
1626 // GV is a merged global.
1627 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1628 Value *Ptr = CE->getOperand(0);
1629 addOpAddress(Block, Asm->getSymbol(cast<GlobalValue>(Ptr)));
1630 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1631 SmallVector<Value *, 3> Idx(CE->op_begin() + 1, CE->op_end());
1632 addUInt(Block, dwarf::DW_FORM_udata,
1633 Asm->getDataLayout().getIndexedOffset(Ptr->getType(), Idx));
1634 addUInt(Block, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1635 addBlock(VariableDIE, dwarf::DW_AT_location, Block);
1638 if (addToAccelTable) {
1639 DIE *AddrDIE = VariableSpecDIE ? VariableSpecDIE : VariableDIE;
1640 addAccelName(GV.getName(), AddrDIE);
1642 // If the linkage name is different than the name, go ahead and output
1643 // that as well into the name table.
1644 if (GV.getLinkageName() != "" && GV.getName() != GV.getLinkageName())
1645 addAccelName(GV.getLinkageName(), AddrDIE);
1648 if (!GV.isLocalToUnit())
1649 addGlobalName(GV.getName(), VariableSpecDIE ? VariableSpecDIE : VariableDIE,
1653 /// constructSubrangeDIE - Construct subrange DIE from DISubrange.
1654 void CompileUnit::constructSubrangeDIE(DIE &Buffer, DISubrange SR,
1656 DIE *DW_Subrange = createAndAddDIE(dwarf::DW_TAG_subrange_type, Buffer);
1657 addDIEEntry(DW_Subrange, dwarf::DW_AT_type, IndexTy);
1659 // The LowerBound value defines the lower bounds which is typically zero for
1660 // C/C++. The Count value is the number of elements. Values are 64 bit. If
1661 // Count == -1 then the array is unbounded and we do not emit
1662 // DW_AT_lower_bound and DW_AT_upper_bound attributes. If LowerBound == 0 and
1663 // Count == 0, then the array has zero elements in which case we do not emit
1665 int64_t LowerBound = SR.getLo();
1666 int64_t DefaultLowerBound = getDefaultLowerBound();
1667 int64_t Count = SR.getCount();
1669 if (DefaultLowerBound == -1 || LowerBound != DefaultLowerBound)
1670 addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, None, LowerBound);
1672 if (Count != -1 && Count != 0)
1673 // FIXME: An unbounded array should reference the expression that defines
1675 addUInt(DW_Subrange, dwarf::DW_AT_upper_bound, None,
1676 LowerBound + Count - 1);
1679 /// constructArrayTypeDIE - Construct array type DIE from DICompositeType.
1680 void CompileUnit::constructArrayTypeDIE(DIE &Buffer, DICompositeType CTy) {
1682 addFlag(&Buffer, dwarf::DW_AT_GNU_vector);
1684 // Emit the element type.
1685 addType(&Buffer, resolve(CTy.getTypeDerivedFrom()));
1687 // Get an anonymous type for index type.
1688 // FIXME: This type should be passed down from the front end
1689 // as different languages may have different sizes for indexes.
1690 DIE *IdxTy = getIndexTyDie();
1692 // Construct an anonymous type for index type.
1693 IdxTy = createAndAddDIE(dwarf::DW_TAG_base_type, *CUDie.get());
1694 addString(IdxTy, dwarf::DW_AT_name, "int");
1695 addUInt(IdxTy, dwarf::DW_AT_byte_size, None, sizeof(int32_t));
1696 addUInt(IdxTy, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1697 dwarf::DW_ATE_signed);
1698 setIndexTyDie(IdxTy);
1701 // Add subranges to array type.
1702 DIArray Elements = CTy.getTypeArray();
1703 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1704 DIDescriptor Element = Elements.getElement(i);
1705 if (Element.getTag() == dwarf::DW_TAG_subrange_type)
1706 constructSubrangeDIE(Buffer, DISubrange(Element), IdxTy);
1710 /// constructEnumTypeDIE - Construct an enum type DIE from DICompositeType.
1711 void CompileUnit::constructEnumTypeDIE(DIE &Buffer, DICompositeType CTy) {
1712 DIArray Elements = CTy.getTypeArray();
1714 // Add enumerators to enumeration type.
1715 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1716 DIDescriptor Enum(Elements.getElement(i));
1717 DIEnumerator ETy = DIEnumerator(Enum);
1718 if (Enum.isEnumerator()) {
1719 DIE *Enumerator = createAndAddDIE(dwarf::DW_TAG_enumerator, Buffer);
1720 StringRef Name = ETy.getName();
1721 addString(Enumerator, dwarf::DW_AT_name, Name);
1722 int64_t Value = ETy.getEnumValue();
1723 addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, Value);
1726 DIType DTy = resolve(CTy.getTypeDerivedFrom());
1728 addType(&Buffer, DTy);
1729 addFlag(&Buffer, dwarf::DW_AT_enum_class);
1733 /// constructContainingTypeDIEs - Construct DIEs for types that contain
1735 void CompileUnit::constructContainingTypeDIEs() {
1736 for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(),
1737 CE = ContainingTypeMap.end();
1739 DIE *SPDie = CI->first;
1740 const MDNode *N = CI->second;
1743 DIE *NDie = getDIE(N);
1746 addDIEEntry(SPDie, dwarf::DW_AT_containing_type, NDie);
1750 /// constructVariableDIE - Construct a DIE for the given DbgVariable.
1751 DIE *CompileUnit::constructVariableDIE(DbgVariable *DV, bool isScopeAbstract) {
1752 StringRef Name = DV->getName();
1754 // Define variable debug information entry.
1755 DIE *VariableDie = new DIE(DV->getTag());
1756 DbgVariable *AbsVar = DV->getAbstractVariable();
1757 DIE *AbsDIE = AbsVar ? AbsVar->getDIE() : NULL;
1759 addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin, AbsDIE);
1762 addString(VariableDie, dwarf::DW_AT_name, Name);
1763 addSourceLine(VariableDie, DV->getVariable());
1764 addType(VariableDie, DV->getType());
1767 if (DV->isArtificial())
1768 addFlag(VariableDie, dwarf::DW_AT_artificial);
1770 if (isScopeAbstract) {
1771 DV->setDIE(VariableDie);
1775 // Add variable address.
1777 unsigned Offset = DV->getDotDebugLocOffset();
1778 if (Offset != ~0U) {
1779 addLabel(VariableDie, dwarf::DW_AT_location, dwarf::DW_FORM_data4,
1780 Asm->GetTempSymbol("debug_loc", Offset));
1781 DV->setDIE(VariableDie);
1785 // Check if variable is described by a DBG_VALUE instruction.
1786 if (const MachineInstr *DVInsn = DV->getMInsn()) {
1787 assert(DVInsn->getNumOperands() == 3);
1788 if (DVInsn->getOperand(0).isReg()) {
1789 const MachineOperand RegOp = DVInsn->getOperand(0);
1790 // If the second operand is an immediate, this is an indirect value.
1791 if (DVInsn->getOperand(1).isImm()) {
1792 MachineLocation Location(RegOp.getReg(),
1793 DVInsn->getOperand(1).getImm());
1794 addVariableAddress(*DV, VariableDie, Location);
1795 } else if (RegOp.getReg())
1796 addVariableAddress(*DV, VariableDie, MachineLocation(RegOp.getReg()));
1797 } else if (DVInsn->getOperand(0).isImm())
1798 addConstantValue(VariableDie, DVInsn->getOperand(0), DV->getType());
1799 else if (DVInsn->getOperand(0).isFPImm())
1800 addConstantFPValue(VariableDie, DVInsn->getOperand(0));
1801 else if (DVInsn->getOperand(0).isCImm())
1802 addConstantValue(VariableDie, DVInsn->getOperand(0).getCImm(),
1803 isUnsignedDIType(DD, DV->getType()));
1805 DV->setDIE(VariableDie);
1808 // .. else use frame index.
1809 int FI = DV->getFrameIndex();
1811 unsigned FrameReg = 0;
1812 const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
1813 int Offset = TFI->getFrameIndexReference(*Asm->MF, FI, FrameReg);
1814 MachineLocation Location(FrameReg, Offset);
1815 addVariableAddress(*DV, VariableDie, Location);
1819 DV->setDIE(VariableDie);
1823 /// constructMemberDIE - Construct member DIE from DIDerivedType.
1824 void CompileUnit::constructMemberDIE(DIE &Buffer, DIDerivedType DT) {
1825 DIE *MemberDie = createAndAddDIE(DT.getTag(), Buffer);
1826 StringRef Name = DT.getName();
1828 addString(MemberDie, dwarf::DW_AT_name, Name);
1830 addType(MemberDie, resolve(DT.getTypeDerivedFrom()));
1832 addSourceLine(MemberDie, DT);
1834 DIEBlock *MemLocationDie = new (DIEValueAllocator) DIEBlock();
1835 addUInt(MemLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
1837 if (DT.getTag() == dwarf::DW_TAG_inheritance && DT.isVirtual()) {
1839 // For C++, virtual base classes are not at fixed offset. Use following
1840 // expression to extract appropriate offset from vtable.
1841 // BaseAddr = ObAddr + *((*ObAddr) - Offset)
1843 DIEBlock *VBaseLocationDie = new (DIEValueAllocator) DIEBlock();
1844 addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_dup);
1845 addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1846 addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1847 addUInt(VBaseLocationDie, dwarf::DW_FORM_udata, DT.getOffsetInBits());
1848 addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_minus);
1849 addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1850 addUInt(VBaseLocationDie, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1852 addBlock(MemberDie, dwarf::DW_AT_data_member_location, VBaseLocationDie);
1854 uint64_t Size = DT.getSizeInBits();
1855 uint64_t FieldSize = getBaseTypeSize(DD, DT);
1856 uint64_t OffsetInBytes;
1858 if (Size != FieldSize) {
1860 addUInt(MemberDie, dwarf::DW_AT_byte_size, None,
1861 getBaseTypeSize(DD, DT) >> 3);
1862 addUInt(MemberDie, dwarf::DW_AT_bit_size, None, DT.getSizeInBits());
1864 uint64_t Offset = DT.getOffsetInBits();
1865 uint64_t AlignMask = ~(DT.getAlignInBits() - 1);
1866 uint64_t HiMark = (Offset + FieldSize) & AlignMask;
1867 uint64_t FieldOffset = (HiMark - FieldSize);
1868 Offset -= FieldOffset;
1870 // Maybe we need to work from the other end.
1871 if (Asm->getDataLayout().isLittleEndian())
1872 Offset = FieldSize - (Offset + Size);
1873 addUInt(MemberDie, dwarf::DW_AT_bit_offset, None, Offset);
1875 // Here WD_AT_data_member_location points to the anonymous
1876 // field that includes this bit field.
1877 OffsetInBytes = FieldOffset >> 3;
1879 // This is not a bitfield.
1880 OffsetInBytes = DT.getOffsetInBits() >> 3;
1881 addUInt(MemberDie, dwarf::DW_AT_data_member_location, None, OffsetInBytes);
1884 if (DT.isProtected())
1885 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1886 dwarf::DW_ACCESS_protected);
1887 else if (DT.isPrivate())
1888 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1889 dwarf::DW_ACCESS_private);
1890 // Otherwise C++ member and base classes are considered public.
1892 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1893 dwarf::DW_ACCESS_public);
1895 addUInt(MemberDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1,
1896 dwarf::DW_VIRTUALITY_virtual);
1898 // Objective-C properties.
1899 if (MDNode *PNode = DT.getObjCProperty())
1900 if (DIEEntry *PropertyDie = getDIEEntry(PNode))
1901 MemberDie->addValue(dwarf::DW_AT_APPLE_property, dwarf::DW_FORM_ref4,
1904 if (DT.isArtificial())
1905 addFlag(MemberDie, dwarf::DW_AT_artificial);
1908 /// getOrCreateStaticMemberDIE - Create new DIE for C++ static member.
1909 DIE *CompileUnit::getOrCreateStaticMemberDIE(const DIDerivedType DT) {
1913 // Construct the context before querying for the existence of the DIE in case
1914 // such construction creates the DIE.
1915 DIE *ContextDIE = getOrCreateContextDIE(resolve(DT.getContext()));
1916 assert(ContextDIE && "Static member should belong to a non-CU context.");
1918 DIE *StaticMemberDIE = getDIE(DT);
1919 if (StaticMemberDIE)
1920 return StaticMemberDIE;
1922 StaticMemberDIE = createAndAddDIE(DT.getTag(), *ContextDIE, DT);
1924 DIType Ty = resolve(DT.getTypeDerivedFrom());
1926 addString(StaticMemberDIE, dwarf::DW_AT_name, DT.getName());
1927 addType(StaticMemberDIE, Ty);
1928 addSourceLine(StaticMemberDIE, DT);
1929 addFlag(StaticMemberDIE, dwarf::DW_AT_external);
1930 addFlag(StaticMemberDIE, dwarf::DW_AT_declaration);
1932 // FIXME: We could omit private if the parent is a class_type, and
1933 // public if the parent is something else.
1934 if (DT.isProtected())
1935 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1936 dwarf::DW_ACCESS_protected);
1937 else if (DT.isPrivate())
1938 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1939 dwarf::DW_ACCESS_private);
1941 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1942 dwarf::DW_ACCESS_public);
1944 if (const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(DT.getConstant()))
1945 addConstantValue(StaticMemberDIE, CI, isUnsignedDIType(DD, Ty));
1946 if (const ConstantFP *CFP = dyn_cast_or_null<ConstantFP>(DT.getConstant()))
1947 addConstantFPValue(StaticMemberDIE, CFP);
1949 return StaticMemberDIE;
1952 void CompileUnit::emitHeader(const MCSection *ASection,
1953 const MCSymbol *ASectionSym) {
1954 Asm->OutStreamer.AddComment("DWARF version number");
1955 Asm->EmitInt16(DD->getDwarfVersion());
1956 Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1957 Asm->EmitSectionOffset(Asm->GetTempSymbol(ASection->getLabelBeginName()),
1959 Asm->OutStreamer.AddComment("Address Size (in bytes)");
1960 Asm->EmitInt8(Asm->getDataLayout().getPointerSize());