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 | 6b92b8e50d7e5b48407865c3aaf9966c01416c69 (patch) | |
tree | f88fd307e529d565a4ad90b38659fb69f99fa7e8 | |
parent | 8f5690259281281cd2a3d7e774a8f375b6e8ff3e (diff) |
Make sure that debug labels are defined within the same section and after the
entry point of a function.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27494 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/CodeGen/DwarfWriter.h | 4 | ||||
-rw-r--r-- | lib/CodeGen/DwarfWriter.cpp | 13 | ||||
-rw-r--r-- | lib/Target/PowerPC/PPCAsmPrinter.cpp | 6 | ||||
-rwxr-xr-x | lib/Target/X86/X86ATTAsmPrinter.cpp | 10 | ||||
-rwxr-xr-x | lib/Target/X86/X86IntelAsmPrinter.cpp | 10 |
5 files changed, 20 insertions, 23 deletions
diff --git a/include/llvm/CodeGen/DwarfWriter.h b/include/llvm/CodeGen/DwarfWriter.h index 34c69b907d..e5882777db 100644 --- a/include/llvm/CodeGen/DwarfWriter.h +++ b/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/lib/CodeGen/DwarfWriter.cpp b/lib/CodeGen/DwarfWriter.cpp index 19b1d8409c..ab00a99853 100644 --- a/lib/CodeGen/DwarfWriter.cpp +++ b/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/lib/Target/PowerPC/PPCAsmPrinter.cpp b/lib/Target/PowerPC/PPCAsmPrinter.cpp index 7645a87510..b34bf9a8a2 100644 --- a/lib/Target/PowerPC/PPCAsmPrinter.cpp +++ b/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/lib/Target/X86/X86ATTAsmPrinter.cpp b/lib/Target/X86/X86ATTAsmPrinter.cpp index 5b576b79c9..5a3490a703 100755 --- a/lib/Target/X86/X86ATTAsmPrinter.cpp +++ b/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/lib/Target/X86/X86IntelAsmPrinter.cpp b/lib/Target/X86/X86IntelAsmPrinter.cpp index c49f892a5a..718a95b9ab 100755 --- a/lib/Target/X86/X86IntelAsmPrinter.cpp +++ b/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(); |