MIPS/GAS: Set MSA info in .gnu_attribute section if used

Message ID 20231122090547.1434920-1-yunqiang.su@cipunited.com
State Unresolved
Headers
Series MIPS/GAS: Set MSA info in .gnu_attribute section if used |

Checks

Context Check Description
snail/binutils-gdb-check warning Git am fail log

Commit Message

YunQiang Su Nov. 22, 2023, 9:05 a.m. UTC
  Currently, Tag_GNU_MIPS_ABI_MSA info won't be set, even if
`-mmsa` option is used or `.module msa` pINSN exists.

gas
	* config/tc-mips.c (mips_md_finish): Set msa in
	.gnu_attribute section if msa is used.
	* testsuite/gas/mips/attr-gnu-abi-msa-mmsa.d: New test for
	-mmsa option with empty asm file.
	* testsuite/gas/mips/attribute-gnu-abi-msa-module.d: New test
	for asm file with .module msa.
	* testsuite/gas/mips/attribute-gnu-abi-msa-module.s: Likewise.
	* testsuite/gas/mips/attribute-gnu-abi-msa-1.d: Don't match
	ABI_FP, since it may be differs.
---
 gas/config/tc-mips.c                             |  10 ++++++++++
 gas/testsuite/gas/mips/a.out                     | Bin 0 -> 788 bytes
 gas/testsuite/gas/mips/attr-gnu-abi-msa-1.d      |   2 +-
 gas/testsuite/gas/mips/attr-gnu-abi-msa-mmsa.d   |  11 +++++++++++
 gas/testsuite/gas/mips/attr-gnu-abi-msa-module.d |  10 ++++++++++
 gas/testsuite/gas/mips/attr-gnu-abi-msa-module.s |   1 +
 gas/testsuite/gas/mips/mips.exp                  |   2 ++
 7 files changed, 35 insertions(+), 1 deletion(-)
 create mode 100644 gas/testsuite/gas/mips/a.out
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-abi-msa-mmsa.d
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-abi-msa-module.d
 create mode 100644 gas/testsuite/gas/mips/attr-gnu-abi-msa-module.s

index 97fc8bf3f46..5231698d1a8 100644
  

Patch

diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index 4d40d56902a..1c5e0f04b91 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -20578,6 +20578,7 @@  void
 mips_md_finish (void)
 {
   int fpabi = Val_GNU_MIPS_ABI_FP_ANY;
+  int msaabi = Val_GNU_MIPS_ABI_MSA_ANY;
 
   mips_emit_delays ();
   if (cur_proc_ptr)
@@ -20631,6 +20632,15 @@  mips_md_finish (void)
 	as_fatal (_("error adding attribute: %s"),
 		  bfd_errmsg (bfd_get_error ()));
     }
+  if (!obj_elf_seen_attribute (OBJ_ATTR_GNU, Tag_GNU_MIPS_ABI_FP)
+      && (file_mips_opts.ase & ASE_MSA))
+    {
+      msaabi = Val_GNU_MIPS_ABI_MSA_128;
+      if (!bfd_elf_add_obj_attr_int (stdoutput, OBJ_ATTR_GNU,
+				     Tag_GNU_MIPS_ABI_MSA, msaabi))
+	as_fatal (_ ("error adding attribute: %s"),
+		  bfd_errmsg (bfd_get_error ()));
+    }
 }
 
 /*  Returns the relocation type required for a particular CFI encoding.  */
