diff --git a/binutils/readelf.c b/binutils/readelf.c index 398a165..86cfd26 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -13197,6 +13197,9 @@ print_mips_fp_abi_value (int val) case Val_GNU_MIPS_ABI_FP_64A: printf (_("Hard float compat (32-bit CPU, 64-bit FPU)\n")); break; + case Val_GNU_MIPS_ABI_FP_NAN2008 : + printf (_("NaN 2008 compatibility\n")); + break; default: printf ("??? (%d)\n", val); break; diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 8f2ec65..f67fbd0 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -3797,6 +3797,10 @@ check_fpabi (int fpabi) Tag_GNU_MIPS_ABI_FP, fpabi); break; + case Val_GNU_MIPS_ABI_FP_NAN2008: + /* Silently ignore compatibility value. */ + break; + default: as_warn (_(".gnu_attribute %d,%d is not a recognized" " floating-point ABI"), Tag_GNU_MIPS_ABI_FP, fpabi); diff --git a/include/elf/mips.h b/include/elf/mips.h index 3926380..57de3bc 100644 --- a/include/elf/mips.h +++ b/include/elf/mips.h @@ -1298,6 +1298,10 @@ enum /* Using -mips32r2 -mfp64 -mno-odd-spreg. */ Val_GNU_MIPS_ABI_FP_64A = 7, + /* This is reserved for backward-compatibility with an earlier + implementation of the MIPS NaN2008 functionality. */ + Val_GNU_MIPS_ABI_FP_NAN2008 = 8, + /* Values defined for Tag_GNU_MIPS_ABI_MSA. */ /* Not tagged or not using any ABIs affected by the differences. */ diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-08.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-08.d index 3eb1797..82215b0 100644 --- a/ld/testsuite/ld-mips-elf/attr-gnu-4-08.d +++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-08.d @@ -5,7 +5,7 @@ Attribute Section: gnu File Attributes - Tag_GNU_MIPS_ABI_FP: \?\?\? \(8\) + Tag_GNU_MIPS_ABI_FP: NaN 2008 compatibility MIPS ABI Flags Version: 0 @@ -13,7 +13,7 @@ ISA: MIPS.* GPR size: .* CPR1 size: .* CPR2 size: 0 -FP ABI: \?\?\? \(8\) +FP ABI: NaN 2008 compatibility ISA Extension: .* ASEs: None diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-09.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-09.d new file mode 100644 index 0000000..20c0eba --- /dev/null +++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-09.d @@ -0,0 +1,21 @@ +#source: attr-gnu-4-0.s +#source: attr-gnu-4-9.s -W +#ld: -r +#readelf: -A + +Attribute Section: gnu +File Attributes + Tag_GNU_MIPS_ABI_FP: \?\?\? \(9\) + +MIPS ABI Flags Version: 0 + +ISA: MIPS.* +GPR size: .* +CPR1 size: .* +CPR2 size: 0 +FP ABI: \?\?\? \(9\) +ISA Extension: .* +ASEs: + None +FLAGS 1: 0000000. +FLAGS 2: 00000000 diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-19.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-19.d new file mode 100644 index 0000000..008dcc1 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-19.d @@ -0,0 +1,22 @@ +#source: attr-gnu-4-1.s +#source: attr-gnu-4-9.s -W +#ld: -r +#readelf: -A +#warning: Warning: .* uses -mdouble-float \(set by .*\), .* uses unknown floating point ABI 9 + +Attribute Section: gnu +File Attributes + Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\) + +MIPS ABI Flags Version: 0 + +ISA: MIPS.* +GPR size: .* +CPR1 size: .* +CPR2 size: 0 +FP ABI: Hard float \(double precision\) +ISA Extension: .* +ASEs: + None +FLAGS 1: 0000000. +FLAGS 2: 00000000 diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-29.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-29.d new file mode 100644 index 0000000..dd460e5 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-29.d @@ -0,0 +1,22 @@ +#source: attr-gnu-4-2.s +#source: attr-gnu-4-9.s -W +#ld: -r +#readelf: -A +#warning: Warning: .* uses -msingle-float \(set by .*\), .* uses unknown floating point ABI 9 + +Attribute Section: gnu +File Attributes + Tag_GNU_MIPS_ABI_FP: Hard float \(single precision\) + +MIPS ABI Flags Version: 0 + +ISA: MIPS.* +GPR size: .* +CPR1 size: .* +CPR2 size: 0 +FP ABI: Hard float \(single precision\) +ISA Extension: .* +ASEs: + None +FLAGS 1: 0000000. +FLAGS 2: 00000000 diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-39.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-39.d new file mode 100644 index 0000000..458c129 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-39.d @@ -0,0 +1,22 @@ +#source: attr-gnu-4-3.s +#source: attr-gnu-4-9.s -W +#ld: -r +#readelf: -A +#warning: Warning: .* uses -msoft-float \(set by .*\), .* uses unknown floating point ABI 9 + +Attribute Section: gnu +File Attributes + Tag_GNU_MIPS_ABI_FP: Soft float + +MIPS ABI Flags Version: 0 + +ISA: MIPS.* +GPR size: .* +CPR1 size: .* +CPR2 size: 0 +FP ABI: Soft float +ISA Extension: .* +ASEs: + None +FLAGS 1: 0000000. +FLAGS 2: 00000000 diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-49.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-49.d new file mode 100644 index 0000000..d03074e --- /dev/null +++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-49.d @@ -0,0 +1,6 @@ +#source: attr-gnu-4-4.s -W +#source: attr-gnu-4-9.s -W +#ld: -r +#error: \A[^\n]*: Warning: .* uses -mips32r2 -mfp64 \(12 callee-saved\) \(set by .*\), .* uses unknown floating point ABI 9\n +#error: [^\n]*: [^\n]* linking -mfp32 module with previous -mfp64 modules\n +#error: [^\n]*: failed to merge target specific data of file [^\n]*\.o\Z diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-59.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-59.d new file mode 100644 index 0000000..59516ce --- /dev/null +++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-59.d @@ -0,0 +1,4 @@ +#source: attr-gnu-4-5.s +#source: attr-gnu-4-9.s -W -mips32r2 +#ld: -r +#warning: Warning: .* uses -mfpxx \(set by .*\), .* uses unknown floating point ABI 9 diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-69.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-69.d new file mode 100644 index 0000000..abf8e3e --- /dev/null +++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-69.d @@ -0,0 +1,4 @@ +#source: attr-gnu-4-6.s +#source: attr-gnu-4-9.s -W -mips32r2 +#ld: -r +#warning: Warning: .* uses -mgp32 -mfp64 \(set by .*\), .* uses unknown floating point ABI 9 diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-79.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-79.d new file mode 100644 index 0000000..a70a22f --- /dev/null +++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-79.d @@ -0,0 +1,4 @@ +#source: attr-gnu-4-7.s +#source: attr-gnu-4-9.s -W -mips32r2 +#ld: -r +#warning: Warning: .* uses -mgp32 -mfp64 -mno-odd-spreg \(set by .*\), .* uses unknown floating point ABI 9 diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-89.d b/ld/testsuite/ld-mips-elf/attr-gnu-4-89.d new file mode 100644 index 0000000..331a3ef --- /dev/null +++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-89.d @@ -0,0 +1,4 @@ +#source: attr-gnu-4-8.s +#source: attr-gnu-4-9.s -W -mips32r2 +#ld: -r +#warning: Warning: .* uses -mgp32 -mfp64 -mno-odd-spreg \(set by .*\), .* uses unknown floating point ABI 8 diff --git a/ld/testsuite/ld-mips-elf/attr-gnu-4-9.s b/ld/testsuite/ld-mips-elf/attr-gnu-4-9.s new file mode 100644 index 0000000..49c7a87 --- /dev/null +++ b/ld/testsuite/ld-mips-elf/attr-gnu-4-9.s @@ -0,0 +1 @@ +.gnu_attribute 4,9 diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp index 923d8df..dd8b228 100644 --- a/ld/testsuite/ld-mips-elf/mips-elf.exp +++ b/ld/testsuite/ld-mips-elf/mips-elf.exp @@ -674,12 +674,12 @@ foreach firstfpabi [list 0 1 2 3 4 5 6 7 ] { } } foreach firstfpabi [list 4 5 6 7 ] { - foreach secondfpabi [list 0 1 2 3 8] { + foreach secondfpabi [list 0 1 2 3 8 9] { run_dump_test "attr-gnu-4-${firstfpabi}${secondfpabi}" $o32flagslist } } foreach firstfpabi [list 0 1 2 3 ] { - foreach secondfpabi [list 0 1 2 3 8] { + foreach secondfpabi [list 0 1 2 3 8 9] { run_dump_test "attr-gnu-4-${firstfpabi}${secondfpabi}" } }