138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin/*
238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com>
538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2001 John Hughes <john@Calva.COM>
738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2013 Denys Vlasenko <vda.linux@googlemail.com>
838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2011-2015 Dmitry V. Levin <ldv@altlinux.org>
938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
1038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * All rights reserved.
1138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin *
1238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Redistribution and use in source and binary forms, with or without
1338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * modification, are permitted provided that the following conditions
1438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * are met:
1538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 1. Redistributions of source code must retain the above copyright
1638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin *    notice, this list of conditions and the following disclaimer.
1738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 2. Redistributions in binary form must reproduce the above copyright
1838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin *    notice, this list of conditions and the following disclaimer in the
1938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin *    documentation and/or other materials provided with the distribution.
2038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 3. The name of the author may not be used to endorse or promote products
2138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin *    derived from this software without specific prior written permission.
2238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin *
2338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
2438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
2538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
3038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
3138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
3238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin */
3438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin
35537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "defs.h"
36537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
37a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova#include DEF_MPERS_TYPE(siginfo_t)
38a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova
390e946ab2c26f3cb6f27cb99ddf0f5581bef16781Dmitry V. Levin#include <signal.h>
40d2eaf67486748263dfe84e735767f3651066a754Mike Frysinger#include <linux/audit.h>
410e946ab2c26f3cb6f27cb99ddf0f5581bef16781Dmitry V. Levin
42a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova#include MPERS_DEFS
43a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova
44a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova#ifndef IN_MPERS
450e946ab2c26f3cb6f27cb99ddf0f5581bef16781Dmitry V. Levin#include "printsiginfo.h"
46a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova#endif
470e946ab2c26f3cb6f27cb99ddf0f5581bef16781Dmitry V. Levin
48d2eaf67486748263dfe84e735767f3651066a754Mike Frysinger#include "xlat/audit_arch.h"
49537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigbus_codes.h"
50537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigchld_codes.h"
51537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigfpe_codes.h"
52537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigill_codes.h"
53537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/siginfo_codes.h"
54537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigpoll_codes.h"
55537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigprof_codes.h"
56537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigsegv_codes.h"
57537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigsys_codes.h"
58537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#include "xlat/sigtrap_codes.h"
59537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
60537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#ifdef SIGEMT
61537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin# include "xlat/sigemt_codes.h"
62537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#endif
63537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
64537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#ifndef SI_FROMUSER
65537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin# define SI_FROMUSER(sip)	((sip)->si_code <= 0)
66537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#endif
67537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
68537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinstatic void
69537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinprintsigsource(const siginfo_t *sip)
70537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin{
713595f4ae15ad50fae917fdd1871eece4e928fb3aElvira Khabirova	tprintf(", si_pid=%u, si_uid=%u",
723595f4ae15ad50fae917fdd1871eece4e928fb3aElvira Khabirova		(unsigned int) sip->si_pid,
733595f4ae15ad50fae917fdd1871eece4e928fb3aElvira Khabirova		(unsigned int) sip->si_uid);
74537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin}
75537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
76537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinstatic void
77537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinprintsigval(const siginfo_t *sip, bool verbose)
78537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin{
79537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	if (!verbose)
80537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		tprints(", ...");
81537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	else
823595f4ae15ad50fae917fdd1871eece4e928fb3aElvira Khabirova		tprintf(", si_value={int=%d, ptr=%#lx}",
83537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			sip->si_int,
84537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			(unsigned long) sip->si_ptr);
85537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin}
86537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
87537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinstatic void
88537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinprint_si_code(int si_signo, int si_code)
89537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin{
90537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	const char *code = xlookup(siginfo_codes, si_code);
91537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
92537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	if (!code) {
93537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		switch (si_signo) {
94537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGTRAP:
95537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigtrap_codes, si_code);
96537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
97537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGCHLD:
98537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigchld_codes, si_code);
99537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
100537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGPOLL:
101537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigpoll_codes, si_code);
102537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
103537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGPROF:
104537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigprof_codes, si_code);
105537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
106537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGILL:
107537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigill_codes, si_code);
108537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
109537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#ifdef SIGEMT
110537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGEMT:
111537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigemt_codes, si_code);
112537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
113537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#endif
114537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGFPE:
115537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigfpe_codes, si_code);
116537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
117537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGSEGV:
118537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigsegv_codes, si_code);
119537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
120537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGBUS:
121537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigbus_codes, si_code);
122537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
123537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGSYS:
124537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigsys_codes, si_code);
125537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
126537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		}
127537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	}
128537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
129537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	if (code)
130537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		tprints(code);
131537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	else
132537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		tprintf("%#x", si_code);
133537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin}
134537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
135537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinstatic void
136537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinprint_si_info(const siginfo_t *sip, bool verbose)
137537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin{
138537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	if (sip->si_errno) {
139537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		tprints(", si_errno=");
140537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		if ((unsigned) sip->si_errno < nerrnos
141537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		    && errnoent[sip->si_errno])
142537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			tprints(errnoent[sip->si_errno]);
143537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		else
144537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			tprintf("%d", sip->si_errno);
145537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	}
146537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
147537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	if (SI_FROMUSER(sip)) {
148537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		switch (sip->si_code) {
149537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SI_USER:
150537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			printsigsource(sip);
151537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
152537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SI_TKILL:
153537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			printsigsource(sip);
154537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
155537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#if defined HAVE_SIGINFO_T_SI_TIMERID && defined HAVE_SIGINFO_T_SI_OVERRUN
156537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SI_TIMER:
157537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			tprintf(", si_timerid=%#x, si_overrun=%d",
158537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				sip->si_timerid, sip->si_overrun);
159537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			printsigval(sip, verbose);
160537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
161537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#endif
162537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		default:
163537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			printsigsource(sip);
164537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			if (sip->si_ptr)
165537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				printsigval(sip, verbose);
166537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
167537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		}
168537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	} else {
169537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		switch (sip->si_signo) {
170537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGCHLD:
171537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			printsigsource(sip);
172537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			tprints(", si_status=");
173537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			if (sip->si_code == CLD_EXITED)
174537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				tprintf("%d", sip->si_status);
175537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			else
176537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				printsignal(sip->si_status);
177537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			if (!verbose)
178537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				tprints(", ...");
179537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			else
180537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				tprintf(", si_utime=%llu, si_stime=%llu",
181537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin					(unsigned long long) sip->si_utime,
182537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin					(unsigned long long) sip->si_stime);
183537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
184537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGILL: case SIGFPE:
185537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGSEGV: case SIGBUS:
186537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			tprintf(", si_addr=%#lx",
187537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				(unsigned long) sip->si_addr);
188537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
189537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGPOLL:
190537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			switch (sip->si_code) {
191537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			case POLL_IN: case POLL_OUT: case POLL_MSG:
192537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				tprintf(", si_band=%ld",
193537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin					(long) sip->si_band);
194537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				break;
195537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			}
196537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
197537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#ifdef HAVE_SIGINFO_T_SI_SYSCALL
198537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGSYS:
199d2eaf67486748263dfe84e735767f3651066a754Mike Frysinger			tprintf(", si_call_addr=%#lx, si_syscall=__NR_%s, si_arch=",
200537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				(unsigned long) sip->si_call_addr,
201d2eaf67486748263dfe84e735767f3651066a754Mike Frysinger				syscall_name(sip->si_syscall));
202d2eaf67486748263dfe84e735767f3651066a754Mike Frysinger			printxval(audit_arch, sip->si_arch, "AUDIT_ARCH_???");
203537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
204537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#endif
205537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		default:
206537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			if (sip->si_pid || sip->si_uid)
207537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				printsigsource(sip);
208537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			if (sip->si_ptr)
209537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				printsigval(sip, verbose);
210537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		}
211537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	}
212537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin}
213537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
214a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova#ifdef IN_MPERS
215a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirovastatic
216a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova#endif
217537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinvoid
218537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinprintsiginfo(const siginfo_t *sip, bool verbose)
219537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin{
220537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	if (sip->si_signo == 0) {
221537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		tprints("{}");
222537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		return;
223537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	}
224537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	tprints("{si_signo=");
225537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	printsignal(sip->si_signo);
226537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
227537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	tprints(", si_code=");
228537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	print_si_code(sip->si_signo, sip->si_code);
229537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
230537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#ifdef SI_NOINFO
231537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	if (sip->si_code != SI_NOINFO)
232537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#endif
233537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		print_si_info(sip, verbose);
234537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
235537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	tprints("}");
236537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin}
237537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
238a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira KhabirovaMPERS_PRINTER_DECL(void, printsiginfo_at)(struct tcb *tcp, long addr)
239537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin{
240537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	siginfo_t si;
241a528eb5b493d0c722e5a8744bd4be52aa32c9eddDmitry V. Levin
242a528eb5b493d0c722e5a8744bd4be52aa32c9eddDmitry V. Levin	if (!umove_or_printaddr(tcp, addr, &si))
243a528eb5b493d0c722e5a8744bd4be52aa32c9eddDmitry V. Levin		printsiginfo(&si, verbose(tcp));
244537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin}
245