[PATCH, MIPS] Ensure softfloat and single float take precendence in consistency checks
Matthew Fortune
Matthew.Fortune@imgtec.com
Wed Sep 10 20:48:00 GMT 2014
This patch fixes a subtle mistake in the FP ABI consistency check
logic. The error reporting does not currently follow the
intended precedence of the various FP ABIs. I.e. softfloat,
singlefloat and then all the hardfloat variants. When someone
uses -msingle-float with a GNU attribute which is not 4,2 then
the initial warning should be that it is not compatible with
singlefloat. Likewise for softfloat and attribute 4,3.
Tested on a variety of configurations including mips-linux-gnu.
Thanks,
Matthew
gas/
* tc-mips.c (check_fpabi): Move softfloat and single float
checks higher.
gas/testsuite/
* gas/mips/attr-gnu-4-5-msingle-float.l: New file.
* gas/mips/attr-gnu-4-5-msingle-float.s: Likewise.
* gas/mips/attr-gnu-4-5-msoft-float.l: Likewise.
* gas/mips/attr-gnu-4-5-msoft-float.s: Likewise.
* gas/mips/attr-gnu-4-6-msingle-float.l: Update expected output.
* gas/mips/attr-gnu-4-6-msoft-float.l: Likewise.
* gas/mips/attr-gnu-4-7-msingle-float.l: Likewise.
* gas/mips/attr-gnu-4-7-msoft-float.l: Likewise.
* gas/mips/mips.exp: Update expected output for FP ABI 5,6,7.
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index 59d8635..2dabdf4 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -3672,39 +3672,44 @@ fpabi_requires (int fpabi, const char *what)
static void
check_fpabi (int fpabi)
{
- bfd_boolean needs_check = FALSE;
switch (fpabi)
{
case Val_GNU_MIPS_ABI_FP_DOUBLE:
+ if (file_mips_opts.soft_float)
+ fpabi_incompatible_with (fpabi, "softfloat");
+ else if (file_mips_opts.single_float)
+ fpabi_incompatible_with (fpabi, "singlefloat");
if (file_mips_opts.gp == 64 && file_mips_opts.fp == 32)
fpabi_incompatible_with (fpabi, "gp=64 fp=32");
else if (file_mips_opts.gp == 32 && file_mips_opts.fp == 64)
fpabi_incompatible_with (fpabi, "gp=32 fp=64");
- else
- needs_check = TRUE;
break;
case Val_GNU_MIPS_ABI_FP_XX:
if (mips_abi != O32_ABI)
fpabi_requires (fpabi, "-mabi=32");
+ else if (file_mips_opts.soft_float)
+ fpabi_incompatible_with (fpabi, "softfloat");
+ else if (file_mips_opts.single_float)
+ fpabi_incompatible_with (fpabi, "singlefloat");
else if (file_mips_opts.fp != 0)
fpabi_requires (fpabi, "fp=xx");
- else
- needs_check = TRUE;
break;
case Val_GNU_MIPS_ABI_FP_64A:
case Val_GNU_MIPS_ABI_FP_64:
if (mips_abi != O32_ABI)
fpabi_requires (fpabi, "-mabi=32");
+ else if (file_mips_opts.soft_float)
+ fpabi_incompatible_with (fpabi, "softfloat");
+ else if (file_mips_opts.single_float)
+ fpabi_incompatible_with (fpabi, "singlefloat");
else if (file_mips_opts.fp != 64)
fpabi_requires (fpabi, "fp=64");
else if (fpabi == Val_GNU_MIPS_ABI_FP_64 && !file_mips_opts.oddspreg)
fpabi_incompatible_with (fpabi, "nooddspreg");
else if (fpabi == Val_GNU_MIPS_ABI_FP_64A && file_mips_opts.oddspreg)
fpabi_requires (fpabi, "nooddspreg");
- else
- needs_check = TRUE;
break;
case Val_GNU_MIPS_ABI_FP_SINGLE:
@@ -3729,11 +3734,6 @@ check_fpabi (int fpabi)
" floating-point ABI"), Tag_GNU_MIPS_ABI_FP, fpabi);
break;
}
-
- if (needs_check && file_mips_opts.soft_float)
- fpabi_incompatible_with (fpabi, "softfloat");
- else if (needs_check && file_mips_opts.single_float)
- fpabi_incompatible_with (fpabi, "singlefloat");
}
/* Perform consistency checks on the current options. */
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-5-msingle-float.l b/gas/testsuite/gas/mips/attr-gnu-4-5-msingle-float.l
new file mode 100644
index 0000000..be2017d
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-5-msingle-float.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: .gnu_attribute 4,5 is incompatible with `singlefloat'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-5-msingle-float.s b/gas/testsuite/gas/mips/attr-gnu-4-5-msingle-float.s
new file mode 100644
index 0000000..b21ec3b
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-5-msingle-float.s
@@ -0,0 +1 @@
+.gnu_attribute 4,5
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-5-msoft-float.l b/gas/testsuite/gas/mips/attr-gnu-4-5-msoft-float.l
new file mode 100644
index 0000000..3385c5f
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-5-msoft-float.l
@@ -0,0 +1,2 @@
+.*: Assembler messages:
+.*: Warning: .gnu_attribute 4,5 is incompatible with `softfloat'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-5-msoft-float.s b/gas/testsuite/gas/mips/attr-gnu-4-5-msoft-float.s
new file mode 100644
index 0000000..b21ec3b
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-4-5-msoft-float.s
@@ -0,0 +1 @@
+.gnu_attribute 4,5
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-6-msingle-float.l b/gas/testsuite/gas/mips/attr-gnu-4-6-msingle-float.l
index 999b5e2..ab12f1d 100644
--- a/gas/testsuite/gas/mips/attr-gnu-4-6-msingle-float.l
+++ b/gas/testsuite/gas/mips/attr-gnu-4-6-msingle-float.l
@@ -1,2 +1,2 @@
.*: Assembler messages:
-.*: Warning: .gnu_attribute 4,6 is incompatible with `fp=32'
+.*: Warning: .gnu_attribute 4,6 is incompatible with `singlefloat'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-6-msoft-float.l b/gas/testsuite/gas/mips/attr-gnu-4-6-msoft-float.l
index 999b5e2..3bf1946 100644
--- a/gas/testsuite/gas/mips/attr-gnu-4-6-msoft-float.l
+++ b/gas/testsuite/gas/mips/attr-gnu-4-6-msoft-float.l
@@ -1,2 +1,2 @@
.*: Assembler messages:
-.*: Warning: .gnu_attribute 4,6 is incompatible with `fp=32'
+.*: Warning: .gnu_attribute 4,6 is incompatible with `softfloat'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-7-msingle-float.l b/gas/testsuite/gas/mips/attr-gnu-4-7-msingle-float.l
index 999b5e2..ab12f1d 100644
--- a/gas/testsuite/gas/mips/attr-gnu-4-7-msingle-float.l
+++ b/gas/testsuite/gas/mips/attr-gnu-4-7-msingle-float.l
@@ -1,2 +1,2 @@
.*: Assembler messages:
-.*: Warning: .gnu_attribute 4,6 is incompatible with `fp=32'
+.*: Warning: .gnu_attribute 4,6 is incompatible with `singlefloat'
diff --git a/gas/testsuite/gas/mips/attr-gnu-4-7-msoft-float.l b/gas/testsuite/gas/mips/attr-gnu-4-7-msoft-float.l
index 999b5e2..3bf1946 100644
--- a/gas/testsuite/gas/mips/attr-gnu-4-7-msoft-float.l
+++ b/gas/testsuite/gas/mips/attr-gnu-4-7-msoft-float.l
@@ -1,2 +1,2 @@
.*: Assembler messages:
-.*: Warning: .gnu_attribute 4,6 is incompatible with `fp=32'
+.*: Warning: .gnu_attribute 4,6 is incompatible with `softfloat'
diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
index 8f36918..1495b9b 100644
--- a/gas/testsuite/gas/mips/mips.exp
+++ b/gas/testsuite/gas/mips/mips.exp
@@ -1325,9 +1325,9 @@ if { [istarget mips*-*-vxworks*] } {
[mips_arch_list_matching mips32r2]
run_list_test_arches "attr-gnu-4-5-64" "-64 -mfp64" \
[mips_arch_list_matching mips3]
- run_list_test_arches "attr-gnu-4-5" "-32 -msingle-float" \
+ run_list_test_arches "attr-gnu-4-5-msingle-float" "-32 -msingle-float" \
[mips_arch_list_matching mips1]
- run_list_test_arches "attr-gnu-4-5" "-32 -msoft-float" \
+ run_list_test_arches "attr-gnu-4-5-msoft-float" "-32 -msoft-float" \
[mips_arch_list_matching mips1]
run_dump_test_arches "attr-gnu-4-5" \
[mips_arch_list_matching mips2 !r5900]
@@ -1338,9 +1338,9 @@ if { [istarget mips*-*-vxworks*] } {
[mips_arch_list_matching mips32r2]
run_list_test_arches "attr-gnu-4-6-64" "-64 -mfp64" \
[mips_arch_list_matching mips3]
- run_list_test_arches "attr-gnu-4-6" "-32 -msingle-float" \
+ run_list_test_arches "attr-gnu-4-6-msingle-float" "-32 -msingle-float" \
[mips_arch_list_matching mips1]
- run_list_test_arches "attr-gnu-4-6" "-32 -msoft-float" \
+ run_list_test_arches "attr-gnu-4-6-msoft-float" "-32 -msoft-float" \
[mips_arch_list_matching mips1]
run_list_test_arches "attr-gnu-4-6" "-32 -mfpxx" \
[mips_arch_list_matching mips2 !r5900]
@@ -1353,9 +1353,9 @@ if { [istarget mips*-*-vxworks*] } {
[mips_arch_list_matching mips32r2]
run_list_test_arches "attr-gnu-4-7-64" "-64 -mfp64" \
[mips_arch_list_matching mips3]
- run_list_test_arches "attr-gnu-4-7" "-32 -msingle-float" \
+ run_list_test_arches "attr-gnu-4-7-msingle-float" "-32 -msingle-float" \
[mips_arch_list_matching mips1]
- run_list_test_arches "attr-gnu-4-7" "-32 -msoft-float" \
+ run_list_test_arches "attr-gnu-4-7-msoft-float" "-32 -msoft-float" \
[mips_arch_list_matching mips1]
run_list_test_arches "attr-gnu-4-7" "-32 -mfpxx" \
[mips_arch_list_matching mips2 !r5900]
More information about the Binutils
mailing list