This is the mail archive of the binutils@sourceware.org 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: Patch to do reorder text and data sections according to a user specified sequence.


On Wed, Jun 2, 2010 at 11:50 PM, Sriraman Tallam <tmsriram@google.com> wrote:
> Hi,
>
> ? ?I have attached the patch to fix the bug in section ordering.
> Sections which do not match any pattern in the file will be laid out
> ahead of sections that match some pattern to remove the ambiguity that
> was causing the problem. Please let me know if this is ok.
>

Please add "PR gold/11658" in ChangeLog entry.

> ? ? ? ?* output.cc
> ? ? ? ?(Output_section::Input_section_sort_entry::compare_section_ordering):
> ? ? ? ?Change to return non-zero correctly.
> ? ? ? ?(Output_section::Input_section_sort_section_order_index_compare::operator()):
> ? ? ? ?Change to fix ambiguity in comparisons.

Thanks.


H.J.
---
> Thanks,
> -Sri.
>
> On Wed, Jun 2, 2010 at 2:04 PM, Sriraman Tallam <tmsriram@google.com> wrote:
>> 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.
>>>
>>
>



-- 
H.J.


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