aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorPat Bernardi <bernardi@adacore.com>2020-06-25 16:05:38 -0400
committerAlan Modra <amodra@gmail.com>2020-06-26 14:42:19 +0930
commit85f7484a3a1921649029c4a4fcf3247c3f3bc13c (patch)
treed8cec9b624c9984936c00c9f3389d0c3a757750d /ld
parentba9b3ef5ee666467b67780e81f868c432f4fc56d (diff)
downloadgdb-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/ChangeLog16
-rw-r--r--ld/testsuite/ld-m68k/attr-gnu-4-0.s1
-rw-r--r--ld/testsuite/ld-m68k/attr-gnu-4-00.d4
-rw-r--r--ld/testsuite/ld-m68k/attr-gnu-4-01.d8
-rw-r--r--ld/testsuite/ld-m68k/attr-gnu-4-02.d8
-rw-r--r--ld/testsuite/ld-m68k/attr-gnu-4-1.s1
-rw-r--r--ld/testsuite/ld-m68k/attr-gnu-4-10.d8
-rw-r--r--ld/testsuite/ld-m68k/attr-gnu-4-11.d8
-rw-r--r--ld/testsuite/ld-m68k/attr-gnu-4-12.d4
-rw-r--r--ld/testsuite/ld-m68k/attr-gnu-4-2.s1
-rw-r--r--ld/testsuite/ld-m68k/attr-gnu-4-20.d8
-rw-r--r--ld/testsuite/ld-m68k/attr-gnu-4-21.d4
-rw-r--r--ld/testsuite/ld-m68k/attr-gnu-4-22.d8
-rw-r--r--ld/testsuite/ld-m68k/m68k.exp10
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"