Fix Thumb-2 PIEs
Joseph S. Myers
joseph at codesourcery.com
Tue Nov 25 02:01:51 UTC 2008
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.)
Index: libc/sysdeps/linux/arm/crt1.S
===================================================================
--- libc/sysdeps/linux/arm/crt1.S (revision 24137)
+++ libc/sysdeps/linux/arm/crt1.S (working copy)
@@ -238,7 +238,11 @@
#ifdef __PIC__
.L_GOT:
+#ifdef __thumb__
+ .word _GLOBAL_OFFSET_TABLE_-(.L_GOT_OFF+4)
+#else
.word _GLOBAL_OFFSET_TABLE_-(.L_GOT_OFF+8)
+#endif
.word _fini(GOT)
.word _init(GOT)
.word main(GOT)
--
Joseph S. Myers
joseph at codesourcery.com
More information about the uClibc
mailing list