mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-09 23:00:07 +00:00
x86*: Return syscall error for lll_futex_wake.
It is very very possible that the futex syscall returns an error and that the caller of lll_futex_wake may want to look at that error and propagate the failure. This patch allows a caller to see the syscall error. There are no users of the syscall error at present, but future cleanups are now be able to check for the error. -- nplt/ 2013-06-10 Carlos O'Donell <carlos@redhat.com> * sysdeps/unix/sysv/linux/i386/lowlevellock.h (lll_futex_wake): Return syscall error. * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h (lll_futex_wake): Return syscall error.
This commit is contained in:
parent
0efa6f8b99
commit
be11d71394
@ -1,3 +1,10 @@
|
|||||||
|
2013-06-10 Carlos O'Donell <carlos@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/i386/lowlevellock.h
|
||||||
|
(lll_futex_wake): Return syscall error.
|
||||||
|
* sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
|
||||||
|
(lll_futex_wake): Return syscall error.
|
||||||
|
|
||||||
2013-08-06 Ondřej Bílka <neleai@seznam.cz>
|
2013-08-06 Ondřej Bílka <neleai@seznam.cz>
|
||||||
|
|
||||||
* sysdeps/pthread/allocalim.h: (__libc_use_alloca): Fix warning.
|
* sysdeps/pthread/allocalim.h: (__libc_use_alloca): Fix warning.
|
||||||
|
@ -224,20 +224,21 @@ LLL_STUB_UNWIND_INFO_END
|
|||||||
|
|
||||||
|
|
||||||
#define lll_futex_wake(futex, nr, private) \
|
#define lll_futex_wake(futex, nr, private) \
|
||||||
do { \
|
({ \
|
||||||
int __ignore; \
|
int __status; \
|
||||||
register __typeof (nr) _nr asm ("edx") = (nr); \
|
register __typeof (nr) _nr asm ("edx") = (nr); \
|
||||||
LIBC_PROBE (lll_futex_wake, 3, futex, nr, private); \
|
LIBC_PROBE (lll_futex_wake, 3, futex, nr, private); \
|
||||||
__asm __volatile (LLL_EBX_LOAD \
|
__asm __volatile (LLL_EBX_LOAD \
|
||||||
LLL_ENTER_KERNEL \
|
LLL_ENTER_KERNEL \
|
||||||
LLL_EBX_LOAD \
|
LLL_EBX_LOAD \
|
||||||
: "=a" (__ignore) \
|
: "=a" (__status) \
|
||||||
: "0" (SYS_futex), LLL_EBX_REG (futex), \
|
: "0" (SYS_futex), LLL_EBX_REG (futex), \
|
||||||
"c" (__lll_private_flag (FUTEX_WAKE, private)), \
|
"c" (__lll_private_flag (FUTEX_WAKE, private)), \
|
||||||
"d" (_nr), \
|
"d" (_nr), \
|
||||||
"i" (0) /* phony, to align next arg's number */, \
|
"i" (0) /* phony, to align next arg's number */, \
|
||||||
"i" (offsetof (tcbhead_t, sysinfo))); \
|
"i" (offsetof (tcbhead_t, sysinfo))); \
|
||||||
} while (0)
|
__status; \
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
/* NB: in the lll_trylock macro we simply return the value in %eax
|
/* NB: in the lll_trylock macro we simply return the value in %eax
|
||||||
|
@ -225,17 +225,18 @@ LLL_STUB_UNWIND_INFO_END
|
|||||||
|
|
||||||
|
|
||||||
#define lll_futex_wake(futex, nr, private) \
|
#define lll_futex_wake(futex, nr, private) \
|
||||||
do { \
|
({ \
|
||||||
int __ignore; \
|
int __status; \
|
||||||
register __typeof (nr) _nr __asm ("edx") = (nr); \
|
register __typeof (nr) _nr __asm ("edx") = (nr); \
|
||||||
LIBC_PROBE (lll_futex_wake, 3, futex, nr, private); \
|
LIBC_PROBE (lll_futex_wake, 3, futex, nr, private); \
|
||||||
__asm __volatile ("syscall" \
|
__asm __volatile ("syscall" \
|
||||||
: "=a" (__ignore) \
|
: "=a" (__status) \
|
||||||
: "0" (SYS_futex), "D" (futex), \
|
: "0" (SYS_futex), "D" (futex), \
|
||||||
"S" (__lll_private_flag (FUTEX_WAKE, private)), \
|
"S" (__lll_private_flag (FUTEX_WAKE, private)), \
|
||||||
"d" (_nr) \
|
"d" (_nr) \
|
||||||
: "memory", "cc", "r10", "r11", "cx"); \
|
: "memory", "cc", "r10", "r11", "cx"); \
|
||||||
} while (0)
|
__status; \
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
/* NB: in the lll_trylock macro we simply return the value in %eax
|
/* NB: in the lll_trylock macro we simply return the value in %eax
|
||||||
|
Loading…
Reference in New Issue
Block a user