aboutsummaryrefslogtreecommitdiff
path: root/lib/MC/MCDwarf.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2010-12-03 23:36:59 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2010-12-03 23:36:59 +0000
commita8de83c68aaa03cafa0e3618fb8bf030b48f6540 (patch)
treefda8137c57c51a1291f874463b46b5422b4197c6 /lib/MC/MCDwarf.cpp
parentddb85acdbe2fa3a4ced01e8426d96b8fe9e22128 (diff)
First step in fixing MC. Make it clear that we are avoiding a bug in the
darwin9 linker, what is needed to avoid it and where to get more information. Also make the workaround simpler. Just the regular end_sequence we normally create is more than 4 bytes. Tested by building cctools and ld64 from darwin9 on a darwin10 system and using those. I checked that I was able to reproduce the bootstrap failure when the the workaround was disabled. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120854 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCDwarf.cpp')
-rw-r--r--lib/MC/MCDwarf.cpp19
1 files changed, 8 insertions, 11 deletions
diff --git a/lib/MC/MCDwarf.cpp b/lib/MC/MCDwarf.cpp
index 0916b054eb..194c324ab6 100644
--- a/lib/MC/MCDwarf.cpp
+++ b/lib/MC/MCDwarf.cpp
@@ -297,17 +297,14 @@ void MCDwarfFileTable::Emit(MCStreamer *MCOS,
}
if (TextSection && MCLineSectionOrder.begin() == MCLineSectionOrder.end()) {
- // Emit dummy entry if line table is empty.
-
- MCOS->SwitchSection(TextSection);
- MCSymbol *SectionEnd = MCOS->getContext().CreateTempSymbol();
- // Set the value of the symbol, as we are at the end of the section.
- MCOS->EmitLabel(SectionEnd);
-
- // Switch back the the dwarf line section.
- MCOS->SwitchSection(DwarfLineSection);
-
- MCOS->EmitDwarfAdvanceLineAddr(INT64_MAX, NULL, SectionEnd);
+ // The darwin9 linker has a bug (see PR8715). For for 32-bit architectures
+ // it requires:
+ // total_length >= prologue_length + 10
+ // We are 4 bytes short, since we have total_length = 51 and
+ // prologue_length = 45
+
+ // The regular end_sequence should be sufficient.
+ MCDwarfLineAddr::Emit(MCOS, INT64_MAX, 0);
}
// This is the end of the section, so set the value of the symbol at the end