From 5d8343ed40fabf85b7580617d708f195d7a607f5 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Thu, 2 Nov 2023 10:29:27 -0400 Subject: [PATCH] Preserve registers and align stack in interrupt handlers --- src/hulk/idt.d | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/hulk/idt.d b/src/hulk/idt.d index 9a2a8d9..6ec4f55 100644 --- a/src/hulk/idt.d +++ b/src/hulk/idt.d @@ -83,19 +83,34 @@ struct Idt movabs $$1f, %rax jmp 2f 1: - pushq %rdi - pushq %rsi pushq %rax + pushq %rcx pushq %rdx + pushq %rsi + pushq %rdi + pushq %r8 + pushq %r9 + pushq %r10 + pushq %r11 + pushq %rbp + mov %rsp, %rbp + and $$0xFFFFFFFFFFFFFFF0, %rsp mov $$", isr, ", %rdi - " ~ (isr_has_error_code(isr) ? "mov 0x20(%rsp), %rsi" : "") ~ " - " ~ (isr_has_error_code(isr) ? "lea 0x28(%rsp), %rdx" : "lea 0x20(%rsp), %rdx") ~ " + " ~ (isr_has_error_code(isr) ? "mov 0x50(%rbp), %rsi" : "") ~ " + " ~ (isr_has_error_code(isr) ? "lea 0x58(%rbp), %rdx" : "lea 0x50(%rbp), %rdx") ~ " movabs $$isr, %rax callq *%rax - popq %rdx - popq %rax - popq %rsi + mov %rbp, %rsp + popq %rbp + popq %r11 + popq %r10 + popq %r9 + popq %r8 popq %rdi + popq %rsi + popq %rdx + popq %rcx + popq %rax " ~ (isr_has_error_code(isr) ? "add $$8, %rsp" : "") ~ " iretq 2:`, `={rax}`);");