dlav-sc wrote:

@jimingham,

> I found this a bit confusing when reading this patch. There are really two 
> "conditions" being talked about here. There's the primary "hidden" condition 
> that tests "did the region we are watching change value" and then there's the 
> watchpoint condition set with watch modify -c. Sometimes the patch wasn't 
> clear about this.

The first condition you mentioned is generally speaking only necessary for 
modify-type watchpoints.

With hardware watchpoints, lldb-server can only detect read/write access to the 
watched region but cannot determine the actual value. Therefore, to implement 
modify-type watchpoint logic, lldb-client needs to perform additional checks to 
verify that the watched value has actually changed (ensuring we're not writing 
the same value) after lldb-server reports write access to the watched region.

For software watchpoints, the entire logic is implemented on the lldb-client 
side. Since we cannot trigger on memory access (read or write), software 
watchpoints can only be of the modify type (gdb also only supports modify-type 
for software watchpoints). lldb-client checks whether the watched value has 
changed, similar to hardware modify-type watchpoints, but after each step in 
this case.

The second condition is the one I referenced in my previous comment. It is 
checked by lldb-client using the standard expression mechanism (similar to when 
you type expr -- <expression>).

Please take a look at `Watchpoint::WatchedValueReportable`. In this function, I 
check both conditions: first, I check the watch condition (the second one) 
using `CheckWatchpointCondition()` then I calculate the current watched value 
(`CalculateWatchedValue()`) and compare it with the old value for software 
watchpoints and hardware modify-type watchpoints using `IsValueObjectsEqual()` 
(the first condition).

https://github.com/llvm/llvm-project/pull/151195
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to