diff options
Diffstat (limited to 'arch/i386/kernel/entry.S')
-rw-r--r-- | arch/i386/kernel/entry.S | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/i386/kernel/entry.S b/arch/i386/kernel/entry.S index b389e5f3bdee..9a47723469c6 100644 --- a/arch/i386/kernel/entry.S +++ b/arch/i386/kernel/entry.S | |||
@@ -339,12 +339,18 @@ syscall_trace_entry: | |||
339 | xorl %edx,%edx | 339 | xorl %edx,%edx |
340 | call do_syscall_trace | 340 | call do_syscall_trace |
341 | cmpl $0, %eax | 341 | cmpl $0, %eax |
342 | jne syscall_exit # ret != 0 -> running under PTRACE_SYSEMU, | 342 | jne syscall_skip # ret != 0 -> running under PTRACE_SYSEMU, |
343 | # so must skip actual syscall | 343 | # so must skip actual syscall |
344 | movl ORIG_EAX(%esp), %eax | 344 | movl ORIG_EAX(%esp), %eax |
345 | cmpl $(nr_syscalls), %eax | 345 | cmpl $(nr_syscalls), %eax |
346 | jnae syscall_call | 346 | jnae syscall_call |
347 | jmp syscall_exit | 347 | jmp syscall_exit |
348 | syscall_skip: | ||
349 | cli # make sure we don't miss an interrupt | ||
350 | # setting need_resched or sigpending | ||
351 | # between sampling and the iret | ||
352 | movl TI_flags(%ebp), %ecx | ||
353 | jmp work_pending | ||
348 | 354 | ||
349 | # perform syscall exit tracing | 355 | # perform syscall exit tracing |
350 | ALIGN | 356 | ALIGN |