diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 05e93da97dd32d5d83d5e29b627d47b90e95a784..5d8c8f3d1ceac4f9951f58678d3d25f8627fd88e 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -3,7 +3,9 @@
 	* elf32-i386.c (elf_i386_check_relocs): Properly report
 	local symbol for unhandled relocation against STT_GNU_IFUNC
 	symbol.
+	(elf_i386_relocate_section): Likewise.
 	* elf64-x86-64.c (elf64_x86_64_check_relocs):  Likewise.
+	(elf64_x86_64_relocate_section): Likewise.
 
 2009-06-13  H.J. Lu  <hongjiu.lu@intel.com>
 
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index c6e62653ebb40e3b57b1e9c131f0c319060e0c73..7ac90c24d934783f3a79c03aaee3b63cda71ee5c 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -3163,7 +3163,9 @@ elf_i386_relocate_section (bfd *output_bfd,
 		(_("%B: relocation %s against STT_GNU_IFUNC "
 		   "symbol `%s' isn't handled by %s"), input_bfd,
 		 elf_howto_table[r_type].name,
-		 h->root.root.string, __FUNCTION__);
+		 (h->root.root.string
+		  ? h->root.root.string : "a local symbol"),
+		 __FUNCTION__);
 	      bfd_set_error (bfd_error_bad_value);
 	      return FALSE;
 
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 3cb4f062026e22292f5c928ff9beb9bc9ce10d4d..27b1cbde411b9432340fe5b3564eee6622b48b72 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -2867,7 +2867,9 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 		(_("%B: relocation %s against STT_GNU_IFUNC "
 		   "symbol `%s' isn't handled by %s"), input_bfd,
 		 x86_64_elf_howto_table[r_type].name,
-		 h->root.root.string, __FUNCTION__);
+		 (h->root.root.string
+		  ? h->root.root.string : "a local symbol"),
+		 __FUNCTION__);
 	      bfd_set_error (bfd_error_bad_value);
 	      return FALSE;
 
@@ -2883,7 +2885,9 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 		    (_("%B: relocation %s against STT_GNU_IFUNC "
 		       "symbol `%s' has non-zero addend: %d"),
 		     input_bfd, x86_64_elf_howto_table[r_type].name,
-		     h->root.root.string, rel->r_addend);
+		     (h->root.root.string
+		      ? h->root.root.string : "a local symbol"),
+		     rel->r_addend);
 		  bfd_set_error (bfd_error_bad_value);
 		  return FALSE;
 		}