OSDN Git Service

nptl: fix Unwind_Resume PLT calls
authorTimo Teräs <timo.teras@iki.fi>
Tue, 7 Dec 2010 09:27:29 +0000 (11:27 +0200)
committerAustin Foxley <austinf@cetoncorp.com>
Thu, 9 Dec 2010 16:19:53 +0000 (08:19 -0800)
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>
libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
libpthread/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S

index ac7983c..3b61367 100644 (file)
@@ -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:
index abc963f..a1294c5 100644 (file)
@@ -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