diff options
author | Evan Cheng <evan.cheng@apple.com> | 2006-03-07 02:23:26 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2006-03-07 02:23:26 +0000 |
commit | d594881a28a3351395118619176dfe42410b3c44 (patch) | |
tree | 1fbab14b6a7f3210cbe903ac4b91a09474e4a1af | |
parent | 3c992d291bc67d9ce9d742d586d24ade9a577c99 (diff) | |
download | external_llvm-d594881a28a3351395118619176dfe42410b3c44.zip external_llvm-d594881a28a3351395118619176dfe42410b3c44.tar.gz external_llvm-d594881a28a3351395118619176dfe42410b3c44.tar.bz2 |
- Emit subsections_via_symbols for Darwin.
- Conditionalize Dwarf debugging output (Darwin only for now).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@26582 91177308-0d34-0410-b5e6-96231b3b80d8
-rwxr-xr-x | lib/Target/X86/X86ATTAsmPrinter.cpp | 20 | ||||
-rw-r--r-- | lib/Target/X86/X86AsmPrinter.cpp | 19 | ||||
-rwxr-xr-x | lib/Target/X86/X86AsmPrinter.h | 2 | ||||
-rwxr-xr-x | lib/Target/X86/X86IntelAsmPrinter.cpp | 20 |
4 files changed, 41 insertions, 20 deletions
diff --git a/lib/Target/X86/X86ATTAsmPrinter.cpp b/lib/Target/X86/X86ATTAsmPrinter.cpp index e50100e..f1b53fd 100755 --- a/lib/Target/X86/X86ATTAsmPrinter.cpp +++ b/lib/Target/X86/X86ATTAsmPrinter.cpp @@ -27,15 +27,19 @@ using namespace x86; /// method to print assembly for each instruction. /// bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) { - // Let PassManager know we need debug information and relay - // the MachineDebugInfo address on to DwarfWriter. - DW.SetDebugInfo(&getAnalysis<MachineDebugInfo>()); + // if (forDarwin) { + // Let PassManager know we need debug information and relay + // the MachineDebugInfo address on to DwarfWriter. + DW.SetDebugInfo(&getAnalysis<MachineDebugInfo>()); + // } SetupMachineFunction(MF); O << "\n\n"; - // Emit pre-function debug information. - DW.BeginFunction(MF); + if (forDarwin) { + // Emit pre-function debug information. + DW.BeginFunction(MF); + } // Print out constants referenced by the function EmitConstantPool(MF.getConstantPool()); @@ -88,8 +92,10 @@ bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) { if (HasDotTypeDotSizeDirective) O << "\t.size " << CurrentFnName << ", .-" << CurrentFnName << "\n"; - // Emit post-function debug information. - DW.EndFunction(MF); + if (forDarwin) { + // Emit post-function debug information. + DW.EndFunction(MF); + } // We didn't modify anything. return false; diff --git a/lib/Target/X86/X86AsmPrinter.cpp b/lib/Target/X86/X86AsmPrinter.cpp index edc2397..a5e7008 100644 --- a/lib/Target/X86/X86AsmPrinter.cpp +++ b/lib/Target/X86/X86AsmPrinter.cpp @@ -75,8 +75,10 @@ bool X86SharedAsmPrinter::doInitialization(Module &M) { default: break; } - // Emit initial debug information. - DW.BeginModule(M); + if (forDarwin) { + // Emit initial debug information. + DW.BeginModule(M); + } return AsmPrinter::doInitialization(M); } @@ -188,10 +190,17 @@ bool X86SharedAsmPrinter::doFinalization(Module &M) { O << "\t.indirect_symbol " << *i << "\n"; O << "\t.long\t0\n"; } - } - // Emit initial debug information. - DW.EndModule(M); + // Emit initial debug information. + DW.EndModule(M); + + // Funny Darwin hack: This flag tells the linker that no global symbols + // contain code that falls through to other global symbols (e.g. the obvious + // implementation of multiple entry points). If this doesn't occur, the + // linker can safely perform dead code stripping. Since LLVM never generates + // code that does this, it is always safe to set. + O << "\t.subsections_via_symbols\n"; + } AsmPrinter::doFinalization(M); return false; // success diff --git a/lib/Target/X86/X86AsmPrinter.h b/lib/Target/X86/X86AsmPrinter.h index 5b27c56..ed0fdbe 100755 --- a/lib/Target/X86/X86AsmPrinter.h +++ b/lib/Target/X86/X86AsmPrinter.h @@ -68,7 +68,7 @@ struct X86SharedAsmPrinter : public AsmPrinter { MachineFunctionPass::getAnalysisUsage(AU); } - bool forDarwin; // FIXME: eliminate. + bool forDarwin; // FIXME: eliminate. // Necessary for Darwin to print out the apprioriate types of linker stubs std::set<std::string> FnStubs, GVStubs, LinkOnceStubs; diff --git a/lib/Target/X86/X86IntelAsmPrinter.cpp b/lib/Target/X86/X86IntelAsmPrinter.cpp index 5bc8b24..a04dfca 100755 --- a/lib/Target/X86/X86IntelAsmPrinter.cpp +++ b/lib/Target/X86/X86IntelAsmPrinter.cpp @@ -26,15 +26,19 @@ using namespace x86; /// method to print assembly for each instruction. /// bool X86IntelAsmPrinter::runOnMachineFunction(MachineFunction &MF) { - // Let PassManager know we need debug information and relay - // the MachineDebugInfo address on to DwarfWriter. - DW.SetDebugInfo(&getAnalysis<MachineDebugInfo>()); + if (forDarwin) { + // Let PassManager know we need debug information and relay + // the MachineDebugInfo address on to DwarfWriter. + DW.SetDebugInfo(&getAnalysis<MachineDebugInfo>()); + } SetupMachineFunction(MF); O << "\n\n"; - // Emit pre-function debug information. - DW.BeginFunction(MF); + if (forDarwin) { + // Emit pre-function debug information. + DW.BeginFunction(MF); + } // Print out constants referenced by the function EmitConstantPool(MF.getConstantPool()); @@ -63,8 +67,10 @@ bool X86IntelAsmPrinter::runOnMachineFunction(MachineFunction &MF) { } } - // Emit post-function debug information. - DW.EndFunction(MF); + if (forDarwin) { + // Emit post-function debug information. + DW.EndFunction(MF); + } // We didn't modify anything. return false; |