tile: use better variable naming in INLINE_SYSCALL
At issue for INLINE_SYSCALL was that it used "err" and "val" as variable names in a #define, so that if it was used in a context where the "caller" was also using "err" or "val", and those variables were passed in to INLINE_SYSCALL, we would end up referencing the internal shadowed variables instead. For example, "char val" in check_may_shrink_heap() in sysdeps/unix/sysv/linux/malloc-sysdep.h was being shadowed by the syscall return "val" in INLINE_SYSCALL, causing the "char val" not to get updated at all, and may_shrink_heap ended up always false. A similar fix was made to INTERNAL_VSYSCALL_CALL.
This commit is contained in:
parent
4da82229f0
commit
1827059925
|
@ -1,3 +1,9 @@
|
||||||
|
2015-05-26 Chris Metcalf <cmetcalf@ezchip.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/tile/sysdep.h (INLINE_SYSCALL):
|
||||||
|
Avoid using variables in #defines that might cause shadowing.
|
||||||
|
(INTERNAL_VSYSCALL_CALL): Likewise.
|
||||||
|
|
||||||
2015-05-26 Roland McGrath <roland@hack.frob.com>
|
2015-05-26 Roland McGrath <roland@hack.frob.com>
|
||||||
|
|
||||||
* sysdeps/nacl/lll_timedlock_wait.c: New file.
|
* sysdeps/nacl/lll_timedlock_wait.c: New file.
|
||||||
|
|
|
@ -78,16 +78,17 @@
|
||||||
/* Define a macro which expands inline into the wrapper code for a system
|
/* Define a macro which expands inline into the wrapper code for a system
|
||||||
call. */
|
call. */
|
||||||
# undef INLINE_SYSCALL
|
# undef INLINE_SYSCALL
|
||||||
# define INLINE_SYSCALL(name, nr, args...) \
|
# define INLINE_SYSCALL(name, nr, args...) \
|
||||||
({ \
|
({ \
|
||||||
INTERNAL_SYSCALL_DECL (err); \
|
INTERNAL_SYSCALL_DECL (_sc_err); \
|
||||||
unsigned long val = INTERNAL_SYSCALL (name, err, nr, args); \
|
unsigned long _sc_val = INTERNAL_SYSCALL (name, _sc_err, nr, args); \
|
||||||
if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (val, err), 0)) \
|
if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (_sc_val, _sc_err), 0)) \
|
||||||
{ \
|
{ \
|
||||||
__set_errno (INTERNAL_SYSCALL_ERRNO (val, err)); \
|
__set_errno (INTERNAL_SYSCALL_ERRNO (_sc_val, _sc_err)); \
|
||||||
val = -1; \
|
_sc_val = -1; \
|
||||||
} \
|
} \
|
||||||
(long) val; })
|
(long) _sc_val; \
|
||||||
|
})
|
||||||
|
|
||||||
#undef INTERNAL_SYSCALL
|
#undef INTERNAL_SYSCALL
|
||||||
#define INTERNAL_SYSCALL(name, err, nr, args...) \
|
#define INTERNAL_SYSCALL(name, err, nr, args...) \
|
||||||
|
@ -203,11 +204,11 @@
|
||||||
"=R05" (_clobber_r5), "=R10" (_clobber_r10)
|
"=R05" (_clobber_r5), "=R10" (_clobber_r10)
|
||||||
|
|
||||||
|
|
||||||
#define INTERNAL_VSYSCALL_CALL(funcptr, err, nr, args...) \
|
#define INTERNAL_VSYSCALL_CALL(funcptr, err, nr, args...) \
|
||||||
({ \
|
({ \
|
||||||
struct syscall_return_value rv = funcptr (args); \
|
struct syscall_return_value _sc_rv = funcptr (args); \
|
||||||
err = rv.error; \
|
err = _sc_rv.error; \
|
||||||
rv.value; \
|
_sc_rv.value; \
|
||||||
})
|
})
|
||||||
|
|
||||||
/* List of system calls which are supported as vsyscalls. */
|
/* List of system calls which are supported as vsyscalls. */
|
||||||
|
|
Loading…
Reference in New Issue