ARM STM32L4XX erratum test failure
authorAlan Modra <amodra@gmail.com>
Wed, 15 May 2019 07:01:28 +0000 (16:31 +0930)
committerAlan Modra <amodra@gmail.com>
Wed, 15 May 2019 07:06:00 +0000 (16:36 +0930)
Fixes a failure seen with MALLOC_PERTURB_=1.

* elf32-arm.c (elf32_arm_write_section): Don't leave
error case of STM32L4XX_ERRATUM_BRANCH_TO_VENEER with
unitialised section contents.

bfd/ChangeLog
bfd/elf32-arm.c

index 60069c28c9c3e93660ec2256d1aaa629ddfab36b..22a69fb78ab8bac5467772c1d40d7a688f9a010a 100644 (file)
@@ -1,3 +1,9 @@
+2019-05-15  Alan Modra  <amodra@gmail.com>
+
+       * elf32-arm.c (elf32_arm_write_section): Don't leave
+       error case of STM32L4XX_ERRATUM_BRANCH_TO_VENEER with
+       unitialised section contents.
+
 2019-05-14  Jamey Hicks  <jamey.hicks@gmail.com>
 
        PR 19921
index 337961d26e16c6458f41d54b2e8dbe6891a5017c..a8d57019c855e192eb6f997554295f562d15f18d 100644 (file)
@@ -19693,6 +19693,9 @@ elf32_arm_write_section (bfd *output_bfd,
                bfd_vma branch_to_veneer =
                  stm32l4xx_errnode->u.b.veneer->vma - stm32l4xx_errnode->vma;
 
+               /* The instruction is before the label.  */
+               target -= 4;
+
                if ((signed) branch_to_veneer < -(1 << 24)
                    || (signed) branch_to_veneer >= (1 << 24))
                  {
@@ -19710,15 +19713,15 @@ elf32_arm_write_section (bfd *output_bfd,
                       output_bfd,
                       (uint64_t) (stm32l4xx_errnode->vma - 4),
                       (int64_t) out_of_range);
+
+                   /* Don't leave contents uninitialised.  */
+                   bfd_put_16 (output_bfd, 0, contents + target);
                    continue;
                  }
 
                insn = create_instruction_branch_absolute
                  (stm32l4xx_errnode->u.b.veneer->vma - stm32l4xx_errnode->vma);
 
-               /* The instruction is before the label.  */
-               target -= 4;
-
                put_thumb2_insn (globals, output_bfd,
                                 (bfd_vma) insn, contents + target);
              }