diff --git a/kernel/arch/i686/Signal.S b/kernel/arch/i686/Signal.S index 9621c2cf..4bf29015 100644 --- a/kernel/arch/i686/Signal.S +++ b/kernel/arch/i686/Signal.S @@ -16,9 +16,8 @@ signal_trampoline: movl 36(%esp), %eax // align stack to 16 bytes - movl %esp, %ebx - andl $0x0F, %ebx - subl %ebx, %esp + movl %esp, %ebp + andl $-16, %esp subl $12, %esp pushl %edi @@ -26,7 +25,7 @@ signal_trampoline: addl $16, %esp // restore stack - addl %ebx, %esp + movl %ebp, %esp popa leave diff --git a/kernel/arch/x86_64/Signal.S b/kernel/arch/x86_64/Signal.S index e11a7adb..c3259a68 100644 --- a/kernel/arch/x86_64/Signal.S +++ b/kernel/arch/x86_64/Signal.S @@ -27,14 +27,13 @@ signal_trampoline: movq 120(%rsp), %rax // align stack to 16 bytes - movq %rsp, %rbx - andq $0x0F, %rbx - subq %rbx, %rsp + movq %rsp, %rbp + andq $-16, %rsp call *%rax // restore stack - addq %rbx, %rsp + movq %rbp, %rsp popq %r15 popq %r14 popq %r13