From ce832186460563db9cdfb59bd438f242600c0edf Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sat, 8 Jul 2017 15:01:50 +0200 Subject: forgot to set the backpointer to the interrupt manager (interrupts_t) in the interrupt_handler_init_void (clang and O1 crashed it while initializing the empty interrupt vectors) --- src/hardware/interrupts.c | 6 ++++-- src/hardware/interrupts.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/hardware/interrupts.c b/src/hardware/interrupts.c index 4ca0f14..bec0896 100644 --- a/src/hardware/interrupts.c +++ b/src/hardware/interrupts.c @@ -53,9 +53,11 @@ // OCW2 #define OCW2_EOI 0x20 // non-specific End Of Interrupt -void interrupt_handler_init_void( interrupt_handler_t *handler ) +void interrupt_handler_init_void( interrupt_handler_t *handler, struct interrupt_t *interrupt ) { memset( handler, 0, sizeof( interrupt_handler_t ) ); + + handler->interrupt = interrupt; } void interrupt_handler_init( interrupt_handler_t *handler, uint8_t interrupt_no, struct interrupt_t *interrupt, interrupt_handler_func_t handle, void *driver ) @@ -77,7 +79,7 @@ void interrupts_init( interrupt_t *interrupt, uint16_t gdt_code_segment_selector memset( interrupt, 0, sizeof( interrupt_t ) ); interrupt_handler_t empty_interrupt_handler; - interrupt_handler_init_void( &empty_interrupt_handler ); + interrupt_handler_init_void( &empty_interrupt_handler, interrupt ); interrupt->task_manager = task_manager; diff --git a/src/hardware/interrupts.h b/src/hardware/interrupts.h index 767bb2e..c325d4f 100644 --- a/src/hardware/interrupts.h +++ b/src/hardware/interrupts.h @@ -63,7 +63,7 @@ typedef struct interrupt_handler_t { void *driver; } interrupt_handler_t; -void interrupt_handler_init_void( interrupt_handler_t *handler ); +void interrupt_handler_init_void( interrupt_handler_t *handler, struct interrupt_t *interrupt ); void interrupt_handler_init( interrupt_handler_t *handler, uint8_t interrupt_no, struct interrupt_t *interrupt, interrupt_handler_func_t handle, void *driver ); typedef struct interrupt_t { -- cgit v1.2.3-54-g00ecf