summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormillert <millert@openbsd.org>1998-09-05 16:33:25 +0000
committermillert <millert@openbsd.org>1998-09-05 16:33:25 +0000
commit625e5f235d3a031ecd55c729b5c84508b978fb9d (patch)
tree25dc3bfbe32eda6ad714046a57fae0ce59c6028e
parentAdd support for nlisting against a gzipped kernel, #ifdef'd out since (diff)
downloadwireguard-openbsd-625e5f235d3a031ecd55c729b5c84508b978fb9d.tar.xz
wireguard-openbsd-625e5f235d3a031ecd55c729b5c84508b978fb9d.zip
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
-rw-r--r--sbin/savecore/Makefile8
-rw-r--r--sbin/savecore/savecore.c15
-rw-r--r--sbin/savecore/savecore_old.c18
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++)