From: Shenghou Ma Date: Mon, 30 Jul 2012 22:48:00 +0000 (-0400) Subject: cmd/5l, cmd/ld: add support for R_ARM_GOT_PREL X-Git-Tag: go1.1rc2~2735 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=9de61e7c8c779dafccbcd0242e06f92eb6f0e1ee;p=gostls13.git 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 --- 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); diff --git a/src/cmd/ld/elf.h b/src/cmd/ld/elf.h index e319ad25b4..cfe1f9e53c 100644 --- a/src/cmd/ld/elf.h +++ b/src/cmd/ld/elf.h @@ -564,6 +564,7 @@ typedef struct { #define R_ARM_PLT32 27 /* Add PC-relative PLT offset. */ #define R_ARM_CALL 28 #define R_ARM_V4BX 40 +#define R_ARM_GOT_PREL 96 #define R_ARM_GNU_VTENTRY 100 #define R_ARM_GNU_VTINHERIT 101 #define R_ARM_RSBREL32 250 diff --git a/src/cmd/ld/ldelf.c b/src/cmd/ld/ldelf.c index 1f58573a68..df4c16275f 100644 --- a/src/cmd/ld/ldelf.c +++ b/src/cmd/ld/ldelf.c @@ -847,6 +847,7 @@ reltype(char *pn, int elftype, uchar *siz) case R('5', R_ARM_REL32): case R('5', R_ARM_CALL): case R('5', R_ARM_V4BX): + case R('5', R_ARM_GOT_PREL): case R('6', R_X86_64_PC32): case R('6', R_X86_64_PLT32): case R('6', R_X86_64_GOTPCREL):