Commit d9ae6772 authored by Martin Schwidefsky's avatar Martin Schwidefsky

[S390] ptrace inferior call interactions with TIF_SYSCALL

The TIF_SYSCALL bit needs to be cleared if the debugger changes the state
of the ptraced process in regard to the presence of a system call.
Otherwise the system call will be restarted although the debugger set up
an inferior call.
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 5f894cbb
...@@ -460,9 +460,9 @@ void do_signal(struct pt_regs *regs) ...@@ -460,9 +460,9 @@ void do_signal(struct pt_regs *regs)
regs->svc_code >> 16); regs->svc_code >> 16);
break; break;
} }
}
/* No longer in a system call */ /* No longer in a system call */
clear_thread_flag(TIF_SYSCALL); clear_thread_flag(TIF_SYSCALL);
}
if ((is_compat_task() ? if ((is_compat_task() ?
handle_signal32(signr, &ka, &info, oldset, regs) : handle_signal32(signr, &ka, &info, oldset, regs) :
...@@ -486,6 +486,7 @@ void do_signal(struct pt_regs *regs) ...@@ -486,6 +486,7 @@ void do_signal(struct pt_regs *regs)
} }
/* No handlers present - check for system call restart */ /* No handlers present - check for system call restart */
clear_thread_flag(TIF_SYSCALL);
if (current_thread_info()->system_call) { if (current_thread_info()->system_call) {
regs->svc_code = current_thread_info()->system_call; regs->svc_code = current_thread_info()->system_call;
switch (regs->gprs[2]) { switch (regs->gprs[2]) {
...@@ -500,9 +501,6 @@ void do_signal(struct pt_regs *regs) ...@@ -500,9 +501,6 @@ void do_signal(struct pt_regs *regs)
regs->gprs[2] = regs->orig_gpr2; regs->gprs[2] = regs->orig_gpr2;
set_thread_flag(TIF_SYSCALL); set_thread_flag(TIF_SYSCALL);
break; break;
default:
clear_thread_flag(TIF_SYSCALL);
break;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment