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
77f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levinprintsigval(const siginfo_t *sip)
78537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin{
79484326dbd8f8e02983e37498b4b5fa990d16b536Dmitry V. Levin	tprintf(", si_value={int=%d, ptr=", sip->si_int);
80d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	printaddr(ptr_to_kulong(sip->si_ptr));
81484326dbd8f8e02983e37498b4b5fa990d16b536Dmitry V. Levin	tprints("}");
82537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin}
83537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
84537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinstatic void
859134aab4073a8be6bb529aeb05e8c5f4be69540fDmitry V. Levinprint_si_code(int si_signo, unsigned int si_code)
86537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin{
87537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	const char *code = xlookup(siginfo_codes, si_code);
88537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
89537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	if (!code) {
90537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		switch (si_signo) {
91537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGTRAP:
92537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigtrap_codes, si_code);
93537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
94537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGCHLD:
95537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigchld_codes, si_code);
96537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
97537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGPOLL:
98537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigpoll_codes, si_code);
99537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
100537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGPROF:
101537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigprof_codes, si_code);
102537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
103537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGILL:
104537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigill_codes, si_code);
105537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
106537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#ifdef SIGEMT
107537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGEMT:
108537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigemt_codes, si_code);
109537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
110537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#endif
111537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGFPE:
112537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigfpe_codes, si_code);
113537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
114537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGSEGV:
115537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigsegv_codes, si_code);
116537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
117537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGBUS:
118537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigbus_codes, si_code);
119537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
120537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGSYS:
121537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			code = xlookup(sigsys_codes, si_code);
122537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
123537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		}
124537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	}
125537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
126537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	if (code)
127537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		tprints(code);
128537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	else
129537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		tprintf("%#x", si_code);
130537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin}
131537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
132537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinstatic void
133f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levinprint_si_info(const siginfo_t *sip)
134537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin{
135537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	if (sip->si_errno) {
136537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		tprints(", si_errno=");
137537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		if ((unsigned) sip->si_errno < nerrnos
138537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		    && errnoent[sip->si_errno])
139537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			tprints(errnoent[sip->si_errno]);
140537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		else
141537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			tprintf("%d", sip->si_errno);
142537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	}
143537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
144537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	if (SI_FROMUSER(sip)) {
145537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		switch (sip->si_code) {
146537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SI_USER:
147537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			printsigsource(sip);
148537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
149537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SI_TKILL:
150537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			printsigsource(sip);
151537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
152537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#if defined HAVE_SIGINFO_T_SI_TIMERID && defined HAVE_SIGINFO_T_SI_OVERRUN
153537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SI_TIMER:
154537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			tprintf(", si_timerid=%#x, si_overrun=%d",
155537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				sip->si_timerid, sip->si_overrun);
156f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levin			printsigval(sip);
157537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
158537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#endif
159537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		default:
160537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			printsigsource(sip);
161537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			if (sip->si_ptr)
162f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levin				printsigval(sip);
163537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
164537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		}
165537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	} else {
166537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		switch (sip->si_signo) {
167537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGCHLD:
168537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			printsigsource(sip);
169537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			tprints(", si_status=");
170537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			if (sip->si_code == CLD_EXITED)
171537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				tprintf("%d", sip->si_status);
172537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			else
173537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				printsignal(sip->si_status);
174f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levin			tprintf(", si_utime=%llu, si_stime=%llu",
175031fc80059746ba0d125ed0f1965217a22e41da3Dmitry V. Levin				zero_extend_signed_to_ull(sip->si_utime),
176031fc80059746ba0d125ed0f1965217a22e41da3Dmitry V. Levin				zero_extend_signed_to_ull(sip->si_stime));
177537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
178537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGILL: case SIGFPE:
179537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGSEGV: case SIGBUS:
180484326dbd8f8e02983e37498b4b5fa990d16b536Dmitry V. Levin			tprints(", si_addr=");
181d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes			printaddr(ptr_to_kulong(sip->si_addr));
182537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
183537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		case SIGPOLL:
184537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			switch (sip->si_code) {
185537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			case POLL_IN: case POLL_OUT: case POLL_MSG:
186537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				tprintf(", si_band=%ld",
187537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin					(long) sip->si_band);
188537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				break;
189537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			}
190537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
191537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#ifdef HAVE_SIGINFO_T_SI_SYSCALL
192d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes		case SIGSYS: {
193d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes			const char *scname =
194d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes				syscall_name((unsigned) sip->si_syscall);
195d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes
196484326dbd8f8e02983e37498b4b5fa990d16b536Dmitry V. Levin			tprints(", si_call_addr=");
197d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes			printaddr(ptr_to_kulong(sip->si_call_addr));
198d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes			tprints(", si_syscall=");
199d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes			if (scname)
200d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes				tprintf("__NR_%s", scname);
201d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes			else
202d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes				tprintf("%u", (unsigned) sip->si_syscall);
203d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes			tprints(", si_arch=");
204d2eaf67486748263dfe84e735767f3651066a754Mike Frysinger			printxval(audit_arch, sip->si_arch, "AUDIT_ARCH_???");
205537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			break;
206d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes		}
207537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#endif
208537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		default:
209537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			if (sip->si_pid || sip->si_uid)
210537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin				printsigsource(sip);
211537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin			if (sip->si_ptr)
212f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levin				printsigval(sip);
213537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		}
214537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	}
215537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin}
216537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
217a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova#ifdef IN_MPERS
218a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirovastatic
219a0b62498fd9a1fb05018e102b08c72eb510fdc4cElvira Khabirova#endif
220537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levinvoid
221f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levinprintsiginfo(const siginfo_t *sip)
222537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin{
223537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	if (sip->si_signo == 0) {
224537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		tprints("{}");
225537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin		return;
226537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	}
227537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	tprints("{si_signo=");
228537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	printsignal(sip->si_signo);
229537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
230537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	tprints(", si_code=");
231537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	print_si_code(sip->si_signo, sip->si_code);
232537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
233537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#ifdef SI_NOINFO
234537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	if (sip->si_code != SI_NOINFO)
235537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin#endif
236f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levin		print_si_info(sip);
237537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
238537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	tprints("}");
239537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin}
240537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin
241a8fce09e344a644aa0279f0efe54e4faeb64ca29Dmitry V. LevinMPERS_PRINTER_DECL(void, printsiginfo_at,
242d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes		   struct tcb *const tcp, const kernel_ulong_t addr)
243537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin{
244537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin	siginfo_t si;
245a528eb5b493d0c722e5a8744bd4be52aa32c9eddDmitry V. Levin
246a528eb5b493d0c722e5a8744bd4be52aa32c9eddDmitry V. Levin	if (!umove_or_printaddr(tcp, addr, &si))
247f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levin		printsiginfo(&si);
248537c964fe9ad96b5b4c779af7a53a2b0850ade4eDmitry V. Levin}
24976b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin
25076b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levinstatic bool
25176b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levinprint_siginfo_t(struct tcb *tcp, void *elem_buf, size_t elem_size, void *data)
25276b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin{
253f9199ab081b2eb22f2fd73c372d65eb2451ede37Dmitry V. Levin	printsiginfo((const siginfo_t *) elem_buf);
25476b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin	return true;
25576b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin}
25676b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin
257d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott HughesMPERS_PRINTER_DECL(void, print_siginfo_array, struct tcb *const tcp,
258d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes		   const kernel_ulong_t addr, const kernel_ulong_t len)
25976b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin{
26076b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin	siginfo_t si;
26176b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin
26276b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin	print_array(tcp, addr, len, &si, sizeof(si),
26376b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin		    umoven_or_printaddr, print_siginfo_t, 0);
26476b4c33c7f5e353c43ba5e4c7dd8222b13e4c6d1Dmitry V. Levin}
265