Map ".text.hot" and ".text.unlikely" input section prefixes to separate output sections.
H.J. Lu
hjl.tools@gmail.com
Fri Dec 21 18:29:00 GMT 2012
More information about the Binutils mailing list
Fri Dec 21 18:29:00 GMT 2012
- Previous message (by thread): Map ".text.hot" and ".text.unlikely" input section prefixes to separate output sections.
- Next message (by thread): Map ".text.hot" and ".text.unlikely" input section prefixes to separate output sections.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Fri, Dec 21, 2012 at 7:46 AM, Ian Lance Taylor <iant@google.com> wrote: > On Fri, Dec 21, 2012 at 7:38 AM, H.J. Lu <hjl.tools@gmail.com> wrote: >> On Thu, Dec 20, 2012 at 10:26 PM, Ian Lance Taylor <iant@google.com> wrote: >>> On Thu, Dec 20, 2012 at 2:38 PM, Cary Coutant <ccoutant@google.com> wrote: >>>> This patch fixes the problems I've been seeing. It sets the "may sort >>>> attached input sections" flag for the .text section, which ensures >>>> that we track all input sections for that output section. The problem >>>> was that we can't start tracking input sections in mid-stream. We may >>>> not want to do this unconditionally for .text, so maybe you'll want a >>>> linker option to enable this reordering? >>> >>> Thanks for tracking this down. >>> >>> It would be nice to avoid doing it for .text, but I don't see how to >>> do that while remaining compatible with GNU ld. >>> >>> I reimplemented this code in a different way that I think fits in >>> better with the existing section ordering code. Committed to >>> mainline. >>> >>> Ian >>> >>> >>> 2012-12-20 Ian Lance Taylor <iant@google.com> >>> >>> * layout.cc (Layout::special_ordering_of_input_section): New >>> function. >>> (Layout::layout): If input section requires special ordering, must >>> sort input sections. >>> (Layout::make_output_section): May sort .text input sections. >>> (Layout::is_section_name_prefix_grouped): Remove. >>> * layout.h (class Layout): Declare >>> special_ordering_of_input_section. Don't declare >>> is_section_name_prefix_grouped. >>> * output.cc (Output_section::add_input_section): Revert last >>> change. >>> (Output_section::Input_section_sort::match_file_name): Don't crash >>> if called on output section data. >>> (Output_section::Input_section_sort_compare): Sort based on >>> special ordering. >>> (Output_section::Input_section_sort_section_order_index_compare): >>> Revert last patch. >>> (Output_section::sort_attached_input_sections): Likewise. >> >> It doesn't fix regressions with x32 gold: >> >> `echo g++ -mx32 -W -Wall -Werror -D_LARGEFILE_SOURCE >> -D_FILE_OFFSET_BITS=64 -fmerge-constants -static-libstdc++ >> -static-libgcc -o incremental_test_2 | sed -e >> 's/-Wp,-D_FORTIFY_SOURCE=[0-9][0-9]*//'` -Wl,--incremental-update >> -Bgcctestdir/ two_file_test_tmp_2.o two_file_test_1b_ndebug.o >> two_file_test_2_ndebug.o two_file_test_main_ndebug.o >> gcctestdir/ld: internal error in convert_types, at >> /export/gnu/import/git/binutils/gold/gold.h:192 >> collect2: error: ld returned 1 exit status >> make[3]: *** [incremental_test_2] Error 1 > > I don't really see how that could be related to this patch series. I > don't have an x32 system so I also can't debug this. Can you show a > backtrace at the point of failure? You can set a breakpoint on > gold::do_gold_unreachable. > > Ian (gdb) bt #0 gold::do_gold_unreachable ( filename=0x69d3d0 "/export/gnu/import/git/binutils/gold/gold.h", lineno=192, function=0x6b0826 <_ZZN4gold13convert_typesIjyEET_T0_E12__FUNCTION__> "convert_types") at /export/gnu/import/git/binutils/gold/gold.cc:100 #1 0x0040375c in gold::convert_types<unsigned int, unsigned long long> ( from=<optimized out>) at /export/gnu/import/git/binutils/gold/gold.h:192 #2 0x00485916 in do_set_section_offset (this=<optimized out>, shndx=<optimized out>, off=<optimized out>) at /export/gnu/import/git/binutils/gold/object.h:1936 #3 gold::Sized_relobj<32, false>::do_set_section_offset ( this=<optimized out>, shndx=<optimized out>, off=<optimized out>) at /export/gnu/import/git/binutils/gold/object.h:1934 #4 0x00594fc1 in gold::Output_section::add_input_section<32, false> ( this=<optimized out>, layout=<optimized out>, object=<optimized out>, shndx=7, secname=<optimized out>, shdr=..., reloc_shndx=0, have_sections_script=false) at /export/gnu/import/git/binutils/gold/output.cc:2514 #5 0x00545b85 in gold::Layout::layout<32, false> (this=<optimized out>, object=<optimized out>, shndx=7, name=<optimized out>, shdr=..., reloc_shndx=0, off=0xffff8dd8) at /export/gnu/import/git/binutils/gold/layout.cc:1177 #6 0x0054a57b in gold::Sized_relobj_file<32, false>::layout_section ( ---Type <return> to continue, or q <return> to quit--- this=<optimized out>, layout=<optimized out>, shndx=7, name=<optimized out>, shdr=..., reloc_shndx=0, reloc_type=0) at /export/gnu/import/git/binutils/gold/object.cc:1161 #7 0x00561701 in gold::Sized_relobj_file<32, false>::do_layout ( this=<optimized out>, symtab=<optimized out>, layout=<optimized out>, sd=<optimized out>) at /export/gnu/import/git/binutils/gold/object.cc:1665 #8 0x005b6d22 in layout (sd=<optimized out>, layout= {void (gold::Read_symbols_data *, gold::Layout *, gold::Symbol_table *, gold::Object * const)} 0x5b6d11 <gold::Add_symbols::run(gold::Workqueue*)+257>, symtab=<optimized out>, this=<optimized out>) at /export/gnu/import/git/binutils/gold/object.h:570 #9 run (this=0x9fe440) at /export/gnu/import/git/binutils/gold/readsyms.cc:634 #10 gold::Add_symbols::run (this=<optimized out>) at /export/gnu/import/git/binutils/gold/readsyms.cc:594 #11 0x005ff746 in gold::Workqueue::find_and_run_task ( this=this@entry=0xffff9320, thread_number=thread_number@entry=0) at /export/gnu/import/git/binutils/gold/workqueue.cc:319 #12 0x005ffaca in gold::Workqueue::process (this=<optimized out>, thread_number=0) at /export/gnu/import/git/binutils/gold/workqueue.cc:495 #13 0x0040602e in main (argc=37, argv=0xffffcbb4) at /export/gnu/import/git/binutils/gold/main.cc:252 (gdb) -- H.J.
- Previous message (by thread): Map ".text.hot" and ".text.unlikely" input section prefixes to separate output sections.
- Next message (by thread): Map ".text.hot" and ".text.unlikely" input section prefixes to separate output sections.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list