Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/kdump Print siginfo_t information when available.
details: https://anonhg.NetBSD.org/src/rev/9cfb725006ef
branches: trunk
changeset: 552141:9cfb725006ef
user: christos <christos%NetBSD.org@localhost>
date: Fri Sep 19 22:49:02 2003 +0000
description:
Print siginfo_t information when available.
diffstat:
usr.bin/kdump/Makefile | 7 +-
usr.bin/kdump/Makefile.siginfo-c | 9 +++
usr.bin/kdump/kdump.c | 103 +++++++++++++++++++++++++++++++++-----
usr.bin/kdump/mksiginfos | 69 ++++++++++++++++++++++++++
4 files changed, 171 insertions(+), 17 deletions(-)
diffs (271 lines):
diff -r b4690c4a8161 -r 9cfb725006ef usr.bin/kdump/Makefile
--- a/usr.bin/kdump/Makefile Fri Sep 19 21:35:56 2003 +0000
+++ b/usr.bin/kdump/Makefile Fri Sep 19 22:49:02 2003 +0000
@@ -1,13 +1,13 @@
-# $NetBSD: Makefile,v 1.22 2002/11/15 19:58:05 manu Exp $
+# $NetBSD: Makefile,v 1.23 2003/09/19 22:49:02 christos Exp $
# @(#)Makefile 8.1 (Berkeley) 6/6/93
.include <bsd.own.mk> # for MKDYNAMICROOT & NETBSDSRCDIR
PROG= kdump
CPPFLAGS+=-I${NETBSDSRCDIR}/usr.bin/ktrace -I${NETBSDSRCDIR}/sys
-SRCS= kdump.c ioctl.c subr.c setemul.c
+SRCS= kdump.c ioctl.c subr.c setemul.c siginfo.c
.PATH: ${NETBSDSRCDIR}/usr.bin/ktrace
-CLEANFILES+=ioctl.c
+CLEANFILES+=ioctl.c siginfo.c
WFORMAT=1
#.if (${MKDYNAMICROOT} == "no")
@@ -15,5 +15,6 @@
#.endif
.include "Makefile.ioctl-c"
+.include "Makefile.siginfo-c"
.include <bsd.prog.mk>
diff -r b4690c4a8161 -r 9cfb725006ef usr.bin/kdump/Makefile.siginfo-c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.bin/kdump/Makefile.siginfo-c Fri Sep 19 22:49:02 2003 +0000
@@ -0,0 +1,9 @@
+# $NetBSD: Makefile.siginfo-c,v 1.1 2003/09/19 22:49:02 christos Exp $
+
+# NOTE: <bsd.own.mk> needs to be previously .included for NETBSDSRCDIR
+
+siginfo.c: mksiginfos ${DESTDIR}/siginfo.h
+ DESTDIR=${DESTDIR} \
+ ${HOST_SH} ${NETBSDSRCDIR}/usr.bin/kdump/mksiginfos > siginfo.c
+
+${DESTDIR}/siginfo.h: .PRECIOUS
diff -r b4690c4a8161 -r 9cfb725006ef usr.bin/kdump/kdump.c
--- a/usr.bin/kdump/kdump.c Fri Sep 19 21:35:56 2003 +0000
+++ b/usr.bin/kdump/kdump.c Fri Sep 19 22:49:02 2003 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: kdump.c,v 1.59 2003/08/07 11:14:13 agc Exp $ */
+/* $NetBSD: kdump.c,v 1.60 2003/09/19 22:49:02 christos Exp $ */
/*-
* Copyright (c) 1988, 1993
@@ -39,7 +39,7 @@
#if 0
static char sccsid[] = "@(#)kdump.c 8.4 (Berkeley) 4/28/95";
#else
-__RCSID("$NetBSD: kdump.c,v 1.59 2003/08/07 11:14:13 agc Exp $");
+__RCSID("$NetBSD: kdump.c,v 1.60 2003/09/19 22:49:02 christos Exp $");
#endif
#endif /* not lint */
@@ -103,7 +103,7 @@
void ktrnamei __P((char *, int));
void ktremul __P((char *, int, int));
void ktrgenio __P((struct ktr_genio *, int));
-void ktrpsig __P((struct ktr_psig *));
+void ktrpsig __P((void *, int));
void ktrcsw __P((struct ktr_csw *));
void ktruser __P((struct ktr_user *, int));
void ktrmmsg __P((struct ktr_mmsg *, int));
@@ -235,7 +235,7 @@
ktrgenio(m, ktrlen);
break;
case KTR_PSIG:
- ktrpsig(m);
+ ktrpsig(m, ktrlen);
break;
case KTR_CSW:
ktrcsw(m);
@@ -303,7 +303,7 @@
type = "PSIG";
break;
case KTR_CSW:
- type = "CSW";
+ type = "CSW ";
break;
case KTR_EMUL:
type = "EMUL";
@@ -676,20 +676,26 @@
}
void
-ktrpsig(psig)
- struct ktr_psig *psig;
+ktrpsig(v, len)
+ void *v;
+ int len;
{
int signo, first;
+ struct {
+ struct ktr_psig ps;
+ siginfo_t si;
+ } *psig = v;
+ siginfo_t *si = &psig->si;
+ const char *code;
- (void)printf("SIG%s ", signame(psig->signo, 0));
- if (psig->action == SIG_DFL)
- (void)printf("SIG_DFL\n");
+ (void)printf("SIG%s ", signame(psig->ps.signo, 0));
+ if (psig->ps.action == SIG_DFL)
+ (void)printf("SIG_DFL");
else {
- (void)printf("caught handler=0x%lx mask=(",
- (u_long)psig->action);
+ (void)printf("caught handler=%p mask=(", psig->ps.action);
first = 1;
for (signo = 1; signo < NSIG; signo++) {
- if (sigismember(&psig->mask, signo)) {
+ if (sigismember(&psig->ps.mask, signo)) {
if (first)
first = 0;
else
@@ -697,7 +703,76 @@
(void)printf("%d", signo);
}
}
- (void)printf(") code=0x%x\n", psig->code);
+ (void)printf(")");
+ }
+ switch (len) {
+ case sizeof(struct ktr_psig):
+ printf("\n");
+ return;
+ case sizeof(*psig):
+ if (si->si_code == 0) {
+ printf(": code=SI_USER sent by pid=%d, uid=%d\n",
+ si->si_pid, si->si_uid);
+ return;
+ }
+
+ if (si->si_code < 0) {
+ switch (si->si_code) {
+ case SI_TIMER:
+ printf(": code=SI_TIMER sigval %p\n",
+ si->si_sigval.sival_ptr);
+ return;
+ case SI_QUEUE:
+ code = "SI_QUEUE";
+ break;
+ case SI_ASYNCIO:
+ code = "SI_ASYNCIO";
+ break;
+ case SI_MESGQ:
+ code = "SI_MESGQ";
+ break;
+ default:
+ code = NULL;
+ break;
+ }
+ if (code)
+ printf(": code=%s unimplemented\n", code);
+ else
+ printf(": code=%d unimplemented\n",
+ si->si_code);
+ return;
+ }
+
+ code = siginfocodename(si->si_signo, si->si_code);
+ switch (si->si_signo) {
+ case SIGCHLD:
+ printf(": code=%s child pid=%d, uid=%d, "
+ " status=%u, utime=%lu, stime=%lu\n",
+ code, si->si_pid,
+ si->si_uid, si->si_status, si->si_utime,
+ si->si_stime);
+ return;
+ case SIGILL:
+ case SIGFPE:
+ case SIGSEGV:
+ case SIGBUS:
+ case SIGTRAP:
+ printf(": code=%s, addr=%p, trap=%d\n",
+ code, si->si_addr, si->si_trap);
+ return;
+ case SIGIO:
+ printf(": code=%s, fd=%d, band=%lx\n",
+ code, si->si_fd, si->si_band);
+ return;
+ default:
+ printf(": code=%s, errno=%d\n",
+ code, si->si_errno);
+ return;
+ }
+ /*NOTREACHED*/
+ default:
+ warnx("Unhandled size %d for ktrpsig\n", len);
+ break;
}
}
diff -r b4690c4a8161 -r 9cfb725006ef usr.bin/kdump/mksiginfos
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.bin/kdump/mksiginfos Fri Sep 19 22:49:02 2003 +0000
@@ -0,0 +1,69 @@
+#!/bin/sh -
+# $NetBSD: mksiginfos,v 1.1 2003/09/19 22:49:02 christos Exp $
+#
+# Copyright (c) 2003 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# This code is derived from software contributed to The NetBSD Foundation
+# by Christos Zoulas.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. All advertising materials mentioning features or use of this software
+# must display the following acknowledgement:
+# This product includes software developed by the NetBSD
+# Foundation, Inc. and its contributors.
+# 4. Neither the name of The NetBSD Foundation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+awk '
+BEGIN {
+ print "/* Automatically generated file; do not edit */";
+ print "#include <stdio.h>";
+ print "#include <signal.h>";
+ print "#ifndef SIGCLD";
+ print "#define SIGCLD SIGCHLD";
+ print "#endif /* SIGCLD */";
+ print "#ifndef SIGPOLL";
+ print "#define SIGPOLL SIGIO";
+ print "#endif /* SIGPOLL */";
+ print "const char *siginfocodename(int signo, int code);\n";
+ print "static char number[64];\n";
+ print "const char *siginfocodename(int signo, int code) {\n";
+}
+/^#[ ]*define[ ]*(ILL|FPE|SEGV|BUS|TRAP|CLD)_[A-Z]*[ ]*/ {
+
+ # find where the name starts
+ for (i = 1; i <= NF; i++)
+ if ($i ~ /define/)
+ break;
+ ++i;
+ split($i, sig, "_");
+ printf("\tif (signo == SIG%s && code == %s)\n\t\treturn \"%s\";\n",
+ sig[1], $i, $i);
+}
+END {
+ print "\n\tsnprintf(number, sizeof(number), \"%d\", code);\n";
+ print "\n\treturn NULL;"
+ print "}";
+}
+' $DESTDIR/usr/include/sys/siginfo.h
Home |
Main Index |
Thread Index |
Old Index