public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
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

  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