[binutils-gdb] RISC-V/gas: warn about non-power-of-2 stack-align attribute

Jan Beulich via Binutils-cvs <[email protected]> Fri, 31 Jul 2026 11:54:34 +0000 (GMT)
Newsgroups gmane.comp.gnu.binutils.cvs
Message-ID <[email protected]>
https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D57be7c7e108b=
7f21ad3cb7485535eef641dd585b

commit 57be7c7e108b7f21ad3cb7485535eef641dd585b
Author: Jan Beulich <[email protected]>
Date:   Fri Jul 31 13:50:26 2026 +0200

    RISC-V/gas: warn about non-power-of-2 stack-align attribute
   =20
    Only power-of-2 values are sensible for alignment.
   =20
    Reviewed-by: Jiawei <[email protected]>

Diff:
---
 gas/config/tc-riscv.c                    | 7 +++++++
 gas/testsuite/gas/riscv/attribute-warn.d | 1 +
 gas/testsuite/gas/riscv/attribute-warn.l | 2 ++
 gas/testsuite/gas/riscv/attribute-warn.s | 4 ++++
 4 files changed, 14 insertions(+)

diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
index d4d551b82a0..3abbadc59c1 100644
--- a/gas/config/tc-riscv.c
+++ b/gas/config/tc-riscv.c
@@ -6137,6 +6137,13 @@ s_riscv_attribute (int ignored ATTRIBUTE_UNUSED)
 		   "any instructions"));
       break;
=20
+    case Tag_RISCV_stack_align:
+      if (!attr[Tag_RISCV_stack_align].i
+	  || (attr[Tag_RISCV_stack_align].i &
+	      (attr[Tag_RISCV_stack_align].i - 1)))
+	as_warn (_("`stack_align' attribute with non-power-of-2 value"));
+      break;
+
     case Tag_RISCV_unaligned_access:
       if (attr[Tag_RISCV_unaligned_access].i > 1)
 	as_warn (_("`unaligned_access' attribute with non-boolean value"));
diff --git a/gas/testsuite/gas/riscv/attribute-warn.d b/gas/testsuite/gas/r=
iscv/attribute-warn.d
index d116febabc1..d86c87f7448 100644
--- a/gas/testsuite/gas/riscv/attribute-warn.d
+++ b/gas/testsuite/gas/riscv/attribute-warn.d
@@ -4,4 +4,5 @@
=20
 Attribute Section: riscv
 File Attributes
+  Tag_RISCV_stack_align: 65536-bytes
   Tag_RISCV_arch: [a-zA-Z0-9_\"].*
diff --git a/gas/testsuite/gas/riscv/attribute-warn.l b/gas/testsuite/gas/r=
iscv/attribute-warn.l
index af05da9280d..365563dcfb2 100644
--- a/gas/testsuite/gas/riscv/attribute-warn.l
+++ b/gas/testsuite/gas/riscv/attribute-warn.l
@@ -1,2 +1,4 @@
 .*: Assembler messages:
 .*:2: Warning: `unaligned_access' attribute with non-boolean value
+.*:5: Warning: `stack_align' attribute with non-power-of-2 value
+.*:6: Warning: `stack_align' attribute with non-power-of-2 value
diff --git a/gas/testsuite/gas/riscv/attribute-warn.s b/gas/testsuite/gas/r=
iscv/attribute-warn.s
index fdaed386422..f4110476430 100644
--- a/gas/testsuite/gas/riscv/attribute-warn.s
+++ b/gas/testsuite/gas/riscv/attribute-warn.s
@@ -1,3 +1,7 @@
 	.attribute unaligned_access, 1
 	.attribute unaligned_access, 0x1234
 	.attribute unaligned_access, 0
+
+	.attribute stack_align, 0
+	.attribute stack_align, 0x4444
+	.attribute stack_align, 0x10000