Browse Source

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.
binutils-2_30-branch
H.J. Lu 9 years ago
parent
commit
d664fd41e1
  1. 6
      bfd/ChangeLog
  2. 2
      bfd/elflink.c
  3. 9
      ld/ChangeLog
  4. 4
      ld/testsuite/ld-elf/pr22649-1.s
  5. 8
      ld/testsuite/ld-elf/pr22649-2a.s
  6. 7
      ld/testsuite/ld-elf/pr22649-2b.s
  7. 1
      ld/testsuite/ld-elf/pr22649.msg
  8. 45
      ld/testsuite/ld-elf/shared.exp

6
bfd/ChangeLog

@ -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

2
bfd/elflink.c

@ -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

9
ld/ChangeLog

@ -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

@ -0,0 +1,4 @@
.data
.globl foo
foo:
.dc.a bar

8
ld/testsuite/ld-elf/pr22649-2a.s

@ -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

@ -0,0 +1,7 @@
.data
.hidden foo
.globl foo
.globl bar
foo:
bar:
.dc.a foo

1
ld/testsuite/ld-elf/pr22649.msg

@ -0,0 +1 @@
.*: Removing unused section '\.data' in file 'tmpdir/pr22649-2.*\.o'

45
ld/testsuite/ld-elf/shared.exp

@ -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…
Cancel
Save