diff options
| author | Jim Laskey <jlaskey@mac.com> | 2006-04-07 20:44:42 +0000 | 
|---|---|---|
| committer | Jim Laskey <jlaskey@mac.com> | 2006-04-07 20:44:42 +0000 | 
| commit | c0d6518f276cd4980e9dd2433572846bc55480ef (patch) | |
| tree | cc500cf2e4ab9a7098f1d2dccef20c8fb1401b7b | |
| parent | 292574fbbc4682cd765dfddf8836053a479085c0 (diff) | |
| download | bcm5719-llvm-c0d6518f276cd4980e9dd2433572846bc55480ef.tar.gz bcm5719-llvm-c0d6518f276cd4980e9dd2433572846bc55480ef.zip | |
Make sure that debug labels are defined within the same section and after the
entry point of a function.
llvm-svn: 27494
| -rw-r--r-- | llvm/include/llvm/CodeGen/DwarfWriter.h | 4 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/DwarfWriter.cpp | 13 | ||||
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp | 6 | ||||
| -rwxr-xr-x | llvm/lib/Target/X86/X86ATTAsmPrinter.cpp | 10 | ||||
| -rwxr-xr-x | llvm/lib/Target/X86/X86IntelAsmPrinter.cpp | 10 | 
5 files changed, 20 insertions, 23 deletions
| diff --git a/llvm/include/llvm/CodeGen/DwarfWriter.h b/llvm/include/llvm/CodeGen/DwarfWriter.h index 34c69b907de..e5882777db4 100644 --- a/llvm/include/llvm/CodeGen/DwarfWriter.h +++ b/llvm/include/llvm/CodeGen/DwarfWriter.h @@ -472,8 +472,8 @@ public:    ///    void EndModule(); -  /// BeginFunction - Gather pre-function debug information. -  /// +  /// BeginFunction - Gather pre-function debug information.  Assumes being  +  /// emitted immediately after the function entry point.    void BeginFunction(MachineFunction *MF);    /// EndFunction - Gather and emit post-function debug information. diff --git a/llvm/lib/CodeGen/DwarfWriter.cpp b/llvm/lib/CodeGen/DwarfWriter.cpp index 19b1d8409c6..ab00a998530 100644 --- a/llvm/lib/CodeGen/DwarfWriter.cpp +++ b/llvm/lib/CodeGen/DwarfWriter.cpp @@ -1626,15 +1626,13 @@ void DwarfWriter::ConstructRootScope(DebugScope *RootScope) {    CompileUnitDesc *UnitDesc = static_cast<CompileUnitDesc *>(SPD->getContext());    CompileUnit *Unit = FindCompileUnit(UnitDesc); -  // Generate the mangled name. -  std::string MangledName = Asm->Mang->getValueName(MF->getFunction()); -      // Get the subprogram die.    DIE *SPDie = Unit->getDieMapSlotFor(SPD);    assert(SPDie && "Missing subprogram descriptor");    // Add the function bounds. -  SPDie->AddObjectLabel(DW_AT_low_pc, DW_FORM_addr, MangledName); +  SPDie->AddLabel(DW_AT_low_pc, DW_FORM_addr, +                  DWLabel("func_begin", SubprogramCount));    SPDie->AddLabel(DW_AT_high_pc, DW_FORM_addr,                    DWLabel("func_end", SubprogramCount));    MachineLocation Location(RI->getFrameRegister(*MF)); @@ -2408,8 +2406,8 @@ void DwarfWriter::EndModule() {    EmitDebugMacInfo();  } -/// BeginFunction - Gather pre-function debug information. -/// +/// BeginFunction - Gather pre-function debug information.  Assumes being  +/// emitted immediately after the function entry point.  void DwarfWriter::BeginFunction(MachineFunction *MF) {    this->MF = MF; @@ -2419,8 +2417,7 @@ void DwarfWriter::BeginFunction(MachineFunction *MF) {    if (!ShouldEmitDwarf()) return;    EOL("Dwarf Begin Function"); -  // Define begin label for subprogram. -  Asm->SwitchSection(TextSection, 0); +  // Assumes in correct section after the entry point.    EmitLabel("func_begin", ++SubprogramCount);  } diff --git a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp index 7645a875109..b34bf9a8a21 100644 --- a/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp +++ b/llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp @@ -511,9 +511,6 @@ bool DarwinAsmPrinter::runOnMachineFunction(MachineFunction &MF) {    SetupMachineFunction(MF);    O << "\n\n"; -  // Emit pre-function debug information. -  DW.BeginFunction(&MF); -    // Print out constants referenced by the function    EmitConstantPool(MF.getConstantPool()); @@ -539,6 +536,9 @@ bool DarwinAsmPrinter::runOnMachineFunction(MachineFunction &MF) {    EmitAlignment(4, F);    O << CurrentFnName << ":\n"; +  // Emit pre-function debug information. +  DW.BeginFunction(&MF); +    // Print out code for the function.    for (MachineFunction::const_iterator I = MF.begin(), E = MF.end();         I != E; ++I) { diff --git a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp index 5b576b79c91..5a3490a7034 100755 --- a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp +++ b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp @@ -35,11 +35,6 @@ bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) {    SetupMachineFunction(MF);    O << "\n\n"; -  if (forDarwin) { -    // Emit pre-function debug information. -    DW.BeginFunction(&MF); -  } -    // Print out constants referenced by the function    EmitConstantPool(MF.getConstantPool()); @@ -73,6 +68,11 @@ bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) {    }    O << CurrentFnName << ":\n"; +  if (forDarwin) { +    // Emit pre-function debug information. +    DW.BeginFunction(&MF); +  } +    // Print out code for the function.    for (MachineFunction::const_iterator I = MF.begin(), E = MF.end();         I != E; ++I) { diff --git a/llvm/lib/Target/X86/X86IntelAsmPrinter.cpp b/llvm/lib/Target/X86/X86IntelAsmPrinter.cpp index c49f892a5aa..718a95b9ab9 100755 --- a/llvm/lib/Target/X86/X86IntelAsmPrinter.cpp +++ b/llvm/lib/Target/X86/X86IntelAsmPrinter.cpp @@ -34,11 +34,6 @@ bool X86IntelAsmPrinter::runOnMachineFunction(MachineFunction &MF) {    SetupMachineFunction(MF);    O << "\n\n"; -  if (forDarwin) { -    // Emit pre-function debug information. -    DW.BeginFunction(&MF); -  } -    // Print out constants referenced by the function    EmitConstantPool(MF.getConstantPool()); @@ -49,6 +44,11 @@ bool X86IntelAsmPrinter::runOnMachineFunction(MachineFunction &MF) {    if (HasDotTypeDotSizeDirective)      O << "\t.type\t" << CurrentFnName << ", @function\n";    O << CurrentFnName << ":\n"; +   +  if (forDarwin) { +    // Emit pre-function debug information. +    DW.BeginFunction(&MF); +  }    // Print out code for the function.    for (MachineFunction::const_iterator I = MF.begin(), E = MF.end(); | 

