diff --git a/Kernel/Process.cpp b/Kernel/Process.cpp index ed999e4ad5..679e092a3a 100644 --- a/Kernel/Process.cpp +++ b/Kernel/Process.cpp @@ -793,26 +793,29 @@ void Process::sys$exit(int status) ASSERT_NOT_REACHED(); } -// The trampoline preserves the current eax, pushes the signal code and -// then calls the signal handler. We do this because, when interrupting a -// blocking syscall, that syscall may return some special error code in eax; -// This error code would likely be overwritten by the signal handler, so it's -// neccessary to preserve it here. -asm( - ".intel_syntax noprefix\n" - "asm_signal_trampoline:\n" - "push ebp\n" - "mov ebp, esp\n" - "push eax\n" // we have to store eax 'cause it might be the return value from a syscall - "sub esp, 4\n" // align the stack to 16 bytes - "mov eax, [ebp+12]\n" // push the signal code - "push eax\n" - "call [ebp+8]\n" // call the signal handler - "add esp, 8\n" - "mov eax, 0x2d\n" // FIXME: We shouldn't be hardcoding this. - "int 0x82\n" // sigreturn syscall - "asm_signal_trampoline_end:\n" - ".att_syntax"); +void signal_trampoline_dummy(void) +{ + // The trampoline preserves the current eax, pushes the signal code and + // then calls the signal handler. We do this because, when interrupting a + // blocking syscall, that syscall may return some special error code in eax; + // This error code would likely be overwritten by the signal handler, so it's + // neccessary to preserve it here. + asm( + ".intel_syntax noprefix\n" + "asm_signal_trampoline:\n" + "push ebp\n" + "mov ebp, esp\n" + "push eax\n" // we have to store eax 'cause it might be the return value from a syscall + "sub esp, 4\n" // align the stack to 16 bytes + "mov eax, [ebp+12]\n" // push the signal code + "push eax\n" + "call [ebp+8]\n" // call the signal handler + "add esp, 8\n" + "mov eax, %P0\n" + "int 0x82\n" // sigreturn syscall + "asm_signal_trampoline_end:\n" + ".att_syntax" ::"i"(Syscall::SC_sigreturn)); +} extern "C" void asm_signal_trampoline(void); extern "C" void asm_signal_trampoline_end(void);