|
StuBS
|
interrupt_handler() Interrupt handler More...
Classes | |
| struct | InterruptContext |
| Preserved interrupt context. More... | |
Functions | |
| void | interrupt_handler (Core::Interrupt::Vector vector, InterruptContext *context) |
| High-Level Interrupt Handling. More... | |
Constants | |
| void *const | interrupt_entry [] |
| Array of function pointer to the default low-level interrupt handlers. More... | |
interrupt_handler() Interrupt handler
| struct InterruptContext |
Preserved interrupt context.
After an interrupt was triggered, the core first saves the basic context (current code- & stack segment, instruction & stack pointer and the status flags register) and looks up the handling function for the vector using the IDT. In StuBS for each vector an own interrupt_entry_VECTOR function (written in assembly in interrupt/handler.asm) was registered during boot by kernel_init(), which all save the scratch registers on the stack before calling the C++ function interrupt_handler(). The high-level handler gets a pointer to the part of the stack which corresponds to the InterruptContext structure as second parameter. After returning from the high-level handler, the previous state is restored from this context (scratch register in assembly and basic context while executing iret) so it can continue transparently at the previous position.
| void* const interrupt_entry[] |
Array of function pointer to the default low-level interrupt handlers.
The index corresponds to the vectors entry function, e.g. interrupt_entry[6] points to interrupt_entry_6, handling the trap for invalid opcode.
The entry functions and this array are defined in assembly in interrupt/handler.asm and used in kernel_init() to initialize the Interrupt Descriptor Table (IDT).