diff options
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 e7269169e..a7f61c927 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; |
