From 22f2067436bbe72233ff0c017d8a40ce65afa1d4 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 12 Dec 2002 18:26:13 +0000 Subject: [PATCH] Update. 2002-12-12 Ulrich Drepper * sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Correct access to __libc_locking_needed for PIC. --- nptl/ChangeLog | 5 +++++ .../unix/sysv/linux/i386/i486/libc-lowlevellock.S | 21 +++++++++++++++++++++ sysdeps/unix/sysv/linux/i386/sysdep.h | 1 + 3 files changed, 27 insertions(+) diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 5b2f6c6..377731d 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,8 @@ +2002-12-12 Ulrich Drepper + + * sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Correct + access to __libc_locking_needed for PIC. + 2002-12-12 Jakub Jelinek * sysdeps/pthread/bits/libc-lock.h (__libc_locking_needed): Only diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S index 9a124ab..1075909 100644 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S +++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S @@ -48,7 +48,13 @@ __lll_lock_wait: orl $-1, %eax /* Load -1. */ #ifndef UP +# ifdef PIC + call __i686.get_pc_thunk.bx + addl $_GLOBAL_OFFSET_TABLE_, %ebx + cmpl $0, __libc_locking_needed@GOTOFF(%ebx) +# else cmpl $0, __libc_locking_needed +# endif je,pt 0f lock 0: @@ -77,7 +83,13 @@ lll_unlock_wake_cb: movl 20(%esp), %ebx #ifndef UP +# ifdef PIC + call __i686.get_pc_thunk.bx + addl $_GLOBAL_OFFSET_TABLE_, %ebx + cmpl $0, __libc_locking_needed@GOTOFF(%ebx) +# else cmpl $0, __libc_locking_needed +# endif je,pt 0f lock 0: @@ -182,3 +194,12 @@ __lll_timedwait_tid: 6: movl $ETIMEDOUT, %eax jmp 3b .size __lll_timedwait_tid,.-__lll_timedwait_tid + + + .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 diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h index 395121e..7bf146e 100644 --- a/sysdeps/unix/sysv/linux/i386/sysdep.h +++ b/sysdeps/unix/sysv/linux/i386/sysdep.h @@ -94,6 +94,7 @@ __i686.get_pc_thunk.reg: \ movl (%esp), %e##reg; \ ret; \ + .size __i686.get_pc_thunk.reg, . - __i686.get_pc_thunk.reg; \ .previous; \ call __i686.get_pc_thunk.reg # endif -- 2.7.4