Make sure that debug labels are defined within the same section and after the

entry point of a function.

llvm-svn: 27494
This commit is contained in:
Jim Laskey 2006-04-07 20:44:42 +00:00
parent 292574fbbc
commit c0d6518f27
5 changed files with 20 additions and 23 deletions

View File

@ -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.

View File

@ -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);
}

View File

@ -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) {

View File

@ -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) {

View File

@ -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();