From 43b7c249947b7b4784214c6eb61894d47193992c Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Thu, 9 Mar 2017 22:51:46 +0000 Subject: [PATCH] Introduce print_sigset_addr function As the definition of NSIG_BYTES is based on NSIG defined in , 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. --- defs.h | 3 +++ linux/alpha/arch_sigreturn.c | 2 +- linux/arm/arch_sigreturn.c | 2 +- linux/crisv10/arch_sigreturn.c | 2 +- linux/ia64/arch_sigreturn.c | 2 +- linux/microblaze/arch_sigreturn.c | 2 +- linux/mips/arch_sigreturn.c | 2 +- linux/tile/arch_sigreturn.c | 2 +- linux/x86_64/arch_sigreturn.c | 2 +- signal.c | 7 +++++++ 10 files changed, 18 insertions(+), 8 deletions(-) diff --git a/defs.h b/defs.h index b333a221..629efcd5 100644 --- a/defs.h +++ b/defs.h @@ -2,6 +2,7 @@ * Copyright (c) 1991, 1992 Paul Kranenburg * Copyright (c) 1993 Branko Lankester * Copyright (c) 1993, 1994, 1995, 1996 Rick Sladkey + * 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) \ diff --git a/linux/alpha/arch_sigreturn.c b/linux/alpha/arch_sigreturn.c index 3317a954..d5f19c50 100644 --- a/linux/alpha/arch_sigreturn.c +++ b/linux/alpha/arch_sigreturn.c @@ -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("}"); } diff --git a/linux/arm/arch_sigreturn.c b/linux/arm/arch_sigreturn.c index 378ba67f..b60dad80 100644 --- a/linux/arm/arch_sigreturn.c +++ b/linux/arm/arch_sigreturn.c @@ -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("}"); } diff --git a/linux/crisv10/arch_sigreturn.c b/linux/crisv10/arch_sigreturn.c index b449d41e..0458c8e8 100644 --- a/linux/crisv10/arch_sigreturn.c +++ b/linux/crisv10/arch_sigreturn.c @@ -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("}"); } diff --git a/linux/ia64/arch_sigreturn.c b/linux/ia64/arch_sigreturn.c index 0c0034f9..32f9bc58 100644 --- a/linux/ia64/arch_sigreturn.c +++ b/linux/ia64/arch_sigreturn.c @@ -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("}"); } diff --git a/linux/microblaze/arch_sigreturn.c b/linux/microblaze/arch_sigreturn.c index 6eb7cd8e..6e4343a8 100644 --- a/linux/microblaze/arch_sigreturn.c +++ b/linux/microblaze/arch_sigreturn.c @@ -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("}"); } diff --git a/linux/mips/arch_sigreturn.c b/linux/mips/arch_sigreturn.c index 72f7619b..8ce46096 100644 --- a/linux/mips/arch_sigreturn.c +++ b/linux/mips/arch_sigreturn.c @@ -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("}"); } diff --git a/linux/tile/arch_sigreturn.c b/linux/tile/arch_sigreturn.c index 88e946f0..1c687db2 100644 --- a/linux/tile/arch_sigreturn.c +++ b/linux/tile/arch_sigreturn.c @@ -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("}"); } diff --git a/linux/x86_64/arch_sigreturn.c b/linux/x86_64/arch_sigreturn.c index 060b93a7..16cadc2c 100644 --- a/linux/x86_64/arch_sigreturn.c +++ b/linux/x86_64/arch_sigreturn.c @@ -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("}"); } diff --git a/signal.c b/signal.c index 25329d3e..ef6dbc2e 100644 --- a/signal.c +++ b/signal.c @@ -6,6 +6,7 @@ * Copyright (c) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation * Linux for s390 port by D.J. Barrow * + * 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)) { -- 2.50.1