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, Asm->OutContext);
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, Asm->OutContext);
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 MCSymbolRefExpr *Label) {
170 DIEValue *Value = new (DIEValueAllocator) DIELabel(Label);
171 Die->addValue(Attribute, Form, Value);
174 void CompileUnit::addLabel(DIE *Die, unsigned Attribute, unsigned Form,
175 const MCSymbol *Label) {
176 addLabel(Die, Attribute, Form, MCSymbolRefExpr::Create(Label, Asm->OutContext));
179 /// addLabelAddress - Add a dwarf label attribute data and value using
180 /// DW_FORM_addr or DW_FORM_GNU_addr_index.
182 void CompileUnit::addLabelAddress(DIE *Die, unsigned Attribute,
184 if (!DD->useSplitDwarf()) {
186 DIEValue *Value = new (DIEValueAllocator) DIELabel(Label, Asm->OutContext);
187 Die->addValue(Attribute, dwarf::DW_FORM_addr, Value);
189 DIEValue *Value = new (DIEValueAllocator) DIEInteger(0);
190 Die->addValue(Attribute, dwarf::DW_FORM_addr, Value);
193 unsigned idx = DU->getAddrPoolIndex(Label);
194 DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
195 Die->addValue(Attribute, dwarf::DW_FORM_GNU_addr_index, Value);
199 /// addOpAddress - Add a dwarf op address data and value using the
200 /// form given and an op of either DW_FORM_addr or DW_FORM_GNU_addr_index.
202 void CompileUnit::addOpAddress(DIE *Die, const MCSymbol *Sym) {
204 if (!DD->useSplitDwarf()) {
205 addUInt(Die, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_addr);
206 addLabel(Die, 0, dwarf::DW_FORM_udata, Sym);
208 unsigned idx = DU->getAddrPoolIndex(Sym);
209 DIEValue *Value = new (DIEValueAllocator) DIEInteger(idx);
210 addUInt(Die, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_GNU_addr_index);
211 Die->addValue(0, dwarf::DW_FORM_GNU_addr_index, Value);
215 /// addDelta - Add a label delta attribute data and value.
217 void CompileUnit::addDelta(DIE *Die, unsigned Attribute, unsigned Form,
218 const MCSymbol *Hi, const MCSymbol *Lo) {
219 DIEValue *Value = new (DIEValueAllocator) DIEDelta(Hi, Lo);
220 Die->addValue(Attribute, Form, Value);
223 /// addDIEEntry - Add a DIE attribute data and value.
225 void CompileUnit::addDIEEntry(DIE *Die, unsigned Attribute, unsigned Form,
227 Die->addValue(Attribute, Form, createDIEEntry(Entry));
230 /// addBlock - Add block data.
232 void CompileUnit::addBlock(DIE *Die, unsigned Attribute, unsigned Form,
234 Block->ComputeSize(Asm);
235 DIEBlocks.push_back(Block); // Memoize so we can call the destructor later on.
236 Die->addValue(Attribute, Block->BestForm(), Block);
239 /// addSourceLine - Add location information to specified debug information
241 void CompileUnit::addSourceLine(DIE *Die, DIVariable V) {
246 unsigned Line = V.getLineNumber();
249 unsigned FileID = DD->getOrCreateSourceID(V.getContext().getFilename(),
250 V.getContext().getDirectory(),
252 assert(FileID && "Invalid file id");
253 addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
254 addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
257 /// addSourceLine - Add location information to specified debug information
259 void CompileUnit::addSourceLine(DIE *Die, DIGlobalVariable G) {
260 // Verify global variable.
264 unsigned Line = G.getLineNumber();
267 unsigned FileID = DD->getOrCreateSourceID(G.getFilename(), G.getDirectory(),
269 assert(FileID && "Invalid file id");
270 addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
271 addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
274 /// addSourceLine - Add location information to specified debug information
276 void CompileUnit::addSourceLine(DIE *Die, DISubprogram SP) {
277 // Verify subprogram.
281 // If the line number is 0, don't add it.
282 unsigned Line = SP.getLineNumber();
286 unsigned FileID = DD->getOrCreateSourceID(SP.getFilename(),
287 SP.getDirectory(), getUniqueID());
288 assert(FileID && "Invalid file id");
289 addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
290 addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
293 /// addSourceLine - Add location information to specified debug information
295 void CompileUnit::addSourceLine(DIE *Die, DIType Ty) {
300 unsigned Line = Ty.getLineNumber();
303 unsigned FileID = DD->getOrCreateSourceID(Ty.getFilename(),
304 Ty.getDirectory(), getUniqueID());
305 assert(FileID && "Invalid file id");
306 addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
307 addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
310 /// addSourceLine - Add location information to specified debug information
312 void CompileUnit::addSourceLine(DIE *Die, DIObjCProperty Ty) {
317 unsigned Line = Ty.getLineNumber();
320 DIFile File = Ty.getFile();
321 unsigned FileID = DD->getOrCreateSourceID(File.getFilename(),
322 File.getDirectory(), getUniqueID());
323 assert(FileID && "Invalid file id");
324 addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
325 addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
328 /// addSourceLine - Add location information to specified debug information
330 void CompileUnit::addSourceLine(DIE *Die, DINameSpace NS) {
335 unsigned Line = NS.getLineNumber();
338 StringRef FN = NS.getFilename();
340 unsigned FileID = DD->getOrCreateSourceID(FN, NS.getDirectory(),
342 assert(FileID && "Invalid file id");
343 addUInt(Die, dwarf::DW_AT_decl_file, 0, FileID);
344 addUInt(Die, dwarf::DW_AT_decl_line, 0, Line);
347 /// addVariableAddress - Add DW_AT_location attribute for a
348 /// DbgVariable based on provided MachineLocation.
349 void CompileUnit::addVariableAddress(const DbgVariable &DV, DIE *Die,
350 MachineLocation Location) {
351 if (DV.variableHasComplexAddress())
352 addComplexAddress(DV, Die, dwarf::DW_AT_location, Location);
353 else if (DV.isBlockByrefVariable())
354 addBlockByrefAddress(DV, Die, dwarf::DW_AT_location, Location);
356 addAddress(Die, dwarf::DW_AT_location, Location,
357 DV.getVariable().isIndirect());
360 /// addRegisterOp - Add register operand.
361 void CompileUnit::addRegisterOp(DIE *TheDie, unsigned Reg) {
362 const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
363 unsigned DWReg = RI->getDwarfRegNum(Reg, false);
365 addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_reg0 + DWReg);
367 addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_regx);
368 addUInt(TheDie, 0, dwarf::DW_FORM_udata, DWReg);
372 /// addRegisterOffset - Add register offset.
373 void CompileUnit::addRegisterOffset(DIE *TheDie, unsigned Reg,
375 const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
376 unsigned DWReg = RI->getDwarfRegNum(Reg, false);
377 const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
378 if (Reg == TRI->getFrameRegister(*Asm->MF))
379 // If variable offset is based in frame register then use fbreg.
380 addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_fbreg);
382 addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_breg0 + DWReg);
384 addUInt(TheDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_bregx);
385 addUInt(TheDie, 0, dwarf::DW_FORM_udata, DWReg);
387 addSInt(TheDie, 0, dwarf::DW_FORM_sdata, Offset);
390 /// addAddress - Add an address attribute to a die based on the location
392 void CompileUnit::addAddress(DIE *Die, unsigned Attribute,
393 const MachineLocation &Location, bool Indirect) {
394 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
396 if (Location.isReg() && !Indirect)
397 addRegisterOp(Block, Location.getReg());
399 addRegisterOffset(Block, Location.getReg(), Location.getOffset());
400 if (Indirect && !Location.isReg()) {
401 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
405 // Now attach the location information to the DIE.
406 addBlock(Die, Attribute, 0, Block);
409 /// addComplexAddress - Start with the address based on the location provided,
410 /// and generate the DWARF information necessary to find the actual variable
411 /// given the extra address information encoded in the DIVariable, starting from
412 /// the starting location. Add the DWARF information to the die.
414 void CompileUnit::addComplexAddress(const DbgVariable &DV, DIE *Die,
416 const MachineLocation &Location) {
417 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
418 unsigned N = DV.getNumAddrElements();
420 if (Location.isReg()) {
421 if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
422 // If first address element is OpPlus then emit
423 // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
424 addRegisterOffset(Block, Location.getReg(), DV.getAddrElement(1));
427 addRegisterOp(Block, Location.getReg());
430 addRegisterOffset(Block, Location.getReg(), Location.getOffset());
433 uint64_t Element = DV.getAddrElement(i);
434 if (Element == DIBuilder::OpPlus) {
435 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
436 addUInt(Block, 0, dwarf::DW_FORM_udata, DV.getAddrElement(++i));
437 } else if (Element == DIBuilder::OpDeref) {
438 if (!Location.isReg())
439 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
440 } else llvm_unreachable("unknown DIBuilder Opcode");
443 // Now attach the location information to the DIE.
444 addBlock(Die, Attribute, 0, Block);
447 /* Byref variables, in Blocks, are declared by the programmer as "SomeType
448 VarName;", but the compiler creates a __Block_byref_x_VarName struct, and
449 gives the variable VarName either the struct, or a pointer to the struct, as
450 its type. This is necessary for various behind-the-scenes things the
451 compiler needs to do with by-reference variables in Blocks.
453 However, as far as the original *programmer* is concerned, the variable
454 should still have type 'SomeType', as originally declared.
456 The function getBlockByrefType dives into the __Block_byref_x_VarName
457 struct to find the original type of the variable, which is then assigned to
458 the variable's Debug Information Entry as its real type. So far, so good.
459 However now the debugger will expect the variable VarName to have the type
460 SomeType. So we need the location attribute for the variable to be an
461 expression that explains to the debugger how to navigate through the
462 pointers and struct to find the actual variable of type SomeType.
464 The following function does just that. We start by getting
465 the "normal" location for the variable. This will be the location
466 of either the struct __Block_byref_x_VarName or the pointer to the
467 struct __Block_byref_x_VarName.
469 The struct will look something like:
471 struct __Block_byref_x_VarName {
473 struct __Block_byref_x_VarName *forwarding;
474 ... <various other fields>
476 ... <maybe more fields>
479 If we are given the struct directly (as our starting point) we
480 need to tell the debugger to:
482 1). Add the offset of the forwarding field.
484 2). Follow that pointer to get the real __Block_byref_x_VarName
485 struct to use (the real one may have been copied onto the heap).
487 3). Add the offset for the field VarName, to find the actual variable.
489 If we started with a pointer to the struct, then we need to
490 dereference that pointer first, before the other steps.
491 Translating this into DWARF ops, we will need to append the following
492 to the current location description for the variable:
494 DW_OP_deref -- optional, if we start with a pointer
495 DW_OP_plus_uconst <forward_fld_offset>
497 DW_OP_plus_uconst <varName_fld_offset>
499 That is what this function does. */
501 /// addBlockByrefAddress - Start with the address based on the location
502 /// provided, and generate the DWARF information necessary to find the
503 /// actual Block variable (navigating the Block struct) based on the
504 /// starting location. Add the DWARF information to the die. For
505 /// more information, read large comment just above here.
507 void CompileUnit::addBlockByrefAddress(const DbgVariable &DV, DIE *Die,
509 const MachineLocation &Location) {
510 DIType Ty = DV.getType();
512 unsigned Tag = Ty.getTag();
513 bool isPointer = false;
515 StringRef varName = DV.getName();
517 if (Tag == dwarf::DW_TAG_pointer_type) {
518 DIDerivedType DTy = DIDerivedType(Ty);
519 TmpTy = DTy.getTypeDerivedFrom();
523 DICompositeType blockStruct = DICompositeType(TmpTy);
525 // Find the __forwarding field and the variable field in the __Block_byref
527 DIArray Fields = blockStruct.getTypeArray();
528 DIDescriptor varField = DIDescriptor();
529 DIDescriptor forwardingField = DIDescriptor();
531 for (unsigned i = 0, N = Fields.getNumElements(); i < N; ++i) {
532 DIDescriptor Element = Fields.getElement(i);
533 DIDerivedType DT = DIDerivedType(Element);
534 StringRef fieldName = DT.getName();
535 if (fieldName == "__forwarding")
536 forwardingField = Element;
537 else if (fieldName == varName)
541 // Get the offsets for the forwarding field and the variable field.
542 unsigned forwardingFieldOffset =
543 DIDerivedType(forwardingField).getOffsetInBits() >> 3;
544 unsigned varFieldOffset =
545 DIDerivedType(varField).getOffsetInBits() >> 3;
547 // Decode the original location, and use that as the start of the byref
548 // variable's location.
549 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
551 if (Location.isReg())
552 addRegisterOp(Block, Location.getReg());
554 addRegisterOffset(Block, Location.getReg(), Location.getOffset());
556 // If we started with a pointer to the __Block_byref... struct, then
557 // the first thing we need to do is dereference the pointer (DW_OP_deref).
559 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
561 // Next add the offset for the '__forwarding' field:
562 // DW_OP_plus_uconst ForwardingFieldOffset. Note there's no point in
563 // adding the offset if it's 0.
564 if (forwardingFieldOffset > 0) {
565 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
566 addUInt(Block, 0, dwarf::DW_FORM_udata, forwardingFieldOffset);
569 // Now dereference the __forwarding field to get to the real __Block_byref
570 // struct: DW_OP_deref.
571 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
573 // Now that we've got the real __Block_byref... struct, add the offset
574 // for the variable's field to get to the location of the actual variable:
575 // DW_OP_plus_uconst varFieldOffset. Again, don't add if it's 0.
576 if (varFieldOffset > 0) {
577 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
578 addUInt(Block, 0, dwarf::DW_FORM_udata, varFieldOffset);
581 // Now attach the location information to the DIE.
582 addBlock(Die, Attribute, 0, Block);
585 /// isTypeSigned - Return true if the type is signed.
586 static bool isTypeSigned(DIType Ty, int *SizeInBits) {
587 if (Ty.isDerivedType())
588 return isTypeSigned(DIDerivedType(Ty).getTypeDerivedFrom(), SizeInBits);
589 if (Ty.isBasicType())
590 if (DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed
591 || DIBasicType(Ty).getEncoding() == dwarf::DW_ATE_signed_char) {
592 *SizeInBits = Ty.getSizeInBits();
598 /// addConstantValue - Add constant value entry in variable DIE.
599 bool CompileUnit::addConstantValue(DIE *Die, const MachineOperand &MO,
601 // FIXME: This is a bit conservative/simple - it emits negative values at
602 // their maximum bit width which is a bit unfortunate (& doesn't prefer
603 // udata/sdata over dataN as suggested by the DWARF spec)
604 assert(MO.isImm() && "Invalid machine operand!");
605 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
607 bool SignedConstant = isTypeSigned(Ty, &SizeInBits);
608 unsigned Form = SignedConstant ? dwarf::DW_FORM_sdata : dwarf::DW_FORM_udata;
609 switch (SizeInBits) {
610 case 8: Form = dwarf::DW_FORM_data1; break;
611 case 16: Form = dwarf::DW_FORM_data2; break;
612 case 32: Form = dwarf::DW_FORM_data4; break;
613 case 64: Form = dwarf::DW_FORM_data8; break;
616 SignedConstant ? addSInt(Block, 0, Form, MO.getImm())
617 : addUInt(Block, 0, Form, MO.getImm());
619 addBlock(Die, dwarf::DW_AT_const_value, 0, Block);
623 /// addConstantFPValue - Add constant value entry in variable DIE.
624 bool CompileUnit::addConstantFPValue(DIE *Die, const MachineOperand &MO) {
625 assert (MO.isFPImm() && "Invalid machine operand!");
626 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
627 APFloat FPImm = MO.getFPImm()->getValueAPF();
629 // Get the raw data form of the floating point.
630 const APInt FltVal = FPImm.bitcastToAPInt();
631 const char *FltPtr = (const char*)FltVal.getRawData();
633 int NumBytes = FltVal.getBitWidth() / 8; // 8 bits per byte.
634 bool LittleEndian = Asm->getDataLayout().isLittleEndian();
635 int Incr = (LittleEndian ? 1 : -1);
636 int Start = (LittleEndian ? 0 : NumBytes - 1);
637 int Stop = (LittleEndian ? NumBytes : -1);
639 // Output the constant to DWARF one byte at a time.
640 for (; Start != Stop; Start += Incr)
641 addUInt(Block, 0, dwarf::DW_FORM_data1,
642 (unsigned char)0xFF & FltPtr[Start]);
644 addBlock(Die, dwarf::DW_AT_const_value, 0, Block);
648 /// addConstantFPValue - Add constant value entry in variable DIE.
649 bool CompileUnit::addConstantFPValue(DIE *Die, const ConstantFP *CFP) {
650 return addConstantValue(Die, CFP->getValueAPF().bitcastToAPInt(), false);
653 /// addConstantValue - Add constant value entry in variable DIE.
654 bool CompileUnit::addConstantValue(DIE *Die, const ConstantInt *CI,
656 return addConstantValue(Die, CI->getValue(), Unsigned);
659 // addConstantValue - Add constant value entry in variable DIE.
660 bool CompileUnit::addConstantValue(DIE *Die, const APInt &Val,
662 unsigned CIBitWidth = Val.getBitWidth();
663 if (CIBitWidth <= 64) {
665 switch (CIBitWidth) {
666 case 8: form = dwarf::DW_FORM_data1; break;
667 case 16: form = dwarf::DW_FORM_data2; break;
668 case 32: form = dwarf::DW_FORM_data4; break;
669 case 64: form = dwarf::DW_FORM_data8; break;
671 form = Unsigned ? dwarf::DW_FORM_udata : dwarf::DW_FORM_sdata;
674 addUInt(Die, dwarf::DW_AT_const_value, form, Val.getZExtValue());
676 addSInt(Die, dwarf::DW_AT_const_value, form, Val.getSExtValue());
680 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
682 // Get the raw data form of the large APInt.
683 const uint64_t *Ptr64 = Val.getRawData();
685 int NumBytes = Val.getBitWidth() / 8; // 8 bits per byte.
686 bool LittleEndian = Asm->getDataLayout().isLittleEndian();
688 // Output the constant to DWARF one byte at a time.
689 for (int i = 0; i < NumBytes; i++) {
692 c = Ptr64[i / 8] >> (8 * (i & 7));
694 c = Ptr64[(NumBytes - 1 - i) / 8] >> (8 * ((NumBytes - 1 - i) & 7));
695 addUInt(Block, 0, dwarf::DW_FORM_data1, c);
698 addBlock(Die, dwarf::DW_AT_const_value, 0, Block);
702 /// addTemplateParams - Add template parameters into buffer.
703 void CompileUnit::addTemplateParams(DIE &Buffer, DIArray TParams) {
704 // Add template parameters.
705 for (unsigned i = 0, e = TParams.getNumElements(); i != e; ++i) {
706 DIDescriptor Element = TParams.getElement(i);
707 if (Element.isTemplateTypeParameter())
708 Buffer.addChild(getOrCreateTemplateTypeParameterDIE(
709 DITemplateTypeParameter(Element)));
710 else if (Element.isTemplateValueParameter())
711 Buffer.addChild(getOrCreateTemplateValueParameterDIE(
712 DITemplateValueParameter(Element)));
716 /// getOrCreateContextDIE - Get context owner's DIE.
717 DIE *CompileUnit::getOrCreateContextDIE(DIDescriptor Context) {
718 if (Context.isType())
719 return getOrCreateTypeDIE(DIType(Context));
720 else if (Context.isNameSpace())
721 return getOrCreateNameSpace(DINameSpace(Context));
722 else if (Context.isSubprogram())
723 return getOrCreateSubprogramDIE(DISubprogram(Context));
725 return getDIE(Context);
728 /// addToContextOwner - Add Die into the list of its context owner's children.
729 void CompileUnit::addToContextOwner(DIE *Die, DIDescriptor Context) {
730 if (DIE *ContextDIE = getOrCreateContextDIE(Context))
731 ContextDIE->addChild(Die);
736 /// getOrCreateTypeDIE - Find existing DIE or create new DIE for the
738 DIE *CompileUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
742 DIE *TyDIE = getDIE(Ty);
747 TyDIE = new DIE(dwarf::DW_TAG_base_type);
748 insertDIE(Ty, TyDIE);
749 if (Ty.isBasicType())
750 constructTypeDIE(*TyDIE, DIBasicType(Ty));
751 else if (Ty.isCompositeType())
752 constructTypeDIE(*TyDIE, DICompositeType(Ty));
754 assert(Ty.isDerivedType() && "Unknown kind of DIType");
755 constructTypeDIE(*TyDIE, DIDerivedType(Ty));
757 // If this is a named finished type then include it in the list of types
758 // for the accelerator tables.
759 if (!Ty.getName().empty() && !Ty.isForwardDecl()) {
760 bool IsImplementation = 0;
761 if (Ty.isCompositeType()) {
762 DICompositeType CT(Ty);
763 // A runtime language of 0 actually means C/C++ and that any
764 // non-negative value is some version of Objective-C/C++.
765 IsImplementation = (CT.getRunTimeLang() == 0) ||
766 CT.isObjcClassComplete();
768 unsigned Flags = IsImplementation ?
769 DwarfAccelTable::eTypeFlagClassIsImplementation : 0;
770 addAccelType(Ty.getName(), std::make_pair(TyDIE, Flags));
773 addToContextOwner(TyDIE, Ty.getContext());
777 /// addType - Add a new type attribute to the specified entity.
778 void CompileUnit::addType(DIE *Entity, DIType Ty, unsigned Attribute) {
782 // Check for pre-existence.
783 DIEEntry *Entry = getDIEEntry(Ty);
784 // If it exists then use the existing value.
786 Entity->addValue(Attribute, dwarf::DW_FORM_ref4, Entry);
791 DIE *Buffer = getOrCreateTypeDIE(Ty);
794 Entry = createDIEEntry(Buffer);
795 insertDIEEntry(Ty, Entry);
796 Entity->addValue(Attribute, dwarf::DW_FORM_ref4, Entry);
798 // If this is a complete composite type then include it in the
799 // list of global types.
803 /// addGlobalType - Add a new global type to the compile unit.
805 void CompileUnit::addGlobalType(DIType Ty) {
806 DIDescriptor Context = Ty.getContext();
807 if (Ty.isCompositeType() && !Ty.getName().empty() && !Ty.isForwardDecl()
808 && (!Context || Context.isCompileUnit() || Context.isFile()
809 || Context.isNameSpace()))
810 if (DIEEntry *Entry = getDIEEntry(Ty))
811 GlobalTypes[Ty.getName()] = Entry->getEntry();
814 /// addPubTypes - Add type for pubtypes section.
815 void CompileUnit::addPubTypes(DISubprogram SP) {
816 DICompositeType SPTy = SP.getType();
817 unsigned SPTag = SPTy.getTag();
818 if (SPTag != dwarf::DW_TAG_subroutine_type)
821 DIArray Args = SPTy.getTypeArray();
822 for (unsigned i = 0, e = Args.getNumElements(); i != e; ++i) {
823 DIType ATy(Args.getElement(i));
830 /// constructTypeDIE - Construct basic type die from DIBasicType.
831 void CompileUnit::constructTypeDIE(DIE &Buffer, DIBasicType BTy) {
832 // Get core information.
833 StringRef Name = BTy.getName();
834 // Add name if not anonymous or intermediate type.
836 addString(&Buffer, dwarf::DW_AT_name, Name);
838 if (BTy.getTag() == dwarf::DW_TAG_unspecified_type) {
839 Buffer.setTag(dwarf::DW_TAG_unspecified_type);
840 // Unspecified types has only name, nothing else.
844 Buffer.setTag(dwarf::DW_TAG_base_type);
845 addUInt(&Buffer, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
848 uint64_t Size = BTy.getSizeInBits() >> 3;
849 addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
852 /// constructTypeDIE - Construct derived type die from DIDerivedType.
853 void CompileUnit::constructTypeDIE(DIE &Buffer, DIDerivedType DTy) {
854 // Get core information.
855 StringRef Name = DTy.getName();
856 uint64_t Size = DTy.getSizeInBits() >> 3;
857 unsigned Tag = DTy.getTag();
859 // FIXME - Workaround for templates.
860 if (Tag == dwarf::DW_TAG_inheritance) Tag = dwarf::DW_TAG_reference_type;
864 // Map to main type, void will not have a type.
865 DIType FromTy = DTy.getTypeDerivedFrom();
866 addType(&Buffer, FromTy);
868 // Add name if not anonymous or intermediate type.
870 addString(&Buffer, dwarf::DW_AT_name, Name);
872 // Add size if non-zero (derived types might be zero-sized.)
873 if (Size && Tag != dwarf::DW_TAG_pointer_type)
874 addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
876 if (Tag == dwarf::DW_TAG_ptr_to_member_type)
877 addDIEEntry(&Buffer, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4,
878 getOrCreateTypeDIE(DTy.getClassType()));
879 // Add source line info if available and TyDesc is not a forward declaration.
880 if (!DTy.isForwardDecl())
881 addSourceLine(&Buffer, DTy);
884 /// constructTypeDIE - Construct type DIE from DICompositeType.
885 void CompileUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
886 // Get core information.
887 StringRef Name = CTy.getName();
889 uint64_t Size = CTy.getSizeInBits() >> 3;
890 unsigned Tag = CTy.getTag();
894 case dwarf::DW_TAG_array_type:
895 constructArrayTypeDIE(Buffer, &CTy);
897 case dwarf::DW_TAG_enumeration_type: {
898 DIArray Elements = CTy.getTypeArray();
900 // Add enumerators to enumeration type.
901 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
903 DIDescriptor Enum(Elements.getElement(i));
904 if (Enum.isEnumerator()) {
905 ElemDie = constructEnumTypeDIE(DIEnumerator(Enum));
906 Buffer.addChild(ElemDie);
909 DIType DTy = CTy.getTypeDerivedFrom();
911 addType(&Buffer, DTy);
912 addUInt(&Buffer, dwarf::DW_AT_enum_class, dwarf::DW_FORM_flag, 1);
916 case dwarf::DW_TAG_subroutine_type: {
918 DIArray Elements = CTy.getTypeArray();
919 DIDescriptor RTy = Elements.getElement(0);
920 addType(&Buffer, DIType(RTy));
922 bool isPrototyped = true;
924 for (unsigned i = 1, N = Elements.getNumElements(); i < N; ++i) {
925 DIDescriptor Ty = Elements.getElement(i);
926 if (Ty.isUnspecifiedParameter()) {
927 DIE *Arg = new DIE(dwarf::DW_TAG_unspecified_parameters);
928 Buffer.addChild(Arg);
929 isPrototyped = false;
931 DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
932 addType(Arg, DIType(Ty));
933 if (DIType(Ty).isArtificial())
934 addFlag(Arg, dwarf::DW_AT_artificial);
935 Buffer.addChild(Arg);
938 // Add prototype flag if we're dealing with a C language and the
939 // function has been prototyped.
941 (Language == dwarf::DW_LANG_C89 ||
942 Language == dwarf::DW_LANG_C99 ||
943 Language == dwarf::DW_LANG_ObjC))
944 addFlag(&Buffer, dwarf::DW_AT_prototyped);
947 case dwarf::DW_TAG_structure_type:
948 case dwarf::DW_TAG_union_type:
949 case dwarf::DW_TAG_class_type: {
950 // Add elements to structure type.
951 DIArray Elements = CTy.getTypeArray();
953 // A forward struct declared type may not have elements available.
954 unsigned N = Elements.getNumElements();
958 // Add elements to structure type.
959 for (unsigned i = 0; i < N; ++i) {
960 DIDescriptor Element = Elements.getElement(i);
962 if (Element.isSubprogram()) {
963 DISubprogram SP(Element);
964 ElemDie = getOrCreateSubprogramDIE(DISubprogram(Element));
965 if (SP.isProtected())
966 addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
967 dwarf::DW_ACCESS_protected);
968 else if (SP.isPrivate())
969 addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
970 dwarf::DW_ACCESS_private);
972 addUInt(ElemDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
973 dwarf::DW_ACCESS_public);
975 addFlag(ElemDie, dwarf::DW_AT_explicit);
976 } else if (Element.isDerivedType()) {
977 DIDerivedType DDTy(Element);
978 if (DDTy.getTag() == dwarf::DW_TAG_friend) {
979 ElemDie = new DIE(dwarf::DW_TAG_friend);
980 addType(ElemDie, DDTy.getTypeDerivedFrom(), dwarf::DW_AT_friend);
981 } else if (DDTy.isStaticMember())
982 ElemDie = createStaticMemberDIE(DDTy);
984 ElemDie = createMemberDIE(DDTy);
985 } else if (Element.isObjCProperty()) {
986 DIObjCProperty Property(Element);
987 ElemDie = new DIE(Property.getTag());
988 StringRef PropertyName = Property.getObjCPropertyName();
989 addString(ElemDie, dwarf::DW_AT_APPLE_property_name, PropertyName);
990 addType(ElemDie, Property.getType());
991 addSourceLine(ElemDie, Property);
992 StringRef GetterName = Property.getObjCPropertyGetterName();
993 if (!GetterName.empty())
994 addString(ElemDie, dwarf::DW_AT_APPLE_property_getter, GetterName);
995 StringRef SetterName = Property.getObjCPropertySetterName();
996 if (!SetterName.empty())
997 addString(ElemDie, dwarf::DW_AT_APPLE_property_setter, SetterName);
998 unsigned PropertyAttributes = 0;
999 if (Property.isReadOnlyObjCProperty())
1000 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readonly;
1001 if (Property.isReadWriteObjCProperty())
1002 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readwrite;
1003 if (Property.isAssignObjCProperty())
1004 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_assign;
1005 if (Property.isRetainObjCProperty())
1006 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_retain;
1007 if (Property.isCopyObjCProperty())
1008 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_copy;
1009 if (Property.isNonAtomicObjCProperty())
1010 PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_nonatomic;
1011 if (PropertyAttributes)
1012 addUInt(ElemDie, dwarf::DW_AT_APPLE_property_attribute, 0,
1013 PropertyAttributes);
1015 DIEEntry *Entry = getDIEEntry(Element);
1017 Entry = createDIEEntry(ElemDie);
1018 insertDIEEntry(Element, Entry);
1022 Buffer.addChild(ElemDie);
1025 if (CTy.isAppleBlockExtension())
1026 addFlag(&Buffer, dwarf::DW_AT_APPLE_block);
1028 DICompositeType ContainingType = CTy.getContainingType();
1029 if (DIDescriptor(ContainingType).isCompositeType())
1030 addDIEEntry(&Buffer, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4,
1031 getOrCreateTypeDIE(DIType(ContainingType)));
1033 DIDescriptor Context = CTy.getContext();
1034 addToContextOwner(&Buffer, Context);
1037 if (CTy.isObjcClassComplete())
1038 addFlag(&Buffer, dwarf::DW_AT_APPLE_objc_complete_type);
1040 // Add template parameters to a class, structure or union types.
1041 // FIXME: The support isn't in the metadata for this yet.
1042 if (Tag == dwarf::DW_TAG_class_type ||
1043 Tag == dwarf::DW_TAG_structure_type ||
1044 Tag == dwarf::DW_TAG_union_type)
1045 addTemplateParams(Buffer, CTy.getTemplateParams());
1053 // Add name if not anonymous or intermediate type.
1055 addString(&Buffer, dwarf::DW_AT_name, Name);
1057 if (Tag == dwarf::DW_TAG_enumeration_type ||
1058 Tag == dwarf::DW_TAG_class_type ||
1059 Tag == dwarf::DW_TAG_structure_type ||
1060 Tag == dwarf::DW_TAG_union_type) {
1061 // Add size if non-zero (derived types might be zero-sized.)
1062 // TODO: Do we care about size for enum forward declarations?
1064 addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, Size);
1065 else if (!CTy.isForwardDecl())
1066 // Add zero size if it is not a forward declaration.
1067 addUInt(&Buffer, dwarf::DW_AT_byte_size, 0, 0);
1069 // If we're a forward decl, say so.
1070 if (CTy.isForwardDecl())
1071 addFlag(&Buffer, dwarf::DW_AT_declaration);
1073 // Add source line info if available.
1074 if (!CTy.isForwardDecl())
1075 addSourceLine(&Buffer, CTy);
1077 // No harm in adding the runtime language to the declaration.
1078 unsigned RLang = CTy.getRunTimeLang();
1080 addUInt(&Buffer, dwarf::DW_AT_APPLE_runtime_class,
1081 dwarf::DW_FORM_data1, RLang);
1085 /// getOrCreateTemplateTypeParameterDIE - Find existing DIE or create new DIE
1086 /// for the given DITemplateTypeParameter.
1088 CompileUnit::getOrCreateTemplateTypeParameterDIE(DITemplateTypeParameter TP) {
1089 DIE *ParamDIE = getDIE(TP);
1093 ParamDIE = new DIE(dwarf::DW_TAG_template_type_parameter);
1094 addType(ParamDIE, TP.getType());
1095 if (!TP.getName().empty())
1096 addString(ParamDIE, dwarf::DW_AT_name, TP.getName());
1100 /// getOrCreateTemplateValueParameterDIE - Find existing DIE or create new DIE
1101 /// for the given DITemplateValueParameter.
1103 CompileUnit::getOrCreateTemplateValueParameterDIE(DITemplateValueParameter TPV){
1104 DIE *ParamDIE = getDIE(TPV);
1108 ParamDIE = new DIE(TPV.getTag());
1109 addType(ParamDIE, TPV.getType());
1110 if (!TPV.getName().empty())
1111 addString(ParamDIE, dwarf::DW_AT_name, TPV.getName());
1112 if (Value *Val = TPV.getValue()) {
1113 if (ConstantInt *CI = dyn_cast<ConstantInt>(Val))
1114 addConstantValue(ParamDIE, CI, TPV.getType().isUnsignedDIType());
1115 else if (GlobalValue *GV = dyn_cast<GlobalValue>(Val)) {
1116 // For declaration non-type template parameters (such as global values and
1118 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1119 addOpAddress(Block, Asm->Mang->getSymbol(GV));
1120 // Emit DW_OP_stack_value to use the address as the immediate value of the
1121 // parameter, rather than a pointer to it.
1122 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_stack_value);
1123 addBlock(ParamDIE, dwarf::DW_AT_location, 0, Block);
1124 } else if (TPV.getTag() == dwarf::DW_TAG_GNU_template_template_param) {
1125 assert(isa<MDString>(Val));
1126 addString(ParamDIE, dwarf::DW_AT_GNU_template_name,
1127 cast<MDString>(Val)->getString());
1128 } else if (TPV.getTag() == dwarf::DW_TAG_GNU_template_parameter_pack) {
1129 assert(isa<MDNode>(Val));
1130 DIArray A(cast<MDNode>(Val));
1131 addTemplateParams(*ParamDIE, A);
1138 /// getOrCreateNameSpace - Create a DIE for DINameSpace.
1139 DIE *CompileUnit::getOrCreateNameSpace(DINameSpace NS) {
1140 DIE *NDie = getDIE(NS);
1143 NDie = new DIE(dwarf::DW_TAG_namespace);
1144 insertDIE(NS, NDie);
1145 if (!NS.getName().empty()) {
1146 addString(NDie, dwarf::DW_AT_name, NS.getName());
1147 addAccelNamespace(NS.getName(), NDie);
1149 addAccelNamespace("(anonymous namespace)", NDie);
1150 addSourceLine(NDie, NS);
1151 addToContextOwner(NDie, NS.getContext());
1155 /// getOrCreateSubprogramDIE - Create new DIE using SP.
1156 DIE *CompileUnit::getOrCreateSubprogramDIE(DISubprogram SP) {
1157 DIE *SPDie = getDIE(SP);
1161 SPDie = new DIE(dwarf::DW_TAG_subprogram);
1163 // DW_TAG_inlined_subroutine may refer to this DIE.
1164 insertDIE(SP, SPDie);
1166 DISubprogram SPDecl = SP.getFunctionDeclaration();
1167 DIE *DeclDie = NULL;
1168 if (SPDecl.isSubprogram()) {
1169 DeclDie = getOrCreateSubprogramDIE(SPDecl);
1172 // Add to context owner.
1173 addToContextOwner(SPDie, SP.getContext());
1175 // Add function template parameters.
1176 addTemplateParams(*SPDie, SP.getTemplateParams());
1178 // Unfortunately this code needs to stay here instead of below the
1179 // AT_specification code in order to work around a bug in older
1180 // gdbs that requires the linkage name to resolve multiple template
1182 // TODO: Remove this set of code when we get rid of the old gdb
1184 StringRef LinkageName = SP.getLinkageName();
1185 if (!LinkageName.empty() && DD->useDarwinGDBCompat())
1186 addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
1187 GlobalValue::getRealLinkageName(LinkageName));
1189 // If this DIE is going to refer declaration info using AT_specification
1190 // then there is no need to add other attributes.
1192 // Refer function declaration directly.
1193 addDIEEntry(SPDie, dwarf::DW_AT_specification, dwarf::DW_FORM_ref4,
1199 // Add the linkage name if we have one.
1200 if (!LinkageName.empty() && !DD->useDarwinGDBCompat())
1201 addString(SPDie, dwarf::DW_AT_MIPS_linkage_name,
1202 GlobalValue::getRealLinkageName(LinkageName));
1204 // Constructors and operators for anonymous aggregates do not have names.
1205 if (!SP.getName().empty())
1206 addString(SPDie, dwarf::DW_AT_name, SP.getName());
1208 addSourceLine(SPDie, SP);
1210 // Add the prototype if we have a prototype and we have a C like
1212 if (SP.isPrototyped() &&
1213 (Language == dwarf::DW_LANG_C89 ||
1214 Language == dwarf::DW_LANG_C99 ||
1215 Language == dwarf::DW_LANG_ObjC))
1216 addFlag(SPDie, dwarf::DW_AT_prototyped);
1219 DICompositeType SPTy = SP.getType();
1220 assert(SPTy.getTag() == dwarf::DW_TAG_subroutine_type &&
1221 "the type of a subprogram should be a subroutine");
1223 DIArray Args = SPTy.getTypeArray();
1224 addType(SPDie, DIType(Args.getElement(0)));
1226 unsigned VK = SP.getVirtuality();
1228 addUInt(SPDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1, VK);
1229 DIEBlock *Block = getDIEBlock();
1230 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1231 addUInt(Block, 0, dwarf::DW_FORM_udata, SP.getVirtualIndex());
1232 addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, 0, Block);
1233 ContainingTypeMap.insert(std::make_pair(SPDie,
1234 SP.getContainingType()));
1237 if (!SP.isDefinition()) {
1238 addFlag(SPDie, dwarf::DW_AT_declaration);
1240 // Add arguments. Do not add arguments for subprogram definition. They will
1241 // be handled while processing variables.
1242 for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
1243 DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
1244 DIType ATy = DIType(Args.getElement(i));
1246 if (ATy.isArtificial())
1247 addFlag(Arg, dwarf::DW_AT_artificial);
1248 SPDie->addChild(Arg);
1252 if (SP.isArtificial())
1253 addFlag(SPDie, dwarf::DW_AT_artificial);
1255 if (!SP.isLocalToUnit())
1256 addFlag(SPDie, dwarf::DW_AT_external);
1258 if (SP.isOptimized())
1259 addFlag(SPDie, dwarf::DW_AT_APPLE_optimized);
1261 if (unsigned isa = Asm->getISAEncoding()) {
1262 addUInt(SPDie, dwarf::DW_AT_APPLE_isa, dwarf::DW_FORM_flag, isa);
1268 // Return const expression if value is a GEP to access merged global
1270 // i8* getelementptr ({ i8, i8, i8, i8 }* @_MergedGlobals, i32 0, i32 0)
1271 static const ConstantExpr *getMergedGlobalExpr(const Value *V) {
1272 const ConstantExpr *CE = dyn_cast_or_null<ConstantExpr>(V);
1273 if (!CE || CE->getNumOperands() != 3 ||
1274 CE->getOpcode() != Instruction::GetElementPtr)
1277 // First operand points to a global struct.
1278 Value *Ptr = CE->getOperand(0);
1279 if (!isa<GlobalValue>(Ptr) ||
1280 !isa<StructType>(cast<PointerType>(Ptr->getType())->getElementType()))
1283 // Second operand is zero.
1284 const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(CE->getOperand(1));
1285 if (!CI || !CI->isZero())
1288 // Third operand is offset.
1289 if (!isa<ConstantInt>(CE->getOperand(2)))
1295 /// createGlobalVariableDIE - create global variable DIE.
1296 void CompileUnit::createGlobalVariableDIE(const MDNode *N) {
1297 // Check for pre-existence.
1301 DIGlobalVariable GV(N);
1305 DIDescriptor GVContext = GV.getContext();
1306 DIType GTy = GV.getType();
1308 // If this is a static data member definition, some attributes belong
1309 // to the declaration DIE.
1310 DIE *VariableDIE = NULL;
1311 bool IsStaticMember = false;
1312 DIDerivedType SDMDecl = GV.getStaticDataMemberDeclaration();
1313 if (SDMDecl.Verify()) {
1314 assert(SDMDecl.isStaticMember() && "Expected static member decl");
1315 // We need the declaration DIE that is in the static member's class.
1316 // But that class might not exist in the DWARF yet.
1317 // Creating the class will create the static member decl DIE.
1318 getOrCreateContextDIE(SDMDecl.getContext());
1319 VariableDIE = getDIE(SDMDecl);
1320 assert(VariableDIE && "Static member decl has no context?");
1321 IsStaticMember = true;
1324 // If this is not a static data member definition, create the variable
1325 // DIE and add the initial set of attributes to it.
1327 VariableDIE = new DIE(GV.getTag());
1329 insertDIE(N, VariableDIE);
1331 // Add name and type.
1332 addString(VariableDIE, dwarf::DW_AT_name, GV.getDisplayName());
1333 addType(VariableDIE, GTy);
1335 // Add scoping info.
1336 if (!GV.isLocalToUnit()) {
1337 addFlag(VariableDIE, dwarf::DW_AT_external);
1338 addGlobalName(GV.getName(), VariableDIE);
1341 // Add line number info.
1342 addSourceLine(VariableDIE, GV);
1343 // Add to context owner.
1344 addToContextOwner(VariableDIE, GVContext);
1348 bool addToAccelTable = false;
1349 DIE *VariableSpecDIE = NULL;
1350 bool isGlobalVariable = GV.getGlobal() != NULL;
1351 if (isGlobalVariable) {
1352 addToAccelTable = true;
1353 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1354 addOpAddress(Block, Asm->Mang->getSymbol(GV.getGlobal()));
1355 // Do not create specification DIE if context is either compile unit
1357 if (GVContext && GV.isDefinition() && !GVContext.isCompileUnit() &&
1358 !GVContext.isFile() && !isSubprogramContext(GVContext)) {
1359 // Create specification DIE.
1360 VariableSpecDIE = new DIE(dwarf::DW_TAG_variable);
1361 addDIEEntry(VariableSpecDIE, dwarf::DW_AT_specification,
1362 dwarf::DW_FORM_ref4, VariableDIE);
1363 addBlock(VariableSpecDIE, dwarf::DW_AT_location, 0, Block);
1364 // A static member's declaration is already flagged as such.
1365 if (!SDMDecl.Verify())
1366 addFlag(VariableDIE, dwarf::DW_AT_declaration);
1367 addDie(VariableSpecDIE);
1369 addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
1371 // Add linkage name.
1372 StringRef LinkageName = GV.getLinkageName();
1373 if (!LinkageName.empty()) {
1374 // From DWARF4: DIEs to which DW_AT_linkage_name may apply include:
1375 // TAG_common_block, TAG_constant, TAG_entry_point, TAG_subprogram and
1377 addString(IsStaticMember && VariableSpecDIE ?
1378 VariableSpecDIE : VariableDIE, dwarf::DW_AT_MIPS_linkage_name,
1379 GlobalValue::getRealLinkageName(LinkageName));
1380 // In compatibility mode with older gdbs we put the linkage name on both
1381 // the TAG_variable DIE and on the TAG_member DIE.
1382 if (IsStaticMember && VariableSpecDIE && DD->useDarwinGDBCompat())
1383 addString(VariableDIE, dwarf::DW_AT_MIPS_linkage_name,
1384 GlobalValue::getRealLinkageName(LinkageName));
1386 } else if (const ConstantInt *CI =
1387 dyn_cast_or_null<ConstantInt>(GV.getConstant())) {
1388 // AT_const_value was added when the static member was created. To avoid
1389 // emitting AT_const_value multiple times, we only add AT_const_value when
1390 // it is not a static member.
1391 if (!IsStaticMember)
1392 addConstantValue(VariableDIE, CI, GTy.isUnsignedDIType());
1393 } else if (const ConstantExpr *CE = getMergedGlobalExpr(N->getOperand(11))) {
1394 addToAccelTable = true;
1395 // GV is a merged global.
1396 DIEBlock *Block = new (DIEValueAllocator) DIEBlock();
1397 Value *Ptr = CE->getOperand(0);
1398 addOpAddress(Block, Asm->Mang->getSymbol(cast<GlobalValue>(Ptr)));
1399 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1400 SmallVector<Value*, 3> Idx(CE->op_begin()+1, CE->op_end());
1401 addUInt(Block, 0, dwarf::DW_FORM_udata,
1402 Asm->getDataLayout().getIndexedOffset(Ptr->getType(), Idx));
1403 addUInt(Block, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1404 addBlock(VariableDIE, dwarf::DW_AT_location, 0, Block);
1407 if (addToAccelTable) {
1408 DIE *AddrDIE = VariableSpecDIE ? VariableSpecDIE : VariableDIE;
1409 addAccelName(GV.getName(), AddrDIE);
1411 // If the linkage name is different than the name, go ahead and output
1412 // that as well into the name table.
1413 if (GV.getLinkageName() != "" && GV.getName() != GV.getLinkageName())
1414 addAccelName(GV.getLinkageName(), AddrDIE);
1420 /// constructSubrangeDIE - Construct subrange DIE from DISubrange.
1421 void CompileUnit::constructSubrangeDIE(DIE &Buffer, DISubrange SR,
1423 DIE *DW_Subrange = new DIE(dwarf::DW_TAG_subrange_type);
1424 addDIEEntry(DW_Subrange, dwarf::DW_AT_type, dwarf::DW_FORM_ref4, IndexTy);
1426 // The LowerBound value defines the lower bounds which is typically zero for
1427 // C/C++. The Count value is the number of elements. Values are 64 bit. If
1428 // Count == -1 then the array is unbounded and we do not emit
1429 // DW_AT_lower_bound and DW_AT_upper_bound attributes. If LowerBound == 0 and
1430 // Count == 0, then the array has zero elements in which case we do not emit
1432 int64_t LowerBound = SR.getLo();
1433 int64_t DefaultLowerBound = getDefaultLowerBound();
1434 int64_t Count = SR.getCount();
1436 if (DefaultLowerBound == -1 || LowerBound != DefaultLowerBound)
1437 addUInt(DW_Subrange, dwarf::DW_AT_lower_bound, 0, LowerBound);
1439 if (Count != -1 && Count != 0)
1440 // FIXME: An unbounded array should reference the expression that defines
1442 addUInt(DW_Subrange, dwarf::DW_AT_upper_bound, 0, LowerBound + Count - 1);
1444 Buffer.addChild(DW_Subrange);
1447 /// constructArrayTypeDIE - Construct array type DIE from DICompositeType.
1448 void CompileUnit::constructArrayTypeDIE(DIE &Buffer,
1449 DICompositeType *CTy) {
1450 Buffer.setTag(dwarf::DW_TAG_array_type);
1451 if (CTy->isVector())
1452 addFlag(&Buffer, dwarf::DW_AT_GNU_vector);
1454 // Emit derived type.
1455 addType(&Buffer, CTy->getTypeDerivedFrom());
1456 DIArray Elements = CTy->getTypeArray();
1458 // Get an anonymous type for index type.
1459 // FIXME: This type should be passed down from the front end
1460 // as different languages may have different sizes for indexes.
1461 DIE *IdxTy = getIndexTyDie();
1463 // Construct an anonymous type for index type.
1464 IdxTy = new DIE(dwarf::DW_TAG_base_type);
1465 addString(IdxTy, dwarf::DW_AT_name, "int");
1466 addUInt(IdxTy, dwarf::DW_AT_byte_size, 0, sizeof(int32_t));
1467 addUInt(IdxTy, dwarf::DW_AT_encoding, dwarf::DW_FORM_data1,
1468 dwarf::DW_ATE_signed);
1470 setIndexTyDie(IdxTy);
1473 // Add subranges to array type.
1474 for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
1475 DIDescriptor Element = Elements.getElement(i);
1476 if (Element.getTag() == dwarf::DW_TAG_subrange_type)
1477 constructSubrangeDIE(Buffer, DISubrange(Element), IdxTy);
1481 /// constructEnumTypeDIE - Construct enum type DIE from DIEnumerator.
1482 DIE *CompileUnit::constructEnumTypeDIE(DIEnumerator ETy) {
1483 DIE *Enumerator = new DIE(dwarf::DW_TAG_enumerator);
1484 StringRef Name = ETy.getName();
1485 addString(Enumerator, dwarf::DW_AT_name, Name);
1486 int64_t Value = ETy.getEnumValue();
1487 addSInt(Enumerator, dwarf::DW_AT_const_value, dwarf::DW_FORM_sdata, Value);
1491 /// constructContainingTypeDIEs - Construct DIEs for types that contain
1493 void CompileUnit::constructContainingTypeDIEs() {
1494 for (DenseMap<DIE *, const MDNode *>::iterator CI = ContainingTypeMap.begin(),
1495 CE = ContainingTypeMap.end(); CI != CE; ++CI) {
1496 DIE *SPDie = CI->first;
1497 const MDNode *N = CI->second;
1499 DIE *NDie = getDIE(N);
1500 if (!NDie) continue;
1501 addDIEEntry(SPDie, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4, NDie);
1505 /// constructVariableDIE - Construct a DIE for the given DbgVariable.
1506 DIE *CompileUnit::constructVariableDIE(DbgVariable *DV,
1507 bool isScopeAbstract) {
1508 StringRef Name = DV->getName();
1510 // Translate tag to proper Dwarf tag.
1511 unsigned Tag = DV->getTag();
1513 // Define variable debug information entry.
1514 DIE *VariableDie = new DIE(Tag);
1515 DbgVariable *AbsVar = DV->getAbstractVariable();
1516 DIE *AbsDIE = AbsVar ? AbsVar->getDIE() : NULL;
1518 addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin,
1519 dwarf::DW_FORM_ref4, AbsDIE);
1521 addString(VariableDie, dwarf::DW_AT_name, Name);
1522 addSourceLine(VariableDie, DV->getVariable());
1523 addType(VariableDie, DV->getType());
1526 if (DV->isArtificial())
1527 addFlag(VariableDie, dwarf::DW_AT_artificial);
1529 if (isScopeAbstract) {
1530 DV->setDIE(VariableDie);
1534 // Add variable address.
1536 unsigned Offset = DV->getDotDebugLocOffset();
1537 if (Offset != ~0U) {
1538 addLabel(VariableDie, dwarf::DW_AT_location, dwarf::DW_FORM_data4,
1539 Asm->GetTempSymbol("debug_loc", Offset));
1540 DV->setDIE(VariableDie);
1544 // Check if variable is described by a DBG_VALUE instruction.
1545 if (const MachineInstr *DVInsn = DV->getMInsn()) {
1546 bool updated = false;
1547 assert(DVInsn->getNumOperands() == 3);
1548 if (DVInsn->getOperand(0).isReg()) {
1549 const MachineOperand RegOp = DVInsn->getOperand(0);
1550 if (int64_t Offset = DVInsn->getOperand(1).getImm()) {
1551 MachineLocation Location(RegOp.getReg(), Offset);
1552 addVariableAddress(*DV, VariableDie, Location);
1553 } else if (RegOp.getReg())
1554 addVariableAddress(*DV, VariableDie, MachineLocation(RegOp.getReg()));
1556 } else if (DVInsn->getOperand(0).isImm())
1558 addConstantValue(VariableDie, DVInsn->getOperand(0), DV->getType());
1559 else if (DVInsn->getOperand(0).isFPImm())
1560 updated = addConstantFPValue(VariableDie, DVInsn->getOperand(0));
1561 else if (DVInsn->getOperand(0).isCImm())
1562 updated = addConstantValue(VariableDie, DVInsn->getOperand(0).getCImm(),
1563 DV->getType().isUnsignedDIType());
1565 // If variableDie is not updated then DBG_VALUE instruction does not
1566 // have valid variable info.
1570 DV->setDIE(VariableDie);
1573 // .. else use frame index.
1574 int FI = DV->getFrameIndex();
1576 unsigned FrameReg = 0;
1577 const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
1579 TFI->getFrameIndexReference(*Asm->MF, FI, FrameReg);
1580 MachineLocation Location(FrameReg, Offset);
1581 addVariableAddress(*DV, VariableDie, Location);
1585 DV->setDIE(VariableDie);
1589 /// createMemberDIE - Create new member DIE.
1590 DIE *CompileUnit::createMemberDIE(DIDerivedType DT) {
1591 DIE *MemberDie = new DIE(DT.getTag());
1592 StringRef Name = DT.getName();
1594 addString(MemberDie, dwarf::DW_AT_name, Name);
1596 addType(MemberDie, DT.getTypeDerivedFrom());
1598 addSourceLine(MemberDie, DT);
1600 DIEBlock *MemLocationDie = new (DIEValueAllocator) DIEBlock();
1601 addUInt(MemLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus_uconst);
1603 uint64_t Size = DT.getSizeInBits();
1604 uint64_t FieldSize = DT.getOriginalTypeSize();
1606 if (Size != FieldSize) {
1608 addUInt(MemberDie, dwarf::DW_AT_byte_size, 0, DT.getOriginalTypeSize()>>3);
1609 addUInt(MemberDie, dwarf::DW_AT_bit_size, 0, DT.getSizeInBits());
1611 uint64_t Offset = DT.getOffsetInBits();
1612 uint64_t AlignMask = ~(DT.getAlignInBits() - 1);
1613 uint64_t HiMark = (Offset + FieldSize) & AlignMask;
1614 uint64_t FieldOffset = (HiMark - FieldSize);
1615 Offset -= FieldOffset;
1617 // Maybe we need to work from the other end.
1618 if (Asm->getDataLayout().isLittleEndian())
1619 Offset = FieldSize - (Offset + Size);
1620 addUInt(MemberDie, dwarf::DW_AT_bit_offset, 0, Offset);
1622 // Here WD_AT_data_member_location points to the anonymous
1623 // field that includes this bit field.
1624 addUInt(MemLocationDie, 0, dwarf::DW_FORM_udata, FieldOffset >> 3);
1627 // This is not a bitfield.
1628 addUInt(MemLocationDie, 0, dwarf::DW_FORM_udata, DT.getOffsetInBits() >> 3);
1630 if (DT.getTag() == dwarf::DW_TAG_inheritance
1631 && DT.isVirtual()) {
1633 // For C++, virtual base classes are not at fixed offset. Use following
1634 // expression to extract appropriate offset from vtable.
1635 // BaseAddr = ObAddr + *((*ObAddr) - Offset)
1637 DIEBlock *VBaseLocationDie = new (DIEValueAllocator) DIEBlock();
1638 addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_dup);
1639 addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1640 addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_constu);
1641 addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_udata, DT.getOffsetInBits());
1642 addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_minus);
1643 addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_deref);
1644 addUInt(VBaseLocationDie, 0, dwarf::DW_FORM_data1, dwarf::DW_OP_plus);
1646 addBlock(MemberDie, dwarf::DW_AT_data_member_location, 0,
1649 addBlock(MemberDie, dwarf::DW_AT_data_member_location, 0, MemLocationDie);
1651 if (DT.isProtected())
1652 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1653 dwarf::DW_ACCESS_protected);
1654 else if (DT.isPrivate())
1655 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1656 dwarf::DW_ACCESS_private);
1657 // Otherwise C++ member and base classes are considered public.
1659 addUInt(MemberDie, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1660 dwarf::DW_ACCESS_public);
1662 addUInt(MemberDie, dwarf::DW_AT_virtuality, dwarf::DW_FORM_data1,
1663 dwarf::DW_VIRTUALITY_virtual);
1665 // Objective-C properties.
1666 if (MDNode *PNode = DT.getObjCProperty())
1667 if (DIEEntry *PropertyDie = getDIEEntry(PNode))
1668 MemberDie->addValue(dwarf::DW_AT_APPLE_property, dwarf::DW_FORM_ref4,
1671 if (DT.isArtificial())
1672 addFlag(MemberDie, dwarf::DW_AT_artificial);
1677 /// createStaticMemberDIE - Create new DIE for C++ static member.
1678 DIE *CompileUnit::createStaticMemberDIE(const DIDerivedType DT) {
1682 DIE *StaticMemberDIE = new DIE(DT.getTag());
1683 DIType Ty = DT.getTypeDerivedFrom();
1685 addString(StaticMemberDIE, dwarf::DW_AT_name, DT.getName());
1686 addType(StaticMemberDIE, Ty);
1687 addSourceLine(StaticMemberDIE, DT);
1688 addFlag(StaticMemberDIE, dwarf::DW_AT_external);
1689 addFlag(StaticMemberDIE, dwarf::DW_AT_declaration);
1691 // FIXME: We could omit private if the parent is a class_type, and
1692 // public if the parent is something else.
1693 if (DT.isProtected())
1694 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1695 dwarf::DW_ACCESS_protected);
1696 else if (DT.isPrivate())
1697 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1698 dwarf::DW_ACCESS_private);
1700 addUInt(StaticMemberDIE, dwarf::DW_AT_accessibility, dwarf::DW_FORM_data1,
1701 dwarf::DW_ACCESS_public);
1703 if (const ConstantInt *CI = dyn_cast_or_null<ConstantInt>(DT.getConstant()))
1704 addConstantValue(StaticMemberDIE, CI, Ty.isUnsignedDIType());
1705 if (const ConstantFP *CFP = dyn_cast_or_null<ConstantFP>(DT.getConstant()))
1706 addConstantFPValue(StaticMemberDIE, CFP);
1708 insertDIE(DT, StaticMemberDIE);
1709 return StaticMemberDIE;