diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 612256a31720c98c95776b57bbe2f620dc1fa48f..f959b450f552f94c41f4f7aa8d4516a78ae68082 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,9 @@
+2009-06-19  Alan Modra  <amodra@bigpond.net.au>
+
+	* elf32-ppc.c (ppc_elf_check_relocs): Allow local symbols for
+	R_PPC_PLTREL24 relocs.
+	(ppc_elf_relocate_section): Likewise.
+
 2009-06-19  Alan Modra  <amodra@bigpond.net.au>
 
 	* elf32-ppc.c (find_plt_ent): Pass pointer to plist rather than
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index 01e4359f20d7072eda46e3559ec8c1654d3a4799..7aafbebf843823fd17953eaec8bacc0893f97e52 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -3570,8 +3570,11 @@ ppc_elf_check_relocs (bfd *abfd,
 	    h->non_got_ref = TRUE;
 	  break;
 
-	case R_PPC_PLT32:
 	case R_PPC_PLTREL24:
+	  if (h == NULL)
+	    break;
+	  /* Fall through */
+	case R_PPC_PLT32:
 	case R_PPC_PLTREL32:
 	case R_PPC_PLT16_LO:
 	case R_PPC_PLT16_HI:
@@ -7210,6 +7213,8 @@ ppc_elf_relocate_section (bfd *output_bfd,
 	  break;
 
 	case R_PPC_PLTREL24:
+	  if (h == NULL)
+	    break;
 	  /* Relocation is to the entry for this symbol in the
 	     procedure linkage table.  */
 	  {