diff options
author | Russ Cox <rsc@golang.org> | 2017-08-11 16:22:10 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2017-08-26 00:52:04 +0000 |
commit | e6ba6f7890c337ab63d2687442260d74165c9ce5 (patch) | |
tree | df81a98034c08457f543312ef3a3ec7e1e06722b | |
parent | f3e6216450866f761cc22c042798c88062319867 (diff) | |
download | go-e6ba6f7890c337ab63d2687442260d74165c9ce5.tar.gz go-e6ba6f7890c337ab63d2687442260d74165c9ce5.zip |
[dev.boringcrypto.go1.8] cmd/link: implement R_X86_64_PC64 relocations
Change-Id: I1d7bd5cff7350a4e0f78b8efc8406e79c74732d1
Reviewed-on: https://go-review.googlesource.com/55370
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-on: https://go-review.googlesource.com/55470
Run-TryBot: Russ Cox <rsc@golang.org>
Reviewed-on: https://go-review.googlesource.com/57930
Reviewed-by: Adam Langley <agl@golang.org>
-rw-r--r-- | src/cmd/link/internal/amd64/asm.go | 11 | ||||
-rw-r--r-- | src/cmd/link/internal/ld/ldelf.go | 1 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/cmd/link/internal/amd64/asm.go b/src/cmd/link/internal/amd64/asm.go index 60bd45cd30..9ccb81966c 100644 --- a/src/cmd/link/internal/amd64/asm.go +++ b/src/cmd/link/internal/amd64/asm.go @@ -118,6 +118,17 @@ func adddynrel(ctxt *ld.Link, s *ld.Symbol, r *ld.Reloc) bool { r.Add += 4 return true + case 256 + ld.R_X86_64_PC64: + if targ.Type == obj.SDYNIMPORT { + ld.Errorf(s, "unexpected R_X86_64_PC64 relocation for dynamic symbol %s", targ.Name) + } + if targ.Type == 0 || targ.Type == obj.SXREF { + ld.Errorf(s, "unknown symbol %s in pcrel", targ.Name) + } + r.Type = obj.R_PCREL + r.Add += 8 + return true + case 256 + ld.R_X86_64_PLT32: r.Type = obj.R_PCREL r.Add += 4 diff --git a/src/cmd/link/internal/ld/ldelf.go b/src/cmd/link/internal/ld/ldelf.go index 00e8f37523..a82c9054ea 100644 --- a/src/cmd/link/internal/ld/ldelf.go +++ b/src/cmd/link/internal/ld/ldelf.go @@ -1201,6 +1201,7 @@ func relSize(ctxt *Link, pn string, elftype uint32) uint8 { return 4 case AMD64 | R_X86_64_64<<24, + AMD64 | R_X86_64_PC64<<24, PPC64 | R_PPC64_ADDR64<<24, S390X | R_390_GLOB_DAT<<24, S390X | R_390_RELATIVE<<24, |