diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 1ff562c..d6b1017 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -11953,7 +11953,7 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd) /* Tag_ABI_HardFP_use is handled along with Tag_FP_arch since the meaning of Tag_ABI_HardFP_use depends on Tag_FP_arch when it's 0. It might mean absence of FP hardware if - Tag_FP_arch is zero, otherwise it is effectively SP + DP. */ + Tag_FP_arch is zero. */ #define VFP_VERSION_COUNT 9 static const struct @@ -11995,7 +11995,7 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd) } /* Both the input and the output have nonzero Tag_FP_arch. - So Tag_ABI_HardFP_use is (SP & DP) when it's zero. */ + So Tag_ABI_HardFP_use is implied by Tag_FP_arch when it's zero. */ /* If both the input and the output have zero Tag_ABI_HardFP_use, do nothing. */ @@ -12003,10 +12003,10 @@ elf32_arm_merge_eabi_attributes (bfd *ibfd, bfd *obfd) && out_attr[Tag_ABI_HardFP_use].i == 0) ; /* If the input and the output have different Tag_ABI_HardFP_use, - the combination of them is 3 (SP & DP). */ + the combination of them is 0 (implied by Tag_FP_arch). */ else if (in_attr[Tag_ABI_HardFP_use].i != out_attr[Tag_ABI_HardFP_use].i) - out_attr[Tag_ABI_HardFP_use].i = 3; + out_attr[Tag_ABI_HardFP_use].i = 0; /* Now we can handle Tag_FP_arch. */ diff --git a/binutils/readelf.c b/binutils/readelf.c index d9ddb35..27613a0 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -12211,7 +12211,7 @@ static const char * arm_attr_tag_ABI_FP_number_model[] = static const char * arm_attr_tag_ABI_enum_size[] = {"Unused", "small", "int", "forced to int"}; static const char * arm_attr_tag_ABI_HardFP_use[] = - {"As Tag_FP_arch", "SP only", "DP only", "SP and DP"}; + {"As Tag_FP_arch", "SP only", "Reserved", "Deprecated"}; static const char * arm_attr_tag_ABI_VFP_args[] = {"AAPCS", "VFP registers", "custom"}; static const char * arm_attr_tag_ABI_WMMX_args[] = diff --git a/gas/testsuite/gas/arm/attr-abi-hardfp-use-0.d b/gas/testsuite/gas/arm/attr-abi-hardfp-use-0.d new file mode 100644 index 0000000..bf7ec97 --- /dev/null +++ b/gas/testsuite/gas/arm/attr-abi-hardfp-use-0.d @@ -0,0 +1,14 @@ +# name: EABI attribute Tag_ABI_HardFP_use with value 0 +# source: attr-abi-hardfp-use-0.s +# as: +# readelf: -A +# This test is only valid on EABI based ports. +# target: *-*-*eabi* *-*-nacl* + +Attribute Section: aeabi +File Attributes + Tag_CPU_name: "Cortex-M7" + Tag_CPU_arch: v7E-M + Tag_CPU_arch_profile: Microcontroller + Tag_THUMB_ISA_use: Thumb-2 + Tag_FP_arch: FPv5/FP-D16 for ARMv8 diff --git a/gas/testsuite/gas/arm/attr-abi-hardfp-use-0.s b/gas/testsuite/gas/arm/attr-abi-hardfp-use-0.s new file mode 100644 index 0000000..649d0fe --- /dev/null +++ b/gas/testsuite/gas/arm/attr-abi-hardfp-use-0.s @@ -0,0 +1,3 @@ +.cpu cortex-m7 +.fpu fpv5-d16 +.eabi_attribute 27, 0 diff --git a/gas/testsuite/gas/arm/attr-abi-hardfp-use-1.d b/gas/testsuite/gas/arm/attr-abi-hardfp-use-1.d new file mode 100644 index 0000000..712bd6c --- /dev/null +++ b/gas/testsuite/gas/arm/attr-abi-hardfp-use-1.d @@ -0,0 +1,15 @@ +# name: EABI attribute Tag_ABI_HardFP_use with value 1 +# source: attr-abi-hardfp-use-1.s +# as: +# readelf: -A +# This test is only valid on EABI based ports. +# target: *-*-*eabi* *-*-nacl* + +Attribute Section: aeabi +File Attributes + Tag_CPU_name: "Cortex-M7" + Tag_CPU_arch: v7E-M + Tag_CPU_arch_profile: Microcontroller + Tag_THUMB_ISA_use: Thumb-2 + Tag_FP_arch: FPv5/FP-D16 for ARMv8 + Tag_ABI_HardFP_use: SP only diff --git a/gas/testsuite/gas/arm/attr-abi-hardfp-use-1.s b/gas/testsuite/gas/arm/attr-abi-hardfp-use-1.s new file mode 100644 index 0000000..adc7049 --- /dev/null +++ b/gas/testsuite/gas/arm/attr-abi-hardfp-use-1.s @@ -0,0 +1,3 @@ +.cpu cortex-m7 +.fpu fpv5-sp-d16 +.eabi_attribute 27, 1 diff --git a/gas/testsuite/gas/arm/attr-abi-hardfp-use-2.d b/gas/testsuite/gas/arm/attr-abi-hardfp-use-2.d new file mode 100644 index 0000000..a06c8be --- /dev/null +++ b/gas/testsuite/gas/arm/attr-abi-hardfp-use-2.d @@ -0,0 +1,15 @@ +# name: EABI attribute Tag_ABI_HardFP_use with value 2 +# source: attr-abi-hardfp-use-2.s +# as: +# readelf: -A +# This test is only valid on EABI based ports. +# target: *-*-*eabi* *-*-nacl* + +Attribute Section: aeabi +File Attributes + Tag_CPU_name: "Cortex-M7" + Tag_CPU_arch: v7E-M + Tag_CPU_arch_profile: Microcontroller + Tag_THUMB_ISA_use: Thumb-2 + Tag_FP_arch: FPv5/FP-D16 for ARMv8 + Tag_ABI_HardFP_use: Reserved diff --git a/gas/testsuite/gas/arm/attr-abi-hardfp-use-2.s b/gas/testsuite/gas/arm/attr-abi-hardfp-use-2.s new file mode 100644 index 0000000..6723514 --- /dev/null +++ b/gas/testsuite/gas/arm/attr-abi-hardfp-use-2.s @@ -0,0 +1,3 @@ +.cpu cortex-m7 +.fpu fpv5-d16 +.eabi_attribute 27, 2 diff --git a/gas/testsuite/gas/arm/attr-abi-hardfp-use-3.d b/gas/testsuite/gas/arm/attr-abi-hardfp-use-3.d new file mode 100644 index 0000000..3e42741 --- /dev/null +++ b/gas/testsuite/gas/arm/attr-abi-hardfp-use-3.d @@ -0,0 +1,15 @@ +# name: EABI attribute Tag_ABI_HardFP_use with value 3 +# source: attr-abi-hardfp-use-3.s +# as: +# readelf: -A +# This test is only valid on EABI based ports. +# target: *-*-*eabi* *-*-nacl* + +Attribute Section: aeabi +File Attributes + Tag_CPU_name: "Cortex-M7" + Tag_CPU_arch: v7E-M + Tag_CPU_arch_profile: Microcontroller + Tag_THUMB_ISA_use: Thumb-2 + Tag_FP_arch: FPv5/FP-D16 for ARMv8 + Tag_ABI_HardFP_use: Deprecated diff --git a/gas/testsuite/gas/arm/attr-abi-hardfp-use-3.s b/gas/testsuite/gas/arm/attr-abi-hardfp-use-3.s new file mode 100644 index 0000000..55ed6be --- /dev/null +++ b/gas/testsuite/gas/arm/attr-abi-hardfp-use-3.s @@ -0,0 +1,3 @@ +.cpu cortex-m7 +.fpu fpv5-d16 +.eabi_attribute 27, 3 diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp index 8aacb69..ae2a564 100644 --- a/ld/testsuite/ld-arm/arm-elf.exp +++ b/ld/testsuite/ld-arm/arm-elf.exp @@ -894,6 +894,8 @@ run_dump_test "attr-merge-vfp-14r" run_dump_test "attr-merge-incompatible" run_dump_test "attr-merge-arch-2" run_dump_test "attr-merge-nosection-1" +run_dump_test "attr-merge-hardfp-use-1" +run_dump_test "attr-merge-hardfp-use-2" run_dump_test "unresolved-1" if { ![istarget "arm*-*-nacl*"] } { run_dump_test "unresolved-1-dyn" diff --git a/ld/testsuite/ld-arm/attr-merge-3.attr b/ld/testsuite/ld-arm/attr-merge-3.attr index 8d7d1c3..0a3939c 100644 --- a/ld/testsuite/ld-arm/attr-merge-3.attr +++ b/ld/testsuite/ld-arm/attr-merge-3.attr @@ -22,7 +22,6 @@ File Attributes Tag_ABI_align_needed: 8-byte Tag_ABI_align_preserved: 8-byte, except leaf SP Tag_ABI_enum_size: small - Tag_ABI_HardFP_use: SP and DP Tag_ABI_VFP_args: VFP registers Tag_CPU_unaligned_access: v6 Tag_FP_HP_extension: Allowed diff --git a/ld/testsuite/ld-arm/attr-merge-hardfp-use-1.d b/ld/testsuite/ld-arm/attr-merge-hardfp-use-1.d new file mode 100644 index 0000000..136ff41 --- /dev/null +++ b/ld/testsuite/ld-arm/attr-merge-hardfp-use-1.d @@ -0,0 +1,15 @@ +#source: attr-merge-hardfp-use-1a.s +#source: attr-merge-hardfp-use-1b.s +#as: +#ld: -e main +#readelf: -A +# This test is only valid on ELF based ports. +# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix* + +Attribute Section: aeabi +File Attributes + Tag_CPU_name: "Cortex-M4" + Tag_CPU_arch: v7E-M + Tag_CPU_arch_profile: Microcontroller + Tag_THUMB_ISA_use: Thumb-2 + Tag_FP_arch: FPv5/FP-D16 for ARMv8 diff --git a/ld/testsuite/ld-arm/attr-merge-hardfp-use-1a.s b/ld/testsuite/ld-arm/attr-merge-hardfp-use-1a.s new file mode 100644 index 0000000..8a52860 --- /dev/null +++ b/ld/testsuite/ld-arm/attr-merge-hardfp-use-1a.s @@ -0,0 +1,12 @@ + .syntax unified + .cpu cortex-m4 + .fpu fpv4-sp-d16 + .thumb + .text + .align 2 + .global foo + .thumb + .thumb_func + .type foo, %function +foo: + bx lr diff --git a/ld/testsuite/ld-arm/attr-merge-hardfp-use-1b.s b/ld/testsuite/ld-arm/attr-merge-hardfp-use-1b.s new file mode 100644 index 0000000..3b3a05d --- /dev/null +++ b/ld/testsuite/ld-arm/attr-merge-hardfp-use-1b.s @@ -0,0 +1,16 @@ + .thumb + .syntax unified + .cpu cortex-m7 + .fpu fpv5-d16 + .eabi_attribute 27, 3 + .text + .align 2 + .global main + .thumb + .thumb_func + .type main, %function + + + +main: + bl foo diff --git a/ld/testsuite/ld-arm/attr-merge-hardfp-use-2.d b/ld/testsuite/ld-arm/attr-merge-hardfp-use-2.d new file mode 100644 index 0000000..b7975de --- /dev/null +++ b/ld/testsuite/ld-arm/attr-merge-hardfp-use-2.d @@ -0,0 +1,15 @@ +#source: attr-merge-hardfp-use-2a.s +#source: attr-merge-hardfp-use-2b.s +#as: +#ld: -e main +#readelf: -A +# This test is only valid on ELF based ports. +# not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix* + +Attribute Section: aeabi +File Attributes + Tag_CPU_name: "Cortex-M4" + Tag_CPU_arch: v7E-M + Tag_CPU_arch_profile: Microcontroller + Tag_THUMB_ISA_use: Thumb-2 + Tag_FP_arch: FPv5/FP-D16 for ARMv8 diff --git a/ld/testsuite/ld-arm/attr-merge-hardfp-use-2a.s b/ld/testsuite/ld-arm/attr-merge-hardfp-use-2a.s new file mode 100644 index 0000000..8a52860 --- /dev/null +++ b/ld/testsuite/ld-arm/attr-merge-hardfp-use-2a.s @@ -0,0 +1,12 @@ + .syntax unified + .cpu cortex-m4 + .fpu fpv4-sp-d16 + .thumb + .text + .align 2 + .global foo + .thumb + .thumb_func + .type foo, %function +foo: + bx lr diff --git a/ld/testsuite/ld-arm/attr-merge-hardfp-use-2b.s b/ld/testsuite/ld-arm/attr-merge-hardfp-use-2b.s new file mode 100644 index 0000000..59913a3 --- /dev/null +++ b/ld/testsuite/ld-arm/attr-merge-hardfp-use-2b.s @@ -0,0 +1,14 @@ + .thumb + .syntax unified + .cpu cortex-m7 + .fpu fpv5-d16 + .eabi_attribute 27, 2 + .text + .align 2 + .global main + .thumb + .thumb_func + .type main, %function + +main: + bl foo diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-10.d b/ld/testsuite/ld-arm/attr-merge-vfp-10.d index f32f119..a7e2fff 100644 --- a/ld/testsuite/ld-arm/attr-merge-vfp-10.d +++ b/ld/testsuite/ld-arm/attr-merge-vfp-10.d @@ -11,4 +11,3 @@ File Attributes Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_FP_arch: FPv5/FP-D16 for ARMv8 - Tag_ABI_HardFP_use: SP and DP diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-10r.d b/ld/testsuite/ld-arm/attr-merge-vfp-10r.d index 35e0f77..581d1b0 100644 --- a/ld/testsuite/ld-arm/attr-merge-vfp-10r.d +++ b/ld/testsuite/ld-arm/attr-merge-vfp-10r.d @@ -11,4 +11,3 @@ File Attributes Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_FP_arch: FPv5/FP-D16 for ARMv8 - Tag_ABI_HardFP_use: SP and DP diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-12.d b/ld/testsuite/ld-arm/attr-merge-vfp-12.d index f6dff81..c97b9cd 100644 --- a/ld/testsuite/ld-arm/attr-merge-vfp-12.d +++ b/ld/testsuite/ld-arm/attr-merge-vfp-12.d @@ -11,4 +11,3 @@ File Attributes Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_FP_arch: FP for ARMv8 - Tag_ABI_HardFP_use: SP and DP diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-12r.d b/ld/testsuite/ld-arm/attr-merge-vfp-12r.d index 1ce719d..139c608 100644 --- a/ld/testsuite/ld-arm/attr-merge-vfp-12r.d +++ b/ld/testsuite/ld-arm/attr-merge-vfp-12r.d @@ -11,4 +11,3 @@ File Attributes Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_FP_arch: FP for ARMv8 - Tag_ABI_HardFP_use: SP and DP diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-13.d b/ld/testsuite/ld-arm/attr-merge-vfp-13.d index b79f606..4724cf4 100644 --- a/ld/testsuite/ld-arm/attr-merge-vfp-13.d +++ b/ld/testsuite/ld-arm/attr-merge-vfp-13.d @@ -11,4 +11,3 @@ File Attributes Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_FP_arch: FP for ARMv8 - Tag_ABI_HardFP_use: SP and DP diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-13r.d b/ld/testsuite/ld-arm/attr-merge-vfp-13r.d index 4633d4e..cc192bb 100644 --- a/ld/testsuite/ld-arm/attr-merge-vfp-13r.d +++ b/ld/testsuite/ld-arm/attr-merge-vfp-13r.d @@ -11,4 +11,3 @@ File Attributes Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_FP_arch: FP for ARMv8 - Tag_ABI_HardFP_use: SP and DP diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-14.d b/ld/testsuite/ld-arm/attr-merge-vfp-14.d index b93ef50..865351a 100644 --- a/ld/testsuite/ld-arm/attr-merge-vfp-14.d +++ b/ld/testsuite/ld-arm/attr-merge-vfp-14.d @@ -11,4 +11,3 @@ File Attributes Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_FP_arch: FP for ARMv8 - Tag_ABI_HardFP_use: SP and DP diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-14r.d b/ld/testsuite/ld-arm/attr-merge-vfp-14r.d index 2563938..c9e1354 100644 --- a/ld/testsuite/ld-arm/attr-merge-vfp-14r.d +++ b/ld/testsuite/ld-arm/attr-merge-vfp-14r.d @@ -11,4 +11,3 @@ File Attributes Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_FP_arch: FP for ARMv8 - Tag_ABI_HardFP_use: SP and DP diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-6.d b/ld/testsuite/ld-arm/attr-merge-vfp-6.d index 54d063f..2e37b47 100644 --- a/ld/testsuite/ld-arm/attr-merge-vfp-6.d +++ b/ld/testsuite/ld-arm/attr-merge-vfp-6.d @@ -11,4 +11,3 @@ File Attributes Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_FP_arch: VFPv3 - Tag_ABI_HardFP_use: SP and DP diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-6r.d b/ld/testsuite/ld-arm/attr-merge-vfp-6r.d index f32d4fc..8c68442 100644 --- a/ld/testsuite/ld-arm/attr-merge-vfp-6r.d +++ b/ld/testsuite/ld-arm/attr-merge-vfp-6r.d @@ -11,4 +11,3 @@ File Attributes Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_FP_arch: VFPv3 - Tag_ABI_HardFP_use: SP and DP diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-7.d b/ld/testsuite/ld-arm/attr-merge-vfp-7.d index 6b1f9c9..760a82f 100644 --- a/ld/testsuite/ld-arm/attr-merge-vfp-7.d +++ b/ld/testsuite/ld-arm/attr-merge-vfp-7.d @@ -11,4 +11,3 @@ File Attributes Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_FP_arch: FP for ARMv8 - Tag_ABI_HardFP_use: SP and DP diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-7r.d b/ld/testsuite/ld-arm/attr-merge-vfp-7r.d index 6b1f9c9..760a82f 100644 --- a/ld/testsuite/ld-arm/attr-merge-vfp-7r.d +++ b/ld/testsuite/ld-arm/attr-merge-vfp-7r.d @@ -11,4 +11,3 @@ File Attributes Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_FP_arch: FP for ARMv8 - Tag_ABI_HardFP_use: SP and DP diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-8.d b/ld/testsuite/ld-arm/attr-merge-vfp-8.d index 78b74af..22dee2a 100644 --- a/ld/testsuite/ld-arm/attr-merge-vfp-8.d +++ b/ld/testsuite/ld-arm/attr-merge-vfp-8.d @@ -11,4 +11,3 @@ File Attributes Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_FP_arch: FPv5/FP-D16 for ARMv8 - Tag_ABI_HardFP_use: SP and DP diff --git a/ld/testsuite/ld-arm/attr-merge-vfp-8r.d b/ld/testsuite/ld-arm/attr-merge-vfp-8r.d index 1fd5d63..7a21318 100644 --- a/ld/testsuite/ld-arm/attr-merge-vfp-8r.d +++ b/ld/testsuite/ld-arm/attr-merge-vfp-8r.d @@ -11,4 +11,3 @@ File Attributes Tag_ARM_ISA_use: Yes Tag_THUMB_ISA_use: Thumb-1 Tag_FP_arch: FPv5/FP-D16 for ARMv8 - Tag_ABI_HardFP_use: SP and DP