aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2006-03-07 02:23:26 +0000
committerEvan Cheng <evan.cheng@apple.com>2006-03-07 02:23:26 +0000
commitd594881a28a3351395118619176dfe42410b3c44 (patch)
tree1fbab14b6a7f3210cbe903ac4b91a09474e4a1af
parent3c992d291bc67d9ce9d742d586d24ade9a577c99 (diff)
downloadexternal_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-xlib/Target/X86/X86ATTAsmPrinter.cpp20
-rw-r--r--lib/Target/X86/X86AsmPrinter.cpp19
-rwxr-xr-xlib/Target/X86/X86AsmPrinter.h2
-rwxr-xr-xlib/Target/X86/X86IntelAsmPrinter.cpp20
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;