Skip the unversioned definition after the default version
authorH.J. Lu <hjl.tools@gmail.com>
Mon, 12 Oct 2015 11:55:24 +0000 (04:55 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 12 Oct 2015 11:57:16 +0000 (04:57 -0700)
We may see an unversioned definition after the default version.  We
should skip the unversioned definition in this case.

bfd/

PR ld/19073
* elflink.c (_bfd_elf_add_default_symbol): Skip the unversioned
definition after the default version.

ld/testsuite/

PR ld/19073
* ld-elf/pr19073.map: New file.
* ld-elf/pr19073.rd: Likewise.
* ld-elf/pr19073.s: Likewise.
* ld-elf/shared.exp (build_tests): Add tests for PR ld/19073.

bfd/ChangeLog
bfd/elflink.c
ld/testsuite/ChangeLog
ld/testsuite/ld-elf/pr19073.map [new file with mode: 0644]
ld/testsuite/ld-elf/pr19073.rd [new file with mode: 0644]
ld/testsuite/ld-elf/pr19073.s [new file with mode: 0644]
ld/testsuite/ld-elf/shared.exp

index ce1089b6a3a3275fefaf42b4c3d0bbd96e517922..abcddc931577629e559a2f511f2be2172eabebaf 100644 (file)
@@ -1,3 +1,9 @@
+2015-10-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/19073
+       * elflink.c (_bfd_elf_add_default_symbol): Skip the unversioned
+       definition after the default version.
+
 2015-10-12  Andreas Krebbel  <krebbel@linux.vnet.ibm.com>
 
        PR ld/19083
index 94bb7109151f061d8a0e18f5668dc1476f594fa8..839cebb16ef6c3beaa60e0b963df55d6f48573d3 100644 (file)
@@ -1715,6 +1715,13 @@ _bfd_elf_add_default_symbol (bfd *abfd,
            h->versioned = versioned;
        }
     }
+  else
+    {
+      /* PR ld/19073: We may see an unversioned definition after the
+        default version.  */
+      if (p == NULL)
+       return TRUE;
+    }
 
   bed = get_elf_backend_data (abfd);
   collect = bed->collect;
index 95a58b8d4bb4f2f2ca695207f257397a652ce63c..ef4631b14e57d892fb3df94e8471e00496d5ef7f 100644 (file)
@@ -1,3 +1,11 @@
+2015-10-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/19073
+       * ld-elf/pr19073.map: New file.
+       * ld-elf/pr19073.rd: Likewise.
+       * ld-elf/pr19073.s: Likewise.
+       * ld-elf/shared.exp (build_tests): Add tests for PR ld/19073.
+
 2015-10-07  Claudiu Zissulescu  <claziss@synopsys.com>
 
        * ld-elf/linkonce1.d: Skip extra relocs before .debug_frame.
diff --git a/ld/testsuite/ld-elf/pr19073.map b/ld/testsuite/ld-elf/pr19073.map
new file mode 100644 (file)
index 0000000..e9adf09
--- /dev/null
@@ -0,0 +1,6 @@
+VERS.1 {
+global:
+  foo;
+local:
+  *;
+};
diff --git a/ld/testsuite/ld-elf/pr19073.rd b/ld/testsuite/ld-elf/pr19073.rd
new file mode 100644 (file)
index 0000000..7785d9f
--- /dev/null
@@ -0,0 +1,5 @@
+Symbol table '\.dynsym' contains [0-9]+ entries:
+ +Num: +Value +Size Type +Bind +Vis +Ndx Name
+#...
+ +[0-9]+: +[0-9a-f]+ +[0-9a-f]+ +FUNC +GLOBAL +DEFAULT +[0-9]+ +foo@@VERS.1
+#...
diff --git a/ld/testsuite/ld-elf/pr19073.s b/ld/testsuite/ld-elf/pr19073.s
new file mode 100644 (file)
index 0000000..f60df4f
--- /dev/null
@@ -0,0 +1,9 @@
+       .text
+       .globl  __foo
+       .type   __foo, %function
+__foo:
+       .byte 0
+       .globl  foo
+       .weak foo
+       .set foo, __foo
+       .symver __foo,foo@@VERS.1
index 007674043ed918e4180982ee042c9c6f153a3276..731eef30911156cf9c1f98354571d5e7422d5140 100644 (file)
@@ -273,6 +273,12 @@ set build_tests {
   {"Build libpr18458b.so"
    "-shared -Wl,-z,now tmpdir/libpr18458a.so" "-fPIC"
    {pr18458b.c} {} "libpr18458b.so"}
+  {"Build pr19073a.o"
+   "-r -nostdlib" ""
+   {pr19073.s} {} "pr19073a.o"}
+  {"Build libpr19073.so"
+   "-shared -Wl,--version-script=pr19073.map tmpdir/pr19073a.o" "-fPIC"
+   {dummy.c} {{readelf {--dyn-syms --wide} pr19073.rd}} "libpr19073.so"}
 }
 
 run_cc_link_tests $build_tests