summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog8
-rw-r--r--bfd/elf-bfd.h3
-rw-r--r--bfd/elflink.c4
-rw-r--r--ld/ChangeLog5
-rw-r--r--ld/ldlang.c6
-rw-r--r--ld/testsuite/ChangeLog13
-rw-r--r--ld/testsuite/ld-cris/tls-gc-68.d6
-rw-r--r--ld/testsuite/ld-cris/tls-gc-69.d6
-rw-r--r--ld/testsuite/ld-cris/tls-gc-70.d6
-rw-r--r--ld/testsuite/ld-cris/tls-gc-71.d6
-rw-r--r--ld/testsuite/ld-cris/tls-gc-75.d6
-rw-r--r--ld/testsuite/ld-cris/tls-gc-76.d6
-rw-r--r--ld/testsuite/ld-cris/tls-gc-79.d6
-rw-r--r--ld/testsuite/ld-gc/pr14265.d8
-rw-r--r--ld/testsuite/ld-mmix/bpo-10.d6
-rw-r--r--ld/testsuite/ld-mmix/bpo-11.d6
16 files changed, 64 insertions, 37 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 5b03d1c3678..ab45ad86811 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,13 @@
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
to allow return of first howto.
* elf32-fr30.c (fr30_reloc_type_lookup): Likewise.
diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
index da7c5220744..49ffe797af5 100644
--- a/bfd/elf-bfd.h
+++ b/bfd/elf-bfd.h
@@ -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 \
diff --git a/bfd/elflink.c b/bfd/elflink.c
index f2ab71d58b7..26af87085d2 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -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
diff --git a/ld/ChangeLog b/ld/ChangeLog
index c7847a1806d..e9c3ed38076 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -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.
diff --git a/ld/ldlang.c b/ld/ldlang.c
index 9f3d209dfd1..0c72333499c 100644
--- a/ld/ldlang.c
+++ b/ld/ldlang.c
@@ -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);
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 4f59af8360a..d08ff1a0aa9 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -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
diff --git a/ld/testsuite/ld-cris/tls-gc-68.d b/ld/testsuite/ld-cris/tls-gc-68.d
index 6d3121b9a5b..b7fc3743a57 100644
--- a/ld/testsuite/ld-cris/tls-gc-68.d
+++ b/ld/testsuite/ld-cris/tls-gc-68.d
@@ -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+ .*
diff --git a/ld/testsuite/ld-cris/tls-gc-69.d b/ld/testsuite/ld-cris/tls-gc-69.d
index 482088ce99f..c4c51b7128f 100644
--- a/ld/testsuite/ld-cris/tls-gc-69.d
+++ b/ld/testsuite/ld-cris/tls-gc-69.d
@@ -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+ .*
diff --git a/ld/testsuite/ld-cris/tls-gc-70.d b/ld/testsuite/ld-cris/tls-gc-70.d
index 83b4c0bfe06..6ab8f24231c 100644
--- a/ld/testsuite/ld-cris/tls-gc-70.d
+++ b/ld/testsuite/ld-cris/tls-gc-70.d
@@ -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+ .*
diff --git a/ld/testsuite/ld-cris/tls-gc-71.d b/ld/testsuite/ld-cris/tls-gc-71.d
index b580fd3e035..9d8750038f8 100644
--- a/ld/testsuite/ld-cris/tls-gc-71.d
+++ b/ld/testsuite/ld-cris/tls-gc-71.d
@@ -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\)
#...
diff --git a/ld/testsuite/ld-cris/tls-gc-75.d b/ld/testsuite/ld-cris/tls-gc-75.d
index 472f889bbf4..c2d5df47309 100644
--- a/ld/testsuite/ld-cris/tls-gc-75.d
+++ b/ld/testsuite/ld-cris/tls-gc-75.d
@@ -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+ .*
diff --git a/ld/testsuite/ld-cris/tls-gc-76.d b/ld/testsuite/ld-cris/tls-gc-76.d
index 97edbef1198..2bcf25c27ea 100644
--- a/ld/testsuite/ld-cris/tls-gc-76.d
+++ b/ld/testsuite/ld-cris/tls-gc-76.d
@@ -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:
diff --git a/ld/testsuite/ld-cris/tls-gc-79.d b/ld/testsuite/ld-cris/tls-gc-79.d
index 424bfb0af07..f4916d3f356 100644
--- a/ld/testsuite/ld-cris/tls-gc-79.d
+++ b/ld/testsuite/ld-cris/tls-gc-79.d
@@ -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+ .*
diff --git a/ld/testsuite/ld-gc/pr14265.d b/ld/testsuite/ld-gc/pr14265.d
index 04af9825c1d..f78297b12af 100644
--- a/ld/testsuite/ld-gc/pr14265.d
+++ b/ld/testsuite/ld-gc/pr14265.d
@@ -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
#...
diff --git a/ld/testsuite/ld-mmix/bpo-10.d b/ld/testsuite/ld-mmix/bpo-10.d
index 1bc6269f592..1cb7d611eea 100644
--- a/ld/testsuite/ld-mmix/bpo-10.d
+++ b/ld/testsuite/ld-mmix/bpo-10.d
@@ -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 .*
diff --git a/ld/testsuite/ld-mmix/bpo-11.d b/ld/testsuite/ld-mmix/bpo-11.d
index 7f47450d438..9b38be8913b 100644
--- a/ld/testsuite/ld-mmix/bpo-11.d
+++ b/ld/testsuite/ld-mmix/bpo-11.d
@@ -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 .*