diff options
author | Russ Cox <rsc@golang.org> | 2014-08-18 21:06:56 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2014-08-18 21:06:56 -0400 |
commit | 3a5410187cdd5d9ed93891cbdccda051246b7988 (patch) | |
tree | 572656a7e026ae5508936b2abe86c20d316fd465 /src/cmd/ld | |
parent | 68789c6b9ca3988aeb86b7392e82d06252bc644e (diff) | |
download | go-3a5410187cdd5d9ed93891cbdccda051246b7988.tar.gz |
liblink: use pc-relative addressing for all memory references in amd64 code
LGTM=rminnich, iant
R=golang-codereviews, rminnich, iant
CC=golang-codereviews, r
https://codereview.appspot.com/125140043
Diffstat (limited to 'src/cmd/ld')
-rw-r--r-- | src/cmd/ld/data.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/cmd/ld/data.c b/src/cmd/ld/data.c index f76ac0129..a988e807e 100644 --- a/src/cmd/ld/data.c +++ b/src/cmd/ld/data.c @@ -281,9 +281,13 @@ relocsym(LSym *s) if(thechar == '6') o = 0; } else if(HEADTYPE == Hdarwin) { - if(rs->type != SHOSTOBJ) - o += symaddr(rs) - rs->sect->vaddr; - o -= r->off; // WTF? + if(r->type == R_CALL) { + if(rs->type != SHOSTOBJ) + o += symaddr(rs) - rs->sect->vaddr; + o -= r->off; // relative to section offset, not symbol + } else { + o += r->siz; + } } else { diag("unhandled pcrel relocation for %s", headstring); } |