[GOLD] PowerPC .gnu.attributes support

elfcpp/
	* powerpc.h (Tag_GNU_Power_ABI_FP): Define.
	(Tag_GNU_Power_ABI_Vector, Tag_GNU_Power_ABI_Struct_Return): Define.
gold/
	* powerpc.cc: Include attributes.h.
	(Powerpc_relobj::attributes_section_data_): New variable, with
	accessor and associated constructor and destructor support.
	(Powerpc_dynobj::attributes_section_data_): Likewise.
	(Powerpc_relobj::do_read_symbols): Stash SHT_GNU_ATTRIBUTES section
	contents in attributes_section_data_.
	(Powerpc_dynobj::do_read_symbols): Likewise.
	(Target_powerpc): Add attributes_section_data_, last_fp_, last_ld_,
	last_vec_, and last_struct_ vars.
	(Target_powerpc::merge_object_attributes): New function.
	(Target_powerpc::do_finalize_sections): Iterate over input objects
	merging attributes.  Create output attributes section.
This commit is contained in:
Alan Modra 2018-07-06 01:08:16 +09:30
parent 6821842f15
commit 724436fccb
4 changed files with 393 additions and 7 deletions

View file

@ -1,3 +1,8 @@
2018-07-06 Alan Modra <amodra@gmail.com>
* powerpc.h (Tag_GNU_Power_ABI_FP): Define.
(Tag_GNU_Power_ABI_Vector, Tag_GNU_Power_ABI_Struct_Return): Define.
2018-06-24 Nick Clifton <nickc@redhat.com>
2.31 branch created.

View file

@ -230,6 +230,32 @@ enum
EF_PPC64_ABI = 3
};
// Object attribute tags. 0-3 are generic.
enum
{
// FP ABI, low 2 bits:
// 1 for double precision hard-float,
// 2 for soft-float,
// 3 for single precision hard-float.
// 0 for not tagged or not using any ABIs affected by the differences.
// Next 2 bits:
// 1 for ibm long double
// 2 for 64-bit long double
// 3 for IEEE long double.
// 0 for not tagged or not using any ABIs affected by the differences.
Tag_GNU_Power_ABI_FP = 4,
// Value 1 for general purpose registers only, 2 for AltiVec
// registers, 3 for SPE registers; 0 for not tagged or not using any
// ABIs affected by the differences.
Tag_GNU_Power_ABI_Vector = 8,
// Value 1 for ABIs using r3/r4 for returning structures <= 8 bytes,
// 2 for ABIs using memory; 0 for not tagged or not using any ABIs
// affected by the differences.
Tag_GNU_Power_ABI_Struct_Return = 12
};
// DT_PPC_OPT bits
enum
{