This is the mail archive of the
binutils-cvs@sourceware.org
mailing list for the binutils project.
[binutils-gdb] Don't re-export common symbols
- From: H.J.Lu <hjl at sourceware dot org>
- To: bfd-cvs at sourceware dot org
- Date: 5 Oct 2015 21:48:56 -0000
- Subject: [binutils-gdb] Don't re-export common symbols
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=a0d49154d4a471cd36954408b29a348a091efaa3
commit a0d49154d4a471cd36954408b29a348a091efaa3
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Mon Oct 5 14:45:17 2015 -0700
Don't re-export common symbols
For ELF linker, a common symbol isn't a definition. When we decide if a
symbol should be re-exported, we should check if the symbol isn't
undefined, not if it is a definition.
bfd/
PR ld/18914
* elflink.c (elf_link_add_object_symbols): Don't re-export a
symbol if it isn't undefined.
ld/testsuite/
PR ld/18914
* ld-elf/exclude.exp: Also check exclude_common.
* ld-elf/exclude2.s: Add exclude_common.
Diff:
---
bfd/ChangeLog | 6 ++++++
bfd/elflink.c | 2 +-
ld/testsuite/ChangeLog | 6 ++++++
ld/testsuite/ld-elf/exclude.exp | 11 +++++++++--
ld/testsuite/ld-elf/exclude2.s | 1 +
5 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 7674750..db6fe6b 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2015-10-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/18914
+ * elflink.c (elf_link_add_object_symbols): Don't re-export a
+ symbol if it isn't undefined.
+
2015-10-04 H.J. Lu <hongjiu.lu@intel.com>
* config.bfd (targ_selvecs, targ64_selvecs): Add iamcu_elf32_vec,
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 90af6cf..94bb710 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -4216,7 +4216,7 @@ error_free_dyn:
/* If this symbol has default visibility and the user has
requested we not re-export it, then mark it as hidden. */
- if (definition
+ if (!bfd_is_und_section (sec)
&& !dynamic
&& abfd->no_export
&& ELF_ST_VISIBILITY (isym->st_other) != STV_INTERNAL)
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index b078d3a..490aa50 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2015-10-05 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/18914
+ * ld-elf/exclude.exp: Also check exclude_common.
+ * ld-elf/exclude2.s: Add exclude_common.
+
2015-10-02 Renlin Li <renlin.li@arm.com>
* ld-aarch64/aarch64-elf.exp (tls-relax-large-le-ie): Run new test.
diff --git a/ld/testsuite/ld-elf/exclude.exp b/ld/testsuite/ld-elf/exclude.exp
index 3b0539d..1b96dac 100644
--- a/ld/testsuite/ld-elf/exclude.exp
+++ b/ld/testsuite/ld-elf/exclude.exp
@@ -83,7 +83,8 @@ if { [ld_simple_link $ld tmpdir/exclude.so "--shared tmpdir/exclude1.o -Ltmpdir
if ![ld_nm $nm "-D" tmpdir/exclude.so] {
unresolved $test2
-} elseif { [info exists nm_output(exclude_sym)] } {
+} elseif { [info exists nm_output(exclude_common)]
+ && [info exists nm_output(exclude_sym)] } {
pass $test2
} else {
fail $test2
@@ -99,7 +100,8 @@ if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs libexclude --shared t
if ![ld_nm $nm "-D" tmpdir/exclude.so] {
unresolved $test4
-} elseif { ! [info exists nm_output(exclude_sym)] } {
+} elseif { ! [info exists nm_output(exclude_common)]
+ && ! [info exists nm_output(exclude_sym)] } {
pass $test4
} else {
fail $test4
@@ -109,6 +111,7 @@ if ![ld_nm $nm "-D" tmpdir/exclude.so] {
if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs libexclude.a --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
&& [ld_nm $nm "-D" tmpdir/exclude.so]
+ && ! [info exists nm_output(exclude_common)]
&& ! [info exists nm_output(exclude_sym)] } {
pass $test5
} else {
@@ -117,6 +120,7 @@ if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs libexclude.a --shared
if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs ALL --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
&& [ld_nm $nm "-D" tmpdir/exclude.so]
+ && ! [info exists nm_output(exclude_common)]
&& ! [info exists nm_output(exclude_sym)] } {
pass $test6
} else {
@@ -125,6 +129,7 @@ if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs ALL --shared tmpdir/e
if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs foo:libexclude.a --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
&& [ld_nm $nm "-D" tmpdir/exclude.so]
+ && ! [info exists nm_output(exclude_common)]
&& ! [info exists nm_output(exclude_sym)] } {
pass $test7
} else {
@@ -133,6 +138,7 @@ if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs foo:libexclude.a --sh
if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs foo,libexclude.a --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
&& [ld_nm $nm "-D" tmpdir/exclude.so]
+ && ! [info exists nm_output(exclude_common)]
&& ! [info exists nm_output(exclude_sym)] } {
pass $test8
} else {
@@ -141,6 +147,7 @@ if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs foo,libexclude.a --sh
if { [ld_simple_link $ld tmpdir/exclude.so "--exclude-libs foo:bar --shared tmpdir/exclude1.o -Ltmpdir -lexclude"]
&& [ld_nm $nm "-D" tmpdir/exclude.so]
+ && [info exists nm_output(exclude_common)]
&& [info exists nm_output(exclude_sym)] } {
pass $test9
} else {
diff --git a/ld/testsuite/ld-elf/exclude2.s b/ld/testsuite/ld-elf/exclude2.s
index e9b5819..f6ade79 100644
--- a/ld/testsuite/ld-elf/exclude2.s
+++ b/ld/testsuite/ld-elf/exclude2.s
@@ -2,3 +2,4 @@
.data
exclude_sym:
.long 0
+ .common exclude_common, 4, 4