linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: raj <raj@cs.wisc.edu>
To: Daniel Jacobowitz <dan@debian.org>
Cc: linux-kernel@vger.kernel.org, zandy@cs.wisc.edu, raj@cs.wisc.edu
Subject: Re: [PATCH] ptrace on stopped processes (2.4)
Date: Sun, 23 Mar 2003 22:24:50 -0800	[thread overview]
Message-ID: <3E7EA4B2.5010306@cs.wisc.edu> (raw)
In-Reply-To: 20030324040908.GA19754@nevyn.them.org

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.

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:
--------------------------------------------------------------------
Thanks,
Raj



  reply	other threads:[~2003-03-24  6:13 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 [this message]
2003-03-24 15:05     ` Daniel Jacobowitz
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=3E7EA4B2.5010306@cs.wisc.edu \
    --to=raj@cs.wisc.edu \
    --cc=dan@debian.org \
    --cc=linux-kernel@vger.kernel.org \
    --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;
as well as URLs for NNTP newsgroup(s).