diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2015-10-05 14:45:17 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-10-05 14:45:17 -0700 |
commit | a0d49154d4a471cd36954408b29a348a091efaa3 (patch) | |
tree | b4df8acaf073d72072c11cea50e1f9d6d60430dc | |
parent | e753e154bf8a1f507b43e03dec04b341dde3f429 (diff) | |
download | gdb-a0d49154d4a471cd36954408b29a348a091efaa3.zip gdb-a0d49154d4a471cd36954408b29a348a091efaa3.tar.gz gdb-a0d49154d4a471cd36954408b29a348a091efaa3.tar.bz2 |
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.
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elflink.c | 2 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-elf/exclude.exp | 11 | ||||
-rw-r--r-- | 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 |