Re: revising [patch] add arch_ptrace_stop() hook and use it on ia64

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> * Christoph Hellwig <hch@xxxxxx> [2007-07-20 21:12]:
> > Is anyone ia64-savy interested in revising the patch posted by David in
> > http://marc.info/?l=linux-kernel&m=111575781225495&w=2 ?
> > 
> > This would allow for converting ia64 to the generic ptrace code,
> > something I would love to see.
> 
> Looking into the archive, there were some concerns about SIGKILL
> handling. See http://marc.info/?l=linux-ia64&m=111577337511750&w=2.
> 
> Roland, did you look into that issue?

The issues with SIGKILL haven't changed, but I do understand them
better now, and they are not too hard to finesse.  However, more
fundamental, ia64-specific issues with the approach have come to
light, which now need to be resolved first.

I had this discussion with David in mind, and so the Intel folks
who worked on the ia64 port of utrace implemented this scheme
there.  The context where the code gets inserted is different, and
SIGKILL is not an issue for this code in that framework.  But the
plan is the same: a thread stopping with the expectation of being
examined flushes all its register data to the user memory backing
store addresses debuggers know about.

But, it became clear that we had only covered half the problem.
Calling ia64_sync_user_rbs copies register data to the user memory
so that a debugger can read it.  The debugger also expects to
change the user memory and have that affect registers seen both by
user mode, and by system call # and argument decoding when changed
at the syscall-entry tracing stop.  This requires either some
copying back the other way just before the thread resumes, or some
kind of rbs magic fiddling that forces it to fill its register
file from user memory when it resumes (including syscall entry).
That needs to be hashed out by experts on the ia64 rbs machinery
and its use in the kernel.

Bibo Mao has been working on this problem recently, and has a patch that
involves copying back from user rbs to kernel rbs after resuming from a
stop.  We discuss the utrace code on utrace-devel@xxxxxxxxxxx  The ideal
solution, whatever it is, should fit in about the same with the vanilla
ptrace as with utrace.  Bibo's patch uses a TIF flag to mark that the
synchronization needs to be done on any return to user-mode (and the
restart of traced syscalls).  Something like that is the only way to go
for utrace.  Even in vanilla ptrace, it's necessary (rather than just
doing it directly after wakeup in ptrace_stop) because a thread can be
ptrace'd (and its user rbs poked) when it was originally in TASK_STOPPED,
and not in ptrace_stop at all.


Thanks,
Roland
-
To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [Sparc Linux]     [DCCP]     [Linux ARM]     [Yosemite News]     [Linux SCSI]     [Linux x86_64]     [Linux for Ham Radio]

  Powered by Linux