X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=misc%2Ftest_vm%2Fsrc%2Fgeekos%2Ftrap.c;fp=misc%2Ftest_vm%2Fsrc%2Fgeekos%2Ftrap.c;h=2085a992bf51ea1db6a52deb86d1d49504eda172;hb=0893919c04fa1186a70039b739a6dcec0a2189ba;hp=0000000000000000000000000000000000000000;hpb=129ce047d500708a0c9fc9b873b981eb9409aff5;p=palacios.releases.git diff --git a/misc/test_vm/src/geekos/trap.c b/misc/test_vm/src/geekos/trap.c new file mode 100644 index 0000000..2085a99 --- /dev/null +++ b/misc/test_vm/src/geekos/trap.c @@ -0,0 +1,45 @@ +/* + * Trap handlers + * Copyright (c) 2001,2003,2004 David H. Hovemeyer + * $Revision: 1.1 $ + * + * This is free software. You are permitted to use, + * redistribute, and modify it as specified in the file "COPYING". + */ + +#include +#include +#include +#include +#include + +/* + * TODO: need to add handlers for other exceptions (such as bounds + * check, debug, etc.) + */ + +/* + * Handler for general protection faults and other bad errors. + * Kill the current thread (which caused the fault). + */ +static void GPF_Handler(struct Interrupt_State* state) +{ + /* Send the thread to the reaper... */ + SerialPrintLevel(1000,"Exception %d received, killing thread %p\n",state->intNum, g_currentThread); + Dump_Interrupt_State(state); + + Exit(-1); + + /* We will never get here */ + KASSERT(false); +} + +/* + * Initialize handlers for processor traps. + */ +void Init_Traps(void) +{ + PrintBoth("Initializing Traps\n"); + Install_Interrupt_Handler(12, &GPF_Handler); /* stack exception */ + Install_Interrupt_Handler(13, &GPF_Handler); /* general protection fault */ +}