aboutsummaryrefslogtreecommitdiffstats
path: root/main/libc0.9.32/nptl-fix-unwind_resume-plt-calls.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/libc0.9.32/nptl-fix-unwind_resume-plt-calls.patch')
-rw-r--r--main/libc0.9.32/nptl-fix-unwind_resume-plt-calls.patch65
1 files changed, 65 insertions, 0 deletions
diff --git a/main/libc0.9.32/nptl-fix-unwind_resume-plt-calls.patch b/main/libc0.9.32/nptl-fix-unwind_resume-plt-calls.patch
new file mode 100644
index 0000000000..2647af915a
--- /dev/null
+++ b/main/libc0.9.32/nptl-fix-unwind_resume-plt-calls.patch
@@ -0,0 +1,65 @@
+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>
+---
+ .../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@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@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
+--
+1.7.1