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
[EMAIL PROTECTED]
_______________________________________________
uClibc mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/uclibc

Reply via email to