public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: "Maciej W. Rozycki" <macro@imgtec.com>
To: Pedro Alves <palves@redhat.com>
Cc: <gdb-patches@sourceware.org>, "Maciej W. Rozycki" <macro@linux-mips.org>
Subject: Re: [PATCH] Handle MIPS Linux SIGTRAP siginfo.si_code values
Date: Wed, 24 Feb 2016 20:39:00 -0000	[thread overview]
Message-ID: <alpine.DEB.2.00.1602242025100.15885@tp.orcam.me.uk> (raw)
In-Reply-To: <56CDFB9B.3090708@redhat.com>

On Wed, 24 Feb 2016, Pedro Alves wrote:

> >> +   The generic Linux target code should use GDB_ARCH_IS_TRAP_* instead
> >> +   of TRAP_* to abstract out these peculiarities.  */
> >>  #if defined __i386__ || defined __x86_64__
> >>  # define GDB_ARCH_IS_TRAP_BRKPT(X) ((X) == SI_KERNEL)
> >> +# define GDB_ARCH_IS_TRAP_HWBKPT(X) ((X) == TRAP_HWBKPT)
> >>  #elif defined __powerpc__
> >>  # define GDB_ARCH_IS_TRAP_BRKPT(X) ((X) == SI_KERNEL || (X) == TRAP_BRKPT)
> >> +# define GDB_ARCH_IS_TRAP_HWBKPT(X) ((X) == TRAP_HWBKPT)
> >> +#elif defined __mips__
> >> +# define GDB_ARCH_IS_TRAP_BRKPT(X) ((X) == SI_KERNEL)
> >> +# define GDB_ARCH_IS_TRAP_HWBKPT(X) ((X) == SI_KERNEL)
> > 
> >  Shall I add the TRAP_BRKPT and TRAP_HWBKPT codes to the MIPS Linux kernel 
> > then or not?  
> 
> The higher order issue was having a way to distinguish the possible
> traps, for correctness.  Since we found a way, it's no longer a
> pressing issue and we could leave it be.
> 
> > If anything, this looks like a performance win to me, at no 
> > significant cost (any possible kernel overhead will be in the range of a 
> > couple processor instructions, which is nothing compared to an extra 
> > ptrace(2) call and all the associated processing).
> 
> Yeah.  We usually need several other ptrace calls so it may not
> be noticeable.  But if you do teach the kernel about TRAP_BRKPT, and want to
> avoid the watchpoints check, I think gdb/gdbserver could be made to auto detect
> at run time what does the kernel report.  E.g,. have gdb fork itself, set a
> sw bp at the current PC in the child and continue it.  That triggers the bp
> immediately.  Then the parent can check what is in the child's si_code.  We
> do similar things already in linux_check_ptrace_features (gdb/nat/linux-ptrace.c).

 That would be the big-hammer approach.  However from my understanding of 
your code the benefit from such probing would only matter for speeding up 
random SIGTRAP reporting, a corner case not worth it IMO.

 Whereas for real breakpoint hits if we report TRAP_BRKPT for software 
breakpoints and TRAP_HWBKPT for hardware data or instruction breakpoints 
(the latters once implemented), then the:

	  if (GDB_ARCH_IS_TRAP_BRKPT (siginfo.si_code)
	      && GDB_ARCH_IS_TRAP_HWBKPT (siginfo.si_code))

condition will never be true for legitimate SIGTRAP events and the slow 
path won't trigger.  But then the MIPS variant will need:

# define GDB_ARCH_IS_TRAP_BRKPT(X) ((X) == SI_KERNEL || (X) == TRAP_BRKPT)
# define GDB_ARCH_IS_TRAP_HWBKPT(X) ((X) == SI_KERNEL || (X) == TRAP_HWBKPT)

to actually recognise these events at all in the first place.  So we 
better have it right away or updated kernels will break GDB for a change.  
But you haven't put it in your proposal despite my earlier suggestion, 
hence my question whether you want this kernel API correction and the 
resulting optimisation or not (I do).

 Given my observations above it looks to me that we only really need the 
two macros updated with my proposal on the GDB side and a corresponding 
rather trivial kernel update to have the codes set in the first place, and 
we can get away without complicating code with an extra run-time probe.

 Have I missed anything?

  Maciej

  parent reply	other threads:[~2016-02-24 20:39 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-24 16:44 Pedro Alves
2016-02-24 18:29 ` Maciej W. Rozycki
2016-02-24 18:51   ` Pedro Alves
2016-02-24 19:02     ` Luis Machado
2016-02-24 20:49       ` Maciej W. Rozycki
2016-02-24 21:10         ` Luis Machado
2016-02-24 20:39     ` Maciej W. Rozycki [this message]
2016-02-24 23:20       ` Pedro Alves
2016-02-24 23:37         ` [PATCH] MIPS/Linux: Also recognize TRAP_BRKPT and TRAP_HWBKPT Pedro Alves
2016-02-25  1:39         ` [PATCH] Handle MIPS Linux SIGTRAP siginfo.si_code values Maciej W. Rozycki
2016-02-25  1:45           ` Pedro Alves
2016-04-05 16:57             ` Maciej W. Rozycki
2016-04-15 23:17               ` Pedro Alves
2016-02-24 18:51 ` Luis Machado

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=alpine.DEB.2.00.1602242025100.15885@tp.orcam.me.uk \
    --to=macro@imgtec.com \
    --cc=gdb-patches@sourceware.org \
    --cc=macro@linux-mips.org \
    --cc=palves@redhat.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).