|
|
- #include <defs.h>
- #include <stdio.h>
- #include <intr.h>
- #include <kmonitor.h>
-
- static bool is_panic = 0;
-
- /* *
- * __panic - __panic is called on unresolvable fatal errors. it prints
- * "panic: 'message'", and then enters the kernel monitor.
- * */
- void
- __panic(const char *file, int line, const char *fmt, ...) {
- if (is_panic) {
- goto panic_dead;
- }
- is_panic = 1;
-
- // print the 'message'
- va_list ap;
- va_start(ap, fmt);
- cprintf("kernel panic at %s:%d:\n ", file, line);
- vcprintf(fmt, ap);
- cprintf("\n");
- va_end(ap);
-
- panic_dead:
- intr_disable();
- while (1) {
- kmonitor(NULL);
- }
- }
-
- /* __warn - like panic, but don't */
- void
- __warn(const char *file, int line, const char *fmt, ...) {
- va_list ap;
- va_start(ap, fmt);
- cprintf("kernel warning at %s:%d:\n ", file, line);
- vcprintf(fmt, ap);
- cprintf("\n");
- va_end(ap);
- }
-
- bool
- is_kernel_panic(void) {
- return is_panic;
- }
-
|