https://github.com/piyushjaiswal98 updated https://github.com/llvm/llvm-project/pull/164739
>From e04bbb2579b91a08a99fd208739a17313de969ab Mon Sep 17 00:00:00 2001 From: Piyush Jaiswal <[email protected]> Date: Wed, 22 Oct 2025 17:37:29 -0700 Subject: [PATCH 1/2] 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<Target>, 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<lldb::DisassemblerSP> 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<BreakpointEventData> data = std::make_shared<BreakpointEventData>(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<Breakpoint::BreakpointEventData>(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<Breakpoint::BreakpointEventData>( 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<Breakpoint::BreakpointEventData> data = + std::make_shared<Breakpoint::BreakpointEventData>( + 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 <[email protected]> Date: Thu, 23 Oct 2025 13:08:45 -0700 Subject: [PATCH 2/2] 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<Target>, /// 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<BreakpointEventData> data = - std::make_shared<BreakpointEventData>(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<Breakpoint::BreakpointEventData> data = + std::shared_ptr<Breakpoint::BreakpointEventData> data_sp = std::make_shared<Breakpoint::BreakpointEventData>( eventKind, bp.shared_from_this()); - BroadcastEvent(Target::eBroadcastBitBreakpointChanged, data); + BroadcastEvent(Target::eBroadcastBitBreakpointChanged, data_sp); } } _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
