summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2013-07-18 20:37:06 +0200
committerDenys Vlasenko <dvlasenk@redhat.com>2013-07-18 20:55:30 +0200
commit75f4e1fb7d802ec890a1a0d95ca80eb8aa3732e7 (patch)
tree10aad24c9e734ea12b760c3d8f1c507502a6786e
parent46c8acd16b6ac32b85de7051a907112a57988663 (diff)
downloadstrace-75f4e1fb7d802ec890a1a0d95ca80eb8aa3732e7.tar.gz
strace-75f4e1fb7d802ec890a1a0d95ca80eb8aa3732e7.tar.bz2
strace-75f4e1fb7d802ec890a1a0d95ca80eb8aa3732e7.tar.xz
Convert some uses of long_to_sigmask+printsigmask to sprintsigmask_long
This allows to drop long_to_sigmask function, and a whole bunch of sigset_t variables. Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
-rw-r--r--signal.c78
1 files changed, 25 insertions, 53 deletions
diff --git a/signal.c b/signal.c
index 3626cf3..b5ebae6 100644
--- a/signal.c
+++ b/signal.c
@@ -213,13 +213,6 @@ signame(int sig)
return buf;
}
-static void
-long_to_sigset(long l, sigset_t *s)
-{
- sigemptyset(s);
- *(long *)s = l;
-}
-
static const char *
sprintsigmask(const char *str, sigset_t *mask, int rt)
/* set might include realtime sigs */
@@ -286,6 +279,15 @@ sprintsigmask(const char *str, sigset_t *mask, int rt)
return outstr;
}
+static const char *
+sprintsigmask_long(const char *str, long mask)
+{
+ sigset_t s;
+ sigemptyset(&s);
+ *(long *)&s = mask;
+ return sprintsigmask(str, &s, /*rt:*/ 1);
+}
+
static void
printsigmask(sigset_t *mask, int rt)
{
@@ -656,15 +658,10 @@ int
sys_sigsetmask(struct tcb *tcp)
{
if (entering(tcp)) {
- sigset_t sigm;
- long_to_sigset(tcp->u_arg[0], &sigm);
- printsigmask(&sigm, 0);
+ tprints(sprintsigmask_long("", tcp->u_arg[0]));
}
else if (!syserror(tcp)) {
- sigset_t sigm;
- long_to_sigset(tcp->u_rval, &sigm);
- tcp->auxstr = sprintsigmask("old mask ", &sigm, 0);
-
+ tcp->auxstr = sprintsigmask_long("old mask ", tcp->u_rval);
return RVAL_HEX | RVAL_STR;
}
return 0;
@@ -684,7 +681,6 @@ int
sys_sigaction(struct tcb *tcp)
{
long addr;
- sigset_t sigset;
struct old_sigaction sa;
if (entering(tcp)) {
@@ -716,8 +712,7 @@ sys_sigaction(struct tcb *tcp)
tprints("{SIG_IGN, ");
else
tprintf("{%#lx, ", (long) sa.__sa_handler);
- long_to_sigset(sa.sa_mask, &sigset);
- printsigmask(&sigset, 0);
+ tprints(sprintsigmask_long("", sa.sa_mask));
tprints(", ");
printflags(sigact_flags, sa.sa_flags, "SA_???");
#ifdef SA_RESTORER
@@ -818,8 +813,7 @@ sys_sigreturn(struct tcb *tcp)
return 0;
/* Kernel fills out uc.sc.oldmask too when it sets up signal stack,
* but for sigmask restore, sigreturn syscall uses uc.uc_sigmask instead.
- * long_to_sigset(uc.sc.oldmask, &sigm);
- * tprints(sprintsigmask(") (mask ", &sigm, 0));
+ * tprints(sprintsigmask_long(") (mask ", uc.sc.oldmask));
*/
sigemptyset(&sigm);
((uint32_t*)&sigm)[0] = uc.uc_sigmask[0];
@@ -921,7 +915,6 @@ sys_sigreturn(struct tcb *tcp)
if (entering(tcp)) {
long esp;
struct sigcontext_struct sc;
- sigset_t sigm;
esp = ppc_regs.gpr[1];
@@ -936,45 +929,38 @@ sys_sigreturn(struct tcb *tcp)
#endif
if (umove(tcp, esp, &sc) < 0)
return 0;
- long_to_sigset(sc.oldmask, &sigm);
- tprints(sprintsigmask(") (mask ", &sigm, 0));
+ tprints(sprintsigmask_long(") (mask ", sc.oldmask));
}
#elif defined(M68K)
if (entering(tcp)) {
long usp;
struct sigcontext sc;
- sigset_t sigm;
if (upeek(tcp->pid, 4*PT_USP, &usp) < 0)
return 0;
if (umove(tcp, usp, &sc) < 0)
return 0;
- long_to_sigset(sc.sc_mask, &sigm);
- tprints(sprintsigmask(") (mask ", &sigm, 0));
+ tprints(sprintsigmask_long(") (mask ", sc.sc_mask));
}
#elif defined(ALPHA)
if (entering(tcp)) {
long fp;
struct sigcontext_struct sc;
- sigset_t sigm;
if (upeek(tcp->pid, REG_FP, &fp) < 0)
return 0;
if (umove(tcp, fp, &sc) < 0)
return 0;
- long_to_sigset(sc.sc_mask, &sigm);
- tprints(sprintsigmask(") (mask ", &sigm, 0));
+ tprints(sprintsigmask_long(") (mask ", sc.sc_mask));
}
#elif defined(SPARC) || defined(SPARC64)
if (entering(tcp)) {
long i1;
m_siginfo_t si;
- sigset_t sigm;
i1 = sparc_regs.u_regs[U_REG_O1];
if (umove(tcp, i1, &si) < 0) {
perror_msg("sigreturn: umove");
return 0;
}
- long_to_sigset(si.si_mask, &sigm);
- tprints(sprintsigmask(") (mask ", &sigm, 0));
+ tprints(sprintsigmask_long(") (mask ", si.si_mask));
}
#elif defined(LINUX_MIPSN32) || defined(LINUX_MIPSN64)
/* This decodes rt_sigreturn. The 64-bit ABIs do not have
@@ -989,15 +975,13 @@ sys_sigreturn(struct tcb *tcp)
sp = sp + 6 * 4 + 128;
if (umove(tcp, sp, &uc) < 0)
return 0;
- long_to_sigset(*(long *) &uc.uc_sigmask, &sigm);
- tprints(sprintsigmask(") (mask ", &sigm, 0));
+ tprints(sprintsigmask_long(") (mask ", *(long *) &uc.uc_sigmask));
}
#elif defined(MIPS)
if (entering(tcp)) {
long sp;
struct pt_regs regs;
m_siginfo_t si;
- sigset_t sigm;
if (ptrace(PTRACE_GETREGS, tcp->pid, (char *)&regs, 0) < 0) {
perror_msg("sigreturn: PTRACE_GETREGS");
return 0;
@@ -1005,22 +989,19 @@ sys_sigreturn(struct tcb *tcp)
sp = regs.regs[29];
if (umove(tcp, sp, &si) < 0)
return 0;
- long_to_sigset(si.si_mask, &sigm);
- tprints(sprintsigmask(") (mask ", &sigm, 0));
+ tprints(sprintsigmask_long(") (mask ", si.si_mask));
}
#elif defined(CRISV10) || defined(CRISV32)
if (entering(tcp)) {
struct sigcontext sc;
long regs[PT_MAX+1];
- sigset_t sigm;
if (ptrace(PTRACE_GETREGS, tcp->pid, NULL, (long)regs) < 0) {
perror_msg("sigreturn: PTRACE_GETREGS");
return 0;
}
if (umove(tcp, regs[PT_USP], &sc) < 0)
return 0;
- long_to_sigset(sc.oldmask, &sigm);
- tprints(sprintsigmask(") (mask ", &sigm, 0));
+ tprints(sprintsigmask_long(") (mask ", sc.oldmask));
}
#elif defined(TILE)
if (entering(tcp)) {
@@ -1040,14 +1021,12 @@ sys_sigreturn(struct tcb *tcp)
if (entering(tcp)) {
struct sigcontext sc;
long sp;
- sigset_t sigm;
/* Read r1, the stack pointer. */
if (upeek(tcp->pid, 1 * 4, &sp) < 0)
return 0;
if (umove(tcp, sp, &sc) < 0)
return 0;
- long_to_sigset(sc.oldmask, &sigm);
- tprints(sprintsigmask(") (mask ", &sigm, 0));
+ tprints(sprintsigmask_long(") (mask ", sc.oldmask));
}
#elif defined(XTENSA)
/* Xtensa only has rt_sys_sigreturn */
@@ -1062,9 +1041,7 @@ int
sys_siggetmask(struct tcb *tcp)
{
if (exiting(tcp)) {
- sigset_t sigm;
- long_to_sigset(tcp->u_rval, &sigm);
- tcp->auxstr = sprintsigmask("mask ", &sigm, 0);
+ tcp->auxstr = sprintsigmask_long("mask ", tcp->u_rval);
}
return RVAL_HEX | RVAL_STR;
}
@@ -1073,9 +1050,7 @@ int
sys_sigsuspend(struct tcb *tcp)
{
if (entering(tcp)) {
- sigset_t sigm;
- long_to_sigset(tcp->u_arg[2], &sigm);
- printsigmask(&sigm, 0);
+ tprints(sprintsigmask_long("", tcp->u_arg[2]));
}
return 0;
}
@@ -1127,7 +1102,6 @@ int
sys_sigprocmask(struct tcb *tcp)
{
# ifdef ALPHA
- sigset_t ss;
if (entering(tcp)) {
/*
* Alpha/OSF is different: it doesn't pass in two pointers,
@@ -1141,12 +1115,10 @@ sys_sigprocmask(struct tcb *tcp)
* ret = sigprocmask(how, &new, &old, ...);
*/
printxval(sigprocmaskcmds, tcp->u_arg[0], "SIG_???");
- long_to_sigset(tcp->u_arg[1], &ss);
- tprints(sprintsigmask(", ", &ss, 0));
+ tprints(sprintsigmask_long(", ", tcp->u_arg[1]));
}
else if (!syserror(tcp)) {
- long_to_sigset(tcp->u_rval, &ss);
- tcp->auxstr = sprintsigmask("old mask ", &ss, 0);
+ tcp->auxstr = sprintsigmask_long("old mask ", tcp->u_rval);
return RVAL_HEX | RVAL_STR;
}
# else /* !ALPHA */