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
This commit is contained in:
Ingo Weinhold
2008-02-07 19:04:38 +00:00
parent 385627911c
commit 3832c7ec7f
+5 -3
View File
@@ -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