Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/kdump Provide hooks for signal number to name transl...
details: https://anonhg.NetBSD.org/src/rev/a942db084e2b
branches: trunk
changeset: 524857:a942db084e2b
user: christos <christos%NetBSD.org@localhost>
date: Sun Mar 31 22:44:03 2002 +0000
description:
Provide hooks for signal number to name translation, and use them for kill
and PSIG.
XXX[1]: This shows that signal emulation ktrace is slightly busted: posted
signals should really be translated to the emulated ones instead of
producing ktrace records with the signal numbers of the native
emulation.
XXX[2]: There are other places where signal names can be displayed, but this
is not done yet.
diffstat:
usr.bin/kdump/kdump.c | 52 +++++++++++++++++++----
usr.bin/kdump/setemul.c | 108 ++++++++++++++++++++++++++++++++---------------
usr.bin/kdump/setemul.h | 8 ++-
3 files changed, 122 insertions(+), 46 deletions(-)
diffs (267 lines):
diff -r 2d62e6636d0b -r a942db084e2b usr.bin/kdump/kdump.c
--- a/usr.bin/kdump/kdump.c Sun Mar 31 22:40:16 2002 +0000
+++ b/usr.bin/kdump/kdump.c Sun Mar 31 22:44:03 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: kdump.c,v 1.36 2002/02/12 22:22:37 christos Exp $ */
+/* $NetBSD: kdump.c,v 1.37 2002/03/31 22:44:03 christos Exp $ */
/*-
* Copyright (c) 1988, 1993
@@ -43,7 +43,7 @@
#if 0
static char sccsid[] = "@(#)kdump.c 8.4 (Berkeley) 4/28/95";
#else
-__RCSID("$NetBSD: kdump.c,v 1.36 2002/02/12 22:22:37 christos Exp $");
+__RCSID("$NetBSD: kdump.c,v 1.37 2002/03/31 22:44:03 christos Exp $");
#endif
#endif /* not lint */
@@ -109,6 +109,7 @@
void usage __P((void));
void eprint __P((int));
char *ioctlname __P((long));
+static const char *signame __P((long, int));
int
main(argc, argv)
@@ -318,8 +319,10 @@
if (argsize) {
char c = '(';
if (!plain) {
- if (ktr->ktr_code == SYS_ioctl) {
- char *cp;
+ char *cp;
+
+ switch (ktr->ktr_code) {
+ case SYS_ioctl:
if (decimal)
(void)printf("(%ld", (long)*ap);
else
@@ -333,11 +336,15 @@
c = ',';
ap++;
argsize -= sizeof(register_t);
- } else if (ktr->ktr_code == SYS_ptrace) {
+ break;
+
+ case SYS_ptrace:
if (strcmp(current->name, "linux") == 0) {
- if (*ap >= 0 && *ap <=
- sizeof(linux_ptrace_ops) / sizeof(linux_ptrace_ops[0]))
- (void)printf("(%s", linux_ptrace_ops[*ap]);
+ if (*ap >= 0 && *ap <=
+ sizeof(linux_ptrace_ops) /
+ sizeof(linux_ptrace_ops[0]))
+ (void)printf("(%s",
+ linux_ptrace_ops[*ap]);
else
(void)printf("(%ld", (long)*ap);
} else {
@@ -350,6 +357,22 @@
c = ',';
ap++;
argsize -= sizeof(register_t);
+ break;
+
+ case SYS_kill:
+ if (decimal)
+ (void)printf("(%ld, SIG%s",
+ (long)ap[0], signame(ap[1], 1));
+ else
+ (void)printf("(%#lx, SIG%s",
+ (long)ap[0], signame(ap[1], 1));
+ ap += 2;
+ argsize -= 2 * sizeof(register_t);
+ break;
+
+ default:
+ /* No special handling */
+ break;
}
}
while (argsize) {
@@ -546,7 +569,7 @@
{
int signo, first;
- (void)printf("SIG%s ", sys_signame[psig->signo]);
+ (void)printf("SIG%s ", signame(psig->signo, 0));
if (psig->action == SIG_DFL)
(void)printf("SIG_DFL\n");
else {
@@ -590,6 +613,17 @@
printf("\"\n");
}
+static const char *
+signame(long sig, int xlat)
+{
+ static char buf[64];
+ if (sig <= 0 || sig >= NSIG) {
+ (void)snprintf(buf, sizeof(buf), "*unknown %ld*", sig);
+ return buf;
+ } else
+ return sys_signame[xlat ? current->signalmap[sig] : sig];
+}
+
void
usage()
{
diff -r 2d62e6636d0b -r a942db084e2b usr.bin/kdump/setemul.c
--- a/usr.bin/kdump/setemul.c Sun Mar 31 22:40:16 2002 +0000
+++ b/usr.bin/kdump/setemul.c Sun Mar 31 22:44:03 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: setemul.c,v 1.11 2002/01/07 23:45:10 manu Exp $ */
+/* $NetBSD: setemul.c,v 1.12 2002/03/31 22:44:03 christos Exp $ */
/*-
* Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -73,7 +73,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: setemul.c,v 1.11 2002/01/07 23:45:10 manu Exp $");
+__RCSID("$NetBSD: setemul.c,v 1.12 2002/03/31 22:44:03 christos Exp $");
#endif /* not lint */
#include <sys/param.h>
@@ -124,44 +124,84 @@
#include "../../sys/compat/svr4/svr4_errno.c"
#include "../../sys/compat/ibcs2/ibcs2_errno.c"
#include "../../sys/compat/irix/irix_errno.c"
+#include "../../sys/compat/osf1/osf1_errno.c"
#include "../../sys/compat/linux/common/linux_errno.c"
#undef KTRACE
+#define SIGRTMIN 33 /* XXX */
+#include "../../sys/compat/hpux/hpux_signo.c"
+#include "../../sys/compat/svr4/svr4_signo.c"
+#include "../../sys/compat/ibcs2/ibcs2_signo.c"
+/* irix uses svr4 */
+#include "../../sys/compat/osf1/osf1_signo.c"
+#include "../../sys/compat/linux/common/linux_signo.c"
+
#define NELEM(a) (sizeof(a) / sizeof(a[0]))
static const struct emulation emulations[] = {
- { "netbsd", syscallnames, SYS_MAXSYSCALL,
- NULL, 0 },
- { "netbsd32", netbsd32_syscallnames, SYS_MAXSYSCALL,
- NULL, 0 },
- { "freebsd", freebsd_syscallnames, FREEBSD_SYS_MAXSYSCALL,
- NULL, 0 },
- { "hpux", hpux_syscallnames, HPUX_SYS_MAXSYSCALL,
- native_to_hpux_errno, NELEM(native_to_hpux_errno) },
- { "ibcs2", ibcs2_syscallnames, IBCS2_SYS_MAXSYSCALL,
- native_to_ibcs2_errno, NELEM(native_to_ibcs2_errno) },
- { "irix o32", irix_syscallnames, IRIX_SYS_MAXSYSCALL,
- native_to_irix_errno, NELEM(native_to_irix_errno) },
- { "irix n32", irix_syscallnames, IRIX_SYS_MAXSYSCALL,
- native_to_irix_errno, NELEM(native_to_irix_errno) },
- { "linux", linux_syscallnames, LINUX_SYS_MAXSYSCALL,
- native_to_linux_errno, NELEM(native_to_linux_errno) },
- { "osf1", osf1_syscallnames, OSF1_SYS_MAXSYSCALL,
- NULL, 0 },
- { "sunos32",sunos32_syscallnames, SUNOS32_SYS_MAXSYSCALL,
- NULL, 0 },
- { "sunos", sunos_syscallnames, SUNOS_SYS_MAXSYSCALL,
- NULL, 0 },
- { "svr4", svr4_syscallnames, SVR4_SYS_MAXSYSCALL,
- native_to_svr4_errno, NELEM(native_to_svr4_errno) },
- { "svr4_32", svr4_syscallnames, SVR4_SYS_MAXSYSCALL,
- native_to_svr4_errno, NELEM(native_to_svr4_errno) },
- { "ultrix", ultrix_syscallnames, ULTRIX_SYS_MAXSYSCALL,
- NULL, 0 },
- { "pecoff", syscallnames, SYS_MAXSYSCALL,
- NULL, 0 },
- { NULL, NULL, 0,
- NULL, 0 }
+ { "netbsd", syscallnames, SYS_MAXSYSCALL,
+ NULL, 0,
+ NULL, 0 },
+
+ { "netbsd32", netbsd32_syscallnames, SYS_MAXSYSCALL,
+ NULL, 0,
+ NULL, 0 },
+
+ { "freebsd", freebsd_syscallnames, FREEBSD_SYS_MAXSYSCALL,
+ NULL, 0,
+ NULL, 0 },
+
+ { "hpux", hpux_syscallnames, HPUX_SYS_MAXSYSCALL,
+ native_to_hpux_errno, NELEM(native_to_hpux_errno),
+ hpux_to_native_signo, NSIG },
+
+ { "ibcs2", ibcs2_syscallnames, IBCS2_SYS_MAXSYSCALL,
+ native_to_ibcs2_errno, NELEM(native_to_ibcs2_errno),
+ ibcs2_to_native_signo, NSIG },
+
+ { "irix o32", irix_syscallnames, IRIX_SYS_MAXSYSCALL,
+ native_to_irix_errno, NELEM(native_to_irix_errno),
+ svr4_to_native_signo, NSIG },
+
+ { "irix n32", irix_syscallnames, IRIX_SYS_MAXSYSCALL,
+ native_to_irix_errno, NELEM(native_to_irix_errno),
+ svr4_to_native_signo, NSIG },
+
+ { "linux", linux_syscallnames, LINUX_SYS_MAXSYSCALL,
+ native_to_linux_errno, NELEM(native_to_linux_errno),
+ linux_to_native_signo, NSIG },
+
+ { "osf1", osf1_syscallnames, OSF1_SYS_MAXSYSCALL,
+ native_to_osf1_errno, NELEM(native_to_osf1_errno),
+ osf1_to_native_signo, NSIG },
+
+ { "sunos32", sunos32_syscallnames, SUNOS32_SYS_MAXSYSCALL,
+ NULL, 0,
+ NULL, 0 },
+
+ { "sunos", sunos_syscallnames, SUNOS_SYS_MAXSYSCALL,
+ NULL, 0,
+ NULL, 0 },
+
+ { "svr4", svr4_syscallnames, SVR4_SYS_MAXSYSCALL,
+ native_to_svr4_errno, NELEM(native_to_svr4_errno),
+ svr4_to_native_signo, NSIG },
+
+ { "svr4_32", svr4_syscallnames, SVR4_SYS_MAXSYSCALL,
+ native_to_svr4_errno, NELEM(native_to_svr4_errno),
+ svr4_to_native_signo, NSIG },
+
+ { "ultrix", ultrix_syscallnames, ULTRIX_SYS_MAXSYSCALL,
+ NULL, 0,
+ NULL, 0 },
+
+ { "pecoff", syscallnames, SYS_MAXSYSCALL,
+ NULL, 0,
+ NULL, 0 },
+
+ { NULL, NULL, 0,
+ NULL, 0,
+ NULL, 0 }
};
struct emulation_ctx {
diff -r 2d62e6636d0b -r a942db084e2b usr.bin/kdump/setemul.h
--- a/usr.bin/kdump/setemul.h Sun Mar 31 22:40:16 2002 +0000
+++ b/usr.bin/kdump/setemul.h Sun Mar 31 22:44:03 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: setemul.h,v 1.5 2001/02/16 23:28:44 manu Exp $ */
+/* $NetBSD: setemul.h,v 1.6 2002/03/31 22:44:03 christos Exp $ */
/*-
* Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -76,9 +76,11 @@
struct emulation {
const char *name; /* Emulation name */
const char * const *sysnames; /* Array of system call names */
- int nsysnames; /* Number of */
+ int nsysnames; /* Number of */
const int *errnomap; /* Array of error number mapping */
- int nerrnomap; /* number of elements in array */
+ int nerrnomap; /* number of elements in array */
+ const int *signalmap; /* Array of signal number mapping */
+ int nsignalmap; /* number of elements in array */
};
extern const struct emulation *current;
Home |
Main Index |
Thread Index |
Old Index