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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user