diff options
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.patch | 65 |
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 |