Simplify. Thanks to Rui for the suggestion.

llvm-svn: 270551
diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp
index ec88ec0..ad05825 100644
--- a/lld/ELF/Target.cpp
+++ b/lld/ELF/Target.cpp
@@ -113,6 +113,7 @@
                 int32_t Index, unsigned RelOff) const override;
   void relocateOne(uint8_t *Loc, uint32_t Type, uint64_t Val) const override;
 
+  void relaxGot(uint8_t *Loc, uint64_t Val) const override;
   void relaxTlsGdToIe(uint8_t *Loc, uint32_t Type, uint64_t Val) const override;
   void relaxTlsGdToLe(uint8_t *Loc, uint32_t Type, uint64_t Val) const override;
   void relaxTlsIeToLe(uint8_t *Loc, uint32_t Type, uint64_t Val) const override;
@@ -232,6 +233,10 @@
   return false;
 }
 
+void TargetInfo::relaxGot(uint8_t *Loc, uint64_t Val) const {
+  llvm_unreachable("Should not have claimed to be relaxable");
+}
+
 void TargetInfo::relaxTlsGdToLe(uint8_t *Loc, uint32_t Type,
                                 uint64_t Val) const {
   llvm_unreachable("Should not have claimed to be relaxable");
@@ -516,10 +521,11 @@
   case R_X86_64_GOT32:
     return R_GOT_FROM_END;
   case R_X86_64_GOTPCREL:
-  case R_X86_64_GOTPCRELX:
-  case R_X86_64_REX_GOTPCRELX:
   case R_X86_64_GOTTPOFF:
     return R_GOT_PC;
+  case R_X86_64_GOTPCRELX:
+  case R_X86_64_REX_GOTPCRELX:
+    return R_RELAXABLE_GOT_PC;
   }
 }
 
@@ -727,6 +733,11 @@
   }
 }
 
+void X86_64TargetInfo::relaxGot(uint8_t *Loc, uint64_t Val) const {
+  Loc[-2] = 0x8d;
+  relocateOne(Loc, R_X86_64_PC32, Val);
+}
+
 // Relocation masks following the #lo(value), #hi(value), #ha(value),
 // #higher(value), #highera(value), #highest(value), and #highesta(value)
 // macros defined in section 4.5.1. Relocation Types of the PPC-elf64abi