arm: ubsan: shift exponent 4G
authorAlan Modra <amodra@gmail.com>
Tue, 1 Sep 2020 03:08:03 +0000 (12:38 +0930)
committerAlan Modra <amodra@gmail.com>
Tue, 1 Sep 2020 06:32:48 +0000 (16:02 +0930)
* reloc.c (N_ONES): Handle N=0.
* elf32-arm.c (elf32_arm_howto_table_1): Set complain_overflow_dont
for R_ARM_TLS_DESCSEQ and R_ARM_THM_TLS_DESCSEQ.

bfd/ChangeLog
bfd/elf32-arm.c
bfd/reloc.c

index 1d65c6829f51b72b4e44fe0bd86d2fab39e0fe2d..4c152f5183013817873c56aab140a820b25f31ef 100644 (file)
@@ -1,3 +1,9 @@
+2020-09-01  Alan Modra  <amodra@gmail.com>
+
+       * reloc.c (N_ONES): Handle N=0.
+       * elf32-arm.c (elf32_arm_howto_table_1): Set complain_overflow_dont
+       for R_ARM_TLS_DESCSEQ and R_ARM_THM_TLS_DESCSEQ.
+
 2020-09-01  Alan Modra  <amodra@gmail.com>
 
        PR 26429
index 6202695ed300c9c3be76af1d02b54981fa419dbe..2f6bd885550c102cc85bd07d24216c69fc22cf0e 100644 (file)
@@ -1391,7 +1391,7 @@ static reloc_howto_type elf32_arm_howto_table_1[] =
         0,                     /* bitsize */
         FALSE,                 /* pc_relative */
         0,                     /* bitpos */
-        complain_overflow_bitfield,/* complain_on_overflow */
+        complain_overflow_dont,/* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_ARM_TLS_DESCSEQ",   /* name */
         FALSE,                 /* partial_inplace */
@@ -1683,7 +1683,7 @@ static reloc_howto_type elf32_arm_howto_table_1[] =
         0,                     /* bitsize */
         FALSE,                 /* pc_relative */
         0,                     /* bitpos */
-        complain_overflow_bitfield,/* complain_on_overflow */
+        complain_overflow_dont,/* complain_on_overflow */
         bfd_elf_generic_reloc, /* special_function */
         "R_ARM_THM_TLS_DESCSEQ",/* name */
         FALSE,                 /* partial_inplace */
index 7d3479acef4ad1c187ebdd4e7b3b62351286f2f6..b17c5e64ec9f829e272e21912874ef549621c1ba 100644 (file)
@@ -432,8 +432,9 @@ DESCRIPTION
 .
 */
 
-/* N_ONES produces N one bits, without overflowing machine arithmetic.  */
-#define N_ONES(n) (((((bfd_vma) 1 << ((n) - 1)) - 1) << 1) | 1)
+/* N_ONES produces N one bits, without undefined behaviour for N
+   between zero and the number of bits in a bfd_vma.  */
+#define N_ONES(n) ((n) == 0 ? 0 : ((bfd_vma) 1 << ((n) - 1) << 1) - 1)
 
 /*
 FUNCTION