This is the mail archive of the mailing list for the binutils project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Map "" and ".text.unlikely" input section prefixes to separate output sections.

On Fri, Dec 21, 2012 at 7:46 AM, Ian Lance Taylor <> wrote:
> On Fri, Dec 21, 2012 at 7:38 AM, H.J. Lu <> wrote:
>> On Thu, Dec 20, 2012 at 10:26 PM, Ian Lance Taylor <> wrote:
>>> On Thu, Dec 20, 2012 at 2:38 PM, Cary Coutant <> 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  <>
>>>         * (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_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",
<_ZZN4gold13convert_typesIjyEET_T0_E12__FUNCTION__> "convert_types")
at /export/gnu/import/git/binutils/gold/
#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,
    at /export/gnu/import/git/binutils/gold/
#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/
#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/
#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/
#8  0x005b6d22 in layout (sd=<optimized out>, layout=
    {void (gold::Read_symbols_data *, gold::Layout *,
gold::Symbol_table *, gold::Object * const)} 0x5b6d11
    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/
#10 gold::Add_symbols::run (this=<optimized out>)
    at /export/gnu/import/git/binutils/gold/
#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/
#12 0x005ffaca in gold::Workqueue::process (this=<optimized out>,
    thread_number=0) at /export/gnu/import/git/binutils/gold/
#13 0x0040602e in main (argc=37, argv=0xffffcbb4)
    at /export/gnu/import/git/binutils/gold/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]