=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/pmdb/Attic/pmdb.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- src/usr.bin/pmdb/Attic/pmdb.c 2003/03/28 23:33:27 1.13 +++ src/usr.bin/pmdb/Attic/pmdb.c 2003/03/29 00:03:00 1.14 @@ -1,4 +1,4 @@ -/* $OpenBSD: pmdb.c,v 1.13 2003/03/28 23:33:27 mickey Exp $ */ +/* $OpenBSD: pmdb.c,v 1.14 2003/03/29 00:03:00 mickey Exp $ */ /* * Copyright (c) 2002 Artur Grabowski * All rights reserved. @@ -45,12 +45,14 @@ static int cmd_show_registers(int, char **, void *); static int cmd_show_backtrace(int, char **, void *); +static int cmd_examine(int, char **, void *); static int cmd_quit(int, char **, void *); struct clit cmds[] = { /* debugging info commands. */ { "regs", "show registers", 0, 0, cmd_show_registers, (void *)-1 }, { "trace", "show backtrace", 0, 0, cmd_show_backtrace, (void *)-1 }, + { "x", "examine memory", 1, 16, cmd_examine, (void *)-1 }, /* Process handling commands. */ { "run", "run process", 0, 0, cmd_process_run, (void *)-1 }, @@ -330,6 +332,36 @@ ps->ps_state = TERMINATED; return (1); +} + +static int +cmd_examine(int argc, char **argv, void *arg) +{ + struct pstate *ps = arg; + char buf[256]; + reg addr, val; + int i; + + for (i = 1; argv[i]; i++) { + + addr = strtoul(argv[i], NULL, 0); + if (!addr) { /* assume it's a symbol */ + if (sym_lookup(ps, argv[i], &addr)) { + warn( "Can't find: %s", argv[i]); + return (0); + } + } + + if (process_read(ps, addr, &val, sizeof(val))) { + warn("Can't read process contents at 0x%lx", addr); + return (0); + } + + printf("%s:\t%s\n", argv[i], + sym_print(ps, val, buf, sizeof(buf))); + } + + return (0); } /*