From afa9fe8958ce1d12c4bb48149b96276c9a522780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 5 Aug 2008 17:13:06 +0000 Subject: [PATCH] * Patch by Andreas: we did not store ebp in vregs::ebp, and we did not store ebx at all. * This fixes bug #2569. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26818 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/arch/x86/arch_thread.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/system/kernel/arch/x86/arch_thread.cpp b/src/system/kernel/arch/x86/arch_thread.cpp index eab495ea93..37addd3c67 100644 --- a/src/system/kernel/arch/x86/arch_thread.cpp +++ b/src/system/kernel/arch/x86/arch_thread.cpp @@ -472,11 +472,12 @@ arch_setup_signal_frame(struct thread *thread, struct sigaction *action, regs.eax = frame->eax; regs.ecx = frame->ecx; regs.edx = frame->edx; + regs.ebp = frame->ebp; regs.esp = frame->esp; regs._reserved_1 = frame->user_esp; regs._reserved_2[0] = frame->edi; regs._reserved_2[1] = frame->esi; - regs._reserved_2[2] = frame->ebp; + regs._reserved_2[2] = frame->ebx; i386_fnsave((void *)(®s.xregs)); userStack -= (sizeof(struct vregs) + 3) / 4; @@ -565,11 +566,12 @@ arch_restore_signal_frame(void) frame->eax = regs.eax; frame->ecx = regs.ecx; frame->edx = regs.edx; + frame->ebp = regs.ebp; frame->esp = regs.esp; frame->user_esp = regs._reserved_1; frame->edi = regs._reserved_2[0]; frame->esi = regs._reserved_2[1]; - frame->ebp = regs._reserved_2[2]; + frame->ebx = regs._reserved_2[2]; i386_frstor((void *)(®s.xregs));