[llvm] r197922 - Debug info: On ARM ensure that the data sections come before the

Eric Christopher echristo at gmail.com
Fri Dec 27 15:30:03 PST 2013


Hi Adrian,

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?

If so, this should apply to all targets and not just the ARM backend.

-eric

On Mon Dec 23 2013 at 2:31:18 PM, Adrian Prantl <aprantl at apple.com> wrote:

> Author: adrian
> Date: Mon Dec 23 16:24:47 2013
> New Revision: 197922
>
> URL: http://llvm.org/viewvc/llvm-project?rev=197922&view=rev
> Log:
> Debug info: On ARM ensure that the data sections come before the
> (optional) DWARF sections, so compiling with -g does not result in
> different code being generated.
>
> rdar://problem/15623193
>
> Added:
>     llvm/trunk/test/DebugInfo/ARM/sectionorder.ll
> Modified:
>     llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp
>
> Modified: llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/
> ARM/ARMAsmPrinter.cpp?rev=197922&r1=197921&r2=197922&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp (original)
> +++ llvm/trunk/lib/Target/ARM/ARMAsmPrinter.cpp Mon Dec 23 16:24:47 2013
> @@ -488,6 +488,19 @@ void ARMAsmPrinter::EmitStartOfAsmFile(M
>                                     SectionKind::getText());
>        OutStreamer.SwitchSection(StaticInitSect);
>      }
> +
> +    // Compiling with debug info should not affect the code
> +    // generation!  Since some of the data sections are first switched
> +    // to only in ASMPrinter::doFinalization(), the debug info
> +    // sections would come before the data sections in the object
> +    // file.  This is problematic, since PC-relative loads have to use
> +    // different instruction sequences in order to reach global data
> +    // in the same object file.
> +    OutStreamer.SwitchSection(getObjFileLowering().getCStringSection());
> +    OutStreamer.SwitchSection(getObjFileLowering().getDataSection());
> +    OutStreamer.SwitchSection(getObjFileLowering().
> getDataCommonSection());
> +    OutStreamer.SwitchSection(getObjFileLowering().getDataBSSSection());
> +    OutStreamer.SwitchSection(getObjFileLowering().
> getNonLazySymbolPointerSection());
>    }
>
>    // Use unified assembler syntax.
>
> Added: llvm/trunk/test/DebugInfo/ARM/sectionorder.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/
> DebugInfo/ARM/sectionorder.ll?rev=197922&view=auto
> ============================================================
> ==================
> --- llvm/trunk/test/DebugInfo/ARM/sectionorder.ll (added)
> +++ llvm/trunk/test/DebugInfo/ARM/sectionorder.ll Mon Dec 23 16:24:47 2013
> @@ -0,0 +1,26 @@
> +; RUN: llc  -filetype=asm %s -o - | FileCheck %s
> +
> +; Verifies that the DWARF* sections come _after_ the data sections.
> +; rdar://problem/15623193
> +
> +; CHECK: .section      __TEXT,__text,
> +; CHECK-NOT: __DWARF,__debug
> +; CHECK: .section      __TEXT,__cstring,cstring_literals
> +; CHECK-NOT: __DWARF,__debug
> +; CHECK: .section      __DATA,__data
> +; CHECK-NOT: __DWARF,__debug
> +; CHECK: .section      __DATA,__common
> +; CHECK-NOT: __DWARF,__debug
> +; CHECK: .section      __DATA,__bss
> +; CHECK-NOT: __DWARF,__debug
> +; CHECK: .section      __DATA,__nl_symbol_ptr,non_lazy_symbol_pointers
> +target triple = "thumbv7-apple-ios"
> +
> +!llvm.module.flags = !{!3, !4}
> +!llvm.dbg.cu = !{!0}
> +
> +!0 = metadata !{i32 786449, i32 0, i32 12, metadata !"test.c", metadata
> !"/Volumes/Data/radar/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/test.c]
> [DW_LANG_C99]
> +!1 = metadata !{metadata !2}
> +!2 = metadata !{i32 0}
> +!3 = metadata !{i32 2, metadata !"Dwarf Version", i32 2}
> +!4 = metadata !{i32 1, metadata !"Debug Info Version", i32 1}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131227/da55091e/attachment.html>


More information about the llvm-commits mailing list