diff options
| author | simonb <simonb@NetBSD.org> | 2002-02-15 07:33:48 +0000 |
|---|---|---|
| committer | simonb <simonb@NetBSD.org> | 2002-02-15 07:33:48 +0000 |
| commit | 4eaa4d66a825d3a320df04057b60d4290e726694 (patch) | |
| tree | 96f4dad8e24388f1ea53a2747c08be1fb1273654 | |
| parent | 4a188395df8e1fe5f0ef08aa49fa7de4a1b6119b (diff) | |
ANSIfy, KNF.
Make some variables and functions static when not used outside of a module.
Make variables in headers extern.
Delete the unused db_find_watchpoint() function.
| -rw-r--r-- | sys/ddb/TODO | 6 | ||||
| -rw-r--r-- | sys/ddb/db_access.c | 28 | ||||
| -rw-r--r-- | sys/ddb/db_access.h | 22 | ||||
| -rw-r--r-- | sys/ddb/db_aout.c | 350 | ||||
| -rw-r--r-- | sys/ddb/db_break.c | 204 | ||||
| -rw-r--r-- | sys/ddb/db_break.h | 38 | ||||
| -rw-r--r-- | sys/ddb/db_command.c | 811 | ||||
| -rw-r--r-- | sys/ddb/db_command.h | 49 | ||||
| -rw-r--r-- | sys/ddb/db_elf.c | 97 | ||||
| -rw-r--r-- | sys/ddb/db_examine.c | 67 | ||||
| -rw-r--r-- | sys/ddb/db_expr.c | 261 | ||||
| -rw-r--r-- | sys/ddb/db_extern.h | 43 | ||||
| -rw-r--r-- | sys/ddb/db_input.c | 265 | ||||
| -rw-r--r-- | sys/ddb/db_interface.h | 18 | ||||
| -rw-r--r-- | sys/ddb/db_lex.c | 286 | ||||
| -rw-r--r-- | sys/ddb/db_lex.h | 38 | ||||
| -rw-r--r-- | sys/ddb/db_output.c | 161 | ||||
| -rw-r--r-- | sys/ddb/db_output.h | 35 | ||||
| -rw-r--r-- | sys/ddb/db_print.c | 53 | ||||
| -rw-r--r-- | sys/ddb/db_run.c | 261 | ||||
| -rw-r--r-- | sys/ddb/db_run.h | 38 | ||||
| -rw-r--r-- | sys/ddb/db_sym.c | 221 | ||||
| -rw-r--r-- | sys/ddb/db_sym.h | 69 | ||||
| -rw-r--r-- | sys/ddb/db_trap.c | 63 | ||||
| -rw-r--r-- | sys/ddb/db_variables.c | 119 | ||||
| -rw-r--r-- | sys/ddb/db_variables.h | 29 | ||||
| -rw-r--r-- | sys/ddb/db_watch.c | 202 | ||||
| -rw-r--r-- | sys/ddb/db_watch.h | 30 | ||||
| -rw-r--r-- | sys/ddb/db_write_cmd.c | 52 | ||||
| -rw-r--r-- | sys/ddb/db_xxx.c | 43 | ||||
| -rw-r--r-- | sys/ddb/ddbvar.h | 8 |
31 files changed, 1809 insertions, 2158 deletions
diff --git a/sys/ddb/TODO b/sys/ddb/TODO index b89dbc3c6c9..92f884fb860 100644 --- a/sys/ddb/TODO +++ b/sys/ddb/TODO @@ -1,4 +1,4 @@ -$NetBSD: TODO,v 1.9 2002/01/05 01:48:10 jhawk Exp $ +$NetBSD: TODO,v 1.10 2002/02/15 07:33:48 simonb Exp $ In rough order. @@ -31,7 +31,7 @@ done "set" should display the old value as "write" does. 4. Note only some radixes are supported. 5. Allow a mechanism for DDB to not fail under X (on the i386). - Probably just skip DDB in such cases. + Probably just skip DDB in such cases. 6. Enable DDB in GENERIC on all architectures not starved for space. @@ -79,7 +79,7 @@ done Numbers starting with [a-f] should work, but symbols and ] in kadb (but not in adb): [ Like :e in adb(1), but requires only one keys- troke and no RETURN character. - + ] Like :s in adb(1), but requires only one keys- troke and no RETURN character. Does this make people queasy? diff --git a/sys/ddb/db_access.c b/sys/ddb/db_access.c index 41d0d5ffc45..808de0b5c89 100644 --- a/sys/ddb/db_access.c +++ b/sys/ddb/db_access.c @@ -1,27 +1,27 @@ -/* $NetBSD: db_access.c,v 1.16 2001/11/12 22:54:03 lukem Exp $ */ +/* $NetBSD: db_access.c,v 1.17 2002/02/15 07:33:49 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_access.c,v 1.16 2001/11/12 22:54:03 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_access.c,v 1.17 2002/02/15 07:33:49 simonb Exp $"); #include <sys/param.h> #include <sys/proc.h> @@ -53,10 +53,7 @@ const int db_extend[] = { /* table for sign-extending */ }; db_expr_t -db_get_value(addr, size, is_signed) - db_addr_t addr; - size_t size; - boolean_t is_signed; +db_get_value(db_addr_t addr, size_t size, boolean_t is_signed) { char data[sizeof(db_expr_t)]; db_expr_t value; @@ -71,17 +68,14 @@ db_get_value(addr, size, is_signed) for (i = 0; i < size; i++) #endif /* BYTE_ORDER */ value = (value << 8) + (data[i] & 0xFF); - + if (size < 4 && is_signed && (value & db_extend[size]) != 0) value |= db_extend[size]; return (value); } void -db_put_value(addr, size, value) - db_addr_t addr; - size_t size; - db_expr_t value; +db_put_value(db_addr_t addr, size_t size, db_expr_t value) { char data[sizeof(db_expr_t)]; size_t i; diff --git a/sys/ddb/db_access.h b/sys/ddb/db_access.h index caad7b08d22..0df0229ba8e 100644 --- a/sys/ddb/db_access.h +++ b/sys/ddb/db_access.h @@ -1,27 +1,27 @@ -/* $NetBSD: db_access.h,v 1.8 1999/04/12 20:38:20 pk Exp $ */ +/* $NetBSD: db_access.h,v 1.9 2002/02/15 07:33:49 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -32,8 +32,8 @@ /* * Data access functions for debugger. */ -db_expr_t db_get_value __P((db_addr_t, size_t, boolean_t)); -void db_put_value __P((db_addr_t, size_t, db_expr_t)); +db_expr_t db_get_value(db_addr_t, size_t, boolean_t); +void db_put_value(db_addr_t, size_t, db_expr_t); -void db_read_bytes __P((db_addr_t, size_t, char *)); -void db_write_bytes __P((db_addr_t, size_t, char *)); +void db_read_bytes(db_addr_t, size_t, char *); +void db_write_bytes(db_addr_t, size_t, char *); diff --git a/sys/ddb/db_aout.c b/sys/ddb/db_aout.c index f4b2c807a10..60bc732784f 100644 --- a/sys/ddb/db_aout.c +++ b/sys/ddb/db_aout.c @@ -1,39 +1,39 @@ -/* $NetBSD: db_aout.c,v 1.32 2001/11/15 09:48:02 lukem Exp $ */ +/* $NetBSD: db_aout.c,v 1.33 2002/02/15 07:33:49 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_aout.c,v 1.32 2001/11/15 09:48:02 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_aout.c,v 1.33 2002/02/15 07:33:49 simonb Exp $"); #include <sys/param.h> #include <sys/systm.h> #include <sys/proc.h> -#include <machine/db_machdep.h> /* data types */ +#include <machine/db_machdep.h> #include <ddb/db_sym.h> #include <ddb/db_output.h> @@ -43,18 +43,17 @@ __KERNEL_RCSID(0, "$NetBSD: db_aout.c,v 1.32 2001/11/15 09:48:02 lukem Exp $"); #include <ddb/db_aout.h> -boolean_t db_aout_sym_init __P((int, void *, void *, const char *)); -db_sym_t db_aout_lookup __P((db_symtab_t *, char *)); -db_sym_t db_aout_search_symbol __P((db_symtab_t *, db_addr_t, - db_strategy_t, db_expr_t *)); -void db_aout_symbol_values __P((db_symtab_t *, db_sym_t, - char **, db_expr_t *)); -boolean_t db_aout_line_at_pc __P((db_symtab_t *, db_sym_t, - char **, int *, db_expr_t)); -boolean_t db_aout_sym_numargs __P((db_symtab_t *, db_sym_t, int *, - char **)); -void db_aout_forall __P((db_symtab_t *, - db_forall_func_t db_forall_func, void *)); +static boolean_t db_aout_sym_init(int, void *, void *, const char *); +static db_sym_t db_aout_lookup(db_symtab_t *, char *); +static db_sym_t db_aout_search_symbol(db_symtab_t *, db_addr_t, db_strategy_t, + db_expr_t *); +static void db_aout_symbol_values(db_symtab_t *, db_sym_t, char **, + db_expr_t *); +static boolean_t db_aout_line_at_pc(db_symtab_t *, db_sym_t, char **, int *, + db_expr_t); +static boolean_t db_aout_sym_numargs(db_symtab_t *, db_sym_t, int *, char **); +static void db_aout_forall(db_symtab_t *, db_forall_func_t db_forall_func, + void *); const db_symformat_t db_symformat_aout = { "a.out", @@ -83,14 +82,15 @@ const db_symformat_t db_symformat_aout = { /* * Find the symbol table and strings; tell ddb about them. */ -boolean_t -db_aout_sym_init(symsize, vsymtab, vesymtab, name) - int symsize; /* size of symbol table */ - void *vsymtab; /* pointer to start of symbol table */ - void *vesymtab; /* pointer to end of string table, +static boolean_t +db_aout_sym_init( + int symsize, /* size of symbol table */ + void *vsymtab, /* pointer to start of symbol table */ + void *vesymtab, /* pointer to end of string table, for checking - rounded up to integer boundary */ - const char *name; + const char *name +) { struct nlist *sym_start, *sym_end; struct nlist *sp; @@ -125,24 +125,24 @@ db_aout_sym_init(symsize, vsymtab, vesymtab, name) (((vaddr_t)(x) + sizeof(vsize_t) - 1) & ~(sizeof(vsize_t) - 1)) if (round_to_size(estrtab) != round_to_size(vesymtab)) { - printf("[ %s a.out symbol table not valid ]\n", name); - return (FALSE); - } + printf("[ %s a.out symbol table not valid ]\n", name); + return (FALSE); + } #undef round_to_size - + for (sp = sym_start; sp < sym_end; sp++) { - int strx; - strx = sp->n_un.n_strx; - if (strx != 0) { - if (strx > slen) { - printf("[ %s has bad a.out string table index (0x%x) ]\n", - name, strx); - sp->n_un.n_name = 0; - bad = 1; - continue; + int strx; + strx = sp->n_un.n_strx; + if (strx != 0) { + if (strx > slen) { + printf("[ %s has bad a.out string table " + "index (0x%x) ]\n", name, strx); + sp->n_un.n_name = 0; + bad = 1; + continue; + } + sp->n_un.n_name = strtab + strx; } - sp->n_un.n_name = strtab + strx; - } } if (bad) @@ -150,18 +150,16 @@ db_aout_sym_init(symsize, vsymtab, vesymtab, name) if (db_add_symbol_table((char *)sym_start, (char *)sym_end, name, NULL) != -1) { - printf("[ using %ld bytes of %s a.out symbol table ]\n", - (long)vesymtab - (long)vsymtab, name); + printf("[ using %ld bytes of %s a.out symbol table ]\n", + (long)vesymtab - (long)vsymtab, name); return (TRUE); - } - + } + return (FALSE); } -db_sym_t -db_aout_lookup(stab, symstr) - db_symtab_t *stab; - char * symstr; +static db_sym_t +db_aout_lookup(db_symtab_t *stab, char *symstr) { struct nlist *sp, *ep; @@ -169,24 +167,19 @@ db_aout_lookup(stab, symstr) ep = (struct nlist *)stab->end; for (; sp < ep; sp++) { - if (sp->n_un.n_name == 0) - continue; - if ((sp->n_type & N_STAB) == 0 && - sp->n_un.n_name != 0 && - db_eqname(sp->n_un.n_name, symstr, '_')) - { - return ((db_sym_t)sp); - } + if (sp->n_un.n_name == 0) + continue; + if ((sp->n_type & N_STAB) == 0 && + sp->n_un.n_name != 0 && + db_eqname(sp->n_un.n_name, symstr, '_')) + return ((db_sym_t)sp); } return ((db_sym_t)0); } -db_sym_t -db_aout_search_symbol(symtab, off, strategy, diffp) - db_symtab_t * symtab; - db_addr_t off; - db_strategy_t strategy; - db_expr_t *diffp; /* in/out */ +static db_sym_t +db_aout_search_symbol(db_symtab_t *symtab, db_addr_t off, + db_strategy_t strategy, db_expr_t *diffp) { unsigned int diff = *diffp; struct nlist *symp = 0; @@ -196,66 +189,58 @@ db_aout_search_symbol(symtab, off, strategy, diffp) ep = (struct nlist *)symtab->end; for (; sp < ep; sp++) { - if (sp->n_un.n_name == 0) - continue; - if ((sp->n_type & N_STAB) != 0 || (sp->n_type & N_TYPE) == N_FN) - continue; - if (off >= sp->n_value) { - if (off - sp->n_value < diff) { - diff = off - sp->n_value; - symp = sp; - if (diff == 0 && - ((strategy == DB_STGY_PROC && - sp->n_type == (N_TEXT|N_EXT)) || - (strategy == DB_STGY_ANY && - (sp->n_type & N_EXT)))) - break; - } - else if (off - sp->n_value == diff) { - if (symp == 0) - symp = sp; - else if ((symp->n_type & N_EXT) == 0 && - (sp->n_type & N_EXT) != 0) - symp = sp; /* pick the external symbol */ + if (sp->n_un.n_name == 0) + continue; + if ((sp->n_type & N_STAB) != 0 || (sp->n_type & N_TYPE) == N_FN) + continue; + if (off >= sp->n_value) { + if (off - sp->n_value < diff) { + diff = off - sp->n_value; + symp = sp; + if (diff == 0 && + ((strategy == DB_STGY_PROC && + sp->n_type == (N_TEXT|N_EXT)) || + (strategy == DB_STGY_ANY && + (sp->n_type & N_EXT)))) + break; + } + else if (off - sp->n_value == diff) { + if (symp == 0) + symp = sp; + else if ((symp->n_type & N_EXT) == 0 && + (sp->n_type & N_EXT) != 0) + /* pick the external symbol */ + symp = sp; + } } - } - } - if (symp == 0) { - *diffp = off; - } - else { - *diffp = diff; } + if (symp == 0) + *diffp = off; + else + *diffp = diff; return ((db_sym_t)symp); } /* * Return the name and value for a symbol. */ -void -db_aout_symbol_values(symtab, sym, namep, valuep) - db_symtab_t *symtab; - db_sym_t sym; - char **namep; - db_expr_t *valuep; +static void +db_aout_symbol_values(db_symtab_t *symtab, db_sym_t sym, char **namep, + db_expr_t *valuep) { struct nlist *sp; sp = (struct nlist *)sym; if (namep) - *namep = sp->n_un.n_name; + *namep = sp->n_un.n_name; if (valuep) - *valuep = sp->n_value; + *valuep = sp->n_value; } -boolean_t -db_aout_line_at_pc(symtab, cursym, filename, linenum, off) - db_symtab_t * symtab; - db_sym_t cursym; - char **filename; - int *linenum; - db_expr_t off; +static boolean_t +db_aout_line_at_pc(db_symtab_t *symtab, db_sym_t cursym, char **filename, + int *linenum, db_expr_t off) { struct nlist *sp, *ep; unsigned long sodiff = -1UL, lndiff = -1UL, ln = 0; @@ -270,38 +255,38 @@ db_aout_line_at_pc(symtab, cursym, filename, linenum, off) for (; sp < ep; sp++) { - /* - * Prevent bogus linenumbers in case module not compiled - * with debugging options - */ + /* + * Prevent bogus linenumbers in case module not compiled + * with debugging options + */ #if 0 - if (sp->n_value <= off && (off - sp->n_value) <= sodiff && - NEWSRC(sp->n_un.n_name)) { + if (sp->n_value <= off && (off - sp->n_value) <= sodiff && + NEWSRC(sp->n_un.n_name)) { #endif - if ((sp->n_type & N_TYPE) == N_FN || NEWSRC(sp->n_un.n_name)) { - sodiff = lndiff = -1UL; - ln = 0; - fname = NULL; - } - - if (sp->n_type == N_SO) { - if (sp->n_value <= off && (off - sp->n_value) < sodiff) { - sodiff = off - sp->n_value; - fname = sp->n_un.n_name; + if ((sp->n_type & N_TYPE) == N_FN || NEWSRC(sp->n_un.n_name)) { + sodiff = lndiff = -1UL; + ln = 0; + fname = NULL; + } + + if (sp->n_type == N_SO) { + if (sp->n_value <= off && (off - sp->n_value) < sodiff) { + sodiff = off - sp->n_value; + fname = sp->n_un.n_name; + } + continue; } - continue; - } - if (sp->n_type != N_SLINE) - continue; + if (sp->n_type != N_SLINE) + continue; - if (sp->n_value > off) - break; + if (sp->n_value > off) + break; - if (off - sp->n_value < lndiff) { - lndiff = off - sp->n_value; - ln = sp->n_desc; - } + if (off - sp->n_value < lndiff) { + lndiff = off - sp->n_value; + ln = sp->n_desc; + } } if (fname != NULL && ln != 0) { @@ -313,12 +298,9 @@ db_aout_line_at_pc(symtab, cursym, filename, linenum, off) return (FALSE); } -boolean_t -db_aout_sym_numargs(symtab, cursym, nargp, argnamep) - db_symtab_t * symtab; - db_sym_t cursym; - int *nargp; - char **argnamep; +static boolean_t +db_aout_sym_numargs(db_symtab_t *symtab, db_sym_t cursym, int *nargp, + char **argnamep) { struct nlist *sp, *ep; u_long addr; @@ -332,31 +314,29 @@ db_aout_sym_numargs(symtab, cursym, nargp, argnamep) ep = (struct nlist *)symtab->end; for (; sp < ep; sp++) { - if (sp->n_type == N_FUN && sp->n_value == addr) { - while (++sp < ep && sp->n_type == N_PSYM) { - if (nargs >= maxnarg) - break; - nargs++; - *argnamep++ = sp->n_un.n_name?sp->n_un.n_name:"???"; - { - /* XXX - remove trailers */ - char *cp = *(argnamep-1); - while (*cp != '\0' && *cp != ':') cp++; - if (*cp == ':') *cp = '\0'; + if (sp->n_type == N_FUN && sp->n_value == addr) { + while (++sp < ep && sp->n_type == N_PSYM) { + if (nargs >= maxnarg) + break; + nargs++; + *argnamep++ = sp->n_un.n_name ? + sp->n_un.n_name : "???"; + { + /* XXX - remove trailers */ + char *cp = *(argnamep-1); + while (*cp != '\0' && *cp != ':') cp++; + if (*cp == ':') *cp = '\0'; + } } + *nargp = nargs; + return TRUE; } - *nargp = nargs; - return TRUE; - } } return FALSE; } -void -db_aout_forall(stab, db_forall_func, arg) - db_symtab_t *stab; - db_forall_func_t db_forall_func; - void *arg; +static void +db_aout_forall(db_symtab_t *stab, db_forall_func_t db_forall_func, void *arg) { static char suffix[2]; struct nlist *sp, *ep; @@ -365,35 +345,33 @@ db_aout_forall(stab, db_forall_func, arg) ep = (struct nlist *)stab->end; for (; sp < ep; sp++) { - if (sp->n_un.n_name == 0) - continue; - if ((sp->n_type & N_STAB) == 0 && sp->n_un.n_name != 0) { - suffix[1] = '\0'; - switch(sp->n_type & N_TYPE) { - case N_ABS: - suffix[0] = '@'; - break; - case N_TEXT: - suffix[0] = '*'; - break; - case N_DATA: - suffix[0] = '+'; - break; - case N_BSS: - suffix[0] = '-'; - break; - case N_FN: - suffix[0] = '/'; - break; - default: - suffix[0] = '\0'; - } - (*db_forall_func)(stab, (db_sym_t)sp, sp->n_un.n_name, - suffix, '_', arg); - } + if (sp->n_un.n_name == 0) + continue; + if ((sp->n_type & N_STAB) == 0 && sp->n_un.n_name != 0) { + suffix[1] = '\0'; + switch(sp->n_type & N_TYPE) { + case N_ABS: + suffix[0] = '@'; + break; + case N_TEXT: + suffix[0] = '*'; + break; + case N_DATA: + suffix[0] = '+'; + break; + case N_BSS: + suffix[0] = '-'; + break; + case N_FN: + suffix[0] = '/'; + break; + default: + suffix[0] = '\0'; + } + (*db_forall_func)(stab, (db_sym_t)sp, sp->n_un.n_name, + suffix, '_', arg); + } } return; } - - #endif /* DB_AOUT_SYMBOLS */ diff --git a/sys/ddb/db_break.c b/sys/ddb/db_break.c index 5802c070f36..ae69038bd08 100644 --- a/sys/ddb/db_break.c +++ b/sys/ddb/db_break.c @@ -1,27 +1,27 @@ -/* $NetBSD: db_break.c,v 1.16 2001/11/12 22:54:04 lukem Exp $ */ +/* $NetBSD: db_break.c,v 1.17 2002/02/15 07:33:49 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_break.c,v 1.16 2001/11/12 22:54:04 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_break.c,v 1.17 2002/02/15 07:33:49 simonb Exp $"); #include <sys/param.h> #include <sys/proc.h> @@ -48,23 +48,30 @@ __KERNEL_RCSID(0, "$NetBSD: db_break.c,v 1.16 2001/11/12 22:54:04 lukem Exp $"); #include <ddb/db_output.h> #define NBREAKPOINTS 100 -struct db_breakpoint db_break_table[NBREAKPOINTS]; -db_breakpoint_t db_next_free_breakpoint = &db_break_table[0]; -db_breakpoint_t db_free_breakpoints = 0; -db_breakpoint_t db_breakpoint_list = 0; - -db_breakpoint_t -db_breakpoint_alloc() +static struct db_breakpoint db_break_table[NBREAKPOINTS]; +static db_breakpoint_t db_next_free_breakpoint = &db_break_table[0]; +static db_breakpoint_t db_free_breakpoints = 0; +static db_breakpoint_t db_breakpoint_list = 0; + +static db_breakpoint_t db_breakpoint_alloc(void); +static void db_breakpoint_free(db_breakpoint_t); +static void db_delete_breakpoint(struct vm_map *, db_addr_t); +static db_breakpoint_t db_find_breakpoint(struct vm_map *, db_addr_t); +static void db_list_breakpoints(void); +static void db_set_breakpoint(struct vm_map *, db_addr_t, int); + +static db_breakpoint_t +db_breakpoint_alloc(void) { db_breakpoint_t bkpt; if ((bkpt = db_free_breakpoints) != 0) { - db_free_breakpoints = bkpt->link; - return (bkpt); + db_free_breakpoints = bkpt->link; + return (bkpt); } if (db_next_free_breakpoint == &db_break_table[NBREAKPOINTS]) { - db_printf("All breakpoints used.\n"); - return (0); + db_printf("All breakpoints used.\n"); + return (0); } bkpt = db_next_free_breakpoint; db_next_free_breakpoint++; @@ -72,31 +79,27 @@ db_breakpoint_alloc() return (bkpt); } -void -db_breakpoint_free(bkpt) - db_breakpoint_t bkpt; +static void +db_breakpoint_free(db_breakpoint_t bkpt) { bkpt->link = db_free_breakpoints; db_free_breakpoints = bkpt; } void -db_set_breakpoint(map, addr, count) - struct vm_map *map; - db_addr_t addr; - int count; +db_set_breakpoint(struct vm_map *map, db_addr_t addr, int count) { db_breakpoint_t bkpt; if (db_find_breakpoint(map, addr)) { - db_printf("Already set.\n"); - return; + db_printf("Already set.\n"); + return; } bkpt = db_breakpoint_alloc(); if (bkpt == 0) { - db_printf("Too many breakpoints.\n"); - return; + db_printf("Too many breakpoints.\n"); + return; } bkpt->map = map; @@ -109,10 +112,8 @@ db_set_breakpoint(map, addr, count) db_breakpoint_list = bkpt; } -void -db_delete_breakpoint(map, addr) - struct vm_map *map; - db_addr_t addr; +static void +db_delete_breakpoint(struct vm_map *map, db_addr_t addr) { db_breakpoint_t bkpt; db_breakpoint_t *prev; @@ -120,83 +121,77 @@ db_delete_breakpoint(map, addr) for (prev = &db_breakpoint_list; (bkpt = *prev) != 0; prev = &bkpt->link) { - if (db_map_equal(bkpt->map, map) && - (bkpt->address == addr)) { - *prev = bkpt->link; - break; - } + if (db_map_equal(bkpt->map, map) && + (bkpt->address == addr)) { + *prev = bkpt->link; + break; + } } if (bkpt == 0) { - db_printf("Not set.\n"); - return; + db_printf("Not set.\n"); + return; } db_breakpoint_free(bkpt); } db_breakpoint_t -db_find_breakpoint(map, addr) - struct vm_map *map; - db_addr_t addr; +db_find_breakpoint(struct vm_map *map, db_addr_t addr) { db_breakpoint_t bkpt; for (bkpt = db_breakpoint_list; bkpt != 0; bkpt = bkpt->link) - { - if (db_map_equal(bkpt->map, map) && - (bkpt->address == addr)) - return (bkpt); - } + if (db_map_equal(bkpt->map, map) && + (bkpt->address == addr)) + return (bkpt); + return (0); } db_breakpoint_t -db_find_breakpoint_here(addr) - db_addr_t addr; +db_find_breakpoint_here(db_addr_t addr) { - return db_find_breakpoint(db_map_addr(addr), addr); + return db_find_breakpoint(db_map_addr(addr), addr); } -boolean_t db_breakpoints_inserted = TRUE; +static boolean_t db_breakpoints_inserted = TRUE; void -db_set_breakpoints() +db_set_breakpoints(void) { db_breakpoint_t bkpt; if (!db_breakpoints_inserted) { - for (bkpt = db_breakpoint_list; - bkpt != 0; - bkpt = bkpt->link) - if (db_map_current(bkpt->map)) { - bkpt->bkpt_inst = db_get_value(bkpt->address, - BKPT_SIZE, - FALSE); - db_put_value(bkpt->address, - BKPT_SIZE, - BKPT_SET(bkpt->bkpt_inst)); - } - db_breakpoints_inserted = TRUE; + for (bkpt = db_breakpoint_list; + bkpt != 0; + bkpt = bkpt->link) + if (db_map_current(bkpt->map)) { + bkpt->bkpt_inst = db_get_value(bkpt->address, + BKPT_SIZE, FALSE); + db_put_value(bkpt->address, + BKPT_SIZE, BKPT_SET(bkpt->bkpt_inst)); + } + db_breakpoints_inserted = TRUE; } } void -db_clear_breakpoints() +db_clear_breakpoints(void) { db_breakpoint_t bkpt; if (db_breakpoints_inserted) { - for (bkpt = db_breakpoint_list; - bkpt != 0; - bkpt = bkpt->link) - if (db_map_current(bkpt->map)) { - db_put_value(bkpt->address, BKPT_SIZE, bkpt->bkpt_inst); - } - db_breakpoints_inserted = FALSE; + for (bkpt = db_breakpoint_list; + bkpt != 0; + bkpt = bkpt->link) + if (db_map_current(bkpt->map)) + db_put_value(bkpt->address, BKPT_SIZE, + bkpt->bkpt_inst); + db_breakpoints_inserted = FALSE; } } @@ -204,51 +199,44 @@ db_clear_breakpoints() * List breakpoints. */ void -db_list_breakpoints() +db_list_breakpoints(void) { db_breakpoint_t bkpt; if (db_breakpoint_list == 0) { - db_printf("No breakpoints set\n"); - return; + db_printf("No breakpoints set\n"); + return; } db_printf(" Map Count Address\n"); for (bkpt = db_breakpoint_list; bkpt != 0; - bkpt = bkpt->link) - { - db_printf("%s%p %5d ", - db_map_current(bkpt->map) ? "*" : " ", - bkpt->map, bkpt->init_count); - db_printsym(bkpt->address, DB_STGY_PROC, db_printf); - db_printf("\n"); + bkpt = bkpt->link) { + db_printf("%s%p %5d ", + db_map_current(bkpt->map) ? "*" : " ", + bkpt->map, bkpt->init_count); + db_printsym(bkpt->address, DB_STGY_PROC, db_printf); + db_printf("\n"); } } /* Delete breakpoint */ /*ARGSUSED*/ void -db_delete_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +db_delete_cmd(db_expr_t addr, int have_addr, db_expr_t count, char * modif) { + db_delete_breakpoint(db_map_addr(addr), (db_addr_t)addr); } /* Set breakpoint with skip count */ /*ARGSUSED*/ void -db_breakpoint_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +db_breakpoint_cmd(db_expr_t addr, int have_addr, db_expr_t count, char * modif) { + if (count == -1) - count = 1; + count = 1; db_set_breakpoint(db_map_addr(addr), (db_addr_t)addr, count); } @@ -256,12 +244,9 @@ db_breakpoint_cmd(addr, have_addr, count, modif) /* list breakpoints */ /*ARGSUSED*/ void -db_listbreak_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +db_listbreak_cmd(db_expr_t addr, int have_addr, db_expr_t count, char * modif) { + db_list_breakpoints(); } @@ -274,18 +259,16 @@ db_listbreak_cmd(addr, have_addr, count, modif) */ boolean_t -db_map_equal(map1, map2) - struct vm_map *map1; - struct vm_map *map2; +db_map_equal(struct vm_map *map1, struct vm_map *map2) { + return ((map1 == map2) || ((map1 == NULL) && (map2 == kernel_map)) || ((map1 == kernel_map) && (map2 == NULL))); } boolean_t -db_map_current(map) - struct vm_map *map; +db_map_current(struct vm_map *map) { #if 0 thread_t thread; @@ -295,13 +278,13 @@ db_map_current(map) (((thread = current_thread()) != NULL) && (map == thread->task->map))); #else + return (1); #endif } struct vm_map * -db_map_addr(addr) - vaddr_t addr; +db_map_addr(vaddr_t addr) { #if 0 thread_t thread; @@ -312,11 +295,10 @@ db_map_addr(addr) * kernel tasks with their own maps. */ - if ((VM_MIN_ADDRESS <= addr) && - (addr < VM_MAX_ADDRESS) && + if ((VM_MIN_ADDRESS <= addr) && (addr < VM_MAX_ADDRESS) && ((thread = current_thread()) != NULL)) - return thread->task->map; + return thread->task->map; else #endif - return kernel_map; + return kernel_map; } diff --git a/sys/ddb/db_break.h b/sys/ddb/db_break.h index fe97e09f3cd..106f5b07d41 100644 --- a/sys/ddb/db_break.h +++ b/sys/ddb/db_break.h @@ -1,27 +1,27 @@ -/* $NetBSD: db_break.h,v 1.15 2001/06/02 18:09:25 chs Exp $ */ +/* $NetBSD: db_break.h,v 1.16 2002/02/15 07:33:49 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -49,20 +49,14 @@ typedef struct db_breakpoint { struct db_breakpoint *link; /* link in in-use or free chain */ } *db_breakpoint_t; -db_breakpoint_t db_breakpoint_alloc __P((void)); -void db_breakpoint_free __P((db_breakpoint_t)); -void db_set_breakpoint __P((struct vm_map *, db_addr_t, int)); -void db_delete_breakpoint __P((struct vm_map *, db_addr_t)); -db_breakpoint_t db_find_breakpoint __P((struct vm_map *, db_addr_t)); -db_breakpoint_t db_find_breakpoint_here __P((db_addr_t)); -void db_set_breakpoints __P((void)); -void db_clear_breakpoints __P((void)); -void db_list_breakpoints __P((void)); -void db_delete_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_breakpoint_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_listbreak_cmd __P((db_expr_t, int, db_expr_t, char *)); -boolean_t db_map_equal __P((struct vm_map *, struct vm_map *)); -boolean_t db_map_current __P((struct vm_map *)); -struct vm_map *db_map_addr __P((vaddr_t)); +db_breakpoint_t db_find_breakpoint_here(db_addr_t); +void db_set_breakpoints(void); +void db_clear_breakpoints(void); +void db_delete_cmd(db_expr_t, int, db_expr_t, char *); +void db_breakpoint_cmd(db_expr_t, int, db_expr_t, char *); +void db_listbreak_cmd(db_expr_t, int, db_expr_t, char *); +boolean_t db_map_equal(struct vm_map *, struct vm_map *); +boolean_t db_map_current(struct vm_map *); +struct vm_map *db_map_addr(vaddr_t); #endif /* _DDB_DB_BREAK_H_ */ diff --git a/sys/ddb/db_command.c b/sys/ddb/db_command.c index 77f039beab8..43a3cb9fa90 100644 --- a/sys/ddb/db_command.c +++ b/sys/ddb/db_command.c @@ -1,27 +1,27 @@ -/* $NetBSD: db_command.c,v 1.63 2001/11/12 22:54:04 lukem Exp $ */ +/* $NetBSD: db_command.c,v 1.64 2002/02/15 07:33:50 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. */ @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_command.c,v 1.63 2001/11/12 22:54:04 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_command.c,v 1.64 2002/02/15 07:33:50 simonb Exp $"); #include "opt_ddb.h" #include "opt_inet.h" @@ -71,83 +71,222 @@ __KERNEL_RCSID(0, "$NetBSD: db_command.c,v 1.63 2001/11/12 22:54:04 lukem Exp $" #include "arp.h" /* + * Results of command search. + */ +#define CMD_UNIQUE 0 +#define CMD_FOUND 1 +#define CMD_NONE 2 +#define CMD_AMBIGUOUS 3 +#define CMD_HELP 4 + +/* * Exported global variables */ boolean_t db_cmd_loop_done; label_t *db_recover; +db_addr_t db_dot; +db_addr_t db_last_addr; +db_addr_t db_prev; +db_addr_t db_next; /* * if 'ed' style: 'dot' is set at start of last item printed, * and '+' points to next line. * Otherwise: 'dot' points to next item, '..' points to last. */ -boolean_t db_ed_style = TRUE; +static boolean_t db_ed_style = TRUE; + +static int db_cmd_search(const char *, const struct db_command *, + const struct db_command **); +static void db_cmd_list(const struct db_command *); +static void db_command(const struct db_command **, + const struct db_command *); +static void db_map_print_cmd(db_expr_t, int, db_expr_t, char *); +static void db_malloc_print_cmd(db_expr_t, int, db_expr_t, char *); +static void db_object_print_cmd(db_expr_t, int, db_expr_t, char *); +static void db_page_print_cmd(db_expr_t, int, db_expr_t, char *); +static void db_buf_print_cmd(db_expr_t, int, db_expr_t, char *); +static void db_vnode_print_cmd(db_expr_t, int, db_expr_t, char *); +static void db_pool_print_cmd(db_expr_t, int, db_expr_t, char *); +static void db_namecache_print_cmd(db_expr_t, int, db_expr_t, char *); +static void db_uvmexp_print_cmd(db_expr_t, int, db_expr_t, char *); +static void db_fncall(db_expr_t, int, db_expr_t, char *); +static void db_reboot_cmd(db_expr_t, int, db_expr_t, char *); +static void db_sifting_cmd(db_expr_t, int, db_expr_t, char *); +static void db_stack_trace_cmd(db_expr_t, int, db_expr_t, char *); +static void db_sync_cmd(db_expr_t, int, db_expr_t, char *); + +/* + * 'show' commands + */ + +static const struct db_command db_show_all_cmds[] = { + { "callout", db_show_callout, 0, NULL }, + { "procs", db_show_all_procs, 0, NULL }, + { NULL, NULL, 0, NULL } +}; + +static const struct db_command db_show_cmds[] = { + { "all", NULL, 0, db_show_all_cmds }, +#if defined(INET) && (NARP > 0) + { "arptab", db_show_arptab, 0, NULL }, +#endif + { "breaks", db_listbreak_cmd, 0, NULL }, + { "buf", db_buf_print_cmd, 0, NULL }, + { "map", db_map_print_cmd, 0, NULL }, + { "ncache", db_namecache_print_cmd, 0, NULL }, + { "object", db_object_print_cmd, 0, NULL }, + { "page", db_page_print_cmd, 0, NULL }, + { "pool", db_pool_print_cmd, 0, NULL }, + { "registers", db_show_regs, 0, NULL }, + { "uvmexp", db_uvmexp_print_cmd, 0, NULL }, + { "vnode", db_vnode_print_cmd, 0, NULL }, + { "watches", db_listwatch_cmd, 0, NULL }, + { "malloc", db_malloc_print_cmd, 0, NULL }, + { NULL, NULL, 0, NULL } +}; + +static const struct db_command db_command_table[] = { + { "break", db_breakpoint_cmd, 0, NULL }, + { "c", db_continue_cmd, 0, NULL }, + { "call", db_fncall, CS_OWN, NULL }, + { "callout", db_show_callout, 0, NULL }, + { "continue", db_continue_cmd, 0, NULL }, + { "d", db_delete_cmd, 0, NULL }, + { "delete", db_delete_cmd, 0, NULL }, + { "dmesg", db_dmesg, 0, NULL }, + { "dwatch", db_deletewatch_cmd, 0, NULL }, + { "examine", db_examine_cmd, CS_SET_DOT, NULL }, + { "kill", db_kill_proc, CS_OWN, NULL }, +#ifdef DB_MACHINE_COMMANDS + { "machine", NULL, 0, db_machine_command_table }, +#endif + { "match", db_trace_until_matching_cmd,0, NULL }, + { "next", db_trace_until_matching_cmd,0, NULL }, + { "p", db_print_cmd, 0, NULL }, + { "print", db_print_cmd, 0, NULL }, + { "ps", db_show_all_procs, 0, NULL }, + { "reboot", db_reboot_cmd, CS_OWN, NULL }, + { "s", db_single_step_cmd, 0, NULL }, + { "search", db_search_cmd, CS_OWN|CS_SET_DOT, NULL }, + { "set", db_set_cmd, CS_OWN, NULL }, + { "show", NULL, 0, db_show_cmds }, + { "sifting", db_sifting_cmd, CS_OWN, NULL }, + { "step", db_single_step_cmd, 0, NULL }, + { "sync", db_sync_cmd, CS_OWN, NULL }, + { "trace", db_stack_trace_cmd, 0, NULL }, + { "until", db_trace_until_call_cmd,0, NULL }, + { "w", db_write_cmd, CS_MORE|CS_SET_DOT, NULL }, + { "watch", db_watchpoint_cmd, CS_MORE, NULL }, + { "write", db_write_cmd, CS_MORE|CS_SET_DOT, NULL }, + { "x", db_examine_cmd, CS_SET_DOT, NULL }, + { NULL, NULL, 0, NULL } +}; + +static const struct db_command *db_last_command = NULL; /* * Utility routine - discard tokens through end-of-line. */ void -db_skip_to_eol() +db_skip_to_eol(void) { - int t; + int t; + do { - t = db_read_token(); + t = db_read_token(); } while (t != tEOL); } -/* - * Results of command search. - */ -#define CMD_UNIQUE 0 -#define CMD_FOUND 1 -#define CMD_NONE 2 -#define CMD_AMBIGUOUS 3 -#define CMD_HELP 4 +void +db_error(s) + char *s; +{ + + if (s) + db_printf("%s", s); + db_flush_lex(); + longjmp(db_recover); +} + +void +db_command_loop(void) +{ + label_t db_jmpbuf; + label_t *savejmp; + + /* + * Initialize 'prev' and 'next' to dot. + */ + db_prev = db_dot; + db_next = db_dot; + + db_cmd_loop_done = 0; + + savejmp = db_recover; + db_recover = &db_jmpbuf; + (void) setjmp(&db_jmpbuf); + + while (!db_cmd_loop_done) { + if (db_print_position() != 0) + db_printf("\n"); + db_output_line = 0; + + +#ifdef MULTIPROCESSOR + db_printf("db{%ld}> ", (long)cpu_number()); +#else + db_printf("db> "); +#endif + (void) db_read_line(); + + db_command(&db_last_command, db_command_table); + } + + db_recover = savejmp; +} /* * Search for command prefix. */ -int -db_cmd_search(name, table, cmdp) - const char *name; - const struct db_command *table; - const struct db_command **cmdp; /* out */ +static int +db_cmd_search(const char *name, const struct db_command *table, + const struct db_command **cmdp) { const struct db_command *cmd; int result = CMD_NONE; for (cmd = table; cmd->name != 0; cmd++) { - const char *lp; - const char *rp; - int c; - - lp = name; - rp = cmd->name; - while ((c = *lp) == *rp) { - if (c == 0) { - /* complete match */ - *cmdp = cmd; - return (CMD_UNIQUE); - } - lp++; - rp++; - } - if (c == 0) { - /* end of name, not end of command - - partial match */ - if (result == CMD_FOUND) { - result = CMD_AMBIGUOUS; - /* but keep looking for a full match - - this lets us match single letters */ + const char *lp; + const char *rp; + int c; + + lp = name; + rp = cmd->name; + while ((c = *lp) == *rp) { + if (c == 0) { + /* complete match */ + *cmdp = cmd; + return (CMD_UNIQUE); + } + lp++; + rp++; } - else { - *cmdp = cmd; - result = CMD_FOUND; + if (c == 0) { + /* end of name, not end of command - + partial match */ + if (result == CMD_FOUND) { + result = CMD_AMBIGUOUS; + /* but keep looking for a full match - + this lets us match single letters */ + } else { + *cmdp = cmd; + result = CMD_FOUND; + } } - } } if (result == CMD_NONE) { - /* check for 'help' */ + /* check for 'help' */ if (name[0] == 'h' && name[1] == 'e' && name[2] == 'l' && name[3] == 'p') result = CMD_HELP; @@ -155,9 +294,8 @@ db_cmd_search(name, table, cmdp) return (result); } -void -db_cmd_list(table) - const struct db_command *table; +static void +db_cmd_list(const struct db_command *table) { int i, j, w, columns, lines, width=0, items, numcmds; const char *p; @@ -192,10 +330,9 @@ db_cmd_list(table) } } -void -db_command(last_cmdp, cmd_table) - const struct db_command **last_cmdp; /* IN_OUT */ - const struct db_command *cmd_table; +static void +db_command(const struct db_command **last_cmdp, + const struct db_command *cmd_table) { const struct db_command *cmd; int t; @@ -204,174 +341,156 @@ db_command(last_cmdp, cmd_table) boolean_t have_addr = FALSE; int result; - static db_expr_t last_count = 0; + static db_expr_t last_count = 0; t = db_read_token(); if ((t == tEOL) || (t == tCOMMA)) { - /* - * An empty line repeats last command, at 'next'. - * Only a count repeats the last command with the new count. - */ - cmd = *last_cmdp; - addr = (db_expr_t)db_next; - if (t == tCOMMA) { - if (!db_expression(&count)) { - db_printf("Count missing\n"); - db_flush_lex(); - return; - } - } else - count = last_count; - have_addr = FALSE; - modif[0] = '\0'; - db_skip_to_eol(); - } - else if (t == tEXCL) { - db_fncall(0, 0, 0, NULL); - return; - } - else if (t != tIDENT) { - db_printf("?\n"); - db_flush_lex(); - return; - } - else { - /* - * Search for command - */ - while (cmd_table) { - result = db_cmd_search(db_tok_string, - cmd_table, - &cmd); - switch (result) { - case CMD_NONE: - db_printf("No such command\n"); - db_flush_lex(); - return; - case CMD_AMBIGUOUS: - db_printf("Ambiguous\n"); - db_flush_lex(); - return; - case CMD_HELP: - db_cmd_list(cmd_table); - db_flush_lex(); - return; - default: - break; - } - if ((cmd_table = cmd->more) != 0) { - t = db_read_token(); - if (t != tIDENT) { - db_cmd_list(cmd_table); - db_flush_lex(); - return; - } - } - } - - if ((cmd->flag & CS_OWN) == 0) { /* - * Standard syntax: - * command [/modifier] [addr] [,count] + * An empty line repeats last command, at 'next'. + * Only a count repeats the last command with the new count. */ - t = db_read_token(); - if (t == tSLASH) { - t = db_read_token(); - if (t != tIDENT) { - db_printf("Bad modifier\n"); - db_flush_lex(); - return; - } - db_strcpy(modif, db_tok_string); - } - else { - db_unread_token(t); - modif[0] = '\0'; - } - - if (db_expression(&addr)) { - db_dot = (db_addr_t) addr; - db_last_addr = db_dot; - have_addr = TRUE; - } - else { - addr = (db_expr_t) db_dot; - have_addr = FALSE; - } - t = db_read_token(); + cmd = *last_cmdp; + addr = (db_expr_t)db_next; if (t == tCOMMA) { - if (!db_expression(&count)) { - db_printf("Count missing\n"); - db_flush_lex(); - return; - } - } - else { - db_unread_token(t); - count = -1; + if (!db_expression(&count)) { + db_printf("Count missing\n"); + db_flush_lex(); + return; + } + } else + count = last_count; + have_addr = FALSE; + modif[0] = '\0'; + db_skip_to_eol(); + } else if (t == tEXCL) { + db_fncall(0, 0, 0, NULL); + return; + } else if (t != tIDENT) { + db_printf("?\n"); + db_flush_lex(); + return; + } else { + /* + * Search for command + */ + while (cmd_table) { + result = db_cmd_search(db_tok_string, cmd_table, &cmd); + switch (result) { + case CMD_NONE: + db_printf("No such command\n"); + db_flush_lex(); + return; + case CMD_AMBIGUOUS: + db_printf("Ambiguous\n"); + db_flush_lex(); + return; + case CMD_HELP: + db_cmd_list(cmd_table); + db_flush_lex(); + return; + default: + break; + } + if ((cmd_table = cmd->more) != 0) { + t = db_read_token(); + if (t != tIDENT) { + db_cmd_list(cmd_table); + db_flush_lex(); + return; + } + } } - if ((cmd->flag & CS_MORE) == 0) { - db_skip_to_eol(); + + if ((cmd->flag & CS_OWN) == 0) { + /* + * Standard syntax: + * command [/modifier] [addr] [,count] + */ + t = db_read_token(); + if (t == tSLASH) { + t = db_read_token(); + if (t != tIDENT) { + db_printf("Bad modifier\n"); + db_flush_lex(); + return; + } + db_strcpy(modif, db_tok_string); + } else { + db_unread_token(t); + modif[0] = '\0'; + } + + if (db_expression(&addr)) { + db_dot = (db_addr_t) addr; + db_last_addr = db_dot; + have_addr = TRUE; + } else { + addr = (db_expr_t) db_dot; + have_addr = FALSE; + } + t = db_read_token(); + if (t == tCOMMA) { + if (!db_expression(&count)) { + db_printf("Count missing\n"); + db_flush_lex(); + return; + } + } else { + db_unread_token(t); + count = -1; + } + if ((cmd->flag & CS_MORE) == 0) { + db_skip_to_eol(); + } } - } } *last_cmdp = cmd; last_count = count; if (cmd != 0) { - /* - * Execute the command. - */ - (*cmd->fcn)(addr, have_addr, count, modif); - - if (cmd->flag & CS_SET_DOT) { /* - * If command changes dot, set dot to - * previous address displayed (if 'ed' style). + * Execute the command. */ - if (db_ed_style) { - db_dot = db_prev; - } - else { - db_dot = db_next; + (*cmd->fcn)(addr, have_addr, count, modif); + + if (cmd->flag & CS_SET_DOT) { + /* + * If command changes dot, set dot to + * previous address displayed (if 'ed' style). + */ + if (db_ed_style) + db_dot = db_prev; + else + db_dot = db_next; + } else { + /* + * If command does not change dot, + * set 'next' location to be the same. + */ + db_next = db_dot; } - } - else { - /* - * If command does not change dot, - * set 'next' location to be the same. - */ - db_next = db_dot; - } } } /*ARGSUSED*/ -void -db_map_print_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +static void +db_map_print_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { - boolean_t full = FALSE; - - if (modif[0] == 'f') - full = TRUE; + boolean_t full = FALSE; + + if (modif[0] == 'f') + full = TRUE; if (have_addr == FALSE) addr = (db_expr_t) kernel_map; - uvm_map_printit((struct vm_map *) addr, full, db_printf); + uvm_map_printit((struct vm_map *) addr, full, db_printf); } /*ARGSUSED*/ -void -db_malloc_print_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +static void +db_malloc_print_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { + #ifdef MALLOC_DEBUG if (!have_addr) addr = 0; @@ -383,47 +502,35 @@ db_malloc_print_cmd(addr, have_addr, count, modif) } /*ARGSUSED*/ -void -db_object_print_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +static void +db_object_print_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { - boolean_t full = FALSE; - - if (modif[0] == 'f') - full = TRUE; + boolean_t full = FALSE; + + if (modif[0] == 'f') + full = TRUE; uvm_object_printit((struct uvm_object *) addr, full, db_printf); } /*ARGSUSED*/ -void -db_page_print_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +static void +db_page_print_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { - boolean_t full = FALSE; - - if (modif[0] == 'f') - full = TRUE; + boolean_t full = FALSE; + + if (modif[0] == 'f') + full = TRUE; uvm_page_printit((struct vm_page *) addr, full, db_printf); } /*ARGSUSED*/ -void -db_buf_print_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +static void +db_buf_print_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { boolean_t full = FALSE; - + if (modif[0] == 'f') full = TRUE; @@ -431,15 +538,11 @@ db_buf_print_cmd(addr, have_addr, count, modif) } /*ARGSUSED*/ -void -db_vnode_print_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +static void +db_vnode_print_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { boolean_t full = FALSE; - + if (modif[0] == 'f') full = TRUE; @@ -447,212 +550,82 @@ db_vnode_print_cmd(addr, have_addr, count, modif) } /*ARGSUSED*/ -void -db_pool_print_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +static void +db_pool_print_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { + pool_printit((struct pool *)addr, modif, db_printf); } /*ARGSUSED*/ -void -db_namecache_print_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +static void +db_namecache_print_cmd(db_expr_t addr, int have_addr, db_expr_t count, + char *modif) { + namecache_print((struct vnode *)addr, db_printf); } /*ARGSUSED*/ -void -db_uvmexp_print_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; -{ - uvmexp_print(db_printf); -} - -/* - * 'show' commands - */ - -static const struct db_command db_show_all_cmds[] = { - { "callout", db_show_callout, 0, NULL }, - { "procs", db_show_all_procs, 0, NULL }, - { NULL, NULL, 0, NULL } -}; - -static const struct db_command db_show_cmds[] = { - { "all", NULL, 0, db_show_all_cmds }, -#if defined(INET) && (NARP > 0) - { "arptab", db_show_arptab, 0, NULL }, -#endif - { "breaks", db_listbreak_cmd, 0, NULL }, - { "buf", db_buf_print_cmd, 0, NULL }, - { "map", db_map_print_cmd, 0, NULL }, - { "ncache", db_namecache_print_cmd, 0, NULL }, - { "object", db_object_print_cmd, 0, NULL }, - { "page", db_page_print_cmd, 0, NULL }, - { "pool", db_pool_print_cmd, 0, NULL }, - { "registers", db_show_regs, 0, NULL }, - { "uvmexp", db_uvmexp_print_cmd, 0, NULL }, - { "vnode", db_vnode_print_cmd, 0, NULL }, - { "watches", db_listwatch_cmd, 0, NULL }, - { "malloc", db_malloc_print_cmd, 0, NULL }, - { NULL, NULL, 0, NULL } -}; - -static const struct db_command db_command_table[] = { - { "break", db_breakpoint_cmd, 0, NULL }, - { "c", db_continue_cmd, 0, NULL }, - { "call", db_fncall, CS_OWN, NULL }, - { "callout", db_show_callout, 0, NULL }, - { "continue", db_continue_cmd, 0, NULL }, - { "d", db_delete_cmd, 0, NULL }, - { "delete", db_delete_cmd, 0, NULL }, - { "dmesg", db_dmesg, 0, NULL }, - { "dwatch", db_deletewatch_cmd, 0, NULL }, - { "examine", db_examine_cmd, CS_SET_DOT, NULL }, - { "kill", db_kill_proc, CS_OWN, NULL }, -#ifdef DB_MACHINE_COMMANDS - { "machine", NULL, 0, db_machine_command_table }, -#endif - { "match", db_trace_until_matching_cmd,0, NULL }, - { "next", db_trace_until_matching_cmd,0, NULL }, - { "p", db_print_cmd, 0, NULL }, - { "print", db_print_cmd, 0, NULL }, - { "ps", db_show_all_procs, 0, NULL }, - { "reboot", db_reboot_cmd, CS_OWN, NULL }, - { "s", db_single_step_cmd, 0, NULL }, - { "search", db_search_cmd, CS_OWN|CS_SET_DOT, NULL }, - { "set", db_set_cmd, CS_OWN, NULL }, - { "show", NULL, 0, db_show_cmds }, - { "sifting", db_sifting_cmd, CS_OWN, NULL }, - { "step", db_single_step_cmd, 0, NULL }, - { "sync", db_sync_cmd, CS_OWN, NULL }, - { "trace", db_stack_trace_cmd, 0, NULL }, - { "until", db_trace_until_call_cmd,0, NULL }, - { "w", db_write_cmd, CS_MORE|CS_SET_DOT, NULL }, - { "watch", db_watchpoint_cmd, CS_MORE, NULL }, - { "write", db_write_cmd, CS_MORE|CS_SET_DOT, NULL }, - { "x", db_examine_cmd, CS_SET_DOT, NULL }, - { NULL, NULL, 0, NULL } -}; - -const struct db_command *db_last_command = NULL; - -void -db_command_loop() +static void +db_uvmexp_print_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { - label_t db_jmpbuf; - label_t *savejmp; - extern int db_output_line; - - /* - * Initialize 'prev' and 'next' to dot. - */ - db_prev = db_dot; - db_next = db_dot; - - db_cmd_loop_done = 0; - - savejmp = db_recover; - db_recover = &db_jmpbuf; - (void) setjmp(&db_jmpbuf); - - while (!db_cmd_loop_done) { - if (db_print_position() != 0) - db_printf("\n"); - db_output_line = 0; - - -#ifdef MULTIPROCESSOR - db_printf("db{%ld}> ", (long)cpu_number()); -#else - db_printf("db> "); -#endif - (void) db_read_line(); - db_command(&db_last_command, db_command_table); - } - - db_recover = savejmp; -} - -void -db_error(s) - char *s; -{ - if (s) - db_printf("%s", s); - db_flush_lex(); - longjmp(db_recover); + uvmexp_print(db_printf); } - /* * Call random function: * !expr(arg,arg,arg) */ /*ARGSUSED*/ -void -db_fncall(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +static void +db_fncall(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { db_expr_t fn_addr; #define MAXARGS 11 db_expr_t args[MAXARGS]; int nargs = 0; db_expr_t retval; - db_expr_t (*func) __P((db_expr_t, ...)); + db_expr_t (*func)(db_expr_t, ...); int t; if (!db_expression(&fn_addr)) { - db_printf("Bad function\n"); - db_flush_lex(); - return; + db_printf("Bad function\n"); + db_flush_lex(); + return; } - func = (db_expr_t (*) __P((db_expr_t, ...))) fn_addr; + func = (db_expr_t (*)(db_expr_t, ...)) fn_addr; t = db_read_token(); if (t == tLPAREN) { - if (db_expression(&args[0])) { - nargs++; - while ((t = db_read_token()) == tCOMMA) { - if (nargs == MAXARGS) { - db_printf("Too many arguments\n"); - db_flush_lex(); - return; - } - if (!db_expression(&args[nargs])) { - db_printf("Argument missing\n"); + if (db_expression(&args[0])) { + nargs++; + while ((t = db_read_token()) == tCOMMA) { + if (nargs == MAXARGS) { + db_printf("Too many arguments\n"); + db_flush_lex(); + return; + } + if (!db_expression(&args[nargs])) { + db_printf("Argument missing\n"); + db_flush_lex(); + return; + } + nargs++; + } + db_unread_token(t); + } + if (db_read_token() != tRPAREN) { + db_printf("?\n"); db_flush_lex(); return; - } - nargs++; } - db_unread_token(t); - } - if (db_read_token() != tRPAREN) { - db_printf("?\n"); - db_flush_lex(); - return; - } } db_skip_to_eol(); while (nargs < MAXARGS) { - args[nargs++] = 0; + args[nargs++] = 0; } retval = (*func)(args[0], args[1], args[2], args[3], args[4], @@ -660,12 +633,8 @@ db_fncall(addr, have_addr, count, modif) db_printf("%s\n", db_num_to_str(retval)); } -void -db_reboot_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +static void +db_reboot_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { db_expr_t bootflags; @@ -673,8 +642,8 @@ db_reboot_cmd(addr, have_addr, count, modif) if (!db_expression(&bootflags)) bootflags = (db_expr_t)RB_AUTOBOOT; if (db_read_token() != tEOL) { - db_error("?\n"); - /*NOTREACHED*/ + db_error("?\n"); + /*NOTREACHED*/ } /* * We are leaving DDB, never to return upward. @@ -685,12 +654,8 @@ db_reboot_cmd(addr, have_addr, count, modif) cpu_reboot((int)bootflags, NULL); } -void -db_sifting_cmd(addr, have_addr, count, omodif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * omodif; +static void +db_sifting_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { int mode, t; @@ -719,26 +684,20 @@ db_sifting_cmd(addr, have_addr, count, omodif) } } -void -db_stack_trace_cmd(addr, have_addr, count, modif) - db_expr_t addr; - boolean_t have_addr; - db_expr_t count; - char *modif; +static void +db_stack_trace_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { + if (count == -1) count = 65535; db_stack_trace_print(addr, have_addr, count, modif, db_printf); } -void -db_sync_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +static void +db_sync_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { + /* * We are leaving DDB, never to return upward. * Clear db_recover so that we can debug faults in functions diff --git a/sys/ddb/db_command.h b/sys/ddb/db_command.h index 6170ca9ef61..3d97af90494 100644 --- a/sys/ddb/db_command.h +++ b/sys/ddb/db_command.h @@ -1,27 +1,27 @@ -/* $NetBSD: db_command.h,v 1.21 2001/08/17 01:00:10 thorpej Exp $ */ +/* $NetBSD: db_command.h,v 1.22 2002/02/15 07:33:50 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -32,34 +32,17 @@ /* * Command loop declarations. */ -void db_skip_to_eol __P((void)); struct db_command; -int db_cmd_search __P((const char *, const struct db_command *, - const struct db_command **)); -void db_cmd_list __P((const struct db_command *)); -void db_command __P((const struct db_command **, const struct db_command *)); -void db_map_print_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_malloc_print_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_object_print_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_page_print_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_buf_print_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_vnode_print_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_pool_print_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_namecache_print_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_uvmexp_print_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_command_loop __P((void)); -void db_error __P((char *)); -void db_fncall __P((db_expr_t, int, db_expr_t, char *)); -void db_reboot_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_sifting_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_stack_trace_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_sync_cmd __P((db_expr_t, int, db_expr_t, char *)); -db_addr_t db_dot; /* current location */ -db_addr_t db_last_addr; /* last explicit address typed */ -db_addr_t db_prev; /* last address examined +void db_skip_to_eol(void); +void db_command_loop(void); +void db_error(char *); + +extern db_addr_t db_dot; /* current location */ +extern db_addr_t db_last_addr; /* last explicit address typed */ +extern db_addr_t db_prev; /* last address examined or written */ -db_addr_t db_next; /* next address to be examined +extern db_addr_t db_next; /* next address to be examined or written */ /* @@ -68,7 +51,7 @@ db_addr_t db_next; /* next address to be examined struct db_command { const char *name; /* command name */ /* function to call */ - void (*fcn) __P((db_expr_t, int, db_expr_t, char *)); + void (*fcn)(db_expr_t, int, db_expr_t, char *); int flag; /* extra info: */ #define CS_OWN 0x1 /* non-standard syntax */ #define CS_MORE 0x2 /* standard syntax, but may have other diff --git a/sys/ddb/db_elf.c b/sys/ddb/db_elf.c index 8703943a8c8..101e804c40f 100644 --- a/sys/ddb/db_elf.c +++ b/sys/ddb/db_elf.c @@ -1,4 +1,4 @@ -/* $NetBSD: db_elf.c,v 1.19 2001/11/15 09:48:02 lukem Exp $ */ +/* $NetBSD: db_elf.c,v 1.20 2002/02/15 07:33:50 simonb Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -38,10 +38,10 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_elf.c,v 1.19 2001/11/15 09:48:02 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_elf.c,v 1.20 2002/02/15 07:33:50 simonb Exp $"); #include <sys/param.h> -#include <sys/systm.h> +#include <sys/systm.h> #include <sys/proc.h> #include <machine/db_machdep.h> @@ -60,25 +60,24 @@ __KERNEL_RCSID(0, "$NetBSD: db_elf.c,v 1.19 2001/11/15 09:48:02 lukem Exp $"); #include <sys/exec_elf.h> -static char *db_elf_find_strtab __P((db_symtab_t *)); +static char *db_elf_find_strtab(db_symtab_t *); #define STAB_TO_SYMSTART(stab) ((Elf_Sym *)((stab)->start)) #define STAB_TO_SYMEND(stab) ((Elf_Sym *)((stab)->end)) #define STAB_TO_EHDR(stab) ((Elf_Ehdr *)((stab)->private)) #define STAB_TO_SHDR(stab, e) ((Elf_Shdr *)((stab)->private + (e)->e_shoff)) -boolean_t db_elf_sym_init __P((int, void *, void *, const char *)); -db_sym_t db_elf_lookup __P((db_symtab_t *, char *)); -db_sym_t db_elf_search_symbol __P((db_symtab_t *, db_addr_t, - db_strategy_t, db_expr_t *)); -void db_elf_symbol_values __P((db_symtab_t *, db_sym_t, - char **, db_expr_t *)); -boolean_t db_elf_line_at_pc __P((db_symtab_t *, db_sym_t, - char **, int *, db_expr_t)); -boolean_t db_elf_sym_numargs __P((db_symtab_t *, db_sym_t, int *, - char **)); -void db_elf_forall __P((db_symtab_t *, - db_forall_func_t db_forall_func, void *)); +static boolean_t db_elf_sym_init(int, void *, void *, const char *); +static db_sym_t db_elf_lookup(db_symtab_t *, char *); +static db_sym_t db_elf_search_symbol(db_symtab_t *, db_addr_t, db_strategy_t, + db_expr_t *); +static void db_elf_symbol_values(db_symtab_t *, db_sym_t, char **, + db_expr_t *); +static boolean_t db_elf_line_at_pc(db_symtab_t *, db_sym_t, char **, int *, + db_expr_t); +static boolean_t db_elf_sym_numargs(db_symtab_t *, db_sym_t, int *, char **); +static void db_elf_forall(db_symtab_t *, db_forall_func_t db_forall_func, + void *); const db_symformat_t db_symformat_elf = { "ELF", @@ -94,14 +93,15 @@ const db_symformat_t db_symformat_elf = { /* * Find the symbol table and strings; tell ddb about them. */ -boolean_t -db_elf_sym_init(symsize, symtab, esymtab, name) - int symsize; /* size of symbol table */ - void *symtab; /* pointer to start of symbol table */ - void *esymtab; /* pointer to end of string table, +static boolean_t +db_elf_sym_init( + int symsize, /* size of symbol table */ + void *symtab, /* pointer to start of symbol table */ + void *esymtab, /* pointer to end of string table, for checking - rounded up to integer boundary */ - const char *name; + const char *name +) { Elf_Ehdr *elf; Elf_Shdr *shp; @@ -160,9 +160,9 @@ db_elf_sym_init(symsize, symtab, esymtab, name) if (shp[i].sh_offset == 0) continue; /* Got the symbol table. */ - symtab_start = (Elf_Sym *)((char *)symtab + + symtab_start = (Elf_Sym *)((char *)symtab + shp[i].sh_offset); - symtab_end = (Elf_Sym *)((char *)symtab + + symtab_end = (Elf_Sym *)((char *)symtab + shp[i].sh_offset + shp[i].sh_size); /* Find the string table to go with it. */ j = shp[i].sh_link; @@ -193,8 +193,8 @@ db_elf_sym_init(symsize, symtab, esymtab, name) if (db_add_symbol_table((char *)symtab_start, (char *)symtab_end, name, (char *)symtab) != -1) { printf("[ using %lu bytes of %s ELF symbol table ]\n", - (u_long)roundup(((char *)esymtab - (char *)symtab), - sizeof(u_long)), name); + (u_long)roundup(((char *)esymtab - (char *)symtab), + sizeof(u_long)), name); return (TRUE); } @@ -210,8 +210,7 @@ db_elf_sym_init(symsize, symtab, esymtab, name) * for the current symbol table. */ static char * -db_elf_find_strtab(stab) - db_symtab_t *stab; +db_elf_find_strtab(db_symtab_t *stab) { Elf_Ehdr *elf = STAB_TO_EHDR(stab); Elf_Shdr *shp = STAB_TO_SHDR(stab, elf); @@ -236,10 +235,8 @@ db_elf_find_strtab(stab) /* * Lookup the symbol with the given name. */ -db_sym_t -db_elf_lookup(stab, symstr) - db_symtab_t *stab; - char *symstr; +static db_sym_t +db_elf_lookup(db_symtab_t *stab, char *symstr) { Elf_Sym *symp, *symtab_start, *symtab_end; char *strtab; @@ -264,12 +261,9 @@ db_elf_lookup(stab, symstr) * Search for the symbol with the given address (matching within the * provided threshold). */ -db_sym_t -db_elf_search_symbol(symtab, off, strategy, diffp) - db_symtab_t *symtab; - db_addr_t off; - db_strategy_t strategy; - db_expr_t *diffp; /* in/out */ +static db_sym_t +db_elf_search_symbol(db_symtab_t *symtab, db_addr_t off, db_strategy_t strategy, + db_expr_t *diffp) { Elf_Sym *rsymp, *symp, *symtab_start, *symtab_end; db_expr_t diff = *diffp; @@ -330,12 +324,9 @@ db_elf_search_symbol(symtab, off, strategy, diffp) /* * Return the name and value for a symbol. */ -void -db_elf_symbol_values(symtab, sym, namep, valuep) - db_symtab_t *symtab; - db_sym_t sym; - char **namep; - db_expr_t *valuep; +static void +db_elf_symbol_values(db_symtab_t *symtab, db_sym_t sym, char **namep, + db_expr_t *valuep) { Elf_Sym *symp = (Elf_Sym *)sym; char *strtab; @@ -356,7 +347,7 @@ db_elf_symbol_values(symtab, sym, namep, valuep) * Return the file and line number of the current program counter * if we can find the appropriate debugging symbol. */ -boolean_t +static boolean_t db_elf_line_at_pc(symtab, cursym, filename, linenum, off) db_symtab_t *symtab; db_sym_t cursym; @@ -375,12 +366,9 @@ db_elf_line_at_pc(symtab, cursym, filename, linenum, off) * Returns the number of arguments to a function and their * names if we can find the appropriate debugging symbol. */ -boolean_t -db_elf_sym_numargs(symtab, cursym, nargp, argnamep) - db_symtab_t *symtab; - db_sym_t cursym; - int *nargp; - char **argnamep; +static boolean_t +db_elf_sym_numargs(db_symtab_t *symtab, db_sym_t cursym, int *nargp, + char **argnamep) { /* @@ -389,11 +377,8 @@ db_elf_sym_numargs(symtab, cursym, nargp, argnamep) return (FALSE); } -void -db_elf_forall(stab, db_forall_func, arg) - db_symtab_t *stab; - db_forall_func_t db_forall_func; - void *arg; +static void +db_elf_forall(db_symtab_t *stab, db_forall_func_t db_forall_func, void *arg) { char *strtab; static char suffix[2]; diff --git a/sys/ddb/db_examine.c b/sys/ddb/db_examine.c index 8ed37675c55..1825e3d99fa 100644 --- a/sys/ddb/db_examine.c +++ b/sys/ddb/db_examine.c @@ -1,4 +1,4 @@ -/* $NetBSD: db_examine.c,v 1.22 2001/11/12 22:54:04 lukem Exp $ */ +/* $NetBSD: db_examine.c,v 1.23 2002/02/15 07:33:50 simonb Exp $ */ /* * Mach Operating System @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_examine.c,v 1.22 2001/11/12 22:54:04 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_examine.c,v 1.23 2002/02/15 07:33:50 simonb Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -46,7 +46,10 @@ __KERNEL_RCSID(0, "$NetBSD: db_examine.c,v 1.22 2001/11/12 22:54:04 lukem Exp $" #include <ddb/db_extern.h> #include <ddb/db_interface.h> -char db_examine_format[TOK_STRING_SIZE] = "x"; +static char db_examine_format[TOK_STRING_SIZE] = "x"; + +static void db_examine(db_addr_t, char *, int); +static void db_search(db_addr_t, int, db_expr_t, db_expr_t, unsigned int); /* * Examine (print) data. Syntax is: @@ -58,11 +61,7 @@ char db_examine_format[TOK_STRING_SIZE] = "x"; */ /*ARGSUSED*/ void -db_examine_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +db_examine_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { if (modif[0] != '\0') db_strcpy(db_examine_format, modif); @@ -73,11 +72,8 @@ db_examine_cmd(addr, have_addr, count, modif) db_examine((db_addr_t) addr, db_examine_format, count); } -void -db_examine(addr, fmt, count) - db_addr_t addr; - char * fmt; /* format string */ - int count; /* repeat count */ +static void +db_examine(db_addr_t addr, char *fmt, int count) { int i, c; db_expr_t value; @@ -130,19 +126,19 @@ db_examine(addr, fmt, count) db_printf("%-*lx", width, value); break; case 'm': /* hex dump */ - /* + /* * Print off in chunks of size. Try to print 16 - * bytes at a time into 4 columns. This + * bytes at a time into 4 columns. This * loops modify's count extra times in order * to get the nicely formatted lines. */ - + bytes = 0; do { for (i = 0; i < size; i++) { - value = + value = db_get_value(addr+bytes, 1, - FALSE); + FALSE); db_printf("%02lx", value); bytes++; if (!(bytes % 4)) @@ -160,7 +156,7 @@ db_examine(addr, fmt, count) db_printf("%c", (char)value); else db_printf("."); - } + } db_printf("\n"); break; case 'z': /* signed hex */ @@ -223,15 +219,11 @@ db_examine(addr, fmt, count) /* * Print value. */ -char db_print_format = 'x'; +static char db_print_format = 'x'; /*ARGSUSED*/ void -db_print_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +db_print_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { db_expr_t value; @@ -282,19 +274,18 @@ db_print_cmd(addr, have_addr, count, modif) } void -db_print_loc_and_inst(loc) - db_addr_t loc; +db_print_loc_and_inst(db_addr_t loc) { + db_printsym(loc, DB_STGY_PROC, db_printf); db_printf(":\t"); (void) db_disasm(loc, FALSE); } void -db_strcpy(dst, src) - char *dst; - char *src; +db_strcpy(char *dst, char *src) { + while ((*dst++ = *src++) != '\0') ; } @@ -305,11 +296,7 @@ db_strcpy(dst, src) */ /*ARGSUSED*/ void -db_search_cmd(daddr, have_addr, dcount, modif) - db_expr_t daddr; - int have_addr; - db_expr_t dcount; - char * modif; +db_search_cmd(db_expr_t daddr, int have_addr, db_expr_t dcount, char *modif) { int t; db_addr_t addr; @@ -373,13 +360,9 @@ db_search_cmd(daddr, have_addr, dcount, modif) db_search(addr, size, value, mask, count); } -void -db_search(addr, size, value, mask, count) - db_addr_t addr; - int size; - db_expr_t value; - db_expr_t mask; - unsigned int count; +static void +db_search(db_addr_t addr, int size, db_expr_t value, db_expr_t mask, + unsigned int count) { while (count-- != 0) { db_prev = addr; diff --git a/sys/ddb/db_expr.c b/sys/ddb/db_expr.c index 2f01244ffa3..2e694f3f0fe 100644 --- a/sys/ddb/db_expr.c +++ b/sys/ddb/db_expr.c @@ -1,27 +1,27 @@ -/* $NetBSD: db_expr.c,v 1.12 2001/11/12 22:54:05 lukem Exp $ */ +/* $NetBSD: db_expr.c,v 1.13 2002/02/15 07:33:50 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -30,212 +30,213 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_expr.c,v 1.12 2001/11/12 22:54:05 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_expr.c,v 1.13 2002/02/15 07:33:50 simonb Exp $"); #include <sys/param.h> #include <sys/proc.h> #include <machine/db_machdep.h> -#include <ddb/db_lex.h> #include <ddb/db_access.h> #include <ddb/db_command.h> -#include <ddb/db_sym.h> #include <ddb/db_extern.h> +#include <ddb/db_lex.h> +#include <ddb/db_output.h> +#include <ddb/db_sym.h> #include <ddb/db_variables.h> -boolean_t -db_term(valuep) - db_expr_t *valuep; +static boolean_t db_term(db_expr_t *); +static boolean_t db_unary(db_expr_t *); +static boolean_t db_mult_expr(db_expr_t *); +static boolean_t db_add_expr(db_expr_t *); +static boolean_t db_shift_expr(db_expr_t *); + +static boolean_t +db_term(db_expr_t *valuep) { int t; t = db_read_token(); if (t == tIDENT) { - if (!db_value_of_name(db_tok_string, valuep)) { - extern int db_radix; - db_expr_t v = 0; - int i, c, byte; - - /* See if we can make a number out of all of it */ - for (i = 0; (c = db_tok_string[i]) != '\0'; i++) { - byte = 0; - if (c >= '0' && c <= '9') - byte = c - '0'; - else if (db_radix == 16 && c >= 'a' && c <= 'f') - byte = c - 'a' + 10; - else if (db_radix == 16 && c >= 'A' && c <= 'F') - byte = c - 'A' + 10; - else - db_error("Symbol not found\n"); - /*NOTREACHED*/ - v = v * db_radix + byte; + if (!db_value_of_name(db_tok_string, valuep)) { + db_expr_t v = 0; + int i, c, byte; + + /* See if we can make a number out of all of it */ + for (i = 0; (c = db_tok_string[i]) != '\0'; i++) { + byte = 0; + if (c >= '0' && c <= '9') + byte = c - '0'; + else if (db_radix == 16 && c >= 'a' && c <= 'f') + byte = c - 'a' + 10; + else if (db_radix == 16 && c >= 'A' && c <= 'F') + byte = c - 'A' + 10; + else + db_error("Symbol not found\n"); + /*NOTREACHED*/ + v = v * db_radix + byte; + } + *valuep = (db_expr_t)v; } - *valuep = (db_expr_t)v; - } - return (TRUE); + return (TRUE); } if (t == tNUMBER) { - *valuep = (db_expr_t)db_tok_number; - return (TRUE); + *valuep = (db_expr_t)db_tok_number; + return (TRUE); } if (t == tDOT) { - *valuep = (db_expr_t)db_dot; - return (TRUE); + *valuep = (db_expr_t)db_dot; + return (TRUE); } if (t == tDOTDOT) { - *valuep = (db_expr_t)db_prev; - return (TRUE); + *valuep = (db_expr_t)db_prev; + return (TRUE); } if (t == tPLUS) { - *valuep = (db_expr_t) db_next; - return (TRUE); + *valuep = (db_expr_t) db_next; + return (TRUE); } if (t == tDITTO) { - *valuep = (db_expr_t)db_last_addr; - return (TRUE); + *valuep = (db_expr_t)db_last_addr; + return (TRUE); } if (t == tDOLLAR) { - if (!db_get_variable(valuep)) - return (FALSE); - return (TRUE); + if (!db_get_variable(valuep)) + return (FALSE); + return (TRUE); } if (t == tLPAREN) { - if (!db_expression(valuep)) { - db_error("Syntax error\n"); - /*NOTREACHED*/ - } - t = db_read_token(); - if (t != tRPAREN) { - db_error("Syntax error\n"); - /*NOTREACHED*/ - } - return (TRUE); + if (!db_expression(valuep)) { + db_error("Syntax error\n"); + /*NOTREACHED*/ + } + t = db_read_token(); + if (t != tRPAREN) { + db_error("Syntax error\n"); + /*NOTREACHED*/ + } + return (TRUE); } db_unread_token(t); return (FALSE); } -boolean_t -db_unary(valuep) - db_expr_t *valuep; +static boolean_t +db_unary(db_expr_t *valuep) { int t; t = db_read_token(); if (t == tMINUS) { - if (!db_unary(valuep)) { - db_error("Syntax error\n"); - /*NOTREACHED*/ - } - *valuep = -*valuep; - return (TRUE); + if (!db_unary(valuep)) { + db_error("Syntax error\n"); + /*NOTREACHED*/ + } + *valuep = -*valuep; + return (TRUE); } if (t == tSTAR) { - /* indirection */ - if (!db_unary(valuep)) { - db_error("Syntax error\n"); - /*NOTREACHED*/ - } - *valuep = db_get_value((db_addr_t)*valuep, sizeof(db_expr_t), - FALSE); - return (TRUE); + /* indirection */ + if (!db_unary(valuep)) { + db_error("Syntax error\n"); + /*NOTREACHED*/ + } + *valuep = db_get_value((db_addr_t)*valuep, sizeof(db_expr_t), + FALSE); + return (TRUE); } db_unread_token(t); return (db_term(valuep)); } -boolean_t -db_mult_expr(valuep) - db_expr_t *valuep; +static boolean_t +db_mult_expr(db_expr_t *valuep) { db_expr_t lhs, rhs; int t; if (!db_unary(&lhs)) - return (FALSE); + return (FALSE); t = db_read_token(); while (t == tSTAR || t == tSLASH || t == tPCT || t == tHASH) { - if (!db_term(&rhs)) { - db_error("Syntax error\n"); - /*NOTREACHED*/ - } - if (t == tSTAR) - lhs *= rhs; - else { - if (rhs == 0) { - db_error("Divide by 0\n"); - /*NOTREACHED*/ + if (!db_term(&rhs)) { + db_error("Syntax error\n"); + /*NOTREACHED*/ } - if (t == tSLASH) - lhs /= rhs; - else if (t == tPCT) - lhs %= rhs; - else - lhs = ((lhs+rhs-1)/rhs)*rhs; - } - t = db_read_token(); + if (t == tSTAR) + lhs *= rhs; + else { + if (rhs == 0) { + db_error("Divide by 0\n"); + /*NOTREACHED*/ + } + if (t == tSLASH) + lhs /= rhs; + else if (t == tPCT) + lhs %= rhs; + else + lhs = ((lhs+rhs-1)/rhs)*rhs; + } + t = db_read_token(); } db_unread_token(t); *valuep = lhs; return (TRUE); } -boolean_t -db_add_expr(valuep) - db_expr_t *valuep; +static boolean_t +db_add_expr(db_expr_t *valuep) { db_expr_t lhs, rhs; int t; if (!db_mult_expr(&lhs)) - return (FALSE); + return (FALSE); t = db_read_token(); while (t == tPLUS || t == tMINUS) { - if (!db_mult_expr(&rhs)) { - db_error("Syntax error\n"); - /*NOTREACHED*/ - } - if (t == tPLUS) - lhs += rhs; - else - lhs -= rhs; - t = db_read_token(); + if (!db_mult_expr(&rhs)) { + db_error("Syntax error\n"); + /*NOTREACHED*/ + } + if (t == tPLUS) + lhs += rhs; + else + lhs -= rhs; + t = db_read_token(); } db_unread_token(t); *valuep = lhs; return (TRUE); } -boolean_t -db_shift_expr(valuep) - db_expr_t *valuep; +static boolean_t +db_shift_expr(db_expr_t *valuep) { db_expr_t lhs, rhs; int t; if (!db_add_expr(&lhs)) - return (FALSE); + return (FALSE); t = db_read_token(); while (t == tSHIFT_L || t == tSHIFT_R) { - if (!db_add_expr(&rhs)) { - db_error("Syntax error\n"); - /*NOTREACHED*/ - } - if (rhs < 0) { - db_error("Negative shift amount\n"); - /*NOTREACHED*/ - } - if (t == tSHIFT_L) - lhs <<= rhs; - else { - /* Shift right is unsigned */ - lhs = (unsigned long) lhs >> rhs; - } - t = db_read_token(); + if (!db_add_expr(&rhs)) { + db_error("Syntax error\n"); + /*NOTREACHED*/ + } + if (rhs < 0) { + db_error("Negative shift amount\n"); + /*NOTREACHED*/ + } + if (t == tSHIFT_L) + lhs <<= rhs; + else { + /* Shift right is unsigned */ + lhs = (unsigned long) lhs >> rhs; + } + t = db_read_token(); } db_unread_token(t); *valuep = lhs; @@ -243,8 +244,8 @@ db_shift_expr(valuep) } int -db_expression(valuep) - db_expr_t *valuep; +db_expression(db_expr_t *valuep) { + return (db_shift_expr(valuep)); } diff --git a/sys/ddb/db_extern.h b/sys/ddb/db_extern.h index 35fbb7192f8..022c1a90c45 100644 --- a/sys/ddb/db_extern.h +++ b/sys/ddb/db_extern.h @@ -1,4 +1,4 @@ -/* $NetBSD: db_extern.h,v 1.7 2000/07/17 19:57:50 jeffs Exp $ */ +/* $NetBSD: db_extern.h,v 1.8 2002/02/15 07:33:50 simonb Exp $ */ /*- * Copyright (c) 1995 The NetBSD Foundation, Inc. @@ -40,44 +40,35 @@ #define _DDB_DB_EXTERN_H_ /* db_sym.c */ -void ddb_init __P((int, void *, void *)); +void ddb_init(int, void *, void *); + +/* db_command.c */ +extern int db_cmd_loop_done; /* db_examine.c */ -void db_examine_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_examine __P((db_addr_t, char *, int)); -void db_print_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_print_loc_and_inst __P((db_addr_t)); -void db_strcpy __P((char *, char *)); -void db_search_cmd __P((db_expr_t, boolean_t, db_expr_t, char *)); -void db_search __P((db_addr_t, int, db_expr_t, db_expr_t, unsigned int)); +void db_examine_cmd(db_expr_t, int, db_expr_t, char *); +void db_print_cmd(db_expr_t, int, db_expr_t, char *); +void db_print_loc_and_inst(db_addr_t); +void db_strcpy(char *, char *); +void db_search_cmd(db_expr_t, boolean_t, db_expr_t, char *); /* db_expr.c */ -boolean_t db_term __P((db_expr_t *)); -boolean_t db_unary __P((db_expr_t *)); -boolean_t db_mult_expr __P((db_expr_t *)); -boolean_t db_add_expr __P((db_expr_t *)); -boolean_t db_shift_expr __P((db_expr_t *)); -int db_expression __P((db_expr_t *)); +int db_expression(db_expr_t *); /* db_input.c */ -void db_putstring __P((char *, int)); -void db_putnchars __P((int, int)); -void db_delete __P((int, int)); -void db_delete_line __P((void)); -int db_inputchar __P((int)); -int db_readline __P((char *, int)); -void db_check_interrupt __P((void)); +int db_readline(char *, int); +void db_check_interrupt(void); /* db_print.c */ -void db_show_regs __P((db_expr_t, boolean_t, db_expr_t, char *)); +void db_show_regs(db_expr_t, boolean_t, db_expr_t, char *); /* db_trap.c */ -void db_trap(int, int); +void db_trap(int, int); /* db_write_cmd.c */ -void db_write_cmd __P((db_expr_t, boolean_t, db_expr_t, char *)); +void db_write_cmd(db_expr_t, boolean_t, db_expr_t, char *); /* Callback for MD platform code to manage watchdogs, etc. */ -void (*db_trap_callback)(int); +extern void (*db_trap_callback)(int); #endif /* _DDB_DB_EXTERN_H_ */ diff --git a/sys/ddb/db_input.c b/sys/ddb/db_input.c index c979df3383e..251ce25038c 100644 --- a/sys/ddb/db_input.c +++ b/sys/ddb/db_input.c @@ -1,27 +1,27 @@ -/* $NetBSD: db_input.c,v 1.16 2001/11/20 08:43:44 lukem Exp $ */ +/* $NetBSD: db_input.c,v 1.17 2002/02/15 07:33:51 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_input.c,v 1.16 2001/11/20 08:43:44 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_input.c,v 1.17 2002/02/15 07:33:51 simonb Exp $"); #include "opt_ddb.h" @@ -59,42 +59,45 @@ __KERNEL_RCSID(0, "$NetBSD: db_input.c,v 1.16 2001/11/20 08:43:44 lukem Exp $"); * since input always ends with a new-line. We just * reset the line position at the end. */ -char * db_lbuf_start; /* start of input line buffer */ -char * db_lbuf_end; /* end of input line buffer */ -char * db_lc; /* current character */ -char * db_le; /* one past last character */ +static char *db_lbuf_start; /* start of input line buffer */ +static char *db_lbuf_end; /* end of input line buffer */ +static char *db_lc; /* current character */ +static char *db_le; /* one past last character */ #if DDB_HISTORY_SIZE != 0 -char db_history[DDB_HISTORY_SIZE]; /* start of history buffer */ -int db_history_size = DDB_HISTORY_SIZE;/* size of history buffer */ -char * db_history_curr = db_history; /* start of current line */ -char * db_history_last = db_history; /* start of last line */ -char * db_history_prev = (char *) 0; /* start of previous line */ +static char db_history[DDB_HISTORY_SIZE]; /* start of history buffer */ +static int db_history_size = DDB_HISTORY_SIZE;/* size of history buffer */ +static char *db_history_curr = db_history; /* start of current line */ +static char *db_history_last = db_history; /* start of last line */ +static char *db_history_prev = (char *) 0; /* start of previous line */ #endif - + #define CTRL(c) ((c) & 0x1f) #define isspace(c) ((c) == ' ' || (c) == '\t') #define BLANK ' ' #define BACKUP '\b' -static int cnmaygetc __P((void)); +static int cnmaygetc(void); +static void db_putstring(char *, int); +static void db_putnchars(int, int); +static void db_delete(int, int); +static void db_delete_line(void); +static int db_inputchar(int); -void -db_putstring(s, count) - char *s; - int count; +static void +db_putstring(char *s, int count) { + while (--count >= 0) - cnputc(*s++); + cnputc(*s++); } -void -db_putnchars(c, count) - int c; - int count; +static void +db_putnchars(int c, int count) { + while (--count >= 0) - cnputc(c); + cnputc(c); } /* @@ -102,29 +105,28 @@ db_putnchars(c, count) */ #define DEL_FWD 0 #define DEL_BWD 1 -void -db_delete(n, bwd) - int n; - int bwd; +static void +db_delete(int n, int bwd) { char *p; if (bwd) { - db_lc -= n; - db_putnchars(BACKUP, n); + db_lc -= n; + db_putnchars(BACKUP, n); } for (p = db_lc; p < db_le-n; p++) { - *p = *(p+n); - cnputc(*p); + *p = *(p+n); + cnputc(*p); } db_putnchars(BLANK, n); db_putnchars(BACKUP, db_le - db_lc); db_le -= n; } -void -db_delete_line() +static void +db_delete_line(void) { + db_delete(db_le - db_lc, DEL_FWD); db_delete(db_lc - db_lbuf_start, DEL_BWD); db_le = db_lc = db_lbuf_start; @@ -132,104 +134,102 @@ db_delete_line() #if DDB_HISTORY_SIZE != 0 #define INC_DB_CURR() \ - do { \ - db_history_curr++; \ - if (db_history_curr > \ - db_history + db_history_size - 1) \ - db_history_curr = db_history; \ - } while (0) + do { \ + db_history_curr++; \ + if (db_history_curr > db_history + db_history_size - 1) \ + db_history_curr = db_history; \ + } while (0) #define DEC_DB_CURR() \ - do { \ - db_history_curr--; \ - if (db_history_curr < db_history) \ - db_history_curr = db_history + \ - db_history_size - 1; \ - } while (0) + do { \ + db_history_curr--; \ + if (db_history_curr < db_history) \ + db_history_curr = db_history + \ + db_history_size - 1; \ + } while (0) #endif - + /* returns TRUE at end-of-line */ -int -db_inputchar(c) - int c; +static int +db_inputchar(int c) { switch (c) { - case CTRL('b'): + case CTRL('b'): /* back up one character */ if (db_lc > db_lbuf_start) { - cnputc(BACKUP); - db_lc--; + cnputc(BACKUP); + db_lc--; } break; - case CTRL('f'): + case CTRL('f'): /* forward one character */ if (db_lc < db_le) { - cnputc(*db_lc); - db_lc++; + cnputc(*db_lc); + db_lc++; } break; - case CTRL('a'): + case CTRL('a'): /* beginning of line */ while (db_lc > db_lbuf_start) { - cnputc(BACKUP); - db_lc--; + cnputc(BACKUP); + db_lc--; } break; - case CTRL('e'): + case CTRL('e'): /* end of line */ while (db_lc < db_le) { - cnputc(*db_lc); - db_lc++; + cnputc(*db_lc); + db_lc++; } break; - case CTRL('h'): - case 0177: + case CTRL('h'): + case 0177: /* erase previous character */ if (db_lc > db_lbuf_start) - db_delete(1, DEL_BWD); + db_delete(1, DEL_BWD); break; - case CTRL('d'): + case CTRL('d'): /* erase next character */ if (db_lc < db_le) - db_delete(1, DEL_FWD); + db_delete(1, DEL_FWD); break; - case CTRL('k'): + case CTRL('k'): /* delete to end of line */ if (db_lc < db_le) - db_delete(db_le - db_lc, DEL_FWD); + db_delete(db_le - db_lc, DEL_FWD); break; - case CTRL('u'): + case CTRL('u'): /* delete line */ - db_delete_line(); + db_delete_line(); break; - case CTRL('t'): + case CTRL('t'): /* twiddle last 2 characters */ if (db_lc >= db_lbuf_start + 1) { - if (db_lc < db_le) { - c = db_lc[-1]; - db_lc[-1] = db_lc[0]; - db_lc[0] = c; - cnputc(BACKUP); - cnputc(db_lc[-1]); - cnputc(db_lc[0]); - db_lc++; - } else if (db_lc >= db_lbuf_start + 2) { - c = db_lc[-2]; - db_lc[-2] = db_lc[-1]; - db_lc[-1] = c; - cnputc(BACKUP); - cnputc(BACKUP); - cnputc(db_lc[-2]); - cnputc(db_lc[-1]); - } + if (db_lc < db_le) { + c = db_lc[-1]; + db_lc[-1] = db_lc[0]; + db_lc[0] = c; + cnputc(BACKUP); + cnputc(db_lc[-1]); + cnputc(db_lc[0]); + db_lc++; + } else if (db_lc >= db_lbuf_start + 2) { + c = db_lc[-2]; + db_lc[-2] = db_lc[-1]; + db_lc[-1] = c; + cnputc(BACKUP); + cnputc(BACKUP); + cnputc(db_lc[-2]); + cnputc(db_lc[-1]); + } } break; #if DDB_HISTORY_SIZE != 0 - case CTRL('p'): - DEC_DB_CURR(); - while (db_history_curr != db_history_last) { + case CTRL('p'): + DEC_DB_CURR(); + while (db_history_curr != db_history_last) { DEC_DB_CURR(); if (*db_history_curr == '\0') - break; + break; } db_delete_line(); if (db_history_curr == db_history_last) { @@ -249,10 +249,10 @@ db_inputchar(c) } db_putstring(db_lbuf_start, db_le - db_lbuf_start); break; - case CTRL('n'): - while (db_history_curr != db_history_last) { + case CTRL('n'): + while (db_history_curr != db_history_last) { if (*db_history_curr == '\0') - break; + break; INC_DB_CURR(); } if (db_history_curr != db_history_last) { @@ -274,15 +274,15 @@ db_inputchar(c) } break; #endif - case CTRL('r'): + case CTRL('r'): db_putstring("^R\n", 3); if (db_le > db_lbuf_start) { - db_putstring(db_lbuf_start, db_le - db_lbuf_start); - db_putnchars(BACKUP, db_le - db_lc); + db_putstring(db_lbuf_start, db_le - db_lbuf_start); + db_putnchars(BACKUP, db_le - db_lc); } break; - case '\n': - case '\r': + case '\n': + case '\r': #if DDB_HISTORY_SIZE != 0 /* Check if it same than previous line */ if (db_history_curr == db_history_prev) { @@ -292,7 +292,7 @@ db_inputchar(c) for (pp = db_history_prev, pc = db_lbuf_start; pc != db_le && *pp; pp++, pc++) { if (*pp != *pc) - break; + break; if (++pp == db_history + db_history_size) { pp = db_history; } @@ -323,20 +323,20 @@ db_inputchar(c) #endif *db_le++ = c; return (1); - default: + default: if (db_le == db_lbuf_end) { - cnputc('\007'); + cnputc('\007'); } else if (c >= ' ' && c <= '~') { - char *p; - - for (p = db_le; p > db_lc; p--) - *p = *(p-1); - *db_lc++ = c; - db_le++; - cnputc(c); - db_putstring(db_lc, db_le - db_lc); - db_putnchars(BACKUP, db_le - db_lc); + char *p; + + for (p = db_le; p > db_lc; p--) + *p = *(p-1); + *db_lc++ = c; + db_le++; + cnputc(c); + db_putstring(db_lc, db_le - db_lc); + db_putnchars(BACKUP, db_le - db_lc); } break; } @@ -344,9 +344,7 @@ db_inputchar(c) } int -db_readline(lstart, lsize) - char * lstart; - int lsize; +db_readline(char *lstart, int lsize) { db_force_whitespace(); /* synch output position */ @@ -356,7 +354,7 @@ db_readline(lstart, lsize) db_le = lstart; while (!db_inputchar(cngetc())) - continue; + continue; db_putchar('\n'); /* synch output position */ @@ -365,37 +363,38 @@ db_readline(lstart, lsize) } void -db_check_interrupt() +db_check_interrupt(void) { int c; c = cnmaygetc(); switch (c) { - case -1: /* no character */ + case -1: /* no character */ return; - case CTRL('c'): + case CTRL('c'): db_error((char *)0); /*NOTREACHED*/ - case CTRL('s'): + case CTRL('s'): do { - c = cnmaygetc(); - if (c == CTRL('c')) { - db_error((char *)0); - /*NOTREACHED*/ - } + c = cnmaygetc(); + if (c == CTRL('c')) { + db_error((char *)0); + /*NOTREACHED*/ + } } while (c != CTRL('q')); break; - default: + default: /* drop on floor */ break; } } static int -cnmaygetc () +cnmaygetc(void) { + return (-1); } diff --git a/sys/ddb/db_interface.h b/sys/ddb/db_interface.h index c4381bd20ad..581852ace93 100644 --- a/sys/ddb/db_interface.h +++ b/sys/ddb/db_interface.h @@ -1,4 +1,4 @@ -/* $NetBSD: db_interface.h,v 1.8 2001/11/09 06:52:23 thorpej Exp $ */ +/* $NetBSD: db_interface.h,v 1.9 2002/02/15 07:33:51 simonb Exp $ */ /*- * Copyright (c) 1995 The NetBSD Foundation, Inc. @@ -40,7 +40,7 @@ #define _DDB_DB_INTERFACE_H_ /* arch/<arch>/<arch>/db_disasm.c */ -db_addr_t db_disasm __P((db_addr_t, boolean_t)); +db_addr_t db_disasm(db_addr_t, boolean_t); /* arch/<arch>/<arch>/db_interface.c */ #ifdef DB_MACHINE_COMMANDS @@ -49,20 +49,20 @@ extern const struct db_command db_machine_command_table[]; /* arch/<arch>/<arch>/db_trace.c */ /* arch/vax/vax/db_machdep.c */ -void db_stack_trace_print __P((db_expr_t, int, db_expr_t, char *, - void (*)(const char *, ...))); +void db_stack_trace_print(db_expr_t, int, db_expr_t, char *, + void (*)(const char *, ...)); /* kern/kern_proc.c */ -void db_kill_proc __P((db_expr_t, int, db_expr_t, char *)); -void db_show_all_procs __P((db_expr_t, int, db_expr_t, char *)); +void db_kill_proc(db_expr_t, int, db_expr_t, char *); +void db_show_all_procs(db_expr_t, int, db_expr_t, char *); /* kern/kern_clock.c */ -void db_show_callout __P((db_expr_t, int, db_expr_t, char *)); +void db_show_callout(db_expr_t, int, db_expr_t, char *); /* kern/subr_log.c */ -void db_dmesg __P((db_expr_t, int, db_expr_t, char *)); +void db_dmesg(db_expr_t, int, db_expr_t, char *); /* netinet/if_arp.c */ -void db_show_arptab __P((db_expr_t, int, db_expr_t, char *)); +void db_show_arptab(db_expr_t, int, db_expr_t, char *); #endif /* _DDB_DB_INTERFACE_H_ */ diff --git a/sys/ddb/db_lex.c b/sys/ddb/db_lex.c index 884039626d4..e180cbf89e7 100644 --- a/sys/ddb/db_lex.c +++ b/sys/ddb/db_lex.c @@ -1,27 +1,27 @@ -/* $NetBSD: db_lex.c,v 1.15 2001/11/12 22:54:05 lukem Exp $ */ +/* $NetBSD: db_lex.c,v 1.16 2002/02/15 07:33:51 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_lex.c,v 1.15 2001/11/12 22:54:05 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_lex.c,v 1.16 2002/02/15 07:33:51 simonb Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -47,74 +47,82 @@ __KERNEL_RCSID(0, "$NetBSD: db_lex.c,v 1.15 2001/11/12 22:54:05 lukem Exp $"); #include <ddb/db_sym.h> #include <ddb/db_extern.h> -char db_line[120]; -char * db_lp, *db_endlp; +db_expr_t db_tok_number; +char db_tok_string[TOK_STRING_SIZE]; + +static char db_line[120]; +static char *db_lp, *db_endlp; + +static int db_look_char = 0; +static int db_look_token = 0; + +static void db_flush_line(void); +static int db_read_char(void); +static void db_unread_char(int); +static int db_lex(void); int -db_read_line() +db_read_line(void) { int i; i = db_readline(db_line, sizeof(db_line)); if (i == 0) - return (0); /* EOI */ + return (0); /* EOI */ db_lp = db_line; db_endlp = db_lp + i; return (i); } -void -db_flush_line() +static void +db_flush_line(void) { + db_lp = db_line; db_endlp = db_line; } -int db_look_char = 0; - -int -db_read_char() +static int +db_read_char(void) { int c; if (db_look_char != 0) { - c = db_look_char; - db_look_char = 0; + c = db_look_char; + db_look_char = 0; } else if (db_lp >= db_endlp) - c = -1; - else - c = *db_lp++; + c = -1; + else + c = *db_lp++; return (c); } -void -db_unread_char(c) - int c; +static void +db_unread_char(int c) { + db_look_char = c; } -int db_look_token = 0; - void -db_unread_token(t) - int t; +db_unread_token(int t) { + db_look_token = t; } int -db_read_token() +db_read_token(void) { int t; if (db_look_token) { - t = db_look_token; - db_look_token = 0; + t = db_look_token; + db_look_token = 0; } else - t = db_lex(); + t = db_lex(); return (t); } @@ -124,12 +132,11 @@ int db_radix = 16; * Convert the number to a string in the current radix. * This replaces the non-standard %n printf() format. */ - + char * -db_num_to_str(val) -db_expr_t val; +db_num_to_str(db_expr_t val) { - /* + /* * 2 chars for "0x", 1 for a sign ("-") * up to 21 chars for a 64-bit number: * % echo 2^64 | bc | wc -c @@ -149,164 +156,161 @@ db_expr_t val; } void -db_flush_lex() +db_flush_lex(void) { + db_flush_line(); db_look_char = 0; db_look_token = 0; } -int -db_lex() +static int +db_lex(void) { int c; c = db_read_char(); while (c <= ' ' || c > '~') { - if (c == '\n' || c == -1) - return (tEOL); - c = db_read_char(); + if (c == '\n' || c == -1) + return (tEOL); + c = db_read_char(); } if (c >= '0' && c <= '9') { - /* number */ - db_expr_t r, digit = 0; + /* number */ + db_expr_t r, digit = 0; - if (c > '0') - r = db_radix; - else { - c = db_read_char(); - if (c == 'O' || c == 'o') - r = 8; - else if (c == 'T' || c == 't') - r = 10; - else if (c == 'X' || c == 'x') - r = 16; + if (c > '0') + r = db_radix; else { - r = db_radix; - db_unread_char(c); + c = db_read_char(); + if (c == 'O' || c == 'o') + r = 8; + else if (c == 'T' || c == 't') + r = 10; + else if (c == 'X' || c == 'x') + r = 16; + else { + r = db_radix; + db_unread_char(c); + } + c = db_read_char(); } - c = db_read_char(); - } - db_tok_number = 0; - for (;;) { - if (c >= '0' && c <= ((r == 8) ? '7' : '9')) - digit = c - '0'; - else if (r == 16 && ((c >= 'A' && c <= 'F') || - (c >= 'a' && c <= 'f'))) { - if (c >= 'a') - digit = c - 'a' + 10; - else if (c >= 'A') - digit = c - 'A' + 10; + db_tok_number = 0; + for (;;) { + if (c >= '0' && c <= ((r == 8) ? '7' : '9')) + digit = c - '0'; + else if (r == 16 && ((c >= 'A' && c <= 'F') || + (c >= 'a' && c <= 'f'))) { + if (c >= 'a') + digit = c - 'a' + 10; + else if (c >= 'A') + digit = c - 'A' + 10; + } + else + break; + db_tok_number = db_tok_number * r + digit; + c = db_read_char(); } - else - break; - db_tok_number = db_tok_number * r + digit; - c = db_read_char(); - } - if ((c >= '0' && c <= '9') || - (c >= 'A' && c <= 'Z') || - (c >= 'a' && c <= 'z') || - (c == '_')) - { - db_error("Bad character in number\n"); - /*NOTREACHED*/ - } - db_unread_char(c); - return (tNUMBER); + if ((c >= '0' && c <= '9') || + (c >= 'A' && c <= 'Z') || + (c >= 'a' && c <= 'z') || + (c == '_')) { + db_error("Bad character in number\n"); + /*NOTREACHED*/ + } + db_unread_char(c); + return (tNUMBER); } if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || - c == '_' || c == '\\') - { - /* string */ - char *cp; + c == '_' || c == '\\') { + /* string */ + char *cp; - cp = db_tok_string; - if (c == '\\') { - c = db_read_char(); - if (c == '\n' || c == -1) { - db_error("Bad escape\n"); - /*NOTREACHED*/ - } - } - *cp++ = c; - while (1) { - c = db_read_char(); - if ((c >= 'A' && c <= 'Z') || - (c >= 'a' && c <= 'z') || - (c >= '0' && c <= '9') || - c == '_' || c == '\\' || c == ':') - { - if (c == '\\') { + cp = db_tok_string; + if (c == '\\') { c = db_read_char(); if (c == '\n' || c == -1) { - db_error("Bad escape\n"); - /*NOTREACHED*/ + db_error("Bad escape\n"); + /*NOTREACHED*/ } - } - *cp++ = c; - if (cp == db_tok_string+sizeof(db_tok_string)) { - db_error("String too long\n"); - /*NOTREACHED*/ - } - continue; } - else { - *cp = '\0'; - break; + *cp++ = c; + while (1) { + c = db_read_char(); + if ((c >= 'A' && c <= 'Z') || + (c >= 'a' && c <= 'z') || + (c >= '0' && c <= '9') || + c == '_' || c == '\\' || c == ':') { + if (c == '\\') { + c = db_read_char(); + if (c == '\n' || c == -1) { + db_error("Bad escape\n"); + /*NOTREACHED*/ + } + } + *cp++ = c; + if (cp == db_tok_string+sizeof(db_tok_string)) { + db_error("String too long\n"); + /*NOTREACHED*/ + } + continue; + } else { + *cp = '\0'; + break; + } } - } - db_unread_char(c); - return (tIDENT); + db_unread_char(c); + return (tIDENT); } switch (c) { - case '+': + case '+': return (tPLUS); - case '-': + case '-': return (tMINUS); - case '.': + case '.': c = db_read_char(); if (c == '.') - return (tDOTDOT); + return (tDOTDOT); db_unread_char(c); return (tDOT); - case '*': + case '*': return (tSTAR); - case '/': + case '/': return (tSLASH); - case '=': + case '=': return (tEQ); - case '%': + case '%': return (tPCT); - case '#': + case '#': return (tHASH); - case '(': + case '(': return (tLPAREN); - case ')': + case ')': return (tRPAREN); - case ',': + case ',': return (tCOMMA); - case '"': + case '"': return (tDITTO); - case '$': + case '$': return (tDOLLAR); - case '!': + case '!': return (tEXCL); - case '<': + case '<': c = db_read_char(); if (c == '<') - return (tSHIFT_L); + return (tSHIFT_L); db_unread_char(c); break; - case '>': + case '>': c = db_read_char(); if (c == '>') - return (tSHIFT_R); + return (tSHIFT_R); db_unread_char(c); break; - case -1: + case -1: return (tEOF); } db_printf("Bad character\n"); diff --git a/sys/ddb/db_lex.h b/sys/ddb/db_lex.h index 0a39a98becc..d8e535aad22 100644 --- a/sys/ddb/db_lex.h +++ b/sys/ddb/db_lex.h @@ -1,27 +1,27 @@ -/* $NetBSD: db_lex.h,v 1.12 2000/06/06 05:06:25 jhawk Exp $ */ +/* $NetBSD: db_lex.h,v 1.13 2002/02/15 07:33:51 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -32,19 +32,15 @@ /* * Lexical analyzer. */ -int db_read_line __P((void)); -void db_flush_line __P((void)); -int db_read_char __P((void)); -void db_unread_char __P((int)); -void db_unread_token __P((int)); -int db_read_token __P((void)); -char *db_num_to_str __P((db_expr_t)); -void db_flush_lex __P((void)); -int db_lex __P((void)); +void db_flush_lex(void); +char *db_num_to_str(db_expr_t); +int db_read_line(void); +int db_read_token(void); +void db_unread_token(int); -db_expr_t db_tok_number; -#define TOK_STRING_SIZE 120 -char db_tok_string[TOK_STRING_SIZE]; +extern db_expr_t db_tok_number; +#define TOK_STRING_SIZE 120 +extern char db_tok_string[]; #define tEOF (-1) #define tEOL 1 @@ -67,7 +63,3 @@ char db_tok_string[TOK_STRING_SIZE]; #define tSHIFT_L 18 #define tSHIFT_R 19 #define tDOTDOT 20 - - - - diff --git a/sys/ddb/db_output.c b/sys/ddb/db_output.c index 92c84433f5d..4c1a00b467d 100644 --- a/sys/ddb/db_output.c +++ b/sys/ddb/db_output.c @@ -1,27 +1,27 @@ -/* $NetBSD: db_output.c,v 1.26 2001/11/12 22:54:05 lukem Exp $ */ +/* $NetBSD: db_output.c,v 1.27 2002/02/15 07:33:51 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. */ @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_output.c,v 1.26 2001/11/12 22:54:05 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_output.c,v 1.27 2002/02/15 07:33:51 simonb Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -72,67 +72,67 @@ __KERNEL_RCSID(0, "$NetBSD: db_output.c,v 1.26 2001/11/12 22:54:05 lukem Exp $") #define DB_MIN_MAX_LINE 3 /* minimum max line */ #define CTRL(c) ((c) & 0xff) -int db_output_position = 0; /* output column */ -int db_output_line = 0; /* output line number */ -int db_last_non_space = 0; /* last non-space character */ -int db_tab_stop_width = 8; /* how wide are tab stops? */ -int db_max_line = DB_MAX_LINE; /* output max lines */ -int db_max_width = DB_MAX_WIDTH; /* output line width */ +int db_output_line = 0; /* output line number */ +int db_tab_stop_width = 8; /* how wide are tab stops? */ +int db_max_line = DB_MAX_LINE; /* output max lines */ +int db_max_width = DB_MAX_WIDTH; /* output line width */ + +static int db_output_position = 0; /* output column */ +static int db_last_non_space = 0; /* last non-space character */ -static void db_more __P((void)); +static void db_more(void); /* * Force pending whitespace. */ void -db_force_whitespace() +db_force_whitespace(void) { int last_print, next_tab; last_print = db_last_non_space; while (last_print < db_output_position) { - next_tab = DB_NEXT_TAB(last_print); - if (next_tab <= db_output_position) { - while (last_print < next_tab) { /* DON'T send a tab!!! */ + next_tab = DB_NEXT_TAB(last_print); + if (next_tab <= db_output_position) { + while (last_print < next_tab) { /* DON'T send a tab!! */ + cnputc(' '); + last_print++; + } + } else { cnputc(' '); last_print++; } - } - else { - cnputc(' '); - last_print++; - } } db_last_non_space = db_output_position; } static void -db_more() +db_more(void) { char *p; int quit_output = 0; for (p = "--db_more--"; *p; p++) - cnputc(*p); + cnputc(*p); switch(cngetc()) { case ' ': - db_output_line = 0; - break; + db_output_line = 0; + break; case 'q': case CTRL('c'): - db_output_line = 0; - quit_output = 1; - break; + db_output_line = 0; + quit_output = 1; + break; default: - db_output_line--; - break; + db_output_line--; + break; } p = "\b\b\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b\b\b"; while (*p) - cnputc(*p++); + cnputc(*p++); if (quit_output) { - db_error(0); - /* NOTREACHED */ + db_error(0); + /* NOTREACHED */ } } @@ -140,49 +140,44 @@ db_more() * Output character. Buffer whitespace. */ void -db_putchar(c) - int c; /* character to output */ +db_putchar(int c) { if (db_max_line >= DB_MIN_MAX_LINE && db_output_line >= db_max_line-1) - db_more(); + db_more(); if (c > ' ' && c <= '~') { - /* - * Printing character. - * If we have spaces to print, print them first. - * Use tabs if possible. - */ - db_force_whitespace(); - cnputc(c); - db_output_position++; - if (db_max_width >= DB_MIN_MAX_WIDTH - && db_output_position >= db_max_width) { - /* auto new line */ - cnputc('\n'); + /* + * Printing character. + * If we have spaces to print, print them first. + * Use tabs if possible. + */ + db_force_whitespace(); + cnputc(c); + db_output_position++; + if (db_max_width >= DB_MIN_MAX_WIDTH + && db_output_position >= db_max_width) { + /* auto new line */ + cnputc('\n'); + db_output_position = 0; + db_last_non_space = 0; + db_output_line++; + } + db_last_non_space = db_output_position; + } else if (c == '\n') { + /* Return */ + cnputc(c); db_output_position = 0; db_last_non_space = 0; db_output_line++; - } - db_last_non_space = db_output_position; - } - else if (c == '\n') { - /* Return */ - cnputc(c); - db_output_position = 0; - db_last_non_space = 0; - db_output_line++; - db_check_interrupt(); - } - else if (c == '\t') { - /* assume tabs every 8 positions */ - db_output_position = DB_NEXT_TAB(db_output_position); - } - else if (c == ' ') { - /* space */ - db_output_position++; - } - else if (c == '\007') { - /* bell */ - cnputc(c); + db_check_interrupt(); + } else if (c == '\t') { + /* assume tabs every 8 positions */ + db_output_position = DB_NEXT_TAB(db_output_position); + } else if (c == ' ') { + /* space */ + db_output_position++; + } else if (c == '\007') { + /* bell */ + cnputc(c); } /* other characters are assumed non-printing */ } @@ -191,8 +186,9 @@ db_putchar(c) * Return output position */ int -db_print_position() +db_print_position(void) { + return (db_output_position); } @@ -200,21 +196,18 @@ db_print_position() * End line if too long. */ void -db_end_line() +db_end_line(void) { + if (db_output_position >= db_max_width) - db_printf("\n"); + db_printf("\n"); } /* * Replacement for old '%r' kprintf format. */ void -db_format_radix(buf, bufsiz, val, altflag) - char *buf; - size_t bufsiz; - quad_t val; - int altflag; +db_format_radix(char *buf, size_t bufsiz, quad_t val, int altflag) { const char *fmt; @@ -240,11 +233,7 @@ db_format_radix(buf, bufsiz, val, altflag) * Replacement for old '%z' kprintf format. */ void -db_format_hex(buf, bufsiz, val, altflag) - char *buf; - size_t bufsiz; - quad_t val; - int altflag; +db_format_hex(char *buf, size_t bufsiz, quad_t val, int altflag) { /* Only use alternate form if val is nonzero. */ const char *fmt = (altflag && val) ? "-%#qx" : "-%qx"; diff --git a/sys/ddb/db_output.h b/sys/ddb/db_output.h index 5904cb887e7..a50fa6d60a9 100644 --- a/sys/ddb/db_output.h +++ b/sys/ddb/db_output.h @@ -1,27 +1,27 @@ -/* $NetBSD: db_output.h,v 1.15 2000/08/09 19:51:46 tv Exp $ */ +/* $NetBSD: db_output.h,v 1.16 2002/02/15 07:33:51 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -32,19 +32,20 @@ /* * Printing routines for kernel debugger. */ -void db_force_whitespace __P((void)); -void db_putchar __P((int)); -int db_print_position __P((void)); -void db_printf __P((const char *, ...)) - __attribute__((__format__(__printf__,1,2))); -void db_format_radix __P((char *, size_t, quad_t, int)); -void db_format_hex __P((char *, size_t, quad_t, int)); -void db_end_line __P((void)); +void db_force_whitespace(void); +void db_putchar(int); +int db_print_position(void); +void db_printf(const char *, ...) + __attribute__((__format__(__printf__,1,2))); +void db_format_radix(char *, size_t, quad_t, int); +void db_format_hex(char *, size_t, quad_t, int); +void db_end_line(void); -extern int db_radix; +extern int db_max_line; extern int db_max_width; +extern int db_output_line; +extern int db_radix; extern int db_tab_stop_width; -extern int db_max_line; #define DB_NEXT_TAB(i) \ ((((i) + db_tab_stop_width) / db_tab_stop_width) * db_tab_stop_width) diff --git a/sys/ddb/db_print.c b/sys/ddb/db_print.c index 24340bd9209..a624b15b030 100644 --- a/sys/ddb/db_print.c +++ b/sys/ddb/db_print.c @@ -1,27 +1,27 @@ -/* $NetBSD: db_print.c,v 1.17 2001/11/12 22:54:06 lukem Exp $ */ +/* $NetBSD: db_print.c,v 1.18 2002/02/15 07:33:52 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_print.c,v 1.17 2001/11/12 22:54:06 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_print.c,v 1.18 2002/02/15 07:33:52 simonb Exp $"); #include <sys/param.h> #include <sys/proc.h> @@ -49,34 +49,29 @@ __KERNEL_RCSID(0, "$NetBSD: db_print.c,v 1.17 2001/11/12 22:54:06 lukem Exp $"); /*ARGSUSED*/ void -db_show_regs(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +db_show_regs(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { const struct db_variable *regp; struct db_variable vs; - db_expr_t value, offset; - char * name; + db_expr_t value, offset; + char *name; for (regp = db_regs; regp < db_eregs; regp++) { - vs = *regp; - vs.modif = modif; - db_read_variable(&vs, &value); - db_printf("%-12s%s", vs.name, db_num_to_str(value)); - db_find_xtrn_sym_and_offset((db_addr_t)value, &name, &offset); - if (name != 0 && offset <= db_maxoff && offset != value) { - db_printf("\t%s", name); - if (offset != 0) { - char tbuf[24]; + vs = *regp; + vs.modif = modif; + db_read_variable(&vs, &value); + db_printf("%-12s%s", vs.name, db_num_to_str(value)); + db_find_xtrn_sym_and_offset((db_addr_t)value, &name, &offset); + if (name != 0 && offset <= db_maxoff && offset != value) { + db_printf("\t%s", name); + if (offset != 0) { + char tbuf[24]; - db_format_radix(tbuf, 24, offset, TRUE); - db_printf("+%s", tbuf); + db_format_radix(tbuf, 24, offset, TRUE); + db_printf("+%s", tbuf); + } } - } - db_printf("\n"); + db_printf("\n"); } db_print_loc_and_inst(PC_REGS(DDB_REGS)); } - diff --git a/sys/ddb/db_run.c b/sys/ddb/db_run.c index 66ac050e25e..1d8f939cf18 100644 --- a/sys/ddb/db_run.c +++ b/sys/ddb/db_run.c @@ -1,27 +1,27 @@ -/* $NetBSD: db_run.c,v 1.21 2001/11/12 22:54:06 lukem Exp $ */ +/* $NetBSD: db_run.c,v 1.22 2002/02/15 07:33:52 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1993-1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_run.c,v 1.21 2001/11/12 22:54:06 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_run.c,v 1.22 2002/02/15 07:33:52 simonb Exp $"); #include "opt_ddb.h" @@ -47,9 +47,13 @@ __KERNEL_RCSID(0, "$NetBSD: db_run.c,v 1.21 2001/11/12 22:54:06 lukem Exp $"); #include <ddb/db_access.h> #include <ddb/db_break.h> +int db_inst_count; +int db_load_count; +int db_store_count; + #ifdef SOFTWARE_SSTEP -static void db_set_temp_breakpoint __P((db_breakpoint_t, db_addr_t)); -static void db_delete_temp_breakpoint __P((db_breakpoint_t)); +static void db_set_temp_breakpoint(db_breakpoint_t, db_addr_t); +static void db_delete_temp_breakpoint(db_breakpoint_t); static struct db_breakpoint db_not_taken_bkpt; static struct db_breakpoint db_taken_bkpt; #endif @@ -61,7 +65,7 @@ static struct db_breakpoint db_taken_bkpt; #include <ddb/db_sym.h> #include <ddb/db_extern.h> -int db_run_mode; +static int db_run_mode; #define STEP_NONE 0 #define STEP_ONCE 1 #define STEP_RETURN 2 @@ -70,14 +74,12 @@ int db_run_mode; #define STEP_INVISIBLE 5 #define STEP_COUNT 6 -boolean_t db_sstep_print; -int db_loop_count; -int db_call_depth; +static boolean_t db_sstep_print; +static int db_loop_count; +static int db_call_depth; boolean_t -db_stop_at_pc(regs, is_breakpoint) - db_regs_t *regs; - boolean_t *is_breakpoint; +db_stop_at_pc(db_regs_t *regs, boolean_t *is_breakpoint) { db_addr_t pc; db_breakpoint_t bkpt; @@ -113,11 +115,11 @@ db_stop_at_pc(regs, is_breakpoint) */ bkpt = db_find_breakpoint_here(pc); if (bkpt) { - if (--bkpt->count == 0) { - bkpt->count = bkpt->init_count; - *is_breakpoint = TRUE; - return (TRUE); /* stop here */ - } + if (--bkpt->count == 0) { + bkpt->count = bkpt->init_count; + *is_breakpoint = TRUE; + return (TRUE); /* stop here */ + } } else if (*is_breakpoint) { #ifdef PC_ADVANCE PC_ADVANCE(regs); @@ -125,149 +127,140 @@ db_stop_at_pc(regs, is_breakpoint) PC_REGS(regs) += BKPT_SIZE; #endif } - + *is_breakpoint = FALSE; if (db_run_mode == STEP_INVISIBLE) { - db_run_mode = STEP_CONTINUE; - return (FALSE); /* continue */ + db_run_mode = STEP_CONTINUE; + return (FALSE); /* continue */ } if (db_run_mode == STEP_COUNT) { - return (FALSE); /* continue */ + return (FALSE); /* continue */ } if (db_run_mode == STEP_ONCE) { - if (--db_loop_count > 0) { - if (db_sstep_print) { - db_printf("\t\t"); - db_print_loc_and_inst(pc); - db_printf("\n"); + if (--db_loop_count > 0) { + if (db_sstep_print) { + db_printf("\t\t"); + db_print_loc_and_inst(pc); + db_printf("\n"); + } + return (FALSE); /* continue */ } - return (FALSE); /* continue */ - } } if (db_run_mode == STEP_RETURN) { - db_expr_t ins = db_get_value(pc, sizeof(int), FALSE); - - /* continue until matching return */ - - if (!inst_trap_return(ins) && - (!inst_return(ins) || --db_call_depth != 0)) { - if (db_sstep_print) { - if (inst_call(ins) || inst_return(ins)) { - int i; - - db_printf("[after %6d] ", db_inst_count); - for (i = db_call_depth; --i > 0; ) - db_printf(" "); - db_print_loc_and_inst(pc); - db_printf("\n"); - } + db_expr_t ins = db_get_value(pc, sizeof(int), FALSE); + + /* continue until matching return */ + + if (!inst_trap_return(ins) && + (!inst_return(ins) || --db_call_depth != 0)) { + if (db_sstep_print) { + if (inst_call(ins) || inst_return(ins)) { + int i; + + db_printf("[after %6d] ", + db_inst_count); + for (i = db_call_depth; --i > 0; ) + db_printf(" "); + db_print_loc_and_inst(pc); + db_printf("\n"); + } + } + if (inst_call(ins)) + db_call_depth++; + return (FALSE); /* continue */ } - if (inst_call(ins)) - db_call_depth++; - return (FALSE); /* continue */ - } } if (db_run_mode == STEP_CALLT) { - db_expr_t ins = db_get_value(pc, sizeof(int), FALSE); + db_expr_t ins = db_get_value(pc, sizeof(int), FALSE); - /* continue until call or return */ + /* continue until call or return */ - if (!inst_call(ins) && - !inst_return(ins) && - !inst_trap_return(ins)) { - return (FALSE); /* continue */ - } + if (!inst_call(ins) && + !inst_return(ins) && + !inst_trap_return(ins)) { + return (FALSE); /* continue */ + } } db_run_mode = STEP_NONE; return (TRUE); } void -db_restart_at_pc(regs, watchpt) - db_regs_t *regs; - boolean_t watchpt; +db_restart_at_pc(db_regs_t *regs, boolean_t watchpt) { db_addr_t pc = PC_REGS(regs); +#ifdef SOFTWARE_SSTEP + db_addr_t brpc; +#endif if ((db_run_mode == STEP_COUNT) || (db_run_mode == STEP_RETURN) || (db_run_mode == STEP_CALLT)) { - db_expr_t ins; + db_expr_t ins; - /* - * We are about to execute this instruction, - * so count it now. - */ - ins = db_get_value(pc, sizeof(int), FALSE); - db_inst_count++; - db_load_count += inst_load(ins); - db_store_count += inst_store(ins); + /* + * We are about to execute this instruction, + * so count it now. + */ + ins = db_get_value(pc, sizeof(int), FALSE); + db_inst_count++; + db_load_count += inst_load(ins); + db_store_count += inst_store(ins); #ifdef SOFTWARE_SSTEP - /* - * Account for instructions in delay slots. - */ - { - db_addr_t brpc; - + /* + * Account for instructions in delay slots. + */ brpc = next_instr_address(pc, TRUE); if ((brpc != pc) && (inst_branch(ins) || inst_call(ins) || inst_return(ins))) { - ins = db_get_value(brpc, sizeof(int), FALSE); - db_inst_count++; - db_load_count += inst_load(ins); - db_store_count += inst_store(ins); + ins = db_get_value(brpc, sizeof(int), FALSE); + db_inst_count++; + db_load_count += inst_load(ins); + db_store_count += inst_store(ins); } - } #endif } if (db_run_mode == STEP_CONTINUE) { - if (watchpt || db_find_breakpoint_here(pc)) { - /* - * Step over breakpoint/watchpoint. - */ - db_run_mode = STEP_INVISIBLE; - db_set_single_step(regs); - } else { - db_set_breakpoints(); - db_set_watchpoints(); - } + if (watchpt || db_find_breakpoint_here(pc)) { + /* + * Step over breakpoint/watchpoint. + */ + db_run_mode = STEP_INVISIBLE; + db_set_single_step(regs); + } else { + db_set_breakpoints(); + db_set_watchpoints(); + } } else { - db_set_single_step(regs); + db_set_single_step(regs); } } void -db_single_step(regs) - db_regs_t *regs; +db_single_step(db_regs_t *regs) { + if (db_run_mode == STEP_CONTINUE) { - db_run_mode = STEP_INVISIBLE; - db_set_single_step(regs); + db_run_mode = STEP_INVISIBLE; + db_set_single_step(regs); } } - -extern int db_cmd_loop_done; - /* single-step */ /*ARGSUSED*/ void -db_single_step_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +db_single_step_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { - boolean_t print = FALSE; + boolean_t print = FALSE; if (count == -1) - count = 1; + count = 1; if (modif[0] == 'p') - print = TRUE; + print = TRUE; db_run_mode = STEP_ONCE; db_loop_count = count; @@ -282,16 +275,13 @@ db_single_step_cmd(addr, have_addr, count, modif) /* trace and print until call/return */ /*ARGSUSED*/ void -db_trace_until_call_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +db_trace_until_call_cmd(db_expr_t addr, int have_addr, db_expr_t count, + char *modif) { - boolean_t print = FALSE; + boolean_t print = FALSE; if (modif[0] == 'p') - print = TRUE; + print = TRUE; db_run_mode = STEP_CALLT; db_sstep_print = print; @@ -304,16 +294,13 @@ db_trace_until_call_cmd(addr, have_addr, count, modif) /*ARGSUSED*/ void -db_trace_until_matching_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +db_trace_until_matching_cmd(db_expr_t addr, int have_addr, db_expr_t count, + char *modif) { - boolean_t print = FALSE; + boolean_t print = FALSE; if (modif[0] == 'p') - print = TRUE; + print = TRUE; db_run_mode = STEP_RETURN; db_call_depth = 1; @@ -328,16 +315,13 @@ db_trace_until_matching_cmd(addr, have_addr, count, modif) /* continue */ /*ARGSUSED*/ void -db_continue_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +db_continue_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { + if (modif[0] == 'c') - db_run_mode = STEP_COUNT; + db_run_mode = STEP_COUNT; else - db_run_mode = STEP_CONTINUE; + db_run_mode = STEP_CONTINUE; db_inst_count = 0; db_load_count = 0; db_store_count = 0; @@ -377,7 +361,7 @@ db_continue_cmd(addr, have_addr, count, modif) * If one of these addresses does not already have a breakpoint, * we allocate a breakpoint and save it here. * These breakpoints are deleted on return. - */ + */ #if !defined(DDB) /* XXX - don't check for existing breakpoints in KGDB-only case */ @@ -385,8 +369,7 @@ db_continue_cmd(addr, have_addr, count, modif) #endif void -db_set_single_step(regs) - db_regs_t *regs; +db_set_single_step(db_regs_t *regs) { db_addr_t pc = PC_REGS(regs), brpc = pc; boolean_t unconditional; @@ -439,8 +422,7 @@ db_set_single_step(regs) } void -db_clear_single_step(regs) - db_regs_t *regs; +db_clear_single_step(db_regs_t *regs) { if (db_taken_bkpt.address != 0) @@ -451,9 +433,7 @@ db_clear_single_step(regs) } void -db_set_temp_breakpoint(bkpt, addr) - db_breakpoint_t bkpt; - db_addr_t addr; +db_set_temp_breakpoint(db_breakpoint_t bkpt, db_addr_t addr) { bkpt->map = NULL; @@ -467,11 +447,10 @@ db_set_temp_breakpoint(bkpt, addr) } void -db_delete_temp_breakpoint(bkpt) - db_breakpoint_t bkpt; +db_delete_temp_breakpoint(db_breakpoint_t bkpt) { + db_put_value(bkpt->address, BKPT_SIZE, bkpt->bkpt_inst); bkpt->address = 0; } - #endif /* SOFTWARE_SSTEP */ diff --git a/sys/ddb/db_run.h b/sys/ddb/db_run.h index bf94c35c1e8..ff739eaac5a 100644 --- a/sys/ddb/db_run.h +++ b/sys/ddb/db_run.h @@ -1,27 +1,27 @@ -/* $NetBSD: db_run.h,v 1.6 2001/02/15 21:59:38 cgd Exp $ */ +/* $NetBSD: db_run.h,v 1.7 2002/02/15 07:33:52 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -35,22 +35,22 @@ /* * Commands to run process. */ -int db_inst_count; -int db_load_count; -int db_store_count; +extern int db_inst_count; +extern int db_load_count; +extern int db_store_count; -boolean_t db_stop_at_pc __P((db_regs_t *, boolean_t *)); -void db_restart_at_pc __P((db_regs_t *, boolean_t)); -void db_single_step __P((db_regs_t *)); +boolean_t db_stop_at_pc(db_regs_t *, boolean_t *); +void db_restart_at_pc(db_regs_t *, boolean_t); +void db_single_step(db_regs_t *); #ifndef db_set_single_step -void db_set_single_step __P((db_regs_t *)); +void db_set_single_step(db_regs_t *); #endif #ifndef db_clear_single_step -void db_clear_single_step __P((db_regs_t *)); +void db_clear_single_step(db_regs_t *); #endif -void db_single_step_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_trace_until_call_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_trace_until_matching_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_continue_cmd __P((db_expr_t, int, db_expr_t, char *)); +void db_single_step_cmd(db_expr_t, int, db_expr_t, char *); +void db_trace_until_call_cmd(db_expr_t, int, db_expr_t, char *); +void db_trace_until_matching_cmd(db_expr_t, int, db_expr_t, char *); +void db_continue_cmd(db_expr_t, int, db_expr_t, char *); #endif /* _DDB_DB_RUN_ */ diff --git a/sys/ddb/db_sym.c b/sys/ddb/db_sym.c index a1d6a2c25b5..19426caa216 100644 --- a/sys/ddb/db_sym.c +++ b/sys/ddb/db_sym.c @@ -1,33 +1,33 @@ -/* $NetBSD: db_sym.c,v 1.30 2002/01/05 20:09:52 jhawk Exp $ */ +/* $NetBSD: db_sym.c,v 1.31 2002/02/15 07:33:52 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_sym.c,v 1.30 2002/01/05 20:09:52 jhawk Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_sym.c,v 1.31 2002/02/15 07:33:52 simonb Exp $"); #include "opt_ddb.h" @@ -54,7 +54,7 @@ __KERNEL_RCSID(0, "$NetBSD: db_sym.c,v 1.30 2002/01/05 20:09:52 jhawk Exp $"); #define MAXNOSYMTABS MAXLKMS+1 /* Room for kernel + LKM's */ #endif -db_symtab_t db_symtabs[MAXNOSYMTABS] = {{0,},}; +static db_symtab_t db_symtabs[MAXNOSYMTABS] = {{0,},}; db_symtab_t *db_last_symtab; @@ -65,13 +65,16 @@ char db_symtab[SYMTAB_SPACE] = SYMTAB_FILLER; int db_symtabsize = SYMTAB_SPACE; #endif -static char *db_qualify __P((db_sym_t, const char *)); +static char *db_qualify(db_sym_t, const char *); +static boolean_t db_line_at_pc(db_sym_t, char **, int *, db_expr_t); +static db_sym_t db_lookup(char *); + static db_forall_func_t db_sift; /* * Put the most picky symbol table formats at the top! */ -const db_symformat_t * const db_symformats[] = { +static const db_symformat_t * const db_symformats[] = { #ifdef DB_ELF_SYMBOLS &db_symformat_elf, #endif @@ -83,18 +86,17 @@ const db_symformat_t * const db_symformats[] = { const db_symformat_t *db_symformat; -boolean_t X_db_sym_init __P((int, void *, void *, const char *)); -db_sym_t X_db_lookup __P((db_symtab_t *, char *)); -db_sym_t X_db_search_symbol __P((db_symtab_t *, db_addr_t, - db_strategy_t, db_expr_t *)); -void X_db_symbol_values __P((db_symtab_t *, db_sym_t, char **, - db_expr_t *)); -boolean_t X_db_line_at_pc __P((db_symtab_t *, db_sym_t, char **, - int *, db_expr_t)); -int X_db_sym_numargs __P((db_symtab_t *, db_sym_t, int *, - char **)); -void X_db_forall __P((db_symtab_t *, - db_forall_func_t db_forall_func, void *)); +static boolean_t X_db_sym_init(int, void *, void *, const char *); +static db_sym_t X_db_lookup(db_symtab_t *, char *); +static db_sym_t X_db_search_symbol(db_symtab_t *, db_addr_t, db_strategy_t, + db_expr_t *); +static void X_db_symbol_values(db_symtab_t *, db_sym_t, char **, + db_expr_t *); +static boolean_t X_db_line_at_pc(db_symtab_t *, db_sym_t, char **, int *, + db_expr_t); +static int X_db_sym_numargs(db_symtab_t *, db_sym_t, int *, char **); +static void X_db_forall(db_symtab_t *, db_forall_func_t db_forall_func, + void *); /* * Initialize the kernel debugger by initializing the master symbol @@ -102,9 +104,7 @@ void X_db_forall __P((db_symtab_t *, * no other symbol tables can be loaded. */ void -ddb_init(symsize, vss, vse) - int symsize; - void *vss, *vse; +ddb_init(int symsize, void *vss, void *vse) { const db_symformat_t * const *symf; const char *name = "netbsd"; @@ -150,11 +150,7 @@ ddb_init(symsize, vss, vse) * Add symbol table, with given name, to list of symbol tables. */ int -db_add_symbol_table(start, end, name, ref) - char *start; - char *end; - const char *name; - char *ref; +db_add_symbol_table(char *start, char *end, const char *name, char *ref) { int slot; @@ -179,8 +175,7 @@ db_add_symbol_table(start, end, name, ref) * Delete a symbol table. Caller is responsible for freeing storage. */ void -db_del_symbol_table(name) - char *name; +db_del_symbol_table(char *name) { int slot; @@ -207,12 +202,10 @@ db_del_symbol_table(name) * overwritten by each call... but in practice this seems okay. */ static char * -db_qualify(sym, symtabname) - db_sym_t sym; - const char *symtabname; +db_qualify(db_sym_t sym, const char *symtabname) { char *symname; - static char tmp[256]; + static char tmp[256]; char *s; db_symbol_values(sym, &symname, 0); @@ -227,28 +220,24 @@ db_qualify(sym, symtabname) boolean_t -db_eqname(src, dst, c) - char *src; - char *dst; - int c; +db_eqname(char *src, char *dst, int c) { + if (!strcmp(src, dst)) - return (TRUE); + return (TRUE); if (src[0] == c) - return (!strcmp(src+1,dst)); + return (!strcmp(src+1,dst)); return (FALSE); } boolean_t -db_value_of_name(name, valuep) - char *name; - db_expr_t *valuep; +db_value_of_name(char *name, db_expr_t *valuep) { db_sym_t sym; sym = db_lookup(name); if (sym == DB_SYM_NULL) - return (FALSE); + return (FALSE); db_symbol_values(sym, &name, valuep); return (TRUE); } @@ -260,9 +249,8 @@ db_value_of_name(name, valuep) * then only the specified symbol table will be searched; * otherwise, all symbol tables will be searched. */ -db_sym_t -db_lookup(symstr) - char *symstr; +static db_sym_t +db_lookup(char *symstr) { db_sym_t sp; int i; @@ -298,7 +286,7 @@ db_lookup(symstr) * Return on first match. */ for (i = symtab_start; i < symtab_end; i++) { - if (db_symtabs[i].name && + if (db_symtabs[i].name && (sp = X_db_lookup(&db_symtabs[i], symstr))) { db_last_symtab = &db_symtabs[i]; return sp; @@ -319,13 +307,8 @@ struct db_sift_args { * criteria. */ static void -db_sift(stab, sym, name, suffix, prefix, arg) - db_symtab_t *stab; - db_sym_t sym; - char *name; - char *suffix; - int prefix; - void *arg; +db_sift(db_symtab_t *stab, db_sym_t sym, char *name, char *suffix, int prefix, + void *arg) { char c, sc; char *find, *p; @@ -336,7 +319,7 @@ db_sift(stab, sym, name, suffix, prefix, arg) find = dsa->symstr; /* String we're looking for. */ p = name; /* String we're searching within. */ - + /* Matching algorithm cribbed from strstr(), which is not in the kernel. */ if ((c = *find++) != 0) { @@ -364,9 +347,7 @@ db_sift(stab, sym, name, suffix, prefix, arg) * "mode" is how-to-display, set from modifiers. */ void -db_sifting(symstr, mode) - char *symstr; - int mode; +db_sifting(char *symstr, int mode) { char *cp; int i; @@ -422,8 +403,7 @@ db_sifting(symstr, mode) boolean_t db_qualify_ambiguous_names = FALSE; boolean_t -db_symbol_is_ambiguous(sym) - db_sym_t sym; +db_symbol_is_ambiguous(db_sym_t sym) { char *sym_name; int i; @@ -449,10 +429,7 @@ db_symbol_is_ambiguous(sym) * and the difference between val and the symbol found. */ db_sym_t -db_search_symbol( val, strategy, offp) - db_addr_t val; - db_strategy_t strategy; - db_expr_t *offp; +db_search_symbol(db_addr_t val, db_strategy_t strategy, db_expr_t *offp) { unsigned int diff; db_expr_t newdiff; @@ -462,14 +439,15 @@ db_search_symbol( val, strategy, offp) newdiff = diff = ~0; db_last_symtab = 0; for (i = 0; i < MAXNOSYMTABS; i++) { - if (!db_symtabs[i].name) - continue; - sym = X_db_search_symbol(&db_symtabs[i], val, strategy, &newdiff); - if (newdiff < diff) { - db_last_symtab = &db_symtabs[i]; - diff = newdiff; - ret = sym; - } + if (!db_symtabs[i].name) + continue; + sym = X_db_search_symbol(&db_symtabs[i], val, strategy, + &newdiff); + if (newdiff < diff) { + db_last_symtab = &db_symtabs[i]; + diff = newdiff; + ret = sym; + } } *offp = diff; return ret; @@ -479,10 +457,7 @@ db_search_symbol( val, strategy, offp) * Return name and value of a symbol */ void -db_symbol_values(sym, namep, valuep) - db_sym_t sym; - char **namep; - db_expr_t *valuep; +db_symbol_values(db_sym_t sym, char **namep, db_expr_t *valuep) { db_expr_t value; @@ -523,10 +498,7 @@ unsigned long db_lastsym = (unsigned long)end; unsigned int db_maxoff = 0x10000000; void -db_symstr(buf, off, strategy) - char *buf; - db_expr_t off; - db_strategy_t strategy; +db_symstr(char *buf, db_expr_t off, db_strategy_t strategy) { db_expr_t d; char *filename; @@ -558,10 +530,8 @@ db_symstr(buf, off, strategy) } void -db_printsym(off, strategy, pr) - db_expr_t off; - db_strategy_t strategy; - void (*pr) __P((const char *, ...)); +db_printsym(db_expr_t off, db_strategy_t strategy, + void (*pr)(const char *, ...)) { db_expr_t d; char *filename; @@ -593,30 +563,22 @@ db_printsym(off, strategy, pr) } -boolean_t -db_line_at_pc( sym, filename, linenum, pc) - db_sym_t sym; - char **filename; - int *linenum; - db_expr_t pc; +static boolean_t +db_line_at_pc(db_sym_t sym, char **filename, int *linenum, db_expr_t pc) { + return X_db_line_at_pc( db_last_symtab, sym, filename, linenum, pc); } int -db_sym_numargs(sym, nargp, argnames) - db_sym_t sym; - int *nargp; - char **argnames; +db_sym_numargs(db_sym_t sym, int *nargp, char **argnames) { + return X_db_sym_numargs(db_last_symtab, sym, nargp, argnames); } -boolean_t -X_db_sym_init(symsize, vss, vse, name) - int symsize; - void *vss, *vse; - const char *name; +static boolean_t +X_db_sym_init(int symsize, void *vss, void *vse, const char *name) { if (db_symformat != NULL) @@ -624,10 +586,8 @@ X_db_sym_init(symsize, vss, vse, name) return (FALSE); } -db_sym_t -X_db_lookup(stab, symstr) - db_symtab_t *stab; - char *symstr; +static db_sym_t +X_db_lookup(db_symtab_t *stab, char *symstr) { if (db_symformat != NULL) @@ -635,12 +595,9 @@ X_db_lookup(stab, symstr) return ((db_sym_t)0); } -db_sym_t -X_db_search_symbol(stab, off, strategy, diffp) - db_symtab_t *stab; - db_addr_t off; - db_strategy_t strategy; - db_expr_t *diffp; +static db_sym_t +X_db_search_symbol(db_symtab_t *stab, db_addr_t off, db_strategy_t strategy, + db_expr_t *diffp) { if (db_symformat != NULL) @@ -649,25 +606,18 @@ X_db_search_symbol(stab, off, strategy, diffp) return ((db_sym_t)0); } -void -X_db_symbol_values(stab, sym, namep, valuep) - db_symtab_t *stab; - db_sym_t sym; - char **namep; - db_expr_t *valuep; +static void +X_db_symbol_values(db_symtab_t *stab, db_sym_t sym, char **namep, + db_expr_t *valuep) { - if (db_symformat != NULL) + if (db_symformat != NULL) (*db_symformat->sym_value)(stab, sym, namep, valuep); } -boolean_t -X_db_line_at_pc(stab, cursym, filename, linenum, off) - db_symtab_t *stab; - db_sym_t cursym; - char **filename; - int *linenum; - db_expr_t off; +static boolean_t +X_db_line_at_pc(db_symtab_t *stab, db_sym_t cursym, char **filename, + int *linenum, db_expr_t off) { if (db_symformat != NULL) @@ -676,12 +626,9 @@ X_db_line_at_pc(stab, cursym, filename, linenum, off) return (FALSE); } -boolean_t -X_db_sym_numargs(stab, cursym, nargp, argnamep) - db_symtab_t *stab; - db_sym_t cursym; - int *nargp; - char **argnamep; +static boolean_t +X_db_sym_numargs(db_symtab_t *stab, db_sym_t cursym, int *nargp, + char **argnamep) { if (db_symformat != NULL) @@ -690,12 +637,10 @@ X_db_sym_numargs(stab, cursym, nargp, argnamep) return (FALSE); } -void -X_db_forall(stab, db_forall_func, arg) - db_symtab_t *stab; - db_forall_func_t db_forall_func; - void *arg; +static void +X_db_forall(db_symtab_t *stab, db_forall_func_t db_forall_func, void *arg) { + if (db_symformat != NULL) (*db_symformat->sym_forall)(stab, db_forall_func, arg); } diff --git a/sys/ddb/db_sym.h b/sys/ddb/db_sym.h index 85ae8a72b9e..e1e1db19b3b 100644 --- a/sys/ddb/db_sym.h +++ b/sys/ddb/db_sym.h @@ -1,27 +1,27 @@ -/* $NetBSD: db_sym.h,v 1.15 2002/01/05 20:09:52 jhawk Exp $ */ +/* $NetBSD: db_sym.h,v 1.16 2002/02/15 07:33:53 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -73,26 +73,25 @@ typedef int db_strategy_t; /* search strategy */ * in a.out), and arg an opaque argument to be passed in. */ typedef void (db_forall_func_t) - __P((db_symtab_t *, db_sym_t, char *, char *, int, void *)); + (db_symtab_t *, db_sym_t, char *, char *, int, void *); /* * A symbol table may be in one of many formats. All symbol tables * must be of the same format as the master kernel symbol table. */ typedef struct { - const char *sym_format; - boolean_t (*sym_init) __P((int, void *, void *, const char *)); - db_sym_t (*sym_lookup) __P((db_symtab_t *, char *)); - db_sym_t (*sym_search) __P((db_symtab_t *, db_addr_t, db_strategy_t, - db_expr_t *)); - void (*sym_value) __P((db_symtab_t *, db_sym_t, char **, - db_expr_t *)); - boolean_t (*sym_line_at_pc) __P((db_symtab_t *, db_sym_t, - char **, int *, db_expr_t)); - boolean_t (*sym_numargs) __P((db_symtab_t *, db_sym_t, int *, - char **)); - void (*sym_forall) __P((db_symtab_t *, - db_forall_func_t *db_forall_func, void *)); + const char *sym_format; + boolean_t (*sym_init)(int, void *, void *, const char *); + db_sym_t (*sym_lookup)(db_symtab_t *, char *); + db_sym_t (*sym_search)(db_symtab_t *, db_addr_t, db_strategy_t, + db_expr_t *); + void (*sym_value)(db_symtab_t *, db_sym_t, char **, + db_expr_t *); + boolean_t (*sym_line_at_pc)(db_symtab_t *, db_sym_t, char **, + int *, db_expr_t); + boolean_t (*sym_numargs)(db_symtab_t *, db_sym_t, int *, char **); + void (*sym_forall)(db_symtab_t *, + db_forall_func_t *db_forall_func, void *); } db_symformat_t; extern boolean_t db_qualify_ambiguous_names; @@ -101,32 +100,31 @@ extern boolean_t db_qualify_ambiguous_names; * Might slow down quite a bit */ extern unsigned int db_maxoff; /* like gdb's "max-symbolic-offset" */ + /* * Functions exported by the symtable module */ -int db_add_symbol_table __P((char *, char *, const char *, char *)); +int db_add_symbol_table(char *, char *, const char *, char *); /* extend the list of symbol tables */ -void db_del_symbol_table __P((char *)); +void db_del_symbol_table(char *); /* remove a symbol table from list */ -boolean_t db_eqname __P((char *, char *, int)); +boolean_t db_eqname(char *, char *, int); /* strcmp, modulo leading char */ -int db_value_of_name __P((char *, db_expr_t *)); +int db_value_of_name(char *, db_expr_t *); /* find symbol value given name */ -db_sym_t db_lookup __P((char *)); - -void db_sifting __P((char *, int)); +void db_sifting(char *, int); /* print partially matching symbol names */ -boolean_t db_symbol_is_ambiguous __P((db_sym_t)); +boolean_t db_symbol_is_ambiguous(db_sym_t); -db_sym_t db_search_symbol __P((db_addr_t, db_strategy_t, db_expr_t *)); +db_sym_t db_search_symbol(db_addr_t, db_strategy_t, db_expr_t *); /* find symbol given value */ -void db_symbol_values __P((db_sym_t, char **, db_expr_t *)); +void db_symbol_values(db_sym_t, char **, db_expr_t *); /* return name and value of symbol */ #define db_find_sym_and_offset(val,namep,offp) \ @@ -137,13 +135,12 @@ void db_symbol_values __P((db_sym_t, char **, db_expr_t *)); db_symbol_values(db_search_symbol(val,DB_STGY_XTRN,offp),namep,0) /* ditto, but no locals */ -void db_symstr(char *, db_expr_t, db_strategy_t); -void db_printsym __P((db_expr_t, db_strategy_t, void(*)(const char *, ...))); +void db_symstr(char *, db_expr_t, db_strategy_t); +void db_printsym(db_expr_t, db_strategy_t, + void(*)(const char *, ...)); /* print closest symbol to a value */ -boolean_t db_line_at_pc __P((db_sym_t, char **, int *, db_expr_t)); - -int db_sym_numargs __P((db_sym_t, int *, char **)); +int db_sym_numargs(db_sym_t, int *, char **); #ifdef DB_AOUT_SYMBOLS extern const db_symformat_t db_symformat_aout; diff --git a/sys/ddb/db_trap.c b/sys/ddb/db_trap.c index c2ba22e0ad3..05b9737765b 100644 --- a/sys/ddb/db_trap.c +++ b/sys/ddb/db_trap.c @@ -1,27 +1,27 @@ -/* $NetBSD: db_trap.c,v 1.18 2001/11/12 22:54:07 lukem Exp $ */ +/* $NetBSD: db_trap.c,v 1.19 2002/02/15 07:33:53 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_trap.c,v 1.18 2001/11/12 22:54:07 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_trap.c,v 1.19 2002/02/15 07:33:53 simonb Exp $"); #include <sys/param.h> #include <sys/proc.h> @@ -55,8 +55,7 @@ __KERNEL_RCSID(0, "$NetBSD: db_trap.c,v 1.18 2001/11/12 22:54:07 lukem Exp $"); void (*db_trap_callback)(int); void -db_trap(type, code) - int type, code; +db_trap(int type, int code) { boolean_t bkpt; boolean_t watchpt; @@ -67,32 +66,34 @@ db_trap(type, code) if (db_trap_callback) db_trap_callback(1); if (db_stop_at_pc(DDB_REGS, &bkpt)) { - if (db_inst_count) { - db_printf("After %d instructions (%d loads, %d stores),\n", - db_inst_count, db_load_count, db_store_count); - } - if (curproc != NULL) { - if (bkpt) - db_printf("Breakpoint"); + if (db_inst_count) { + db_printf("After %d instructions " + "(%d loads, %d stores),\n", + db_inst_count, db_load_count, db_store_count); + } + if (curproc != NULL) { + if (bkpt) + db_printf("Breakpoint"); + else if (watchpt) + db_printf("Watchpoint"); + else + db_printf("Stopped"); + db_printf(" in pid %d (%s) at\t", curproc->p_pid, + curproc->p_comm); + } else if (bkpt) + db_printf("Breakpoint at\t"); else if (watchpt) - db_printf("Watchpoint"); + db_printf("Watchpoint at\t"); else - db_printf("Stopped"); - db_printf(" in pid %d (%s) at\t", curproc->p_pid, - curproc->p_comm); - } else if (bkpt) - db_printf("Breakpoint at\t"); - else if (watchpt) - db_printf("Watchpoint at\t"); - else - db_printf("Stopped at\t"); - db_dot = PC_REGS(DDB_REGS); - db_print_loc_and_inst(db_dot); + db_printf("Stopped at\t"); + db_dot = PC_REGS(DDB_REGS); + db_print_loc_and_inst(db_dot); - db_command_loop(); + db_command_loop(); } db_restart_at_pc(DDB_REGS, watchpt); - if (db_trap_callback) db_trap_callback(0); + if (db_trap_callback) + db_trap_callback(0); } diff --git a/sys/ddb/db_variables.c b/sys/ddb/db_variables.c index 344ce54c96b..ae87a3001f6 100644 --- a/sys/ddb/db_variables.c +++ b/sys/ddb/db_variables.c @@ -1,33 +1,33 @@ -/* $NetBSD: db_variables.c,v 1.23 2001/11/20 08:43:44 lukem Exp $ */ +/* $NetBSD: db_variables.c,v 1.24 2002/02/15 07:33:53 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_variables.c,v 1.23 2001/11/20 08:43:44 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_variables.c,v 1.24 2002/02/15 07:33:53 simonb Exp $"); #include "opt_ddb.h" @@ -65,9 +65,9 @@ int db_onpanic = DDB_ONPANIC; #endif int db_fromconsole = DDB_FROMCONSOLE; - -static int db_rw_internal_variable __P((const struct db_variable *, - db_expr_t *, int)); +static int db_rw_internal_variable(const struct db_variable *, db_expr_t *, + int); +static int db_find_variable(const struct db_variable **); /* XXX must all be ints for sysctl. */ const struct db_variable db_vars[] = { @@ -85,17 +85,13 @@ const struct db_variable * const db_evars = db_vars + sizeof(db_vars)/sizeof(db_ * ddb command line access to the DDB variables defined above. */ static int -db_rw_internal_variable(vp, valp, rw) - const struct db_variable *vp; - db_expr_t *valp; - int rw; +db_rw_internal_variable(const struct db_variable *vp, db_expr_t *valp, int rw) { - if (rw == DB_VAR_GET) { + if (rw == DB_VAR_GET) *valp = *(int *)vp->valuep; - } else { + else *(int *)vp->valuep = *valp; - } return (0); } @@ -103,14 +99,8 @@ db_rw_internal_variable(vp, valp, rw) * sysctl(3) access to the DDB variables defined above. */ int -ddb_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p) - int *name; - u_int namelen; - void *oldp; - size_t *oldlenp; - void *newp; - size_t newlen; - struct proc *p; +ddb_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp, + size_t newlen, struct proc *p) { /* All sysctl names at this level are terminal. */ @@ -146,26 +136,25 @@ ddb_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p) } int -db_find_variable(varp) - const struct db_variable **varp; +db_find_variable(const struct db_variable **varp) { int t; const struct db_variable *vp; t = db_read_token(); if (t == tIDENT) { - for (vp = db_vars; vp < db_evars; vp++) { - if (!strcmp(db_tok_string, vp->name)) { - *varp = vp; - return (1); + for (vp = db_vars; vp < db_evars; vp++) { + if (!strcmp(db_tok_string, vp->name)) { + *varp = vp; + return (1); + } } - } - for (vp = db_regs; vp < db_eregs; vp++) { - if (!strcmp(db_tok_string, vp->name)) { - *varp = vp; - return (1); + for (vp = db_regs; vp < db_eregs; vp++) { + if (!strcmp(db_tok_string, vp->name)) { + *varp = vp; + return (1); + } } - } } db_error("Unknown variable\n"); /*NOTREACHED*/ @@ -173,13 +162,12 @@ db_find_variable(varp) } int -db_get_variable(valuep) - db_expr_t *valuep; +db_get_variable(db_expr_t *valuep) { const struct db_variable *vp; if (!db_find_variable(&vp)) - return (0); + return (0); db_read_variable(vp, valuep); @@ -187,13 +175,12 @@ db_get_variable(valuep) } int -db_set_variable(value) - db_expr_t value; +db_set_variable(db_expr_t value) { const struct db_variable *vp; if (!db_find_variable(&vp)) - return (0); + return (0); db_write_variable(vp, &value); @@ -202,38 +189,30 @@ db_set_variable(value) void -db_read_variable(vp, valuep) - const struct db_variable *vp; - db_expr_t *valuep; +db_read_variable(const struct db_variable *vp, db_expr_t *valuep) { - int (*func) __P((const struct db_variable *, db_expr_t *, int)) = vp->fcn; + int (*func)(const struct db_variable *, db_expr_t *, int) = vp->fcn; if (func == FCN_NULL) - *valuep = *(vp->valuep); + *valuep = *(vp->valuep); else - (*func)(vp, valuep, DB_VAR_GET); + (*func)(vp, valuep, DB_VAR_GET); } void -db_write_variable(vp, valuep) - const struct db_variable *vp; - db_expr_t *valuep; +db_write_variable(const struct db_variable *vp, db_expr_t *valuep) { - int (*func) __P((const struct db_variable *, db_expr_t *, int)) = vp->fcn; + int (*func)(const struct db_variable *, db_expr_t *, int) = vp->fcn; if (func == FCN_NULL) - *(vp->valuep) = *valuep; + *(vp->valuep) = *valuep; else - (*func)(vp, valuep, DB_VAR_SET); + (*func)(vp, valuep, DB_VAR_SET); } /*ARGSUSED*/ void -db_set_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +db_set_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { db_expr_t value; db_expr_t old_value; @@ -242,25 +221,25 @@ db_set_cmd(addr, have_addr, count, modif) t = db_read_token(); if (t != tDOLLAR) { - db_error("Unknown variable\n"); - /*NOTREACHED*/ + db_error("Unknown variable\n"); + /*NOTREACHED*/ } if (!db_find_variable(&vp)) { - db_error("Unknown variable\n"); - /*NOTREACHED*/ + db_error("Unknown variable\n"); + /*NOTREACHED*/ } t = db_read_token(); if (t != tEQ) - db_unread_token(t); + db_unread_token(t); if (!db_expression(&value)) { - db_error("No value\n"); - /*NOTREACHED*/ + db_error("No value\n"); + /*NOTREACHED*/ } if (db_read_token() != tEOL) { - db_error("?\n"); - /*NOTREACHED*/ + db_error("?\n"); + /*NOTREACHED*/ } db_read_variable(vp, &old_value); diff --git a/sys/ddb/db_variables.h b/sys/ddb/db_variables.h index 8add893ea63..2c8028bb19b 100644 --- a/sys/ddb/db_variables.h +++ b/sys/ddb/db_variables.h @@ -1,27 +1,27 @@ -/* $NetBSD: db_variables.h,v 1.11 2001/05/13 01:38:53 ross Exp $ */ +/* $NetBSD: db_variables.h,v 1.12 2002/02/15 07:33:54 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -39,23 +39,22 @@ struct db_variable { const char *name; /* Name of variable */ long *valuep; /* value of variable */ /* function to call when reading/writing */ - int (*fcn) __P((const struct db_variable *, db_expr_t *, int)); + int (*fcn)(const struct db_variable *, db_expr_t *, int); char *modif; #define DB_VAR_GET 0 #define DB_VAR_SET 1 }; -#define FCN_NULL ((int (*) __P((const struct db_variable *, db_expr_t *, int)))0) +#define FCN_NULL ((int (*)(const struct db_variable *, db_expr_t *, int))0) extern const struct db_variable db_vars[]; /* debugger variables */ extern const struct db_variable * const db_evars; extern const struct db_variable db_regs[]; /* machine registers */ extern const struct db_variable * const db_eregs; -int db_find_variable __P((const struct db_variable **)); -int db_get_variable __P((db_expr_t *)); -int db_set_variable __P((db_expr_t)); -void db_read_variable __P((const struct db_variable *, db_expr_t *)); -void db_write_variable __P((const struct db_variable *, db_expr_t *)); -void db_set_cmd __P((db_expr_t, int, db_expr_t, char *)); +int db_get_variable(db_expr_t *); +int db_set_variable(db_expr_t); +void db_read_variable(const struct db_variable *, db_expr_t *); +void db_write_variable(const struct db_variable *, db_expr_t *); +void db_set_cmd(db_expr_t, int, db_expr_t, char *); #endif /* _DB_VARIABLES_H_ */ diff --git a/sys/ddb/db_watch.c b/sys/ddb/db_watch.c index 913677821d2..76d6beb6521 100644 --- a/sys/ddb/db_watch.c +++ b/sys/ddb/db_watch.c @@ -1,27 +1,27 @@ -/* $NetBSD: db_watch.c,v 1.18 2001/11/12 22:54:07 lukem Exp $ */ +/* $NetBSD: db_watch.c,v 1.19 2002/02/15 07:33:54 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_watch.c,v 1.18 2001/11/12 22:54:07 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_watch.c,v 1.19 2002/02/15 07:33:54 simonb Exp $"); #include <sys/param.h> #include <sys/proc.h> @@ -51,26 +51,32 @@ __KERNEL_RCSID(0, "$NetBSD: db_watch.c,v 1.18 2001/11/12 22:54:07 lukem Exp $"); * Watchpoints. */ -boolean_t db_watchpoints_inserted = TRUE; +static boolean_t db_watchpoints_inserted = TRUE; #define NWATCHPOINTS 100 -struct db_watchpoint db_watch_table[NWATCHPOINTS]; -db_watchpoint_t db_next_free_watchpoint = &db_watch_table[0]; -db_watchpoint_t db_free_watchpoints = 0; -db_watchpoint_t db_watchpoint_list = 0; +static struct db_watchpoint db_watch_table[NWATCHPOINTS]; +static db_watchpoint_t db_next_free_watchpoint = &db_watch_table[0]; +static db_watchpoint_t db_free_watchpoints = 0; +static db_watchpoint_t db_watchpoint_list = 0; + +static void db_delete_watchpoint(struct vm_map *, db_addr_t); +static void db_list_watchpoints(void); +static void db_set_watchpoint(struct vm_map *, db_addr_t, vsize_t); +static db_watchpoint_t db_watchpoint_alloc(void); +static void db_watchpoint_free(db_watchpoint_t); db_watchpoint_t -db_watchpoint_alloc() +db_watchpoint_alloc(void) { db_watchpoint_t watch; if ((watch = db_free_watchpoints) != 0) { - db_free_watchpoints = watch->link; - return (watch); + db_free_watchpoints = watch->link; + return (watch); } if (db_next_free_watchpoint == &db_watch_table[NWATCHPOINTS]) { - db_printf("All watchpoints used.\n"); - return (0); + db_printf("All watchpoints used.\n"); + return (0); } watch = db_next_free_watchpoint; db_next_free_watchpoint++; @@ -79,44 +85,38 @@ db_watchpoint_alloc() } void -db_watchpoint_free(watch) - db_watchpoint_t watch; +db_watchpoint_free(db_watchpoint_t watch) { watch->link = db_free_watchpoints; db_free_watchpoints = watch; } void -db_set_watchpoint(map, addr, size) - struct vm_map *map; - db_addr_t addr; - vsize_t size; +db_set_watchpoint(struct vm_map *map, db_addr_t addr, vsize_t size) { db_watchpoint_t watch; if (map == NULL) { - db_printf("No map.\n"); - return; + db_printf("No map.\n"); + return; } /* * Should we do anything fancy with overlapping regions? */ - for (watch = db_watchpoint_list; - watch != 0; - watch = watch->link) - if (db_map_equal(watch->map, map) && - (watch->loaddr == addr) && - (watch->hiaddr == addr+size)) { - db_printf("Already set.\n"); - return; - } + for (watch = db_watchpoint_list; watch != 0; watch = watch->link) + if (db_map_equal(watch->map, map) && + (watch->loaddr == addr) && + (watch->hiaddr == addr+size)) { + db_printf("Already set.\n"); + return; + } watch = db_watchpoint_alloc(); if (watch == 0) { - db_printf("Too many watchpoints.\n"); - return; + db_printf("Too many watchpoints.\n"); + return; } watch->map = map; @@ -129,10 +129,8 @@ db_set_watchpoint(map, addr, size) db_watchpoints_inserted = FALSE; } -void -db_delete_watchpoint(map, addr) - struct vm_map *map; - db_addr_t addr; +static void +db_delete_watchpoint(struct vm_map *map, db_addr_t addr) { db_watchpoint_t watch; db_watchpoint_t *prev; @@ -140,65 +138,56 @@ db_delete_watchpoint(map, addr) for (prev = &db_watchpoint_list; (watch = *prev) != 0; prev = &watch->link) - if (db_map_equal(watch->map, map) && - (watch->loaddr <= addr) && - (addr < watch->hiaddr)) { - *prev = watch->link; - db_watchpoint_free(watch); - return; - } + if (db_map_equal(watch->map, map) && + (watch->loaddr <= addr) && + (addr < watch->hiaddr)) { + *prev = watch->link; + db_watchpoint_free(watch); + return; + } db_printf("Not set.\n"); } void -db_list_watchpoints() +db_list_watchpoints(void) { db_watchpoint_t watch; if (db_watchpoint_list == 0) { - db_printf("No watchpoints set\n"); - return; + db_printf("No watchpoints set\n"); + return; } db_printf(" Map Address Size\n"); - for (watch = db_watchpoint_list; - watch != 0; - watch = watch->link) - db_printf("%s%p %8lx %lx\n", - db_map_current(watch->map) ? "*" : " ", - watch->map, watch->loaddr, - watch->hiaddr - watch->loaddr); + for (watch = db_watchpoint_list; watch != 0; watch = watch->link) + db_printf("%s%p %8lx %lx\n", + db_map_current(watch->map) ? "*" : " ", + watch->map, watch->loaddr, + watch->hiaddr - watch->loaddr); } /* Delete watchpoint */ /*ARGSUSED*/ void -db_deletewatch_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +db_deletewatch_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { + db_delete_watchpoint(db_map_addr(addr), addr); } /* Set watchpoint */ /*ARGSUSED*/ void -db_watchpoint_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +db_watchpoint_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { - vsize_t size; - db_expr_t value; + vsize_t size; + db_expr_t value; if (db_expression(&value)) - size = (vsize_t) value; + size = (vsize_t) value; else - size = 4; + size = 4; db_skip_to_eol(); db_set_watchpoint(db_map_addr(addr), addr, size); @@ -207,72 +196,35 @@ db_watchpoint_cmd(addr, have_addr, count, modif) /* list watchpoints */ /*ARGSUSED*/ void -db_listwatch_cmd(addr, have_addr, count, modif) - db_expr_t addr; - int have_addr; - db_expr_t count; - char * modif; +db_listwatch_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif) { + db_list_watchpoints(); } void -db_set_watchpoints() +db_set_watchpoints(void) { db_watchpoint_t watch; if (!db_watchpoints_inserted) { - for (watch = db_watchpoint_list; - watch != 0; - watch = watch->link) { - pmap_protect(watch->map->pmap, - trunc_page(watch->loaddr), - round_page(watch->hiaddr), - VM_PROT_READ); - pmap_update(watch->map->pmap); - } - - db_watchpoints_inserted = TRUE; + for (watch = db_watchpoint_list; + watch != 0; + watch = watch->link) { + pmap_protect(watch->map->pmap, + trunc_page(watch->loaddr), + round_page(watch->hiaddr), + VM_PROT_READ); + pmap_update(watch->map->pmap); + } + + db_watchpoints_inserted = TRUE; } } void -db_clear_watchpoints() -{ - db_watchpoints_inserted = FALSE; -} - -boolean_t -db_find_watchpoint(map, addr, regs) - struct vm_map *map; - db_addr_t addr; - db_regs_t *regs; +db_clear_watchpoints(void) { - db_watchpoint_t watch; - db_watchpoint_t found = 0; - - for (watch = db_watchpoint_list; - watch != 0; - watch = watch->link) - if (db_map_equal(watch->map, map)) { - if ((watch->loaddr <= addr) && - (addr < watch->hiaddr)) - return (TRUE); - else if ((trunc_page(watch->loaddr) <= addr) && - (addr < round_page(watch->hiaddr))) - found = watch; - } - /* - * We didn't hit exactly on a watchpoint, but we are - * in a protected region. We want to single-step - * and then re-protect. - */ - - if (found) { - db_watchpoints_inserted = FALSE; - db_single_step(regs); - } - - return (FALSE); + db_watchpoints_inserted = FALSE; } diff --git a/sys/ddb/db_watch.h b/sys/ddb/db_watch.h index 93c083134bb..90ba23e2180 100644 --- a/sys/ddb/db_watch.h +++ b/sys/ddb/db_watch.h @@ -1,27 +1,27 @@ -/* $NetBSD: db_watch.h,v 1.14 2001/06/02 18:09:25 chs Exp $ */ +/* $NetBSD: db_watch.h,v 1.15 2002/02/15 07:33:54 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -42,16 +42,10 @@ typedef struct db_watchpoint { struct db_watchpoint *link; /* link in in-use or free chain */ } *db_watchpoint_t; -db_watchpoint_t db_watchpoint_alloc __P((void)); -void db_watchpoint_free __P((db_watchpoint_t)); -void db_set_watchpoint __P((struct vm_map *, db_addr_t, vsize_t)); -void db_delete_watchpoint __P((struct vm_map *, db_addr_t)); -void db_list_watchpoints __P((void)); -void db_deletewatch_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_watchpoint_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_listwatch_cmd __P((db_expr_t, int, db_expr_t, char *)); -void db_set_watchpoints __P((void)); -void db_clear_watchpoints __P((void)); -boolean_t db_find_watchpoint __P((struct vm_map *, db_addr_t, db_regs_t *)); +void db_deletewatch_cmd(db_expr_t, int, db_expr_t, char *); +void db_watchpoint_cmd(db_expr_t, int, db_expr_t, char *); +void db_listwatch_cmd(db_expr_t, int, db_expr_t, char *); +void db_set_watchpoints(void); +void db_clear_watchpoints(void); #endif /* _DDB_DB_WATCH_ */ diff --git a/sys/ddb/db_write_cmd.c b/sys/ddb/db_write_cmd.c index 4e5402b3288..f2d671ffa66 100644 --- a/sys/ddb/db_write_cmd.c +++ b/sys/ddb/db_write_cmd.c @@ -1,27 +1,27 @@ -/* $NetBSD: db_write_cmd.c,v 1.15 2001/11/12 22:54:07 lukem Exp $ */ +/* $NetBSD: db_write_cmd.c,v 1.16 2002/02/15 07:33:54 simonb Exp $ */ -/* +/* * Mach Operating System * Copyright (c) 1991,1990 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_write_cmd.c,v 1.15 2001/11/12 22:54:07 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_write_cmd.c,v 1.16 2002/02/15 07:33:54 simonb Exp $"); #include <sys/param.h> #include <sys/proc.h> @@ -49,11 +49,8 @@ __KERNEL_RCSID(0, "$NetBSD: db_write_cmd.c,v 1.15 2001/11/12 22:54:07 lukem Exp */ /*ARGSUSED*/ void -db_write_cmd(address, have_addr, count, modif) - db_expr_t address; - boolean_t have_addr; - db_expr_t count; - char * modif; +db_write_cmd(db_expr_t address, boolean_t have_addr, db_expr_t count, + char *modif) { db_addr_t addr; db_expr_t old_value; @@ -64,36 +61,36 @@ db_write_cmd(address, have_addr, count, modif) addr = (db_addr_t) address; switch (modif[0]) { - case 'b': + case 'b': size = 1; break; - case 'h': + case 'h': size = 2; break; - case 'l': - case '\0': + case 'l': + case '\0': size = 4; break; - default: + default: size = -1; db_error("Unknown size\n"); /*NOTREACHED*/ } while (db_expression(&new_value)) { - old_value = db_get_value(addr, size, FALSE); - db_printsym(addr, DB_STGY_ANY, db_printf); - db_printf("\t\t%s = ", db_num_to_str(old_value)); - db_printf("%s\n", db_num_to_str(new_value)); - db_put_value(addr, size, new_value); - addr += size; + old_value = db_get_value(addr, size, FALSE); + db_printsym(addr, DB_STGY_ANY, db_printf); + db_printf("\t\t%s = ", db_num_to_str(old_value)); + db_printf("%s\n", db_num_to_str(new_value)); + db_put_value(addr, size, new_value); + addr += size; - wrote_one = TRUE; + wrote_one = TRUE; } if (!wrote_one) { - db_error("Nothing written.\n"); - /*NOTREACHED*/ + db_error("Nothing written.\n"); + /*NOTREACHED*/ } db_next = addr; @@ -101,4 +98,3 @@ db_write_cmd(address, have_addr, count, modif) db_skip_to_eol(); } - diff --git a/sys/ddb/db_xxx.c b/sys/ddb/db_xxx.c index 0706d0b09dd..be9c2581201 100644 --- a/sys/ddb/db_xxx.c +++ b/sys/ddb/db_xxx.c @@ -1,4 +1,4 @@ -/* $NetBSD: db_xxx.c,v 1.15 2001/11/12 22:54:07 lukem Exp $ */ +/* $NetBSD: db_xxx.c,v 1.16 2002/02/15 07:33:54 simonb Exp $ */ /* * Copyright (c) 1982, 1986, 1989, 1991, 1993 @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: db_xxx.c,v 1.15 2001/11/12 22:54:07 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: db_xxx.c,v 1.16 2002/02/15 07:33:54 simonb Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -64,11 +64,7 @@ __KERNEL_RCSID(0, "$NetBSD: db_xxx.c,v 1.15 2001/11/12 22:54:07 lukem Exp $"); #include <ddb/db_extern.h> void -db_kill_proc(addr, haddr, count, modif) - db_expr_t addr; - int haddr; - db_expr_t count; - char *modif; +db_kill_proc(db_expr_t addr, int haddr, db_expr_t count, char *modif) { struct proc *p; db_expr_t pid, sig; @@ -77,7 +73,7 @@ db_kill_proc(addr, haddr, count, modif) /* What pid? */ if (!db_expression(&pid)) { db_error("pid?\n"); - /*NOTREACHED*/ + /*NOTREACHED*/ } /* What sig? */ t = db_read_token(); @@ -91,31 +87,27 @@ db_kill_proc(addr, haddr, count, modif) sig = 15; } if (db_read_token() != tEOL) { - db_error("?\n"); - /*NOTREACHED*/ + db_error("?\n"); + /*NOTREACHED*/ } p = pfind((pid_t)pid); if (p == NULL) { db_error("no such proc\n"); - /*NOTREACHED*/ + /*NOTREACHED*/ } psignal(p, (int)sig); } void -db_show_all_procs(addr, haddr, count, modif) - db_expr_t addr; - int haddr; - db_expr_t count; - char *modif; +db_show_all_procs(db_expr_t addr, int haddr, db_expr_t count, char *modif) { int i; char *mode; struct proc *p, *pp; struct timeval tv[2]; const struct proclist_desc *pd; - + if (modif[0] == 0) modif[0] = 'n'; /* default == normal mode */ @@ -127,9 +119,8 @@ db_show_all_procs(addr, haddr, count, modif) db_printf("\t/w == show process wait/emul info\n"); return; } - - switch (*mode) { + switch (*mode) { case 'a': db_printf(" PID %10s %18s %18s %18s\n", "COMMAND", "STRUCT PROC *", "UAREA *", "VMSPACE/VM_MAP"); @@ -194,14 +185,8 @@ db_show_all_procs(addr, haddr, count, modif) } void -db_show_callout(addr, haddr, count, modif) - db_expr_t addr; - int haddr; - db_expr_t count; - char *modif; +db_show_callout(db_expr_t addr, int haddr, db_expr_t count, char *modif) { - extern struct callout_queue *callwheel; - extern int callwheelsize; uint64_t hint; int i; @@ -231,11 +216,7 @@ db_show_callout(addr, haddr, count, modif) } void -db_dmesg(addr, haddr, count, modif) - db_expr_t addr; - int haddr; - db_expr_t count; - char *modif; +db_dmesg(db_expr_t addr, int haddr, db_expr_t count, char *modif) { struct kern_msgbuf *mbp; int ch, newl, skip, i; diff --git a/sys/ddb/ddbvar.h b/sys/ddb/ddbvar.h index 038133c9301..f75e6f9fd37 100644 --- a/sys/ddb/ddbvar.h +++ b/sys/ddb/ddbvar.h @@ -1,4 +1,4 @@ -/* $NetBSD: ddbvar.h,v 1.2 1998/10/29 21:22:33 jonathan Exp $ */ +/* $NetBSD: ddbvar.h,v 1.3 2002/02/15 07:33:55 simonb Exp $ */ /*- * Copyright (c) 1996, 1997 The NetBSD Foundation, Inc. @@ -46,9 +46,7 @@ extern int db_onpanic; extern int db_fromconsole; -int ddb_sysctl __P((int *, u_int, void *, size_t *, void *, size_t, - struct proc *)); - -int read_symtab_from_file __P((struct proc *,struct vnode *,const char *)); +int ddb_sysctl(int *, u_int, void *, size_t *, void *, size_t, struct proc *); +int read_symtab_from_file(struct proc *,struct vnode *,const char *); #endif /* !_DDBVAR_H_ */ |
