diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2006-11-06 11:10:57 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2006-11-06 11:10:57 +0000 |
commit | a0396f2797f300a2edf5a47f89e0075a0447fad7 (patch) | |
tree | 13df7fc93b7c7e9215f751d4578ccc66e3432d6a /sys/ddb | |
parent | fee14f30e9ba78d00e6259f720eace5498916a4a (diff) | |
download | src-a0396f2797f300a2edf5a47f89e0075a0447fad7.tar.gz src-a0396f2797f300a2edf5a47f89e0075a0447fad7.zip |
Set up the context for the dbbe_trace callback in the ddb. Otherwise,
trap caused by backtracing would lead to panic.
Noted and reviewed by: bde
Notes
Notes:
svn path=/head/; revision=164029
Diffstat (limited to 'sys/ddb')
-rw-r--r-- | sys/ddb/db_main.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/sys/ddb/db_main.c b/sys/ddb/db_main.c index d047aebcec82..c196bf73dfb6 100644 --- a/sys/ddb/db_main.c +++ b/sys/ddb/db_main.c @@ -47,8 +47,9 @@ __FBSDID("$FreeBSD$"); static dbbe_init_f db_init; static dbbe_trap_f db_trap; +static dbbe_trace_f db_trace_self_wrapper; -KDB_BACKEND(ddb, db_init, db_trace_self, db_trap); +KDB_BACKEND(ddb, db_init, db_trace_self_wrapper, db_trap); vm_offset_t ksym_start, ksym_end; @@ -226,3 +227,15 @@ db_trap(int type, int code) return (1); } + +static void +db_trace_self_wrapper(void) +{ + jmp_buf jb; + void *prev_jb; + + prev_jb = kdb_jmpbuf(jb); + if (setjmp(jb) == 0) + db_trace_self(); + (void)kdb_jmpbuf(prev_jb); +} |