cmd/internal/ld: fix R_TLS handling now Xsym is not read from object file

I think this should fix the arm build. A proper fix involves making the handling
of tlsg less fragile, I'll try that tomorrow.

Update #10557

Change-Id: I9b1b666737fb40aebb6f284748509afa8483cce5
Reviewed-on: https://go-review.googlesource.com/9272
Reviewed-by: Dave Cheney <dave@cheney.net>
Run-TryBot: Dave Cheney <dave@cheney.net>
diff --git a/src/cmd/internal/ld/data.go b/src/cmd/internal/ld/data.go
index 13a4019..5a0ac9e 100644
--- a/src/cmd/internal/ld/data.go
+++ b/src/cmd/internal/ld/data.go
@@ -372,6 +372,14 @@
 			}
 
 		case obj.R_TLS:
+			if Linkmode == LinkExternal && Iself && HEADTYPE != obj.Hopenbsd {
+				r.Done = 0
+				r.Sym = Ctxt.Tlsg
+				r.Xsym = Ctxt.Tlsg
+				r.Xadd = r.Add
+				o = r.Add
+				break
+			}
 			if Linkmode == LinkInternal && Iself && Thearch.Thechar == '5' {
 				// On ELF ARM, the thread pointer is 8 bytes before
 				// the start of the thread-local data block, so add 8