--- a/bfd/elfxx-mips.c
+++ b/bfd/elfxx-mips.c
@@ -5696,9 +5696,9 @@ mips_elf_create_dynamic_relocation (bfd
 
   /* We must now calculate the dynamic symbol table index to use
      in the relocation.  */
-  if (h != NULL
-      && (!h->root.def_regular
-	  || (info->shared && !info->symbolic && !h->root.forced_local)))
+  if (!(h == NULL
+	|| (h->root.def_regular
+	    && (info->executable || info->symbolic || h->root.forced_local))))
     {
       indx = h->root.dynindx;
       if (SGI_COMPAT (output_bfd))
