diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 1998-09-05 16:33:26 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 1998-09-05 16:33:26 +0000 |
commit | b03bfdb01feeb5763528442fb49195835e6b46db (patch) | |
tree | 848e0177a1d697053bbfe9e4a25125ee915a3b51 /sbin/savecore | |
parent | 99e19ba6e6b41eb5e7401c8e0b474312932fa2b6 (diff) |
We can now savecore with a gzipped kernel:
o Use new gzip-aware nlist
o If kernel cannot be found, use kernel.gz if it exists
Diffstat (limited to 'sbin/savecore')
-rw-r--r-- | sbin/savecore/Makefile | 8 | ||||
-rw-r--r-- | sbin/savecore/savecore.c | 15 | ||||
-rw-r--r-- | sbin/savecore/savecore_old.c | 18 |
3 files changed, 36 insertions, 5 deletions
diff --git a/sbin/savecore/Makefile b/sbin/savecore/Makefile index 80af462b0e6..0580e81bdb7 100644 --- a/sbin/savecore/Makefile +++ b/sbin/savecore/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.8 1998/08/30 22:29:56 millert Exp $ +# $OpenBSD: Makefile,v 1.9 1998/09/05 16:33:25 millert Exp $ PROG= savecore @@ -17,8 +17,12 @@ DPADD= ${LIBKVM} .else SRCS= savecore_old.c .endif -SRCS+= zopen.c +SRCS+= zopen.c nlist.c +CFLAGS+=-D_NLIST_DO_GZIP +LDADD+= -lz +DPADD+= ${LIBZ} MAN= savecore.8 .PATH: ${.CURDIR}/../../usr.bin/compress +.PATH: ${.CURDIR}/../../lib/libc/gen .include <bsd.prog.mk> diff --git a/sbin/savecore/savecore.c b/sbin/savecore/savecore.c index b8c464a5bcd..5e324dfef34 100644 --- a/sbin/savecore/savecore.c +++ b/sbin/savecore/savecore.c @@ -1,4 +1,4 @@ -/* $OpenBSD: savecore.c,v 1.13 1998/08/10 20:57:46 mickey Exp $ */ +/* $OpenBSD: savecore.c,v 1.14 1998/09/05 16:33:25 millert Exp $ */ /* $NetBSD: savecore.c,v 1.26 1996/03/18 21:16:05 leo Exp $ */ /*- @@ -214,6 +214,7 @@ kmem_setup() kvm_t *kd_kern; char errbuf[_POSIX2_LINE_MAX]; int i, hdrsz; + struct stat st; /* * Some names we need for the currently running system, others for @@ -265,6 +266,18 @@ kmem_setup() dump_sys = kernel ? kernel : _PATH_UNIX; + /* If no dumpsys, check for dumpsys.gz */ + if (stat(dump_sys, &st) == -1) { + char *gzpath; + + asprintf(&gzpath, "%s.gz", dump_sys); + if (stat(gzpath, &st) == -1) { + syslog(LOG_ERR, "%s: %m", dump_sys); + exit(1); + } + kernel = dump_sys = gzpath; + } + kd_dump = kvm_openfiles(dump_sys, ddname, NULL, O_RDWR, errbuf); if (kd_dump == NULL) { syslog(LOG_ERR, "%s: kvm_openfiles: %s", dump_sys, errbuf); diff --git a/sbin/savecore/savecore_old.c b/sbin/savecore/savecore_old.c index dde55d8ca46..4c9c636216b 100644 --- a/sbin/savecore/savecore_old.c +++ b/sbin/savecore/savecore_old.c @@ -1,4 +1,4 @@ -/* $OpenBSD: savecore_old.c,v 1.9 1998/08/24 05:24:25 millert Exp $ */ +/* $OpenBSD: savecore_old.c,v 1.10 1998/09/05 16:33:25 millert Exp $ */ /* $NetBSD: savecore_old.c,v 1.1.1.1 1996/03/16 10:25:11 leo Exp $ */ /*- @@ -44,7 +44,7 @@ static char copyright[] = #if 0 static char sccsid[] = "@(#)savecore.c 8.3 (Berkeley) 1/2/94"; #else -static char rcsid[] = "$OpenBSD: savecore_old.c,v 1.9 1998/08/24 05:24:25 millert Exp $"; +static char rcsid[] = "$OpenBSD: savecore_old.c,v 1.10 1998/09/05 16:33:25 millert Exp $"; #endif #endif /* not lint */ @@ -209,6 +209,7 @@ kmem_setup() FILE *fp; int kmem, i; char *dump_sys, *current_sys; + struct stat st; /* * Some names we need for the currently running system, others for @@ -234,6 +235,19 @@ kmem_setup() } dump_sys = kernel ? kernel : _PATH_UNIX; + + /* If no dumpsys, check for dumpsys.gz */ + if (stat(dump_sys, &st) == -1) { + char *gzpath; + + asprintf(&gzpath, "%s.gz", dump_sys); + if (stat(gzpath, &st) == -1) { + syslog(LOG_ERR, "%s: %m", dump_sys); + exit(1); + } + kernel = dump_sys = gzpath; + } + if ((nlist(dump_sys, dump_nl)) == -1) syslog(LOG_ERR, "%s: nlist: %s", dump_sys, strerror(errno)); for (i = 0; dumpsyms[i] != -1; i++) |