DwarfDebug.cpp revision a098c506a24a5f1a4e7c7344b53b2e586801a415
1//===-- llvm/CodeGen/DwarfDebug.cpp - Dwarf Debug Framework ---------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file contains support for writing dwarf debug info into asm files.
11//
12//===----------------------------------------------------------------------===//
13
14#define DEBUG_TYPE "dwarfdebug"
15#include "DwarfDebug.h"
16#include "DIE.h"
17#include "DwarfCompileUnit.h"
18#include "llvm/Constants.h"
19#include "llvm/Module.h"
20#include "llvm/Instructions.h"
21#include "llvm/CodeGen/MachineFunction.h"
22#include "llvm/CodeGen/MachineModuleInfo.h"
23#include "llvm/MC/MCAsmInfo.h"
24#include "llvm/MC/MCSection.h"
25#include "llvm/MC/MCStreamer.h"
26#include "llvm/MC/MCSymbol.h"
27#include "llvm/Target/TargetData.h"
28#include "llvm/Target/TargetFrameLowering.h"
29#include "llvm/Target/TargetLoweringObjectFile.h"
30#include "llvm/Target/TargetMachine.h"
31#include "llvm/Target/TargetRegisterInfo.h"
32#include "llvm/Target/TargetOptions.h"
33#include "llvm/Analysis/DebugInfo.h"
34#include "llvm/Analysis/DIBuilder.h"
35#include "llvm/ADT/Statistic.h"
36#include "llvm/ADT/STLExtras.h"
37#include "llvm/ADT/StringExtras.h"
38#include "llvm/Support/CommandLine.h"
39#include "llvm/Support/Debug.h"
40#include "llvm/Support/ErrorHandling.h"
41#include "llvm/Support/ValueHandle.h"
42#include "llvm/Support/FormattedStream.h"
43#include "llvm/Support/Timer.h"
44#include "llvm/Support/Path.h"
45using namespace llvm;
46
47static cl::opt<bool> DisableDebugInfoPrinting("disable-debug-info-print",
48                                              cl::Hidden,
49     cl::desc("Disable debug info printing"));
50
51static cl::opt<bool> UnknownLocations("use-unknown-locations", cl::Hidden,
52     cl::desc("Make an absence of debug location information explicit."),
53     cl::init(false));
54
55namespace {
56  const char *DWARFGroupName = "DWARF Emission";
57  const char *DbgTimerName = "DWARF Debug Writer";
58} // end anonymous namespace
59
60//===----------------------------------------------------------------------===//
61
62/// Configuration values for initial hash set sizes (log2).
63///
64static const unsigned InitAbbreviationsSetSize = 9; // log2(512)
65
66namespace llvm {
67
68DIType DbgVariable::getType() const {
69  DIType Ty = Var.getType();
70  // FIXME: isBlockByrefVariable should be reformulated in terms of complex
71  // addresses instead.
72  if (Var.isBlockByrefVariable()) {
73    /* Byref variables, in Blocks, are declared by the programmer as
74       "SomeType VarName;", but the compiler creates a
75       __Block_byref_x_VarName struct, and gives the variable VarName
76       either the struct, or a pointer to the struct, as its type.  This
77       is necessary for various behind-the-scenes things the compiler
78       needs to do with by-reference variables in blocks.
79
80       However, as far as the original *programmer* is concerned, the
81       variable should still have type 'SomeType', as originally declared.
82
83       The following function dives into the __Block_byref_x_VarName
84       struct to find the original type of the variable.  This will be
85       passed back to the code generating the type for the Debug
86       Information Entry for the variable 'VarName'.  'VarName' will then
87       have the original type 'SomeType' in its debug information.
88
89       The original type 'SomeType' will be the type of the field named
90       'VarName' inside the __Block_byref_x_VarName struct.
91
92       NOTE: In order for this to not completely fail on the debugger
93       side, the Debug Information Entry for the variable VarName needs to
94       have a DW_AT_location that tells the debugger how to unwind through
95       the pointers and __Block_byref_x_VarName struct to find the actual
96       value of the variable.  The function addBlockByrefType does this.  */
97    DIType subType = Ty;
98    unsigned tag = Ty.getTag();
99
100    if (tag == dwarf::DW_TAG_pointer_type) {
101      DIDerivedType DTy = DIDerivedType(Ty);
102      subType = DTy.getTypeDerivedFrom();
103    }
104
105    DICompositeType blockStruct = DICompositeType(subType);
106    DIArray Elements = blockStruct.getTypeArray();
107
108    for (unsigned i = 0, N = Elements.getNumElements(); i < N; ++i) {
109      DIDescriptor Element = Elements.getElement(i);
110      DIDerivedType DT = DIDerivedType(Element);
111      if (getName() == DT.getName())
112        return (DT.getTypeDerivedFrom());
113    }
114    return Ty;
115  }
116  return Ty;
117}
118
119} // end llvm namespace
120
121DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
122  : Asm(A), MMI(Asm->MMI), FirstCU(0),
123    AbbreviationsSet(InitAbbreviationsSetSize),
124    PrevLabel(NULL) {
125  NextStringPoolNumber = 0;
126
127  DwarfInfoSectionSym = DwarfAbbrevSectionSym = 0;
128  DwarfStrSectionSym = TextSectionSym = 0;
129  DwarfDebugRangeSectionSym = DwarfDebugLocSectionSym = 0;
130  FunctionBeginSym = FunctionEndSym = 0;
131  {
132    NamedRegionTimer T(DbgTimerName, DWARFGroupName, TimePassesIsEnabled);
133    beginModule(M);
134  }
135}
136DwarfDebug::~DwarfDebug() {
137}
138
139MCSymbol *DwarfDebug::getStringPoolEntry(StringRef Str) {
140  std::pair<MCSymbol*, unsigned> &Entry = StringPool[Str];
141  if (Entry.first) return Entry.first;
142
143  Entry.second = NextStringPoolNumber++;
144  return Entry.first = Asm->GetTempSymbol("string", Entry.second);
145}
146
147
148/// assignAbbrevNumber - Define a unique number for the abbreviation.
149///
150void DwarfDebug::assignAbbrevNumber(DIEAbbrev &Abbrev) {
151  // Profile the node so that we can make it unique.
152  FoldingSetNodeID ID;
153  Abbrev.Profile(ID);
154
155  // Check the set for priors.
156  DIEAbbrev *InSet = AbbreviationsSet.GetOrInsertNode(&Abbrev);
157
158  // If it's newly added.
159  if (InSet == &Abbrev) {
160    // Add to abbreviation list.
161    Abbreviations.push_back(&Abbrev);
162
163    // Assign the vector position + 1 as its number.
164    Abbrev.setNumber(Abbreviations.size());
165  } else {
166    // Assign existing abbreviation number.
167    Abbrev.setNumber(InSet->getNumber());
168  }
169}
170
171/// getRealLinkageName - If special LLVM prefix that is used to inform the asm
172/// printer to not emit usual symbol prefix before the symbol name is used then
173/// return linkage name after skipping this special LLVM prefix.
174static StringRef getRealLinkageName(StringRef LinkageName) {
175  char One = '\1';
176  if (LinkageName.startswith(StringRef(&One, 1)))
177    return LinkageName.substr(1);
178  return LinkageName;
179}
180
181/// updateSubprogramScopeDIE - Find DIE for the given subprogram and
182/// attach appropriate DW_AT_low_pc and DW_AT_high_pc attributes.
183/// If there are global variables in this scope then create and insert
184/// DIEs for these variables.
185DIE *DwarfDebug::updateSubprogramScopeDIE(const MDNode *SPNode) {
186  CompileUnit *SPCU = getCompileUnit(SPNode);
187  DIE *SPDie = SPCU->getDIE(SPNode);
188
189  assert(SPDie && "Unable to find subprogram DIE!");
190  DISubprogram SP(SPNode);
191
192  DISubprogram SPDecl = SP.getFunctionDeclaration();
193  if (SPDecl.isSubprogram())
194    // Refer function declaration directly.
195    SPCU->addDIEEntry(SPDie, dwarf::DW_AT_specification, dwarf::DW_FORM_ref4,
196                      SPCU->getOrCreateSubprogramDIE(SPDecl));
197  else {
198    // There is not any need to generate specification DIE for a function
199    // defined at compile unit level. If a function is defined inside another
200    // function then gdb prefers the definition at top level and but does not
201    // expect specification DIE in parent function. So avoid creating
202    // specification DIE for a function defined inside a function.
203    if (SP.isDefinition() && !SP.getContext().isCompileUnit() &&
204        !SP.getContext().isFile() &&
205        !isSubprogramContext(SP.getContext())) {
206      SPCU-> addUInt(SPDie, dwarf::DW_AT_declaration, dwarf::DW_FORM_flag, 1);
207
208      // Add arguments.
209      DICompositeType SPTy = SP.getType();
210      DIArray Args = SPTy.getTypeArray();
211      unsigned SPTag = SPTy.getTag();
212      if (SPTag == dwarf::DW_TAG_subroutine_type)
213        for (unsigned i = 1, N = Args.getNumElements(); i < N; ++i) {
214          DIE *Arg = new DIE(dwarf::DW_TAG_formal_parameter);
215          DIType ATy = DIType(DIType(Args.getElement(i)));
216          SPCU->addType(Arg, ATy);
217          if (ATy.isArtificial())
218            SPCU->addUInt(Arg, dwarf::DW_AT_artificial, dwarf::DW_FORM_flag, 1);
219          SPDie->addChild(Arg);
220        }
221      DIE *SPDeclDie = SPDie;
222      SPDie = new DIE(dwarf::DW_TAG_subprogram);
223      SPCU->addDIEEntry(SPDie, dwarf::DW_AT_specification, dwarf::DW_FORM_ref4,
224                        SPDeclDie);
225      SPCU->addDie(SPDie);
226    }
227  }
228  // Pick up abstract subprogram DIE.
229  if (DIE *AbsSPDIE = AbstractSPDies.lookup(SPNode)) {
230    SPDie = new DIE(dwarf::DW_TAG_subprogram);
231    SPCU->addDIEEntry(SPDie, dwarf::DW_AT_abstract_origin,
232                      dwarf::DW_FORM_ref4, AbsSPDIE);
233    SPCU->addDie(SPDie);
234  }
235
236  SPCU->addLabel(SPDie, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
237                 Asm->GetTempSymbol("func_begin", Asm->getFunctionNumber()));
238  SPCU->addLabel(SPDie, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr,
239                 Asm->GetTempSymbol("func_end", Asm->getFunctionNumber()));
240  const TargetRegisterInfo *RI = Asm->TM.getRegisterInfo();
241  MachineLocation Location(RI->getFrameRegister(*Asm->MF));
242  SPCU->addAddress(SPDie, dwarf::DW_AT_frame_base, Location);
243
244  return SPDie;
245}
246
247/// constructLexicalScope - Construct new DW_TAG_lexical_block
248/// for this scope and attach DW_AT_low_pc/DW_AT_high_pc labels.
249DIE *DwarfDebug::constructLexicalScopeDIE(LexicalScope *Scope) {
250
251  DIE *ScopeDIE = new DIE(dwarf::DW_TAG_lexical_block);
252  if (Scope->isAbstractScope())
253    return ScopeDIE;
254
255  const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
256  if (Ranges.empty())
257    return 0;
258
259  CompileUnit *TheCU = getCompileUnit(Scope->getScopeNode());
260  SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
261  if (Ranges.size() > 1) {
262    // .debug_range section has not been laid out yet. Emit offset in
263    // .debug_range as a uint, size 4, for now. emitDIE will handle
264    // DW_AT_ranges appropriately.
265    TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
266                   DebugRangeSymbols.size()
267                   * Asm->getTargetData().getPointerSize());
268    for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
269         RE = Ranges.end(); RI != RE; ++RI) {
270      DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
271      DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
272    }
273    DebugRangeSymbols.push_back(NULL);
274    DebugRangeSymbols.push_back(NULL);
275    return ScopeDIE;
276  }
277
278  const MCSymbol *Start = getLabelBeforeInsn(RI->first);
279  const MCSymbol *End = getLabelAfterInsn(RI->second);
280
281  if (End == 0) return 0;
282
283  assert(Start->isDefined() && "Invalid starting label for an inlined scope!");
284  assert(End->isDefined() && "Invalid end label for an inlined scope!");
285
286  TheCU->addLabel(ScopeDIE, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr, Start);
287  TheCU->addLabel(ScopeDIE, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr, End);
288
289  return ScopeDIE;
290}
291
292/// constructInlinedScopeDIE - This scope represents inlined body of
293/// a function. Construct DIE to represent this concrete inlined copy
294/// of the function.
295DIE *DwarfDebug::constructInlinedScopeDIE(LexicalScope *Scope) {
296
297  const SmallVector<InsnRange, 4> &Ranges = Scope->getRanges();
298  assert (Ranges.empty() == false
299          && "LexicalScope does not have instruction markers!");
300
301  if (!Scope->getScopeNode())
302    return NULL;
303  DIScope DS(Scope->getScopeNode());
304  DISubprogram InlinedSP = getDISubprogram(DS);
305  CompileUnit *TheCU = getCompileUnit(InlinedSP);
306  DIE *OriginDIE = TheCU->getDIE(InlinedSP);
307  if (!OriginDIE) {
308    DEBUG(dbgs() << "Unable to find original DIE for inlined subprogram.");
309    return NULL;
310  }
311
312  SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin();
313  const MCSymbol *StartLabel = getLabelBeforeInsn(RI->first);
314  const MCSymbol *EndLabel = getLabelAfterInsn(RI->second);
315
316  if (StartLabel == 0 || EndLabel == 0) {
317    assert (0 && "Unexpected Start and End labels for a inlined scope!");
318    return 0;
319  }
320  assert(StartLabel->isDefined() &&
321         "Invalid starting label for an inlined scope!");
322  assert(EndLabel->isDefined() &&
323         "Invalid end label for an inlined scope!");
324
325  DIE *ScopeDIE = new DIE(dwarf::DW_TAG_inlined_subroutine);
326  TheCU->addDIEEntry(ScopeDIE, dwarf::DW_AT_abstract_origin,
327                     dwarf::DW_FORM_ref4, OriginDIE);
328
329  if (Ranges.size() > 1) {
330    // .debug_range section has not been laid out yet. Emit offset in
331    // .debug_range as a uint, size 4, for now. emitDIE will handle
332    // DW_AT_ranges appropriately.
333    TheCU->addUInt(ScopeDIE, dwarf::DW_AT_ranges, dwarf::DW_FORM_data4,
334                   DebugRangeSymbols.size()
335                   * Asm->getTargetData().getPointerSize());
336    for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
337         RE = Ranges.end(); RI != RE; ++RI) {
338      DebugRangeSymbols.push_back(getLabelBeforeInsn(RI->first));
339      DebugRangeSymbols.push_back(getLabelAfterInsn(RI->second));
340    }
341    DebugRangeSymbols.push_back(NULL);
342    DebugRangeSymbols.push_back(NULL);
343  } else {
344    TheCU->addLabel(ScopeDIE, dwarf::DW_AT_low_pc, dwarf::DW_FORM_addr,
345                    StartLabel);
346    TheCU->addLabel(ScopeDIE, dwarf::DW_AT_high_pc, dwarf::DW_FORM_addr,
347                    EndLabel);
348  }
349
350  InlinedSubprogramDIEs.insert(OriginDIE);
351
352  // Track the start label for this inlined function.
353  //.debug_inlined section specification does not clearly state how
354  // to emit inlined scope that is split into multiple instruction ranges.
355  // For now, use first instruction range and emit low_pc/high_pc pair and
356  // corresponding .debug_inlined section entry for this pair.
357  DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator
358    I = InlineInfo.find(InlinedSP);
359
360  if (I == InlineInfo.end()) {
361    InlineInfo[InlinedSP].push_back(std::make_pair(StartLabel,
362                                                             ScopeDIE));
363    InlinedSPNodes.push_back(InlinedSP);
364  } else
365    I->second.push_back(std::make_pair(StartLabel, ScopeDIE));
366
367  DILocation DL(Scope->getInlinedAt());
368  TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_file, 0, TheCU->getID());
369  TheCU->addUInt(ScopeDIE, dwarf::DW_AT_call_line, 0, DL.getLineNumber());
370
371  return ScopeDIE;
372}
373
374/// constructVariableDIE - Construct a DIE for the given DbgVariable.
375DIE *DwarfDebug::constructVariableDIE(DbgVariable *DV, LexicalScope *Scope) {
376  StringRef Name = DV->getName();
377  if (Name.empty())
378    return NULL;
379
380  // Translate tag to proper Dwarf tag.
381  unsigned Tag = DV->getTag();
382
383  // Define variable debug information entry.
384  DIE *VariableDie = new DIE(Tag);
385  CompileUnit *VariableCU = getCompileUnit(DV->getVariable());
386  DIE *AbsDIE = NULL;
387  DenseMap<const DbgVariable *, const DbgVariable *>::iterator
388    V2AVI = VarToAbstractVarMap.find(DV);
389  if (V2AVI != VarToAbstractVarMap.end())
390    AbsDIE = V2AVI->second->getDIE();
391
392  if (AbsDIE)
393    VariableCU->addDIEEntry(VariableDie, dwarf::DW_AT_abstract_origin,
394                       dwarf::DW_FORM_ref4, AbsDIE);
395  else {
396    VariableCU->addString(VariableDie, dwarf::DW_AT_name, dwarf::DW_FORM_string,
397                          Name);
398    VariableCU->addSourceLine(VariableDie, DV->getVariable());
399
400    // Add variable type.
401    VariableCU->addType(VariableDie, DV->getType());
402  }
403
404  if (DV->isArtificial())
405    VariableCU->addUInt(VariableDie, dwarf::DW_AT_artificial,
406                        dwarf::DW_FORM_flag, 1);
407
408  if (Scope->isAbstractScope()) {
409    DV->setDIE(VariableDie);
410    return VariableDie;
411  }
412
413  // Add variable address.
414
415  unsigned Offset = DV->getDotDebugLocOffset();
416  if (Offset != ~0U) {
417    VariableCU->addLabel(VariableDie, dwarf::DW_AT_location,
418                         dwarf::DW_FORM_data4,
419                         Asm->GetTempSymbol("debug_loc", Offset));
420    DV->setDIE(VariableDie);
421    UseDotDebugLocEntry.insert(VariableDie);
422    return VariableDie;
423  }
424
425  // Check if variable is described by a  DBG_VALUE instruction.
426  DenseMap<const DbgVariable *, const MachineInstr *>::iterator DVI =
427    DbgVariableToDbgInstMap.find(DV);
428  if (DVI != DbgVariableToDbgInstMap.end()) {
429    const MachineInstr *DVInsn = DVI->second;
430    bool updated = false;
431    if (DVInsn->getNumOperands() == 3) {
432      if (DVInsn->getOperand(0).isReg()) {
433        const MachineOperand RegOp = DVInsn->getOperand(0);
434        const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
435        if (DVInsn->getOperand(1).isImm() &&
436            TRI->getFrameRegister(*Asm->MF) == RegOp.getReg()) {
437          unsigned FrameReg = 0;
438          const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
439          int Offset =
440            TFI->getFrameIndexReference(*Asm->MF,
441                                        DVInsn->getOperand(1).getImm(),
442                                        FrameReg);
443          MachineLocation Location(FrameReg, Offset);
444          VariableCU->addVariableAddress(DV, VariableDie, Location);
445
446        } else if (RegOp.getReg())
447          VariableCU->addVariableAddress(DV, VariableDie,
448                                         MachineLocation(RegOp.getReg()));
449        updated = true;
450      }
451      else if (DVInsn->getOperand(0).isImm())
452        updated =
453          VariableCU->addConstantValue(VariableDie, DVInsn->getOperand(0),
454                                       DV->getType());
455      else if (DVInsn->getOperand(0).isFPImm())
456        updated =
457          VariableCU->addConstantFPValue(VariableDie, DVInsn->getOperand(0));
458      else if (DVInsn->getOperand(0).isCImm())
459        updated =
460          VariableCU->addConstantValue(VariableDie,
461                                       DVInsn->getOperand(0).getCImm(),
462                                       DV->getType().isUnsignedDIType());
463    } else {
464      VariableCU->addVariableAddress(DV, VariableDie,
465                                     Asm->getDebugValueLocation(DVInsn));
466      updated = true;
467    }
468    if (!updated) {
469      // If variableDie is not updated then DBG_VALUE instruction does not
470      // have valid variable info.
471      delete VariableDie;
472      return NULL;
473    }
474    DV->setDIE(VariableDie);
475    return VariableDie;
476  }
477
478  // .. else use frame index, if available.
479  int FI = 0;
480  if (findVariableFrameIndex(DV, &FI)) {
481    unsigned FrameReg = 0;
482    const TargetFrameLowering *TFI = Asm->TM.getFrameLowering();
483    int Offset =
484      TFI->getFrameIndexReference(*Asm->MF, FI, FrameReg);
485    MachineLocation Location(FrameReg, Offset);
486    VariableCU->addVariableAddress(DV, VariableDie, Location);
487  }
488
489  DV->setDIE(VariableDie);
490  return VariableDie;
491
492}
493
494/// constructScopeDIE - Construct a DIE for this scope.
495DIE *DwarfDebug::constructScopeDIE(LexicalScope *Scope) {
496  if (!Scope || !Scope->getScopeNode())
497    return NULL;
498
499  SmallVector <DIE *, 8> Children;
500
501  // Collect arguments for current function.
502  if (LScopes.isCurrentFunctionScope(Scope))
503    for (unsigned i = 0, N = CurrentFnArguments.size(); i < N; ++i)
504      if (DbgVariable *ArgDV = CurrentFnArguments[i])
505        if (DIE *Arg = constructVariableDIE(ArgDV, Scope))
506          Children.push_back(Arg);
507
508  // Collect lexical scope childrens first.
509  const SmallVector<DbgVariable *, 8> &Variables = ScopeVariables.lookup(Scope);
510  for (unsigned i = 0, N = Variables.size(); i < N; ++i)
511    if (DIE *Variable = constructVariableDIE(Variables[i], Scope))
512      Children.push_back(Variable);
513  const SmallVector<LexicalScope *, 4> &Scopes = Scope->getChildren();
514  for (unsigned j = 0, M = Scopes.size(); j < M; ++j)
515    if (DIE *Nested = constructScopeDIE(Scopes[j]))
516      Children.push_back(Nested);
517  DIScope DS(Scope->getScopeNode());
518  DIE *ScopeDIE = NULL;
519  if (Scope->getInlinedAt())
520    ScopeDIE = constructInlinedScopeDIE(Scope);
521  else if (DS.isSubprogram()) {
522    ProcessedSPNodes.insert(DS);
523    if (Scope->isAbstractScope()) {
524      ScopeDIE = getCompileUnit(DS)->getDIE(DS);
525      // Note down abstract DIE.
526      if (ScopeDIE)
527        AbstractSPDies.insert(std::make_pair(DS, ScopeDIE));
528    }
529    else
530      ScopeDIE = updateSubprogramScopeDIE(DS);
531  }
532  else {
533    // There is no need to emit empty lexical block DIE.
534    if (Children.empty())
535      return NULL;
536    ScopeDIE = constructLexicalScopeDIE(Scope);
537  }
538
539  if (!ScopeDIE) return NULL;
540
541  // Add children
542  for (SmallVector<DIE *, 8>::iterator I = Children.begin(),
543         E = Children.end(); I != E; ++I)
544    ScopeDIE->addChild(*I);
545
546  if (DS.isSubprogram())
547    getCompileUnit(DS)->addPubTypes(DISubprogram(DS));
548
549 return ScopeDIE;
550}
551
552/// GetOrCreateSourceID - Look up the source id with the given directory and
553/// source file names. If none currently exists, create a new id and insert it
554/// in the SourceIds map. This can update DirectoryNames and SourceFileNames
555/// maps as well.
556
557unsigned DwarfDebug::GetOrCreateSourceID(StringRef FileName,
558                                         StringRef DirName) {
559  // If FE did not provide a file name, then assume stdin.
560  if (FileName.empty())
561    return GetOrCreateSourceID("<stdin>", StringRef());
562
563  // MCStream expects full path name as filename.
564  if (!DirName.empty() && !sys::path::is_absolute(FileName)) {
565    SmallString<128> FullPathName = DirName;
566    sys::path::append(FullPathName, FileName);
567    // Here FullPathName will be copied into StringMap by GetOrCreateSourceID.
568    return GetOrCreateSourceID(StringRef(FullPathName), StringRef());
569  }
570
571  StringMapEntry<unsigned> &Entry = SourceIdMap.GetOrCreateValue(FileName);
572  if (Entry.getValue())
573    return Entry.getValue();
574
575  unsigned SrcId = SourceIdMap.size();
576  Entry.setValue(SrcId);
577
578  // Print out a .file directive to specify files for .loc directives.
579  Asm->OutStreamer.EmitDwarfFileDirective(SrcId, Entry.getKey());
580
581  return SrcId;
582}
583
584/// constructCompileUnit - Create new CompileUnit for the given
585/// metadata node with tag DW_TAG_compile_unit.
586void DwarfDebug::constructCompileUnit(const MDNode *N) {
587  DICompileUnit DIUnit(N);
588  StringRef FN = DIUnit.getFilename();
589  StringRef Dir = DIUnit.getDirectory();
590  unsigned ID = GetOrCreateSourceID(FN, Dir);
591
592  DIE *Die = new DIE(dwarf::DW_TAG_compile_unit);
593  CompileUnit *NewCU = new CompileUnit(ID, Die, Asm, this);
594  NewCU->addString(Die, dwarf::DW_AT_producer, dwarf::DW_FORM_string,
595                   DIUnit.getProducer());
596  NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
597                 DIUnit.getLanguage());
598  NewCU->addString(Die, dwarf::DW_AT_name, dwarf::DW_FORM_string, FN);
599  // Use DW_AT_entry_pc instead of DW_AT_low_pc/DW_AT_high_pc pair. This
600  // simplifies debug range entries.
601  NewCU->addUInt(Die, dwarf::DW_AT_entry_pc, dwarf::DW_FORM_addr, 0);
602  // DW_AT_stmt_list is a offset of line number information for this
603  // compile unit in debug_line section.
604  if(Asm->MAI->doesDwarfRequireRelocationForSectionOffset())
605    NewCU->addLabel(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4,
606                    Asm->GetTempSymbol("section_line"));
607  else
608    NewCU->addUInt(Die, dwarf::DW_AT_stmt_list, dwarf::DW_FORM_data4, 0);
609
610  if (!Dir.empty())
611    NewCU->addString(Die, dwarf::DW_AT_comp_dir, dwarf::DW_FORM_string, Dir);
612  if (DIUnit.isOptimized())
613    NewCU->addUInt(Die, dwarf::DW_AT_APPLE_optimized, dwarf::DW_FORM_flag, 1);
614
615  StringRef Flags = DIUnit.getFlags();
616  if (!Flags.empty())
617    NewCU->addString(Die, dwarf::DW_AT_APPLE_flags, dwarf::DW_FORM_string,
618                     Flags);
619
620  unsigned RVer = DIUnit.getRunTimeVersion();
621  if (RVer)
622    NewCU->addUInt(Die, dwarf::DW_AT_APPLE_major_runtime_vers,
623            dwarf::DW_FORM_data1, RVer);
624
625  if (!FirstCU)
626    FirstCU = NewCU;
627  CUMap.insert(std::make_pair(N, NewCU));
628}
629
630/// getCompileUnit - Get CompileUnit DIE.
631CompileUnit *DwarfDebug::getCompileUnit(const MDNode *N) const {
632  assert (N && "Invalid DwarfDebug::getCompileUnit argument!");
633  DIDescriptor D(N);
634  const MDNode *CUNode = NULL;
635  if (D.isCompileUnit())
636    CUNode = N;
637  else if (D.isSubprogram())
638    CUNode = DISubprogram(N).getCompileUnit();
639  else if (D.isType())
640    CUNode = DIType(N).getCompileUnit();
641  else if (D.isGlobalVariable())
642    CUNode = DIGlobalVariable(N).getCompileUnit();
643  else if (D.isVariable())
644    CUNode = DIVariable(N).getCompileUnit();
645  else if (D.isNameSpace())
646    CUNode = DINameSpace(N).getCompileUnit();
647  else if (D.isFile())
648    CUNode = DIFile(N).getCompileUnit();
649  else
650    return FirstCU;
651
652  DenseMap<const MDNode *, CompileUnit *>::const_iterator I
653    = CUMap.find(CUNode);
654  if (I == CUMap.end())
655    return FirstCU;
656  return I->second;
657}
658
659/// constructGlobalVariableDIE - Construct global variable DIE.
660void DwarfDebug::constructGlobalVariableDIE(const MDNode *N) {
661  DIGlobalVariable GV(N);
662
663  // If debug information is malformed then ignore it.
664  if (GV.Verify() == false)
665    return;
666
667  // Check for pre-existence.
668  CompileUnit *TheCU = getCompileUnit(N);
669  TheCU->createGlobalVariableDIE(N);
670  return;
671}
672
673/// construct SubprogramDIE - Construct subprogram DIE.
674void DwarfDebug::constructSubprogramDIE(const MDNode *N) {
675  DISubprogram SP(N);
676
677  // Check for pre-existence.
678  CompileUnit *TheCU = getCompileUnit(N);
679  if (TheCU->getDIE(N))
680    return;
681
682  if (!SP.isDefinition())
683    // This is a method declaration which will be handled while constructing
684    // class type.
685    return;
686
687  DIE *SubprogramDie = TheCU->getOrCreateSubprogramDIE(SP);
688
689  // Add to map.
690  TheCU->insertDIE(N, SubprogramDie);
691
692  // Add to context owner.
693  TheCU->addToContextOwner(SubprogramDie, SP.getContext());
694
695  // Expose as global.
696  TheCU->addGlobal(SP.getName(), SubprogramDie);
697
698  return;
699}
700
701/// beginModule - Emit all Dwarf sections that should come prior to the
702/// content. Create global DIEs and emit initial debug info sections.
703/// This is invoked by the target AsmPrinter.
704void DwarfDebug::beginModule(Module *M) {
705  if (DisableDebugInfoPrinting)
706    return;
707
708  // If module has named metadata anchors then use them, otherwise scan the
709  // module using debug info finder to collect debug info.
710  NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
711  if (CU_Nodes) {
712
713    NamedMDNode *GV_Nodes = M->getNamedMetadata("llvm.dbg.gv");
714    NamedMDNode *SP_Nodes = M->getNamedMetadata("llvm.dbg.sp");
715    if (!GV_Nodes && !SP_Nodes)
716      // If there are not any global variables or any functions then
717      // there is not any debug info in this module.
718      return;
719
720    for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i)
721      constructCompileUnit(CU_Nodes->getOperand(i));
722
723    if (GV_Nodes)
724      for (unsigned i = 0, e = GV_Nodes->getNumOperands(); i != e; ++i)
725        constructGlobalVariableDIE(GV_Nodes->getOperand(i));
726
727    if (SP_Nodes)
728      for (unsigned i = 0, e = SP_Nodes->getNumOperands(); i != e; ++i)
729        constructSubprogramDIE(SP_Nodes->getOperand(i));
730
731  } else {
732
733    DebugInfoFinder DbgFinder;
734    DbgFinder.processModule(*M);
735
736    bool HasDebugInfo = false;
737    // Scan all the compile-units to see if there are any marked as the main
738    // unit. If not, we do not generate debug info.
739    for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
740           E = DbgFinder.compile_unit_end(); I != E; ++I) {
741      if (DICompileUnit(*I).isMain()) {
742        HasDebugInfo = true;
743        break;
744      }
745    }
746    if (!HasDebugInfo) return;
747
748    // Create all the compile unit DIEs.
749    for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
750           E = DbgFinder.compile_unit_end(); I != E; ++I)
751      constructCompileUnit(*I);
752
753    // Create DIEs for each global variable.
754    for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
755           E = DbgFinder.global_variable_end(); I != E; ++I)
756      constructGlobalVariableDIE(*I);
757
758    // Create DIEs for each subprogram.
759    for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
760           E = DbgFinder.subprogram_end(); I != E; ++I)
761      constructSubprogramDIE(*I);
762  }
763
764  // Tell MMI that we have debug info.
765  MMI->setDebugInfoAvailability(true);
766
767  // Emit initial sections.
768  EmitSectionLabels();
769
770  //getOrCreateTypeDIE
771  if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.enum"))
772    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
773      DIType Ty(NMD->getOperand(i));
774      getCompileUnit(Ty)->getOrCreateTypeDIE(Ty);
775    }
776
777  if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.ty"))
778    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
779      DIType Ty(NMD->getOperand(i));
780      getCompileUnit(Ty)->getOrCreateTypeDIE(Ty);
781    }
782
783  // Prime section data.
784  SectionMap.insert(Asm->getObjFileLowering().getTextSection());
785}
786
787/// endModule - Emit all Dwarf sections that should come after the content.
788///
789void DwarfDebug::endModule() {
790  if (!FirstCU) return;
791  const Module *M = MMI->getModule();
792  DenseMap<const MDNode *, LexicalScope *> DeadFnScopeMap;
793  if (NamedMDNode *AllSPs = M->getNamedMetadata("llvm.dbg.sp")) {
794    for (unsigned SI = 0, SE = AllSPs->getNumOperands(); SI != SE; ++SI) {
795      if (ProcessedSPNodes.count(AllSPs->getOperand(SI)) != 0) continue;
796      DISubprogram SP(AllSPs->getOperand(SI));
797      if (!SP.Verify()) continue;
798
799      // Collect info for variables that were optimized out.
800      if (!SP.isDefinition()) continue;
801      StringRef FName = SP.getLinkageName();
802      if (FName.empty())
803        FName = SP.getName();
804      NamedMDNode *NMD = getFnSpecificMDNode(*(MMI->getModule()), FName);
805      if (!NMD) continue;
806      unsigned E = NMD->getNumOperands();
807      if (!E) continue;
808      LexicalScope *Scope = new LexicalScope(NULL, DIDescriptor(SP), NULL,
809                                             false);
810      DeadFnScopeMap[SP] = Scope;
811      SmallVector<DbgVariable, 8> Variables;
812      for (unsigned I = 0; I != E; ++I) {
813        DIVariable DV(NMD->getOperand(I));
814        if (!DV.Verify()) continue;
815        Variables.push_back(DbgVariable(DV));
816      }
817
818      // Construct subprogram DIE and add variables DIEs.
819      constructSubprogramDIE(SP);
820      DIE *ScopeDIE = getCompileUnit(SP)->getDIE(SP);
821      for (unsigned i = 0, N = Variables.size(); i < N; ++i) {
822        if (DIE *VariableDIE = constructVariableDIE(&Variables[i], Scope))
823          ScopeDIE->addChild(VariableDIE);
824      }
825    }
826  }
827
828  // Attach DW_AT_inline attribute with inlined subprogram DIEs.
829  for (SmallPtrSet<DIE *, 4>::iterator AI = InlinedSubprogramDIEs.begin(),
830         AE = InlinedSubprogramDIEs.end(); AI != AE; ++AI) {
831    DIE *ISP = *AI;
832    FirstCU->addUInt(ISP, dwarf::DW_AT_inline, 0, dwarf::DW_INL_inlined);
833  }
834
835  // Emit DW_AT_containing_type attribute to connect types with their
836  // vtable holding type.
837  for (DenseMap<const MDNode *, CompileUnit *>::iterator CUI = CUMap.begin(),
838         CUE = CUMap.end(); CUI != CUE; ++CUI) {
839    CompileUnit *TheCU = CUI->second;
840    TheCU->constructContainingTypeDIEs();
841  }
842
843  // Standard sections final addresses.
844  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getTextSection());
845  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("text_end"));
846  Asm->OutStreamer.SwitchSection(Asm->getObjFileLowering().getDataSection());
847  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("data_end"));
848
849  // End text sections.
850  for (unsigned i = 1, N = SectionMap.size(); i <= N; ++i) {
851    Asm->OutStreamer.SwitchSection(SectionMap[i]);
852    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("section_end", i));
853  }
854
855  // Compute DIE offsets and sizes.
856  computeSizeAndOffsets();
857
858  // Emit all the DIEs into a debug info section
859  emitDebugInfo();
860
861  // Corresponding abbreviations into a abbrev section.
862  emitAbbreviations();
863
864  // Emit info into a debug pubnames section.
865  emitDebugPubNames();
866
867  // Emit info into a debug pubtypes section.
868  emitDebugPubTypes();
869
870  // Emit info into a debug loc section.
871  emitDebugLoc();
872
873  // Emit info into a debug aranges section.
874  EmitDebugARanges();
875
876  // Emit info into a debug ranges section.
877  emitDebugRanges();
878
879  // Emit info into a debug macinfo section.
880  emitDebugMacInfo();
881
882  // Emit inline info.
883  emitDebugInlineInfo();
884
885  // Emit info into a debug str section.
886  emitDebugStr();
887
888  // clean up.
889  DeleteContainerSeconds(DeadFnScopeMap);
890  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
891         E = CUMap.end(); I != E; ++I)
892    delete I->second;
893  FirstCU = NULL;  // Reset for the next Module, if any.
894}
895
896/// findAbstractVariable - Find abstract variable, if any, associated with Var.
897DbgVariable *DwarfDebug::findAbstractVariable(DIVariable &DV,
898                                              DebugLoc ScopeLoc) {
899  LLVMContext &Ctx = DV->getContext();
900  // More then one inlined variable corresponds to one abstract variable.
901  DIVariable Var = cleanseInlinedVariable(DV, Ctx);
902  DbgVariable *AbsDbgVariable = AbstractVariables.lookup(Var);
903  if (AbsDbgVariable)
904    return AbsDbgVariable;
905
906  LexicalScope *Scope = LScopes.findAbstractScope(ScopeLoc.getScope(Ctx));
907  if (!Scope)
908    return NULL;
909
910  AbsDbgVariable = new DbgVariable(Var);
911  addScopeVariable(Scope, AbsDbgVariable);
912  AbstractVariables[Var] = AbsDbgVariable;
913  return AbsDbgVariable;
914}
915
916/// addCurrentFnArgument - If Var is a current function argument then add
917/// it to CurrentFnArguments list.
918bool DwarfDebug::addCurrentFnArgument(const MachineFunction *MF,
919                                      DbgVariable *Var, LexicalScope *Scope) {
920  if (!LScopes.isCurrentFunctionScope(Scope))
921    return false;
922  DIVariable DV = Var->getVariable();
923  if (DV.getTag() != dwarf::DW_TAG_arg_variable)
924    return false;
925  unsigned ArgNo = DV.getArgNumber();
926  if (ArgNo == 0)
927    return false;
928
929  size_t Size = CurrentFnArguments.size();
930  if (Size == 0)
931    CurrentFnArguments.resize(MF->getFunction()->arg_size());
932  // llvm::Function argument size is not good indicator of how many
933  // arguments does the function have at source level.
934  if (ArgNo > Size)
935    CurrentFnArguments.resize(ArgNo * 2);
936  CurrentFnArguments[ArgNo - 1] = Var;
937  return true;
938}
939
940/// collectVariableInfoFromMMITable - Collect variable information from
941/// side table maintained by MMI.
942void
943DwarfDebug::collectVariableInfoFromMMITable(const MachineFunction *MF,
944                                   SmallPtrSet<const MDNode *, 16> &Processed) {
945  MachineModuleInfo::VariableDbgInfoMapTy &VMap = MMI->getVariableDbgInfo();
946  for (MachineModuleInfo::VariableDbgInfoMapTy::iterator VI = VMap.begin(),
947         VE = VMap.end(); VI != VE; ++VI) {
948    const MDNode *Var = VI->first;
949    if (!Var) continue;
950    Processed.insert(Var);
951    DIVariable DV(Var);
952    const std::pair<unsigned, DebugLoc> &VP = VI->second;
953
954    LexicalScope *Scope = LScopes.findLexicalScope(VP.second);
955
956    // If variable scope is not found then skip this variable.
957    if (Scope == 0)
958      continue;
959
960    DbgVariable *AbsDbgVariable = findAbstractVariable(DV, VP.second);
961    DbgVariable *RegVar = new DbgVariable(DV);
962    recordVariableFrameIndex(RegVar, VP.first);
963    if (!addCurrentFnArgument(MF, RegVar, Scope))
964      addScopeVariable(Scope, RegVar);
965    if (AbsDbgVariable) {
966      recordVariableFrameIndex(AbsDbgVariable, VP.first);
967      VarToAbstractVarMap[RegVar] = AbsDbgVariable;
968    }
969  }
970}
971
972/// isDbgValueInDefinedReg - Return true if debug value, encoded by
973/// DBG_VALUE instruction, is in a defined reg.
974static bool isDbgValueInDefinedReg(const MachineInstr *MI) {
975  assert (MI->isDebugValue() && "Invalid DBG_VALUE machine instruction!");
976  return MI->getNumOperands() == 3 &&
977         MI->getOperand(0).isReg() && MI->getOperand(0).getReg() &&
978         MI->getOperand(1).isImm() && MI->getOperand(1).getImm() == 0;
979}
980
981/// getDebugLocEntry - Get .debug_loc entry for the instruction range starting
982/// at MI.
983static DotDebugLocEntry getDebugLocEntry(AsmPrinter *Asm,
984                                         const MCSymbol *FLabel,
985                                         const MCSymbol *SLabel,
986                                         const MachineInstr *MI) {
987  const MDNode *Var =  MI->getOperand(MI->getNumOperands() - 1).getMetadata();
988
989  if (MI->getNumOperands() != 3) {
990    MachineLocation MLoc = Asm->getDebugValueLocation(MI);
991    return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
992  }
993  if (MI->getOperand(0).isReg() && MI->getOperand(1).isImm()) {
994    MachineLocation MLoc;
995    MLoc.set(MI->getOperand(0).getReg(), MI->getOperand(1).getImm());
996    return DotDebugLocEntry(FLabel, SLabel, MLoc, Var);
997  }
998  if (MI->getOperand(0).isImm())
999    return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getImm());
1000  if (MI->getOperand(0).isFPImm())
1001    return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getFPImm());
1002  if (MI->getOperand(0).isCImm())
1003    return DotDebugLocEntry(FLabel, SLabel, MI->getOperand(0).getCImm());
1004
1005  assert (0 && "Unexpected 3 operand DBG_VALUE instruction!");
1006  return DotDebugLocEntry();
1007}
1008
1009/// collectVariableInfo - Find variables for each lexical scope.
1010void
1011DwarfDebug::collectVariableInfo(const MachineFunction *MF,
1012                                SmallPtrSet<const MDNode *, 16> &Processed) {
1013
1014  /// collection info from MMI table.
1015  collectVariableInfoFromMMITable(MF, Processed);
1016
1017  for (SmallVectorImpl<const MDNode*>::const_iterator
1018         UVI = UserVariables.begin(), UVE = UserVariables.end(); UVI != UVE;
1019         ++UVI) {
1020    const MDNode *Var = *UVI;
1021    if (Processed.count(Var))
1022      continue;
1023
1024    // History contains relevant DBG_VALUE instructions for Var and instructions
1025    // clobbering it.
1026    SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1027    if (History.empty())
1028      continue;
1029    const MachineInstr *MInsn = History.front();
1030
1031    DIVariable DV(Var);
1032    LexicalScope *Scope = NULL;
1033    if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
1034        DISubprogram(DV.getContext()).describes(MF->getFunction()))
1035      Scope = LScopes.getCurrentFunctionScope();
1036    else {
1037      if (DV.getVersion() <= LLVMDebugVersion9)
1038        Scope = LScopes.findLexicalScope(MInsn->getDebugLoc());
1039      else {
1040        if (MDNode *IA = DV.getInlinedAt())
1041          Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
1042        else
1043          Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
1044      }
1045    }
1046    // If variable scope is not found then skip this variable.
1047    if (!Scope)
1048      continue;
1049
1050    Processed.insert(DV);
1051    assert(MInsn->isDebugValue() && "History must begin with debug value");
1052    DbgVariable *RegVar = new DbgVariable(DV);
1053    if (!addCurrentFnArgument(MF, RegVar, Scope))
1054      addScopeVariable(Scope, RegVar);
1055    if (DbgVariable *AbsVar = findAbstractVariable(DV, MInsn->getDebugLoc())) {
1056      DbgVariableToDbgInstMap[AbsVar] = MInsn;
1057      VarToAbstractVarMap[RegVar] = AbsVar;
1058    }
1059
1060    // Simple ranges that are fully coalesced.
1061    if (History.size() <= 1 || (History.size() == 2 &&
1062                                MInsn->isIdenticalTo(History.back()))) {
1063      DbgVariableToDbgInstMap[RegVar] = MInsn;
1064      continue;
1065    }
1066
1067    // handle multiple DBG_VALUE instructions describing one variable.
1068    RegVar->setDotDebugLocOffset(DotDebugLocEntries.size());
1069
1070    for (SmallVectorImpl<const MachineInstr*>::const_iterator
1071           HI = History.begin(), HE = History.end(); HI != HE; ++HI) {
1072      const MachineInstr *Begin = *HI;
1073      assert(Begin->isDebugValue() && "Invalid History entry");
1074
1075      // Check if DBG_VALUE is truncating a range.
1076      if (Begin->getNumOperands() > 1 && Begin->getOperand(0).isReg()
1077          && !Begin->getOperand(0).getReg())
1078        continue;
1079
1080      // Compute the range for a register location.
1081      const MCSymbol *FLabel = getLabelBeforeInsn(Begin);
1082      const MCSymbol *SLabel = 0;
1083
1084      if (HI + 1 == HE)
1085        // If Begin is the last instruction in History then its value is valid
1086        // until the end of the function.
1087        SLabel = FunctionEndSym;
1088      else {
1089        const MachineInstr *End = HI[1];
1090        DEBUG(dbgs() << "DotDebugLoc Pair:\n"
1091              << "\t" << *Begin << "\t" << *End << "\n");
1092        if (End->isDebugValue())
1093          SLabel = getLabelBeforeInsn(End);
1094        else {
1095          // End is a normal instruction clobbering the range.
1096          SLabel = getLabelAfterInsn(End);
1097          assert(SLabel && "Forgot label after clobber instruction");
1098          ++HI;
1099        }
1100      }
1101
1102      // The value is valid until the next DBG_VALUE or clobber.
1103      DotDebugLocEntries.push_back(getDebugLocEntry(Asm, FLabel, SLabel, Begin));
1104    }
1105    DotDebugLocEntries.push_back(DotDebugLocEntry());
1106  }
1107
1108  // Collect info for variables that were optimized out.
1109  const Function *F = MF->getFunction();
1110  if (NamedMDNode *NMD = getFnSpecificMDNode(*(F->getParent()), F->getName())) {
1111    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1112      DIVariable DV(cast<MDNode>(NMD->getOperand(i)));
1113      if (!DV || !Processed.insert(DV))
1114        continue;
1115      if (LexicalScope *Scope = LScopes.findLexicalScope(DV.getContext()))
1116        addScopeVariable(Scope, new DbgVariable(DV));
1117    }
1118  }
1119}
1120
1121/// getLabelBeforeInsn - Return Label preceding the instruction.
1122const MCSymbol *DwarfDebug::getLabelBeforeInsn(const MachineInstr *MI) {
1123  MCSymbol *Label = LabelsBeforeInsn.lookup(MI);
1124  assert(Label && "Didn't insert label before instruction");
1125  return Label;
1126}
1127
1128/// getLabelAfterInsn - Return Label immediately following the instruction.
1129const MCSymbol *DwarfDebug::getLabelAfterInsn(const MachineInstr *MI) {
1130  return LabelsAfterInsn.lookup(MI);
1131}
1132
1133/// beginInstruction - Process beginning of an instruction.
1134void DwarfDebug::beginInstruction(const MachineInstr *MI) {
1135  // Check if source location changes, but ignore DBG_VALUE locations.
1136  if (!MI->isDebugValue()) {
1137    DebugLoc DL = MI->getDebugLoc();
1138    if (DL != PrevInstLoc && (!DL.isUnknown() || UnknownLocations)) {
1139      unsigned Flags = DWARF2_FLAG_IS_STMT;
1140      PrevInstLoc = DL;
1141      if (DL == PrologEndLoc) {
1142        Flags |= DWARF2_FLAG_PROLOGUE_END;
1143        PrologEndLoc = DebugLoc();
1144      }
1145      if (!DL.isUnknown()) {
1146        const MDNode *Scope = DL.getScope(Asm->MF->getFunction()->getContext());
1147        recordSourceLine(DL.getLine(), DL.getCol(), Scope, Flags);
1148      } else
1149        recordSourceLine(0, 0, 0, 0);
1150    }
1151  }
1152
1153  // Insert labels where requested.
1154  DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1155    LabelsBeforeInsn.find(MI);
1156
1157  // No label needed.
1158  if (I == LabelsBeforeInsn.end())
1159    return;
1160
1161  // Label already assigned.
1162  if (I->second)
1163    return;
1164
1165  if (!PrevLabel) {
1166    PrevLabel = MMI->getContext().CreateTempSymbol();
1167    Asm->OutStreamer.EmitLabel(PrevLabel);
1168  }
1169  I->second = PrevLabel;
1170}
1171
1172/// endInstruction - Process end of an instruction.
1173void DwarfDebug::endInstruction(const MachineInstr *MI) {
1174  // Don't create a new label after DBG_VALUE instructions.
1175  // They don't generate code.
1176  if (!MI->isDebugValue())
1177    PrevLabel = 0;
1178
1179  DenseMap<const MachineInstr*, MCSymbol*>::iterator I =
1180    LabelsAfterInsn.find(MI);
1181
1182  // No label needed.
1183  if (I == LabelsAfterInsn.end())
1184    return;
1185
1186  // Label already assigned.
1187  if (I->second)
1188    return;
1189
1190  // We need a label after this instruction.
1191  if (!PrevLabel) {
1192    PrevLabel = MMI->getContext().CreateTempSymbol();
1193    Asm->OutStreamer.EmitLabel(PrevLabel);
1194  }
1195  I->second = PrevLabel;
1196}
1197
1198/// identifyScopeMarkers() -
1199/// Each LexicalScope has first instruction and last instruction to mark
1200/// beginning and end of a scope respectively. Create an inverse map that list
1201/// scopes starts (and ends) with an instruction. One instruction may start (or
1202/// end) multiple scopes. Ignore scopes that are not reachable.
1203void DwarfDebug::identifyScopeMarkers() {
1204  SmallVector<LexicalScope *, 4> WorkList;
1205  WorkList.push_back(LScopes.getCurrentFunctionScope());
1206  while (!WorkList.empty()) {
1207    LexicalScope *S = WorkList.pop_back_val();
1208
1209    const SmallVector<LexicalScope *, 4> &Children = S->getChildren();
1210    if (!Children.empty())
1211      for (SmallVector<LexicalScope *, 4>::const_iterator SI = Children.begin(),
1212             SE = Children.end(); SI != SE; ++SI)
1213        WorkList.push_back(*SI);
1214
1215    if (S->isAbstractScope())
1216      continue;
1217
1218    const SmallVector<InsnRange, 4> &Ranges = S->getRanges();
1219    if (Ranges.empty())
1220      continue;
1221    for (SmallVector<InsnRange, 4>::const_iterator RI = Ranges.begin(),
1222           RE = Ranges.end(); RI != RE; ++RI) {
1223      assert(RI->first && "InsnRange does not have first instruction!");
1224      assert(RI->second && "InsnRange does not have second instruction!");
1225      requestLabelBeforeInsn(RI->first);
1226      requestLabelAfterInsn(RI->second);
1227    }
1228  }
1229}
1230
1231/// getScopeNode - Get MDNode for DebugLoc's scope.
1232static MDNode *getScopeNode(DebugLoc DL, const LLVMContext &Ctx) {
1233  if (MDNode *InlinedAt = DL.getInlinedAt(Ctx))
1234    return getScopeNode(DebugLoc::getFromDILocation(InlinedAt), Ctx);
1235  return DL.getScope(Ctx);
1236}
1237
1238/// getFnDebugLoc - Walk up the scope chain of given debug loc and find
1239/// line number  info for the function.
1240static DebugLoc getFnDebugLoc(DebugLoc DL, const LLVMContext &Ctx) {
1241  const MDNode *Scope = getScopeNode(DL, Ctx);
1242  DISubprogram SP = getDISubprogram(Scope);
1243  if (SP.Verify())
1244    return DebugLoc::get(SP.getLineNumber(), 0, SP);
1245  return DebugLoc();
1246}
1247
1248/// beginFunction - Gather pre-function debug information.  Assumes being
1249/// emitted immediately after the function entry point.
1250void DwarfDebug::beginFunction(const MachineFunction *MF) {
1251  if (!MMI->hasDebugInfo()) return;
1252  LScopes.initialize(*MF);
1253  if (LScopes.empty()) return;
1254  identifyScopeMarkers();
1255
1256  FunctionBeginSym = Asm->GetTempSymbol("func_begin",
1257                                        Asm->getFunctionNumber());
1258  // Assumes in correct section after the entry point.
1259  Asm->OutStreamer.EmitLabel(FunctionBeginSym);
1260
1261  assert(UserVariables.empty() && DbgValues.empty() && "Maps weren't cleaned");
1262
1263  const TargetRegisterInfo *TRI = Asm->TM.getRegisterInfo();
1264  /// LiveUserVar - Map physreg numbers to the MDNode they contain.
1265  std::vector<const MDNode*> LiveUserVar(TRI->getNumRegs());
1266
1267  for (MachineFunction::const_iterator I = MF->begin(), E = MF->end();
1268       I != E; ++I) {
1269    bool AtBlockEntry = true;
1270    for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end();
1271         II != IE; ++II) {
1272      const MachineInstr *MI = II;
1273
1274      if (MI->isDebugValue()) {
1275        assert (MI->getNumOperands() > 1 && "Invalid machine instruction!");
1276
1277        // Keep track of user variables.
1278        const MDNode *Var =
1279          MI->getOperand(MI->getNumOperands() - 1).getMetadata();
1280
1281        // Variable is in a register, we need to check for clobbers.
1282        if (isDbgValueInDefinedReg(MI))
1283          LiveUserVar[MI->getOperand(0).getReg()] = Var;
1284
1285        // Check the history of this variable.
1286        SmallVectorImpl<const MachineInstr*> &History = DbgValues[Var];
1287        if (History.empty()) {
1288          UserVariables.push_back(Var);
1289          // The first mention of a function argument gets the FunctionBeginSym
1290          // label, so arguments are visible when breaking at function entry.
1291          DIVariable DV(Var);
1292          if (DV.Verify() && DV.getTag() == dwarf::DW_TAG_arg_variable &&
1293              DISubprogram(getDISubprogram(DV.getContext()))
1294                .describes(MF->getFunction()))
1295            LabelsBeforeInsn[MI] = FunctionBeginSym;
1296        } else {
1297          // We have seen this variable before. Try to coalesce DBG_VALUEs.
1298          const MachineInstr *Prev = History.back();
1299          if (Prev->isDebugValue()) {
1300            // Coalesce identical entries at the end of History.
1301            if (History.size() >= 2 &&
1302                Prev->isIdenticalTo(History[History.size() - 2])) {
1303              DEBUG(dbgs() << "Coalesce identical DBG_VALUE entries:\n"
1304                    << "\t" << *Prev
1305                    << "\t" << *History[History.size() - 2] << "\n");
1306              History.pop_back();
1307            }
1308
1309            // Terminate old register assignments that don't reach MI;
1310            MachineFunction::const_iterator PrevMBB = Prev->getParent();
1311            if (PrevMBB != I && (!AtBlockEntry || llvm::next(PrevMBB) != I) &&
1312                isDbgValueInDefinedReg(Prev)) {
1313              // Previous register assignment needs to terminate at the end of
1314              // its basic block.
1315              MachineBasicBlock::const_iterator LastMI =
1316                PrevMBB->getLastNonDebugInstr();
1317              if (LastMI == PrevMBB->end()) {
1318                // Drop DBG_VALUE for empty range.
1319                DEBUG(dbgs() << "Drop DBG_VALUE for empty range:\n"
1320                      << "\t" << *Prev << "\n");
1321                History.pop_back();
1322              }
1323              else {
1324                // Terminate after LastMI.
1325                History.push_back(LastMI);
1326              }
1327            }
1328          }
1329        }
1330        History.push_back(MI);
1331      } else {
1332        // Not a DBG_VALUE instruction.
1333        if (!MI->isLabel())
1334          AtBlockEntry = false;
1335
1336        // First known non DBG_VALUE location marks beginning of function
1337        // body.
1338        if (PrologEndLoc.isUnknown() && !MI->getDebugLoc().isUnknown())
1339          PrologEndLoc = MI->getDebugLoc();
1340
1341        // Check if the instruction clobbers any registers with debug vars.
1342        for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1343               MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1344          if (!MOI->isReg() || !MOI->isDef() || !MOI->getReg())
1345            continue;
1346          for (const unsigned *AI = TRI->getOverlaps(MOI->getReg());
1347               unsigned Reg = *AI; ++AI) {
1348            const MDNode *Var = LiveUserVar[Reg];
1349            if (!Var)
1350              continue;
1351            // Reg is now clobbered.
1352            LiveUserVar[Reg] = 0;
1353
1354            // Was MD last defined by a DBG_VALUE referring to Reg?
1355            DbgValueHistoryMap::iterator HistI = DbgValues.find(Var);
1356            if (HistI == DbgValues.end())
1357              continue;
1358            SmallVectorImpl<const MachineInstr*> &History = HistI->second;
1359            if (History.empty())
1360              continue;
1361            const MachineInstr *Prev = History.back();
1362            // Sanity-check: Register assignments are terminated at the end of
1363            // their block.
1364            if (!Prev->isDebugValue() || Prev->getParent() != MI->getParent())
1365              continue;
1366            // Is the variable still in Reg?
1367            if (!isDbgValueInDefinedReg(Prev) ||
1368                Prev->getOperand(0).getReg() != Reg)
1369              continue;
1370            // Var is clobbered. Make sure the next instruction gets a label.
1371            History.push_back(MI);
1372          }
1373        }
1374      }
1375    }
1376  }
1377
1378  for (DbgValueHistoryMap::iterator I = DbgValues.begin(), E = DbgValues.end();
1379       I != E; ++I) {
1380    SmallVectorImpl<const MachineInstr*> &History = I->second;
1381    if (History.empty())
1382      continue;
1383
1384    // Make sure the final register assignments are terminated.
1385    const MachineInstr *Prev = History.back();
1386    if (Prev->isDebugValue() && isDbgValueInDefinedReg(Prev)) {
1387      const MachineBasicBlock *PrevMBB = Prev->getParent();
1388      MachineBasicBlock::const_iterator LastMI =
1389        PrevMBB->getLastNonDebugInstr();
1390      if (LastMI == PrevMBB->end())
1391        // Drop DBG_VALUE for empty range.
1392        History.pop_back();
1393      else {
1394        // Terminate after LastMI.
1395        History.push_back(LastMI);
1396      }
1397    }
1398    // Request labels for the full history.
1399    for (unsigned i = 0, e = History.size(); i != e; ++i) {
1400      const MachineInstr *MI = History[i];
1401      if (MI->isDebugValue())
1402        requestLabelBeforeInsn(MI);
1403      else
1404        requestLabelAfterInsn(MI);
1405    }
1406  }
1407
1408  PrevInstLoc = DebugLoc();
1409  PrevLabel = FunctionBeginSym;
1410
1411  // Record beginning of function.
1412  if (!PrologEndLoc.isUnknown()) {
1413    DebugLoc FnStartDL = getFnDebugLoc(PrologEndLoc,
1414                                       MF->getFunction()->getContext());
1415    recordSourceLine(FnStartDL.getLine(), FnStartDL.getCol(),
1416                     FnStartDL.getScope(MF->getFunction()->getContext()),
1417                     DWARF2_FLAG_IS_STMT);
1418  }
1419}
1420
1421void DwarfDebug::addScopeVariable(LexicalScope *LS, DbgVariable *Var) {
1422//  SmallVector<DbgVariable *, 8> &Vars = ScopeVariables.lookup(LS);
1423  ScopeVariables[LS].push_back(Var);
1424//  Vars.push_back(Var);
1425}
1426
1427/// endFunction - Gather and emit post-function debug information.
1428///
1429void DwarfDebug::endFunction(const MachineFunction *MF) {
1430  if (!MMI->hasDebugInfo() || LScopes.empty()) return;
1431
1432  // Define end label for subprogram.
1433  FunctionEndSym = Asm->GetTempSymbol("func_end",
1434                                      Asm->getFunctionNumber());
1435  // Assumes in correct section after the entry point.
1436  Asm->OutStreamer.EmitLabel(FunctionEndSym);
1437
1438  SmallPtrSet<const MDNode *, 16> ProcessedVars;
1439  collectVariableInfo(MF, ProcessedVars);
1440
1441  // Construct abstract scopes.
1442  ArrayRef<LexicalScope *> AList = LScopes.getAbstractScopesList();
1443  for (unsigned i = 0, e = AList.size(); i != e; ++i) {
1444    LexicalScope *AScope = AList[i];
1445    DISubprogram SP(AScope->getScopeNode());
1446    if (SP.Verify()) {
1447      // Collect info for variables that were optimized out.
1448      StringRef FName = SP.getLinkageName();
1449      if (FName.empty())
1450        FName = SP.getName();
1451      if (NamedMDNode *NMD =
1452          getFnSpecificMDNode(*(MF->getFunction()->getParent()), FName)) {
1453        for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
1454          DIVariable DV(cast<MDNode>(NMD->getOperand(i)));
1455          if (!DV || !ProcessedVars.insert(DV))
1456            continue;
1457          if (LexicalScope *Scope = LScopes.findAbstractScope(DV.getContext()))
1458            addScopeVariable(Scope, new DbgVariable(DV));
1459        }
1460      }
1461    }
1462    if (ProcessedSPNodes.count(AScope->getScopeNode()) == 0)
1463      constructScopeDIE(AScope);
1464  }
1465
1466  DIE *CurFnDIE = constructScopeDIE(LScopes.getCurrentFunctionScope());
1467
1468  if (!DisableFramePointerElim(*MF)) {
1469    LexicalScope *FnScope = LScopes.getCurrentFunctionScope();
1470    CompileUnit *TheCU = getCompileUnit(FnScope->getScopeNode());
1471    TheCU->addUInt(CurFnDIE, dwarf::DW_AT_APPLE_omit_frame_ptr,
1472                   dwarf::DW_FORM_flag, 1);
1473  }
1474  DebugFrames.push_back(FunctionDebugFrameInfo(Asm->getFunctionNumber(),
1475                                               MMI->getFrameMoves()));
1476
1477  // Clear debug info
1478  for (DenseMap<LexicalScope *, SmallVector<DbgVariable *, 8> >::iterator
1479         I = ScopeVariables.begin(), E = ScopeVariables.end(); I != E; ++I)
1480    DeleteContainerPointers(I->second);
1481  ScopeVariables.clear();
1482  DeleteContainerPointers(CurrentFnArguments);
1483  DbgVariableToFrameIndexMap.clear();
1484  VarToAbstractVarMap.clear();
1485  DbgVariableToDbgInstMap.clear();
1486  UserVariables.clear();
1487  DbgValues.clear();
1488  AbstractVariables.clear();
1489  LabelsBeforeInsn.clear();
1490  LabelsAfterInsn.clear();
1491  PrevLabel = NULL;
1492}
1493
1494/// recordVariableFrameIndex - Record a variable's index.
1495void DwarfDebug::recordVariableFrameIndex(const DbgVariable *V, int Index) {
1496  assert (V && "Invalid DbgVariable!");
1497  DbgVariableToFrameIndexMap[V] = Index;
1498}
1499
1500/// findVariableFrameIndex - Return true if frame index for the variable
1501/// is found. Update FI to hold value of the index.
1502bool DwarfDebug::findVariableFrameIndex(const DbgVariable *V, int *FI) {
1503  assert (V && "Invalid DbgVariable!");
1504  DenseMap<const DbgVariable *, int>::iterator I =
1505    DbgVariableToFrameIndexMap.find(V);
1506  if (I == DbgVariableToFrameIndexMap.end())
1507    return false;
1508  *FI = I->second;
1509  return true;
1510}
1511
1512/// recordSourceLine - Register a source line with debug info. Returns the
1513/// unique label that was emitted and which provides correspondence to
1514/// the source line list.
1515void DwarfDebug::recordSourceLine(unsigned Line, unsigned Col, const MDNode *S,
1516                                  unsigned Flags) {
1517  StringRef Fn;
1518  StringRef Dir;
1519  unsigned Src = 1;
1520  if (S) {
1521    DIDescriptor Scope(S);
1522
1523    if (Scope.isCompileUnit()) {
1524      DICompileUnit CU(S);
1525      Fn = CU.getFilename();
1526      Dir = CU.getDirectory();
1527    } else if (Scope.isFile()) {
1528      DIFile F(S);
1529      Fn = F.getFilename();
1530      Dir = F.getDirectory();
1531    } else if (Scope.isSubprogram()) {
1532      DISubprogram SP(S);
1533      Fn = SP.getFilename();
1534      Dir = SP.getDirectory();
1535    } else if (Scope.isLexicalBlock()) {
1536      DILexicalBlock DB(S);
1537      Fn = DB.getFilename();
1538      Dir = DB.getDirectory();
1539    } else
1540      assert(0 && "Unexpected scope info");
1541
1542    Src = GetOrCreateSourceID(Fn, Dir);
1543  }
1544  Asm->OutStreamer.EmitDwarfLocDirective(Src, Line, Col, Flags, 0, 0, Fn);
1545}
1546
1547//===----------------------------------------------------------------------===//
1548// Emit Methods
1549//===----------------------------------------------------------------------===//
1550
1551/// computeSizeAndOffset - Compute the size and offset of a DIE.
1552///
1553unsigned
1554DwarfDebug::computeSizeAndOffset(DIE *Die, unsigned Offset, bool Last) {
1555  // Get the children.
1556  const std::vector<DIE *> &Children = Die->getChildren();
1557
1558  // If not last sibling and has children then add sibling offset attribute.
1559  if (!Last && !Children.empty())
1560    Die->addSiblingOffset(DIEValueAllocator);
1561
1562  // Record the abbreviation.
1563  assignAbbrevNumber(Die->getAbbrev());
1564
1565  // Get the abbreviation for this DIE.
1566  unsigned AbbrevNumber = Die->getAbbrevNumber();
1567  const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
1568
1569  // Set DIE offset
1570  Die->setOffset(Offset);
1571
1572  // Start the size with the size of abbreviation code.
1573  Offset += MCAsmInfo::getULEB128Size(AbbrevNumber);
1574
1575  const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1576  const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1577
1578  // Size the DIE attribute values.
1579  for (unsigned i = 0, N = Values.size(); i < N; ++i)
1580    // Size attribute value.
1581    Offset += Values[i]->SizeOf(Asm, AbbrevData[i].getForm());
1582
1583  // Size the DIE children if any.
1584  if (!Children.empty()) {
1585    assert(Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes &&
1586           "Children flag not set");
1587
1588    for (unsigned j = 0, M = Children.size(); j < M; ++j)
1589      Offset = computeSizeAndOffset(Children[j], Offset, (j + 1) == M);
1590
1591    // End of children marker.
1592    Offset += sizeof(int8_t);
1593  }
1594
1595  Die->setSize(Offset - Die->getOffset());
1596  return Offset;
1597}
1598
1599/// computeSizeAndOffsets - Compute the size and offset of all the DIEs.
1600///
1601void DwarfDebug::computeSizeAndOffsets() {
1602  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1603         E = CUMap.end(); I != E; ++I) {
1604    // Compute size of compile unit header.
1605    unsigned Offset =
1606      sizeof(int32_t) + // Length of Compilation Unit Info
1607      sizeof(int16_t) + // DWARF version number
1608      sizeof(int32_t) + // Offset Into Abbrev. Section
1609      sizeof(int8_t);   // Pointer Size (in bytes)
1610    computeSizeAndOffset(I->second->getCUDie(), Offset, true);
1611  }
1612}
1613
1614/// EmitSectionSym - Switch to the specified MCSection and emit an assembler
1615/// temporary label to it if SymbolStem is specified.
1616static MCSymbol *EmitSectionSym(AsmPrinter *Asm, const MCSection *Section,
1617                                const char *SymbolStem = 0) {
1618  Asm->OutStreamer.SwitchSection(Section);
1619  if (!SymbolStem) return 0;
1620
1621  MCSymbol *TmpSym = Asm->GetTempSymbol(SymbolStem);
1622  Asm->OutStreamer.EmitLabel(TmpSym);
1623  return TmpSym;
1624}
1625
1626/// EmitSectionLabels - Emit initial Dwarf sections with a label at
1627/// the start of each one.
1628void DwarfDebug::EmitSectionLabels() {
1629  const TargetLoweringObjectFile &TLOF = Asm->getObjFileLowering();
1630
1631  // Dwarf sections base addresses.
1632  DwarfInfoSectionSym =
1633    EmitSectionSym(Asm, TLOF.getDwarfInfoSection(), "section_info");
1634  DwarfAbbrevSectionSym =
1635    EmitSectionSym(Asm, TLOF.getDwarfAbbrevSection(), "section_abbrev");
1636  EmitSectionSym(Asm, TLOF.getDwarfARangesSection());
1637
1638  if (const MCSection *MacroInfo = TLOF.getDwarfMacroInfoSection())
1639    EmitSectionSym(Asm, MacroInfo);
1640
1641  EmitSectionSym(Asm, TLOF.getDwarfLineSection(), "section_line");
1642  EmitSectionSym(Asm, TLOF.getDwarfLocSection());
1643  EmitSectionSym(Asm, TLOF.getDwarfPubNamesSection());
1644  EmitSectionSym(Asm, TLOF.getDwarfPubTypesSection());
1645  DwarfStrSectionSym =
1646    EmitSectionSym(Asm, TLOF.getDwarfStrSection(), "section_str");
1647  DwarfDebugRangeSectionSym = EmitSectionSym(Asm, TLOF.getDwarfRangesSection(),
1648                                             "debug_range");
1649
1650  DwarfDebugLocSectionSym = EmitSectionSym(Asm, TLOF.getDwarfLocSection(),
1651                                           "section_debug_loc");
1652
1653  TextSectionSym = EmitSectionSym(Asm, TLOF.getTextSection(), "text_begin");
1654  EmitSectionSym(Asm, TLOF.getDataSection());
1655}
1656
1657/// emitDIE - Recursively emits a debug information entry.
1658///
1659void DwarfDebug::emitDIE(DIE *Die) {
1660  // Get the abbreviation for this DIE.
1661  unsigned AbbrevNumber = Die->getAbbrevNumber();
1662  const DIEAbbrev *Abbrev = Abbreviations[AbbrevNumber - 1];
1663
1664  // Emit the code (index) for the abbreviation.
1665  if (Asm->isVerbose())
1666    Asm->OutStreamer.AddComment("Abbrev [" + Twine(AbbrevNumber) + "] 0x" +
1667                                Twine::utohexstr(Die->getOffset()) + ":0x" +
1668                                Twine::utohexstr(Die->getSize()) + " " +
1669                                dwarf::TagString(Abbrev->getTag()));
1670  Asm->EmitULEB128(AbbrevNumber);
1671
1672  const SmallVector<DIEValue*, 32> &Values = Die->getValues();
1673  const SmallVector<DIEAbbrevData, 8> &AbbrevData = Abbrev->getData();
1674
1675  // Emit the DIE attribute values.
1676  for (unsigned i = 0, N = Values.size(); i < N; ++i) {
1677    unsigned Attr = AbbrevData[i].getAttribute();
1678    unsigned Form = AbbrevData[i].getForm();
1679    assert(Form && "Too many attributes for DIE (check abbreviation)");
1680
1681    if (Asm->isVerbose())
1682      Asm->OutStreamer.AddComment(dwarf::AttributeString(Attr));
1683
1684    switch (Attr) {
1685    case dwarf::DW_AT_sibling:
1686      Asm->EmitInt32(Die->getSiblingOffset());
1687      break;
1688    case dwarf::DW_AT_abstract_origin: {
1689      DIEEntry *E = cast<DIEEntry>(Values[i]);
1690      DIE *Origin = E->getEntry();
1691      unsigned Addr = Origin->getOffset();
1692      Asm->EmitInt32(Addr);
1693      break;
1694    }
1695    case dwarf::DW_AT_ranges: {
1696      // DW_AT_range Value encodes offset in debug_range section.
1697      DIEInteger *V = cast<DIEInteger>(Values[i]);
1698
1699      if (Asm->MAI->doesDwarfUsesLabelOffsetForRanges()) {
1700        Asm->EmitLabelPlusOffset(DwarfDebugRangeSectionSym,
1701                                 V->getValue(),
1702                                 4);
1703      } else {
1704        Asm->EmitLabelOffsetDifference(DwarfDebugRangeSectionSym,
1705                                       V->getValue(),
1706                                       DwarfDebugRangeSectionSym,
1707                                       4);
1708      }
1709      break;
1710    }
1711    case dwarf::DW_AT_location: {
1712      if (UseDotDebugLocEntry.count(Die) != 0) {
1713        DIELabel *L = cast<DIELabel>(Values[i]);
1714        Asm->EmitLabelDifference(L->getValue(), DwarfDebugLocSectionSym, 4);
1715      } else
1716        Values[i]->EmitValue(Asm, Form);
1717      break;
1718    }
1719    case dwarf::DW_AT_accessibility: {
1720      if (Asm->isVerbose()) {
1721        DIEInteger *V = cast<DIEInteger>(Values[i]);
1722        Asm->OutStreamer.AddComment(dwarf::AccessibilityString(V->getValue()));
1723      }
1724      Values[i]->EmitValue(Asm, Form);
1725      break;
1726    }
1727    default:
1728      // Emit an attribute using the defined form.
1729      Values[i]->EmitValue(Asm, Form);
1730      break;
1731    }
1732  }
1733
1734  // Emit the DIE children if any.
1735  if (Abbrev->getChildrenFlag() == dwarf::DW_CHILDREN_yes) {
1736    const std::vector<DIE *> &Children = Die->getChildren();
1737
1738    for (unsigned j = 0, M = Children.size(); j < M; ++j)
1739      emitDIE(Children[j]);
1740
1741    if (Asm->isVerbose())
1742      Asm->OutStreamer.AddComment("End Of Children Mark");
1743    Asm->EmitInt8(0);
1744  }
1745}
1746
1747/// emitDebugInfo - Emit the debug info section.
1748///
1749void DwarfDebug::emitDebugInfo() {
1750  // Start debug info section.
1751  Asm->OutStreamer.SwitchSection(
1752                            Asm->getObjFileLowering().getDwarfInfoSection());
1753  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1754         E = CUMap.end(); I != E; ++I) {
1755    CompileUnit *TheCU = I->second;
1756    DIE *Die = TheCU->getCUDie();
1757
1758    // Emit the compile units header.
1759    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_begin",
1760                                                  TheCU->getID()));
1761
1762    // Emit size of content not including length itself
1763    unsigned ContentSize = Die->getSize() +
1764      sizeof(int16_t) + // DWARF version number
1765      sizeof(int32_t) + // Offset Into Abbrev. Section
1766      sizeof(int8_t);   // Pointer Size (in bytes)
1767
1768    Asm->OutStreamer.AddComment("Length of Compilation Unit Info");
1769    Asm->EmitInt32(ContentSize);
1770    Asm->OutStreamer.AddComment("DWARF version number");
1771    Asm->EmitInt16(dwarf::DWARF_VERSION);
1772    Asm->OutStreamer.AddComment("Offset Into Abbrev. Section");
1773    Asm->EmitSectionOffset(Asm->GetTempSymbol("abbrev_begin"),
1774                           DwarfAbbrevSectionSym);
1775    Asm->OutStreamer.AddComment("Address Size (in bytes)");
1776    Asm->EmitInt8(Asm->getTargetData().getPointerSize());
1777
1778    emitDIE(Die);
1779    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("info_end", TheCU->getID()));
1780  }
1781}
1782
1783/// emitAbbreviations - Emit the abbreviation section.
1784///
1785void DwarfDebug::emitAbbreviations() const {
1786  // Check to see if it is worth the effort.
1787  if (!Abbreviations.empty()) {
1788    // Start the debug abbrev section.
1789    Asm->OutStreamer.SwitchSection(
1790                            Asm->getObjFileLowering().getDwarfAbbrevSection());
1791
1792    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_begin"));
1793
1794    // For each abbrevation.
1795    for (unsigned i = 0, N = Abbreviations.size(); i < N; ++i) {
1796      // Get abbreviation data
1797      const DIEAbbrev *Abbrev = Abbreviations[i];
1798
1799      // Emit the abbrevations code (base 1 index.)
1800      Asm->EmitULEB128(Abbrev->getNumber(), "Abbreviation Code");
1801
1802      // Emit the abbreviations data.
1803      Abbrev->Emit(Asm);
1804    }
1805
1806    // Mark end of abbreviations.
1807    Asm->EmitULEB128(0, "EOM(3)");
1808
1809    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("abbrev_end"));
1810  }
1811}
1812
1813/// emitEndOfLineMatrix - Emit the last address of the section and the end of
1814/// the line matrix.
1815///
1816void DwarfDebug::emitEndOfLineMatrix(unsigned SectionEnd) {
1817  // Define last address of section.
1818  Asm->OutStreamer.AddComment("Extended Op");
1819  Asm->EmitInt8(0);
1820
1821  Asm->OutStreamer.AddComment("Op size");
1822  Asm->EmitInt8(Asm->getTargetData().getPointerSize() + 1);
1823  Asm->OutStreamer.AddComment("DW_LNE_set_address");
1824  Asm->EmitInt8(dwarf::DW_LNE_set_address);
1825
1826  Asm->OutStreamer.AddComment("Section end label");
1827
1828  Asm->OutStreamer.EmitSymbolValue(Asm->GetTempSymbol("section_end",SectionEnd),
1829                                   Asm->getTargetData().getPointerSize(),
1830                                   0/*AddrSpace*/);
1831
1832  // Mark end of matrix.
1833  Asm->OutStreamer.AddComment("DW_LNE_end_sequence");
1834  Asm->EmitInt8(0);
1835  Asm->EmitInt8(1);
1836  Asm->EmitInt8(1);
1837}
1838
1839/// emitDebugPubNames - Emit visible names into a debug pubnames section.
1840///
1841void DwarfDebug::emitDebugPubNames() {
1842  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1843         E = CUMap.end(); I != E; ++I) {
1844    CompileUnit *TheCU = I->second;
1845    // Start the dwarf pubnames section.
1846    Asm->OutStreamer.SwitchSection(
1847      Asm->getObjFileLowering().getDwarfPubNamesSection());
1848
1849    Asm->OutStreamer.AddComment("Length of Public Names Info");
1850    Asm->EmitLabelDifference(
1851      Asm->GetTempSymbol("pubnames_end", TheCU->getID()),
1852      Asm->GetTempSymbol("pubnames_begin", TheCU->getID()), 4);
1853
1854    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_begin",
1855                                                  TheCU->getID()));
1856
1857    Asm->OutStreamer.AddComment("DWARF Version");
1858    Asm->EmitInt16(dwarf::DWARF_VERSION);
1859
1860    Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
1861    Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
1862                           DwarfInfoSectionSym);
1863
1864    Asm->OutStreamer.AddComment("Compilation Unit Length");
1865    Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
1866                             Asm->GetTempSymbol("info_begin", TheCU->getID()),
1867                             4);
1868
1869    const StringMap<DIE*> &Globals = TheCU->getGlobals();
1870    for (StringMap<DIE*>::const_iterator
1871           GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
1872      const char *Name = GI->getKeyData();
1873      DIE *Entity = GI->second;
1874
1875      Asm->OutStreamer.AddComment("DIE offset");
1876      Asm->EmitInt32(Entity->getOffset());
1877
1878      if (Asm->isVerbose())
1879        Asm->OutStreamer.AddComment("External Name");
1880      Asm->OutStreamer.EmitBytes(StringRef(Name, strlen(Name)+1), 0);
1881    }
1882
1883    Asm->OutStreamer.AddComment("End Mark");
1884    Asm->EmitInt32(0);
1885    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubnames_end",
1886                                                  TheCU->getID()));
1887  }
1888}
1889
1890void DwarfDebug::emitDebugPubTypes() {
1891  for (DenseMap<const MDNode *, CompileUnit *>::iterator I = CUMap.begin(),
1892         E = CUMap.end(); I != E; ++I) {
1893    CompileUnit *TheCU = I->second;
1894    // Start the dwarf pubnames section.
1895    Asm->OutStreamer.SwitchSection(
1896      Asm->getObjFileLowering().getDwarfPubTypesSection());
1897    Asm->OutStreamer.AddComment("Length of Public Types Info");
1898    Asm->EmitLabelDifference(
1899      Asm->GetTempSymbol("pubtypes_end", TheCU->getID()),
1900      Asm->GetTempSymbol("pubtypes_begin", TheCU->getID()), 4);
1901
1902    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_begin",
1903                                                  TheCU->getID()));
1904
1905    if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DWARF Version");
1906    Asm->EmitInt16(dwarf::DWARF_VERSION);
1907
1908    Asm->OutStreamer.AddComment("Offset of Compilation Unit Info");
1909    Asm->EmitSectionOffset(Asm->GetTempSymbol("info_begin", TheCU->getID()),
1910                           DwarfInfoSectionSym);
1911
1912    Asm->OutStreamer.AddComment("Compilation Unit Length");
1913    Asm->EmitLabelDifference(Asm->GetTempSymbol("info_end", TheCU->getID()),
1914                             Asm->GetTempSymbol("info_begin", TheCU->getID()),
1915                             4);
1916
1917    const StringMap<DIE*> &Globals = TheCU->getGlobalTypes();
1918    for (StringMap<DIE*>::const_iterator
1919           GI = Globals.begin(), GE = Globals.end(); GI != GE; ++GI) {
1920      const char *Name = GI->getKeyData();
1921      DIE *Entity = GI->second;
1922
1923      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
1924      Asm->EmitInt32(Entity->getOffset());
1925
1926      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("External Name");
1927      Asm->OutStreamer.EmitBytes(StringRef(Name, GI->getKeyLength()+1), 0);
1928    }
1929
1930    Asm->OutStreamer.AddComment("End Mark");
1931    Asm->EmitInt32(0);
1932    Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("pubtypes_end",
1933                                                  TheCU->getID()));
1934  }
1935}
1936
1937/// emitDebugStr - Emit visible names into a debug str section.
1938///
1939void DwarfDebug::emitDebugStr() {
1940  // Check to see if it is worth the effort.
1941  if (StringPool.empty()) return;
1942
1943  // Start the dwarf str section.
1944  Asm->OutStreamer.SwitchSection(
1945                                Asm->getObjFileLowering().getDwarfStrSection());
1946
1947  // Get all of the string pool entries and put them in an array by their ID so
1948  // we can sort them.
1949  SmallVector<std::pair<unsigned,
1950      StringMapEntry<std::pair<MCSymbol*, unsigned> >*>, 64> Entries;
1951
1952  for (StringMap<std::pair<MCSymbol*, unsigned> >::iterator
1953       I = StringPool.begin(), E = StringPool.end(); I != E; ++I)
1954    Entries.push_back(std::make_pair(I->second.second, &*I));
1955
1956  array_pod_sort(Entries.begin(), Entries.end());
1957
1958  for (unsigned i = 0, e = Entries.size(); i != e; ++i) {
1959    // Emit a label for reference from debug information entries.
1960    Asm->OutStreamer.EmitLabel(Entries[i].second->getValue().first);
1961
1962    // Emit the string itself.
1963    Asm->OutStreamer.EmitBytes(Entries[i].second->getKey(), 0/*addrspace*/);
1964  }
1965}
1966
1967/// emitDebugLoc - Emit visible names into a debug loc section.
1968///
1969void DwarfDebug::emitDebugLoc() {
1970  if (DotDebugLocEntries.empty())
1971    return;
1972
1973  for (SmallVector<DotDebugLocEntry, 4>::iterator
1974         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
1975       I != E; ++I) {
1976    DotDebugLocEntry &Entry = *I;
1977    if (I + 1 != DotDebugLocEntries.end())
1978      Entry.Merge(I+1);
1979  }
1980
1981  // Start the dwarf loc section.
1982  Asm->OutStreamer.SwitchSection(
1983    Asm->getObjFileLowering().getDwarfLocSection());
1984  unsigned char Size = Asm->getTargetData().getPointerSize();
1985  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", 0));
1986  unsigned index = 1;
1987  for (SmallVector<DotDebugLocEntry, 4>::iterator
1988         I = DotDebugLocEntries.begin(), E = DotDebugLocEntries.end();
1989       I != E; ++I, ++index) {
1990    DotDebugLocEntry &Entry = *I;
1991    if (Entry.isMerged()) continue;
1992    if (Entry.isEmpty()) {
1993      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
1994      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
1995      Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_loc", index));
1996    } else {
1997      Asm->OutStreamer.EmitSymbolValue(Entry.Begin, Size, 0);
1998      Asm->OutStreamer.EmitSymbolValue(Entry.End, Size, 0);
1999      DIVariable DV(Entry.Variable);
2000      Asm->OutStreamer.AddComment("Loc expr size");
2001      MCSymbol *begin = Asm->OutStreamer.getContext().CreateTempSymbol();
2002      MCSymbol *end = Asm->OutStreamer.getContext().CreateTempSymbol();
2003      Asm->EmitLabelDifference(end, begin, 2);
2004      Asm->OutStreamer.EmitLabel(begin);
2005      if (Entry.isInt()) {
2006        DIBasicType BTy(DV.getType());
2007        if (BTy.Verify() &&
2008            (BTy.getEncoding()  == dwarf::DW_ATE_signed
2009             || BTy.getEncoding() == dwarf::DW_ATE_signed_char)) {
2010          Asm->OutStreamer.AddComment("DW_OP_consts");
2011          Asm->EmitInt8(dwarf::DW_OP_consts);
2012          Asm->EmitSLEB128(Entry.getInt());
2013        } else {
2014          Asm->OutStreamer.AddComment("DW_OP_constu");
2015          Asm->EmitInt8(dwarf::DW_OP_constu);
2016          Asm->EmitULEB128(Entry.getInt());
2017        }
2018      } else if (Entry.isLocation()) {
2019        if (!DV.hasComplexAddress())
2020          // Regular entry.
2021          Asm->EmitDwarfRegOp(Entry.Loc);
2022        else {
2023          // Complex address entry.
2024          unsigned N = DV.getNumAddrElements();
2025          unsigned i = 0;
2026          if (N >= 2 && DV.getAddrElement(0) == DIBuilder::OpPlus) {
2027            if (Entry.Loc.getOffset()) {
2028              i = 2;
2029              Asm->EmitDwarfRegOp(Entry.Loc);
2030              Asm->OutStreamer.AddComment("DW_OP_deref");
2031              Asm->EmitInt8(dwarf::DW_OP_deref);
2032              Asm->OutStreamer.AddComment("DW_OP_plus_uconst");
2033              Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2034              Asm->EmitSLEB128(DV.getAddrElement(1));
2035            } else {
2036              // If first address element is OpPlus then emit
2037              // DW_OP_breg + Offset instead of DW_OP_reg + Offset.
2038              MachineLocation Loc(Entry.Loc.getReg(), DV.getAddrElement(1));
2039              Asm->EmitDwarfRegOp(Loc);
2040              i = 2;
2041            }
2042          } else {
2043            Asm->EmitDwarfRegOp(Entry.Loc);
2044          }
2045
2046          // Emit remaining complex address elements.
2047          for (; i < N; ++i) {
2048            uint64_t Element = DV.getAddrElement(i);
2049            if (Element == DIBuilder::OpPlus) {
2050              Asm->EmitInt8(dwarf::DW_OP_plus_uconst);
2051              Asm->EmitULEB128(DV.getAddrElement(++i));
2052            } else if (Element == DIBuilder::OpDeref)
2053              Asm->EmitInt8(dwarf::DW_OP_deref);
2054            else llvm_unreachable("unknown Opcode found in complex address");
2055          }
2056        }
2057      }
2058      // else ... ignore constant fp. There is not any good way to
2059      // to represent them here in dwarf.
2060      Asm->OutStreamer.EmitLabel(end);
2061    }
2062  }
2063}
2064
2065/// EmitDebugARanges - Emit visible names into a debug aranges section.
2066///
2067void DwarfDebug::EmitDebugARanges() {
2068  // Start the dwarf aranges section.
2069  Asm->OutStreamer.SwitchSection(
2070                          Asm->getObjFileLowering().getDwarfARangesSection());
2071}
2072
2073/// emitDebugRanges - Emit visible names into a debug ranges section.
2074///
2075void DwarfDebug::emitDebugRanges() {
2076  // Start the dwarf ranges section.
2077  Asm->OutStreamer.SwitchSection(
2078    Asm->getObjFileLowering().getDwarfRangesSection());
2079  unsigned char Size = Asm->getTargetData().getPointerSize();
2080  for (SmallVector<const MCSymbol *, 8>::iterator
2081         I = DebugRangeSymbols.begin(), E = DebugRangeSymbols.end();
2082       I != E; ++I) {
2083    if (*I)
2084      Asm->OutStreamer.EmitSymbolValue(const_cast<MCSymbol*>(*I), Size, 0);
2085    else
2086      Asm->OutStreamer.EmitIntValue(0, Size, /*addrspace*/0);
2087  }
2088}
2089
2090/// emitDebugMacInfo - Emit visible names into a debug macinfo section.
2091///
2092void DwarfDebug::emitDebugMacInfo() {
2093  if (const MCSection *LineInfo =
2094      Asm->getObjFileLowering().getDwarfMacroInfoSection()) {
2095    // Start the dwarf macinfo section.
2096    Asm->OutStreamer.SwitchSection(LineInfo);
2097  }
2098}
2099
2100/// emitDebugInlineInfo - Emit inline info using following format.
2101/// Section Header:
2102/// 1. length of section
2103/// 2. Dwarf version number
2104/// 3. address size.
2105///
2106/// Entries (one "entry" for each function that was inlined):
2107///
2108/// 1. offset into __debug_str section for MIPS linkage name, if exists;
2109///   otherwise offset into __debug_str for regular function name.
2110/// 2. offset into __debug_str section for regular function name.
2111/// 3. an unsigned LEB128 number indicating the number of distinct inlining
2112/// instances for the function.
2113///
2114/// The rest of the entry consists of a {die_offset, low_pc} pair for each
2115/// inlined instance; the die_offset points to the inlined_subroutine die in the
2116/// __debug_info section, and the low_pc is the starting address for the
2117/// inlining instance.
2118void DwarfDebug::emitDebugInlineInfo() {
2119  if (!Asm->MAI->doesDwarfUsesInlineInfoSection())
2120    return;
2121
2122  if (!FirstCU)
2123    return;
2124
2125  Asm->OutStreamer.SwitchSection(
2126                        Asm->getObjFileLowering().getDwarfDebugInlineSection());
2127
2128  Asm->OutStreamer.AddComment("Length of Debug Inlined Information Entry");
2129  Asm->EmitLabelDifference(Asm->GetTempSymbol("debug_inlined_end", 1),
2130                           Asm->GetTempSymbol("debug_inlined_begin", 1), 4);
2131
2132  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_begin", 1));
2133
2134  Asm->OutStreamer.AddComment("Dwarf Version");
2135  Asm->EmitInt16(dwarf::DWARF_VERSION);
2136  Asm->OutStreamer.AddComment("Address Size (in bytes)");
2137  Asm->EmitInt8(Asm->getTargetData().getPointerSize());
2138
2139  for (SmallVector<const MDNode *, 4>::iterator I = InlinedSPNodes.begin(),
2140         E = InlinedSPNodes.end(); I != E; ++I) {
2141
2142    const MDNode *Node = *I;
2143    DenseMap<const MDNode *, SmallVector<InlineInfoLabels, 4> >::iterator II
2144      = InlineInfo.find(Node);
2145    SmallVector<InlineInfoLabels, 4> &Labels = II->second;
2146    DISubprogram SP(Node);
2147    StringRef LName = SP.getLinkageName();
2148    StringRef Name = SP.getName();
2149
2150    Asm->OutStreamer.AddComment("MIPS linkage name");
2151    if (LName.empty()) {
2152      Asm->OutStreamer.EmitBytes(Name, 0);
2153      Asm->OutStreamer.EmitIntValue(0, 1, 0); // nul terminator.
2154    } else
2155      Asm->EmitSectionOffset(getStringPoolEntry(getRealLinkageName(LName)),
2156                             DwarfStrSectionSym);
2157
2158    Asm->OutStreamer.AddComment("Function name");
2159    Asm->EmitSectionOffset(getStringPoolEntry(Name), DwarfStrSectionSym);
2160    Asm->EmitULEB128(Labels.size(), "Inline count");
2161
2162    for (SmallVector<InlineInfoLabels, 4>::iterator LI = Labels.begin(),
2163           LE = Labels.end(); LI != LE; ++LI) {
2164      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("DIE offset");
2165      Asm->EmitInt32(LI->second->getOffset());
2166
2167      if (Asm->isVerbose()) Asm->OutStreamer.AddComment("low_pc");
2168      Asm->OutStreamer.EmitSymbolValue(LI->first,
2169                                       Asm->getTargetData().getPointerSize(),0);
2170    }
2171  }
2172
2173  Asm->OutStreamer.EmitLabel(Asm->GetTempSymbol("debug_inlined_end", 1));
2174}
2175