aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2017-08-11 16:22:10 -0400
committerRuss Cox <rsc@golang.org>2017-08-26 00:52:04 +0000
commite6ba6f7890c337ab63d2687442260d74165c9ce5 (patch)
treedf81a98034c08457f543312ef3a3ec7e1e06722b
parentf3e6216450866f761cc22c042798c88062319867 (diff)
downloadgo-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.go11
-rw-r--r--src/cmd/link/internal/ld/ldelf.go1
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,