[ARM] PR ld/21402, only override the symbol dynamic decision on undefined weak symbol.
authorRenlin Li <renlin.li@arm.com>
Mon, 25 Sep 2017 10:41:54 +0000 (11:41 +0100)
committerRenlin Li <renlin.li@arm.com>
Tue, 10 Oct 2017 15:18:07 +0000 (16:18 +0100)
Similar as aarch64 backend, arm backend only overrides the decision on undefined
weak symbols. arm backend part already emits necessary relative relocation for
this case.

bfd/

PR ld/21402
* elf32-arm.c (allocate_dynrelocs_for_symbol): Only make undefined weak
symbols into dynamic.

ld/

PR ld/21402
* testsuite/ld-arm/tls-app.d: Update address.
* testsuite/ld-arm/tls-app.r: Remove relocations.
* testsuite/ld-arm/unresolved-1-dyn.d: Update.

bfd/ChangeLog
bfd/elf32-arm.c
ld/ChangeLog
ld/testsuite/ld-arm/tls-app.d
ld/testsuite/ld-arm/tls-app.r
ld/testsuite/ld-arm/unresolved-1-dyn.d

index f988812..bf400a9 100644 (file)
@@ -1,3 +1,9 @@
+2017-10-10  Renlin Li  <renlin.li@arm.com>
+
+       PR ld/21402
+       * elf32-arm.c (allocate_dynrelocs_for_symbol): Only make undefined weak
+        symbols into dynamic.
+
 2017-10-09  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/22274
index bad8540..f841da7 100644 (file)
@@ -15443,8 +15443,8 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf)
     {
       /* Make sure this symbol is output as a dynamic symbol.
         Undefined weak syms won't yet be marked as dynamic.  */
-      if (h->dynindx == -1
-         && !h->forced_local)
+      if (h->dynindx == -1 && !h->forced_local
+         && h->root.type == bfd_link_hash_undefweak)
        {
          if (! bfd_elf_link_record_dynamic_symbol (info, h))
            return FALSE;
@@ -15531,8 +15531,8 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf)
 
       /* Make sure this symbol is output as a dynamic symbol.
         Undefined weak syms won't yet be marked as dynamic.  */
-      if (h->dynindx == -1
-         && !h->forced_local)
+      if (h->dynindx == -1 && !h->forced_local
+         && h->root.type == bfd_link_hash_undefweak)
        {
          if (! bfd_elf_link_record_dynamic_symbol (info, h))
            return FALSE;
@@ -15755,8 +15755,8 @@ allocate_dynrelocs_for_symbol (struct elf_link_hash_entry *h, void * inf)
        {
          /* Make sure this symbol is output as a dynamic symbol.
             Undefined weak syms won't yet be marked as dynamic.  */
-         if (h->dynindx == -1
-             && !h->forced_local)
+         if (h->dynindx == -1 && !h->forced_local
+             && h->root.type == bfd_link_hash_undefweak)
            {
              if (! bfd_elf_link_record_dynamic_symbol (info, h))
                return FALSE;
index 58f6420..2a7f7bc 100644 (file)
@@ -1,3 +1,10 @@
+2017-10-10  Renlin Li  <renlin.li@arm.com>
+
+       PR ld/21402
+       * testsuite/ld-arm/tls-app.d: Update address.
+       * testsuite/ld-arm/tls-app.r: Remove relocations.
+       * testsuite/ld-arm/unresolved-1-dyn.d: Update.
+
 2017-10-10  Alan Modra  <amodra@gmail.com>
 
        * Makefile.am (earmelfb_fuchsia.c): Rename rule from earmelf_fuchsia.c.
index de0cbab..454adcd 100644 (file)
@@ -2,17 +2,17 @@
 .*:     file format elf32-.*arm.*
 architecture: arm.*, flags 0x00000112:
 EXEC_P, HAS_SYMS, D_PAGED
-start address 0x000081c8
+start address 0x00008[0-9a-f]+
 
 Disassembly of section .text:
 
-000081c8 <foo>:
-    81c8:      e1a00000        nop                     ; \(mov r0, r0\)
-    81cc:      e1a00000        nop                     ; \(mov r0, r0\)
-    81d0:      e1a0f00e        mov     pc, lr
-    81d4:      000080bc        .word   0x000080bc
-    81d8:      000080b4        .word   0x000080b4
-    81dc:      000080ac        .word   0x000080ac
-    81e0:      00000004        .word   0x00000004
-    81e4:      000080c4        .word   0x000080c4
-    81e8:      00000014        .word   0x00000014
+00008[0-9a-f]+ <foo>:
+    8[0-9a-f]+:        e1a00000        nop                     ; \(mov r0, r0\)
+    8[0-9a-f]+:        e1a00000        nop                     ; \(mov r0, r0\)
+    8[0-9a-f]+:        e1a0f00e        mov     pc, lr
+    8[0-9a-f]+:        000080bc        .word   0x000080bc
+    8[0-9a-f]+:        000080b4        .word   0x000080b4
+    8[0-9a-f]+:        000080ac        .word   0x000080ac
+    8[0-9a-f]+:        00000004        .word   0x00000004
+    8[0-9a-f]+:        000080c4        .word   0x000080c4
+    8[0-9a-f]+:        00000014        .word   0x00000014
index b156d52..518c18c 100644 (file)
@@ -3,8 +3,5 @@
 
 DYNAMIC RELOCATION RECORDS
 OFFSET   TYPE              VALUE 
-[0-9a-f]+ R_ARM_TLS_DTPMOD32  app_gd
-[0-9a-f]+ R_ARM_TLS_DTPOFF32  app_gd
 [0-9a-f]+ R_ARM_TLS_DTPMOD32  lib_gd
 [0-9a-f]+ R_ARM_TLS_DTPOFF32  lib_gd
-[0-9a-f]+ R_ARM_TLS_TPOFF32  app_ie
index 21cd959..529da37 100644 (file)
@@ -5,4 +5,4 @@
 
 Relocation section '\.rel\.dyn' .*
  Offset .*
-.* R_ARM_GLOB_DAT +00000000 +foo
+^.*  00000000 R_ARM_NONE.+