Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andrew Cagney <ac131313@ges.redhat.com>
To: Joel Brobecker <brobecker@gnat.com>
Cc: gdb-patches@sources.redhat.com
Subject: Re: [RFA] enable software single step on alpha-osf
Date: Fri, 16 Aug 2002 10:11:00 -0000	[thread overview]
Message-ID: <3D5D323A.2030801@ges.redhat.com> (raw)
In-Reply-To: <20020805184920.GC892@gnat.com>

Joel,

Did the re-ordering of that if statement get committed?
This is wfi code so the smaller each change is the better.

>> The second part of the change is more tricky:
>>  +           stop_pc -= DECR_PC_AFTER_BREAK;
>> Is it fixing any failures?  Software singlestep can be handled in two 
>> different ways:
>> - as a breakpoint
>> - as a hardware single step
>> and which is prefered decides if/when there should be a decrement.
> 
> 
> Yes, this one is actually fixing most of the failures.
> 
> I made several attempts at fixing the regressions before coming with
> this solution. This part of the code is quite tricky, and it seems to me
> that treating single-step breakpoints as hardware single step is the
> simplest way to handle them. I like this because the differences in
> processing between software and hardware single-step become smaller.
> See for instance the change in breakpoint.c which made the use of this
> macro disappear from this file.
> 
> 
>> Anyway, the thing I'm having trouble convincing myself that there can't 
>> be a double decrement -- eg for a hardware watchpoint or similar.
> 
> 
> I've tried as much as I can to make sure this can not happen, but I am
> not familiar enough to have a good level of confidence in my analysis.
> All I can say is: this patch fixes all the regressions observed in the
> testsuite after switching to software single step. I know this is no
> absolute proof, but that gives me a certain level of confidence.


> +           /* Readjust the stop_pc as it is off by DECR_PC_AFTER_BREAK
> +              compared to the value it would have if the system stepping
> +              capability was used. This allows the rest of the code in
> +              this function to use this address without having to worry
> +              whether software single step is in use or not.  */
> +           stop_pc -= DECR_PC_AFTER_BREAK;
> +           ecs->random_signal = 0;

Ok, I'm convinced that this is going in the right direction (and was 
most likely the original intent of the code :-).  The more we can 
localize DECR_PC_AFTER_BREAK (ie. extract it from bpstat_stop_status()) 
the better! :-)

I this will be ok with some tweaks and a litte bit more experimentation.

I _think_ the above should be also writing the decremented stop_pc back 
to the target.  This is what appears to happen else where.  It also 
ensures that code that calls read_pc() instead of using stop_pc, gets a 
consistent value.  However, there could be some sort of dragon lurking 
here.  Can you please check this out?   The other possability is that 
something is detecting that the PC wasn't written (status register) and 
hence, assuming it should be decremented?  It might even be written by 
resume().

I think, the above code should also set a flag to indicate a ``software 
single step trap'' occured.  That indication can then be passed down to 
bpstat_stop_status() to so that it knows that this software single-step 
trap is not a breakpoint and hence that the decr_pc_after_break doesn't 
apply.  Off hand, a ``software_singlestep_p'' variable (||ed into 
not_a_sw_breakpoint) or (better?) an extra enum trap_type (unknown_trap, 
software_singlestep_trap) parameter explictly specifying the type of 
trap that was identifed.

> +         }

For the below, note that I've changed the variable name to 
``not_a_sw_breakpoint'' so you'll get a clash when merging.

> !   bp_addr = *pc - (not_a_breakpoint && !SOFTWARE_SINGLE_STEP_P () ? 
> !                    0 : DECR_PC_AFTER_BREAK);
>   
>     ALL_BREAKPOINTS_SAFE (b, temp)
>     {
> --- 2429,2435 ----
>        trap event.  For a trace/singlestep trap event, we would
>        not want to subtract DECR_PC_AFTER_BREAK from the PC. */
>   
> !   bp_addr = *pc - (not_a_breakpoint ? 0 : DECR_PC_AFTER_BREAK);
>   
>     ALL_BREAKPOINTS_SAFE (b, temp)
>     {

Andrew



  parent reply	other threads:[~2002-08-16 17:11 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-07-18 13:55 Joel Brobecker
2002-07-22  4:19 ` Eli Zaretskii
2002-07-25 16:38 ` Andrew Cagney
2002-07-26 10:17   ` Jason R Thorpe
2002-07-31 10:28     ` Joel Brobecker
2002-08-04 16:42 ` Andrew Cagney
2002-08-05 11:49   ` Joel Brobecker
2002-08-05 20:01     ` Andrew Cagney
2002-08-16 10:11     ` Andrew Cagney [this message]
2002-08-16 11:21       ` Joel Brobecker
2002-08-16 12:11         ` Andrew Cagney
2002-08-16 12:26           ` Daniel Jacobowitz
2002-08-16 12:40             ` Kevin Buettner
2002-08-16 14:40               ` Peter.Schauer
2002-08-16 12:41             ` Andrew Cagney
2002-08-16 16:05         ` Joel Brobecker
2002-08-16 16:45           ` Andrew Cagney
2002-08-16 17:58             ` Joel Brobecker
2002-08-16 18:23               ` Andrew Cagney
2002-08-16 23:29                 ` Joel Brobecker
2002-08-20  8:55                   ` Joel Brobecker
2002-08-20 17:29                     ` Andrew Cagney
2002-08-20 19:14                       ` Daniel Jacobowitz
2002-08-21  7:01                         ` Joel Brobecker

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=3D5D323A.2030801@ges.redhat.com \
    --to=ac131313@ges.redhat.com \
    --cc=brobecker@gnat.com \
    --cc=gdb-patches@sources.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