Have getRelExpr handle all cases on x86.

This requires adding a few more expression types, but is already a small
simplification. Having Writer.cpp know the exact expression will also
allow further simplifications.

llvm-svn: 266604
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index 325e571b..c799d54 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -563,7 +563,7 @@
 
     // If a relocation needs GOT, we create a GOT slot for the symbol.
     if (Expr == R_GOT || Expr == R_MIPS_GOT || Expr == R_MIPS_GOT_LOCAL ||
-        Expr == R_GOT_PAGE_PC || Expr == R_GOT_PC) {
+        Expr == R_GOT_PAGE_PC || Expr == R_GOT_PC || Expr == R_GOT_FROM_END) {
       uint32_t T = Body.isTls() ? Target->getTlsGotRel(Type) : Type;
       C.Relocations.push_back({Expr, T, Offset, Addend, &Body});
       if (Body.isInGot())