X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=geekos%2Fsrc%2Fgeekos%2Ftrap.c;fp=geekos%2Fsrc%2Fgeekos%2Ftrap.c;h=6b8629dc06327d4f5eca8469f29746b6ae685de2;hp=0000000000000000000000000000000000000000;hb=ddc16b0737cf58f7aa90a69c6652cdf4090aec51;hpb=626595465a2c6987606a6bc697df65130ad8c2d3 diff --git a/geekos/src/geekos/trap.c b/geekos/src/geekos/trap.c new file mode 100644 index 0000000..6b8629d --- /dev/null +++ b/geekos/src/geekos/trap.c @@ -0,0 +1,45 @@ +/* + * Trap handlers + * Copyright (c) 2001,2003,2004 David H. Hovemeyer + * $Revision: 1.3 $ + * + * This is free software. You are permitted to use, + * redistribute, and modify it as specified in the file "COPYING". + */ + +#include +#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,"VMM: 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 */ +}