]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
elf: Treat undefined version as hidden
authorH.J. Lu <hjl.tools@gmail.com>
Sun, 1 Aug 2021 14:26:20 +0000 (07:26 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 4 Aug 2021 12:07:42 +0000 (05:07 -0700)
Since undefined version can't be used to resolve any references without
the original definition, treat it as hidden.

bfd/

PR binutils/28158
* elf.c (_bfd_elf_get_symbol_version_string): Treat undefined
version as hidden.

ld/

PR binutils/28158
* testsuite/ld-elf/linux-x86.exp: Run PR binutils/28158 tests.
* testsuite/ld-elf/pr28158-1.c: New file.
* testsuite/ld-elf/pr28158-2.S: Likewise.
* testsuite/ld-elf/pr28158.nd: Likewise.
* testsuite/ld-elf/pr28158.rd: Likewise.
* testsuite/ld-elf/pr28158.t: Likewise.
* testsuite/ld-elfvers/vers2.dsym: Updated.
* testsuite/ld-elfvers/vers3.dsym: Likewise.
* testsuite/ld-elfvers/vers6.dsym: Likewise.
* testsuite/ld-elfvers/vers19.dsym: Likewise.
* testsuite/ld-elfvers/vers22.dsym: Likewise.
* testsuite/ld-elfvers/vers23.dsym: Likewise.
* testsuite/ld-elfvers/vers23d.dsym: Likewise.
* testsuite/ld-elfvers/vers27d4.dsym: Likewise.
* testsuite/ld-elfvers/vers28c.dsym: Likewise.

16 files changed:
bfd/elf.c
ld/testsuite/ld-elf/linux-x86.exp
ld/testsuite/ld-elf/pr28158-1.c [new file with mode: 0644]
ld/testsuite/ld-elf/pr28158-2.S [new file with mode: 0644]
ld/testsuite/ld-elf/pr28158.nd [new file with mode: 0644]
ld/testsuite/ld-elf/pr28158.rd [new file with mode: 0644]
ld/testsuite/ld-elf/pr28158.t [new file with mode: 0644]
ld/testsuite/ld-elfvers/vers19.dsym
ld/testsuite/ld-elfvers/vers2.dsym
ld/testsuite/ld-elfvers/vers22.dsym
ld/testsuite/ld-elfvers/vers23.dsym
ld/testsuite/ld-elfvers/vers23d.dsym
ld/testsuite/ld-elfvers/vers27d4.dsym
ld/testsuite/ld-elfvers/vers28c.dsym
ld/testsuite/ld-elfvers/vers3.dsym
ld/testsuite/ld-elfvers/vers6.dsym

index d0898855de8a2b8d8cf7f3f7aa230dcc795bc738..5941eeb010bef549605beb166938793ae398edff 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -1944,6 +1944,7 @@ _bfd_elf_get_symbol_version_string (bfd *abfd, asymbol *symbol,
                {
                  if (a->vna_other == vernum)
                    {
+                     *hidden = true;
                      version_string = a->vna_nodename;
                      break;
                    }
index 819237415e6404c8ee8034ab5b88b008342118af..ee03b565fafd1b1a057af5c159804c1e7fc51def 100644 (file)
@@ -117,6 +117,23 @@ run_cc_link_tests [list \
        {{readelf -rn indirect-extern-access-3.rd}} \
        "indirect-extern-access-2b" \
     ] \
+    [list \
+       "Build pr28158.so" \
+       "-shared -Wl,-version-script,pr27128.t" \
+       "-fPIC" \
+       { pr28158-1.c } \
+       {} \
+       "pr28158.so" \
+    ] \
+    [list \
+       "Build pr28158" \
+       "$NOPIE_LDFLAGS -Wl,--no-as-needed  \
+        tmpdir/pr28158.so" \
+       "" \
+       { pr28158-2.S } \
+       {{readelf {--dyn-syms -W} pr28158.rd} {nm -D pr28158.nd}} \
+       "pr28158" \
+    ] \
 ]
 
 run_ld_link_exec_tests [list \
diff --git a/ld/testsuite/ld-elf/pr28158-1.c b/ld/testsuite/ld-elf/pr28158-1.c
new file mode 100644 (file)
index 0000000..2bc87d0
--- /dev/null
@@ -0,0 +1 @@
+int foo = 0;
diff --git a/ld/testsuite/ld-elf/pr28158-2.S b/ld/testsuite/ld-elf/pr28158-2.S
new file mode 100644 (file)
index 0000000..4e703b2
--- /dev/null
@@ -0,0 +1,16 @@
+       .text
+       .section        .text.startup,"ax",@progbits
+       .p2align 4
+       .globl  main
+       .type   main, @function
+main:
+       .cfi_startproc
+#ifdef __x86_64__
+       movl    foo(%rip), %eax
+#else
+       movl    foo, %eax
+#endif
+       ret
+       .cfi_endproc
+       .size   main, .-main
+       .section        .note.GNU-stack,"",@progbits
diff --git a/ld/testsuite/ld-elf/pr28158.nd b/ld/testsuite/ld-elf/pr28158.nd
new file mode 100644 (file)
index 0000000..3b1a9bc
--- /dev/null
@@ -0,0 +1,3 @@
+#...
+[0-9a-z]+ B foo@VERS_2.0
+#pass
diff --git a/ld/testsuite/ld-elf/pr28158.rd b/ld/testsuite/ld-elf/pr28158.rd
new file mode 100644 (file)
index 0000000..7488410
--- /dev/null
@@ -0,0 +1,7 @@
+#ld: -shared -version-script pr27128.t
+#readelf: --dyn-syms --wide
+#target: x86_64-*-linux* i?86-*-linux-gnu
+
+#...
+ +[0-9]+: +[0-9a-f]+ +[0-9]+ +OBJECT +GLOBAL +DEFAULT +[1-9]+ foo@VERS_2.0 \(2\)
+#pass
diff --git a/ld/testsuite/ld-elf/pr28158.t b/ld/testsuite/ld-elf/pr28158.t
new file mode 100644 (file)
index 0000000..2b82842
--- /dev/null
@@ -0,0 +1,6 @@
+VERS_2.0 {
+global:
+  foo;
+local:
+  *;
+};
index a77f94901277f8aa7aa1394317b0cd46d3869498..798466fb8bd851c2805cea9e6fe51d36bfdd3801 100644 (file)
@@ -1 +1 @@
-[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +VERS_2\.0 +(0x[0-9a-f]+ )?_?show_foo
+[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +\(VERS_2\.0\) +(0x[0-9a-f]+ )?_?show_foo
index 30ba91b82b492910a5893bcdf5424312176eb4c1..f820fdc97173eec3491a7c21f1b776dccadbfeb1 100644 (file)
@@ -1,3 +1,3 @@
-[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +VERS_2\.0 +(0x[0-9a-f]+ )?_?show_foo
+[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +\(VERS_2\.0\) +(0x[0-9a-f]+ )?_?show_foo
 0+ g +DO \*ABS\*       0+ +VERS_XXX_1\.1 VERS_XXX_1\.1
 [0-9a-f]+ g +DF (\.text|\.opd|\*ABS\*) [0-9a-f]+ +VERS_XXX_1\.1 (0x[0-9a-f]+ )?_?show_xyzzy
index db2aeec4bc329c959ef025b24d0ef9c0f03f3921..65a183345a2b402eb131d073eb58793bd97377ac 100644 (file)
@@ -1 +1 @@
-[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +VERS\.0 +(0x[0-9a-f]+ )?_?bar
+[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +\(VERS\.0\) +(0x[0-9a-f]+ )?_?bar
index dfd6a3321ad051ba5311aa99c1be05bf98a7a892..d6c93b4b508fc74baf58030e23821e18fa67c421 100644 (file)
@@ -1 +1 @@
-[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +VERS\.0 +(0x[0-9a-f]+ )?_?foo
+[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +\(VERS\.0\) +(0x[0-9a-f]+ )?_?foo
index ab5fbd834e7680f7be060f8e672a88f17b1c97ff..12f8c59fe05e77e08aa4f4ffba071936cecc597d 100644 (file)
@@ -1,2 +1,2 @@
-[0-9a-f]*      DF \*UND\*      [0-9a-f]*  VERS.0      (0x[0-9a-f][0-9a-f] )?_?bar
-[0-9a-f]*      DF \*UND\*      [0-9a-f]*  VERS.0      (0x[0-9a-f][0-9a-f] )?_?foo
+[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +\(VERS\.0\) +(0x[0-9a-f]+ )?_?bar
+[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +\(VERS\.0\) +(0x[0-9a-f]+ )?_?foo
index dfd6a3321ad051ba5311aa99c1be05bf98a7a892..d6c93b4b508fc74baf58030e23821e18fa67c421 100644 (file)
@@ -1 +1 @@
-[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +VERS\.0 +(0x[0-9a-f]+ )?_?foo
+[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +\(VERS\.0\) +(0x[0-9a-f]+ )?_?foo
index 7ad56789eeae1819b8ddc5ef599e4cd5f5c3b954..a575eff0d2c98cf64eca102529b9931a0f3dd6fe 100644 (file)
@@ -1 +1 @@
-[0-9a-f]+[     ]+DF[   ]+\*UND\*[      ]+[0-9a-f]+[    ]+VERS\.0[      ]+(0x[0-9a-f]+ )?_?foo
+[0-9a-f]+[     ]+DF[   ]+\*UND\*[      ]+[0-9a-f]+[    ]+\(VERS\.0\)[  ]+(0x[0-9a-f]+ )?_?foo
index a77f94901277f8aa7aa1394317b0cd46d3869498..798466fb8bd851c2805cea9e6fe51d36bfdd3801 100644 (file)
@@ -1 +1 @@
-[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +VERS_2\.0 +(0x[0-9a-f]+ )?_?show_foo
+[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +\(VERS_2\.0\) +(0x[0-9a-f]+ )?_?show_foo
index a5a805377ca519f7dbbb2a20a64aa2b6740e9617..6d07312764810c9ab519f9502280b9c6d1f0aada 100644 (file)
@@ -1,4 +1,4 @@
 [0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +Base +(0x[0-9a-f]+ )?_?show_foo
-[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +VERS_2.0 +(0x[0-9a-f]+ )?_?show_foo
-[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +VERS_1.2 +(0x[0-9a-f]+ )?_?show_foo
-[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +VERS_1.1 +(0x[0-9a-f]+ )?_?show_foo
+[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +\(VERS_2.0\) +(0x[0-9a-f]+ )?_?show_foo
+[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +\(VERS_1.2\) +(0x[0-9a-f]+ )?_?show_foo
+[0-9a-f]+ +DF \*UND\*  [0-9a-f]+ +\(VERS_1.1\) +(0x[0-9a-f]+ )?_?show_foo