[all-commits] [llvm/llvm-project] 369226: [lldb] Add 'modify' type watchpoints, make it defa...

Jason Molenda via All-commits all-commits at lists.llvm.org
Mon Sep 18 19:16:58 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 3692267ca8f9c51cb55e4387283762d921fe2ae2
      https://github.com/llvm/llvm-project/commit/3692267ca8f9c51cb55e4387283762d921fe2ae2
  Author: Jason Molenda <jmolenda at apple.com>
  Date:   2023-09-18 (Mon, 18 Sep 2023)

  Changed paths:
    M lldb/bindings/headers.swig
    A lldb/bindings/interface/SBWatchpointOptionsDocstrings.i
    M lldb/bindings/interfaces.swig
    M lldb/include/lldb/API/SBTarget.h
    A lldb/include/lldb/API/SBWatchpointOptions.h
    M lldb/include/lldb/Breakpoint/Watchpoint.h
    M lldb/include/lldb/Interpreter/OptionGroupWatchpoint.h
    M lldb/include/lldb/lldb-defines.h
    M lldb/include/lldb/lldb-enumerations.h
    M lldb/include/lldb/lldb-forward.h
    M lldb/source/API/CMakeLists.txt
    M lldb/source/API/SBTarget.cpp
    M lldb/source/API/SBValue.cpp
    M lldb/source/API/SBWatchpoint.cpp
    A lldb/source/API/SBWatchpointOptions.cpp
    M lldb/source/Breakpoint/Watchpoint.cpp
    M lldb/source/Commands/CommandObjectWatchpoint.cpp
    M lldb/source/Interpreter/OptionGroupWatchpoint.cpp
    M lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
    M lldb/source/Target/StopInfo.cpp
    M lldb/source/Target/Target.cpp
    M lldb/test/API/commands/watchpoints/multiple_hits/main.cpp
    M lldb/test/API/commands/watchpoints/unaligned-watchpoint/main.c
    M lldb/test/API/functionalities/gdb_remote_client/TestNoWatchpointSupportInfo.py
    M lldb/test/API/functionalities/watchpoint/large-watchpoint/TestLargeWatchpoint.py
    A lldb/test/API/functionalities/watchpoint/modify-watchpoints/Makefile
    A lldb/test/API/functionalities/watchpoint/modify-watchpoints/TestModifyWatchpoint.py
    A lldb/test/API/functionalities/watchpoint/modify-watchpoints/main.c
    M lldb/test/API/functionalities/watchpoint/unaligned-spanning-two-dwords/TestUnalignedSpanningDwords.py
    M lldb/test/API/python_api/default-constructor/sb_target.py
    M lldb/test/API/python_api/watchpoint/watchlocation/TestTargetWatchAddress.py

  Log Message:
  -----------
  [lldb] Add 'modify' type watchpoints, make it default (#66308)

Watchpoints in lldb can be either 'read', 'write', or 'read/write'. This
is exposing the actual behavior of hardware watchpoints. gdb has a
different behavior: a "write" type watchpoint only stops when the
watched memory region *changes*.

A user is using a watchpoint for one of three reasons:

1. Want to find what is changing/corrupting this memory.
2. Want to find what is writing to this memory.
3. Want to find what is reading from this memory.

I believe (1) is the most common use case for watchpoints, and it
currently can't be done in lldb -- the user needs to continue every time
the same value is written to the watched-memory manually. I think gdb's
behavior is the correct one. There are some use cases where a developer
wants to find every function that writes/reads to/from a memory region,
regardless of value, I want to still allow that functionality.

This is also a bit of groundwork for my large watchpoint support
proposal
https://discourse.llvm.org/t/rfc-large-watchpoint-support-in-lldb/72116
where I will be adding support for AArch64 MASK watchpoints which watch
power-of-2 memory regions. A user might ask to watch 24 bytes, and a
MASK watchpoint stub can do this with a 32-byte MASK watchpoint if it is
properly aligned. And we need to ignore writes to the final 8 bytes of
that watched region, and not show those hits to the user.

This patch adds a new 'modify' watchpoint type and it is the default.

rdar://108234227




More information about the All-commits mailing list