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