if (roff < 2)
     return TRUE;
 
-  /* Addend for R_386_GOT32 and R_386_GOT32X relocations must be 0.  */
+  /* Addend for R_386_GOT32X relocations must be 0.  */
   addend = bfd_get_32 (abfd, contents + roff);
   if (addend != 0)
     return TRUE;
   modrm = bfd_get_8 (abfd, contents + roff - 1);
   baseless = (modrm & 0xc7) == 0x5;
 
-  if (r_type == R_386_GOT32X && baseless && is_pic)
+  if (baseless && is_pic)
     {
       /* For PIC, disallow R_386_GOT32X without a base register
-        since we don't know what the GOT base is.   Allow
-        R_386_GOT32 for existing object files.  */
+        since we don't know what the GOT base is.  */
       const char *name;
 
       if (h == NULL)
 
   opcode = bfd_get_8 (abfd, contents + roff - 2);
 
-  /* Convert mov to lea since it has been done for a while.  */
-  if (opcode != 0x8b)
-    {
-      /* Only convert R_386_GOT32X relocation for call, jmp or
-        one of adc, add, and, cmp, or, sbb, sub, test, xor
-        instructions.  */
-      if (r_type != R_386_GOT32X)
-       return TRUE;
-    }
-
   /* Convert to R_386_32 if PIC is false or there is no base
      register.  */
   to_reloc_32 = !is_pic || baseless;
 
-  /* Try to convert R_386_GOT32 and R_386_GOT32X.  Get the symbol
-     referred to by the reloc.  */
+  /* Try to convert R_386_GOT32X.  Get the symbol referred to by the
+     reloc.  */
   if (h == NULL)
     {
       if (opcode == 0x0ff)
       struct elf_link_hash_entry *h;
       bfd_boolean converted;
 
-      if (r_type != R_386_GOT32 && r_type != R_386_GOT32X)
+      /* Don't convert R_386_GOT32 since we can't tell if it is applied
+        to "mov $foo@GOT, %reg" which isn't a load via GOT.  */
+      if (r_type != R_386_GOT32X)
        continue;
 
       r_symndx = ELF32_R_SYM (irel->r_info);
 
+2016-05-19  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/20117
+       * testsuite/ld-i386/i386.exp: Run pr20117.
+       * testsuite/ld-i386/pr19609-1i.d: Updated.
+       * testsuite/ld-i386/pr20117.d: New file.
+       * testsuite/ld-i386/pr20117.s: Likewise.
+
 2016-05-19  Cupertino Miranda  <cmiranda@synopsys.com>
 
        * testsuite/ld-elf/compressed1d.d: Removed from notarget.
 
 [a-f0-9]+ <_start>:
 [      ]*[a-f0-9]+:    3b 82 fc ff ff ff       cmp    -0x4\(%edx\),%eax
 [      ]*[a-f0-9]+:    3b 8a fc ff ff ff       cmp    -0x4\(%edx\),%ecx
-[      ]*[a-f0-9]+:    c7 c0 00 00 00 00       mov    \$0x0,%eax
-[      ]*[a-f0-9]+:    c7 c1 00 00 00 00       mov    \$0x0,%ecx
+[      ]*[a-f0-9]+:    8b 82 fc ff ff ff       mov    -0x4\(%edx\),%eax
+[      ]*[a-f0-9]+:    8b 8a fc ff ff ff       mov    -0x4\(%edx\),%ecx
 [      ]*[a-f0-9]+:    85 82 fc ff ff ff       test   %eax,-0x4\(%edx\)
 [      ]*[a-f0-9]+:    85 8a fc ff ff ff       test   %ecx,-0x4\(%edx\)