FreeBSD kernel kern code
|
#include <sys/cdefs.h>
#include "opt_kdb.h"
#include "opt_stack.h"
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/cons.h>
#include <sys/kdb.h>
#include <sys/kernel.h>
#include <sys/malloc.h>
#include <sys/pcpu.h>
#include <sys/proc.h>
#include <sys/sbuf.h>
#include <sys/smp.h>
#include <sys/stack.h>
#include <sys/sysctl.h>
#include <machine/kdb.h>
#include <machine/pcb.h>
Go to the source code of this file.
Macros | |
#define | KDB_BREAK_TO_DEBUGGER 0 |
#define | KDB_ALT_BREAK_TO_DEBUGGER 0 |
#define | KEY_CR 13 /* CR '\r' */ |
#define | KEY_TILDE 126 /* ~ */ |
#define | KEY_CRTLB 2 /* ^B */ |
#define | KEY_CRTLP 16 /* ^P */ |
#define | KEY_CRTLR 18 /* ^R */ |
Enumerations | |
enum | { KDB_ALT_BREAK_SEEN_NONE, KDB_ALT_BREAK_SEEN_CR, KDB_ALT_BREAK_SEEN_CR_TILDE } |
Functions | |
__FBSDID ("$BSDSUniX$") | |
KDB_BACKEND (null, NULL, NULL, NULL, NULL) | |
SET_DECLARE (kdb_dbbe_set, struct kdb_dbbe) | |
static int | kdb_sysctl_available (SYSCTL_HANDLER_ARGS) |
static int | kdb_sysctl_current (SYSCTL_HANDLER_ARGS) |
static int | kdb_sysctl_enter (SYSCTL_HANDLER_ARGS) |
static int | kdb_sysctl_panic (SYSCTL_HANDLER_ARGS) |
static int | kdb_sysctl_trap (SYSCTL_HANDLER_ARGS) |
static int | kdb_sysctl_trap_code (SYSCTL_HANDLER_ARGS) |
static | SYSCTL_NODE (_debug, OID_AUTO, kdb, CTLFLAG_RW, NULL,"KDB nodes") |
SYSCTL_PROC (_debug_kdb, OID_AUTO, available, CTLTYPE_STRING|CTLFLAG_RD, NULL, 0, kdb_sysctl_available,"A","list of available KDB backends") | |
SYSCTL_PROC (_debug_kdb, OID_AUTO, current, CTLTYPE_STRING|CTLFLAG_RW, NULL, 0, kdb_sysctl_current,"A","currently selected KDB backend") | |
SYSCTL_PROC (_debug_kdb, OID_AUTO, enter, CTLTYPE_INT|CTLFLAG_RW, NULL, 0, kdb_sysctl_enter,"I","set to enter the debugger") | |
SYSCTL_PROC (_debug_kdb, OID_AUTO, panic, CTLTYPE_INT|CTLFLAG_RW, NULL, 0, kdb_sysctl_panic,"I","set to panic the kernel") | |
SYSCTL_PROC (_debug_kdb, OID_AUTO, trap, CTLTYPE_INT|CTLFLAG_RW, NULL, 0, kdb_sysctl_trap,"I","set to cause a page fault via data access") | |
SYSCTL_PROC (_debug_kdb, OID_AUTO, trap_code, CTLTYPE_INT|CTLFLAG_RW, NULL, 0, kdb_sysctl_trap_code,"I","set to cause a page fault via code access") | |
SYSCTL_INT (_debug_kdb, OID_AUTO, break_to_debugger, CTLFLAG_RW|CTLFLAG_TUN,&kdb_break_to_debugger, 0,"Enable break to debugger") | |
TUNABLE_INT ("debug.kdb.break_to_debugger",&kdb_break_to_debugger) | |
SYSCTL_INT (_debug_kdb, OID_AUTO, alt_break_to_debugger, CTLFLAG_RW|CTLFLAG_TUN,&kdb_alt_break_to_debugger, 0,"Enable alternative break to debugger") | |
TUNABLE_INT ("debug.kdb.alt_break_to_debugger",&kdb_alt_break_to_debugger) | |
void | kdb_panic (const char *msg) |
void | kdb_reboot (void) |
int | kdb_break (void) |
static int | kdb_alt_break_state (int key, int *state) |
static int | kdb_alt_break_internal (int key, int *state, int force_gdb) |
int | kdb_alt_break (int key, int *state) |
int | kdb_alt_break_gdb (int key, int *state) |
void | kdb_backtrace (void) |
void | kdb_backtrace_thread (struct thread *td) |
int | kdb_dbbe_select (const char *name) |
void | kdb_enter (const char *why, const char *msg) |
void | kdb_init (void) |
void * | kdb_jmpbuf (jmp_buf new) |
void | kdb_reenter (void) |
struct pcb * | kdb_thr_ctx (struct thread *thr) |
struct thread * | kdb_thr_first (void) |
struct thread * | kdb_thr_from_pid (pid_t pid) |
struct thread * | kdb_thr_lookup (lwpid_t tid) |
struct thread * | kdb_thr_next (struct thread *thr) |
int | kdb_thr_select (struct thread *thr) |
int | kdb_trap (int type, int code, struct trapframe *tf) |
Variables | |
int | kdb_active = 0 |
static void * | kdb_jmpbufp = NULL |
struct kdb_dbbe * | kdb_dbbe = NULL |
static struct pcb | kdb_pcb |
struct pcb * | kdb_thrctx = NULL |
struct thread * | kdb_thread = NULL |
struct trapframe * | kdb_frame = NULL |
static int | kdb_break_to_debugger = KDB_BREAK_TO_DEBUGGER |
static int | kdb_alt_break_to_debugger = KDB_ALT_BREAK_TO_DEBUGGER |
const char *volatile | kdb_why = KDB_WHY_UNSET |
#define KDB_ALT_BREAK_TO_DEBUGGER 0 |
Definition at line 70 of file subr_kdb.c.
#define KDB_BREAK_TO_DEBUGGER 0 |
Definition at line 64 of file subr_kdb.c.
#define KEY_CR 13 /* CR '\r' */ |
Definition at line 249 of file subr_kdb.c.
Referenced by kdb_alt_break_state().
#define KEY_CRTLB 2 /* ^B */ |
Definition at line 251 of file subr_kdb.c.
Referenced by kdb_alt_break_state().
#define KEY_CRTLP 16 /* ^P */ |
Definition at line 252 of file subr_kdb.c.
Referenced by kdb_alt_break_state().
#define KEY_CRTLR 18 /* ^R */ |
Definition at line 253 of file subr_kdb.c.
Referenced by kdb_alt_break_state().
#define KEY_TILDE 126 /* ~ */ |
Definition at line 250 of file subr_kdb.c.
Referenced by kdb_alt_break_state().
anonymous enum |
Enumerator | |
---|---|
KDB_ALT_BREAK_SEEN_NONE | |
KDB_ALT_BREAK_SEEN_CR | |
KDB_ALT_BREAK_SEEN_CR_TILDE |
Definition at line 256 of file subr_kdb.c.
__FBSDID | ( | "$BSDSUniX$" | ) |
int kdb_alt_break | ( | int | key, |
int * | state | ||
) |
Definition at line 336 of file subr_kdb.c.
References kdb_alt_break_internal().
int kdb_alt_break_gdb | ( | int | key, |
int * | state | ||
) |
Definition at line 348 of file subr_kdb.c.
References kdb_alt_break_internal().
|
static |
Definition at line 308 of file subr_kdb.c.
References kdb_alt_break_state(), kdb_alt_break_to_debugger, kdb_dbbe_select(), kdb_enter(), kdb_panic(), and kdb_reboot().
Referenced by kdb_alt_break(), and kdb_alt_break_gdb().
|
static |
Definition at line 273 of file subr_kdb.c.
References KDB_ALT_BREAK_SEEN_CR, KDB_ALT_BREAK_SEEN_CR_TILDE, KDB_ALT_BREAK_SEEN_NONE, KEY_CR, KEY_CRTLB, KEY_CRTLP, KEY_CRTLR, and KEY_TILDE.
Referenced by kdb_alt_break_internal().
KDB_BACKEND | ( | null | , |
NULL | , | ||
NULL | , | ||
NULL | , | ||
NULL | |||
) |
void kdb_backtrace | ( | void | ) |
Definition at line 362 of file subr_kdb.c.
References kdb_dbbe, printf(), stack_print_ddb(), and stack_zero().
Referenced by _isitmyx(), adopt(), kdb_reenter(), kdb_switch(), malloc(), panic(), and sdt_probe_stub().
void kdb_backtrace_thread | ( | struct thread * | td | ) |
Definition at line 386 of file subr_kdb.c.
References kdb_dbbe, printf(), stack_print_ddb(), and stack_zero().
Referenced by propagate_priority().
int kdb_break | ( | void | ) |
Definition at line 263 of file subr_kdb.c.
References kdb_break_to_debugger, and kdb_enter().
int kdb_dbbe_select | ( | const char * | name | ) |
Definition at line 410 of file subr_kdb.c.
References kdb_dbbe.
Referenced by kdb_alt_break_internal(), and kdb_sysctl_current().
void kdb_enter | ( | const char * | why, |
const char * | msg | ||
) |
Definition at line 433 of file subr_kdb.c.
References kdb_active, kdb_dbbe, kdb_why, and printf().
Referenced by kdb_alt_break_internal(), kdb_break(), kdb_sysctl_enter(), panic(), and vop_strategy_pre().
void kdb_init | ( | void | ) |
Definition at line 450 of file subr_kdb.c.
References kdb_active, kdb_dbbe, and printf().
void* kdb_jmpbuf | ( | jmp_buf | new | ) |
Definition at line 485 of file subr_kdb.c.
References kdb_jmpbufp.
void kdb_panic | ( | const char * | msg | ) |
Definition at line 223 of file subr_kdb.c.
References panic(), and printf().
Referenced by kdb_alt_break_internal().
void kdb_reboot | ( | void | ) |
Definition at line 231 of file subr_kdb.c.
References printf(), and shutdown_nice().
Referenced by kdb_alt_break_internal().
void kdb_reenter | ( | void | ) |
Definition at line 495 of file subr_kdb.c.
References kdb_active, kdb_backtrace(), kdb_jmpbufp, and printf().
Referenced by kdb_switch().
|
static |
Definition at line 121 of file subr_kdb.c.
References kdb_dbbe, sbuf_delete(), sbuf_finish(), sbuf_new_for_sysctl(), and sbuf_printf().
|
static |
Definition at line 138 of file subr_kdb.c.
References buf, kdb_active, kdb_dbbe, kdb_dbbe_select(), and sysctl_handle_string().
|
static |
Definition at line 156 of file subr_kdb.c.
References kdb_active, kdb_enter(), sysctl_handle_int(), and sysctl_wire_old_buffer().
|
static |
Definition at line 174 of file subr_kdb.c.
References panic(), sysctl_handle_int(), and sysctl_wire_old_buffer().
|
static |
Definition at line 190 of file subr_kdb.c.
References sysctl_handle_int(), and sysctl_wire_old_buffer().
|
static |
Definition at line 206 of file subr_kdb.c.
References sysctl_handle_int(), and sysctl_wire_old_buffer().
struct pcb* kdb_thr_ctx | ( | struct thread * | thr | ) |
Definition at line 512 of file subr_kdb.c.
References kdb_pcb.
Referenced by kdb_thr_select().
struct thread* kdb_thr_first | ( | void | ) |
Definition at line 532 of file subr_kdb.c.
References allproc.
Referenced by kdb_thr_lookup().
struct thread* kdb_thr_from_pid | ( | pid_t | pid | ) |
Definition at line 550 of file subr_kdb.c.
References allproc.
struct thread* kdb_thr_lookup | ( | lwpid_t | tid | ) |
Definition at line 564 of file subr_kdb.c.
References kdb_thr_first(), and kdb_thr_next().
struct thread* kdb_thr_next | ( | struct thread * | thr | ) |
Definition at line 575 of file subr_kdb.c.
Referenced by kdb_thr_lookup().
int kdb_thr_select | ( | struct thread * | thr | ) |
Definition at line 592 of file subr_kdb.c.
References kdb_thr_ctx(), kdb_thrctx, and kdb_thread.
Referenced by kdb_trap().
int kdb_trap | ( | int | type, |
int | code, | ||
struct trapframe * | tf | ||
) |
Definition at line 606 of file subr_kdb.c.
References all_cpus, cngrab(), cnungrab(), kdb_active, kdb_dbbe, kdb_frame, kdb_pcb, kdb_thr_select(), and printf().
SET_DECLARE | ( | kdb_dbbe_set | , |
struct kdb_dbbe | |||
) |
SYSCTL_INT | ( | _debug_kdb | , |
OID_AUTO | , | ||
break_to_debugger | , | ||
CTLFLAG_RW| | CTLFLAG_TUN, | ||
& | kdb_break_to_debugger, | ||
0 | , | ||
"Enable break to debugger" | |||
) |
SYSCTL_INT | ( | _debug_kdb | , |
OID_AUTO | , | ||
alt_break_to_debugger | , | ||
CTLFLAG_RW| | CTLFLAG_TUN, | ||
& | kdb_alt_break_to_debugger, | ||
0 | , | ||
"Enable alternative break to debugger" | |||
) |
|
static |
SYSCTL_PROC | ( | _debug_kdb | , |
OID_AUTO | , | ||
available | , | ||
CTLTYPE_STRING| | CTLFLAG_RD, | ||
NULL | , | ||
0 | , | ||
kdb_sysctl_available | , | ||
"A" | , | ||
"list of available KDB backends" | |||
) |
SYSCTL_PROC | ( | _debug_kdb | , |
OID_AUTO | , | ||
current | , | ||
CTLTYPE_STRING| | CTLFLAG_RW, | ||
NULL | , | ||
0 | , | ||
kdb_sysctl_current | , | ||
"A" | , | ||
"currently selected KDB backend" | |||
) |
SYSCTL_PROC | ( | _debug_kdb | , |
OID_AUTO | , | ||
enter | , | ||
CTLTYPE_INT| | CTLFLAG_RW, | ||
NULL | , | ||
0 | , | ||
kdb_sysctl_enter | , | ||
"I" | , | ||
"set to enter the debugger" | |||
) |
SYSCTL_PROC | ( | _debug_kdb | , |
OID_AUTO | , | ||
panic | , | ||
CTLTYPE_INT| | CTLFLAG_RW, | ||
NULL | , | ||
0 | , | ||
kdb_sysctl_panic | , | ||
"I" | , | ||
"set to panic the kernel" | |||
) |
SYSCTL_PROC | ( | _debug_kdb | , |
OID_AUTO | , | ||
trap | , | ||
CTLTYPE_INT| | CTLFLAG_RW, | ||
NULL | , | ||
0 | , | ||
kdb_sysctl_trap | , | ||
"I" | , | ||
"set to cause a page fault via data access" | |||
) |
SYSCTL_PROC | ( | _debug_kdb | , |
OID_AUTO | , | ||
trap_code | , | ||
CTLTYPE_INT| | CTLFLAG_RW, | ||
NULL | , | ||
0 | , | ||
kdb_sysctl_trap_code | , | ||
"I" | , | ||
"set to cause a page fault via code access" | |||
) |
TUNABLE_INT | ( | "debug.kdb.break_to_debugger" | , |
& | kdb_break_to_debugger | ||
) |
TUNABLE_INT | ( | "debug.kdb.alt_break_to_debugger" | , |
& | kdb_alt_break_to_debugger | ||
) |
int kdb_active = 0 |
Definition at line 53 of file subr_kdb.c.
Referenced by __lockmgr_args(), _mtx_lock_flags(), _mtx_trylock(), _rw_rlock(), _rw_try_rlock(), _rw_try_wlock(), _rw_wlock(), _sx_slock(), _sx_try_slock(), _sx_try_xlock(), _sx_xlock(), _thread_lock_flags(), cncheckc(), cngrab(), cnputc(), cnungrab(), critical_exit(), kdb_enter(), kdb_init(), kdb_reenter(), kdb_sysctl_current(), kdb_sysctl_enter(), kdb_trap(), kern_reboot(), mi_switch(), panic(), putchar(), and witness_checkorder().
|
static |
Definition at line 74 of file subr_kdb.c.
Referenced by kdb_alt_break_internal().
|
static |
Definition at line 73 of file subr_kdb.c.
Referenced by kdb_break().
struct kdb_dbbe* kdb_dbbe = NULL |
Definition at line 55 of file subr_kdb.c.
Referenced by kdb_backtrace(), kdb_backtrace_thread(), kdb_dbbe_select(), kdb_enter(), kdb_init(), kdb_sysctl_available(), kdb_sysctl_current(), and kdb_trap().
struct trapframe* kdb_frame = NULL |
Definition at line 59 of file subr_kdb.c.
Referenced by kdb_trap().
|
static |
Definition at line 54 of file subr_kdb.c.
Referenced by kdb_jmpbuf(), and kdb_reenter().
|
static |
Definition at line 56 of file subr_kdb.c.
Referenced by kdb_thr_ctx(), and kdb_trap().
struct pcb* kdb_thrctx = NULL |
Definition at line 57 of file subr_kdb.c.
Referenced by kdb_thr_select().
struct thread* kdb_thread = NULL |
Definition at line 58 of file subr_kdb.c.
Referenced by kdb_thr_select().
const char* volatile kdb_why = KDB_WHY_UNSET |
Definition at line 118 of file subr_kdb.c.
Referenced by kdb_enter().