From: Alan Modra Date: Thu, 4 Apr 2024 10:18:14 +0000 (+1030) Subject: Re: Update objcopy's --section-alignment option X-Git-Tag: gdb-15-branchpoint~492 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fab240554b76603775e8a0fec45c8b5808380684;p=thirdparty%2Fbinutils-gdb.git Re: Update objcopy's --section-alignment option ubsan: left shift of 1 by 31 places cannot be represented in type 'int' * objcopy.c (setup_section): Avoid undefined behaviour when checking vma and lma for alignment. --- diff --git a/binutils/objcopy.c b/binutils/objcopy.c index 77ab9080946..d9abfdfbb39 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -4340,7 +4340,7 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg) and the VMA was not set by the user and the section does not have relocations associated with it then warn the user. */ - if (osection->vma & ((1 << alignment) - 1) + if ((osection->vma & (((bfd_vma) 1 << alignment) - 1)) != 0 && alignment != bfd_section_alignment (isection) && change_section_address == 0 && ! vma_set_by_user @@ -4352,7 +4352,7 @@ setup_section (bfd *ibfd, sec_ptr isection, void *obfdarg) /* Similar check for a non-aligned LMA. FIXME: Since this is only an LMA, maybe it does not matter if it is not aligned ? */ - if (osection->lma & ((1 << alignment) - 1) + if ((osection->lma & (((bfd_vma) 1 << alignment) - 1)) != 0 && alignment != bfd_section_alignment (isection) && change_section_address == 0 && ! lma_set_by_user