Don't attach dynamic sections to input from ld --just-symbols
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 27 Aug 2014 14:39:48 +0000 (07:39 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 27 Aug 2014 14:39:48 +0000 (07:39 -0700)
bfd/

PR ld/17313
* elflink.c (elf_link_add_object_symbols): Don't attach dynamic
sections to input from ld --just-symbols.

2014-08-27  H.J. Lu  <hongjiu.lu@intel.com>

PR ld/17313
* ld-i386/i386.exp (i386tests): Add tests for PR ld/17313.
* ld-x86-64/x86-64.exp (x86_64tests): Likewise.

bfd/ChangeLog
bfd/elflink.c
ld/testsuite/ChangeLog
ld/testsuite/ld-i386/i386.exp
ld/testsuite/ld-x86-64/x86-64.exp

index 9635195..3f81ba4 100644 (file)
@@ -1,3 +1,9 @@
+2014-08-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/17313
+       * elflink.c (elf_link_add_object_symbols): Don't attach dynamic
+       sections to input from ld --just-symbols.
+
 2014-08-26  DJ Delorie  <dj@redhat.com>
 
        * elf32-rl78.c (rl78_elf_relax_section): Disambiguate test for
index 658e584..c1e7948 100644 (file)
@@ -3339,6 +3339,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
   bfd_size_type old_dynstr_size = 0;
   size_t tabsize = 0;
   asection *s;
+  bfd_boolean just_syms;
 
   htab = elf_hash_table (info);
   bed = get_elf_backend_data (abfd);
@@ -3442,15 +3443,20 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
        }
     }
 
+  just_syms = ((s = abfd->sections) != NULL
+              && s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS);
+
   add_needed = TRUE;
   if (! dynamic)
     {
       /* If we are creating a shared library, create all the dynamic
         sections immediately.  We need to attach them to something,
         so we attach them to this BFD, provided it is the right
-        format.  FIXME: If there are no input BFD's of the same
-        format as the output, we can't make a shared library.  */
-      if (info->shared
+        format and is not from ld --just-symbols.  FIXME: If there
+        are no input BFD's of the same format as the output, we can't
+        make a shared library.  */
+      if (!just_syms
+         && info->shared
          && is_elf_hash_table (htab)
          && info->output_bfd->xvec == abfd->xvec
          && !htab->dynamic_sections_created)
@@ -3470,8 +3476,7 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
 
       /* ld --just-symbols and dynamic objects don't mix very well.
         ld shouldn't allow it.  */
-      if ((s = abfd->sections) != NULL
-         && s->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
+      if (just_syms)
        abort ();
 
       /* If this dynamic lib was specified on the command line with
index 6f5ff5e..a7bde81 100644 (file)
@@ -1,3 +1,9 @@
+2014-08-27  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/17313
+       * ld-i386/i386.exp (i386tests): Add tests for PR ld/17313.
+       * ld-x86-64/x86-64.exp (x86_64tests): Likewise.
+
 2014-08-26  Jiong Wang  <jiong.wang@arm.com>
 
        * ld-aarch64/copy-relocs-so.s: New test file.
index 4d22182..875c816 100644 (file)
@@ -183,6 +183,10 @@ set i386tests {
     {"TLS IE->LE transition" "-melf_i386" ""
      "--32" {tlsie1.s}
      {{objdump -dwr tlsie1.dd}} "tlsie1"}
+    {"PR ld/17313 (1)" "-melf_i386" ""
+     "--32" {zero.s} {} ""}
+    {"PR ld/17313 (2)" "-melf_i386 -shared --just-symbols=tmpdir/zero.o" ""
+     "--32" {lea1.s} {} "libpr17313.so"}
 }
 
 # So as to avoid rewriting every last test case here in a nacl variant,
index f6c392b..a9af367 100644 (file)
@@ -136,6 +136,10 @@ set x86_64tests {
      {"build 32-bit object with 33 locals" "-melf_x86_64 -e 0" "" "--32" {32bit.s} {{ ld incompatible.l }} "dummy" }
      {"build 64-bit object" "-melf_x86_64 -e 0 --defsym foo=1" "" "--64" {64bit.s} {} "dummy" }
      {"link mixed objects"  "-melf_x86_64 -e 0 tmpdir/32bit.o tmpdir/64bit.o" "" "" {} { { ld incompatible.l } } "mixed"}
+    {"PR ld/17313 (1)" "-melf_x86_64" ""
+     "--64" {dummy.s} {} ""}
+    {"PR ld/17313 (2)" "-melf_x86_64 -shared --just-symbols=tmpdir/dummy.o" ""
+     "--64" {lea1.s} {} "libpr17313.so"}
 }
 
 # So as to avoid rewriting every last test case here in a nacl variant,