summaryrefslogtreecommitdiff
path: root/src/cmd/ld
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-08-18 21:06:56 -0400
committerRuss Cox <rsc@golang.org>2014-08-18 21:06:56 -0400
commit3a5410187cdd5d9ed93891cbdccda051246b7988 (patch)
tree572656a7e026ae5508936b2abe86c20d316fd465 /src/cmd/ld
parent68789c6b9ca3988aeb86b7392e82d06252bc644e (diff)
downloadgo-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.c10
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);
}