aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/5l
diff options
context:
space:
mode:
authorShenghou Ma <minux.ma@gmail.com>2012-07-30 18:48:00 -0400
committerShenghou Ma <minux.ma@gmail.com>2012-07-30 18:48:00 -0400
commit9de61e7c8c779dafccbcd0242e06f92eb6f0e1ee (patch)
tree715ff2282e37ee54246ac4c11fb4ded7ddb5263b /src/cmd/5l
parentdd62bb4753147ff832eb769af892054fb1562c7c (diff)
downloadgo-9de61e7c8c779dafccbcd0242e06f92eb6f0e1ee.tar.xz
cmd/5l, cmd/ld: add support for R_ARM_GOT_PREL
Android NDK's gcc 4.6 generates this relocation for runtime/cgo. R=rsc CC=golang-dev https://golang.org/cl/6450056
Diffstat (limited to 'src/cmd/5l')
-rw-r--r--src/cmd/5l/asm.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/cmd/5l/asm.c b/src/cmd/5l/asm.c
index 693e515709..911b6892cf 100644
--- a/src/cmd/5l/asm.c
+++ b/src/cmd/5l/asm.c
@@ -158,11 +158,22 @@ adddynrel(Sym *s, Reloc *r)
r->sym = S;
r->add += targ->got;
return;
-
+
+ case 256 + R_ARM_GOT_PREL: // GOT(S) + A - P
+ if(targ->dynimpname == nil || targ->dynexport) {
+ addgotsyminternal(targ);
+ } else {
+ addgotsym(targ);
+ }
+ r->type = D_PCREL;
+ r->sym = lookup(".got", 0);
+ r->add += targ->got + 4;
+ return;
+
case 256 + R_ARM_GOTOFF: // R_ARM_GOTOFF32
r->type = D_GOTOFF;
return;
-
+
case 256 + R_ARM_GOTPC: // R_ARM_BASE_PREL
r->type = D_PCREL;
r->sym = lookup(".got", 0);