mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Roland McGrath <roland@redhat.com>
To: Mike Frysinger <vapier.adi@gmail.com>
Cc: Christoph Hellwig <hch@lst.de>,
	oleg@redhat.com, Andrew Morton <akpm@linux-foundation.org>,
	linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
	uclinux-dist-devel@blackfin.uclinux.org
Subject: Re: [PATCH 1/2] Blackfin: initial tracehook support
Date: Fri, 12 Feb 2010 12:44:27 -0800 (PST)	[thread overview]
Message-ID: <20100212204427.5F75CA18@magilla.sf.frob.com> (raw)
In-Reply-To: Mike Frysinger's message of  Thursday, 11 February 2010 23:33:20 -0500 <8bd0f97a1002112033m5805d4eco3add4d5625e71e9@mail.gmail.com>

> cant say we've had anything to do with this ;).  nor does Blackfin
> support coredumps on FDPIC ELF (and FLAT has never supported
> coredumps), and i'm pretty sure we havent looked at anything in gdb
> along these lines.  no one has ever asked, so we've never looked.

Ok.

> i dont have a problem with implementing user_regsets ... my point was
> more that if there's no code using these interfaces, then i could slap
> together a whole lot of crap and never know if it's correct since i
> cant test it.  Blackfin doesnt currently implement
> PTRACE_{G,S}ETREGSET, so even with that patch i dont think i have any
> (straight forward) test vectors.

The point of PTRACE_{G,S}ETREGSET is that no arch code implements them.
The generic ptrace code does.  The patch for that is in tip/master (I think).

Moreover, the usual cleanup is to make your arch_ptrace() use
copy_regset_from_user() and copy_regset_to_user() to implement existing
calls ike PTRACE_GETREGS.  That way, existing ptrace users (strace, gdb)
become tests of the user_regset paths (some of them).

> i missed the passing of TIF_SINGLESTEP in as the second arg.  i
> thought you were taking issue with the if(...) portions.

I was trying to explain how you apply your arch knowledge to decide what is
exactly right for your arch code.

> the way we do it on Blackfin atm is that syscall_trace_{enter,leave}
> are only called when TIF_SYSCALL_TRACE is set (in the low level
> assembly), so any checking of thread_flags here is pointless.  i guess
> the low level code needs updating to check a mask so that we can add
> TIF_SYSCALL_TRACEPOINT easier.

What happens today when PTRACE_SINGLESTEP is used with the PC sitting at a
syscall instruction?  If that gets a single-step report (SIGTRAP) after the
syscall is done, with the PC sitting at the instruction immediately
following the syscall instruction, then you are already doing the right
thing.  On some other machines, making that happen involves arch assembly
code making sure it gets to its syscall_trace_leave() for this case.

> so tracehook_report_syscall_exit() checking TIF_SINGLESTEP only makes
> sense when the arch doesnt support hardware single stepping in user
> mode ?  the Blackfin processor does support hardware single stepping
> (and we utilize it in Linux).

