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()
|
TRACE_POST_SYSCALL()
|
||||||
|
|
||||||
testl $(THREAD_FLAGS_DEBUGGER_INSTALLED | THREAD_FLAGS_SIGNALS_PENDING \
|
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)
|
, THREAD_flags(%edi)
|
||||||
jnz post_syscall_work
|
jnz post_syscall_work
|
||||||
|
|
||||||
@@ -370,9 +371,10 @@ trap99:
|
|||||||
jmp pre_syscall_debug_done
|
jmp pre_syscall_debug_done
|
||||||
|
|
||||||
post_syscall_work_sysenter:
|
post_syscall_work_sysenter:
|
||||||
|
post_syscall_work:
|
||||||
// if the 64 bit return value bit is set, we have to clear it
|
// if the 64 bit return value bit is set, we have to clear it
|
||||||
testl $THREAD_FLAGS_64_BIT_SYSCALL_RETURN, THREAD_flags(%edi)
|
testl $THREAD_FLAGS_64_BIT_SYSCALL_RETURN, THREAD_flags(%edi)
|
||||||
jz post_syscall_work
|
jz 2f
|
||||||
1:
|
1:
|
||||||
movl THREAD_flags(%edi), %eax
|
movl THREAD_flags(%edi), %eax
|
||||||
movl %eax, %edx
|
movl %eax, %edx
|
||||||
@@ -380,8 +382,8 @@ trap99:
|
|||||||
lock
|
lock
|
||||||
cmpxchgl %edx, THREAD_flags(%edi)
|
cmpxchgl %edx, THREAD_flags(%edi)
|
||||||
jnz 1b
|
jnz 1b
|
||||||
|
2:
|
||||||
|
|
||||||
post_syscall_work:
|
|
||||||
// post syscall debugging
|
// post syscall debugging
|
||||||
testl $THREAD_FLAGS_DEBUGGER_INSTALLED, THREAD_flags(%edi)
|
testl $THREAD_FLAGS_DEBUGGER_INSTALLED, THREAD_flags(%edi)
|
||||||
jz 1f
|
jz 1f
|
||||||
|
|||||||
Reference in New Issue
Block a user