Skip to content
  • Cary Coutant's avatar
    Update support for .note.gnu.property sections. · a2575bec
    Cary Coutant authored
    The original patch did not give the target enough hooks to discover that
    an input object file does not have a particular property. For the
    GNU_PROPERTY_X86_FEATURE_1_AND property, for example, where a missing
    property should be assumed to be all zeroes, and ANDed with other
    object modules, this is essential. We now store the target-specific
    properties locally in the Target structure as native uint32_t fields,
    then AND the per-object feature bits with the program's feature bits
    when we're finished processing each input object file. The target-specific
    properties are then added back to the output note section during
    finalization.
    
    gold/
    	PR gold/22914
    	* layout.cc (read_sized_value): Fix spelling of section name.
    	(Layout::layout_gnu_property): Call Sized_target::record_gnu_property
    	for target-specific properties;
    	don't store them with target-independent properties yet.
    	(Layout::merge_gnu_properties): New method.
    	(Layout::add_gnu_property): New method.
    	(Layout::create_gnu_properties_note): Call target to finalize
    	target-specific properties. Fix spelling of output section name.
    	* layout.h (Layout::merge_gnu_properties): New method.
    	(Layout::add_gnu_property): New method.
    	* object.cc (Sized_relobj_file::do_layout): Call
    	Layout::merge_gnu_properties.
    	* target.h (Target::merge_gnu_property): Remove.
    	(Target::finalize_gnu_properties): New method.
    	(Target::do_merge_gnu_property): Move to Sized_target and rename.
    	(Target::do_finalize_gnu_properties): New virtual method.
    	(Sized_target::record_gnu_property): Moved and renamed from
    	Target::do_merge_gnu_property.
    	(Sized_target::merge_gnu_properties): New virtual method.
    	* x86_64.cc (Target_x86_64::isa_1_used_, isa_1_needed_)
    	(feature_1_, object_feature_1_, seen_first_object_): New data members.
    	(Target_x86_64::do_merge_gnu_property): Rename to ...
    	(Target_x86_64::record_gnu_property): ... this.  Save target-specific
    	properties in Target class object.
    	(Target_x86_64::merge_gnu_properties): New method.
    	(add_property): New static inline function.
    	(Target_x86_64::do_finalize_gnu_properties): New method.
    	* testsuite/Makefile.am (gnu_property_test): Remove C source file;
    	link directly without compiler driver.
    	* testsuite/Makefile.in: Regenerate.
    	* testsuite/gnu_property_a.S: Add _start.
    a2575bec
To find the state of this project's repository at the time of any of these versions, check out the tags.