mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-18 14:53:32 +08:00
Ignore dynamic references on forced local symbols
We should ignore dynamic references on forced local symbols during garbage collection since they can never be referenced dynamically. bfd/ PR ld/22649 * elflink.c (bfd_elf_gc_mark_dynamic_ref_symbol): Ignore dynamic references on forced local symbols. ld/ PR ld/22649 * testsuite/ld-elf/pr22649-1.s: New file. * testsuite/ld-elf/pr22649-2a.s: Likewise. * testsuite/ld-elf/pr22649-2b.s: Likewise. * testsuite/ld-elf/pr22649.msg: Likewise. * testsuite/ld-elf/shared.exp: Run ld/22649 tests.
This commit is contained in:
parent
71d378ae60
commit
d664fd41e1
@ -1,3 +1,9 @@
|
||||
2018-01-11 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/22649
|
||||
* elflink.c (bfd_elf_gc_mark_dynamic_ref_symbol): Ignore dynamic
|
||||
references on forced local symbols.
|
||||
|
||||
2018-01-11 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/22677
|
||||
|
@ -13277,7 +13277,7 @@ bfd_elf_gc_mark_dynamic_ref_symbol (struct elf_link_hash_entry *h, void *inf)
|
||||
|
||||
if ((h->root.type == bfd_link_hash_defined
|
||||
|| h->root.type == bfd_link_hash_defweak)
|
||||
&& (h->ref_dynamic
|
||||
&& ((h->ref_dynamic && !h->forced_local)
|
||||
|| ((h->def_regular || ELF_COMMON_DEF_P (h))
|
||||
&& ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
|
||||
&& ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
|
||||
|
@ -1,3 +1,12 @@
|
||||
2018-01-11 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/22649
|
||||
* testsuite/ld-elf/pr22649-1.s: New file.
|
||||
* testsuite/ld-elf/pr22649-2a.s: Likewise.
|
||||
* testsuite/ld-elf/pr22649-2b.s: Likewise.
|
||||
* testsuite/ld-elf/pr22649.msg: Likewise.
|
||||
* testsuite/ld-elf/shared.exp: Run ld/22649 tests.
|
||||
|
||||
2018-01-11 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR ld/22677
|
||||
|
4
ld/testsuite/ld-elf/pr22649-1.s
Normal file
4
ld/testsuite/ld-elf/pr22649-1.s
Normal file
@ -0,0 +1,4 @@
|
||||
.data
|
||||
.globl foo
|
||||
foo:
|
||||
.dc.a bar
|
8
ld/testsuite/ld-elf/pr22649-2a.s
Normal file
8
ld/testsuite/ld-elf/pr22649-2a.s
Normal file
@ -0,0 +1,8 @@
|
||||
.data
|
||||
.hidden foo
|
||||
.hidden bar
|
||||
.globl foo
|
||||
.globl bar
|
||||
foo:
|
||||
bar:
|
||||
.dc.a foo
|
7
ld/testsuite/ld-elf/pr22649-2b.s
Normal file
7
ld/testsuite/ld-elf/pr22649-2b.s
Normal file
@ -0,0 +1,7 @@
|
||||
.data
|
||||
.hidden foo
|
||||
.globl foo
|
||||
.globl bar
|
||||
foo:
|
||||
bar:
|
||||
.dc.a foo
|
1
ld/testsuite/ld-elf/pr22649.msg
Normal file
1
ld/testsuite/ld-elf/pr22649.msg
Normal file
@ -0,0 +1 @@
|
||||
.*: Removing unused section '\.data' in file 'tmpdir/pr22649-2.*\.o'
|
@ -81,6 +81,51 @@ run_ld_link_tests [list \
|
||||
{} \
|
||||
"pr22471" \
|
||||
] \
|
||||
[list \
|
||||
"Build pr22649-1.so" \
|
||||
"$LFLAGS -shared" \
|
||||
"" \
|
||||
"$AFLAGS_PIC" \
|
||||
{pr22649-1.s} \
|
||||
{} \
|
||||
"pr22649-1.so" \
|
||||
] \
|
||||
[list \
|
||||
"Build pr22649-2a.so" \
|
||||
"$LFLAGS -shared -gc-sections -print-gc-sections" \
|
||||
"" \
|
||||
"$AFLAGS_PIC" \
|
||||
{pr22649-2a.s} \
|
||||
{{ld pr22649.msg}} \
|
||||
"pr22649-2a.so" \
|
||||
] \
|
||||
[list \
|
||||
"Build pr22649-2b.so" \
|
||||
"$LFLAGS -shared -gc-sections -print-gc-sections" \
|
||||
"tmpdir/pr22649-1.so" \
|
||||
"$AFLAGS_PIC" \
|
||||
{pr22649-2a.s} \
|
||||
{{ld pr22649.msg}} \
|
||||
"pr22649-2b.so" \
|
||||
] \
|
||||
[list \
|
||||
"Build pr22649-2c.so" \
|
||||
"$LFLAGS -shared -gc-sections -print-gc-sections" \
|
||||
"" \
|
||||
"$AFLAGS_PIC" \
|
||||
{pr22649-2b.s} \
|
||||
{} \
|
||||
"pr22649-2b.so" \
|
||||
] \
|
||||
[list \
|
||||
"Build pr22649-2d.so" \
|
||||
"$LFLAGS -shared -gc-sections -print-gc-sections" \
|
||||
"tmpdir/pr22649-1.so" \
|
||||
"$AFLAGS_PIC" \
|
||||
{pr22649-2b.s} \
|
||||
{} \
|
||||
"pr22649-2b.so" \
|
||||
] \
|
||||
]
|
||||
|
||||
run_ld_link_tests [list \
|
||||
|
Loading…
Reference in New Issue
Block a user