* sysdeps/unix/sysv/linux/sh/sysdep.h (INTERNAL_SYSCALL):
authorUlrich Drepper <drepper@redhat.com>
Wed, 28 Jan 2009 16:11:36 +0000 (16:11 +0000)
committerUlrich Drepper <drepper@redhat.com>
Wed, 28 Jan 2009 16:11:36 +0000 (16:11 +0000)
Add "t" to clobber list.
(INTERNAL_SYSCALL_NCS): Likewise.

ChangeLog
localedata/ChangeLog
nptl/ChangeLog
nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h
sysdeps/unix/sysv/linux/sh/sysdep.h

index 156e2c7..cbcb3b7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-01-14  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+       * sysdeps/unix/sysv/linux/sh/sysdep.h (INTERNAL_SYSCALL):
+       Add "t" to clobber list.
+       (INTERNAL_SYSCALL_NCS): Likewise.
+
 2009-01-28  Ulrich Drepper  <drepper@redhat.com>
 
        * nss/getent.c (print_networks): Don't print comma between aliases.
index 22e68ce..594a71c 100644 (file)
@@ -1,3 +1,12 @@
+2009-01-28  Ulrich Drepper  <drepper@redhat.com>
+
+       * locales/as_IN: Break circular include loops introduced in last patch.
+       * locales/bn_BD: Likewise.
+       * locales/bn_IN: Likewise.
+       * locales/hi_IN: Likewise.
+       * locales/mr_IN: Likewise.
+       Patch by Pravin Satpute <psatpute@redhat.com>.
+
 2009-01-08  Ulrich Drepper  <drepper@redhat.com>
 
        [BZ #9701]
index 4755c78..4fb05b2 100644 (file)
@@ -1,3 +1,11 @@
+2009-01-14  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+       * sysdeps/unix/sysv/linux/sh/lowlevellock.S
+       (__lll_timedlock_wait): Use FUTEX_WAIT_BITSET|FUTEX_CLOCK_REALTIME
+       instead of computing relative timeout.
+       * sysdeps/unix/sysv/linux/sh/lowlevellock.h: Define
+       FUTEX_CLOCK_REALTIME and FUTEX_BITSET_MATCH_ANY.
+
 2009-01-25  Ulrich Drepper  <drepper@redhat.com>
 
        * pthread_mutex_lock.c (__pthread_mutex_lock): Remove unused label out.
index d827917..c051192 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004, 2005, 2007, 2008
+/* Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
        mov     #(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), tmp; \
        extu.b  tmp, tmp; \
        xor     tmp, reg
+# define LOAD_FUTEX_WAIT_ABS(reg,tmp,tmp2) \
+       mov     #(FUTEX_WAIT_BITSET | FUTEX_PRIVATE_FLAG), tmp; \
+       extu.b  tmp, tmp; \
+       mov     #(FUTEX_CLOCK_REALTIME >> 8), tmp2; \
+       swap.b  tmp2, tmp2; \
+       or      tmp2, tmp; \
+       xor     tmp, reg
 # define LOAD_FUTEX_WAKE(reg,tmp,tmp2) \
        mov     #(FUTEX_WAKE | FUTEX_PRIVATE_FLAG), tmp; \
        extu.b  tmp, tmp; \
        and     tmp2, reg       ; \
        mov     #FUTEX_WAIT, tmp ; \
        or      tmp, reg
+#  define LOAD_FUTEX_WAIT_ABS(reg,tmp,tmp2) \
+       stc     gbr, tmp        ; \
+       mov.w   99f, tmp2       ; \
+       add     tmp2, tmp       ; \
+       mov.l   @tmp, tmp2      ; \
+       bra     98f             ; \
+        mov    #FUTEX_PRIVATE_FLAG, tmp ; \
+99:    .word   PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \
+98:    extu.b  tmp, tmp        ; \
+       xor     tmp, reg        ; \
+       and     tmp2, reg       ; \
+       mov     #FUTEX_WAIT_BITSET, tmp ; \
+       mov     #(FUTEX_CLOCK_REALTIME >> 8), tmp2; \
+       swap.b  tmp2, tmp2; \
+       or      tmp2, tmp; \
+       or      tmp, reg
 # endif
 # define LOAD_FUTEX_WAKE(reg,tmp,tmp2) \
        stc     gbr, tmp        ; \
@@ -193,12 +216,85 @@ __lll_lock_wait:
        cfi_endproc
        .size   __lll_lock_wait,.-__lll_lock_wait
 
+       /*      r5  (r8): futex
+               r7 (r11): flags
+               r6  (r9): timeout
+               r4 (r10): futex value
+       */
        .globl  __lll_timedlock_wait
        .type   __lll_timedlock_wait,@function
        .hidden __lll_timedlock_wait
        .align  5
        cfi_startproc
 __lll_timedlock_wait:
+       mov.l   r12, @-r15
+       cfi_adjust_cfa_offset(4)
+       cfi_rel_offset (r12, 0)
+
+# ifndef __ASSUME_FUTEX_CLOCK_REALTIME
+       mov.l   .Lhave, r1
+#  ifdef PIC
+       mova    .Lgot, r0
+       mov.l   .Lgot, r12
+       add     r0, r12
+       add     r12, r1
+#  endif
+       mov.l   @r1, r0
+       tst     r0, r0
+       bt      .Lreltmo
+# endif
+
+       mov     r4, r2
+       mov     r5, r4
+       mov     r7, r5
+       mov     r6, r7
+       LOAD_FUTEX_WAIT_ABS (r5, r0, r1)
+
+       mov     #2, r6
+       cmp/eq  r6, r2
+       bf/s    2f
+        mov    r2, r6
+
+1:
+       mov     #2, r6
+       mov     #-1, r1
+       mov     #SYS_futex, r3
+       extu.b  r3, r3
+       trapa   #0x16
+       SYSCALL_INST_PAD
+       mov     r0, r6
+
+2:
+       XCHG    (r2, @r4, r3)   /* NB:   lock is implied */
+
+       tst     r3, r3
+       bt/s    3f
+        mov    r6, r0
+
+       cmp/eq  #-ETIMEDOUT, r0
+       bt      4f
+       cmp/eq  #-EINVAL, r0
+       bf      1b
+4:
+       neg     r0, r3
+3:
+       mov     r3, r0
+       rts
+        mov.l  @r15+, r12
+
+       .align  2
+# ifdef PIC
+.Lgot:
+       .long   _GLOBAL_OFFSET_TABLE_
+.Lhave:
+       .long   __have_futex_clock_realtime@GOTOFF
+# else
+.Lhave:
+       .long   __have_futex_clock_realtime
+# endif
+
+# ifndef __ASSUME_FUTEX_CLOCK_REALTIME
+.Lreltmo:
        /* Check for a valid timeout value.  */
        mov.l   @(4,r6), r1
        mov.l   .L1g, r0
@@ -290,12 +386,15 @@ __lll_timedlock_wait:
        mov.l   @r15+, r8
        mov.l   @r15+, r9
        mov.l   @r15+, r10
+       mov.l   @r15+, r11
        rts
-        mov.l  @r15+, r11
+        mov.l  @r15+, r12
 
 3:
+       mov.l   @r15+, r12
        rts
         mov    #EINVAL, r0
+# endif
        cfi_endproc
 
 .L1k:
index e709667..853a2da 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 2003, 2004, 2006, 2007, 2008 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -37,6 +38,9 @@
 #define FUTEX_WAIT_BITSET      9
 #define FUTEX_WAKE_BITSET      10
 #define FUTEX_PRIVATE_FLAG     128
+#define FUTEX_CLOCK_REALTIME   256
+
+#define FUTEX_BITSET_MATCH_ANY 0xffffffff
 
 #define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE  ((4 << 24) | 1)
 
index f0be37e..0fc2c4f 100644 (file)
@@ -1,5 +1,5 @@
 /* Copyright (C) 1992,1993,1995,1996,1997,1998,1999,2000,2002,2003,2004,
-   2005,2006   Free Software Foundation, Inc.
+   2005,2006,2009      Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995.
    Changed by Kaz Kojima, <kkojima@rr.iij4u.or.jp>.
     asm volatile (SYSCALL_INST_STR##nr SYSCALL_INST_PAD                              \
                  : "=z" (resultvar)                                          \
                  : "r" (r3) ASMFMT_##nr                                      \
-                 : "memory");                                                \
+                 : "memory", "t");                                           \
                                                                              \
     (int) resultvar; })
 
     asm volatile (SYSCALL_INST_STR##nr SYSCALL_INST_PAD                              \
                  : "=z" (resultvar)                                          \
                  : "r" (r3) ASMFMT_##nr                                      \
-                 : "memory");                                                \
+                 : "memory", "t");                                           \
                                                                              \
     (int) resultvar; })