From 613968dc302938beaa2d154f396817613ef83e2c Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jackpot51@gmail.com> Date: Wed, 24 Aug 2022 11:39:31 -0600 Subject: [PATCH] Use push/pop scratch for x86 signal handler --- src/context/arch/x86.rs | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/context/arch/x86.rs b/src/context/arch/x86.rs index ff541dfa..3d24a336 100644 --- a/src/context/arch/x86.rs +++ b/src/context/arch/x86.rs @@ -3,7 +3,9 @@ use core::sync::atomic::AtomicBool; use alloc::sync::Arc; +use crate::{push_scratch, pop_scratch}; use crate::gdt::{GDT, GDT_USER_FS, GDT_USER_GS}; +use crate::interrupt::handler::ScratchRegisters; use crate::paging::{RmmA, RmmArch, TableKind}; use crate::syscall::FloatRegisters; @@ -234,9 +236,7 @@ unsafe extern "cdecl" fn switch_to_inner() { #[allow(dead_code)] #[repr(packed)] pub struct SignalHandlerStack { - edx: usize, - ecx: usize, - eax: usize, + scratch: ScratchRegisters, handler: extern fn(usize), sig: usize, eip: usize, @@ -251,22 +251,20 @@ unsafe extern "C" fn signal_handler_wrapper() { // Push scratch registers core::arch::asm!( - " - push eax - push ecx - push edx - + concat!( + "push eax", + push_scratch!(), + " push esp call {inner} pop esp - - pop edx - pop ecx - pop eax + ", + pop_scratch!(), + " add esp, 8 ret - ", - + ", + ), inner = sym inner, options(noreturn), ); -- GitLab