diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2010-12-04 00:31:13 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2010-12-04 00:31:13 +0000 |
commit | 767b1be3900bdc693aa0ad3e554ba034845f67f7 (patch) | |
tree | d3d76fda6dbf4315192bf1d611eee5cad2a56296 /lib/MC | |
parent | ceab50198ee0d1aa2468d868111e3cf7c0c56ebd (diff) | |
download | llvm-767b1be3900bdc693aa0ad3e554ba034845f67f7.tar.gz llvm-767b1be3900bdc693aa0ad3e554ba034845f67f7.tar.bz2 llvm-767b1be3900bdc693aa0ad3e554ba034845f67f7.tar.xz |
Next step: Only pad debug_line when the target is darwin. Add a FIXME to avoid
doing that if the target is darwin10 or newer.
This fixes
*) Direct object emission was producing objects without the workaround on
darwin9.
*) Assembly printing was producing objects with the workaround on linux.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120866 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC')
-rw-r--r-- | lib/MC/MCAsmInfo.cpp | 1 | ||||
-rw-r--r-- | lib/MC/MCAsmInfoDarwin.cpp | 3 | ||||
-rw-r--r-- | lib/MC/MCAsmStreamer.cpp | 3 | ||||
-rw-r--r-- | lib/MC/MCDwarf.cpp | 7 |
4 files changed, 9 insertions, 5 deletions
diff --git a/lib/MC/MCAsmInfo.cpp b/lib/MC/MCAsmInfo.cpp index 37444c9c25..9cf4019e31 100644 --- a/lib/MC/MCAsmInfo.cpp +++ b/lib/MC/MCAsmInfo.cpp @@ -23,6 +23,7 @@ MCAsmInfo::MCAsmInfo() { HasMachoZeroFillDirective = false; HasMachoTBSSDirective = false; HasStaticCtorDtorReferenceInStaticMode = false; + LinkerRequiresNonEmptyDwarfLines = false; MaxInstLength = 4; PCSymbol = "$"; SeparatorChar = ';'; diff --git a/lib/MC/MCAsmInfoDarwin.cpp b/lib/MC/MCAsmInfoDarwin.cpp index fd155135df..1147f02a59 100644 --- a/lib/MC/MCAsmInfoDarwin.cpp +++ b/lib/MC/MCAsmInfoDarwin.cpp @@ -37,6 +37,9 @@ MCAsmInfoDarwin::MCAsmInfoDarwin() { HasMachoZeroFillDirective = true; // Uses .zerofill HasMachoTBSSDirective = true; // Uses .tbss HasStaticCtorDtorReferenceInStaticMode = true; + + // FIXME: Darwin 10 and newer don't need this. + LinkerRequiresNonEmptyDwarfLines = true; HiddenVisibilityAttr = MCSA_PrivateExtern; // Doesn't support protected visibility. diff --git a/lib/MC/MCAsmStreamer.cpp b/lib/MC/MCAsmStreamer.cpp index 7189a90406..40a234ea85 100644 --- a/lib/MC/MCAsmStreamer.cpp +++ b/lib/MC/MCAsmStreamer.cpp @@ -896,8 +896,7 @@ void MCAsmStreamer::EmitRawText(StringRef String) { void MCAsmStreamer::Finish() { // Dump out the dwarf file & directory tables and line tables. if (getContext().hasDwarfFiles() && TLOF) - MCDwarfFileTable::Emit(this, TLOF->getDwarfLineSection(), - TLOF->getTextSection()); + MCDwarfFileTable::Emit(this, TLOF->getDwarfLineSection()); } MCStreamer *llvm::createAsmStreamer(MCContext &Context, diff --git a/lib/MC/MCDwarf.cpp b/lib/MC/MCDwarf.cpp index 194c324ab6..a33b0c596b 100644 --- a/lib/MC/MCDwarf.cpp +++ b/lib/MC/MCDwarf.cpp @@ -7,6 +7,7 @@ // //===----------------------------------------------------------------------===// +#include "llvm/MC/MCAsmInfo.h" #include "llvm/MC/MCDwarf.h" #include "llvm/MC/MCAssembler.h" #include "llvm/MC/MCStreamer.h" @@ -198,8 +199,7 @@ static inline void EmitDwarfLineTable(MCStreamer *MCOS, // This emits the Dwarf file and the line tables. // void MCDwarfFileTable::Emit(MCStreamer *MCOS, - const MCSection *DwarfLineSection, - const MCSection *TextSection) { + const MCSection *DwarfLineSection) { // Switch to the section where the table will be emitted into. MCOS->SwitchSection(DwarfLineSection); @@ -296,7 +296,8 @@ void MCDwarfFileTable::Emit(MCStreamer *MCOS, delete Line; } - if (TextSection && MCLineSectionOrder.begin() == MCLineSectionOrder.end()) { + if (MCOS->getContext().getAsmInfo().getLinkerRequiresNonEmptyDwarfLines() + && MCLineSectionOrder.begin() == MCLineSectionOrder.end()) { // The darwin9 linker has a bug (see PR8715). For for 32-bit architectures // it requires: // total_length >= prologue_length + 10 |