From: Nick Clifton Date: Thu, 13 Jun 2013 12:36:02 +0000 (+0000) Subject: PR ld/15302 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2f47f5fc1338185064d87c4ab54773a9f4cfe796;p=binutils-gdb.git PR ld/15302 * elf32-arm.c (allocate_dynrelocs_for_symbol): Transform ST_BRANCH_TO_ARM into ST_BRANCH_TO_THUMB if the target only supports thumb instructions. PR ld/15302 * ld-arm/branch-lks-sym.ld: New script. * ld-arm/thumb-b-lks-sym.s: New test. * ld-arm/thumb-b-lks-sym.d: Expected disassembly. * ld-arm/thumb-bl-lks-sym.s: New test. * ld-arm/thumb-bl-lks-sym.d: Expected disassembly. * ld-arm/arm-elf.exp: Run the new tests. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 01f050d5675..3a3c8f8059b 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2013-06-13 Terry Guo + + PR ld/15302 + * elf32-arm.c (allocate_dynrelocs_for_symbol): Transform + ST_BRANCH_TO_ARM into ST_BRANCH_TO_THUMB if the target only + supports thumb instructions. + 2013-06-11 DJ Delorie * elf32-rl78.c (rl78_elf_relocate_section): Fix OPsub math. diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index 2ed4741b985..fe01c9a5aca 100644 --- a/bfd/elf32-arm.c +++ b/bfd/elf32-arm.c @@ -1,6 +1,5 @@ /* 32-bit ELF support for ARM - Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, - 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. + Copyright 1998-2013 Free Software Foundation, Inc. This file is part of BFD, the Binary File Descriptor library. @@ -13341,6 +13340,12 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf) h->root.u.def.value = th->root.u.def.value & ~1; } + /* Make sure we are not applying ST_BRANCH_TO_ARM to symbols + for thumb-only targets. */ + if (using_thumb_only (htab) + && h->target_internal == ST_BRANCH_TO_ARM) + h->target_internal = ST_BRANCH_TO_THUMB; + if (eh->dyn_relocs == NULL) return TRUE; diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index c2c9806eba9..fa4c8420be4 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2013-06-13 Terry Guo + + PR ld/15302 + * ld-arm/branch-lks-sym.ld: New script. + * ld-arm/thumb-b-lks-sym.s: New test. + * ld-arm/thumb-b-lks-sym.d: Expected disassembly. + * ld-arm/thumb-bl-lks-sym.s: New test. + * ld-arm/thumb-bl-lks-sym.d: Expected disassembly. + * ld-arm/arm-elf.exp: Run the new tests. + 2013-06-07 Will Newton * ld-ifunc/ifunc.exp: Enable ifunc tests for AArch64. diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp index a6abe82878a..fd8a5993a9f 100644 --- a/ld/testsuite/ld-arm/arm-elf.exp +++ b/ld/testsuite/ld-arm/arm-elf.exp @@ -1,6 +1,5 @@ # Expect script for various ARM ELF tests. -# Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012 -# Free Software Foundation, Inc. +# Copyright 2002-2013 Free Software Foundation, Inc. # # This file is part of the GNU Binutils. # @@ -557,6 +556,12 @@ set armeabitests_common { {"Thumb-2 BL" "-Ttext 0x1000 --section-start .foo=0x100100c" "" "" {thumb2-bl-bad.s} {{objdump -d thumb2-bl-bad.d}} "thumb2-bl-bad"} + {"Branch to linker script symbol with BL for thumb-only target" "-T branch-lks-sym.ld" "" "" {thumb-bl-lks-sym.s} + {{objdump -d thumb-bl-lks-sym.d}} + "thumb-bl-lks-sym"} + {"Branch to linker script symbol with B for thumb-only target" "-T branch-lks-sym.ld" "" "" {thumb-b-lks-sym.s} + {{objdump -d thumb-b-lks-sym.d}} + "thumb-b-lks-sym"} {"ARM-ARM farcall" "-Ttext 0x1000 --section-start .foo=0x2001020" "" "" {farcall-arm-arm.s} {{objdump -d farcall-arm-arm.d}} diff --git a/ld/testsuite/ld-arm/branch-lks-sym.ld b/ld/testsuite/ld-arm/branch-lks-sym.ld new file mode 100644 index 00000000000..a70776ffd79 --- /dev/null +++ b/ld/testsuite/ld-arm/branch-lks-sym.ld @@ -0,0 +1 @@ +extFunc = 0x1000 + 1; diff --git a/ld/testsuite/ld-arm/thumb-b-lks-sym.d b/ld/testsuite/ld-arm/thumb-b-lks-sym.d new file mode 100644 index 00000000000..eadd9a44d57 --- /dev/null +++ b/ld/testsuite/ld-arm/thumb-b-lks-sym.d @@ -0,0 +1,7 @@ + +.*: file format.* + +Disassembly of section .text: + +00000000
: + 0: f000 bffe b.w 1000 diff --git a/ld/testsuite/ld-arm/thumb-b-lks-sym.s b/ld/testsuite/ld-arm/thumb-b-lks-sym.s new file mode 100644 index 00000000000..ae62f8bfde8 --- /dev/null +++ b/ld/testsuite/ld-arm/thumb-b-lks-sym.s @@ -0,0 +1,16 @@ +@ Test to ensure that the b to linker script symbol isn't changed to other format. + + + .syntax unified + .cpu cortex-m3 + .fpu softvfp + .thumb + .file "x.c" + .text + .align 2 + .global main + .thumb + .thumb_func + .type main, %function +main: + b extFunc diff --git a/ld/testsuite/ld-arm/thumb-bl-lks-sym.d b/ld/testsuite/ld-arm/thumb-bl-lks-sym.d new file mode 100644 index 00000000000..b553b518e1e --- /dev/null +++ b/ld/testsuite/ld-arm/thumb-bl-lks-sym.d @@ -0,0 +1,12 @@ + +.*: file format.* + +Disassembly of section .text: + +00000000
: + 0: b580 push {r7, lr} + 2: af00 add r7, sp, #0 + 4: f000 fffc bl 1000 + 8: bd80 pop {r7, pc} + a: bf00 nop + diff --git a/ld/testsuite/ld-arm/thumb-bl-lks-sym.s b/ld/testsuite/ld-arm/thumb-bl-lks-sym.s new file mode 100644 index 00000000000..60b7c3a584a --- /dev/null +++ b/ld/testsuite/ld-arm/thumb-bl-lks-sym.s @@ -0,0 +1,19 @@ +@ Test to ensure that the bl to linker script symbol isn't changed to blx with immediate address. + + + .syntax unified + .cpu cortex-m3 + .fpu softvfp + .thumb + .file "x.c" + .text + .align 2 + .global main + .thumb + .thumb_func + .type main, %function +main: + push {r7, lr} + add r7, sp, #0 + bl extFunc + pop {r7, pc}