From e04bbb2579b91a08a99fd208739a17313de969ab Mon Sep 17 00:00:00 2001 From: Piyush Jaiswal Date: Wed, 22 Oct 2025 17:37:29 -0700 Subject: [PATCH 1/4] Refactor Breakpoint event notification --- lldb/include/lldb/Target/Target.h | 15 +++++++++++++++ lldb/source/Breakpoint/Breakpoint.cpp | 11 ++++------- lldb/source/Breakpoint/BreakpointList.cpp | 7 +------ lldb/source/Breakpoint/BreakpointLocation.cpp | 6 ++---- lldb/source/Target/Target.cpp | 17 +++++++++++++++++ 5 files changed, 39 insertions(+), 17 deletions(-) diff --git a/lldb/include/lldb/Target/Target.h b/lldb/include/lldb/Target/Target.h index f4a09237ce897..88267c3ab74f8 100644 --- a/lldb/include/lldb/Target/Target.h +++ b/lldb/include/lldb/Target/Target.h @@ -1346,6 +1346,21 @@ class Target : public std::enable_shared_from_this, const lldb_private::RegisterFlags &flags, uint32_t byte_size); + /// Sends a breakpoint notification event if any listener is registered. + /// \param[in] bp + /// The breakpoint that was hit. + /// \param[in] eventKind + /// The kind of event that occurred. + void NotifyBreakpointChanged(Breakpoint &bp, + lldb::BreakpointEventType eventKind); + /// Sends a breakpoint notification event if any listener is registered. + /// \param[in] bp + /// The breakpoint that was hit. + /// \param[in] data + /// The data associated with the event. + void NotifyBreakpointChanged(Breakpoint &bp, + const lldb::EventDataSP &breakpoint_data_sp); + llvm::Expected ReadInstructions(const Address &start_addr, uint32_t count, const char *flavor_string = nullptr); diff --git a/lldb/source/Breakpoint/Breakpoint.cpp b/lldb/source/Breakpoint/Breakpoint.cpp index b23d1143d60c4..9306335888d77 100644 --- a/lldb/source/Breakpoint/Breakpoint.cpp +++ b/lldb/source/Breakpoint/Breakpoint.cpp @@ -1099,12 +1099,11 @@ bool Breakpoint::EvaluatePrecondition(StoppointCallbackContext &context) { void Breakpoint::SendBreakpointChangedEvent( lldb::BreakpointEventType eventKind) { - if (!IsInternal() && GetTarget().EventTypeHasListeners( - Target::eBroadcastBitBreakpointChanged)) { + if (!IsInternal()) { std::shared_ptr data = std::make_shared(eventKind, shared_from_this()); - GetTarget().BroadcastEvent(Target::eBroadcastBitBreakpointChanged, data); + GetTarget().NotifyBreakpointChanged(*this, eventKind); } } @@ -1113,10 +1112,8 @@ void Breakpoint::SendBreakpointChangedEvent( if (!breakpoint_data_sp) return; - if (!IsInternal() && - GetTarget().EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged)) - GetTarget().BroadcastEvent(Target::eBroadcastBitBreakpointChanged, - breakpoint_data_sp); + if (!IsInternal()) + GetTarget().NotifyBreakpointChanged(*this, breakpoint_data_sp); } const char *Breakpoint::BreakpointEventTypeAsCString(BreakpointEventType type) { diff --git a/lldb/source/Breakpoint/BreakpointList.cpp b/lldb/source/Breakpoint/BreakpointList.cpp index 779490ae0316a..8fb01e97c40ca 100644 --- a/lldb/source/Breakpoint/BreakpointList.cpp +++ b/lldb/source/Breakpoint/BreakpointList.cpp @@ -17,12 +17,7 @@ using namespace lldb_private; static void NotifyChange(const BreakpointSP &bp, BreakpointEventType event) { Target &target = bp->GetTarget(); - if (target.EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged)) { - auto event_data_sp = - std::make_shared(event, bp); - target.BroadcastEvent(Target::eBroadcastBitBreakpointChanged, - event_data_sp); - } + target.NotifyBreakpointChanged(*bp, event); } BreakpointList::BreakpointList(bool is_internal) diff --git a/lldb/source/Breakpoint/BreakpointLocation.cpp b/lldb/source/Breakpoint/BreakpointLocation.cpp index 22c98acda8c59..f25209c15e007 100644 --- a/lldb/source/Breakpoint/BreakpointLocation.cpp +++ b/lldb/source/Breakpoint/BreakpointLocation.cpp @@ -749,13 +749,11 @@ void BreakpointLocation::Dump(Stream *s) const { void BreakpointLocation::SendBreakpointLocationChangedEvent( lldb::BreakpointEventType eventKind) { - if (!m_owner.IsInternal() && m_owner.GetTarget().EventTypeHasListeners( - Target::eBroadcastBitBreakpointChanged)) { + if (!m_owner.IsInternal()) { auto data_sp = std::make_shared( eventKind, m_owner.shared_from_this()); data_sp->GetBreakpointLocationCollection().Add(shared_from_this()); - m_owner.GetTarget().BroadcastEvent(Target::eBroadcastBitBreakpointChanged, - data_sp); + m_owner.GetTarget().NotifyBreakpointChanged(m_owner, data_sp); } } diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp index e224a12e33463..0b408a9521eb9 100644 --- a/lldb/source/Target/Target.cpp +++ b/lldb/source/Target/Target.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "lldb/Target/Target.h" +#include "lldb/Breakpoint/Breakpoint.h" #include "lldb/Breakpoint/BreakpointIDList.h" #include "lldb/Breakpoint/BreakpointPrecondition.h" #include "lldb/Breakpoint/BreakpointResolver.h" @@ -5244,3 +5245,19 @@ void Target::ClearSectionLoadList() { GetSectionLoadList().Clear(); } void Target::DumpSectionLoadList(Stream &s) { GetSectionLoadList().Dump(s, this); } + +void Target::NotifyBreakpointChanged(Breakpoint &bp, + lldb::BreakpointEventType eventKind) { + if (EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged)) { + std::shared_ptr data = + std::make_shared( + eventKind, bp.shared_from_this()); + BroadcastEvent(Target::eBroadcastBitBreakpointChanged, data); + } +} + +void Target::NotifyBreakpointChanged( + Breakpoint &bp, const lldb::EventDataSP &breakpoint_data_sp) { + if (EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged)) + BroadcastEvent(Target::eBroadcastBitBreakpointChanged, breakpoint_data_sp); +} From 487b285cea66fa3881c8f38df995b65d0025654c Mon Sep 17 00:00:00 2001 From: Piyush Jaiswal Date: Thu, 23 Oct 2025 13:08:45 -0700 Subject: [PATCH 2/4] Remove redundant lines of code and update comments --- lldb/include/lldb/Target/Target.h | 4 ++-- lldb/source/Breakpoint/Breakpoint.cpp | 3 --- lldb/source/Breakpoint/BreakpointList.cpp | 3 +-- lldb/source/Target/Target.cpp | 4 ++-- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/lldb/include/lldb/Target/Target.h b/lldb/include/lldb/Target/Target.h index 88267c3ab74f8..4d4355212a70b 100644 --- a/lldb/include/lldb/Target/Target.h +++ b/lldb/include/lldb/Target/Target.h @@ -1348,14 +1348,14 @@ class Target : public std::enable_shared_from_this, /// Sends a breakpoint notification event if any listener is registered. /// \param[in] bp - /// The breakpoint that was hit. + /// The breakpoint to send a nofication for. /// \param[in] eventKind /// The kind of event that occurred. void NotifyBreakpointChanged(Breakpoint &bp, lldb::BreakpointEventType eventKind); /// Sends a breakpoint notification event if any listener is registered. /// \param[in] bp - /// The breakpoint that was hit. + /// The breakpoint that has changed. /// \param[in] data /// The data associated with the event. void NotifyBreakpointChanged(Breakpoint &bp, diff --git a/lldb/source/Breakpoint/Breakpoint.cpp b/lldb/source/Breakpoint/Breakpoint.cpp index 9306335888d77..63604bfb406e5 100644 --- a/lldb/source/Breakpoint/Breakpoint.cpp +++ b/lldb/source/Breakpoint/Breakpoint.cpp @@ -1100,9 +1100,6 @@ bool Breakpoint::EvaluatePrecondition(StoppointCallbackContext &context) { void Breakpoint::SendBreakpointChangedEvent( lldb::BreakpointEventType eventKind) { if (!IsInternal()) { - std::shared_ptr data = - std::make_shared(eventKind, shared_from_this()); - GetTarget().NotifyBreakpointChanged(*this, eventKind); } } diff --git a/lldb/source/Breakpoint/BreakpointList.cpp b/lldb/source/Breakpoint/BreakpointList.cpp index 8fb01e97c40ca..e3dd62bfa329d 100644 --- a/lldb/source/Breakpoint/BreakpointList.cpp +++ b/lldb/source/Breakpoint/BreakpointList.cpp @@ -16,8 +16,7 @@ using namespace lldb; using namespace lldb_private; static void NotifyChange(const BreakpointSP &bp, BreakpointEventType event) { - Target &target = bp->GetTarget(); - target.NotifyBreakpointChanged(*bp, event); + bp->GetTarget().NotifyBreakpointChanged(*bp, event); } BreakpointList::BreakpointList(bool is_internal) diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp index 0b408a9521eb9..8780d46afb331 100644 --- a/lldb/source/Target/Target.cpp +++ b/lldb/source/Target/Target.cpp @@ -5249,10 +5249,10 @@ void Target::DumpSectionLoadList(Stream &s) { void Target::NotifyBreakpointChanged(Breakpoint &bp, lldb::BreakpointEventType eventKind) { if (EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged)) { - std::shared_ptr data = + std::shared_ptr data_sp = std::make_shared( eventKind, bp.shared_from_this()); - BroadcastEvent(Target::eBroadcastBitBreakpointChanged, data); + BroadcastEvent(Target::eBroadcastBitBreakpointChanged, data_sp); } } From dd427aa0b1796f50c7c938f155f8a350c90bf5e3 Mon Sep 17 00:00:00 2001 From: Piyush Jaiswal Date: Thu, 23 Oct 2025 13:44:40 -0700 Subject: [PATCH 3/4] Fix parameter names and update comments --- lldb/include/lldb/Target/Target.h | 12 ++---------- lldb/source/Breakpoint/Breakpoint.cpp | 7 +++---- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/lldb/include/lldb/Target/Target.h b/lldb/include/lldb/Target/Target.h index 4d4355212a70b..f449f5cad98ff 100644 --- a/lldb/include/lldb/Target/Target.h +++ b/lldb/include/lldb/Target/Target.h @@ -1347,17 +1347,9 @@ class Target : public std::enable_shared_from_this, uint32_t byte_size); /// Sends a breakpoint notification event if any listener is registered. - /// \param[in] bp - /// The breakpoint to send a nofication for. - /// \param[in] eventKind - /// The kind of event that occurred. void NotifyBreakpointChanged(Breakpoint &bp, - lldb::BreakpointEventType eventKind); + lldb::BreakpointEventType event_kind); /// Sends a breakpoint notification event if any listener is registered. - /// \param[in] bp - /// The breakpoint that has changed. - /// \param[in] data - /// The data associated with the event. void NotifyBreakpointChanged(Breakpoint &bp, const lldb::EventDataSP &breakpoint_data_sp); @@ -1371,7 +1363,7 @@ class Target : public std::enable_shared_from_this, StopHook(const StopHook &rhs); virtual ~StopHook() = default; - enum class StopHookKind : uint32_t { CommandBased = 0, ScriptBased }; + enum class StopHookKind : uint32_t { CommandBased = 0, ScriptBased }; enum class StopHookResult : uint32_t { KeepStopped = 0, RequestContinue, diff --git a/lldb/source/Breakpoint/Breakpoint.cpp b/lldb/source/Breakpoint/Breakpoint.cpp index 63604bfb406e5..201d8d20c4901 100644 --- a/lldb/source/Breakpoint/Breakpoint.cpp +++ b/lldb/source/Breakpoint/Breakpoint.cpp @@ -1098,10 +1098,9 @@ bool Breakpoint::EvaluatePrecondition(StoppointCallbackContext &context) { } void Breakpoint::SendBreakpointChangedEvent( - lldb::BreakpointEventType eventKind) { - if (!IsInternal()) { - GetTarget().NotifyBreakpointChanged(*this, eventKind); - } + lldb::BreakpointEventType event_kind) { + if (!IsInternal()) + GetTarget().NotifyBreakpointChanged(*this, event_kind); } void Breakpoint::SendBreakpointChangedEvent( From 448c1610b054c8a85a65a36587e2d28d1727b4b9 Mon Sep 17 00:00:00 2001 From: Piyush Jaiswal Date: Fri, 24 Oct 2025 11:47:46 -0700 Subject: [PATCH 4/4] Update Comments --- lldb/include/lldb/Target/Target.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lldb/include/lldb/Target/Target.h b/lldb/include/lldb/Target/Target.h index f449f5cad98ff..016decd97e465 100644 --- a/lldb/include/lldb/Target/Target.h +++ b/lldb/include/lldb/Target/Target.h @@ -1346,10 +1346,10 @@ class Target : public std::enable_shared_from_this, const lldb_private::RegisterFlags &flags, uint32_t byte_size); - /// Sends a breakpoint notification event if any listener is registered. + /// Sends a breakpoint notification event. void NotifyBreakpointChanged(Breakpoint &bp, lldb::BreakpointEventType event_kind); - /// Sends a breakpoint notification event if any listener is registered. + /// Sends a breakpoint notification event. void NotifyBreakpointChanged(Breakpoint &bp, const lldb::EventDataSP &breakpoint_data_sp);