* elf-hppa.h (elf_hppa_final_link): Use gp val of zero when none
	of the usual sections are found.
	* elf-m10300.c (_bfd_mn10300_elf_size_dynamic_sections): Tidy.
	Strip .dynbss if it is zero size.
	* elf32-arm.c (elf32_arm_size_dynamic_sections): Likewise.
	* elf32-cris.c (elf_cris_size_dynamic_sections): Likewise.
	* elf32-hppa.c (elf32_hppa_size_dynamic_sections): Likewise.
	* elf32-i370.c (i370_elf_size_dynamic_sections): Likewise, and
	.dynsbss.
	(i370_elf_finish_dynamic_sections): Don't attempt to write .got
	when it is zero size.
	* elf32-i386.c (elf_i386_size_dynamic_sections): Correct handling
	of .dynbss and zero size sections.
	* elf32-m32r.c (m32r_elf_size_dynamic_sections): Strip .dynbss if
	it is zero size.
	* elf32-m68k.c (elf_m68k_size_dynamic_sections): Tidy.  Strip
	.dynbss if zero size.
	* elf32-ppc.c (ppc_elf_size_dynamic_sections): Likewise, .dynsbss
	too.
	* elf32-s390.c (elf_s390_size_dynamic_sections): Likewise.
	* elf32-sh.c (sh_elf_size_dynamic_sections): Likewise.
	* elf32-vax.c (elf_vax_size_dynamic_sections): Likewise.
	* elf32-xtensa.c (elf_xtensa_size_dynamic_sections): Tidy.  Strip
	.plt.* and .got.plt.* if zero size.
	* elf64-alpha.c (elf64_alpha_size_dynamic_sections): Tidy.  Strip
	.got* and .dynbss if zero size.
	* elf64-hppa.c (elf64_hppa_size_dynamic_sections): Tidy.  Strip
	* elf64-ppc.c (create_linkage_sections): Create branch lookup table
	in .data.rel.ro.brlt or .rodata.brlt, and similarly for associated
	reloc section.
	(create_got_section): Always create new .got and .rela.got sections.
	(ppc64_elf_size_dynamic_sections): Tidy.  Strip .dynbss if zero size.
	* elf64-s390.c (elf_s390_size_dynamic_sections): Likewise.
	* elf64-sh64.c (sh64_elf64_size_dynamic_sections): Likewise.
	* elf64-x86-64.c (elf64_x86_64_size_dynamic_sections): Handle
	dynamic bss sections correctly.
	* elfxx-mips.c (_bfd_mips_elf_size_dynamic_sections): Tidy.
	* elfxx-sparc.c (_bfd_sparc_elf_size_dynamic_sections): Tidy.  Strip
	.dynbss if zero size.
diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c
index 2e09c6e..2868a02 100644
--- a/bfd/elf64-alpha.c
+++ b/bfd/elf64-alpha.c
@@ -2767,7 +2767,6 @@
   for (s = dynobj->sections; s != NULL; s = s->next)
     {
       const char *name;
-      bfd_boolean strip;
 
       if (!(s->flags & SEC_LINKER_CREATED))
 	continue;
@@ -2776,23 +2775,11 @@
 	 of the dynobj section names depend upon the input files.  */
       name = bfd_get_section_name (dynobj, s);
 
-      /* If we don't need this section, strip it from the output file.
-	 This is to handle .rela.bss and .rela.plt.  We must create it
-	 in create_dynamic_sections, because it 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 = FALSE;
-
       if (strncmp (name, ".rela", 5) == 0)
 	{
-	  strip = (s->size == 0);
-
-	  if (!strip)
+	  if (s->size != 0)
 	    {
-	      if (strcmp(name, ".rela.plt") == 0)
+	      if (strcmp (name, ".rela.plt") == 0)
 		relplt = TRUE;
 
 	      /* We use the reloc_count field as a counter if we need
@@ -2800,19 +2787,30 @@
 	      s->reloc_count = 0;
 	    }
 	}
-      else if (strcmp (name, ".plt") != 0)
+      else if (strncmp (name, ".got", 4) != 0
+	       && strcmp (name, ".plt") != 0
+	       && strcmp (name, ".dynbss") != 0)
 	{
 	  /* It's not one of our dynamic sections, so don't allocate space.  */
 	  continue;
 	}
 
-      if (strip)
-	s->flags |= SEC_EXCLUDE;
-      else
+      if (s->size == 0)
+	{
+	  /* If we don't need this section, strip it from the output file.
+	     This is to handle .rela.bss and .rela.plt.  We must create it
+	     in create_dynamic_sections, because it 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;
+	}
+      else if ((s->flags & SEC_HAS_CONTENTS) != 0)
 	{
 	  /* Allocate memory for the section contents.  */
 	  s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->size);
-	  if (s->contents == NULL && s->size != 0)
+	  if (s->contents == NULL)
 	    return FALSE;
 	}
     }