bfd/
authorAlan Modra <amodra@gmail.com>
Fri, 27 Oct 2006 03:22:09 +0000 (03:22 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 27 Oct 2006 03:22:09 +0000 (03:22 +0000)
* section.c (SEC_KEEP): Update comment.
* bfd-in2.h: Regenerate.
* elflink.c (bfd_elf_gc_sections): Ignore SEC_EXCLUDE sections.
* merge.c (_bfd_merge_sections): Set SEC_KEEP on excluded sections.
* stabs.c (_bfd_discard_section_stabs): Likewise.
(_bfd_link_section_stabs): Likewise.  Simplify abs_section check.
ld/
* ldlang.c (lang_map): Don't say SEC_LINKER_CREATED and SEC_KEEP
sections have been discarded.
(lang_do_version_exports_section): Set SEC_KEEP on export section.
* emultempl/elf32.em (before_allocation): Set SEC_KEEP on warning
sections.

bfd/ChangeLog
bfd/bfd-in2.h
bfd/elflink.c
bfd/merge.c
bfd/section.c
bfd/stabs.c
ld/ChangeLog
ld/emultempl/elf32.em
ld/ldlang.c

index 2d418333e65d7d9d4291f816fb10d678cdaa5326..1f8d8f090bbbf5f6bf136bb655346769d7db8cb7 100644 (file)
@@ -1,3 +1,12 @@
+2006-10-27  Alan Modra  <amodra@bigpond.net.au>
+
+       * section.c (SEC_KEEP): Update comment.
+       * bfd-in2.h: Regenerate.
+       * elflink.c (bfd_elf_gc_sections): Ignore SEC_EXCLUDE sections.
+       * merge.c (_bfd_merge_sections): Set SEC_KEEP on excluded sections.
+       * stabs.c (_bfd_discard_section_stabs): Likewise.
+       (_bfd_link_section_stabs): Likewise.  Simplify abs_section check.
+
 2006-10-26  Ben Elliston  <bje@au.ibm.com>
 
        * reloc.c (_bfd_relocate_contents): Remove explicit case 0.
@@ -12,7 +21,7 @@
        (maxq_reloc_map): Likewise.
        (maxq_reloc_type_lookup): Remove loop over maxq_reloc_map.
 
-2006-10-26  Ben Elliston  <bje@au.ibm.com>     
+2006-10-26  Ben Elliston  <bje@au.ibm.com>
 
        * elf.c (bfd_elf_set_dyn_lib_class): Change second argument type
        from int to enum dynamic_lib_link_class lib_class.
index 813d748be9793dd7a52ee8bbe434e78c3d4a9ffa..9b561ad9c1315ca41b65a99096d6b4c0acb987c0 100644 (file)
@@ -1255,7 +1255,9 @@ typedef struct bfd_section
      else up the line will take care of it later.  */
 #define SEC_LINKER_CREATED 0x200000
 
-  /* This section should not be subject to garbage collection.  */
+  /* This section should not be subject to garbage collection.
+     Also set to inform the linker that this section should not be
+     listed in the link map as discarded.  */
 #define SEC_KEEP 0x400000
 
   /* This section contains "short" data, and should be placed
index 34816fac9a38a7b1ef2c194d720ab2fa533d699c..1dad504772786d0f80e427f4cd01013a25b6343a 100644 (file)
@@ -9794,7 +9794,7 @@ bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
        continue;
 
       for (o = sub->sections; o != NULL; o = o->next)
-       if ((o->flags & SEC_KEEP) != 0 && !o->gc_mark)
+       if ((o->flags & (SEC_EXCLUDE | SEC_KEEP)) == SEC_KEEP && !o->gc_mark)
          if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
            return FALSE;
     }
index c1795d29112f71c5c8748636919cd71cc9ea33c0..577a716002ecb3126b193bbbb3631e1d5776ef5c 100644 (file)
@@ -766,7 +766,7 @@ _bfd_merge_sections (bfd *abfd ATTRIBUTE_UNUSED,
           the hash table at all.  */
        for (secinfo = sinfo->chain; secinfo; secinfo = secinfo->next)
          if (secinfo->first_str == NULL)
-           secinfo->sec->flags |= SEC_EXCLUDE;
+           secinfo->sec->flags |= SEC_EXCLUDE | SEC_KEEP;
     }
 
   return TRUE;
index 2b5f7f8df72e40abfc9ee2d2c15ff3549a464fc2..5a100be517f688e86405fe98fb086c5aca67ee81 100644 (file)
@@ -294,7 +294,9 @@ CODE_FRAGMENT
 .     else up the line will take care of it later.  *}
 .#define SEC_LINKER_CREATED 0x200000
 .
