From 3a1bb98c3c4f983b950fbaf2797ddcd21fcb5211 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 15 May 2019 16:31:28 +0930 Subject: [PATCH] ARM STM32L4XX erratum test failure 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 | 6 ++++++ bfd/elf32-arm.c | 9 ++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 60069c2..22a69fb 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2019-05-15 Alan Modra + + * 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 PR 19921 diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 337961d..a8d5701 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -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); } -- 2.7.4