[binutils-gdb] RISC-V/bfd: warn about non-boolean unaligned-access attribute

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

commit 01425f0623b914dffc05a4911513b381494533f6
Author: Jan Beulich <[email protected]>
Date:   Fri Jul 31 13:50:44 2026 +0200

    RISC-V/bfd: warn about non-boolean unaligned-access attribute
   =20
    The attribute being a boolean one, incoming values should be solely 0 or
    1. Convert other non-zero values to 1.
   =20
    Reviewed-by: Jiawei [email protected]

Diff:
---
 bfd/elfxx-riscv.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c
index d6442655716..98ea23fda97 100644
--- a/bfd/elfxx-riscv.c
+++ b/bfd/elfxx-riscv.c
@@ -3892,6 +3892,23 @@ riscv_merge_attributes (bfd *ibfd, struct bfd_link_i=
nfo *info,
 	 initialized.  */
       out_attr[0].i =3D 1;
=20
+      for (i =3D LEAST_KNOWN_OBJ_ATTRIBUTE; i < NUM_KNOWN_OBJ_ATTRIBUTES; =
i++)
+	{
+	  switch (i)
+	    {
+	    case Tag_RISCV_unaligned_access:
+	      if (out_attr[i].i <=3D 1)
+		break;
+
+	      _bfd_error_handler
+		(_("warning: %pB uses non-boolean `unaligned_access' attribute; "
+		   "converting to boolean"),
+		 ibfd);
+	      out_attr[i].i =3D 1;
+	      break;
+	    }
+	}
+
       return true;
     }
=20
@@ -3980,7 +3997,12 @@ riscv_merge_attributes (bfd *ibfd, struct bfd_link_i=
nfo *info,
 	break;
=20
       case Tag_RISCV_unaligned_access:
-	out_attr[i].i |=3D in_attr[i].i;
+	if (in_attr[i].i > 1)
+	  _bfd_error_handler
+	    (_("warning: %pB uses non-boolean `unaligned_access' attribute; "
+	       "converting to boolean"),
+	     ibfd);
+	out_attr[i].i |=3D !!in_attr[i].i;
 	break;
=20
       case Tag_RISCV_stack_align: