summaryrefslogtreecommitdiffstats
path: root/libpthread/nptl/sysdeps
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2010-12-07 11:27:29 +0200
committerAustin Foxley <austinf@cetoncorp.com>2010-12-09 08:19:53 -0800
commit1f674977c0f3ea1e67deea93fa8f4e795cc869ad (patch)
treec4f22ad83588c519b29b21e10c241a4f386ad772 /libpthread/nptl/sysdeps
parenta1aaae7b8731a25b7dd8b6a58713dcfc339c3c44 (diff)
downloaduClibc-alpine-1f674977c0f3ea1e67deea93fa8f4e795cc869ad.tar.bz2
uClibc-alpine-1f674977c0f3ea1e67deea93fa8f4e795cc869ad.tar.xz
nptl: fix Unwind_Resume PLT calls
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@iki.fi> Signed-off-by: Austin Foxley <austinf@cetoncorp.com>
Diffstat (limited to 'libpthread/nptl/sysdeps')
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S4
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S18
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 ac7983c49..3b61367e1 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@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 abc963f07..a1294c509 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@PLT
hlt
.LENDCODE:
@@ -569,14 +573,14 @@ __condvar_w_cleanup:
.Lcstend:
#ifdef __PIC__
- .section .gnu.linkonce.t.__i686.get_pc_thunk.cx,"ax",@progbits
- .globl __i686.get_pc_thunk.cx
- .hidden __i686.get_pc_thunk.cx
- .type __i686.get_pc_thunk.cx,@function
-__i686.get_pc_thunk.cx:
- movl (%esp), %ecx;
+ .section .gnu.linkonce.t.__i686.get_pc_thunk.bx,"ax",@progbits
+ .globl __i686.get_pc_thunk.bx
+ .hidden __i686.get_pc_thunk.bx
+ .type __i686.get_pc_thunk.bx,@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