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:
Carlos O'Donell 2013-06-10 12:05:11 -04:00
parent 0efa6f8b99
commit be11d71394
3 changed files with 17 additions and 8 deletions

View File

@ -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>
* sysdeps/pthread/allocalim.h: (__libc_use_alloca): Fix warning.

View File

@ -224,20 +224,21 @@ LLL_STUB_UNWIND_INFO_END
#define lll_futex_wake(futex, nr, private) \
do { \
int __ignore; \
({ \
int __status; \
register __typeof (nr) _nr asm ("edx") = (nr); \
LIBC_PROBE (lll_futex_wake, 3, futex, nr, private); \
__asm __volatile (LLL_EBX_LOAD \
LLL_ENTER_KERNEL \
LLL_EBX_LOAD \
: "=a" (__ignore) \
: "=a" (__status) \
: "0" (SYS_futex), LLL_EBX_REG (futex), \
"c" (__lll_private_flag (FUTEX_WAKE, private)), \
"d" (_nr), \
"i" (0) /* phony, to align next arg's number */, \
"i" (offsetof (tcbhead_t, sysinfo))); \
} while (0)
__status; \
})
/* NB: in the lll_trylock macro we simply return the value in %eax

View File

@ -225,17 +225,18 @@ LLL_STUB_UNWIND_INFO_END
#define lll_futex_wake(futex, nr, private) \
do { \
int __ignore; \
({ \
int __status; \
register __typeof (nr) _nr __asm ("edx") = (nr); \
LIBC_PROBE (lll_futex_wake, 3, futex, nr, private); \
__asm __volatile ("syscall" \
: "=a" (__ignore) \
: "=a" (__status) \
: "0" (SYS_futex), "D" (futex), \
"S" (__lll_private_flag (FUTEX_WAKE, private)), \
"d" (_nr) \
: "memory", "cc", "r10", "r11", "cx"); \
} while (0)
__status; \
})
/* NB: in the lll_trylock macro we simply return the value in %eax