75 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /* This file contains a collection of miscellaneous procedures:
 | |
|  *   panic	    abort MINIX due to a fatal error
 | |
|  *   bad_assertion  for debugging
 | |
|  *   bad_compare    for debugging
 | |
|  * 
 | |
|  * Changes:
 | |
|  *   Oct 04, 2004   moved panic() to this file  (Jorrit N. Herder)
 | |
|  *   Sep 30, 2004   removed mem_init(), env_parse to lib  (Jorrit N. Herder)
 | |
|  */
 | |
| 
 | |
| #include "kernel.h"
 | |
| #include "assert.h"
 | |
| #include <unistd.h>
 | |
| #include <minix/com.h>
 | |
| 
 | |
| 
 | |
| /*===========================================================================*
 | |
|  *                                   panic                                   *
 | |
|  *===========================================================================*/
 | |
| PUBLIC void panic(s,n)
 | |
| _CONST char *s;
 | |
| int n;
 | |
| {
 | |
| /* The system has run aground of a fatal error.  Terminate execution.
 | |
|  * If the panic originated in MM or FS, the string will be empty and the
 | |
|  * file system already syncked.  If the panic originates in the kernel, we are
 | |
|  * kind of stuck.
 | |
|  */
 | |
|   static int panicking = 0;
 | |
|   if (panicking ++)		/* prevent recursive panics */
 | |
|   	return;
 | |
| 
 | |
|   if (s != NULL) {
 | |
| 	kprintf("\nKernel panic: %s", karg(s));
 | |
| 	if (n != NO_NUM) kprintf(" %d", n);
 | |
| 	kprintf("\n",NO_ARG);
 | |
|   }
 | |
|   prepare_shutdown(RBT_PANIC);
 | |
| }
 | |
| 
 | |
| 
 | |
| #if !NDEBUG
 | |
| /*=========================================================================*
 | |
|  *				bad_assertion				   *
 | |
|  *=========================================================================*/
 | |
| PUBLIC void bad_assertion(file, line, what)
 | |
| char *file;
 | |
| int line;
 | |
| char *what;
 | |
| {
 | |
|   kprintf("panic at %s", karg(file));
 | |
|   kprintf(" (line %d): ", line);
 | |
|   kprintf("assertion \"%s\" failed.\n", karg(what));
 | |
|   panic(NULL, NO_NUM);
 | |
| }
 | |
| 
 | |
| /*=========================================================================*
 | |
|  *				bad_compare				   *
 | |
|  *=========================================================================*/
 | |
| PUBLIC void bad_compare(file, line, lhs, what, rhs)
 | |
| char *file;
 | |
| int line;
 | |
| int lhs;
 | |
| char *what;
 | |
| int rhs;
 | |
| {
 | |
|   kprintf("panic at %s", karg(file));
 | |
|   kprintf(" (line %d): ", line);
 | |
|   kprintf("compare (%d)", lhs);
 | |
|   kprintf(" %s ", karg(what));
 | |
|   kprintf("(%d) failed.\n", rhs);
 | |
|   panic(NULL, NO_NUM);
 | |
| }
 | |
| #endif /* !NDEBUG */
 | 
