The Watchpoint and Breakpoint objects try to track the hardware index that was used for them, if they are hardware wp/bp's. The majority of our debugging goes over the gdb remote serial protocol, and when we set the watchpoint/breakpoint, there is no (standard) way for the remote stub to communicate to lldb which hardware index was used. We have an lldb-extension packet to query the total number of watchpoint registers. When a watchpoint is hit, there is an lldb extension to the stop reply packet (documented in lldb-gdb-remote.txt) to describe the watchpoint including its actual hardware index, <addr within wp range> <wp hw index> <actual accessed address> (the third field is specifically needed for MIPS). At this point, if the stub reported these three fields (the stub is only required to provide the first), we can know the actual hardware index for this watchpoint. Breakpoints are worse; there's never any way for us to be notified about which hardware index was used. Breakpoints got this as a side effect of inherting from StoppointSite with Watchpoints. We expose the watchpoint hardware index through "watchpoint list -v" and through SBWatchpoint::GetHardwareIndex. With my large watchpoint support, there is no *single* hardware index that may be used for a watchpoint, it may need multiple resources. Also I don't see what a user is supposed to do with this information, or an IDE. Knowing the total number of watchpoint registers on the target, and knowing how many Watchpoint Resources are currently in use, is helpful. Knowing how many Watchpoint Resources a single user-specified watchpoint needed to be implemented is useful. But knowing which registers were used is an implementation detail and not available until we hit the watchpoint when using gdb remote serial protocol. So given all that, I'm removing watchpoint hardware index numbers. I'm changing the SB API to always return -1.
50 lines
1.8 KiB
OpenEdge ABL
50 lines
1.8 KiB
OpenEdge ABL
%feature("docstring",
|
|
"Represents an instance of watchpoint for a specific target program.
|
|
|
|
A watchpoint is determined by the address and the byte size that resulted in
|
|
this particular instantiation. Each watchpoint has its settable options.
|
|
|
|
See also :py:class:`SBTarget.watchpoint_iter()` for example usage of iterating through the
|
|
watchpoints of the target."
|
|
) lldb::SBWatchpoint;
|
|
|
|
%feature("docstring", "
|
|
Deprecated. Previously: Return the hardware index of the
|
|
watchpoint register. Now: -1 is always returned."
|
|
) lldb::SBWatchpoint::GetHardwareIndex;
|
|
|
|
%feature("docstring", "
|
|
Get the condition expression for the watchpoint."
|
|
) lldb::SBWatchpoint::GetCondition;
|
|
|
|
%feature("docstring", "
|
|
The watchpoint stops only if the condition expression evaluates to true."
|
|
) lldb::SBWatchpoint::SetCondition;
|
|
|
|
%feature("docstring", "
|
|
Returns the type recorded when the watchpoint was created. For variable
|
|
watchpoints it is the type of the watched variable. For expression
|
|
watchpoints it is the type of the provided expression."
|
|
) lldb::SBWatchpoint::GetType;
|
|
|
|
%feature("docstring", "
|
|
Returns the kind of value that was watched when the watchpoint was created.
|
|
Returns one of the following eWatchPointValueKindVariable,
|
|
eWatchPointValueKindExpression, eWatchPointValueKindInvalid.
|
|
"
|
|
) lldb::SBWatchpoint::GetWatchValueKind;
|
|
|
|
%feature("docstring", "
|
|
Get the spec for the watchpoint. For variable watchpoints this is the name
|
|
of the variable. For expression watchpoints it is empty
|
|
(may change in the future)."
|
|
) lldb::SBWatchpoint::GetWatchSpec;
|
|
|
|
%feature("docstring", "
|
|
Returns true if the watchpoint is watching reads. Returns false otherwise."
|
|
) lldb::SBWatchpoint::IsWatchingReads;
|
|
|
|
%feature("docstring", "
|
|
Returns true if the watchpoint is watching writes. Returns false otherwise."
|
|
) lldb::SBWatchpoint::IsWatchingWrites;
|