diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index f883765bc6f..0f367b92525 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2011-08-19  Alan Modra  <amodra@gmail.com>
+
+	* elf64-ppc.c (ppc64_elf_edit_toc): Ignore can_optimize bit if
+	we haven't seen expected -mcmodel=medium/large code relocs.
+
 2011-08-18  Tristan Gingold  <gingold@adacore.com>
 
 	* mach-o.c (bfd_mach_o_read_segment): Initialize list.
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index 677de04f3b3..b71a11b231a 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -8267,7 +8267,7 @@ ppc64_elf_edit_toc (struct bfd_link_info *info)
 		some_unused = 1;
 	      last = 0;
 	    }
-	  else if (*drop)
+	  else if (*drop & ref_from_discarded)
 	    {
 	      some_unused = 1;
 	      last = ref_from_discarded;