From a8de83c68aaa03cafa0e3618fb8bf030b48f6540 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Fri, 3 Dec 2010 23:36:59 +0000 Subject: [PATCH] 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 --- lib/MC/MCDwarf.cpp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/lib/MC/MCDwarf.cpp b/lib/MC/MCDwarf.cpp index 0916b054eb8..194c324ab6c 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. + // 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 - 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 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