From 82585d70771bbac69f95127b003446486623c07a Mon Sep 17 00:00:00 2001 From: Peter Mikkelsen Date: Sun, 27 Jul 2025 16:53:54 +0200 Subject: Tweaks to the interrupt handler mechanism --- src/nasty.S | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'src/nasty.S') diff --git a/src/nasty.S b/src/nasty.S index 3f1c569..ac9fc91 100644 --- a/src/nasty.S +++ b/src/nasty.S @@ -37,6 +37,11 @@ enable_interrupts: sti ret +.global get_cr2 +get_cr2: + mov rax, cr2 + ret + #define DEFINE_ISRS \ ISR(0) \ ISR(1) \ @@ -46,20 +51,20 @@ enable_interrupts: ISR(5) \ ISR(6) \ ISR(7) \ - ISR(8) \ + ISR_E(8) \ ISR(9) \ - ISR(10) \ - ISR(11) \ - ISR(12) \ - ISR(13) \ - ISR(14) \ + ISR_E(10) \ + ISR_E(11) \ + ISR_E(12) \ + ISR_E(13) \ + ISR_E(14) \ ISR(15) \ ISR(16) \ - ISR(17) \ + ISR_E(17) \ ISR(18) \ ISR(19) \ ISR(20) \ - ISR(21) \ + ISR_E(21) \ ISR(22) \ ISR(23) \ ISR(24) \ @@ -75,13 +80,21 @@ enable_interrupts: #define ISR(n) \ isr_stub_##n: \ mov rdi, n; \ + mov rsi, 0; \ call interrupt_handler; \ iretq; +#define ISR_E(n) \ +isr_stub_##n: \ + pop rsi; \ + mov rdi, n; \ + call interrupt_handler; + iretq; DEFINE_ISRS #undef ISR +#undef ISR_E -#define ISR(n) \ - .quad isr_stub_##n; +#define ISR(n) .quad isr_stub_##n; +#define ISR_E(n) .quad isr_stub_##n; .section .data .global isr_stubs -- cgit v1.2.3