Hi Adrian,<br><br>Can you explain the rationale here more please? The debug sections are (elf semantic term) noload and so shouldn't affect offsets in the final binary. Is this happening because some of the sections are emitted before and so relaxation or branch islands are assuming that the space in the middle of the binary is actually distance for run time?<div>
<br></div><div>If so, this should apply to all targets and not just the ARM backend.</div><div><br></div><div>-eric</div><div><br><div>On Mon Dec 23 2013 at 2:31:18 PM, Adrian Prantl <<a href="mailto:aprantl@apple.com">aprantl@apple.com</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: adrian<br>
Date: Mon Dec 23 16:24:47 2013<br>
New Revision: 197922<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=197922&view=rev" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project?rev=197922&view=rev</a><br>
Log:<br>
Debug info: On ARM ensure that the data sections come before the<br>
(optional) DWARF sections, so compiling with -g does not result in<br>
different code being generated.<br>
<br>
rdar://problem/15623193<br>
<br>
Added:<br>
    llvm/trunk/test/DebugInfo/ARM/<u></u>sectionorder.ll<br>
Modified:<br>
    llvm/trunk/lib/Target/ARM/<u></u>ARMAsmPrinter.cpp<br>
<br>
Modified: llvm/trunk/lib/Target/ARM/<u></u>ARMAsmPrinter.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp?rev=197922&r1=197921&r2=197922&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/lib/Target/<u></u>ARM/ARMAsmPrinter.cpp?rev=<u></u>197922&r1=197921&r2=197922&<u></u>view=diff</a><br>

==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/lib/Target/ARM/<u></u>ARMAsmPrinter.cpp (original)<br>
+++ llvm/trunk/lib/Target/ARM/<u></u>ARMAsmPrinter.cpp Mon Dec 23 16:24:47 2013<br>
@@ -488,6 +488,19 @@ void ARMAsmPrinter::<u></u>EmitStartOfAsmFile(M<br>
                                    SectionKind::getText());<br>
       OutStreamer.SwitchSection(<u></u>StaticInitSect);<br>
     }<br>
+<br>
+    // Compiling with debug info should not affect the code<br>
+    // generation!  Since some of the data sections are first switched<br>
+    // to only in ASMPrinter::doFinalization(), the debug info<br>
+    // sections would come before the data sections in the object<br>
+    // file.  This is problematic, since PC-relative loads have to use<br>
+    // different instruction sequences in order to reach global data<br>
+    // in the same object file.<br>
+    OutStreamer.SwitchSection(<u></u>getObjFileLowering().<u></u>getCStringSection());<br>
+    OutStreamer.SwitchSection(<u></u>getObjFileLowering().<u></u>getDataSection());<br>
+    OutStreamer.SwitchSection(<u></u>getObjFileLowering().<u></u>getDataCommonSection());<br>
+    OutStreamer.SwitchSection(<u></u>getObjFileLowering().<u></u>getDataBSSSection());<br>
+    OutStreamer.SwitchSection(<u></u>getObjFileLowering().<u></u>getNonLazySymbolPointerSection<u></u>());<br>
   }<br>
<br>
   // Use unified assembler syntax.<br>
<br>
Added: llvm/trunk/test/DebugInfo/ARM/<u></u>sectionorder.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/ARM/sectionorder.ll?rev=197922&view=auto" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/test/<u></u>DebugInfo/ARM/sectionorder.ll?<u></u>rev=197922&view=auto</a><br>

==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/test/DebugInfo/ARM/<u></u>sectionorder.ll (added)<br>
+++ llvm/trunk/test/DebugInfo/ARM/<u></u>sectionorder.ll Mon Dec 23 16:24:47 2013<br>
@@ -0,0 +1,26 @@<br>
+; RUN: llc  -filetype=asm %s -o - | FileCheck %s<br>
+<br>
+; Verifies that the DWARF* sections come _after_ the data sections.<br>
+; rdar://problem/15623193<br>
+<br>
+; CHECK: .section      __TEXT,__text,<br>
+; CHECK-NOT: __DWARF,__debug<br>
+; CHECK: .section      __TEXT,__cstring,cstring_<u></u>literals<br>
+; CHECK-NOT: __DWARF,__debug<br>
+; CHECK: .section      __DATA,__data<br>
+; CHECK-NOT: __DWARF,__debug<br>
+; CHECK: .section      __DATA,__common<br>
+; CHECK-NOT: __DWARF,__debug<br>
+; CHECK: .section      __DATA,__bss<br>
+; CHECK-NOT: __DWARF,__debug<br>
+; CHECK: .section      __DATA,__nl_symbol_ptr,non_<u></u>lazy_symbol_pointers<br>
+target triple = "thumbv7-apple-ios"<br>
+<br>
+!llvm.module.flags = !{!3, !4}<br>
+!<a href="http://llvm.dbg.cu" target="_blank">llvm.dbg.cu</a> = !{!0}<br>
+<br>
+!0 = metadata !{i32 786449, i32 0, i32 12, metadata !"test.c", metadata !"/Volumes/Data/radar/<u></u>15623193", metadata !"LLVM", i1 true, i1 false, metadata !"", i32 0, metadata !1, metadata !1, metadata !1, metadata !1} ; [ DW_TAG_compile_unit ] [/Volumes/Data/radar/15623193/<u></u>test.c] [DW_LANG_C99]<br>

+!1 = metadata !{metadata !2}<br>
+!2 = metadata !{i32 0}<br>
+!3 = metadata !{i32 2, metadata !"Dwarf Version", i32 2}<br>
+!4 = metadata !{i32 1, metadata !"Debug Info Version", i32 1}<br>
<br>
<br>
______________________________<u></u>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/llvm-commits</a><br>
</blockquote></div>