Home | History | Annotate | Line # | Download | only in ddb
      1 /*	$NetBSD: db_interface.h,v 1.44 2023/11/21 14:35:01 riastradh Exp $	*/
      2 
      3 /*-
      4  * Copyright (c) 1995, 2023 The NetBSD Foundation, Inc.
      5  * All rights reserved.
      6  *
      7  * This code is derived from software contributed to The NetBSD Foundation
      8  * by Christos Zoulas.
      9  *
     10  * Redistribution and use in source and binary forms, with or without
     11  * modification, are permitted provided that the following conditions
     12  * are met:
     13  * 1. Redistributions of source code must retain the above copyright
     14  *    notice, this list of conditions and the following disclaimer.
     15  * 2. Redistributions in binary form must reproduce the above copyright
     16  *    notice, this list of conditions and the following disclaimer in the
     17  *    documentation and/or other materials provided with the distribution.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     21  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     23  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     29  * POSSIBILITY OF SUCH DAMAGE.
     30  */
     31 
     32 #ifndef _DDB_DB_INTERFACE_H_
     33 #define _DDB_DB_INTERFACE_H_
     34 
     35 /* arch/<arch>/<arch>/db_disasm.c */
     36 db_addr_t	db_disasm(db_addr_t, bool);
     37 
     38 /* arch/<arch>/<arch>/db_trace.c */
     39 /* arch/vax/vax/db_machdep.c */
     40 void		db_stack_trace_print(db_expr_t, bool, db_expr_t, const char *,
     41     void (*)(const char *, ...) __printflike(1, 2));
     42 
     43 /* ddb/db_xxx.c */
     44 void		db_kgdb_cmd(db_expr_t, bool, db_expr_t, const char *);
     45 void		db_show_files_cmd(db_expr_t, bool, db_expr_t, const char *);
     46 void		db_show_panic(db_expr_t, bool, db_expr_t, const char *);
     47 
     48 /* kern/kern_proc.c */
     49 void		db_kill_proc(db_expr_t, bool, db_expr_t, const char *);
     50 void		db_show_proc(db_expr_t, bool, db_expr_t, const char *);
     51 void		db_show_all_procs(db_expr_t, bool, db_expr_t, const char *);
     52 void		db_show_all_pools(db_expr_t, bool, db_expr_t, const char *);
     53 void		db_show_sched_qs(db_expr_t, bool, db_expr_t, const char *);
     54 
     55 /* kern/kern_timeout.c */
     56 void		db_show_callout(db_expr_t, bool, db_expr_t, const char *);
     57 
     58 /* kern/subr_log.c */
     59 void		db_dmesg(db_expr_t, bool, db_expr_t, const char *);
     60 
     61 /* net/route.c */
     62 void		db_show_routes(db_expr_t, bool, db_expr_t, const char *);
     63 
     64 /* kern/vfs_aio.c */
     65 void		db_show_aio_jobs(db_expr_t, bool, db_expr_t, const char *);
     66 
     67 /* kern/sys_mqueue.c */
     68 void		db_show_mqueue_cmd(db_expr_t, bool, db_expr_t, const char *);
     69 
     70 /* kern/kern_module.c */
     71 void		db_show_module_cmd(db_expr_t, bool, db_expr_t, const char *);
     72 
     73 /* kern/subr_vmem.c */
     74 void		db_show_all_vmems(db_expr_t, bool, db_expr_t, const char *);
     75 
     76 /* kern/subr_autoconf.c */
     77 void		db_show_all_devices(db_expr_t, bool, db_expr_t, const char *);
     78 void		db_show_all_device(db_expr_t, bool, db_expr_t, const char *);
     79 
     80 /* kern/subr_disk.c, dev/dksubr.c */
     81 void		db_show_disk(db_expr_t, bool, db_expr_t, const char *);
     82 
     83 /* kern/kern_sleepq.c */
     84 void		db_show_sleepq(db_expr_t, bool, db_expr_t, const char *);
     85 
     86 /* kern/kern_condvar.c */
     87 void		db_show_condvar(db_expr_t, bool, db_expr_t, const char *);
     88 
     89 /* kern/sys_select.c */
     90 void		db_show_selinfo(db_expr_t, bool, db_expr_t, const char *);
     91 
     92 #ifndef __HAVE_DB_STACK_TRACE_PRINT_RA
     93 #define	db_stack_trace_print_ra(ra, have_ra, addr, have_addr, c, m, pr)	      \
     94 	((void)(ra), (void)(have_ra),					      \
     95 	    db_stack_trace_print(addr, have_addr, c, m, pr))
     96 #endif
     97 
     98 /* The db_stacktrace_print macro may be overridden by an MD macro */
     99 #ifndef db_stacktrace_print
    100 #define	db_stacktrace_print(prfunc) \
    101 	db_stack_trace_print_ra(					      \
    102 	    (db_expr_t)(intptr_t)__builtin_return_address(0), true,	      \
    103 	    (db_expr_t)(intptr_t)__builtin_frame_address(0), true,	      \
    104 	    65535, "", prfunc)
    105 #endif	/* !db_stacktrace_print */
    106 
    107 #define	db_stacktrace()		db_stacktrace_print(printf);
    108 #define	db_ustacktrace()	db_stacktrace_print(uprintf);
    109 
    110 #include <sys/syslog.h>
    111 
    112 #ifdef _KERNEL
    113 
    114 static __inline__ void
    115 _db_log_wrapper(const char *fmt, ...)
    116 {
    117 	va_list ap;
    118 
    119 	va_start(ap, fmt);
    120 	vlog(LOG_INFO, fmt, ap);
    121 	va_end(ap);
    122 }
    123 
    124 #define	db_lstacktrace()	db_stacktrace_print(_db_log_wrapper);
    125 
    126 #endif
    127 
    128 #endif /* _DDB_DB_INTERFACE_H_ */
    129