[PATCH v3 12/13] RISC-V/bfd: warn about non-boolean unaligned-access attribute

Jiawei jiawei@iscas.ac.cn
Mon Jun 22 09:02:40 GMT 2026


On 2026/6/19 19:52, Jan Beulich wrote:
> The attribute being a boolean one, incoming values should be solely 0 or
> 1. Convert other non-zero values to 1.
> ---
> v3: New.
>
> --- a/bfd/elfxx-riscv.c
> +++ b/bfd/elfxx-riscv.c
> @@ -3777,6 +3777,23 @@ riscv_merge_attributes (bfd *ibfd, struc
>   	 initialized.  */
>         out_attr[0].i = 1;
>   
> +      for (i = LEAST_KNOWN_OBJ_ATTRIBUTE; i < NUM_KNOWN_OBJ_ATTRIBUTES; i++)
> +	{
> +	  switch (i)
> +	    {
> +	    case Tag_RISCV_unaligned_access:
> +	      if (out_attr[i].i <= 1)
> +		break;
> +
> +	      _bfd_error_handler
> +		(_("warning: %pB uses non-boolean `unaligned access' attribute; "
> +		   "converting to boolean"),
> +		 ibfd);
> +	      out_attr[i].i = 1;
> +	      break;
> +	    }
> +	}
> +
>         return true;
>       }
>   
> @@ -3865,7 +3882,12 @@ riscv_merge_attributes (bfd *ibfd, struc
>   	break;
>   
>         case Tag_RISCV_unaligned_access:
> -	out_attr[i].i |= 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 |= !!in_attr[i].i;
>   	break;
>   
>         case Tag_RISCV_stack_align:

LGTM.

Checking the copied attributes for the first input
object is necessary, since otherwise a non-boolean unaligned_access 
value from
the first object would be carried into the output unchanged.

One very small wording thought: the gas-side diagnostic uses
`unaligned_access', while this one uses `unaligned access'. Either is fine
with me, using the same spelling might make the diagnostics more
consistent, but this does not need to block the patch.

Reviewed-by: Jiawei jiawei@iscas.ac.cn



More information about the Binutils mailing list