Macroize conditional signed widening operation

* defs.h: Define widen_to_long() macro.
* signal.c (sys_kill): Use it instead of open-coding it.
(sys_tgkill): Use widen_to_long() on pids.
* resource.c (decode_rlimit): Formatting fix.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2013-02-15 14:58:52 +01:00
parent ae8643e671
commit e015d2d331
3 changed files with 19 additions and 10 deletions

10
defs.h
View File

@ -723,6 +723,16 @@ extern unsigned current_wordsize;
# endif
#endif
/* In many, many places we play fast and loose and use
* tprintf("%d", (int) tcp->u_arg[N]) to print fds, pids etc.
* We probably need to use widen_to_long() instead:
*/
#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
# define widen_to_long(v) (current_wordsize == 4 ? (long)(int32_t)(v) : (long)(v))
#else
# define widen_to_long(v) ((long)(v))
#endif
struct sysent {
unsigned nargs;
int sys_flags;

View File

@ -173,8 +173,7 @@ decode_rlimit(struct tcb *tcp, unsigned long addr)
{
if (!addr)
tprints("NULL");
else if (!verbose(tcp) ||
(exiting(tcp) && syserror(tcp)))
else if (!verbose(tcp) || (exiting(tcp) && syserror(tcp)))
tprintf("%#lx", addr);
else {
# if SIZEOF_RLIM_T == 4

View File

@ -1117,13 +1117,10 @@ int
sys_kill(struct tcb *tcp)
{
if (entering(tcp)) {
long pid = tcp->u_arg[0];
#if SUPPORTED_PERSONALITIES > 1
/* Sign-extend a 32-bit value when that's what it is. */
if (current_wordsize < sizeof pid)
pid = (long) (int) pid;
#endif
tprintf("%ld, %s", pid, signame(tcp->u_arg[1]));
tprintf("%ld, %s",
widen_to_long(tcp->u_arg[0]),
signame(tcp->u_arg[1])
);
}
return 0;
}
@ -1133,7 +1130,10 @@ sys_tgkill(struct tcb *tcp)
{
if (entering(tcp)) {
tprintf("%ld, %ld, %s",
tcp->u_arg[0], tcp->u_arg[1], signame(tcp->u_arg[2]));
widen_to_long(tcp->u_arg[0]),
widen_to_long(tcp->u_arg[1]),
signame(tcp->u_arg[2])
);
}
return 0;
}