Fix garbage collection of common symbols
Running lang_common before garbage collection means slightly less work in garbage collection code, since common symbols should no longer appear there. It does have the side effect of keeping linker script symbols (at least those defined outside of sections) global too, hence some testsuite churn. bfd/ PR 17165 * elf-bfd.h (ELF_COMMON_DEF): Note that this might be true for linker script assignments too. * elflink.c (elf_gc_sweep_symbol): Don't drop ELF_COMMON_DEF syms. (bfd_elf_gc_mark_dynamic_ref_symbol): Similarly. ld/ PR 17165 * ldlang.c (lang_process): Run lang_common before lang_gc_sections. ld/testsuite/ * ld-gc/pr14265.d, * ld-cris/tls-gc-68.d, * ld-cris/tls-gc-69.d, * ld-cris/tls-gc-70.d, * ld-cris/tls-gc-71.d, * ld-cris/tls-gc-75.d, * ld-cris/tls-gc-76.d, * ld-cris/tls-gc-79.d, * ld-mmix/bpo-10.d, * ld-mmix/bpo-11.d: Update.
This commit is contained in:
parent
740bdc67c0
commit
c4621b339e
16 changed files with 64 additions and 37 deletions
|
@ -1,3 +1,11 @@
|
|||
2015-01-19 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 17165
|
||||
* elf-bfd.h (ELF_COMMON_DEF_P): Note that this might be true for
|
||||
linker script assignments too.
|
||||
* elflink.c (elf_gc_sweep_symbol): Don't drop ELF_COMMON_DEF syms.
|
||||
(bfd_elf_gc_mark_dynamic_ref_symbol): Similarly.
|
||||
|
||||
2015-01-19 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elf32-bfin.c (bfin_bfd_reloc_type_lookup): Correct loop iteration
|
||||
|
|
|
@ -241,7 +241,8 @@ struct elf_link_hash_entry
|
|||
_bfd_elf_symbol_refs_local_p (H, INFO, 1)
|
||||
|
||||
/* Common symbols that are turned into definitions don't have the
|
||||
DEF_REGULAR flag set, so they might appear to be undefined. */
|
||||
DEF_REGULAR flag set, so they might appear to be undefined.
|
||||
Symbols defined in linker scripts also don't have DEF_REGULAR set. */
|
||||
#define ELF_COMMON_DEF_P(H) \
|
||||
(!(H)->def_regular \
|
||||
&& !(H)->def_dynamic \
|
||||
|
|
|
@ -12113,7 +12113,7 @@ elf_gc_sweep_symbol (struct elf_link_hash_entry *h, void *data)
|
|||
if (!h->mark
|
||||
&& (((h->root.type == bfd_link_hash_defined
|
||||
|| h->root.type == bfd_link_hash_defweak)
|
||||
&& !(h->def_regular
|
||||
&& !((h->def_regular || ELF_COMMON_DEF_P (h))
|
||||
&& h->root.u.def.section->gc_mark))
|
||||
|| h->root.type == bfd_link_hash_undefined
|
||||
|| h->root.type == bfd_link_hash_undefweak))
|
||||
|
@ -12336,7 +12336,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->def_regular
|
||||
|| ((h->def_regular || ELF_COMMON_DEF_P (h))
|
||||
&& ELF_ST_VISIBILITY (h->other) != STV_INTERNAL
|
||||
&& ELF_ST_VISIBILITY (h->other) != STV_HIDDEN
|
||||
&& (!info->executable
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2015-01-19 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 17165
|
||||
* ldlang.c (lang_process): Run lang_common before lang_gc_sections.
|
||||
|
||||
2015-01-14 Jiong Wang <jiong.wang@arm.com>
|
||||
|
||||
* ld-arm/elf32-reject.s: New testcase.
|
||||
|
|
|
@ -6701,12 +6701,12 @@ lang_process (void)
|
|||
lang_do_assignments (lang_mark_phase_enum);
|
||||
expld.phase = lang_first_phase_enum;
|
||||
|
||||
/* Remove unreferenced sections if asked to. */
|
||||
lang_gc_sections ();
|
||||
|
||||
/* Size up the common data. */
|
||||
lang_common ();
|
||||
|
||||
/* Remove unreferenced sections if asked to. */
|
||||
lang_gc_sections ();
|
||||
|
||||
/* Update wild statements. */
|
||||
update_wild_statements (statement_list.head);
|
||||
|
||||
|
|
|
@ -1,3 +1,16 @@
|
|||
2015-01-19 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* ld-gc/pr14265.d,
|
||||
* ld-cris/tls-gc-68.d,
|
||||
* ld-cris/tls-gc-69.d,
|
||||
* ld-cris/tls-gc-70.d,
|
||||
* ld-cris/tls-gc-71.d,
|
||||
* ld-cris/tls-gc-75.d,
|
||||
* ld-cris/tls-gc-76.d,
|
||||
* ld-cris/tls-gc-79.d,
|
||||
* ld-mmix/bpo-10.d,
|
||||
* ld-mmix/bpo-11.d: Update.
|
||||
|
||||
2015-01-16 Andreas Krebbel <krebbel@linux.vnet.ibm.com>
|
||||
|
||||
* ld-s390/tlsbin.dd: The nopr register operand is optional and not
|
||||
|
|
|
@ -21,11 +21,11 @@ private flags = 0:
|
|||
SYMBOL TABLE:
|
||||
0+80074 l d \.text 0+ \.text
|
||||
0+82078 l d \.got 0+ \.got
|
||||
0+82084 l \.got 0+ __bss_start
|
||||
0+82084 l \.got 0+ _edata
|
||||
0+82078 l O \.got 0+ _GLOBAL_OFFSET_TABLE_
|
||||
0+820a0 l \.got 0+ _end
|
||||
0+80074 g \.text 0+ _start
|
||||
0+82084 g \.got 0+ __bss_start
|
||||
0+82084 g \.got 0+ _edata
|
||||
0+820a0 g \.got 0+ _end
|
||||
|
||||
Contents of section \.text:
|
||||
80074 41b20+ .*
|
||||
|
|
|
@ -22,11 +22,11 @@ private flags = 0:
|
|||
SYMBOL TABLE:
|
||||
0+80074 l d \.text 0+ \.text
|
||||
0+82078 l d \.got 0+ \.got
|
||||
0+82084 l \.got 0+ __bss_start
|
||||
0+82084 l \.got 0+ _edata
|
||||
0+82078 l O \.got 0+ _GLOBAL_OFFSET_TABLE_
|
||||
0+820a0 l \.got 0+ _end
|
||||
0+80074 g \.text 0+ _start
|
||||
0+82084 g \.got 0+ __bss_start
|
||||
0+82084 g \.got 0+ _edata
|
||||
0+820a0 g \.got 0+ _end
|
||||
|
||||
Contents of section .text:
|
||||
80074 41b20+ .*
|
||||
|
|
|
@ -22,11 +22,11 @@ private flags = 0:
|
|||
SYMBOL TABLE:
|
||||
0+80074 l d \.text 0+ \.text
|
||||
0+82078 l d \.got 0+ \.got
|
||||
0+82084 l \.got 0+ __bss_start
|
||||
0+82084 l \.got 0+ _edata
|
||||
0+82078 l O \.got 0+ _GLOBAL_OFFSET_TABLE_
|
||||
0+820a0 l \.got 0+ _end
|
||||
0+80074 g \.text 0+ _start
|
||||
0+82084 g \.got 0+ __bss_start
|
||||
0+82084 g \.got 0+ _edata
|
||||
0+820a0 g \.got 0+ _end
|
||||
|
||||
Contents of section \.text:
|
||||
80074 41b20+ .*
|
||||
|
|
|
@ -17,11 +17,11 @@
|
|||
DYNAMIC SYMBOL TABLE:
|
||||
0+18e l d \.text 0+ \.text
|
||||
0+2194 l d \.tdata 0+ \.tdata
|
||||
0+2280 l D \.got 0+ __bss_start
|
||||
0+2280 l D \.got 0+ _edata
|
||||
0+2280 l D \.got 0+ _end
|
||||
0+18e g DF \.text 0+2 _init
|
||||
0+2280 g D \.got 0+ __bss_start
|
||||
0+ g D .tdata 0+80 tls128
|
||||
0+2280 g D \.got 0+ _edata
|
||||
0+2280 g D \.got 0+ _end
|
||||
|
||||
DYNAMIC RELOCATION RECORDS \(none\)
|
||||
#...
|
||||
|
|
|
@ -24,11 +24,11 @@ private flags = 0:
|
|||
SYMBOL TABLE:
|
||||
0+80074 l d \.text 0+ \.text
|
||||
0+82078 l d \.got 0+ \.got
|
||||
0+82084 l \.got 0+ __bss_start
|
||||
0+82084 l \.got 0+ _edata
|
||||
0+82078 l O \.got 0+ _GLOBAL_OFFSET_TABLE_
|
||||
0+820a0 l \.got 0+ _end
|
||||
0+80074 g \.text 0+ _start
|
||||
0+82084 g \.got 0+ __bss_start
|
||||
0+82084 g \.got 0+ _edata
|
||||
0+820a0 g \.got 0+ _end
|
||||
|
||||
Contents of section \.text:
|
||||
80074 41b20+ .*
|
||||
|
|
|
@ -25,11 +25,11 @@ SYMBOL TABLE:
|
|||
0+ l df \*ABS\* 0+ .*
|
||||
0+82090 l O \.data 0+4 gc76var
|
||||
0+ l df \*ABS\* 0+ .*
|
||||
0+82094 l \.data 0+ __bss_start
|
||||
0+82094 l \.data 0+ _edata
|
||||
0+82080 l O \.got 0+ _GLOBAL_OFFSET_TABLE_
|
||||
0+820a0 l \.data 0+ _end
|
||||
0+80074 g \.text 0+ _start
|
||||
0+82094 g \.data 0+ __bss_start
|
||||
0+82094 g \.data 0+ _edata
|
||||
0+820a0 g \.data 0+ _end
|
||||
0+80078 g F \.text 0+6 gc76fn
|
||||
|
||||
Contents of section \.text:
|
||||
|
|
|
@ -22,11 +22,11 @@ private flags = 0:
|
|||
SYMBOL TABLE:
|
||||
0+80074 l d \.text 0+ \.text
|
||||
0+82078 l d \.got 0+ \.got
|
||||
0+82084 l \.got 0+ __bss_start
|
||||
0+82084 l \.got 0+ _edata
|
||||
0+82078 l O \.got 0+ _GLOBAL_OFFSET_TABLE_
|
||||
0+820a0 l \.got 0+ _end
|
||||
0+80074 g \.text 0+ _start
|
||||
0+82084 g \.got 0+ __bss_start
|
||||
0+82084 g \.got 0+ _edata
|
||||
0+820a0 g \.got 0+ _end
|
||||
|
||||
Contents of section \.text:
|
||||
80074 41b20+ .*
|
||||
|
|
|
@ -4,10 +4,10 @@
|
|||
#nm: --format=bsd --numeric-sort
|
||||
|
||||
#...
|
||||
[0-9a-f]+[ ]d[ ]_*foo1_start
|
||||
[0-9a-f]+[ ][dD][ ]_*foo1_start
|
||||
[0-9a-f]+[ ]D[ ]_*foo1
|
||||
[0-9a-f]+[ ]d[ ]_*foo1_end
|
||||
[0-9a-f]+[ ]d[ ]_*foo2_start
|
||||
[0-9a-f]+[ ][dD][ ]_*foo1_end
|
||||
[0-9a-f]+[ ][dD][ ]_*foo2_start
|
||||
[0-9a-f]+[ ]D[ ]_*foo2
|
||||
[0-9a-f]+[ ]d[ ]_*foo2_end
|
||||
[0-9a-f]+[ ][dD][ ]_*foo2_end
|
||||
#...
|
||||
|
|
|
@ -15,10 +15,10 @@ SYMBOL TABLE:
|
|||
0+ l df \*ABS\* 0+ .*
|
||||
0+ l \.init 0+ _start
|
||||
0+ l df \*ABS\* 0+ .*
|
||||
2000000000000000 l \.init 0+ __bss_start
|
||||
2000000000000000 l \.init 0+ _edata
|
||||
2000000000000000 l \.init 0+ _end
|
||||
0+4 l \.init 0+ _start\.
|
||||
2000000000000000 g \.init 0+ __bss_start
|
||||
2000000000000000 g \.init 0+ _edata
|
||||
2000000000000000 g \.init 0+ _end
|
||||
|
||||
Contents of section \.init:
|
||||
0000 e37704a6 .*
|
||||
|
|
|
@ -17,12 +17,12 @@ SYMBOL TABLE:
|
|||
0+ l df \*ABS\* 0+ .*
|
||||
0+ l \.init 0+ _start
|
||||
0+ l df \*ABS\* 0+ .*
|
||||
2000000000000000 l \.text 0+ __bss_start
|
||||
2000000000000000 l \.text 0+ _edata
|
||||
2000000000000000 l \.text 0+ _end
|
||||
0+10 l \.text 0+ _start\.
|
||||
0+14 g \.text 0+ x
|
||||
0+10 g \.text 0+ x2
|
||||
2000000000000000 g \.text 0+ __bss_start
|
||||
2000000000000000 g \.text 0+ _edata
|
||||
2000000000000000 g \.text 0+ _end
|
||||
|
||||
Contents of section \.init:
|
||||
0000 00000000 0000003d 00000000 0000003a .*
|
||||
|
|
Loading…
Reference in a new issue