diff options
author | Pat Bernardi <bernardi@adacore.com> | 2020-06-25 16:05:38 -0400 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2020-06-26 14:42:19 +0930 |
commit | 85f7484a3a1921649029c4a4fcf3247c3f3bc13c (patch) | |
tree | d8cec9b624c9984936c00c9f3389d0c3a757750d /ld | |
parent | ba9b3ef5ee666467b67780e81f868c432f4fc56d (diff) | |
download | gdb-85f7484a3a1921649029c4a4fcf3247c3f3bc13c.zip gdb-85f7484a3a1921649029c4a4fcf3247c3f3bc13c.tar.gz gdb-85f7484a3a1921649029c4a4fcf3247c3f3bc13c.tar.bz2 |
m68k: tag floating-point ABI used
This patch adds GNU attribute support to m68k and utilises it to tag the
floating-point calling convention used (hard-float or soft-float). It enables
the linker to ensure linked objects use a consistent floating-point ABI and
allows tools like GDB to infer the ABI used from the ELF file. It is based on
similar work done for PowerPC.
bfd/
* elf32-m68k.c (m68k_elf_merge_obj_attributes): New function.
(elf32_m68k_merge_private_bfd_data): Merge GNU attributes.
binutils/
* readelf.c (display_m68k_gnu_attribute): New function.
(process_arch_specific): Call display_m68k_gnu_attribute for EM_68K.
gas/
* config/tc-m68k.c (m68k_elf_gnu_attribute): New function.
(md_pseudo_table): Handle "gnu_attribute".
* doc/as.texi: Document GNU attribute for M68K.
include/
* elf/m68k.h: Add enum for GNU object attribute with floating point
tag name and values.
ld/
* testsuite/ld-m68k/attr-gnu-4-0.s: New file.
* testsuite/ld-m68k/attr-gnu-4-1.s: Likewise.
* testsuite/ld-m68k/attr-gnu-4-2.s: Likewise.
* testsuite/ld-m68k/attr-gnu-4-00.d: Likewise.
* testsuite/ld-m68k/attr-gnu-4-01.d: Likewise.
* testsuite/ld-m68k/attr-gnu-4-02.d: Likewise.
* testsuite/ld-m68k/attr-gnu-4-10.d: Likewise.
* testsuite/ld-m68k/attr-gnu-4-11.d: Likewise.
* testsuite/ld-m68k/attr-gnu-4-12.d: Likewise.
* testsuite/ld-m68k/attr-gnu-4-20.d: Likewise.
* testsuite/ld-m68k/attr-gnu-4-21.d: Likewise.
* testsuite/ld-m68k/attr-gnu-4-22.d: Likewise.
* testsuite/ld-m68k/m68k.exp: Run the new tests.
Diffstat (limited to 'ld')
-rw-r--r-- | ld/ChangeLog | 16 | ||||
-rw-r--r-- | ld/testsuite/ld-m68k/attr-gnu-4-0.s | 1 | ||||
-rw-r--r-- | ld/testsuite/ld-m68k/attr-gnu-4-00.d | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-m68k/attr-gnu-4-01.d | 8 | ||||
-rw-r--r-- | ld/testsuite/ld-m68k/attr-gnu-4-02.d | 8 | ||||
-rw-r--r-- | ld/testsuite/ld-m68k/attr-gnu-4-1.s | 1 | ||||
-rw-r--r-- | ld/testsuite/ld-m68k/attr-gnu-4-10.d | 8 | ||||
-rw-r--r-- | ld/testsuite/ld-m68k/attr-gnu-4-11.d | 8 | ||||
-rw-r--r-- | ld/testsuite/ld-m68k/attr-gnu-4-12.d | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-m68k/attr-gnu-4-2.s | 1 | ||||
-rw-r--r-- | ld/testsuite/ld-m68k/attr-gnu-4-20.d | 8 | ||||
-rw-r--r-- | ld/testsuite/ld-m68k/attr-gnu-4-21.d | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-m68k/attr-gnu-4-22.d | 8 | ||||
-rw-r--r-- | ld/testsuite/ld-m68k/m68k.exp | 10 |
14 files changed, 89 insertions, 0 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 6f58650..4a38fa8 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,19 @@ +2020-06-26 Pat Bernardi <bernardi@adacore.com> + + * testsuite/ld-m68k/attr-gnu-4-0.s: New file. + * testsuite/ld-m68k/attr-gnu-4-1.s: Likewise. + * testsuite/ld-m68k/attr-gnu-4-2.s: Likewise. + * testsuite/ld-m68k/attr-gnu-4-00.d: Likewise. + * testsuite/ld-m68k/attr-gnu-4-01.d: Likewise. + * testsuite/ld-m68k/attr-gnu-4-02.d: Likewise. + * testsuite/ld-m68k/attr-gnu-4-10.d: Likewise. + * testsuite/ld-m68k/attr-gnu-4-11.d: Likewise. + * testsuite/ld-m68k/attr-gnu-4-12.d: Likewise. + * testsuite/ld-m68k/attr-gnu-4-20.d: Likewise. + * testsuite/ld-m68k/attr-gnu-4-21.d: Likewise. + * testsuite/ld-m68k/attr-gnu-4-22.d: Likewise. + * testsuite/ld-m68k/m68k.exp: Run the new tests. + 2020-06-24 H.J. Lu <hongjiu.lu@intel.com> PR ld/26165 diff --git a/ld/testsuite/ld-m68k/attr-gnu-4-0.s b/ld/testsuite/ld-m68k/attr-gnu-4-0.s new file mode 100644 index 0000000..a143746 --- /dev/null +++ b/ld/testsuite/ld-m68k/attr-gnu-4-0.s @@ -0,0 +1 @@ +.gnu_attribute 4,0 diff --git a/ld/testsuite/ld-m68k/attr-gnu-4-00.d b/ld/testsuite/ld-m68k/attr-gnu-4-00.d new file mode 100644 index 0000000..467ad60 --- /dev/null +++ b/ld/testsuite/ld-m68k/attr-gnu-4-00.d @@ -0,0 +1,4 @@ +#source: attr-gnu-4-0.s +#source: attr-gnu-4-0.s +#ld: -r +#readelf: -A diff --git a/ld/testsuite/ld-m68k/attr-gnu-4-01.d b/ld/testsuite/ld-m68k/attr-gnu-4-01.d new file mode 100644 index 0000000..1e7fef0 --- /dev/null +++ b/ld/testsuite/ld-m68k/attr-gnu-4-01.d @@ -0,0 +1,8 @@ +#source: attr-gnu-4-0.s +#source: attr-gnu-4-1.s +#ld: -r +#readelf: -A + +Attribute Section: gnu +File Attributes + Tag_GNU_M68K_ABI_FP: hard float diff --git a/ld/testsuite/ld-m68k/attr-gnu-4-02.d b/ld/testsuite/ld-m68k/attr-gnu-4-02.d new file mode 100644 index 0000000..cc3945a --- /dev/null +++ b/ld/testsuite/ld-m68k/attr-gnu-4-02.d @@ -0,0 +1,8 @@ +#source: attr-gnu-4-0.s +#source: attr-gnu-4-2.s +#ld: -r +#readelf: -A + +Attribute Section: gnu +File Attributes + Tag_GNU_M68K_ABI_FP: soft float diff --git a/ld/testsuite/ld-m68k/attr-gnu-4-1.s b/ld/testsuite/ld-m68k/attr-gnu-4-1.s new file mode 100644 index 0000000..e985a56 --- /dev/null +++ b/ld/testsuite/ld-m68k/attr-gnu-4-1.s @@ -0,0 +1 @@ +.gnu_attribute 4,1 diff --git a/ld/testsuite/ld-m68k/attr-gnu-4-10.d b/ld/testsuite/ld-m68k/attr-gnu-4-10.d new file mode 100644 index 0000000..a6a798b --- /dev/null +++ b/ld/testsuite/ld-m68k/attr-gnu-4-10.d @@ -0,0 +1,8 @@ +#source: attr-gnu-4-1.s +#source: attr-gnu-4-0.s +#ld: -r +#readelf: -A + +Attribute Section: gnu +File Attributes + Tag_GNU_M68K_ABI_FP: hard float diff --git a/ld/testsuite/ld-m68k/attr-gnu-4-11.d b/ld/testsuite/ld-m68k/attr-gnu-4-11.d new file mode 100644 index 0000000..ecc66a4 --- /dev/null +++ b/ld/testsuite/ld-m68k/attr-gnu-4-11.d @@ -0,0 +1,8 @@ +#source: attr-gnu-4-1.s +#source: attr-gnu-4-1.s +#ld: -r +#readelf: -A + +Attribute Section: gnu +File Attributes + Tag_GNU_M68K_ABI_FP: hard float diff --git a/ld/testsuite/ld-m68k/attr-gnu-4-12.d b/ld/testsuite/ld-m68k/attr-gnu-4-12.d new file mode 100644 index 0000000..49526b1 --- /dev/null +++ b/ld/testsuite/ld-m68k/attr-gnu-4-12.d @@ -0,0 +1,4 @@ +#source: attr-gnu-4-1.s +#source: attr-gnu-4-2.s +#ld: -r +#error: .* uses hard float, .* uses soft float.* diff --git a/ld/testsuite/ld-m68k/attr-gnu-4-2.s b/ld/testsuite/ld-m68k/attr-gnu-4-2.s new file mode 100644 index 0000000..54ebf4e --- /dev/null +++ b/ld/testsuite/ld-m68k/attr-gnu-4-2.s @@ -0,0 +1 @@ +.gnu_attribute 4,2 diff --git a/ld/testsuite/ld-m68k/attr-gnu-4-20.d b/ld/testsuite/ld-m68k/attr-gnu-4-20.d new file mode 100644 index 0000000..92b410a --- /dev/null +++ b/ld/testsuite/ld-m68k/attr-gnu-4-20.d @@ -0,0 +1,8 @@ +#source: attr-gnu-4-2.s +#source: attr-gnu-4-0.s +#ld: -r +#readelf: -A + +Attribute Section: gnu +File Attributes + Tag_GNU_M68K_ABI_FP: soft float diff --git a/ld/testsuite/ld-m68k/attr-gnu-4-21.d b/ld/testsuite/ld-m68k/attr-gnu-4-21.d new file mode 100644 index 0000000..390dada --- /dev/null +++ b/ld/testsuite/ld-m68k/attr-gnu-4-21.d @@ -0,0 +1,4 @@ +#source: attr-gnu-4-2.s +#source: attr-gnu-4-1.s +#ld: -r +#error: .* uses hard float, .* uses soft float.* diff --git a/ld/testsuite/ld-m68k/attr-gnu-4-22.d b/ld/testsuite/ld-m68k/attr-gnu-4-22.d new file mode 100644 index 0000000..cfa9b35 --- /dev/null +++ b/ld/testsuite/ld-m68k/attr-gnu-4-22.d @@ -0,0 +1,8 @@ +#source: attr-gnu-4-2.s +#source: attr-gnu-4-2.s +#ld: -r +#readelf: -A + +Attribute Section: gnu +File Attributes + Tag_GNU_M68K_ABI_FP: soft float diff --git a/ld/testsuite/ld-m68k/m68k.exp b/ld/testsuite/ld-m68k/m68k.exp index df859ba..610b435 100644 --- a/ld/testsuite/ld-m68k/m68k.exp +++ b/ld/testsuite/ld-m68k/m68k.exp @@ -92,3 +92,13 @@ if { [istarget m68k-*-linux*] } then { run_ld_link_tests $m68k_tls_tests } + +run_dump_test "attr-gnu-4-00" +run_dump_test "attr-gnu-4-01" +run_dump_test "attr-gnu-4-02" +run_dump_test "attr-gnu-4-10" +run_dump_test "attr-gnu-4-11" +run_dump_test "attr-gnu-4-12" +run_dump_test "attr-gnu-4-20" +run_dump_test "attr-gnu-4-21" +run_dump_test "attr-gnu-4-22" |