diff options
author | Terry Guo <terry.guo@arm.com> | 2014-12-25 09:50:48 +0800 |
---|---|---|
committer | Terry Guo <terry.guo@arm.com> | 2014-12-25 09:55:03 +0800 |
commit | 5c294fee9abb6bb259519d9cf164c34b81b83312 (patch) | |
tree | 93e78a59109412656e4a0dcb3e37bba1c09dd0f6 /gold/arm.cc | |
parent | d274fbe8a43db3164b133772b2d0f557052561b5 (diff) | |
download | gdb-5c294fee9abb6bb259519d9cf164c34b81b83312.zip gdb-5c294fee9abb6bb259519d9cf164c34b81b83312.tar.gz gdb-5c294fee9abb6bb259519d9cf164c34b81b83312.tar.bz2 |
ARM: Add support for value 3 of Tag_ABI_VFP_args attribute
*** bfd/ChangeLog ***
2014-12-25 Thomas Preud'homme <thomas.preudhomme@arm.com>
* elf32-arm.c (elf32_arm_merge_eabi_attributes): Handle new
Tag_ABI_VFP_args value and replace hardcoded values by enum
values.
(elf32_arm_post_process_headers): Set e_flags in ELF header
as hard float only when Tag_ABI_VFP_args is 1, using new enum
value AEABI_VFP_args_vfp to check that.
*** binutils/ChangeLog ***
2014-12-25 Thomas Preud'homme <thomas.preudhomme@arm.com>
* readelf.c (arm_attr_tag_ABI_VFP_args): Add "compatible".
*** gdb/ChangeLog ***
2014-12-25 Thomas Preud'homme <thomas.preudhomme@arm.com>
* arm-tdep.c (arm_gdbarch_init): Explicitely handle value 3 of
Tag_ABI_VFP_args. Also replace hardcoded values by enum values
in the switch handling the different values of Tag_ABI_VFP_args.
*** gold/ChangeLog ***
2014-12-25 Thomas Preud'homme <thomas.preudhomme@arm.com>
* arm.cc (Target_arm::do_adjust_elf_header): Set e_flags in ELF
header as hard float only when Tag_ABI_VFP_args is 1, using new
enum value AEABI_VFP_args_vfp to check that.
(Target_arm::merge_object_attributes): Handle new Tag_ABI_VFP_args
value and replace hardcoded values by enum values.
*** include/elf/ChangeLog ***
2014-12-25 Thomas Preud'homme <thomas.preudhomme@arm.com>
* arm.h: New AEABI_FP_number_model_* and AEABI_VFP_args_* enum
values.
*** ld/testsuite/ChangeLog ***
2014-12-25 Thomas Preud'homme <thomas.preudhomme@arm.com>
* ld-arm/attr-merge-2a.s: Add Tag_ABI_VFP_args.
* ld-arm/attr-merge-2b.s: Likewise.
* ld-arm/attr-merge-2.attr: Likewise.
* ld-arm/attr-merge-4a.s: Add Tag_ABI_FP_number_model and
Tag_ABI_VFP_args.
* ld-arm/attr-merge-4b.s: Likewise.
* ld-arm/attr-merge-4.attr: Likewise.
* ld-arm/attr-merge-6a.s: Likewise.
* ld-arm/attr-merge-6b.s: Likewise.
* ld-arm/attr-merge-6.attr: Add Tag_ABI_FP_number_model.
Diffstat (limited to 'gold/arm.cc')
-rw-r--r-- | gold/arm.cc | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/gold/arm.cc b/gold/arm.cc index 6c472bb..4186a2a 100644 --- a/gold/arm.cc +++ b/gold/arm.cc @@ -10056,7 +10056,7 @@ Target_arm<big_endian>::do_adjust_elf_header( if (type == elfcpp::ET_EXEC || type == elfcpp::ET_DYN) { Object_attribute* attr = this->get_aeabi_object_attribute(elfcpp::Tag_ABI_VFP_args); - if (attr->int_value()) + if (attr->int_value() == AEABI_VFP_args_vfp) flags |= elfcpp::EF_ARM_ABI_FLOAT_HARD; else flags |= elfcpp::EF_ARM_ABI_FLOAT_SOFT; @@ -10493,10 +10493,18 @@ Target_arm<big_endian>::merge_object_attributes( != out_attr[elfcpp::Tag_ABI_VFP_args].int_value()) { // Ignore mismatches if the object doesn't use floating point. */ - if (out_attr[elfcpp::Tag_ABI_FP_number_model].int_value() == 0) + if (out_attr[elfcpp::Tag_ABI_FP_number_model].int_value() + == AEABI_FP_number_model_none + || (in_attr[elfcpp::Tag_ABI_FP_number_model].int_value() + != AEABI_FP_number_model_none + && out_attr[elfcpp::Tag_ABI_VFP_args].int_value() + == AEABI_VFP_args_compatible)) out_attr[elfcpp::Tag_ABI_VFP_args].set_int_value( in_attr[elfcpp::Tag_ABI_VFP_args].int_value()); - else if (in_attr[elfcpp::Tag_ABI_FP_number_model].int_value() != 0 + else if (in_attr[elfcpp::Tag_ABI_FP_number_model].int_value() + != AEABI_FP_number_model_none + && in_attr[elfcpp::Tag_ABI_VFP_args].int_value() + != AEABI_VFP_args_compatible && parameters->options().warn_mismatch()) gold_error(_("%s uses VFP register arguments, output does not"), name); |