From: "Ulrich Weigand" <uweigand@de.ibm.com>
To: bauerman@br.ibm.com (Thiago Jung Bauermann)
Cc: brobecker@adacore.com (Joel Brobecker),
gdb-patches@sourceware.org,
luisgpm@linux.vnet.ibm.com (Luis Machado),
tyrlik@us.ibm.com (Matt Tyrlik)
Subject: Re: [PATCH 2/4] Hardware accelerated watchpoint conditions
Date: Fri, 02 Jul 2010 13:20:00 -0000 [thread overview]
Message-ID: <201007021319.o62DJvv4018879@d12av02.megacenter.de.ibm.com> (raw)
In-Reply-To: <1277995817.4087.22.camel@hactar.cps.virtua.com.br> from "Thiago Jung Bauermann" at Jul 01, 2010 11:50:16 AM
Thiago Jung Bauermann wrote:
> I changed the comment to read:
>
> /* Return non-zero if the target is capable of using hardware to evaluate
> the condition expression. In this case, if the condition is false when
> the watched memory location changes, execution may continue without the
> debugger being notified.
>
> Due to limitations in the hardware implementation, it may be capable of
> avoiding triggering the watchpoint in some cases where the condition
> expression is false, but may report some false positives as well.
> For this reason, GDB will still evaluate the condition expression when
> the watchpoint triggers. */
>
> What do you think?
Looks good to me.
> > > + for (; v; v = value_next (v))
> > > + {
> > > + if (VALUE_LVAL (v) == lval_memory)
> > > + {
> > > + /* A lazy memory lvalue is one that GDB never needed to fetch;
> > > + we either just used its address (e.g., `a' in `a.b') or
> > > + we never needed it at all (e.g., `a' in `a,b'). */
> > > + if (!value_lazy (v))
> > > + found_memory_cnt++;
> > > + }
> > > + else if (VALUE_LVAL (v) != not_lval
> > > + && deprecated_value_modifiable (v) == 0)
> > > + return -1; /* ??? What does this represent? */
> >
> > These are values from the history (e.g. $1). In this context, they
> > should be treated as non-lvalues, so they should be fine ...
>
> I removed that else if then. I'll submit a separate patch to replace
> that comment in can_use_hardware_watchpoint.
Actually, thinking about this a bit more, the logic still does not
seem quite correct. What we really want is:
- not_lval values: these are fine
- deprecated_value_modifiable (v) == 0 (history) values: treat just
like not_lval, no matter what their VALUE_LVAL says
- lval_memory values: check whether they are lazy or not and count them
- all other values (lval_computed, lval_internalvar ...): *not* OK
In particular, the missing check on lval_computed may become more important
now that DWARF multi-piece values are always represented as lval_computed ...
(This may also affect watchpoint code in breakpoint.c, but I guess that's
a different issue.)
> 2010-07-01 Sergio Durigan Junior <sergiodj@linux.vnet.ibm.com>
> Thiago Jung Bauermann <bauerman@br.ibm.com>
>
> * breakpoint.c (fetch_watchpoint_value): Rename to fetch_subexp_value
> and move to eval.c. Change callers.
> (insert_bp_location): Pass watchpoint condition in
> target_insert_watchpoint.
> (remove_breakpoint_1) Pass watchpoint condition in
> target_remove_watchpoint.
> (watchpoint_locations_match): Call
> target_can_accel_watchpoint_condition.
> * eval.c: Include wrapper.h.
> (fetch_subexp_value): Moved from breakpoint.c.
> * ppc-linux-nat.c (ppc_linux_region_ok_for_hw_watchpoint):
> Formatting fix.
> (can_use_watchpoint_cond_accel): New function.
> (calculate_dvc): Likewise.
> (num_memory_accesses): Likewise.
> (check_condition): Likewise.
> (ppc_linux_can_accel_watchpoint_condition): Likewise
> (ppc_linux_insert_watchpoint): Call can_use_watchpoint_cond_accel,
> check_condition and calculate_dvc.
> (ppc_linux_remove_watchpoint): Likewise.
> (_initialize_ppc_linux_nat): Set to_can_accel_watchpoint_condition to
> ppc_linux_can_accel_watchpoint_condition
> * target.c (debug_to_insert_watchpoint): Add argument for watchpoint
> condition.
> (debug_to_remove_watchpoint): Likewise.
> (debug_to_can_accel_watchpoint_condition): New function.
> (update_current_target): Set to_can_accel_watchpoint_condition.
> (setup_target_debug): Set to_can_accel_watchpoint_condition.
> * target.h: Add opaque declaration for struct expression.
> (struct target_ops) <to_insert_watchpoint>,
> <to_remove_watchpoint>: Add new arguments to pass the watchpoint
> <to_can_accel_watchpoint_condition>: New member.
> condition. Update all callers and implementations.
> (target_can_accel_watchpoint_condition): New macro.
> * value.c (free_value_chain): New function.
> * value.h (fetch_subexp_value): New prototype.
> (free_value_chain): Likewise.
Except for the num_memory_accesses logic discussed above, the patch
is otherwise OK now.
Thanks,
Ulrich
--
Dr. Ulrich Weigand
GNU Toolchain for Linux on System z and Cell BE
Ulrich.Weigand@de.ibm.com
next prev parent reply other threads:[~2010-07-02 13:20 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-24 0:32 Thiago Jung Bauermann
2009-12-24 18:41 ` Jan Kratochvil
2009-12-30 3:23 ` Thiago Jung Bauermann
2010-01-04 17:33 ` Thiago Jung Bauermann
2010-01-12 10:51 ` Joel Brobecker
2010-02-04 21:48 ` Thiago Jung Bauermann
2010-02-05 5:16 ` Joel Brobecker
2010-02-08 20:01 ` Thiago Jung Bauermann
2010-02-11 18:24 ` Ulrich Weigand
2010-06-09 4:02 ` Thiago Jung Bauermann
2010-06-09 13:28 ` Ulrich Weigand
2010-06-23 17:21 ` Thiago Jung Bauermann
2010-06-23 19:57 ` Ulrich Weigand
2010-07-01 14:51 ` Thiago Jung Bauermann
2010-07-02 13:20 ` Ulrich Weigand [this message]
2010-07-06 22:22 ` Thiago Jung Bauermann
2010-07-07 12:25 ` Ulrich Weigand
2010-07-07 16:21 ` Thiago Jung Bauermann
2010-07-07 16:45 ` Joel Brobecker
2010-07-07 20:37 ` Thiago Jung Bauermann
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=201007021319.o62DJvv4018879@d12av02.megacenter.de.ibm.com \
--to=uweigand@de.ibm.com \
--cc=bauerman@br.ibm.com \
--cc=brobecker@adacore.com \
--cc=gdb-patches@sourceware.org \
--cc=luisgpm@linux.vnet.ibm.com \
--cc=tyrlik@us.ibm.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