Improve SI_TIMER decoding
Decode siginfo_t more clearly for si_code SI_TIMER. The 'pid' is actually a POSIX timer id, and the 'uid' is actually the overrun. Also factor out the si_value dumping so it's the same for every si_code. Signed-off-by: Elliott Hughes <enh@google.com>
This commit is contained in:
parent
7a28f7f128
commit
4dd1e89cb8
42
signal.c
42
signal.c
@ -499,6 +499,17 @@ static const struct xlat sigbus_codes[] = {
|
||||
XLAT_END
|
||||
};
|
||||
|
||||
static void
|
||||
printsigval(siginfo_t *sip, int verbose)
|
||||
{
|
||||
if (!verbose)
|
||||
tprints(", ...");
|
||||
else
|
||||
tprintf(", si_value={int=%u, ptr=%#lx}",
|
||||
sip->si_int,
|
||||
(unsigned long) sip->si_ptr);
|
||||
}
|
||||
|
||||
void
|
||||
printsiginfo(siginfo_t *sip, int verbose)
|
||||
{
|
||||
@ -561,32 +572,35 @@ printsiginfo(siginfo_t *sip, int verbose)
|
||||
}
|
||||
#ifdef SI_FROMUSER
|
||||
if (SI_FROMUSER(sip)) {
|
||||
tprintf(", si_pid=%lu, si_uid=%lu",
|
||||
(unsigned long) sip->si_pid,
|
||||
(unsigned long) sip->si_uid);
|
||||
switch (sip->si_code) {
|
||||
#ifdef SI_USER
|
||||
case SI_USER:
|
||||
tprintf(", si_pid=%lu, si_uid=%lu",
|
||||
(unsigned long) sip->si_pid,
|
||||
(unsigned long) sip->si_uid);
|
||||
break;
|
||||
#endif
|
||||
#ifdef SI_TKILL
|
||||
case SI_TKILL:
|
||||
tprintf(", si_pid=%lu, si_uid=%lu",
|
||||
(unsigned long) sip->si_pid,
|
||||
(unsigned long) sip->si_uid);
|
||||
break;
|
||||
#endif
|
||||
#ifdef SI_TIMER
|
||||
case SI_TIMER:
|
||||
tprintf(", si_value=%d", sip->si_int);
|
||||
tprintf(", si_timerid=%#x, si_overrun=%d",
|
||||
sip->si_timerid, sip->si_overrun);
|
||||
printsigval(sip, verbose);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
tprintf(", si_pid=%lu, si_uid=%lu",
|
||||
(unsigned long) sip->si_pid,
|
||||
(unsigned long) sip->si_uid);
|
||||
if (!sip->si_ptr)
|
||||
break;
|
||||
if (!verbose)
|
||||
tprints(", ...");
|
||||
else
|
||||
tprintf(", si_value={int=%u, ptr=%#lx}",
|
||||
sip->si_int,
|
||||
(unsigned long) sip->si_ptr);
|
||||
printsigval(sip, verbose);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -628,13 +642,7 @@ printsiginfo(siginfo_t *sip, int verbose)
|
||||
(unsigned long) sip->si_uid);
|
||||
if (!sip->si_ptr)
|
||||
break;
|
||||
if (!verbose)
|
||||
tprints(", ...");
|
||||
else {
|
||||
tprintf(", si_value={int=%u, ptr=%#lx}",
|
||||
sip->si_int,
|
||||
(unsigned long) sip->si_ptr);
|
||||
}
|
||||
printsigval(sip, verbose);
|
||||
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user