diff options
| author | Yuval Pavel Zholkover <paulzhol@gmail.com> | 2011-08-29 10:36:06 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2011-08-29 10:36:06 -0400 |
| commit | c20a338c2f354cae51fecec5fa928481b5b3f732 (patch) | |
| tree | 57dbef6cde486dad6a7e4f157353ab3c4544df3e /src/cmd/ld/data.c | |
| parent | 88e984faa5c966b175df54fe5bab75fca457fa87 (diff) | |
| download | go-c20a338c2f354cae51fecec5fa928481b5b3f732.tar.xz | |
runtime, syscall: use the vdso page on linux x86 for faster syscalls instead of int $0x80.
8l: fix handling CALL $(constant) code generated by 8a.
8a,8l: add indirect call instruction: CALL *data(SB).
R=rsc, iant
CC=golang-dev
https://golang.org/cl/4817054
Diffstat (limited to 'src/cmd/ld/data.c')
| -rw-r--r-- | src/cmd/ld/data.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/cmd/ld/data.c b/src/cmd/ld/data.c index e7269169e0..a7f61c927b 100644 --- a/src/cmd/ld/data.c +++ b/src/cmd/ld/data.c @@ -182,7 +182,11 @@ relocsym(Sym *s) o = symaddr(r->sym) + r->add; break; case D_PCREL: - o = symaddr(r->sym) + r->add - (s->value + r->off + r->siz); + // r->sym can be null when CALL $(constant) is transformed from absoulte PC to relative PC call. + o = 0; + if(r->sym) + o += symaddr(r->sym); + o += r->add - (s->value + r->off + r->siz); break; case D_SIZE: o = r->sym->size + r->add; |
