/* See COPYRIGHT for copyright information. */ #include #include #include #include ################################################################### # exceptions/interrupts ################################################################### /* TRAPHANDLER defines a globally-visible function for handling a trap. * It pushes a trap number onto the stack, then jumps to _alltraps. * Use TRAPHANDLER for traps where the CPU automatically pushes an error code. * * You shouldn't call a TRAPHANDLER function from C, but you may * need to _declare_ one in C (for instance, to get a function pointer * during IDT setup). You can declare the function with * void NAME(); * where NAME is the argument passed to TRAPHANDLER. */ #define TRAPHANDLER(name, num) \ .globl name; /* define global symbol for 'name' */ \ .type name, @function; /* symbol type is function */ \ .align 2; /* align function definition */ \ name: /* function starts here */ \ pushl $(num); \ jmp _alltraps /* Use TRAPHANDLER_NOEC for traps where the CPU doesn't push an error code. * It pushes a 0 in place of the error code, so the trap frame has the same * format in either case. */ #define TRAPHANDLER_NOEC(name, num) \ .globl name; \ .type name, @function; \ .align 2; \ name: \ pushl $0; \ pushl $(num); \ jmp _alltraps .text /* * Lab 3: Your code here for generating entry points for the different traps. */ // HINT 1 : TRAPHANDLER_NOEC(t_divide, T_DIVIDE); // Do something like this if there is no error code for the trap // HINT 2 : TRAPHANDLER(t_dblflt, T_DBLFLT); // Do something like this if the trap includes an error code.. // HINT 3 : READ Intel's manual to check if the trap includes an error code // or not... /* * Lab 3: Your code here for _alltraps */