-.  {* This section should not be subject to garbage collection.  *}
+.  {* This section should not be subject to garbage collection.
+.     Also set to inform the linker that this section should not be
+.     listed in the link map as discarded.  *}
 .#define SEC_KEEP 0x400000
 .
 .  {* This section contains "short" data, and should be placed
index 4f48e8e8effc2206232f6c0ab8ca9042cd85d482..93ab0a68861f5a109b4cd67d2124d2e2ee817dac 100644 (file)
@@ -175,10 +175,8 @@ _bfd_link_section_stabs (bfd *abfd,
        prepared to handle them.  */
     return TRUE;
 
-  if ((stabsec->output_section != NULL
-       && bfd_is_abs_section (stabsec->output_section))
-      || (stabstrsec->output_section != NULL
-         && bfd_is_abs_section (stabstrsec->output_section)))
+  if (bfd_is_abs_section (stabsec->output_section)
+      || bfd_is_abs_section (stabstrsec->output_section))
     /* At least one of the sections is being discarded from the
        link, so we should just ignore them.  */
     return TRUE;
@@ -433,7 +431,7 @@ _bfd_link_section_stabs (bfd *abfd,
                    ++nest;
                  else if (incl_type == (int) N_EXCL)
                    /* Keep existing exclusion marks.  */
-                   continue;   
+                   continue;
                  else if (nest == 0)
                    {
                      *incl_pstridx = (bfd_size_type) -1;
@@ -458,8 +456,8 @@ _bfd_link_section_stabs (bfd *abfd,
      for that section.  */
   stabsec->size = (count - skip) * STABSIZE;
   if (stabsec->size == 0)
-    stabsec->flags |= SEC_EXCLUDE;
-  stabstrsec->flags |= SEC_EXCLUDE;
+    stabsec->flags |= SEC_EXCLUDE | SEC_KEEP;
+  stabstrsec->flags |= SEC_EXCLUDE | SEC_KEEP;
   sinfo->stabstr->size = _bfd_stringtab_size (sinfo->strings);
 
   /* Calculate the `cumulative_skips' array now that stabs have been
@@ -611,7 +609,7 @@ _bfd_discard_section_stabs (bfd *abfd,
   /* Shrink the stabsec as needed.  */
   stabsec->size -= skip * STABSIZE;
   if (stabsec->size == 0)
-    stabsec->flags |= SEC_EXCLUDE;
+    stabsec->flags |= SEC_EXCLUDE | SEC_KEEP;
 
   /* Recalculate the `cumulative_skips' array now that stabs have been
      deleted for this section.  */
index 17c703bd514a7ce379a2383d49f6c1659519a253..8b69b360e6304fe34576e2220a0b8ad3254e0719 100644 (file)
@@ -1,3 +1,11 @@
+2006-10-27  Alan Modra  <amodra@bigpond.net.au>
+
+       * ldlang.c (lang_map): Don't say SEC_LINKER_CREATED and SEC_KEEP
+       sections have been discarded.
+       (lang_do_version_exports_section): Set SEC_KEEP on export section.
+       * emultempl/elf32.em (before_allocation): Set SEC_KEEP on warning
+       sections.
+
 2006-10-26  Joseph S. Myers  <joseph@codesourcery.com>
             Mark Mitchell  <mark@codesourcery.com>
 
index 3350ac027ab2aa78986ecf1aaefb071683eaad68..99fb8ab880e91078756bfcf366980c4aea5e9c58 100644 (file)
@@ -1214,7 +1214,7 @@ ${ELF_INTERPRETER_SET_DEFAULT}
 
        /* Also set SEC_EXCLUDE, so that symbols defined in the warning
           section don't get copied to the output.  */
-       s->flags |= SEC_EXCLUDE;
+       s->flags |= SEC_EXCLUDE | SEC_KEEP;
       }
   }
 
index 391fc1f2ad2b58aba67592294fe39de787bfc02d..5df51706a72980a5368e0d33616d023496d93ce4 100644 (file)
@@ -1736,8 +1736,9 @@ lang_map (void)
        continue;
 
       for (s = file->the_bfd->sections; s != NULL; s = s->next)
-       if (s->output_section == NULL
-           || s->output_section->owner != output_bfd)
+       if ((s->output_section == NULL
+            || s->output_section->owner != output_bfd)
+           && (s->flags & (SEC_LINKER_CREATED | SEC_KEEP)) == 0)
          {
            if (! dis_header_printed)
              {
@@ -4629,7 +4630,7 @@ lang_size_sections_1
                           &newdot);
 
            /* This symbol is relative to this section.  */
-           if ((tree->type.node_class == etree_provided 
+           if ((tree->type.node_class == etree_provided
                 || tree->type.node_class == etree_assign)
                && (tree->assign.dst [0] != '.'
                    || tree->assign.dst [1] != '\0'))
@@ -6922,7 +6923,7 @@ lang_do_version_exports_section (void)
       /* Do not free the contents, as we used them creating the regex.  */
 
       /* Do not include this section in the link.  */
-      sec->flags |= SEC_EXCLUDE;
+      sec->flags |= SEC_EXCLUDE | SEC_KEEP;
     }
 
   lreg = lang_new_vers_pattern (NULL, "*", NULL, FALSE);