Re: Always keep sections marked with SEC_KEEP
authorAlan Modra <amodra@gmail.com>
Thu, 22 Oct 2015 23:44:51 +0000 (10:14 +1030)
committerAlan Modra <amodra@gmail.com>
Thu, 22 Oct 2015 23:52:26 +0000 (10:22 +1030)
Revert bba037e0, it breaks the gc-sections model.  Instead fix the
underlying problem which is that _bfd_elf_gc_mark_hook is too late to
be setting SEC_KEEP.

PR ld/11133
PR ld/19161
* elflink.c (elf_gc_sweep): Revert last patch.
(_bfd_elf_gc_mark_hook): Don't set SEC_KEEP here.

bfd/ChangeLog
bfd/elflink.c

index 60b79ed..481d972 100644 (file)
@@ -1,3 +1,10 @@
+2015-10-23  Alan Modra  <amodra@gmail.com>
+
+       PR ld/11133
+       PR ld/19161
+       * elflink.c (elf_gc_sweep): Revert last patch.
+       (_bfd_elf_gc_mark_hook): Don't set SEC_KEEP here.
+
 2015-10-22  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/19161
index 06df821..6dcc431 100644 (file)
@@ -12101,7 +12101,7 @@ _bfd_elf_gc_mark_hook (asection *sec,
                {
                  sec = bfd_get_section_by_name (i, sec_name);
                  if (sec)
-                   sec->flags |= SEC_KEEP;
+                   return sec;
                }
            }
          break;
@@ -12449,8 +12449,7 @@ elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
              o->gc_mark = first->gc_mark;
            }
 
-         /* Always keep sections marked with SEC_KEEP.  */
-         if (o->gc_mark || (o->flags & SEC_KEEP))
+         if (o->gc_mark)
            continue;
 
          /* Skip sweeping sections already excluded.  */