[git commit master 1/1] nptl: fix Unwind_Resume PLT calls

Timo Teräs timo.teras at iki.fi
Thu Dec 9 16:19:53 UTC 2010


commit: http://git.uclibc.org/uClibc/commit/?id=1f674977c0f3ea1e67deea93fa8f4e795cc869ad
branch: http://git.uclibc.org/uClibc/commit/?id=refs/heads/master

My change a49b3a18e463cbe8c94c41501e386e7f4c61609e fixed two
Unwind_Resume calls to go via PLT to avoid text relocations for PIC
builds. However, it looks the reason for upstream not using PLT calls
is that ebx gets clobbered. So we need to reload it.

Signed-off-by: Timo Teräs <timo.teras at iki.fi>
Signed-off-by: Austin Foxley <austinf at cetoncorp.com>
---
 .../sysv/linux/i386/i486/pthread_cond_timedwait.S  |    4 ++++
 .../unix/sysv/linux/i386/i486/pthread_cond_wait.S  |   18 +++++++++++-------
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
index ac7983c..3b61367 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
@@ -648,6 +648,10 @@ __condvar_tw_cleanup:
 
 	movl	%esi, (%esp)
 .LcallUR:
+#ifdef __PIC__
+	call	__i686.get_pc_thunk.bx
+	addl	$_GLOBAL_OFFSET_TABLE_, %ebx
+#endif
 	call	_Unwind_Resume at PLT
 	hlt
 .LENDCODE:
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
index abc963f..a1294c5 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
@@ -535,6 +535,10 @@ __condvar_w_cleanup:
 
 	movl	%esi, (%esp)
 .LcallUR:
+#ifdef __PIC__
+	call	__i686.get_pc_thunk.bx
+	addl	$_GLOBAL_OFFSET_TABLE_, %ebx
+#endif
 	call	_Unwind_Resume at PLT
 	hlt
 .LENDCODE:
@@ -569,14 +573,14 @@ __condvar_w_cleanup:
 .Lcstend:
 
 #ifdef __PIC__
-	.section .gnu.linkonce.t.__i686.get_pc_thunk.cx,"ax", at progbits
-	.globl	__i686.get_pc_thunk.cx
-	.hidden	__i686.get_pc_thunk.cx
-	.type	__i686.get_pc_thunk.cx, at function
-__i686.get_pc_thunk.cx:
-	movl (%esp), %ecx;
+	.section .gnu.linkonce.t.__i686.get_pc_thunk.bx,"ax", at progbits
+	.globl	__i686.get_pc_thunk.bx
+	.hidden	__i686.get_pc_thunk.bx
+	.type	__i686.get_pc_thunk.bx, at function
+__i686.get_pc_thunk.bx:
+	movl (%esp), %ebx;
 	ret
-	.size	__i686.get_pc_thunk.cx,.-__i686.get_pc_thunk.cx
+	.size	__i686.get_pc_thunk.bx,.-__i686.get_pc_thunk.bx
 #endif
 
 #ifdef SHARED
-- 
1.7.2.2



More information about the uClibc-cvs mailing list