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/Support/Debug.h"
26 #include "llvm/Support/ErrorHandling.h"
27 #include "llvm/Target/Mangler.h"
28 #include "llvm/Target/TargetFrameLowering.h"
29 #include "llvm/Target/TargetMachine.h"
30 #include "llvm/Target/TargetRegisterInfo.h"
34 /// CompileUnit - Compile unit constructor.
35 CompileUnit::CompileUnit(unsigned UID, unsigned L, DIE *D, const MDNode *N,
36 AsmPrinter *A, DwarfDebug *DW, DwarfUnits *DWU)
37 : UniqueID(UID), Language(L), CUDie(D), Asm(A), DD(DW), DU(DWU),
38 IndexTyDie(0), DebugInfoOffset(0) {
39 DIEIntegerOne = new (DIEValueAllocator) DIEInteger(1);
43 /// ~CompileUnit - Destructor for compile unit.
44 CompileUnit::~CompileUnit() {
45 for (unsigned j = 0, M = DIEBlocks.size(); j < M; ++j)
46 DIEBlocks[j]->~DIEBlock();
49 /// createDIEEntry - Creates a new DIEEntry to be a proxy for a debug
50 /// information entry.
51 DIEEntry *CompileUnit::createDIEEntry(DIE *Entry) {
52 DIEEntry *Value = new (DIEValueAllocator) DIEEntry(Entry);
56 /// getDefaultLowerBound - Return the default lower bound for an array. If the
57 /// DWARF version doesn't handle the language, return -1.
58 int64_t CompileUnit::getDefaultLowerBound() const {
63 case dwarf::DW_LANG_C89:
64 case dwarf::DW_LANG_C99:
65 case dwarf::DW_LANG_C:
66 case dwarf::DW_LANG_C_plus_plus:
67 case dwarf::DW_LANG_ObjC:
68 case dwarf::DW_LANG_ObjC_plus_plus:
71 case dwarf::DW_LANG_Fortran77:
72 case dwarf::DW_LANG_Fortran90:
73 case dwarf::DW_LANG_Fortran95:
76 // The languages below have valid values only if the DWARF version >= 4.
77 case dwarf::DW_LANG_Java:
78 case dwarf::DW_LANG_Python:
79 case dwarf::DW_LANG_UPC:
80 case dwarf::DW_LANG_D:
81 if (dwarf::DWARF_VERSION >= 4)
85 case dwarf::DW_LANG_Ada83:
86 case dwarf::DW_LANG_Ada95:
87 case dwarf::DW_LANG_Cobol74:
88 case dwarf::DW_LANG_Cobol85:
89 case dwarf::DW_LANG_Modula2:
90 case dwarf::DW_LANG_Pascal83:
91 case dwarf::DW_LANG_PLI:
92 if (dwarf::DWARF_VERSION >= 4)
100 /// addFlag - Add a flag that is true.
101 void CompileUnit::addFlag(DIE *Die, unsigned Attribute) {
102 if (!DD->useDarwinGDBCompat())
103 Die->addValue(Attribute, dwarf::DW_FORM_flag_present,
106 addUInt(Die, Attribute, dwarf::DW_FORM_flag, 1);
109 /// addUInt - Add an unsigned integer attribute data and value.
111 void CompileUnit::addUInt(DIE *Die, unsigned Attribute,
112 unsigned Form, uint64_t Integer) {
113 if (!Form) Form = DIEInteger::BestForm(false, Integer);
114 DIEValue *Value = Integer == 1 ?
115 DIEIntegerOne : new (DIEValueAllocator) DIEInteger(Integer);
116 Die->addValue(Attribute, Form, Value);
119 /// addSInt - Add an signed integer attribute data and value.
121 void CompileUnit::addSInt(DIE *Die, unsigned Attribute,
122 unsigned Form, int64_t Integer) {
123 if (!Form) Form = DIEInteger::BestForm(true, Integer);
124 DIEValue *Value = new (DIEValueAllocator) DIEInteger(Integer);
125 Die->addValue(Attribute, Form, Value);
128 /// addString - Add a string attribute data and value. We always emit a
129 /// reference to the string pool instead of immediate strings so that DIEs have
130 /// more predictable sizes. In the case of split dwarf we emit an index
131 /// into another table which gets us the static offset into the string
133 void CompileUnit::addString(DIE *Die, unsigned Attribute, StringRef String) {
134 if (!DD->useSplitDwarf()) {
135 MCSymbol *Symb = DU->getStringPoolEntry(String);
137 if (Asm->needsRelocationsForDwarfStringPool())
138 Value = new (DIEValueAllocator) DIELabel(Symb);
140 MCSymbol *StringPool = DU->getStringPoolSym();
141 Value = new (DIEValueAllocator) DIEDelta(Symb, StringPool);
143 Die->addValue(Attribute, dwarf::DW_FORM_strp, Value);
145 unsigned idx = DU->getStringPoolIndex(String);
146 DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
147 Die->addValue(Attribute, dwarf::DW_FORM_GNU_str_index, Value);
151 /// addLocalString - Add a string attribute data and value. This is guaranteed
152 /// to be in the local string pool instead of indirected.
153 void CompileUnit::addLocalString(DIE *Die, unsigned Attribute,
155 MCSymbol *Symb = DU->getStringPoolEntry(String);
157 if (Asm->needsRelocationsForDwarfStringPool())
158 Value = new (DIEValueAllocator) DIELabel(Symb);
160 MCSymbol *StringPool = DU->getStringPoolSym();
161 Value = new (DIEValueAllocator) DIEDelta(Symb, StringPool);
163 Die->addValue(Attribute, dwarf::DW_FORM_strp, Value);
166 /// addLabel - Add a Dwarf label attribute data and value.
168 void CompileUnit::addLabel(DIE *Die, unsigned Attribute, unsigned Form,
169 const MCSymbol *Label) {
170 DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
171 Die->addValue(Attribute, Form, Value);
174 /// addLabelAddress - Add a dwarf label attribute data and value using
175 /// DW_FORM_addr or DW_FORM_GNU_addr_index.
177 void CompileUnit::addLabelAddress(DIE *Die, unsigned Attribute,
179 if (!DD->useSplitDwarf()) {
181 DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
182 Die->addValue(Attribute, dwarf::DW_FORM_addr, Value);
184 DIEValue *Value = new (DIEValueAllocator) DIEInteger(0);
185 Die->addValue(Attribute, dwarf::DW_FORM_addr, Value);
188 unsigned idx = DU->getAddrPoolIndex(Label);
189 DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
190 Die->addValue(Attribute, dwarf::DW_FORM_GNU_addr_index, Value);
194 /// addOpAddress - Add a dwarf op address data and value using the
195 /// form given and an op of either DW_FORM_addr or DW_FORM_GNU_addr_index.
197 void CompileUnit::addOpAddress(DIE *Die, MCSymbol *Sym) {
199 if (!DD->useSplitDwarf()) {
200 addUInt(Die, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
201 addLabel(Die, 0, dwarf::DW_FORM_udata, Sym);
203 unsigned idx = DU->getAddrPoolIndex(Sym);
204 DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
205 addUInt(Die, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_addr_index);
206 Die->addValue(0, dwarf::DW_FORM_GNU_addr_index, Value);
210 /// addDelta - Add a label delta attribute data and value.
212 void CompileUnit::addDelta(DIE *Die, unsigned Attribute, unsigned Form,
213 const MCSymbol *Hi, const MCSymbol *Lo) {
214 DIEValue *Value = new (DIEValueAllocator) DIEDelta(Hi, Lo);
215 Die->addValue(Attribute, Form, Value);
218 /// addDIEEntry - Add a DIE attribute data and value.
220 void CompileUnit::addDIEEntry(DIE *Die, unsigned Attribute, unsigned Form,
222 Die->addValue(Attribute, Form, createDIEEntry(Entry));
225 /// addBlock - Add block data.
227 void CompileUnit::addBlock(DIE *Die, unsigned Attribute, unsigned Form,
229 Block->ComputeSize(Asm);
230 DIEBlocks.push_back(Block); // Memoize so we can call the destructor later on.
231 Die->addValue(Attribute, Block->BestForm(), Block);
234 /// addSourceLine - Add location information to specified debug information
236 void CompileUnit::addSourceLine(DIE *Die, DIVariable V) {
241 unsigned Line = V.getLineNumber();
244 unsigned FileID = DD->getOrCreateSourceID(V.getContext().getFilename(),
245 V.getContext().getDirectory(),
247 assert(FileID && "Invalid file id");
248 addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
249 addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
252 /// addSourceLine - Add location information to specified debug information
254 void CompileUnit::addSourceLine(DIE *Die, DIGlobalVariable G) {
255 // Verify global variable.
259 unsigned Line = G.getLineNumber();
262 unsigned FileID = DD->getOrCreateSourceID(G.getFilename(), G.getDirectory(),
264 assert(FileID && "Invalid file id");
265 addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
266 addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
269 /// addSourceLine - Add location information to specified debug information
271 void CompileUnit::addSourceLine(DIE *Die, DISubprogram SP) {
272 // Verify subprogram.
276 // If the line number is 0, don't add it.
277 unsigned Line = SP.getLineNumber();
281 unsigned FileID = DD->getOrCreateSourceID(SP.getFilename(),
282 SP.getDirectory(), getUniqueID());
283 assert(FileID && "Invalid file id");
284 addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
285 addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
288 /// addSourceLine - Add location information to specified debug information
290 void CompileUnit::addSourceLine(DIE *Die, DIType Ty) {
295 unsigned Line = Ty.getLineNumber();
298 unsigned FileID = DD->getOrCreateSourceID(Ty.getFilename(),
299 Ty.getDirectory(), getUniqueID());
300 assert(FileID && "Invalid file id");
301 addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
302 addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
305 /// addSourceLine - Add location information to specified debug information
307 void CompileUnit::addSourceLine(DIE *Die, DIObjCProperty Ty) {
312 unsigned Line = Ty.getLineNumber();
315 DIFile File = Ty.getFile();
316 unsigned FileID = DD->getOrCreateSourceID(File.getFilename(),
317 File.getDirectory(), getUniqueID());
318 assert(FileID && "Invalid file id");
319 addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
320 addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
323 /// addSourceLine - Add location information to specified debug information
325 void CompileUnit::addSourceLine(DIE *Die, DINameSpace NS) {
330 unsigned Line = NS.getLineNumber();
333 StringRef FN = NS.getFilename();
335 unsigned FileID = DD->getOrCreateSourceID(FN, NS.getDirectory(),
337 assert(FileID && "Invalid file id");
338 addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
339 addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
342 /// addVariableAddress - Add DW_AT_location attribute for a
343 /// DbgVariable based on provided MachineLocation.
344 void CompileUnit::addVariableAddress(DbgVariable *&DV, DIE *Die,
345 MachineLocation Location) {
346 if (DV->variableHasComplexAddress())
347 addComplexAddress(DV, Die, dwarf::DW_AT_location, Location);
348 else if (DV->isBlockByrefVariable())
349 addBlockByrefAddress(DV, Die, dwarf::DW_AT_location, Location);
351 addAddress(Die, dwarf::DW_AT_location, Location);
354 /// addRegisterOp - Add register operand.
355 void CompileUnit::addRegisterOp(DIE *TheDie, unsigned Reg) {
356 const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
357 unsigned DWReg = RI->getDwarfRegNum(Reg, false);
359 addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + DWReg);
361 addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_regx);
362 addUInt(TheDie, 0, dwarf::DW_FORM_udata, DWReg);
366 /// addRegisterOffset - Add register offset.
367 void CompileUnit::addRegisterOffset(DIE *TheDie, unsigned Reg,
369 const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
370 unsigned DWReg = RI->getDwarfRegNum(Reg, false);
371 const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
372 if (Reg == TRI->getFrameRegister(*Asm->MF))
373 // If variable offset is based in frame register then use fbreg.
374 addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_fbreg);
376 addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + DWReg);
378 addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx);
379 addUInt(TheDie, 0, dwarf::DW_FORM_udata, DWReg);
381 addSInt(TheDie, 0, dwarf::DW_FORM_sdata, Offset);
384 /// addAddress - Add an address attribute to a die based on the location
386 void CompileUnit::addAddress(DIE *Die, unsigned Attribute,
387 const MachineLocation &Location) {
388 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
390 if (Location.isReg())
391 addRegisterOp(Block, Location.getReg());
393 addRegisterOffset(Block, Location.getReg(), Location.getOffset());
395 // Now attach the location information to the DIE.
396 addBlock(Die, Attribute, 0, Block);
399 /// addComplexAddress - Start with the address based on the location provided,
400 /// and generate the DWARF information necessary to find the actual variable
401 /// given the extra address information encoded in the DIVariable, starting from
402 /// the starting location. Add the DWARF information to the die.
404 void CompileUnit::addComplexAddress(DbgVariable *&DV, DIE *Die,
406 const MachineLocation &Location) {
407 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
408 unsigned N = DV->getNumAddrElements();
410 if (Location.isReg()) {
411 if (N >= 2 && DV->getAddrElement(0) == DIBuilder::OpPlus) {
412 // If first address element is OpPlus then emit
413 // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
414 addRegisterOffset(Block, Location.getReg(), DV->getAddrElement(1));
417 addRegisterOp(Block, Location.getReg());
420 addRegisterOffset(Block, Location.getReg(), Location.getOffset());
423 uint64_t Element = DV->getAddrElement(i);
424 if (Element == DIBuilder::OpPlus) {
425 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
426 addUInt(Block, 0, dwarf::DW_FORM_udata, DV->getAddrElement(++i));
427 } else if (Element == DIBuilder::OpDeref) {
428 if (!Location.isReg())
429 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
430 } else llvm_unreachable("unknown DIBuilder Opcode");
433 // Now attach the location information to the DIE.
434 addBlock(Die, Attribute, 0, Block);
437 /* Byref variables, in Blocks, are declared by the programmer as "SomeType
438 VarName;", but the compiler creates a __Block_byref_x_VarName struct, and
439 gives the variable VarName either the struct, or a pointer to the struct, as
440 its type. This is necessary for various behind-the-scenes things the
441 compiler needs to do with by-reference variables in Blocks.
443 However, as far as the original *programmer* is concerned, the variable
444 should still have type 'SomeType', as originally declared.
446 The function getBlockByrefType dives into the __Block_byref_x_VarName
447 struct to find the original type of the variable, which is then assigned to
448 the variable's Debug Information Entry as its real type. So far, so good.
449 However now the debugger will expect the variable VarName to have the type
450 SomeType. So we need the location attribute for the variable to be an
451 expression that explains to the debugger how to navigate through the
452 pointers and struct to find the actual variable of type SomeType.
454 The following function does just that. We start by getting
455 the "normal" location for the variable. This will be the location
456 of either the struct __Block_byref_x_VarName or the pointer to the
457 struct __Block_byref_x_VarName.
459 The struct will look something like:
461 struct __Block_byref_x_VarName {
463 struct __Block_byref_x_VarName *forwarding;
464 ... <various other fields>
466 ... <maybe more fields>
469 If we are given the struct directly (as our starting point) we
470 need to tell the debugger to:
472 1). Add the offset of the forwarding field.
474 2). Follow that pointer to get the real __Block_byref_x_VarName
475 struct to use (the real one may have been copied onto the heap).
477 3). Add the offset for the field VarName, to find the actual variable.
479 If we started with a pointer to the struct, then we need to
480 dereference that pointer first, before the other steps.
481 Translating this into DWARF ops, we will need to append the following
482 to the current location description for the variable:
484 DW_OP_deref -- optional, if we start with a pointer
485 DW_OP_plus_uconst <forward_fld_offset>
487 DW_OP_plus_uconst <varName_fld_offset>
489 That is what this function does. */
491 /// addBlockByrefAddress - Start with the address based on the location
492 /// provided, and generate the DWARF information necessary to find the
493 /// actual Block variable (navigating the Block struct) based on the
494 /// starting location. Add the DWARF information to the die. For
495 /// more information, read large comment just above here.
497 void CompileUnit::addBlockByrefAddress(DbgVariable *&DV, DIE *Die,
499 const MachineLocation &Location) {
500 DIType Ty = DV->getType();
502 unsigned Tag = Ty.getTag();
503 bool isPointer = false;
505 StringRef varName = DV->getName();
507 if (Tag == dwarf::DW_TAG_pointer_type) {
508 DIDerivedType DTy = DIDerivedType(Ty);
509 TmpTy = DTy.getTypeDerivedFrom();
513 DICompositeType blockStruct = DICompositeType(TmpTy);
515 // Find the __forwarding field and the variable field in the __Block_byref
517 DIArray Fields = blockStruct.getTypeArray();
518 DIDescriptor varField = DIDescriptor();
519 DIDescriptor forwardingField = DIDescriptor();
521 for (unsigned i = 0, N = Fields.getNumElements(); i < N; ++i) {
522 DIDescriptor Element = Fields.getElement(i);
523 DIDerivedType DT = DIDerivedType(Element);
524 StringRef fieldName = DT.getName();
525 if (fieldName == "__forwarding")
526 forwardingField = Element;
527 else if (fieldName == varName)
531 // Get the offsets for the forwarding field and the variable field.
532 unsigned forwardingFieldOffset =
533 DIDerivedType(forwardingField).getOffsetInBits() >> 3;
534 unsigned varFieldOffset =
535 DIDerivedType(varField).getOffsetInBits() >> 3;
537 // Decode the original location, and use that as the start of the byref
538 // variable's location.
539 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
541 if (Location.isReg())
542 addRegisterOp(Block, Location.getReg());
544 addRegisterOffset(Block, Location.getReg(), Location.getOffset());
546 // If we started with a pointer to the __Block_byref... struct, then
547 // the first thing we need to do is dereference the pointer (DW_OP_deref).
549 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
551 // Next add the offset for the '__forwarding' field:
552 // DW_OP_plus_uconst ForwardingFieldOffset. Note there's no point in
553 // adding the offset if it's 0.
554 if (forwardingFieldOffset > 0) {
555 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
556 addUInt(Block, 0, dwarf::DW_FORM_udata, forwardingFieldOffset);
559 // Now dereference the __forwarding field to get to the real __Block_byref
560 // struct: DW_OP_deref.
561 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
563 // Now that we've got the real __Block_byref... struct, add the offset
564 // for the variable's field to get to the location of the actual variable:
565 // DW_OP_plus_uconst varFieldOffset. Again, don't add if it's 0.
566 if (varFieldOffset > 0) {
567 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
568 addUInt(Block, 0, dwarf::DW_FORM_udata, varFieldOffset);
571 // Now attach the location information to the DIE.
572 addBlock(Die, Attribute, 0, Block);
575 /// isTypeSigned - Return true if the type is signed.
576 static bool isTypeSigned(DIType Ty, int *SizeInBits) {
577 if (Ty.isDerivedType())
578 return isTypeSigned(DIDerivedType(Ty).getTypeDerivedFrom(), SizeInBits);
579 if (Ty.isBasicType())
580 if (DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed
581 || DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed_char) {
582 *SizeInBits = Ty.getSizeInBits();
588 /// addConstantValue - Add constant value entry in variable DIE.
589 bool CompileUnit::addConstantValue(DIE *Die, const MachineOperand &MO,
591 // FIXME: This is a bit conservative/simple - it emits negative values at
592 // their maximum bit width which is a bit unfortunate (& doesn't prefer
593 // udata/sdata over dataN as suggested by the DWARF spec)
594 assert(MO.isImm() && "Invalid machine operand!");
595 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
597 bool SignedConstant = isTypeSigned(Ty, &SizeInBits);
598 unsigned Form = SignedConstant ? dwarf::DW_FORM_sdata : dwarf::DW_FORM_udata;
599 switch (SizeInBits) {
600 case 8: Form = dwarf::DW_FORM_data1; break;
601 case 16: Form = dwarf::DW_FORM_data2; break;
602 case 32: Form = dwarf::DW_FORM_data4; break;
603 case 64: Form = dwarf::DW_FORM_data8; break;
606 SignedConstant ? addSInt(Block, 0, Form, MO.getImm())
607 : addUInt(Block, 0, Form, MO.getImm());
609 addBlock(Die, dwarf::DW_AT_const_value, 0, Block);
613 /// addConstantFPValue - Add constant value entry in variable DIE.
614 bool CompileUnit::addConstantFPValue(DIE *Die, const MachineOperand &MO) {
615 assert (MO.isFPImm() && "Invalid machine operand!");
616 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
617 APFloat FPImm = MO.getFPImm()->getValueAPF();
619 // Get the raw data form of the floating point.
620 const APInt FltVal = FPImm.bitcastToAPInt();
621 const char *FltPtr = (const char*)FltVal.getRawData();
623 int NumBytes = FltVal.getBitWidth() / 8; // 8 bits per byte.
624 bool LittleEndian = Asm->getDataLayout().isLittleEndian();
625 int Incr = (LittleEndian ? 1 : -1);
626 int Start = (LittleEndian ? 0 : NumBytes - 1);
627 int Stop = (LittleEndian ? NumBytes : -1);
629 // Output the constant to DWARF one byte at a time.
630 for (; Start != Stop; Start += Incr)
631 addUInt(Block, 0, dwarf::DW_FORM_data1,
632 (unsigned char)0xFF & FltPtr[Start]);
634 addBlock(Die, dwarf::DW_AT_const_value, 0, Block);
638 /// addConstantFPValue - Add constant value entry in variable DIE.
639 bool CompileUnit::addConstantFPValue(DIE *Die, const ConstantFP *CFP) {
640 return addConstantValue(Die, CFP->getValueAPF().bitcastToAPInt(), false);
643 /// addConstantValue - Add constant value entry in variable DIE.
644 bool CompileUnit::addConstantValue(DIE *Die, const ConstantInt *CI,
646 return addConstantValue(Die, CI->getValue(), Unsigned);
649 // addConstantValue - Add constant value entry in variable DIE.
650 bool CompileUnit::addConstantValue(DIE *Die, const APInt &Val,
652 unsigned CIBitWidth = Val.getBitWidth();
653 if (CIBitWidth <= 64) {
655 switch (CIBitWidth) {
656 case 8: form = dwarf::DW_FORM_data1; break;
657 case 16: form = dwarf::DW_FORM_data2; break;
658 case 32: form = dwarf::DW_FORM_data4; break;
659 case 64: form = dwarf::DW_FORM_data8; break;
661 form = Unsigned ? dwarf::DW_FORM_udata : dwarf::DW_FORM_sdata;
664 addUInt(Die, dwarf::DW_AT_const_value, form, Val.getZExtValue());
666 addSInt(Die, dwarf::DW_AT_const_value, form, Val.getSExtValue());
670 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
672 // Get the raw data form of the large APInt.
673 const uint64_t *Ptr64 = Val.getRawData();
675 int NumBytes = Val.getBitWidth() / 8; // 8 bits per byte.
676 bool LittleEndian = Asm->getDataLayout().isLittleEndian();
678 // Output the constant to DWARF one byte at a time.
679 for (int i = 0; i < NumBytes; i++) {
682 c = Ptr64[i / 8] >> (8 * (i & 7));
684 c = Ptr64[(NumBytes - 1 - i) / 8] >> (8 * ((NumBytes - 1 - i) & 7));
685 addUInt(Block, 0, dwarf::DW_FORM_data1, c);
688 addBlock(Die, dwarf::DW_AT_const_value, 0, Block);
692 /// addTemplateParams - Add template parameters into buffer.
693 void CompileUnit::addTemplateParams(DIE &Buffer, DIArray TParams) {
694 // Add template parameters.
695 for (unsigned i = 0, e = TParams.getNumElements(); i != e; ++i) {
696 DIDescriptor Element = TParams.getElement(i);
697 if (Element.isTemplateTypeParameter())
698 Buffer.addChild(getOrCreateTemplateTypeParameterDIE(
699 DITemplateTypeParameter(Element)));
700 else if (Element.isTemplateValueParameter())
701 Buffer.addChild(getOrCreateTemplateValueParameterDIE(
702 DITemplateValueParameter(Element)));
706 /// getOrCreateContextDIE - Get context owner's DIE.
707 DIE *CompileUnit::getOrCreateContextDIE(DIDescriptor Context) {
708 if (Context.isType())
709 return getOrCreateTypeDIE(DIType(Context));
710 else if (Context.isNameSpace())
711 return getOrCreateNameSpace(DINameSpace(Context));
712 else if (Context.isSubprogram())
713 return getOrCreateSubprogramDIE(DISubprogram(Context));
715 return getDIE(Context);
718 /// addToContextOwner - Add Die into the list of its context owner's children.
719 void CompileUnit::addToContextOwner(DIE *Die, DIDescriptor Context) {
720 if (DIE *ContextDIE = getOrCreateContextDIE(Context))
721 ContextDIE->addChild(Die);
726 /// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
728 DIE *CompileUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
732 DIE *TyDIE = getDIE(Ty);
737 TyDIE = new DIE(dwarf::DW_TAG_base_type);
738 insertDIE(Ty, TyDIE);
739 if (Ty.isBasicType())
740 constructTypeDIE(*TyDIE, DIBasicType(Ty));
741 else if (Ty.isCompositeType())
742 constructTypeDIE(*TyDIE, DICompositeType(Ty));
744 assert(Ty.isDerivedType() && "Unknown kind of DIType");
745 constructTypeDIE(*TyDIE, DIDerivedType(Ty));
747 // If this is a named finished type then include it in the list of types
748 // for the accelerator tables.
749 if (!Ty.getName().empty() && !Ty.isForwardDecl()) {
750 bool IsImplementation = 0;
751 if (Ty.isCompositeType()) {
752 DICompositeType CT(Ty);
753 // A runtime language of 0 actually means C/C++ and that any
754 // non-negative value is some version of Objective-C/C++.
755 IsImplementation = (CT.getRunTimeLang() == 0) ||
756 CT.isObjcClassComplete();
758 unsigned Flags = IsImplementation ?
759 DwarfAccelTable::eTypeFlagClassIsImplementation : 0;
760 addAccelType(Ty.getName(), std::make_pair(TyDIE, Flags));
763 addToContextOwner(TyDIE, Ty.getContext());
767 /// addType - Add a new type attribute to the specified entity.
768 void CompileUnit::addType(DIE *Entity, DIType Ty, unsigned Attribute) {
772 // Check for pre-existence.
773 DIEEntry *Entry = getDIEEntry(Ty);
774 // If it exists then use the existing value.
776 Entity->addValue(Attribute, dwarf::DW_FORM_ref4, Entry);
781 DIE *Buffer = getOrCreateTypeDIE(Ty);
784 Entry = createDIEEntry(Buffer);
785 insertDIEEntry(Ty, Entry);
786 Entity->addValue(Attribute, dwarf::DW_FORM_ref4, Entry);
788 // If this is a complete composite type then include it in the
789 // list of global types.
793 /// addGlobalType - Add a new global type to the compile unit.
795 void CompileUnit::addGlobalType(DIType Ty) {
796 DIDescriptor Context = Ty.getContext();
797 if (Ty.isCompositeType() && !Ty.getName().empty() && !Ty.isForwardDecl()
798 && (!Context || Context.isCompileUnit() || Context.isFile()
799 || Context.isNameSpace()))
800 if (DIEEntry *Entry = getDIEEntry(Ty))
801 GlobalTypes[Ty.getName()] = Entry->getEntry();
804 /// addPubTypes - Add type for pubtypes section.
805 void CompileUnit::addPubTypes(DISubprogram SP) {
806 DICompositeType SPTy = SP.getType();
807 unsigned SPTag = SPTy.getTag();
808 if (SPTag != dwarf::DW_TAG_subroutine_type)
811 DIArray Args = SPTy.getTypeArray();
812 for (unsigned i = 0, e = Args.getNumElements(); i != e; ++i) {
813 DIType ATy(Args.getElement(i));
820 /// constructTypeDIE - Construct basic type die from DIBasicType.
821 void CompileUnit::constructTypeDIE(DIE &Buffer, DIBasicType BTy) {
822 // Get core information.
823 StringRef Name = BTy.getName();
824 // Add name if not anonymous or intermediate type.
826 addString(&Buffer, dwarf::DW_AT_name, Name);
828 if (BTy.getTag() == dwarf::DW_TAG_unspecified_type) {
829 Buffer.setTag(dwarf::DW_TAG_unspecified_type);
830 // Unspecified types has only name, nothing else.
834 Buffer.setTag(dwarf::DW_TAG_base_type);
835 addUInt(&Buffer, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
838 uint64_t Size = BTy.getSizeInBits() >> 3;
839 addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
842 /// constructTypeDIE - Construct derived type die from DIDerivedType.
843 void CompileUnit::constructTypeDIE(DIE &Buffer, DIDerivedType DTy) {
844 // Get core information.
845 StringRef Name = DTy.getName();
846 uint64_t Size = DTy.getSizeInBits() >> 3;
847 unsigned Tag = DTy.getTag();
849 // FIXME - Workaround for templates.
850 if (Tag == dwarf::DW_TAG_inheritance) Tag = dwarf::DW_TAG_reference_type;
854 // Map to main type, void will not have a type.
855 DIType FromTy = DTy.getTypeDerivedFrom();
856 addType(&Buffer, FromTy);
858 // Add name if not anonymous or intermediate type.
860 addString(&Buffer, dwarf::DW_AT_name, Name);
862 // Add size if non-zero (derived types might be zero-sized.)
863 if (Size && Tag != dwarf::DW_TAG_pointer_type)
864 addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
866 if (Tag == dwarf::DW_TAG_ptr_to_member_type)
867 addDIEEntry(&Buffer, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4,
868 getOrCreateTypeDIE(DTy.getClassType()));
869 // Add source line info if available and TyDesc is not a forward declaration.
870 if (!DTy.isForwardDecl())
871 addSourceLine(&Buffer, DTy);
874 /// constructTypeDIE - Construct type DIE from DICompositeType.
875 void CompileUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
876 // Get core information.
877 StringRef Name = CTy.getName();
879 uint64_t Size = CTy.getSizeInBits() >> 3;
880 unsigned Tag = CTy.getTag();
884 case dwarf::DW_TAG_array_type:
885 constructArrayTypeDIE(Buffer, &CTy);
887 case dwarf::DW_TAG_enumeration_type: {
888 DIArray Elements = CTy.getTypeArray();
890 // Add enumerators to enumeration type.
891 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
893 DIDescriptor Enum(Elements.getElement(i));
894 if (Enum.isEnumerator()) {
895 ElemDie = constructEnumTypeDIE(DIEnumerator(Enum));
896 Buffer.addChild(ElemDie);
899 DIType DTy = CTy.getTypeDerivedFrom();
901 addType(&Buffer, DTy);
902 addUInt(&Buffer, dwarf::DW_AT_enum_class, dwarf::DW_FORM_flag, 1);
906 case dwarf::DW_TAG_subroutine_type: {
908 DIArray Elements = CTy.getTypeArray();
909 DIDescriptor RTy = Elements.getElement(0);
910 addType(&Buffer, DIType(RTy));
912 bool isPrototyped = true;
914 for (unsigned i = 1, N = Elements.getNumElements(); i < N; ++i) {
915 DIDescriptor Ty = Elements.getElement(i);
916 if (Ty.isUnspecifiedParameter()) {
917 DIE *Arg = new DIE(dwarf::DW_TAG_unspecified_parameters);
918 Buffer.addChild(Arg);
919 isPrototyped = false;
921 DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
922 addType(Arg, DIType(Ty));
923 if (DIType(Ty).isArtificial())
924 addFlag(Arg, dwarf::DW_AT_artificial);
925 Buffer.addChild(Arg);
928 // Add prototype flag if we're dealing with a C language and the
929 // function has been prototyped.
931 (Language == dwarf::DW_LANG_C89 ||
932 Language == dwarf::DW_LANG_C99 ||
933 Language == dwarf::DW_LANG_ObjC))
934 addFlag(&Buffer, dwarf::DW_AT_prototyped);
937 case dwarf::DW_TAG_structure_type:
938 case dwarf::DW_TAG_union_type:
939 case dwarf::DW_TAG_class_type: {
940 // Add elements to structure type.
941 DIArray Elements = CTy.getTypeArray();
943 // A forward struct declared type may not have elements available.
944 unsigned N = Elements.getNumElements();
948 // Add elements to structure type.
949 for (unsigned i = 0; i < N; ++i) {
950 DIDescriptor Element = Elements.getElement(i);
952 if (Element.isSubprogram()) {
953 DISubprogram SP(Element);
954 ElemDie = getOrCreateSubprogramDIE(DISubprogram(Element));
955 if (SP.isProtected())
956 addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
957 dwarf::DW_ACCESS_protected);
958 else if (SP.isPrivate())
959 addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
960 dwarf::DW_ACCESS_private);
962 addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
963 dwarf::DW_ACCESS_public);
965 addFlag(ElemDie, dwarf::DW_AT_explicit);
966 } else if (Element.isDerivedType()) {
967 DIDerivedType DDTy(Element);
968 if (DDTy.getTag() == dwarf::DW_TAG_friend) {
969 ElemDie = new DIE(dwarf::DW_TAG_friend);
970 addType(ElemDie, DDTy.getTypeDerivedFrom(), dwarf::DW_AT_friend);
971 } else if (DDTy.isStaticMember())
972 ElemDie = createStaticMemberDIE(DDTy);
974 ElemDie = createMemberDIE(DDTy);
975 } else if (Element.isObjCProperty()) {
976 DIObjCProperty Property(Element);
977 ElemDie = new DIE(Property.getTag());
978 StringRef PropertyName = Property.getObjCPropertyName();
979 addString(ElemDie, dwarf::DW_AT_APPLE_property_name, PropertyName);
980 addType(ElemDie, Property.getType());
981 addSourceLine(ElemDie, Property);
982 StringRef GetterName = Property.getObjCPropertyGetterName();
983 if (!GetterName.empty())
984 addString(ElemDie, dwarf::DW_AT_APPLE_property_getter, GetterName);
985 StringRef SetterName = Property.getObjCPropertySetterName();
986 if (!SetterName.empty())
987 addString(ElemDie, dwarf::DW_AT_APPLE_property_setter, SetterName);
988 unsigned PropertyAttributes = 0;
989 if (Property.isReadOnlyObjCProperty())
990 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readonly;
991 if (Property.isReadWriteObjCProperty())
992 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readwrite;
993 if (Property.isAssignObjCProperty())
994 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_assign;
995 if (Property.isRetainObjCProperty())
996 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_retain;
997 if (Property.isCopyObjCProperty())
998 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_copy;
999 if (Property.isNonAtomicObjCProperty())
1000 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_nonatomic;
1001 if (PropertyAttributes)
1002 addUInt(ElemDie, dwarf::DW_AT_APPLE_property_attribute, 0,
1003 PropertyAttributes);
1005 DIEEntry *Entry = getDIEEntry(Element);
1007 Entry = createDIEEntry(ElemDie);
1008 insertDIEEntry(Element, Entry);
1012 Buffer.addChild(ElemDie);
1015 if (CTy.isAppleBlockExtension())
1016 addFlag(&Buffer, dwarf::DW_AT_APPLE_block);
1018 DICompositeType ContainingType = CTy.getContainingType();
1019 if (DIDescriptor(ContainingType).isCompositeType())
1020 addDIEEntry(&Buffer, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4,
1021 getOrCreateTypeDIE(DIType(ContainingType)));
1023 DIDescriptor Context = CTy.getContext();
1024 addToContextOwner(&Buffer, Context);
1027 if (CTy.isObjcClassComplete())
1028 addFlag(&Buffer, dwarf::DW_AT_APPLE_objc_complete_type);
1030 // Add template parameters to a class, structure or union types.
1031 // FIXME: The support isn't in the metadata for this yet.
1032 if (Tag == dwarf::DW_TAG_class_type ||
1033 Tag == dwarf::DW_TAG_structure_type ||
1034 Tag == dwarf::DW_TAG_union_type)
1035 addTemplateParams(Buffer, CTy.getTemplateParams());
1043 // Add name if not anonymous or intermediate type.
1045 addString(&Buffer, dwarf::DW_AT_name, Name);
1047 if (Tag == dwarf::DW_TAG_enumeration_type ||
1048 Tag == dwarf::DW_TAG_class_type ||
1049 Tag == dwarf::DW_TAG_structure_type ||
1050 Tag == dwarf::DW_TAG_union_type) {
1051 // Add size if non-zero (derived types might be zero-sized.)
1052 // TODO: Do we care about size for enum forward declarations?
1054 addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
1055 else if (!CTy.isForwardDecl())
1056 // Add zero size if it is not a forward declaration.
1057 addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, 0);
1059 // If we're a forward decl, say so.
1060 if (CTy.isForwardDecl())
1061 addFlag(&Buffer, dwarf::DW_AT_declaration);
1063 // Add source line info if available.
1064 if (!CTy.isForwardDecl())
1065 addSourceLine(&Buffer, CTy);
1067 // No harm in adding the runtime language to the declaration.
1068 unsigned RLang = CTy.getRunTimeLang();
1070 addUInt(&Buffer, dwarf::DW_AT_APPLE_runtime_class,
1071 dwarf::DW_FORM_data1, RLang);
1075 /// getOrCreateTemplateTypeParameterDIE - Find existing DIE or create new DIE
1076 /// for the given DITemplateTypeParameter.
1078 CompileUnit::getOrCreateTemplateTypeParameterDIE(DITemplateTypeParameter TP) {
1079 DIE *ParamDIE = getDIE(TP);
1083 ParamDIE = new DIE(dwarf::DW_TAG_template_type_parameter);
1084 addType(ParamDIE, TP.getType());
1085 addString(ParamDIE, dwarf::DW_AT_name, TP.getName());
1089 /// getOrCreateTemplateValueParameterDIE - Find existing DIE or create new DIE
1090 /// for the given DITemplateValueParameter.
1092 CompileUnit::getOrCreateTemplateValueParameterDIE(DITemplateValueParameter TPV){
1093 DIE *ParamDIE = getDIE(TPV);
1097 ParamDIE = new DIE(dwarf::DW_TAG_template_value_parameter);
1098 addType(ParamDIE, TPV.getType());
1099 if (!TPV.getName().empty())
1100 addString(ParamDIE, dwarf::DW_AT_name, TPV.getName());
1101 if (Value *Val = TPV.getValue()) {
1102 if (ConstantInt *CI = dyn_cast<ConstantInt>(Val))
1103 addConstantValue(ParamDIE, CI, TPV.getType().isUnsignedDIType());
1104 else if (GlobalValue *GV = dyn_cast<GlobalValue>(Val)) {
1105 // For declaration non-type template parameters (such as global values and
1107 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1108 addOpAddress(Block, Asm->Mang->getSymbol(GV));
1109 // Emit DW_OP_stack_value to use the address as the immediate value of the
1110 // parameter, rather than a pointer to it.
1111 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_stack_value);
1112 addBlock(ParamDIE, dwarf::DW_AT_location, 0, Block);
1119 /// getOrCreateNameSpace - Create a DIE for DINameSpace.
1120 DIE *CompileUnit::getOrCreateNameSpace(DINameSpace NS) {
1121 DIE *NDie = getDIE(NS);
1124 NDie = new DIE(dwarf::DW_TAG_namespace);
1125 insertDIE(NS, NDie);
1126 if (!NS.getName().empty()) {
1127 addString(NDie, dwarf::DW_AT_name, NS.getName());
1128 addAccelNamespace(NS.getName(), NDie);
1130 addAccelNamespace("(anonymous namespace)", NDie);
1131 addSourceLine(NDie, NS);
1132 addToContextOwner(NDie, NS.getContext());
1136 /// getRealLinkageName - If special LLVM prefix that is used to inform the asm
1137 /// printer to not emit usual symbol prefix before the symbol name is used then
1138 /// return linkage name after skipping this special LLVM prefix.
1139 static StringRef getRealLinkageName(StringRef LinkageName) {
1141 if (LinkageName.startswith(StringRef(&One, 1)))
1142 return LinkageName.substr(1);
1146 /// getOrCreateSubprogramDIE - Create new DIE using SP.
1147 DIE *CompileUnit::getOrCreateSubprogramDIE(DISubprogram SP) {
1148 DIE *SPDie = getDIE(SP);
1152 SPDie = new DIE(dwarf::DW_TAG_subprogram);
1154 // DW_TAG_inlined_subroutine may refer to this DIE.
1155 insertDIE(SP, SPDie);
1157 DISubprogram SPDecl = SP.getFunctionDeclaration();
1158 DIE *DeclDie = NULL;
1159 if (SPDecl.isSubprogram()) {
1160 DeclDie = getOrCreateSubprogramDIE(SPDecl);
1163 // Add to context owner.
1164 addToContextOwner(SPDie, SP.getContext());
1166 // Add function template parameters.
1167 addTemplateParams(*SPDie, SP.getTemplateParams());
1169 // Unfortunately this code needs to stay here instead of below the
1170 // AT_specification code in order to work around a bug in older
1171 // gdbs that requires the linkage name to resolve multiple template
1173 // TODO: Remove this set of code when we get rid of the old gdb
1175 StringRef LinkageName = SP.getLinkageName();
1176 if (!LinkageName.empty() && DD->useDarwinGDBCompat())
1177 addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
1178 getRealLinkageName(LinkageName));
1180 // If this DIE is going to refer declaration info using AT_specification
1181 // then there is no need to add other attributes.
1183 // Refer function declaration directly.
1184 addDIEEntry(SPDie, dwarf::DW_AT_specification, dwarf::DW_FORM_ref4,
1190 // Add the linkage name if we have one.
1191 if (!LinkageName.empty() && !DD->useDarwinGDBCompat())
1192 addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
1193 getRealLinkageName(LinkageName));
1195 // Constructors and operators for anonymous aggregates do not have names.
1196 if (!SP.getName().empty())
1197 addString(SPDie, dwarf::DW_AT_name, SP.getName());
1199 addSourceLine(SPDie, SP);
1201 // Add the prototype if we have a prototype and we have a C like
1203 if (SP.isPrototyped() &&
1204 (Language == dwarf::DW_LANG_C89 ||
1205 Language == dwarf::DW_LANG_C99 ||
1206 Language == dwarf::DW_LANG_ObjC))
1207 addFlag(SPDie, dwarf::DW_AT_prototyped);
1210 DICompositeType SPTy = SP.getType();
1211 assert(SPTy.getTag() == dwarf::DW_TAG_subroutine_type &&
1212 "the type of a subprogram should be a subroutine");
1214 DIArray Args = SPTy.getTypeArray();
1215 addType(SPDie, DIType(Args.getElement(0)));
1217 unsigned VK = SP.getVirtuality();
1219 addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1, VK);
1220 DIEBlock *Block = getDIEBlock();
1221 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1222 addUInt(Block, 0, dwarf::DW_FORM_udata, SP.getVirtualIndex());
1223 addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, 0, Block);
1224 ContainingTypeMap.insert(std::make_pair(SPDie,
1225 SP.getContainingType()));
1228 if (!SP.isDefinition()) {
1229 addFlag(SPDie, dwarf::DW_AT_declaration);
1231 // Add arguments. Do not add arguments for subprogram definition. They will
1232 // be handled while processing variables.
1233 for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
1234 DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
1235 DIType ATy = DIType(Args.getElement(i));
1237 if (ATy.isArtificial())
1238 addFlag(Arg, dwarf::DW_AT_artificial);
1239 SPDie->addChild(Arg);
1243 if (SP.isArtificial())
1244 addFlag(SPDie, dwarf::DW_AT_artificial);
1246 if (!SP.isLocalToUnit())
1247 addFlag(SPDie, dwarf::DW_AT_external);
1249 if (SP.isOptimized())
1250 addFlag(SPDie, dwarf::DW_AT_APPLE_optimized);
1252 if (unsigned isa = Asm->getISAEncoding()) {
1253 addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa);
1259 // Return const expression if value is a GEP to access merged global
1261 // i8* getelementptr ({ i8, i8, i8, i8 }* @_MergedGlobals, i32 0, i32 0)
1262 static const ConstantExpr *getMergedGlobalExpr(const Value *V) {
1263 const ConstantExpr *CE = dyn_cast_or_null<ConstantExpr>(V);
1264 if (!CE || CE->getNumOperands() != 3 ||
1265 CE->getOpcode() != Instruction::GetElementPtr)
1268 // First operand points to a global struct.
1269 Value *Ptr = CE->getOperand(0);
1270 if (!isa<GlobalValue>(Ptr) ||
1271 !isa<StructType>(cast<PointerType>(Ptr->getType())->getElementType()))
1274 // Second operand is zero.
1275 const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(CE->getOperand(1));
1276 if (!CI || !CI->isZero())
1279 // Third operand is offset.
1280 if (!isa<ConstantInt>(CE->getOperand(2)))
1286 /// createGlobalVariableDIE - create global variable DIE.
1287 void CompileUnit::createGlobalVariableDIE(const MDNode *N) {
1288 // Check for pre-existence.
1292 DIGlobalVariable GV(N);
1296 DIDescriptor GVContext = GV.getContext();
1297 DIType GTy = GV.getType();
1299 // If this is a static data member definition, some attributes belong
1300 // to the declaration DIE.
1301 DIE *VariableDIE = NULL;
1302 bool IsStaticMember = false;
1303 DIDerivedType SDMDecl = GV.getStaticDataMemberDeclaration();
1304 if (SDMDecl.Verify()) {
1305 assert(SDMDecl.isStaticMember() && "Expected static member decl");
1306 // We need the declaration DIE that is in the static member's class.
1307 // But that class might not exist in the DWARF yet.
1308 // Creating the class will create the static member decl DIE.
1309 getOrCreateContextDIE(SDMDecl.getContext());
1310 VariableDIE = getDIE(SDMDecl);
1311 assert(VariableDIE && "Static member decl has no context?");
1312 IsStaticMember = true;
1315 // If this is not a static data member definition, create the variable
1316 // DIE and add the initial set of attributes to it.
1318 VariableDIE = new DIE(GV.getTag());
1320 insertDIE(N, VariableDIE);
1322 // Add name and type.
1323 addString(VariableDIE, dwarf::DW_AT_name, GV.getDisplayName());
1324 addType(VariableDIE, GTy);
1326 // Add scoping info.
1327 if (!GV.isLocalToUnit()) {
1328 addFlag(VariableDIE, dwarf::DW_AT_external);
1329 addGlobalName(GV.getName(), VariableDIE);
1332 // Add line number info.
1333 addSourceLine(VariableDIE, GV);
1334 // Add to context owner.
1335 addToContextOwner(VariableDIE, GVContext);
1339 bool addToAccelTable = false;
1340 DIE *VariableSpecDIE = NULL;
1341 bool isGlobalVariable = GV.getGlobal() != NULL;
1342 if (isGlobalVariable) {
1343 addToAccelTable = true;
1344 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1345 addOpAddress(Block, Asm->Mang->getSymbol(GV.getGlobal()));
1346 // Do not create specification DIE if context is either compile unit
1348 if (GVContext && GV.isDefinition() && !GVContext.isCompileUnit() &&
1349 !GVContext.isFile() && !isSubprogramContext(GVContext)) {
1350 // Create specification DIE.
1351 VariableSpecDIE = new DIE(dwarf::DW_TAG_variable);
1352 addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification,
1353 dwarf::DW_FORM_ref4, VariableDIE);
1354 addBlock(VariableSpecDIE, dwarf::DW_AT_location, 0, Block);
1355 // A static member's declaration is already flagged as such.
1356 if (!SDMDecl.Verify())
1357 addFlag(VariableDIE, dwarf::DW_AT_declaration);
1358 addDie(VariableSpecDIE);
1360 addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
1362 // Add linkage name.
1363 StringRef LinkageName = GV.getLinkageName();
1364 if (!LinkageName.empty()) {
1365 // From DWARF4: DIEs to which DW_AT_linkage_name may apply include:
1366 // TAG_common_block, TAG_constant, TAG_entry_point, TAG_subprogram and
1368 addString(IsStaticMember && VariableSpecDIE ?
1369 VariableSpecDIE : VariableDIE, dwarf::DW_AT_MIPS_linkage_name,
1370 getRealLinkageName(LinkageName));
1371 // In compatibility mode with older gdbs we put the linkage name on both
1372 // the TAG_variable DIE and on the TAG_member DIE.
1373 if (IsStaticMember && VariableSpecDIE && DD->useDarwinGDBCompat())
1374 addString(VariableDIE, dwarf::DW_AT_MIPS_linkage_name,
1375 getRealLinkageName(LinkageName));
1377 } else if (const ConstantInt *CI =
1378 dyn_cast_or_null<ConstantInt>(GV.getConstant())) {
1379 // AT_const_value was added when the static member was created. To avoid
1380 // emitting AT_const_value multiple times, we only add AT_const_value when
1381 // it is not a static member.
1382 if (!IsStaticMember)
1383 addConstantValue(VariableDIE, CI, GTy.isUnsignedDIType());
1384 } else if (const ConstantExpr *CE = getMergedGlobalExpr(N->getOperand(11))) {
1385 addToAccelTable = true;
1386 // GV is a merged global.
1387 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1388 Value *Ptr = CE->getOperand(0);
1389 addOpAddress(Block, Asm->Mang->getSymbol(cast<GlobalValue>(Ptr)));
1390 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1391 SmallVector<Value*, 3> Idx(CE->op_begin()+1, CE->op_end());
1392 addUInt(Block, 0, dwarf::DW_FORM_udata,
1393 Asm->getDataLayout().getIndexedOffset(Ptr->getType(), Idx));
1394 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1395 addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
1398 if (addToAccelTable) {
1399 DIE *AddrDIE = VariableSpecDIE ? VariableSpecDIE : VariableDIE;
1400 addAccelName(GV.getName(), AddrDIE);
1402 // If the linkage name is different than the name, go ahead and output
1403 // that as well into the name table.
1404 if (GV.getLinkageName() != "" && GV.getName() != GV.getLinkageName())
1405 addAccelName(GV.getLinkageName(), AddrDIE);
1411 /// constructSubrangeDIE - Construct subrange DIE from DISubrange.
1412 void CompileUnit::constructSubrangeDIE(DIE &Buffer, DISubrange SR,
1414 DIE *DW_Subrange = new DIE(dwarf::DW_TAG_subrange_type);
1415 addDIEEntry(DW_Subrange, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, IndexTy);
1417 // The LowerBound value defines the lower bounds which is typically zero for
1418 // C/C++. The Count value is the number of elements. Values are 64 bit. If
1419 // Count == -1 then the array is unbounded and we do not emit
1420 // DW_AT_lower_bound and DW_AT_upper_bound attributes. If LowerBound == 0 and
1421 // Count == 0, then the array has zero elements in which case we do not emit
1423 int64_t LowerBound = SR.getLo();
1424 int64_t DefaultLowerBound = getDefaultLowerBound();
1425 int64_t Count = SR.getCount();
1427 if (DefaultLowerBound == -1 || LowerBound != DefaultLowerBound)
1428 addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, 0, LowerBound);
1430 if (Count != -1 && Count != 0)
1431 // FIXME: An unbounded array should reference the expression that defines
1433 addUInt(DW_Subrange, dwarf::DW_AT_upper_bound, 0, LowerBound + Count - 1);
1435 Buffer.addChild(DW_Subrange);
1438 /// constructArrayTypeDIE - Construct array type DIE from DICompositeType.
1439 void CompileUnit::constructArrayTypeDIE(DIE &Buffer,
1440 DICompositeType *CTy) {
1441 Buffer.setTag(dwarf::DW_TAG_array_type);
1442 if (CTy->isVector())
1443 addFlag(&Buffer, dwarf::DW_AT_GNU_vector);
1445 // Emit derived type.
1446 addType(&Buffer, CTy->getTypeDerivedFrom());
1447 DIArray Elements = CTy->getTypeArray();
1449 // Get an anonymous type for index type.
1450 // FIXME: This type should be passed down from the front end
1451 // as different languages may have different sizes for indexes.
1452 DIE *IdxTy = getIndexTyDie();
1454 // Construct an anonymous type for index type.
1455 IdxTy = new DIE(dwarf::DW_TAG_base_type);
1456 addString(IdxTy, dwarf::DW_AT_name, "int");
1457 addUInt(IdxTy, dwarf::DW_AT_byte_size, 0, sizeof(int32_t));
1458 addUInt(IdxTy, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1459 dwarf::DW_ATE_signed);
1461 setIndexTyDie(IdxTy);
1464 // Add subranges to array type.
1465 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1466 DIDescriptor Element = Elements.getElement(i);
1467 if (Element.getTag() == dwarf::DW_TAG_subrange_type)
1468 constructSubrangeDIE(Buffer, DISubrange(Element), IdxTy);
1472 /// constructEnumTypeDIE - Construct enum type DIE from DIEnumerator.
1473 DIE *CompileUnit::constructEnumTypeDIE(DIEnumerator ETy) {
1474 DIE *Enumerator = new DIE(dwarf::DW_TAG_enumerator);
1475 StringRef Name = ETy.getName();
1476 addString(Enumerator, dwarf::DW_AT_name, Name);
1477 int64_t Value = ETy.getEnumValue();
1478 addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, Value);
1482 /// constructContainingTypeDIEs - Construct DIEs for types that contain
1484 void CompileUnit::constructContainingTypeDIEs() {
1485 for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(),
1486 CE = ContainingTypeMap.end(); CI != CE; ++CI) {
1487 DIE *SPDie = CI->first;
1488 const MDNode *N = CI->second;
1490 DIE *NDie = getDIE(N);
1491 if (!NDie) continue;
1492 addDIEEntry(SPDie, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4, NDie);
1496 /// constructVariableDIE - Construct a DIE for the given DbgVariable.
1497 DIE *CompileUnit::constructVariableDIE(DbgVariable *DV, bool isScopeAbstract) {
1498 StringRef Name = DV->getName();
1500 // Translate tag to proper Dwarf tag.
1501 unsigned Tag = DV->getTag();
1503 // Define variable debug information entry.
1504 DIE *VariableDie = new DIE(Tag);
1505 DbgVariable *AbsVar = DV->getAbstractVariable();
1506 DIE *AbsDIE = AbsVar ? AbsVar->getDIE() : NULL;
1508 addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin,
1509 dwarf::DW_FORM_ref4, AbsDIE);
1511 addString(VariableDie, dwarf::DW_AT_name, Name);
1512 addSourceLine(VariableDie, DV->getVariable());
1513 addType(VariableDie, DV->getType());
1516 if (DV->isArtificial())
1517 addFlag(VariableDie, dwarf::DW_AT_artificial);
1519 if (isScopeAbstract) {
1520 DV->setDIE(VariableDie);
1524 // Add variable address.
1526 unsigned Offset = DV->getDotDebugLocOffset();
1527 if (Offset != ~0U) {
1528 addLabel(VariableDie, dwarf::DW_AT_location,
1529 dwarf::DW_FORM_data4,
1530 Asm->GetTempSymbol("debug_loc", Offset));
1531 DV->setDIE(VariableDie);
1535 // Check if variable is described by a DBG_VALUE instruction.
1536 if (const MachineInstr *DVInsn = DV->getMInsn()) {
1537 bool updated = false;
1538 if (DVInsn->getNumOperands() == 3) {
1539 if (DVInsn->getOperand(0).isReg()) {
1540 const MachineOperand RegOp = DVInsn->getOperand(0);
1541 const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1542 if (DVInsn->getOperand(1).isImm() &&
1543 TRI->getFrameRegister(*Asm->MF) == RegOp.getReg()) {
1544 unsigned FrameReg = 0;
1545 const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
1547 TFI->getFrameIndexReference(*Asm->MF,
1548 DVInsn->getOperand(1).getImm(),
1550 MachineLocation Location(FrameReg, Offset);
1551 addVariableAddress(DV, VariableDie, Location);
1553 } else if (RegOp.getReg())
1554 addVariableAddress(DV, VariableDie,
1555 MachineLocation(RegOp.getReg()));
1558 else if (DVInsn->getOperand(0).isImm())
1560 addConstantValue(VariableDie, DVInsn->getOperand(0),
1562 else if (DVInsn->getOperand(0).isFPImm())
1564 addConstantFPValue(VariableDie, DVInsn->getOperand(0));
1565 else if (DVInsn->getOperand(0).isCImm())
1567 addConstantValue(VariableDie,
1568 DVInsn->getOperand(0).getCImm(),
1569 DV->getType().isUnsignedDIType());
1571 addVariableAddress(DV, VariableDie,
1572 Asm->getDebugValueLocation(DVInsn));
1576 // If variableDie is not updated then DBG_VALUE instruction does not
1577 // have valid variable info.
1581 DV->setDIE(VariableDie);
1584 // .. else use frame index.
1585 int FI = DV->getFrameIndex();
1587 unsigned FrameReg = 0;
1588 const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
1590 TFI->getFrameIndexReference(*Asm->MF, FI, FrameReg);
1591 MachineLocation Location(FrameReg, Offset);
1592 addVariableAddress(DV, VariableDie, Location);
1596 DV->setDIE(VariableDie);
1600 /// createMemberDIE - Create new member DIE.
1601 DIE *CompileUnit::createMemberDIE(DIDerivedType DT) {
1602 DIE *MemberDie = new DIE(DT.getTag());
1603 StringRef Name = DT.getName();
1605 addString(MemberDie, dwarf::DW_AT_name, Name);
1607 addType(MemberDie, DT.getTypeDerivedFrom());
1609 addSourceLine(MemberDie, DT);
1611 DIEBlock *MemLocationDie = new (DIEValueAllocator) DIEBlock();
1612 addUInt(MemLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
1614 uint64_t Size = DT.getSizeInBits();
1615 uint64_t FieldSize = DT.getOriginalTypeSize();
1617 if (Size != FieldSize) {
1619 addUInt(MemberDie, dwarf::DW_AT_byte_size, 0, DT.getOriginalTypeSize()>>3);
1620 addUInt(MemberDie, dwarf::DW_AT_bit_size, 0, DT.getSizeInBits());
1622 uint64_t Offset = DT.getOffsetInBits();
1623 uint64_t AlignMask = ~(DT.getAlignInBits() - 1);
1624 uint64_t HiMark = (Offset + FieldSize) & AlignMask;
1625 uint64_t FieldOffset = (HiMark - FieldSize);
1626 Offset -= FieldOffset;
1628 // Maybe we need to work from the other end.
1629 if (Asm->getDataLayout().isLittleEndian())
1630 Offset = FieldSize - (Offset + Size);
1631 addUInt(MemberDie, dwarf::DW_AT_bit_offset, 0, Offset);
1633 // Here WD_AT_data_member_location points to the anonymous
1634 // field that includes this bit field.
1635 addUInt(MemLocationDie, 0, dwarf::DW_FORM_udata, FieldOffset >> 3);
1638 // This is not a bitfield.
1639 addUInt(MemLocationDie, 0, dwarf::DW_FORM_udata, DT.getOffsetInBits() >> 3);
1641 if (DT.getTag() == dwarf::DW_TAG_inheritance
1642 && DT.isVirtual()) {
1644 // For C++, virtual base classes are not at fixed offset. Use following
1645 // expression to extract appropriate offset from vtable.
1646 // BaseAddr = ObAddr + *((*ObAddr) - Offset)
1648 DIEBlock *VBaseLocationDie = new (DIEValueAllocator) DIEBlock();
1649 addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_dup);
1650 addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1651 addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1652 addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_udata, DT.getOffsetInBits());
1653 addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_minus);
1654 addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1655 addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1657 addBlock(MemberDie, dwarf::DW_AT_data_member_location, 0,
1660 addBlock(MemberDie, dwarf::DW_AT_data_member_location, 0, MemLocationDie);
1662 if (DT.isProtected())
1663 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1664 dwarf::DW_ACCESS_protected);
1665 else if (DT.isPrivate())
1666 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1667 dwarf::DW_ACCESS_private);
1668 // Otherwise C++ member and base classes are considered public.
1670 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1671 dwarf::DW_ACCESS_public);
1673 addUInt(MemberDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1,
1674 dwarf::DW_VIRTUALITY_virtual);
1676 // Objective-C properties.
1677 if (MDNode *PNode = DT.getObjCProperty())
1678 if (DIEEntry *PropertyDie = getDIEEntry(PNode))
1679 MemberDie->addValue(dwarf::DW_AT_APPLE_property, dwarf::DW_FORM_ref4,
1682 if (DT.isArtificial())
1683 addFlag(MemberDie, dwarf::DW_AT_artificial);
1688 /// createStaticMemberDIE - Create new DIE for C++ static member.
1689 DIE *CompileUnit::createStaticMemberDIE(const DIDerivedType DT) {
1693 DIE *StaticMemberDIE = new DIE(DT.getTag());
1694 DIType Ty = DT.getTypeDerivedFrom();
1696 addString(StaticMemberDIE, dwarf::DW_AT_name, DT.getName());
1697 addType(StaticMemberDIE, Ty);
1698 addSourceLine(StaticMemberDIE, DT);
1699 addFlag(StaticMemberDIE, dwarf::DW_AT_external);
1700 addFlag(StaticMemberDIE, dwarf::DW_AT_declaration);
1702 // FIXME: We could omit private if the parent is a class_type, and
1703 // public if the parent is something else.
1704 if (DT.isProtected())
1705 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1706 dwarf::DW_ACCESS_protected);
1707 else if (DT.isPrivate())
1708 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1709 dwarf::DW_ACCESS_private);
1711 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1712 dwarf::DW_ACCESS_public);
1714 if (const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(DT.getConstant()))
1715 addConstantValue(StaticMemberDIE, CI, Ty.isUnsignedDIType());
1716 if (const ConstantFP *CFP = dyn_cast_or_null<ConstantFP>(DT.getConstant()))
1717 addConstantFPValue(StaticMemberDIE, CFP);
1719 insertDIE(DT, StaticMemberDIE);
1720 return StaticMemberDIE;