* elf-hppa.h (elf_hppa_final_link): Use gp val of zero when none
[deliverable/binutils-gdb.git] / bfd / elf32-i370.c
index d0a28d5b8ade80cca0a268b266f172efab81a2f8..406248937b26eb17ee82120e1f8979f022ba8fd8 100644 (file)
@@ -635,7 +635,6 @@ i370_elf_size_dynamic_sections (bfd *output_bfd,
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       const char *name;
-      bfd_boolean strip;
 
       if ((s->flags & SEC_LINKER_CREATED) == 0)
        continue;
@@ -643,32 +642,15 @@ i370_elf_size_dynamic_sections (bfd *output_bfd,
       /* It's OK to base decisions on the section name, because none
         of the dynobj section names depend upon the input files.  */
       name = bfd_get_section_name (dynobj, s);
-      strip = FALSE;
 
       if (strcmp (name, ".plt") == 0)
        {
-         if (s->size == 0)
-           /* Strip this section if we don't need it; see the
-              comment below.  */
-           strip = TRUE;
-         else
-           /* Remember whether there is a PLT.  */
-           plt = TRUE;
+         /* Remember whether there is a PLT.  */
+         plt = s->size != 0;
        }
       else if (strncmp (name, ".rela", 5) == 0)
        {
-         if (s->size == 0)
-           /* If we don't need this section, strip it from the
-              output file.  This is mostly to handle .rela.bss and
-              .rela.plt.  We must create both sections in
-              create_dynamic_sections, because they must be created
-              before the linker maps input sections to output
-              sections.  The linker does that before
-              adjust_dynamic_symbol is called, and it is that
-              function which decides whether anything needs to go
-              into these sections.  */
-           strip = TRUE;
-         else
+         if (s->size != 0)
            {
              asection *target;
              const char *outname;
@@ -693,24 +675,35 @@ i370_elf_size_dynamic_sections (bfd *output_bfd,
        }
       else if (strcmp (name, ".got") != 0
               && strcmp (name, ".sdata") != 0
-              && strcmp (name, ".sdata2") != 0)
-       /* It's not one of our sections, so don't allocate space.  */
-       continue;
+              && strcmp (name, ".sdata2") != 0
+              && strcmp (name, ".dynbss") != 0
+              && strcmp (name, ".dynsbss") != 0)
+       {
+         /* It's not one of our sections, so don't allocate space.  */
+         continue;
+       }
 
-      if (strip)
+      if (s->size == 0)
        {
-         if (!bfd_section_removed_from_list (s->output_section->owner,
-                                             s->output_section))
-           {
-             bfd_section_list_remove (s->output_section->owner,
-                                      s->output_section);
-             --s->output_section->owner->section_count;
-           }
+         /* If we don't need this section, strip it from the
+            output file.  This is mostly to handle .rela.bss and
+            .rela.plt.  We must create both sections in
+            create_dynamic_sections, because they must be created
+            before the linker maps input sections to output
+            sections.  The linker does that before
+            adjust_dynamic_symbol is called, and it is that
+            function which decides whether anything needs to go
+            into these sections.  */
+         s->flags |= SEC_EXCLUDE;
          continue;
        }
+
+      if ((s->flags & SEC_HAS_CONTENTS) == 0)
+       continue;
+
       /* Allocate memory for the section contents.  */
       s->contents = bfd_zalloc (dynobj, s->size);
-      if (s->contents == NULL && s->size != 0)
+      if (s->contents == NULL)
        return FALSE;
     }
 
@@ -965,7 +958,7 @@ i370_elf_finish_dynamic_sections (bfd *output_bfd,
        }
     }
 
-  if (sgot)
+  if (sgot && sgot->size != 0)
     {
       unsigned char *contents = sgot->contents;
 
This page took 0.033342 seconds and 4 git commands to generate.