diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2009-12-21 23:00:13 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2009-12-21 23:00:13 +0100 |
commit | 7b9d0458105831a79d211f1ca98a184adedf82f5 (patch) | |
tree | 4d4bd7a0b764b1bd36c919d0fc528cc625de6f5a /kern | |
parent | eec36e70c95490b5ffd73e1b3c90289e38fa3127 (diff) |
Add a SoftDebugger function
* kern/debug.h (SoftDebugger): Add prototype.
* kern/debug.c (Debugger): Move code invoking debugging trap
to...
(SoftDebugger): ... new function. Print the passed message.
* kern/lock_mon.c (decl_simple_lock_data, retry_bit_lock): Call
SoftDebugger instead of Debugger.
* device/ds_routines.c (ds_device_open, device_read,
device_read_inband): Call SoftDebugger instead of Debugger.
* i386/i386at/model_dep.c (c_boot_entry): Call SoftDebugger
instead of Debugger.
* kern/syscall_sw.c (null_port, kern_invalid): Call SoftDebugger
instead of Debugger.
* vm/vm_object.c (vm_object_collapse): Call SoftDebugger instead
of Debugger.
Diffstat (limited to 'kern')
-rw-r--r-- | kern/debug.c | 21 | ||||
-rw-r--r-- | kern/debug.h | 1 | ||||
-rw-r--r-- | kern/lock_mon.c | 4 | ||||
-rw-r--r-- | kern/syscall_sw.c | 4 |
4 files changed, 20 insertions, 10 deletions
diff --git a/kern/debug.c b/kern/debug.c index 57a8126..26445f8 100644 --- a/kern/debug.c +++ b/kern/debug.c @@ -73,17 +73,16 @@ Assert(char *exp, char *file, int line) Debugger("assertion failure"); } -void Debugger(message) +void SoftDebugger(message) char * message; { + printf("Debugger invoked: %s\n", message); + #if !MACH_KDB - panic("Debugger invoked, but there isn't one!"); + printf("But no debugger, continuing.\n"); + return; #endif -#ifdef lint - message++; -#endif /* lint */ - #if defined(vax) || defined(PC532) asm("bpt"); #endif /* vax */ @@ -104,6 +103,16 @@ void Debugger(message) #ifdef i386 asm("int3"); #endif +} + +void Debugger(message) + char * message; +{ +#if !MACH_KDB + panic("Debugger invoked, but there isn't one!"); +#endif + + SoftDebugger(message); panic("Debugger returned!"); } diff --git a/kern/debug.h b/kern/debug.h index 287b152..f4e8200 100644 --- a/kern/debug.h +++ b/kern/debug.h @@ -60,6 +60,7 @@ extern void panic_init(void); extern void panic (const char *s, ...) __attribute__ ((noreturn)); +extern void SoftDebugger (char *message); extern void Debugger (char *message) __attribute__ ((noreturn)); #endif /* _mach_debug__debug_ */ diff --git a/kern/lock_mon.c b/kern/lock_mon.c index 7ffaeb6..1450428 100644 --- a/kern/lock_mon.c +++ b/kern/lock_mon.c @@ -348,7 +348,7 @@ decl_simple_lock_data(, *lock) return; db_printf("cpu %d looping on simple_lock(%x) called by %x\n", cpu_number(), lock, *(((int *)&lock) -1)); - Debugger("simple_lock timeout"); + SoftDebugger("simple_lock timeout"); count = 0; } } @@ -362,7 +362,7 @@ retry_bit_lock(index, addr) if (count++ > 1000000) { db_printf("cpu %d looping on bit_lock(%x, %x) called by %x\n", cpu_number(), index, addr, *(((int *)&index) -1)); - Debugger("bit_lock timeout"); + SoftDebugger("bit_lock timeout"); count = 0; } } diff --git a/kern/syscall_sw.c b/kern/syscall_sw.c index bd3b874..b2e20e6 100644 --- a/kern/syscall_sw.c +++ b/kern/syscall_sw.c @@ -60,13 +60,13 @@ int kern_invalid_debug = 0; mach_port_t null_port() { - if (kern_invalid_debug) Debugger("null_port mach trap"); + if (kern_invalid_debug) SoftDebugger("null_port mach trap"); return(MACH_PORT_NULL); } kern_return_t kern_invalid() { - if (kern_invalid_debug) Debugger("kern_invalid mach trap"); + if (kern_invalid_debug) SoftDebugger("kern_invalid mach trap"); return(KERN_INVALID_ARGUMENT); } |