From: Daniel Jacobowitz <dan@debian.org>
To: raj <raj@cs.wisc.edu>
Cc: linux-kernel@vger.kernel.org, zandy@cs.wisc.edu
Subject: Re: [PATCH] ptrace on stopped processes (2.4)
Date: Mon, 24 Mar 2003 10:05:53 -0500 [thread overview]
Message-ID: <20030324150552.GA26287@nevyn.them.org> (raw)
In-Reply-To: <3E7EA4B2.5010306@cs.wisc.edu>
On Sun, Mar 23, 2003 at 10:24:50PM -0800, raj wrote:
> Daniel Jacobowitz wrote:
>
> >On Mon, Mar 17, 2003 at 03:24:55PM -0600, Rajesh Rajamani wrote:
> >
> >
> >>Hi All,
> >>I'm working on adding a function
> >>
> >>void debugbreak(void);
> >>
> >>to glibc. I got the inspiration for this from Windows. Windows has a
> >>DebugBreak() function, which when invoked from a process, spawns a
> >>debugger, which then attaches to the process. I think this would be
> >>invaluable to linux developers in situations where they currently have to
> >>put an infinite loop and attach to a running process (say, to stop in a
> >>library that has been LD_PRELOADed).
> >>
> >>To this end, I've been experimenting and found out that gdb can't attach
> >>to a process that has been stopped. I'd like to send a SIGSTOP as soon as
> >>debugbreak() is invoked, so that all threads are stopped in a state close
> >>to the one they were in, when the debugbreak() was invoked.
> >>
> >>I spoke to Vic Zandy about this and he informed me that he had submitted
> >>a patch
> >>that would allow ptrace to attach to stopped processes also (the thread of
> >>discussion is pasted below). I believe the patch was not accepted at
> >>that time.
> >> I was wondering what the official line on this is? If there are no
> >> serious
> >>objections, will the community consider accepting the patch? It would go
> >>a long
> >>way in helping me accomplish my goal.
> >>
> >>
> >
> >The question is, what _should_ happen when yu attach to a stopped
> >process? If the tracer receives the same one SIGSTOP that it normally
> >would, then it will just resume the program as if it weren't stopped.
> >Does that make sense or not?
> >
> Ideally, a stopped process should not be resumed, until it receives a
> SIGCONT. I ran two tests to understand the effect of this patch.
>
> 1. Attaching to a stopped process using gdb. This did not cause the
> tracee to continue.
No, that's not what I meant. When you attach using GDB, there is no
way for GDB to determine if the process was previously stopped or
running.
> 2. stracing a stopped process. This caused the stopped process to
> continue. On further investigation, I found out that strace calls
> ptrace(PTRACE_SYSCALL), which restarts the child, but arranges for the
> child to be stopped at the next entry to or exit from a system call.
>
> IMHO, the new ptrace semantics adds a feature to strace. If someone
> tries to run strace a stopped process without the patch, it will just
> hang, whereas with the patch, it'll let the process continue. Even
> without the patch, if a process that sends itself a SIGCONT is straced,
> the process will not stop. I do not think this is an issue, considering
> that ppl will not get any info by running strace on a stopped process,
> until they send a SIGCONT.
>
> In conclusion, the action taken by the tracer depends on the mechanism
> it uses for monitoring the system calls. That said, it'll definitely be
> useful if the tracer could find out the state of the tracee at the time
> of attachment and take appropriate action. Given below, is a port of
> Vic's patch to 2.5.xx series -
> --------------------------------------------------------------------------------
> -- kernel/ptrace.c 2003-03-23 22:15:33.000000000 -0800
> +++ kernel/ptrace.c 2003-03-23 22:19:27.000000000 -0800
> @@ -115,7 +115,10 @@
> __ptrace_link(task, current);
> write_unlock_irq(&tasklist_lock);
>
> - force_sig_specific(SIGSTOP, task);
> + if (task->state != TASK_STOPPED)
> + force_sig_specific(SIGSTOP, task);
> + else
> + task->exit_code = SIGSTOP;
> return 0;
>
> bad:
I'll test this here, give me a day or two.
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer
next prev parent reply other threads:[~2003-03-24 14:54 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-03-17 21:24 [PATCH] ptrace on stopped processes (2.4) Rajesh Rajamani
2003-03-24 4:09 ` Daniel Jacobowitz
2003-03-24 6:24 ` raj
2003-03-24 15:05 ` Daniel Jacobowitz [this message]
2003-03-25 13:48 ` Werner Almesberger
2003-03-25 13:58 ` Daniel Jacobowitz
2003-03-25 14:53 ` Werner Almesberger
-- strict thread matches above, loose matches on Subject: below --
2001-12-21 19:53 vic
2001-12-21 23:19 ` Jeff Dike
2001-12-22 3:56 ` OGAWA Hirofumi
2001-12-22 17:38 ` Mike Coleman
2002-01-17 16:57 ` vic
2002-01-17 19:23 ` OGAWA Hirofumi
2002-01-23 17:58 ` vic
2002-01-23 22:14 ` OGAWA Hirofumi
2002-01-23 22:29 ` vic
2002-01-24 1:41 ` OGAWA Hirofumi
2002-01-21 3:09 ` Mike Coleman
2002-01-28 20:15 ` vic
2002-03-19 3:59 ` vic
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=20030324150552.GA26287@nevyn.them.org \
--to=dan@debian.org \
--cc=linux-kernel@vger.kernel.org \
--cc=raj@cs.wisc.edu \
--cc=zandy@cs.wisc.edu \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox