From: David Crawshaw Date: Tue, 6 Sep 2016 11:46:59 +0000 (-0400) Subject: cmd/link: address comments from CL 28540 X-Git-Tag: go1.8beta1~1340 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=567aefd99ddc66d596fffd442b6c014d83ac5eb9;p=gostls13.git cmd/link: address comments from CL 28540 Change-Id: I11899096c71ee0e24e902c87914601fcd7ffd7a9 Reviewed-on: https://go-review.googlesource.com/28967 Reviewed-by: Ian Lance Taylor Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot --- diff --git a/src/cmd/link/internal/amd64/asm.go b/src/cmd/link/internal/amd64/asm.go index 9dd55727a0..fe145d0b67 100644 --- a/src/cmd/link/internal/amd64/asm.go +++ b/src/cmd/link/internal/amd64/asm.go @@ -798,6 +798,9 @@ func tlsIEtoLE(s *ld.Symbol, off, size int) { // // To determine the instruction and register, we study the op codes. // Consult an AMD64 instruction encoding guide to decipher this. + if off < 3 { + log.Fatal("R_X86_64_GOTTPOFF reloc not preceded by MOVQ or ADDQ instruction") + } op := s.P[off-3 : off] reg := op[2] >> 3 diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go index fd536181d7..04e6d3bdb7 100644 --- a/src/cmd/link/internal/ld/data.go +++ b/src/cmd/link/internal/ld/data.go @@ -456,6 +456,9 @@ func relocsym(ctxt *Link, s *Symbol) { } Thearch.TLSIEtoLE(s, int(off), int(r.Siz)) o = int64(ctxt.Tlsoffset) + // TODO: o += r.Add when SysArch.Family != sys.AMD64? + // Why do we treat r.Add differently on AMD64? + // Is the external linker using Xadd at all? } else { log.Fatalf("cannot handle R_TLS_IE (sym %s) when linking internally", s.Name) }