Introduce print_sigset_addr function

As the definition of NSIG_BYTES is based on NSIG defined in <signal.h>,
NSIG_BYTES cannot be used in files that use kernel sigset_t.

Add another wrapper around print_sigset_addr_len_limit function that
takes one argument less than print_sigset_addr_len wrapper.  This new
wrapper is going to be used in cases when the length argument is equal
to NSIG_BYTES.

* defs.h (print_sigset_addr): New function prototype.
* signal.c (print_sigset_addr): New function.
* linux/alpha/arch_sigreturn.c (arch_sigreturn): Replace
print_sigset_addr_len with print_sigset_addr.
* linux/arm/arch_sigreturn.c (arch_sigreturn): Likewise.
* linux/crisv10/arch_sigreturn.c (arch_sigreturn): Likewise.
* linux/ia64/arch_sigreturn.c (arch_sigreturn): Likewise.
* linux/microblaze/arch_sigreturn.c (arch_sigreturn): Likewise.
* linux/mips/arch_sigreturn.c (arch_sigreturn): Likewise.
* linux/tile/arch_sigreturn.c (arch_sigreturn): Likewise.
* linux/x86_64/arch_sigreturn.c (arch_sigreturn): Likewise.
This commit is contained in:
Дмитрий Левин 2017-03-09 22:51:46 +00:00
parent a58fc3c950
commit 43b7c24994
10 changed files with 18 additions and 8 deletions

3
defs.h
View File

@ -2,6 +2,7 @@
* Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
* Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
* Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey <jrs@world.std.com>
* Copyright (C) 2001-2017 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -585,6 +586,8 @@ extern void printuid(const char *, const unsigned int);
extern void
print_sigset_addr_len(struct tcb *, kernel_ulong_t addr, kernel_ulong_t len);
extern void
print_sigset_addr(struct tcb *, kernel_ulong_t addr);
extern const char *sprintsigmask_n(const char *, const void *, unsigned int);
#define tprintsigmask_addr(prefix, mask) \

View File

@ -8,6 +8,6 @@ arch_sigreturn(struct tcb *tcp)
addr += offsetof(struct sigcontext, sc_mask);
tprints("{mask=");
print_sigset_addr_len(tcp, addr, NSIG_BYTES);
print_sigset_addr(tcp, addr);
tprints("}");
}

View File

@ -14,6 +14,6 @@ arch_sigreturn(struct tcb *tcp)
(*arm_sp_ptr +
OFFSETOF_STRUCT_UCONTEXT_UC_SIGMASK);
tprints("{mask=");
print_sigset_addr_len(tcp, addr, NSIG_BYTES);
print_sigset_addr(tcp, addr);
tprints("}");
}

View File

@ -11,6 +11,6 @@ arch_sigreturn(struct tcb *tcp)
regs[PT_USP] + offsetof(struct sigcontext, oldmask);
tprints("{mask=");
print_sigset_addr_len(tcp, addr, NSIG_BYTES);
print_sigset_addr(tcp, addr);
tprints("}");
}

View File

@ -7,6 +7,6 @@ arch_sigreturn(struct tcb *tcp)
OFFSETOF_STRUCT_SIGFRAME_SC +
offsetof(struct sigcontext, sc_mask);
tprints("{mask=");
print_sigset_addr_len(tcp, addr, NSIG_BYTES);
print_sigset_addr(tcp, addr);
tprints("}");
}

View File

@ -11,6 +11,6 @@ arch_sigreturn(struct tcb *tcp)
addr += offsetof(struct sigcontext, oldmask);
tprints("{mask=");
print_sigset_addr_len(tcp, addr, NSIG_BYTES);
print_sigset_addr(tcp, addr);
tprints("}");
}

View File

@ -21,6 +21,6 @@ arch_sigreturn(struct tcb *tcp)
#endif
tprints("{mask=");
print_sigset_addr_len(tcp, addr, NSIG_BYTES);
print_sigset_addr(tcp, addr);
tprints("}");
}

View File

@ -7,6 +7,6 @@ arch_sigreturn(struct tcb *tcp)
offsetof(struct ucontext, uc_sigmask);
tprints("{mask=");
print_sigset_addr_len(tcp, addr, NSIG_BYTES);
print_sigset_addr(tcp, addr);
tprints("}");
}

View File

@ -27,6 +27,6 @@ arch_sigreturn(struct tcb *tcp)
#endif
const kernel_ulong_t addr = (kernel_ulong_t) *x86_64_rsp_ptr + offset;
tprints("{mask=");
print_sigset_addr_len(tcp, addr, NSIG_BYTES);
print_sigset_addr(tcp, addr);
tprints("}");
}

View File

@ -6,6 +6,7 @@
* Copyright (c) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
* Linux for s390 port by D.J. Barrow
* <barrow_dj@mail.yahoo.com,djbarrow@de.ibm.com>
* Copyright (C) 2001-2017 The strace developers.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -260,6 +261,12 @@ print_sigset_addr_len(struct tcb *const tcp, const kernel_ulong_t addr,
print_sigset_addr_len_limit(tcp, addr, len, current_wordsize);
}
void
print_sigset_addr(struct tcb *const tcp, const kernel_ulong_t addr)
{
print_sigset_addr_len_limit(tcp, addr, NSIG_BYTES, NSIG_BYTES);
}
SYS_FUNC(sigsetmask)
{
if (entering(tcp)) {