From 3832c7ec7f9c8e9d4063d370b5f1663e567c69b8 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Thu, 7 Feb 2008 19:04:38 +0000 Subject: [PATCH] Always clear the THREAD_FLAGS_64_BIT_SYSCALL_RETURN flag, even when using the int 99 syscall method. Otherwise it would remain set e.g. after _kern_restore_signal_frame() and the next syscall would look like one returning a 64 bit value. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23918 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/arch/x86/arch_interrupts.S | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/system/kernel/arch/x86/arch_interrupts.S b/src/system/kernel/arch/x86/arch_interrupts.S index 89a23dcab6..ec30921f41 100644 --- a/src/system/kernel/arch/x86/arch_interrupts.S +++ b/src/system/kernel/arch/x86/arch_interrupts.S @@ -350,7 +350,8 @@ trap99: TRACE_POST_SYSCALL() testl $(THREAD_FLAGS_DEBUGGER_INSTALLED | THREAD_FLAGS_SIGNALS_PENDING \ - | THREAD_FLAGS_DEBUG_THREAD | THREAD_FLAGS_BREAKPOINTS_DEFINED) \ + | THREAD_FLAGS_DEBUG_THREAD | THREAD_FLAGS_BREAKPOINTS_DEFINED \ + | THREAD_FLAGS_64_BIT_SYSCALL_RETURN) \ , THREAD_flags(%edi) jnz post_syscall_work @@ -370,9 +371,10 @@ trap99: jmp pre_syscall_debug_done post_syscall_work_sysenter: + post_syscall_work: // if the 64 bit return value bit is set, we have to clear it testl $THREAD_FLAGS_64_BIT_SYSCALL_RETURN, THREAD_flags(%edi) - jz post_syscall_work + jz 2f 1: movl THREAD_flags(%edi), %eax movl %eax, %edx @@ -380,8 +382,8 @@ trap99: lock cmpxchgl %edx, THREAD_flags(%edi) jnz 1b + 2: - post_syscall_work: // post syscall debugging testl $THREAD_FLAGS_DEBUGGER_INSTALLED, THREAD_flags(%edi) jz 1f