]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Fix garbage collection of common symbols
authorAlan Modra <amodra@gmail.com>
Sat, 17 Jan 2015 11:03:43 +0000 (21:33 +1030)
committerAlan Modra <amodra@gmail.com>
Wed, 11 Feb 2015 12:36:42 +0000 (23:06 +1030)
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.

16 files changed:
bfd/ChangeLog
bfd/elf-bfd.h
bfd/elflink.c
ld/ChangeLog
ld/ldlang.c
ld/testsuite/ChangeLog
ld/testsuite/ld-cris/tls-gc-68.d
ld/testsuite/ld-cris/tls-gc-69.d
ld/testsuite/ld-cris/tls-gc-70.d
ld/testsuite/ld-cris/tls-gc-71.d
ld/testsuite/ld-cris/tls-gc-75.d
ld/testsuite/ld-cris/tls-gc-76.d
ld/testsuite/ld-cris/tls-gc-79.d
ld/testsuite/ld-gc/pr14265.d
ld/testsuite/ld-mmix/bpo-10.d
ld/testsuite/ld-mmix/bpo-11.d

index 97f5026ee6b7acae9670cc15c3777d9c647bd439..0300b59f7c77f83387f4d316a227931a02a74c21 100644 (file)
@@ -1,6 +1,13 @@
 2015-02-11  Alan Modra  <amodra@gmail.com>
 
        Apply from master.
+       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-15  Alan Modra  <amodra@gmail.com>
        * elflink.c (_bfd_elf_link_omit_section_dynsym): Return true for
        any output section matching a linker created dynobj section.
index f6cda65f2940394e1a69ed9ee22266e86dc6393a..5069376b57ce71262b4f9a339fa4a9b8e09a5813 100644 (file)
@@ -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                                                        \
index db387f0bcc0eb1eb1cdd2cc306a75f5a47659a60..d1d36db68d3918d5f216587b75fabd5ef7676581 100644 (file)
@@ -12068,7 +12068,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))
@@ -12291,7 +12291,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
index c51672d2e5d10e5df31aada366200c04426060d7..594fc280a9cb39072e487a57cd74b9c1d55524cb 100644 (file)
@@ -1,6 +1,10 @@
 2015-02-11  Alan Modra  <amodra@gmail.com>
 
        Apply from master.
+       2015-01-19  Alan Modra  <amodra@gmail.com>
+       PR 17165
+       * ldlang.c (lang_process): Run lang_common before lang_gc_sections.
+
        2014-12-24  Alan Modra  <amodra@gmail.com>
        * emultempl/elf32.em (gld${EMULATION_NAME}_after_open): Exclude
        shared libraries in loop looking for .eh_frame sections.
index d65e01a857a3578366ae28dbb43305ddc2876574..dc787b008988d78eca1c3f645af8e503c66d8ff2 100644 (file)
@@ -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);
 
index 8de9154d4b4963bb8215eca076c483b666745c4d..a5b868bca2948cad70d562209beb5f2fe27b8059 100644 (file)
@@ -1,6 +1,18 @@
 2015-02-11  Alan Modra  <amodra@gmail.com>
 
        Apply from master.
+       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.
+
        2014-12-23  Alan Modra  <amodra@gmail.com>
        * ld-powerpc/sdabase.s,
        * ld-powerpc/sdabase.t,
index 6d3121b9a5bdf17686181f11eb0c1a0a8bb7fc15..b7fc3743a576e6df06fa4dfb3f5ec2b618eaa14e 100644 (file)
@@ -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+                             .*
index 482088ce99f450d8fd01861b81e0546dac0cfe29..c4c51b7128fa602a6bd66559ecca682e732c21c5 100644 (file)
@@ -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+                             .*
index 83b4c0bfe060cddac679354b98e68f58aaa0133f..6ab8f24231c944815266c5ad4402bfcf0d1c4660 100644 (file)
@@ -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+                             .*
index b580fd3e035d7ca5e61d7f91cd57b9d571cdc93c..9d8750038f84a63a8849ace9c9d73b70be78ba04 100644 (file)
 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\)
 #...
index 472f889bbf41a5aa6a4745ba671a342231883f1f..c2d5df473097c99eec6d467f0586b6f7f6fd952a 100644 (file)
@@ -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+                             .*
index 97edbef11986d342b1e95140a244b98c5b692e15..2bcf25c27eabd9ceb0fe6cdb9dd61189a171c0e3 100644 (file)
@@ -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:
index 424bfb0af07e4c070b75218bfce4677f2279b1ff..f4916d3f356a0bd7ea0e490119eccb45a7f6f5a9 100644 (file)
@@ -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+                             .*
index 04af9825c1d6923663e9e13b569b6448d898946e..f78297b12af943fc830b7494669ce0bcb4ab25ff 100644 (file)
@@ -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
 #...
index 1bc6269f592b08c8db3b2c1c2f3de9c129a95f30..1cb7d611eea006d78df9f6eed00a5486d73387e1 100644 (file)
@@ -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                             .*
index 7f47450d4389dd0f12ea26e39a48484eae4803b9..9b38be8913b228d8b58713e4786fe5c53751c89d 100644 (file)
@@ -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  .*