ddb.h revision 36735
139297Sfenner/*-
217680Spst * Copyright (c) 1993, Garrett A. Wollman.
317680Spst * Copyright (c) 1993, University of Vermont and State Agricultural College.
417680Spst * All rights reserved.
517680Spst *
617680Spst * Redistribution and use in source and binary forms, with or without
717680Spst * modification, are permitted provided that the following conditions
817680Spst * are met:
917680Spst * 1. Redistributions of source code must retain the above copyright
1017680Spst *    notice, this list of conditions and the following disclaimer.
1117680Spst * 2. Redistributions in binary form must reproduce the above copyright
1217680Spst *    notice, this list of conditions and the following disclaimer in the
1317680Spst *    documentation and/or other materials provided with the distribution.
1417680Spst * 3. Neither the name of the University nor the names of its contributors
1517680Spst *    may be used to endorse or promote products derived from this software
1617680Spst *    without specific prior written permission.
1717680Spst *
1817680Spst * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1917680Spst * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20190207Srpaulo * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2117680Spst * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
2217680Spst * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2317680Spst * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2417680Spst * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2517680Spst * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2617680Spst * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2717680Spst * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2817680Spst * SUCH DAMAGE.
2917680Spst *
3075115Sfenner *	$Id: ddb.h,v 1.17 1998/05/19 18:42:09 phk Exp $
3117680Spst */
3275115Sfenner
3317680Spst/*
3426180Sfenner * Necessary declarations for the `ddb' kernel debugger.
3526180Sfenner */
3626180Sfenner
3726180Sfenner#ifndef _DDB_DDB_H_
3817680Spst#define	_DDB_DDB_H_
3917680Spst
4017680Spst#include <machine/db_machdep.h>		/* type definitions */
4117680Spst
4217680Spsttypedef void db_cmdfcn_t __P((db_expr_t addr, boolean_t have_addr,
4339297Sfenner			      db_expr_t count, char *modif));
4417680Spst
4517680Spst#define DB_COMMAND(cmd_name, func_name) \
46146773Ssam	DB_SET(cmd_name, func_name, db_cmd_set)
4717680Spst#define DB_SHOW_COMMAND(cmd_name, func_name) \
4817680Spst	DB_SET(cmd_name, func_name, db_show_cmd_set)
4917680Spst
5017680Spst#define DB_SET(cmd_name, func_name, set)			\
5139297Sfennerstatic db_cmdfcn_t	func_name;				\
5239297Sfenner								\
5339297Sfennerstatic const struct command __CONCAT(func_name,_cmd) = {	\
5417680Spst	__STRING(cmd_name),					\
5517680Spst	func_name,						\
5617680Spst	0,							\
5717680Spst	0,							\
5875115Sfenner};								\
5975115SfennerTEXT_SET(set, __CONCAT(func_name,_cmd));			\
60190207Srpaulo								\
6117680Spststatic void							\
6217680Spstfunc_name(addr, have_addr, count, modif)			\
6317680Spst	db_expr_t addr;						\
6417680Spst	boolean_t have_addr;					\
6517680Spst	db_expr_t count;					\
6617680Spst	char *modif;
6726180Sfenner
6817680Spstextern char *esym;
69190207Srpauloextern unsigned long db_maxoff;
70146773Ssamextern int db_indent;
71127668Sbmsextern int db_inst_count;
72127668Sbmsextern int db_load_count;
73190207Srpauloextern int db_store_count;
74190207Srpauloextern long db_radix;
75190207Srpauloextern long db_max_width;
76190207Srpauloextern long db_tab_stop_width;
77146773Ssam
78127668Sbmsstruct vm_map;
79127668Sbms
80127668Sbmsvoid		cnpollc __P((int));
81190207Srpaulovoid		db_check_interrupt __P((void));
82190207Srpaulovoid		db_clear_watchpoints __P((void));
83190207Srpaulodb_addr_t	db_disasm __P((db_addr_t loc, boolean_t altfmt));
84190207Srpaulo				/* instruction disassembler */
85172683Smlaiervoid		db_error __P((char *s));
86190207Srpauloint		db_expression __P((db_expr_t *valuep));
87190207Srpauloint		db_get_variable __P((db_expr_t *valuep));
88190207Srpaulovoid		db_iprintf __P((const char *,...));
89162017Ssamstruct vm_map	*db_map_addr __P((vm_offset_t));
90146773Ssamboolean_t	db_map_current __P((struct vm_map *));
91190207Srpauloboolean_t	db_map_equal __P((struct vm_map *, struct vm_map *));
92190207Srpaulovoid		db_print_loc_and_inst __P((db_addr_t loc));
93127668Sbmsvoid		db_printf __P((const char *fmt, ...));
9475115Sfennervoid		db_read_bytes __P((vm_offset_t addr, size_t size, char *data));
95190207Srpaulo				/* machine-dependent */
96190207Srpauloint		db_readline __P((char *lstart, int lsize));
97190207Srpaulovoid		db_restart_at_pc __P((boolean_t watchpt));
98190207Srpaulovoid		db_set_watchpoints __P((void));
9956893Sfennervoid		db_skip_to_eol __P((void));
10017680Spstboolean_t	db_stop_at_pc __P((boolean_t *is_breakpoint));
10156893Sfenner#define		db_strcpy	strcpy
10217680Spstvoid		db_trap __P((int type, int code));
103190207Srpauloint		db_value_of_name __P((char *name, db_expr_t *valuep));
10417680Spstvoid		db_write_bytes __P((vm_offset_t addr, size_t size, char *data));
10517680Spst				/* machine-dependent */
10617680Spstvoid		kdb_init __P((void));
107190207Srpaulovoid		kdbprintf __P((const char *fmt, ...));
108190207Srpaulo
109190207Srpaulodb_cmdfcn_t	db_breakpoint_cmd;
110190207Srpaulodb_cmdfcn_t	db_continue_cmd;
111190207Srpaulodb_cmdfcn_t	db_delete_cmd;
112190207Srpaulodb_cmdfcn_t	db_deletewatch_cmd;
113190207Srpaulodb_cmdfcn_t	db_examine_cmd;
114190207Srpaulodb_cmdfcn_t	db_listbreak_cmd;
115190207Srpaulodb_cmdfcn_t	db_print_cmd;
116190207Srpaulodb_cmdfcn_t	db_ps;
117190207Srpaulodb_cmdfcn_t	db_search_cmd;
118190207Srpaulodb_cmdfcn_t	db_set_cmd;
119190207Srpaulodb_cmdfcn_t	db_show_regs;
120190207Srpaulodb_cmdfcn_t	db_single_step_cmd;
121190207Srpaulodb_cmdfcn_t	db_stack_trace_cmd;
122190207Srpaulodb_cmdfcn_t	db_trace_until_call_cmd;
123190207Srpaulodb_cmdfcn_t	db_trace_until_matching_cmd;
124190207Srpaulodb_cmdfcn_t	db_watchpoint_cmd;
125190207Srpaulodb_cmdfcn_t	db_write_cmd;
126190207Srpaulo
127190207Srpaulo#if 0
128190207Srpaulodb_cmdfcn_t	db_help_cmd;
129190207Srpaulodb_cmdfcn_t	db_show_all_threads;
130190207Srpaulodb_cmdfcn_t	db_show_one_thread;
131190207Srpaulodb_cmdfcn_t	ipc_port_print;
132190207Srpaulodb_cmdfcn_t	vm_page_print;
133190207Srpaulo#endif
134190207Srpaulo
135190207Srpaulo/*
136190207Srpaulo * Command table.
137190207Srpaulo */
138190207Srpaulostruct command {
139190207Srpaulo	char *	name;		/* command name */
140190207Srpaulo	db_cmdfcn_t *fcn;	/* function to call */
141190207Srpaulo	int	flag;		/* extra info: */
142190207Srpaulo#define	CS_OWN		0x1	/* non-standard syntax */
143190207Srpaulo#define	CS_MORE		0x2	/* standard syntax, but may have other words
144190207Srpaulo				 * at end */
145190207Srpaulo#define	CS_SET_DOT	0x100	/* set dot after command */
146190207Srpaulo	struct command *more;	/* another level of command */
147190207Srpaulo};
148190207Srpaulo
149190207Srpaulo#endif /* !_DDB_DDB_H_ */
150190207Srpaulo