diff options
author | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2008-11-25 12:26:42 +0000 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2008-11-25 12:26:42 +0000 |
commit | e737aa03ea2db5e29fab981737a93e2ba65b5766 (patch) | |
tree | 527e000db30f8be43a4681cf5c59f9658fe97eb9 /libc | |
parent | 97807b8291e7e5f35a12ab0307d8e56377eb24f4 (diff) |
- Fix thumb2 PIE (Joseph S. Myers)
This patch fixes position-independent executables (PIEs) for Thumb-2. In
Thumb assembly, instructions reading pc give a value 4 greater than the
address of the instruction, rather than 8 greater as in ARM mode, so the
offset to the GOT needs to have the right offset. (The Thumb-1 code
already gets this right; it's the code shared by ARM and Thumb-2 that
needs fixing.)
Diffstat (limited to 'libc')
-rw-r--r-- | libc/sysdeps/linux/arm/crt1.S | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/libc/sysdeps/linux/arm/crt1.S b/libc/sysdeps/linux/arm/crt1.S index 082348e39..18e3686fa 100644 --- a/libc/sysdeps/linux/arm/crt1.S +++ b/libc/sysdeps/linux/arm/crt1.S @@ -238,7 +238,11 @@ _start: #ifdef __PIC__ .L_GOT: +#ifdef __thumb__ + .word _GLOBAL_OFFSET_TABLE_-(.L_GOT_OFF+4) +#else /* __thumb2__ */ .word _GLOBAL_OFFSET_TABLE_-(.L_GOT_OFF+8) +#endif .word _fini(GOT) .word _init(GOT) .word main(GOT) |