diff options
author | jhb <jhb@FreeBSD.org> | 2012-04-12 17:43:59 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2012-04-12 17:43:59 +0000 |
commit | 20ac4e4f812f8a1caca5d5d792b599580c95d8e4 (patch) | |
tree | 26b9e2e550fbe63d131bb05f09fe4a80cd0e9c8c /sys/sys/kdb.h | |
parent | 8840b80b150a66caf96c13d04b34664655ca1b7c (diff) | |
download | FreeBSD-src-20ac4e4f812f8a1caca5d5d792b599580c95d8e4.zip FreeBSD-src-20ac4e4f812f8a1caca5d5d792b599580c95d8e4.tar.gz |
- Extend the KDB interface to add a per-debugger callback to print a
backtrace for an arbitrary thread (rather than the calling thread).
A kdb_backtrace_thread() wrapper function uses the configured debugger
if possible, otherwise it falls back to using stack(9) if that is
available.
- Replace a direct call to db_trace_thread() in propagate_priority()
with a call to kdb_backtrace_thread() instead.
MFC after: 1 week
Diffstat (limited to 'sys/sys/kdb.h')
-rw-r--r-- | sys/sys/kdb.h | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/sys/sys/kdb.h b/sys/sys/kdb.h index 61ee097..1c0bf06 100644 --- a/sys/sys/kdb.h +++ b/sys/sys/kdb.h @@ -31,31 +31,34 @@ #include <machine/setjmp.h> +struct pcb; +struct thread; +struct trapframe; + typedef int dbbe_init_f(void); typedef void dbbe_trace_f(void); +typedef void dbbe_trace_thread_f(struct thread *); typedef int dbbe_trap_f(int, int); struct kdb_dbbe { const char *dbbe_name; dbbe_init_f *dbbe_init; dbbe_trace_f *dbbe_trace; + dbbe_trace_thread_f *dbbe_trace_thread; dbbe_trap_f *dbbe_trap; int dbbe_active; }; -#define KDB_BACKEND(name, init, trace, trap) \ +#define KDB_BACKEND(name, init, trace, trace_thread, trap) \ static struct kdb_dbbe name##_dbbe = { \ .dbbe_name = #name, \ .dbbe_init = init, \ .dbbe_trace = trace, \ + .dbbe_trace_thread = trace_thread, \ .dbbe_trap = trap \ }; \ DATA_SET(kdb_dbbe_set, name##_dbbe) -struct pcb; -struct thread; -struct trapframe; - extern int kdb_active; /* Non-zero while in debugger. */ extern int debugger_on_panic; /* enter the debugger on panic. */ extern struct kdb_dbbe *kdb_dbbe; /* Default debugger backend or NULL. */ @@ -67,6 +70,7 @@ int kdb_alt_break(int, int *); int kdb_alt_break_gdb(int, int *); int kdb_break(void); void kdb_backtrace(void); +void kdb_backtrace_thread(struct thread *); int kdb_dbbe_select(const char *); void kdb_enter(const char *, const char *); void kdb_init(void); |