aboutsummaryrefslogtreecommitdiff
path: root/nptl
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2012-03-08 11:22:41 +0100
committerThomas Schwinge <thomas@codesourcery.com>2012-03-08 11:22:41 +0100
commit2edd9a79e5967e01f9afc3ae1207159a2c53c73f (patch)
treeadc9c04c9f2a8072909c3b56981e548b5fd54491 /nptl
parentc564a81246d0064eb12bc34cac8996709a0ecbfc (diff)
downloadglibc-2edd9a79e5967e01f9afc3ae1207159a2c53c73f.tar
glibc-2edd9a79e5967e01f9afc3ae1207159a2c53c73f.tar.gz
glibc-2edd9a79e5967e01f9afc3ae1207159a2c53c73f.tar.bz2
glibc-2edd9a79e5967e01f9afc3ae1207159a2c53c73f.zip
Work around kernel rejecting valid absolute timestamps.
Diffstat (limited to 'nptl')
-rw-r--r--nptl/ChangeLog3
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S10
2 files changed, 11 insertions, 2 deletions
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index cd70329abb..ddd0ee2027 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,5 +1,8 @@
2012-03-08 Thomas Schwinge <thomas@codesourcery.com>
+ * sysdeps/unix/sysv/linux/sh/lowlevellock.S (__lll_timedlock_wait):
+ Check for timestamp before the Epoch.
+
* sysdeps/unix/sysv/linux/sh/sem_timedwait.S (sem_timedwait): Fix
updating nwaiters.
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
index 9327860ac9..fe4e3b628b 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S
@@ -1,5 +1,4 @@
-/* Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009, 2010
- Free Software Foundation, Inc.
+/* Copyright (C) 2003-2012 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
@@ -243,6 +242,12 @@ __lll_timedlock_wait:
bt .Lreltmo
# endif
+ /* if (timeout->tv_sec < 0) return ETIMEDOUT; */
+ mov.l @r6, r1
+ cmp/pz r1
+ bf/s 5f
+ mov #ETIMEDOUT, r0
+
mov r4, r2
mov r5, r4
mov r7, r5
@@ -278,6 +283,7 @@ __lll_timedlock_wait:
neg r0, r3
3:
mov r3, r0
+5:
rts
mov.l @r15+, r12