diff --git a/gas/testsuite/gas/mips/a.out b/gas/testsuite/gas/mips/a.out
new file mode 100644
index 0000000000000000000000000000000000000000..d404be9dd9bfbda61477882ce04b1ddc954d43c9
GIT binary patch
literal 788
zcmah{!AiqG5S{JTw(7z5CU~(YMPyHUkDx-Kg3yaXFB_W1fVLsof}ZrJJ=Zszotg%;
z1G8`6%-fmSO+N3&_ev=eQ`DnhMl@y8r~Jwb&gqa2M7je{TS`;Mi(0g)d2@tFx>%9w
zV$-hje^k<&Q<Xpy3e`-Lt}y~@H~3zIZ@1ILGnn$@&Dj{}iV9z3=aP3vW@eow6PG2K
zB1yBwd`aeE^f)m#&gQQ+MLeGsWN<5Eoh!0<<&tu%^Z(=oX?|vzE^5g8fe(SKlUqk2
zE+D!y1bXmYx=U!#GnZG5z>nc#{F=<K;TJXCQ-}k+aWB^0!g)TiTs8sa>x{s^*XyOE
uStqk|OlmO7Y#jdzz7OP{T#wH&m%C!?3rLMXeRzPiuH)bS*=MRn&invo(=53F

literal 0
HcmV?d00001

diff --git a/gas/testsuite/gas/mips/attr-gnu-abi-msa-1.d b/gas/testsuite/gas/mips/attr-gnu-abi-msa-1.d
--- a/gas/testsuite/gas/mips/attr-gnu-abi-msa-1.d
+++ b/gas/testsuite/gas/mips/attr-gnu-abi-msa-1.d
@@ -4,7 +4,7 @@ 
 
 Attribute Section: gnu
 File Attributes
-  Tag_GNU_MIPS_ABI_FP: Hard float \(double precision\)
+  Tag_GNU_MIPS_ABI_FP: .*
   Tag_GNU_MIPS_ABI_MSA: 128-bit MSA
 
 #...
diff --git a/gas/testsuite/gas/mips/attr-gnu-abi-msa-mmsa.d b/gas/testsuite/gas/mips/attr-gnu-abi-msa-mmsa.d
new file mode 100644
index 00000000000..7485343c053
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-abi-msa-mmsa.d
@@ -0,0 +1,11 @@ 
+#source: empty.s
+#as: -32 -mips32r2 -mmsa -mhard-float
+#readelf: -A
+#name: MIPS gnu_attribute Tag_GNU_MIPS_ABI_MSA,1 (-mmsa)
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(32-bit CPU, 64-bit FPU\)
+  Tag_GNU_MIPS_ABI_MSA: 128-bit MSA
+
+#...
diff --git a/gas/testsuite/gas/mips/attr-gnu-abi-msa-module.d b/gas/testsuite/gas/mips/attr-gnu-abi-msa-module.d
new file mode 100644
index 00000000000..f9e40afe00a
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-abi-msa-module.d
@@ -0,0 +1,10 @@ 
+#as: -32 -mips32r2 -mhard-float
+#readelf: -A
+#name: MIPS gnu_attribute Tag_GNU_MIPS_ABI_MSA,1 (.module msa)
+
+Attribute Section: gnu
+File Attributes
+  Tag_GNU_MIPS_ABI_FP: Hard float \(32-bit CPU, 64-bit FPU\)
+  Tag_GNU_MIPS_ABI_MSA: 128-bit MSA
+
+#...
diff --git a/gas/testsuite/gas/mips/attr-gnu-abi-msa-module.s b/gas/testsuite/gas/mips/attr-gnu-abi-msa-module.s
new file mode 100644
index 00000000000..5b62bfae701
--- /dev/null
+++ b/gas/testsuite/gas/mips/attr-gnu-abi-msa-module.s
@@ -0,0 +1 @@ 
+.module msa
diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
index 777ae6536f0..bfcb3cbfaf3 100644
--- a/gas/testsuite/gas/mips/mips.exp
+++ b/gas/testsuite/gas/mips/mips.exp
@@ -2061,6 +2061,8 @@  if { [istarget mips*-*-vxworks*] } {
 
     run_dump_test "attr-gnu-abi-fp-1"
     run_dump_test "attr-gnu-abi-msa-1"
+    run_dump_test "attr-gnu-abi-msa-mmsa"
+    run_dump_test "attr-gnu-abi-msa-module"
 
     run_dump_test "module-override"
     run_dump_test "module-defer-warn1"