]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/5l, cmd/ld: add support for R_ARM_GOT_PREL
authorShenghou Ma <minux.ma@gmail.com>
Mon, 30 Jul 2012 22:48:00 +0000 (18:48 -0400)
committerShenghou Ma <minux.ma@gmail.com>
Mon, 30 Jul 2012 22:48:00 +0000 (18:48 -0400)
Android NDK's gcc 4.6 generates this relocation for runtime/cgo.

R=rsc
CC=golang-dev
https://golang.org/cl/6450056

src/cmd/5l/asm.c
src/cmd/ld/elf.h
src/cmd/ld/ldelf.c

index 693e515709f10326a4830372d4ab32a32baa6286..911b6892cfdaf8ace0f309dc4785b1699bbc3e51 100644 (file)
@@ -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);
index e319ad25b4527bf321f90cbee2fa159c3d273b5d..cfe1f9e53c8d1876e045ab53133eba826ef88537 100644 (file)
@@ -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
index 1f58573a683c0efe2db7f87ac7040735b9e94b9d..df4c16275f5231c3812fe4446782fea0c52a2272 100644 (file)
@@ -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):