From 51f32ab8832a408385b66ccd61da20087f6e2c7b Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 10 Mar 2003 23:42:41 +0000 Subject: [PATCH] Update. * sysdeps/unix/sysv/linux/sh/lowlevelmutex.S: Define __lll_mutex_timedlock_wait only for NOT_IN_libc. * sysdeps/unix/sysv/linux/sh/libc-lowlevelmutex.S: Include lowlevelmutex.S. * sysdeps/unix/sysv/linux/sh/lowlevellock.S: Define lll_unlock_wake_cb, __lll_wait_tid, and __lll_timedwait_tid only for NOT_IN_libc. * sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S: Include lowlevellock.S. --- nptl/ChangeLog | 11 ++ .../sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S | 187 +-------------------- .../unix/sysv/linux/sh/libc-lowlevelmutex.S | 157 +---------------- nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S | 4 + nptl/sysdeps/unix/sysv/linux/sh/lowlevelmutex.S | 2 + 5 files changed, 19 insertions(+), 342 deletions(-) diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 42b74ff..895d552 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,5 +1,16 @@ 2003-03-10 Ulrich Drepper + * sysdeps/unix/sysv/linux/sh/lowlevelmutex.S: Define + __lll_mutex_timedlock_wait only for NOT_IN_libc. + * sysdeps/unix/sysv/linux/sh/libc-lowlevelmutex.S: Include + lowlevelmutex.S. + + * sysdeps/unix/sysv/linux/sh/lowlevellock.S: Define + lll_unlock_wake_cb, __lll_wait_tid, and __lll_timedwait_tid only + for NOT_IN_libc. + * sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S: Include + lowlevellock.S. + * sysdeps/unix/sysv/linux/i386/i486/lowlevelmutex.S: Don't define LOCK is already defined. Don't define __lll_mutex_timedlock_wait for libc.so. diff --git a/nptl/sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S index 82b0189..94a24b4 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S @@ -16,189 +16,4 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include -#include -#include "lowlevel-atomic.h" - - .text - -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - -#define ETIMEDOUT 110 - - - .globl __lll_lock_wait - .type __lll_lock_wait,@function - .hidden __lll_lock_wait - .align 5 -__lll_lock_wait: - mov r4, r6 - mov r5, r4 - mov #0, r7 /* No timeout. */ - mov #FUTEX_WAIT, r5 -2: - add #-1, r6 /* account for the preceeded xadd. */ - mov #SYS_futex, r3 - extu.b r3, r3 - trapa #0x14 - SYSCALL_INST_PAD - - mov #-1, r3 - XADD (r3, @r4, r2) - tst r3, r3 - bf/s 2b - mov r2, r6 - - mov #-1, r1 - mov.l r1, @r4 - rts - mov r2, r0 - .size __lll_lock_wait,.-__lll_lock_wait - - - .type lll_unlock_wake_cb,@function - .align 5 -lll_unlock_wake_cb: - - .align 2 - mova 1f, r0 - mov r15, r1 - mov #-6, r15 -0: - mov.l @r4, r2 - add #1, r2 - mov.l r2, @r4 -1: - mov r1, r15 - cmp/pl r2 - bf 2f - rts - nop - .size lll_unlock_wake_cb,.-lll_unlock_wake_cb - - - .globl __lll_unlock_wake - .type __lll_unlock_wake,@function - .hidden __lll_unlock_wake -__lll_unlock_wake: -2: - mov #FUTEX_WAKE, r5 - mov #1, r6 /* Wake one thread. */ - mov #0, r7 - mov.l r6, @r4 /* Stores 1. */ - mov #SYS_futex, r3 - extu.b r3, r3 - trapa #0x14 - SYSCALL_INST_PAD - rts - nop - .size __lll_unlock_wake,.-__lll_unlock_wake - - - .globl __lll_wait_tid - .type __lll_wait_tid,@function - .hidden __lll_wait_tid -__lll_wait_tid: - mov.l @r4, r6 -1: - mov #FUTEX_WAIT, r5 - mov #0, r7 - mov #SYS_futex, r3 - extu.b r3, r3 - trapa #0x14 - SYSCALL_INST_PAD - - mov r0, r1 - - mov.l @r4, r0 - tst r0, r0 - bf/s 1b - mov r0, r6 - rts - nop - .size __lll_wait_tid,.-__lll_wait_tid - - - .globl __lll_timedwait_tid - .type __lll_timedwait_tid,@function - .hidden __lll_timedwait_tid -__lll_timedwait_tid: - mov.l r9, @-r15 - mov.l r8, @-r15 - mov r4, r8 - mov r5, r9 - add #-8, r15 - -2: - /* Get current time. */ - mov r15, r4 - mov #0, r5 - mov #SYS_gettimeofday, r3 - trapa #0x12 - SYSCALL_INST_PAD - - /* Compute relative timeout. */ - mov.l @(4,r15), r0 - mov.w .L1k, r1 - dmulu.l r0, r1 /* Milli seconds to nano seconds. */ - mov.l @r9, r2 - mov.l @(4,r9), r3 - mov.l @r15, r0 - sts macl, r1 - sub r0, r2 - clrt - subc r1, r3 - bf 5f - mov.l .L1g, r1 - add r1, r3 - add #-1, r2 -5: - cmp/pz r2 - bf 6f /* Time is already up. */ - - mov.l r2, @r15 /* Store relative timeout. */ - mov.l r3, @(4,r15) - - mov.l @r8, r6 - tst r6, r6 - bt 4f - - mov r8, r4 - mov #FUTEX_WAIT, r5 - mov r15, r7 - mov #SYS_futex, r3 - extu.b r3, r3 - trapa #0x14 - SYSCALL_INST_PAD - - mov r0, r1 - - mov.l @r8, r0 - tst r0, r0 - bf 1f -4: - mov #0, r0 -3: - add #8, r15 - mov.l @r15+, r8 - rts - mov.l @r15+, r9 - -1: - mov #-ETIMEDOUT, r1 - cmp/eq r0, r1 - bf 2b -6: - bra 3b - mov #ETIMEDOUT, r0 - -.L1k: - .word 1000 - .align 2 -.L1g: - .long 1000000000 - - .size __lll_timedwait_tid,.-__lll_timedwait_tid +#include "lowlevellock.S" diff --git a/nptl/sysdeps/unix/sysv/linux/sh/libc-lowlevelmutex.S b/nptl/sysdeps/unix/sysv/linux/sh/libc-lowlevelmutex.S index 8a837de..fc5ab3d 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/libc-lowlevelmutex.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/libc-lowlevelmutex.S @@ -16,159 +16,4 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include -#include "lowlevel-atomic.h" - - .text - -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - -#define EWOULDBLOCK 11 -#define EINVAL 22 -#define ETIMEDOUT 110 - - - .globl __lll_mutex_lock_wait - .type __lll_mutex_lock_wait,@function - .hidden __lll_mutex_lock_wait - .align 5 -__lll_mutex_lock_wait: - mov r4, r6 - mov r5, r4 - mov #0, r7 /* No timeout. */ - mov #FUTEX_WAIT, r5 -1: - add #1, r6 /* account for the preceeded xadd. */ - mov #SYS_futex, r3 - extu.b r3, r3 - trapa #0x14 - SYSCALL_INST_PAD - - mov #1, r3 - XADD (r3, @r4, r6) - tst r6, r6 - bf 1b - mov #2, r1 - mov.l r1, @r4 - ret - mov #0, r0 - .size __lll_mutex_lock_wait,.-__lll_mutex_lock_wait - - - .globl __lll_mutex_timedlock_wait - .type __lll_mutex_timedlock_wait,@function - .hidden __lll_mutex_timedlock_wait - .align 5 -__lll_mutex_timedlock_wait: - /* Check for a valid timeout value. */ - mov.l @(4,r6), r1 - mov.l .L1g, r0 - cmp/hs r0, r1 - bt 3f - - mov.l r10, @-r15 - mov.l r9, @-r15 - mov.l r8, @-r15 - mov r5, r8 - mov r6, r9 - mov r4, r10 - add #1, r10 - - /* Stack frame for the timespec and timeval structs. */ - add #-8, r15 - -1: - /* Get current time. */ - mov r15, r4 - mov #0, r5 - mov #SYS_gettimeofday, r3 - trapa #0x12 - SYSCALL_INST_PAD - - /* Compute relative timeout. */ - mov.l @(4,r15), r0 - mov.w .L1k, r1 - dmulu.l r0, r1 /* Micro seconds to nano seconds. */ - mov.l @r9, r2 - mov.l @(4,r9), r3 - mov.l @r15, r0 - sts macl, r1 - sub r0, r2 - clrt - subc r1, r3 - bf 4f - mov.l .L1g, r1 - add r1, r3 - add #-1, r2 -4: - cmp/pz r2 - bf 5f /* Time is already up. */ - - mov.l r2, @r15 /* Store relative timeout. */ - mov.l r3, @(4,r15) - - mov r8, r4 - mov #FUTEX_WAIT, r5 - mov r10, r6 - mov r15, r7 - mov #SYS_futex, r3 - extu.b r3, r3 - trapa #0x14 - SYSCALL_INST_PAD - - mov #1, r3 - XADD (r3, @r8, r10) - tst r10, r10 - bf 7f - - mov #2, r1 - mov.l r1, @r8 - mov #0, r0 -6: - add #8, r15 - mov.l @r15+, r8 - mov.l @r15+, r9 - rts - mov.l @r15+, r10 -7: - /* Check whether the time expired. */ - mov #-ETIMEDOUT, r1 - cmp/eq r0, r1 - bt 5f - bra 1b - nop -3: - rts - mov #EINVAL, r0 -5: - bra 6b - mov #ETIMEDOUT, r0 - -.L1k: - .word 1000 - .align 2 -.L1g: - .long 1000000000 - - .size __lll_mutex_timedlock_wait,.-__lll_mutex_timedlock_wait - - - .globl __lll_mutex_unlock_wake - .type __lll_mutex_unlock_wake,@function - .hidden __lll_mutex_unlock_wake - .align 5 -__lll_mutex_unlock_wake: - mov #FUTEX_WAKE, r5 - mov #1, r6 /* Wake one thread. */ - mov #0, r7 - mov.l r7, @r4 /* Stores 0. */ - mov #SYS_futex, r3 - extu.b r3, r3 - trapa #0x14 - SYSCALL_INST_PAD - rts - nop - .size __lll_mutex_unlock_wake,.-__lll_mutex_unlock_wake +#include "lowlevelmutex.S" diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S index ab54ea5..3a157a0 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S @@ -58,6 +58,7 @@ __lll_lock_wait: .size __lll_lock_wait,.-__lll_lock_wait +#ifdef NOT_IN_libc .globl lll_unlock_wake_cb .type lll_unlock_wake_cb,@function .hidden lll_unlock_wake_cb @@ -79,6 +80,7 @@ lll_unlock_wake_cb: rts nop .size lll_unlock_wake_cb,.-lll_unlock_wake_cb +#endif .globl __lll_unlock_wake @@ -99,6 +101,7 @@ __lll_unlock_wake: .size __lll_unlock_wake,.-__lll_unlock_wake +#ifdef NOT_IN_libc .globl __lll_wait_tid .type __lll_wait_tid,@function .hidden __lll_wait_tid @@ -203,3 +206,4 @@ __lll_timedwait_tid: .long 1000000000 .size __lll_timedwait_tid,.-__lll_timedwait_tid +#endif diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevelmutex.S b/nptl/sysdeps/unix/sysv/linux/sh/lowlevelmutex.S index 8a837de..dd9ac3c 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/lowlevelmutex.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/lowlevelmutex.S @@ -58,6 +58,7 @@ __lll_mutex_lock_wait: .size __lll_mutex_lock_wait,.-__lll_mutex_lock_wait +#ifdef NOT_IN_libc .globl __lll_mutex_timedlock_wait .type __lll_mutex_timedlock_wait,@function .hidden __lll_mutex_timedlock_wait @@ -154,6 +155,7 @@ __lll_mutex_timedlock_wait: .long 1000000000 .size __lll_mutex_timedlock_wait,.-__lll_mutex_timedlock_wait +#endif .globl __lll_mutex_unlock_wake -- 2.7.4