PR ld/15302
authorNick Clifton <nickc@redhat.com>
Thu, 13 Jun 2013 12:36:02 +0000 (12:36 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 13 Jun 2013 12:36:02 +0000 (12:36 +0000)
* 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.

bfd/ChangeLog
bfd/elf32-arm.c
ld/testsuite/ChangeLog
ld/testsuite/ld-arm/arm-elf.exp
ld/testsuite/ld-arm/branch-lks-sym.ld [new file with mode: 0644]
ld/testsuite/ld-arm/thumb-b-lks-sym.d [new file with mode: 0644]
ld/testsuite/ld-arm/thumb-b-lks-sym.s [new file with mode: 0644]
ld/testsuite/ld-arm/thumb-bl-lks-sym.d [new file with mode: 0644]
ld/testsuite/ld-arm/thumb-bl-lks-sym.s [new file with mode: 0644]

index 01f050d5675069b8b0648ebf83f14a28d88e5483..3a3c8f8059ba8f9aa2a8697b604336aef8561880 100644 (file)
@@ -1,3 +1,10 @@
+2013-06-13  Terry Guo  <terry.guo@arm.com>
+
+       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  <dj@redhat.com>
 
        * elf32-rl78.c (rl78_elf_relocate_section): Fix OPsub math.
index 2ed4741b98506dedf8ed0ed9bd77d3feee64c576..fe01c9a5aca6a635248ace15e918d18e13335463 100644 (file)
@@ -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;
 
index c2c9806eba90bffa5be262c6561e1908a4838618..fa4c8420be47ce59a7465a9986d3ea89023e36c2 100644 (file)
@@ -1,3 +1,13 @@
+2013-06-13  Terry Guo  <terry.guo@arm.com>
+
+       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  <will.newton@linaro.org>
 
        * ld-ifunc/ifunc.exp: Enable ifunc tests for AArch64.
index a6abe82878a143d93e3fca52e753c9e3f09a5081..fd8a5993a9fba28d64e3369b1614c4ed0c8bbf97 100644 (file)
@@ -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 (file)
index 0000000..a70776f
--- /dev/null
@@ -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 (file)
index 0000000..eadd9a4
--- /dev/null
@@ -0,0 +1,7 @@
+
+.*:     file format.*
+
+Disassembly of section .text:
+
+00000000 <main>:
+   0:  f000 bffe       b.w     1000 <extFunc>
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 (file)
index 0000000..ae62f8b
--- /dev/null
@@ -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 (file)
index 0000000..b553b51
--- /dev/null
@@ -0,0 +1,12 @@
+
+.*:     file format.*
+
+Disassembly of section .text:
+
+00000000 <main>:
+   0:  b580            push    {r7, lr}
+   2:  af00            add     r7, sp, #0
+   4:  f000 fffc       bl      1000 <extFunc>
+   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 (file)
index 0000000..60b7c3a
--- /dev/null
@@ -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}