No, that is not what I said at all.  It is necessary if and only if the way
that the hardware single-step interacts with the syscall entry/exit paths
on your machine means that the completion of the user-mode syscall
instruction does not result in a single-step trap like any other single
user-mode instruction would.  This is the case on machines such as x86 and
powerpc (I don't know others in detail).  There, the hardware single-step
feature works such that the real hardware trap either comes in kernel mode
right at syscall entry, or doesn't come at all.  Hence, the arch code has
to notice when single-step was enabled at syscall entry time and simulate
the hardware trap before returning to user mode.

> also, in reading the kerneldocs for tracehook_report_syscall_exit(),
> it says "an attempted system call".  should system calls greater than
> NR_syscall (-ENOSYS) also get traced ?  we dont currently do this on
> the Blackfin port, but going by `strace` differences between my
> desktop and the board, i guess the answer is "the Blackfin code is
> currently broken".

Yes.  It's any syscall attempt.  Inside tracehook_report_syscall_entry(),
all the registers can be changed (via user_regset, i.e. ptrace) so that
what starts as an entry with a bogus syscall number becomes an entry with a
different syscall number and/or arguments.  So you can't decide before
tracehook_report_syscall_entry() whether it is "real" or not.  For every
tracehook_report_syscall_entry() call, there must be a corresponding
tracehook_report_syscall_exit() call (unless TIF_SYSCALL_TRACE was cleared
in the interim).  At that exit point, the registers can again be changed.

For example, an "expected" use (that some things do today via ptrace) is to
catch the entry, abort the syscall by changing the syscall number register
to something bogus like -1, resume so it diagnoses -ENOSYS and gets to
syscall exit, then catch the exit and reset the return value registers to
pretend some particular syscall results happened.


Thanks,
Roland


  parent reply	other threads:[~2010-02-12 20:45 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-02 18:57 [PATCH 1/14] move user_enable_single_step & co prototypes to linux/ptrace.h Christoph Hellwig
2010-02-02 18:58 ` [PATCH 2/14] alpha: use generic ptrace_resume code Christoph Hellwig
2010-02-03  4:35   ` Matt Turner
2010-02-02 18:58 ` [PATCH 3/14] arm: " Christoph Hellwig
2010-02-02 18:58 ` [PATCH 4/14] avr32: " Christoph Hellwig
2010-02-03  3:17   ` Haavard Skinnemoen
2010-02-03  8:36     ` Christoph Hellwig
2010-02-03 19:22       ` Oleg Nesterov
2010-02-03 19:28         ` Christoph Hellwig
2010-02-02 18:59 ` [PATCH 5/14] blackfin: " Christoph Hellwig
2010-02-02 20:29   ` Mike Frysinger
2010-02-03 19:36     ` Mike Frysinger
2010-02-03 19:42       ` Christoph Hellwig
2010-02-11  9:43   ` [PATCH 0/2] Blackfin: " Mike Frysinger
2010-02-11  9:43   ` [PATCH 1/2] Blackfin: initial tracehook support Mike Frysinger
2010-02-11 20:46     ` Roland McGrath
2010-02-11 23:54       ` Mike Frysinger
2010-02-12  3:24         ` Roland McGrath
2010-02-12  4:33           ` Mike Frysinger
2010-02-12 15:24             ` Oleg Nesterov
2010-02-12 20:44             ` Roland McGrath [this message]
2010-02-13  9:41               ` Mike Frysinger
2010-02-15  7:36                 ` Mike Frysinger
2010-02-15 20:07                 ` Roland McGrath
2010-02-11  9:43   ` [PATCH 2/2] Blackfin: use generic ptrace_resume code Mike Frysinger
2010-02-02 18:59 ` [PATCH 6/14] h8300: " Christoph Hellwig
2010-02-02 18:59 ` [PATCH 7/14] m68knommu: " Christoph Hellwig
2010-02-03  6:54   ` Greg Ungerer
2010-02-02 18:59 ` [PATCH 8/14] microblaze: " Christoph Hellwig
2010-02-03 11:00   ` Michal Simek
2010-02-02 18:59 ` [PATCH 9/14] mips: " Christoph Hellwig
2010-02-02 19:19   ` Ralf Baechle
2010-02-02 19:00 ` [PATCH 10/14] um: " Christoph Hellwig
2010-02-02 19:00 ` [PATCH 11/14] xtensa: " Christoph Hellwig
2010-02-02 19:00 ` [PATCH 12/14] cris arch-v10: " Christoph Hellwig
2010-02-02 19:00 ` [PATCH, RFC 13/14] cris arch-v32: " Christoph Hellwig
2010-02-02 19:00 ` [PATCH, RFC 14/14] m32r: " Christoph Hellwig
2010-02-03  8:42 ` [PATCH 1/14] move user_enable_single_step & co prototypes to linux/ptrace.h Mike Frysinger
2010-02-03  8:56   ` Christoph Hellwig
2010-02-08 10:50 ` David Howells
2010-02-08 19:51 ` Roland McGrath
2010-02-10 22:03   ` Christoph Hellwig

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=20100212204427.5F75CA18@magilla.sf.frob.com \
    --to=roland@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=hch@lst.de \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=oleg@redhat.com \
    --cc=uclinux-dist-devel@blackfin.uclinux.org \
    --cc=vapier.adi@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®