From e737aa03ea2db5e29fab981737a93e2ba65b5766 Mon Sep 17 00:00:00 2001 From: Bernhard Reutner-Fischer Date: Tue, 25 Nov 2008 12:26:42 +0000 Subject: - 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.) --- libc/sysdeps/linux/arm/crt1.S | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'libc/sysdeps/linux/arm/crt1.S') 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) -- cgit v1.2.3