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: [GOLD][PATCH]Handle script sections in Output_section::get_input_section.


On Fri, May 21, 2010 at 5:56 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Thu, May 20, 2010 at 6:52 PM, Doug Kwan (éæå) <dougkwan@google.com> wrote:
>> This patch add support for exporting and re-importing merge sections
>> Output_section class, as discussed earlier. ÂAll merged input sections
>> of the same properties are exported together in a merge object, which
>> is treated as the first merge input section in a sections script. ÂThe
>> maps for looking up merge and relaxed sections in Output_sections are
>> refactored into a separate class Output_section_lookup_maps. ÂThe
>> patch also fixes two issues in arm.cc.
>>
>> This was tested on x86_64 and ARM, both natively.
>>
>> -Doug
>>
>>
>>
>> 2010-05-21 ÂDoug Kwan Â<dougkwan@google.com>
>>
>> Â Â Â Â* arm.cc (Arm_input_section::do_output_offset): Add a cast to
>> Â Â Â Âavoid a compilation error.
>> Â Â Â Â(Target_arm::apply_cortex_a8_workaround): Rewrite a conditional branch
>> Â Â Â Âwith a direct branch, not a conditional branch, to a stub.
>> Â Â Â Â* merge.cc (Output_merge_base::record_input_section): New method
>> Â Â Â Âdefintion.
>> Â Â Â Â(Output_merge_data::do_add_input_section): Record input section if
>> Â Â Â Âkeeps-input-sections flag is set.
>> Â Â Â Â(Output_merge_string::do_add_input_section): Ditto.
>> Â Â Â Â* merge.h (Output_merge_base::Output_merge_base): Initialize new data
>> Â Â Â Âmembers KEEPS_INPUT_SECTIONS_, FIRST_RELOBJ_, FIRST_SHNDX_ and
>> Â Â Â ÂINPUT_SECTIONS_.
>> Â Â Â Â(Output_merge_base::keeps_input_sections,
>> Â Â Â ÂOutput_merge_base::set_keeps_input_sections,
>> Â Â Â ÂOutput_merge_base::first_relobj, Output_merge_base::first_shndx): New
>> Â Â Â Âmethod definitions.
>> Â Â Â Â(Output_merge_base::Input_sections): New type declaration.
>> Â Â Â Â(Output_merge_base::input_sections_begin,
>> Â Â Â ÂOutput_merge_base::input_sections_end,
>> Â Â Â ÂOutput_merge_base::do_set_keeps_input_sections): New method definitions.
>> Â Â Â Â(Output_merge_base::bool keeps_input_sections_,
>> Â Â Â ÂOutput_merge_base::first_relobj_, Output_merge_base::first_shndx_,
>> Â Â Â ÂOutput_merge_base::input_sections_): New data members.
>> Â Â Â Â(Output_merge_data::do_set_keeps_input_sections): New method
>> Â Â Â Âdefintion.
>> Â Â Â Â(Output_merge_string::do_set_keeps_input_sections): Ditto.
>> Â Â Â Â* output.cc (Output_section::Input_section::relobj): Move method
>> Â Â Â Âdefintion from class declaration to here and handle merge sections.
>> Â Â Â Â(Output_section::Input_section::shndx): Ditto.
>> Â Â Â Â(Output_section::Output_section): Remove initializations of removed
>> Â Â Â Âdata members and initialize new data member LOOKUP_MAPS_.
>> Â Â Â Â(Output_section::add_input_section): Set keeps-input-sections flag
>> Â Â Â Âfor a newly created merge output section as appropriate. ÂAdjust code
>> Â Â Â Âto use Output_section_lookup_maps class.
>> Â Â Â Â(Output_section::add_relaxed_input_section): Adjst code for lookup
>> Â Â Â Âmaps code refactoring.
>> Â Â Â Â(Output_section::add_merge_input_section): Add a new parameter
>> Â Â Â ÂKEEPS_INPUT_SECTION. ÂAdjust code to use Output_section_lookup_maps
>> Â Â Â Âclass. ÂIf adding input section to a newly created merge output
>> Â Â Â Âsection fails, remove the new merge section.
>> Â Â Â Â(Output_section::convert_input_sections_in_list_to_relaxed_input_sections):
>> Â Â Â ÂAdjust code for use of the Output_section_lookup_maps class.
>> Â Â Â Â(Output_section::find_merge_section): Ditto.
>> Â Â Â Â(Output_section::build_lookup_maps): New method defintion.
>> Â Â Â Â(Output_section::find_relaxed_input_section): Adjust code to use
>> Â Â Â ÂOutput_section_lookup_maps class.
>> Â Â Â Â(Output_section::get_input_sections): Export merge sections. ÂAdjust
>> Â Â Â Âcode to use Output_section_lookup_maps class.
>> Â Â Â Â(Output_section:::add_script_input_section): Adjust code to use
>> Â Â Â ÂOutput_section_lookup_maps class. ÂUpdate lookup maps for merge
>> Â Â Â Âsections also.
>> Â Â Â Â(Output_section::discard_states): Use Output_section_lookup_maps.
>> Â Â Â Â(Output_section::restore_states): Same.
>> Â Â Â Â* output.h (Merge_section_properties): Move class defintion out of
>> Â Â Â ÂOutput_section.
>> Â Â Â Â(Output_section_lookup_maps): New class.
>> Â Â Â Â(Output_section::Input_section::is_merge_section): New method
>> Â Â Â Âdefintion.
>> Â Â Â Â(Output_section::Input_section::relobj): Move defintion out of class
>> Â Â Â Âdefintion. ÂDeclare method only.
>> Â Â Â Â(Output_section::Input_section::shndx): Ditto.
>> Â Â Â Â(Output_section::Input_section::output_merge_base): New method
>> defintion.
>> Â Â Â Â(Output_section::Input_section::u2_.pomb): New union field.
>> Â Â Â Â(Output_section::Merge_section_by_properties_map,
>> Â Â Â ÂOutput_section::Output_section_data_by_input_section_map,
>> Â Â Â ÂOutput_section::Ouptut_relaxed_input_section_by_input_section_map):
>> Â Â Â ÂRemove types.
>> Â Â Â Â(Output_section::add_merge_input_section): Add new parameter
>> Â Â Â ÂKEEPS_INPUT_SECTIONS.
>> Â Â Â Â(Output_section::build_lookup_maps): New method declaration.
>> Â Â Â Â(Output_section::merge_section_map_,
>> Â Â Â ÂOutput_section::merge_section_by_properties_map_,
>> Â Â Â ÂOutput_section::relaxed_input_section_map_,
>> Â Â Â ÂOutput_section::is_relaxed_input_section_map_valid_): Remove data
>> Â Â Â Âmembers.
>> Â Â Â Â(Output_section::lookup_maps_): New data member.
>>
>
> Does this patch fix
>
> http://sourceware.org/bugzilla/show_bug.cgi?id=11619
>
> Gold failed to build on Linux/ia32.
>

I checked in the part of the patch to fix PR 11619.



-- 
H.J.
---
diff --git a/gold/ChangeLog b/gold/ChangeLog
index ed61c25..c9ecbe7 100644
--- a/gold/ChangeLog
+++ b/gold/ChangeLog
@@ -1,3 +1,9 @@
+2010-05-21  Doug Kwan  <dougkwan@google.com>
+
+	PR gold/11619
+	* arm.cc (Arm_input_section::do_output_offset): Add a cast to
+	avoid a compilation error.
+
 2010-05-19  Rafael Espindola  <espindola@google.com>

 	* script-sections.cc (Output_section_definition::allocate_to_segment):
diff --git a/gold/arm.cc b/gold/arm.cc
index 3dc2f22..31454e9 100644
--- a/gold/arm.cc
+++ b/gold/arm.cc
@@ -1202,7 +1202,7 @@ class Arm_input_section : public Output_relaxed_input_sect
ion
     if ((object == this->relobj())
 	&& (shndx == this->shndx())
 	&& (offset >= 0)
-	&& (offset <= this->original_size_))
+	&& (offset <= static_cast<section_offset_type>(this->original_size_)))
       {
 	*poutput = offset;
 	return true;


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