Patch to do reorder text and data sections according to a user specified sequence.

Sriraman Tallam tmsriram@google.com
Wed Jun 2 21:04:00 GMT 2010


The bug seems to be with the sort compare function. It tries to order
input sections based on the section ordering specified. If there are
some input sections with no ordering, then it tries to preserve the
original order. The way it is designed currently is causing conflicts.
I will prepare a patch to fix this.

Thanks,
-Sri.

On Wed, Jun 2, 2010 at 10:16 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Tue, Jun 1, 2010 at 4:40 PM, Sriraman Tallam <tmsriram@google.com> wrote:
>> Hi Ian,
>>
>>     I committed the patch after making the changes you mentioned. I
>> did not add a warning when using the SORT clause and
>> --section-ordering file. Like you said, I will do this as a separate
>> patch after I figure out how to do this effectively.
>>
>> 2010-06-01  Sriraman Tallam  <tmsriram@google.com>
>>
>>        * gold.h (is_wildcard_string): New function.
>>        * layout.cc (Layout::layout): Pass this pointer to add_input_section.
>>        (Layout::layout_eh_frame): Ditto.
>>        (Layout::find_section_order_index): New method.
>>        (Layout::read_layout_from_file): New method.
>>        * layout.h (Layout::find_section_order_index): New method.
>>        (Layout::read_layout_from_file): New method.
>>        (Layout::input_section_position_): New private member.
>>        (Layout::input_section_glob_): New private member.
>>        * main.cc (main): Call read_layout_from_file here.
>>        * options.h (--section-ordering-file): New option.
>>        * output.cc (Output_section::input_section_order_specified_): New
>>        member.
>>        (Output_section::Output_section): Initialize new member.
>>        (Output_section::add_input_section): Add new parameter.
>>        Keep input sections when --section-ordering-file is used.
>>        (Output_section::set_final_data_size): Sort input sections when
>>        section ordering file is specified.
>>        (Output_section::Input_section_sort_entry): Add new parameter.
>>        Check sorting type.
>>        (Output_section::Input_section_sort_entry::compare_section_ordering):
>>        New method.
>>        (Output_section::Input_section_sort_compare::operator()): Change to
>>        consider section_order_index.
>>        (Output_section::Input_section_sort_init_fini_compare::operator()):
>>        Change to consider section_order_index.
>>        (Output_section::Input_section_sort_section_order_index_compare
>>        ::operator()): New method.
>>        (Output_section::sort_attached_input_sections): Change to sort
>>        according to section order when specified.
>>        (Output_section::add_input_section<32, true>): Add new parameter.
>>        (Output_section::add_input_section<64, true>): Add new parameter.
>>        (Output_section::add_input_section<32, false>): Add new parameter.
>>        (Output_section::add_input_section<64, false>): Add new parameter.
>>        * output.h (Output_section::add_input_section): Add new parameter.
>>        (Output_section::input_section_order_specified): New
>>        method.
>>        (Output_section::set_input_section_order_specified): New method.
>>        (Input_section::Input_section): Initialize section_order_index_.
>>        (Input_section::section_order_index): New method.
>>        (Input_section::set_section_order_index): New method.
>>        (Input_section::section_order_index_): New member.
>>        (Input_section::Input_section_sort_section_order_index_compare): New
>>        struct.
>>        (Output_section::input_section_order_specified_): New member.
>>        * script-sections.cc (is_wildcard_string): Delete and move modified
>>        method to gold.h.
>>        (Output_section_element_input::Output_section_element_input): Modify
>>        call to is_wildcard_string.
>>        (Output_section_element_input::Input_section_pattern
>>        ::Input_section_pattern): Ditto.
>>        (Output_section_element_input::Output_section_element_input): Ditto.
>>        * testsuite/Makefile.am (final_layout): New test case.
>>        * testsuite/Makefile.in: Regenerate.
>>        * testsuite/final_layout.cc: New file.
>>        * testsuite/final_layout.sh: New file.
>>
>>
>
> testsuite/final_layout.sh failed on Linux/x86-64:
>
> http://www.sourceware.org/bugzilla/show_bug.cgi?id=11658
>
> --
> H.J.
>



More information about the Binutils mailing list