aboutsummaryrefslogtreecommitdiff
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 5b03d1c..ab45ad8 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 da7c522..49ffe79 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 f2ab71d..26af870 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 c7847a1..e9c3ed3 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 9f3d209..0c72333 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 4f59af8..d08ff1a 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 6d3121b..b7fc374 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 482088c..c4c51b7 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 83b4c0b..6ab8f24 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 b580fd3..9d87500 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 472f889..c2d5df4 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 97edbef..2bcf25c 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 424bfb0..f4916d3 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 04af982..f78297b 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 1bc6269..1cb7d61 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 7f47450..9b38be8 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 .*