Module Name: src Committed By: christos Date: Sun Apr 10 20:39:43 UTC 2011
Modified Files: src/usr.sbin/crash: Makefile crash.c Log Message: - amd64 support - fix end of file handling From: Vladimir Kirillov proger at wilab dot org dot ua To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/usr.sbin/crash/Makefile cvs rdiff -u -r1.2 -r1.3 src/usr.sbin/crash/crash.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.sbin/crash/Makefile diff -u src/usr.sbin/crash/Makefile:1.6 src/usr.sbin/crash/Makefile:1.7 --- src/usr.sbin/crash/Makefile:1.6 Mon Mar 21 01:09:33 2011 +++ src/usr.sbin/crash/Makefile Sun Apr 10 16:39:42 2011 @@ -1,24 +1,23 @@ -# $NetBSD: Makefile,v 1.6 2011/03/21 05:09:33 joerg Exp $ +# $NetBSD: Makefile,v 1.7 2011/04/10 20:39:42 christos Exp $ -PROG= crash -MAN= crash.8 +PROG= crash +MAN= crash.8 RUMPKERNEL= yes # XXX: Avoid -mcmodel=kernel -LDADD+= -lkvm -ledit -lterminfo -T${.CURDIR}/ldscript.crash -DPADD+= ${LIBKVM} ${LIBEDIT} ${LIBTERMINFO} +LDADD+= -lutil -lkvm -ledit -lterminfo -T${.CURDIR}/ldscript.crash +DPADD+= ${LIBUTIL} ${LIBKVM} ${LIBEDIT} ${LIBTERMINFO} # some ddb kernel components need limited modifications. for now, # punt if not noted as implemented here. -.if (${MACHINE} != "i386") - +.if !empty(${MACHINE:C/(amd64|i386)//}) SRCS+= unsupported.c - .else -S= ${.CURDIR}/../../sys +S= ${.CURDIR}/../../sys CPPFLAGS+= -I${.CURDIR} -I${.OBJDIR} -I${S} -fno-strict-aliasing CPPFLAGS+= -DDDB_VERBOSE_HELP -DDB_MAX_LINE=10000000 -D_KMEMUSER +CPPFLAGS+= -DDB_AOUT_SYMBOLS -UDB_MACHINE_COMMANDS # ddb files from kernel .PATH: $S/ddb @@ -27,24 +26,24 @@ SRCS+= db_expr.c db_lex.c db_output.c db_print.c SRCS+= db_sym.c db_variables.c db_write_cmd.c -# db_trace.c, db_disasm.c -.PATH: ${S}/arch/${MACHINE_ARCH}/${MACHINE_ARCH} -.for i in ${i} db_disasm db_trace -. if (exists(${S}/arch/${MACHINE_ARCH}/${MACHINE_ARCH}/${i}.c)) -SRCS+= ${i}.c +.PATH: ${S}/arch/${MACHINE}/${MACHINE} +SRCS+= db_machdep.c db_disasm.c + +. if empty(${MACHINE:C/(amd64|i386)//}) +.PATH: ${S}/arch/x86/x86 +SRCS+= db_trace.c . endif -.endfor # crash main source SRCS+= crash.c # arch.c .PATH: ${.CURDIR}/arch -.if (exists(${.CURDIR}/arch/${MACHINE_ARCH}.c)) +. if (exists(${.CURDIR}/arch/${MACHINE_ARCH}.c)) SRCS+= ${MACHINE_ARCH}.c -.else +. else SRCS+= generic.c -.endif +. endif # vers.c SRCS+= vers.c Index: src/usr.sbin/crash/crash.c diff -u src/usr.sbin/crash/crash.c:1.2 src/usr.sbin/crash/crash.c:1.3 --- src/usr.sbin/crash/crash.c:1.2 Thu Apr 16 02:52:08 2009 +++ src/usr.sbin/crash/crash.c Sun Apr 10 16:39:42 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: crash.c,v 1.2 2009/04/16 06:52:08 lukem Exp $ */ +/* $NetBSD: crash.c,v 1.3 2011/04/10 20:39:42 christos Exp $ */ /*- * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: crash.c,v 1.2 2009/04/16 06:52:08 lukem Exp $"); +__RCSID("$NetBSD: crash.c,v 1.3 2011/04/10 20:39:42 christos Exp $"); #endif /* not lint */ #include <ddb/ddb.h> @@ -52,18 +52,20 @@ #include <kvm.h> #include <err.h> #include <ctype.h> +#include <util.h> #include "extern.h" #define MAXSTAB (16 * 1024 * 1024) -static kvm_t *kd; db_regs_t ddb_regs; -History *hist; -HistEvent he; -EditLine *elptr; -char imgrelease[16]; -FILE *ofp; + +static kvm_t *kd; +static History *hist; +static HistEvent he; +static EditLine *elptr; +static char imgrelease[16]; +static FILE *ofp; static struct nlist nl[] = { #define X_OSRELEASE 0 @@ -73,6 +75,18 @@ { .n_name = NULL }, }; +static void +cleanup(void) +{ + if (ofp != stdout) { + (void)fflush(ofp); + (void)pclose(ofp); + ofp = stdout; + } + el_end(elptr); + history_end(hist); +} + void db_vprintf(const char *fmt, va_list ap) { @@ -121,14 +135,14 @@ db_alloc(size_t sz) { - return malloc(sz); + return emalloc(sz); } void * db_zalloc(size_t sz) { - return calloc(1, sz); + return ecalloc(1, sz); } void @@ -231,9 +245,8 @@ /* Read next command. */ el = el_gets(elptr, &cnt); - if (el == NULL) { - *lstart = '\0'; - return 0; + if (el == NULL) { /* EOF */ + exit(EXIT_SUCCESS); } /* Save to history, and copy to caller's buffer. */ @@ -255,7 +268,7 @@ /* Open a pipe to specified command, redirect output. */ assert(ofp == stdout); - for (*pcmd++ = '\0'; isspace((int)*pcmd); pcmd++) { + for (*pcmd++ = '\0'; isspace((unsigned char)*pcmd); pcmd++) { /* nothing */ } errno = 0; @@ -323,6 +336,8 @@ memf = _PATH_MEM; ofp = stdout; + setprogname(argv[0]); + /* * Parse options. */ @@ -354,31 +369,30 @@ return EXIT_FAILURE; } fd = open(nlistf, O_RDONLY); - if (fd < 0) { - err(EXIT_FAILURE, "open(%s)", nlistf); + if (fd == -1) { + err(EXIT_FAILURE, "open `%s'", nlistf); } - if (fstat(fd, &sb) < 0) { - err(EXIT_FAILURE, "stat(%s)", nlistf); + if (fstat(fd, &sb) == -1) { + err(EXIT_FAILURE, "stat `%s'", nlistf); } if ((sb.st_mode & S_IFMT) != S_IFREG) { /* XXX ksyms */ sz = MAXSTAB; elf = malloc(sz); if (elf == NULL) { - err(EXIT_FAILURE, "malloc(%zd)", sz); + err(EXIT_FAILURE, "malloc(%zu)", sz); } sz = read(fd, elf, sz); - if ((ssize_t)sz < 0) { - err(EXIT_FAILURE, "read(%s)", nlistf); + if ((ssize_t)sz == -1) { + err(EXIT_FAILURE, "read `%s'", nlistf); } if (sz == MAXSTAB) { - errx(EXIT_FAILURE, "symbol table > %d bytes", - MAXSTAB); + errx(EXIT_FAILURE, "symbol table > %d bytes", MAXSTAB); } } else { sz = sb.st_size; elf = mmap(NULL, sz, PROT_READ, MAP_FILE, fd, 0); if (elf == MAP_FAILED) { - err(EXIT_FAILURE, "mmap(%s)", nlistf); + err(EXIT_FAILURE, "mmap `%s'", nlistf); } } @@ -440,6 +454,8 @@ el_set(elptr, EL_PROMPT, prompt); el_source(elptr, NULL); + atexit(cleanup); + /* * Initialize ddb. */ @@ -455,15 +471,7 @@ db_command_loop(); /* - * Clean up and exit. + * Finish. */ - if (ofp != stdout) { - (void)fflush(ofp); - (void)pclose(ofp); - ofp = stdout; - } - el_end(elptr); - history_end(hist); - exit(EXIT_SUCCESS); - /* NOTREACHED */ + return EXIT_SUCCESS; }