From: Oleg Nesterov <oleg@redhat.com>
To: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Roland McGrath <roland@redhat.com>,
caiqian@redhat.com, Heiko Carstens <heiko.carstens@de.ibm.com>,
Jan Kratochvil <jkratoch@redhat.com>,
linux-kernel@vger.kernel.org, linux-s390@vger.kernel.org,
utrace-devel@redhat.com
Subject: Re: s390 && user_enable_single_step() (Was: odd utrace testing results on s390x)
Date: Tue, 5 Jan 2010 16:36:33 +0100 [thread overview]
Message-ID: <20100105153633.GA9376@redhat.com> (raw)
In-Reply-To: <20100105105030.66bb8a0a@mschwide.boeblingen.de.ibm.com>
On 01/05, Martin Schwidefsky wrote:
>
> On Mon, 4 Jan 2010 13:11:47 -0800 (PST)
> Roland McGrath <roland@redhat.com> wrote:
>
> > > This probably means that copy_process()->user_disable_single_step()
> > > is not enough to clear the "this task wants single-stepping" copied
> > > from parent.
> >
> > I would suspect s390's TIF_SINGLE_STEP flag here. That flag means "a
> > single-step trap occurred". This is what causes do_single_step to be
> > called before returning to user mode, rather than the machine trap doing it
> > directly as is done in the other arch implementations.
>
> Just my thinking as well.
Oh, I am not sure. But I don't understand TIF_SINGLE_STEP on s390,
absolutely.
For example, why do_signal() sets TIF_SINGLE_STEP? Why can't we do
--- a/arch/s390/kernel/signal.c
+++ b/arch/s390/kernel/signal.c
@@ -500,18 +500,10 @@ void do_signal(struct pt_regs *regs)
clear_thread_flag(TIF_RESTORE_SIGMASK);
/*
- * If we would have taken a single-step trap
- * for a normal instruction, act like we took
- * one for the handler setup.
- */
- if (current->thread.per_info.single_step)
- set_thread_flag(TIF_SINGLE_STEP);
-
- /*
* Let tracing know that we've done the handler setup.
*/
tracehook_signal_handler(signr, &info, &ka, regs,
- test_thread_flag(TIF_SINGLE_STEP));
+ current->thread.per_info.single_step);
}
return;
}
?
Apart from arch/s390/signal.c, TIF_SINGLE_STEP is used by entry.S
but I don't understand this asm at all.
Anyway. I modified the debugging patch a bit:
--- K/arch/s390/kernel/traps.c~ 2009-12-22 10:41:52.909174198 -0500
+++ K/arch/s390/kernel/traps.c 2010-01-05 09:49:19.541792379 -0500
@@ -384,6 +384,8 @@ void __kprobes do_single_step(struct pt_
}
if (tracehook_consider_fatal_signal(current, SIGTRAP))
force_sig(SIGTRAP, current);
+ else
+ printk("XXX: %d %d\n", current->pid, test_thread_flag(TIF_SINGLE_STEP));
}
static void default_trap_handler(struct pt_regs * regs, long interruption_code)
-------------------------------------------------------------------------------
Now, when I run this test-case
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <sys/ptrace.h>
#include <sys/wait.h>
#include <assert.h>
int main(void)
{
int pid, status;
if (!(pid = fork())) {
assert(ptrace(PTRACE_TRACEME) == 0);
kill(getpid(), SIGSTOP);
if (!fork())
return 43;
wait(&status);
return WEXITSTATUS(status);
}
for (;;) {
assert(pid == wait(&status));
if (WIFEXITED(status))
break;
assert(ptrace(PTRACE_SINGLESTEP, pid, 0,0) == 0);
}
assert(WEXITSTATUS(status) == 43);
return 0;
}
dmesg shows 799 lines of
XXX: 2389 0
The kernel is 2.6.32.2 + utrace, but CONFIG_UTRACE is not set.
Oleg.
next prev parent reply other threads:[~2010-01-05 15:36 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1503844142.2061111261478093776.JavaMail.root@zmail06.collab.prod.int.phx2.redhat.com>
[not found] ` <1257887498.2061171261478252049.JavaMail.root@zmail06.collab.prod.int.phx2.redhat.com>
2010-01-04 15:52 ` s390 && user_enable_single_step() (Was: odd utrace testing results on s390x) Oleg Nesterov
2010-01-04 16:16 ` Martin Schwidefsky
2010-01-04 18:14 ` Oleg Nesterov
2010-01-04 19:30 ` Oleg Nesterov
2010-01-04 21:11 ` Roland McGrath
2010-01-05 9:50 ` Martin Schwidefsky
2010-01-05 15:36 ` Oleg Nesterov [this message]
2010-01-05 15:46 ` Martin Schwidefsky
2010-01-05 15:59 ` Oleg Nesterov
2010-01-05 17:03 ` Oleg Nesterov
2010-01-05 19:58 ` Oleg Nesterov
2010-01-06 14:59 ` Heiko Carstens
2010-01-06 20:17 ` Oleg Nesterov
2010-01-06 21:13 ` Roland McGrath
2010-01-07 9:18 ` Martin Schwidefsky
2010-01-07 17:54 ` Oleg Nesterov
2010-01-07 21:48 ` Roland McGrath
2010-01-21 20:51 ` Oleg Nesterov
2010-01-26 13:13 ` Martin Schwidefsky
2010-01-07 21:46 ` Roland McGrath
2010-01-08 8:30 ` Martin Schwidefsky
2010-01-08 10:25 ` Roland McGrath
2010-01-05 15:47 ` Oleg Nesterov
2010-01-05 15:50 ` Martin Schwidefsky
2010-01-06 21:08 ` Roland McGrath
2010-01-07 9:16 ` Martin Schwidefsky
2010-01-07 18:16 ` Oleg Nesterov
2010-01-07 21:44 ` Roland McGrath
2010-01-08 8:34 ` Martin Schwidefsky
2010-01-07 21:41 ` Roland McGrath
2010-01-07 18:11 ` Oleg Nesterov
2010-01-06 20:23 ` Oleg Nesterov
2010-01-06 20:56 ` Roland McGrath
2010-01-07 9:00 ` Martin Schwidefsky
2010-01-07 21:32 ` Roland McGrath
2010-01-21 20:32 ` Oleg Nesterov
2010-01-05 9:26 ` Martin Schwidefsky
2010-01-06 21:15 ` Roland McGrath
2010-01-04 20:46 ` Roland McGrath
[not found] <1158952983.251101262791902387.JavaMail.root@zmail06.collab.prod.int.phx2.redhat.com>
2010-01-06 15:33 ` caiqian
2010-01-06 20:09 ` Oleg Nesterov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100105153633.GA9376@redhat.com \
--to=oleg@redhat.com \
--cc=caiqian@redhat.com \
--cc=heiko.carstens@de.ibm.com \
--cc=jkratoch@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=roland@redhat.com \
--cc=schwidefsky@de.ibm.com \
--cc=utrace-devel@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.