hardware breakpoints & watchpoint; was: TARGET_REGION_OK_FOR_HW_WATCHPOINT in target vector
Andrew Cagney
ac131313@redhat.com
Thu Sep 26 17:27:00 GMT 2002
> On Friday 20 September 2002 03:39, Andrew Cagney wrote:
>
>> Hello,
>>
>> The macro TARGET_REGION_OK_FOR_HW_WATCHPOINT() needs to be moved to the
>> target vector.
>>
>> As part of this, I'd like to propose that its behavour be modified
>> slightly. Instead of returning non-zero to indicate that the vaddr:len
>> is ok, it return the number of h/w watchpoint resources that are needed
>> to watch vaddr:len.
>
> Our architecture has more complex resource scheme, that cannot be observed
> just by numbering.
>
> Since I do not know enough to propose direct improvements, I would like to
> shortly describe our architecture. It handles hw breakpoints/watchpoint in
> the following way:
> Debug unit has up to 8 matchpoints.
> A matchpoint is determined by:
> * binary operator: signed/unsigned <, <=, ==, !=, >=, >, mask (bitwise AND)
> * right operand is always 32bit/64bit constant
[Deja-vu: I think I've seen similar asked of before.]
> * left operand is one of:
> - instruction fetch EA (effective address),
> - load EA
> - store EA
> - store data
> - load data
> - load or store EA
> - load or store data
> * matchpoints can be chained together with || or && operators. It is very
> important that they have same priority in our case!!!):
> same priority means: (...((data1 op1 const1) chain_op1 (data2 op2 const2))
> chain_op2 (data3 op3 const3)...
>
> e.g. $SEA == myvar && $SDATA == 5 is a watchpoint, which stops the CPU, when
> value 5 is written to myvar.
>
> or more complex one:
> ($LEA == my_var)&&($LDATA < 50)||($SEA == my_var)&&($SDATA >= 50).
>
> Currently our gdb implementation include parser and optimizator for such
> expressions, so truly almost everything can be written.
>
> * The above expressions can stop the cpu, start trace, stop trace or record
> specified data into HW trace
>
> We needed to add special instruction, to handle such complex expression
> grammar and to allocate matchpoints accordingly.
>
> It would be nice if we could create evironment common enough that all our
> special functionality would be included with hopefully very simple user
> interface.
GDB handles watchpoints performing the transformations:
- string
- expression tree
- list of values to watch
I think the ``correct fix'' is for GDB's watchpoint code to be enhanced
to do the operations you describe. A guess is to, instead of transform
the expression tree into a list of values. Some how optomize the
expression tree directly.
Andrew
More information about the Gdb
mailing list