Skip to content
7 changes: 7 additions & 0 deletions lldb/include/lldb/Target/Target.h
Original file line number Diff line number Diff line change
Expand Up @@ -1346,6 +1346,13 @@ class Target : public std::enable_shared_from_this<Target>,
const lldb_private::RegisterFlags &flags,
uint32_t byte_size);

/// Sends a breakpoint notification event.
void NotifyBreakpointChanged(Breakpoint &bp,
lldb::BreakpointEventType event_kind);
/// Sends a breakpoint notification 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);
Expand Down
17 changes: 5 additions & 12 deletions lldb/source/Breakpoint/Breakpoint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1098,25 +1098,18 @@ bool Breakpoint::EvaluatePrecondition(StoppointCallbackContext &context) {
}

void Breakpoint::SendBreakpointChangedEvent(
lldb::BreakpointEventType eventKind) {
if (!IsInternal() && GetTarget().EventTypeHasListeners(
Target::eBroadcastBitBreakpointChanged)) {
std::shared_ptr<BreakpointEventData> data =
std::make_shared<BreakpointEventData>(eventKind, shared_from_this());

GetTarget().BroadcastEvent(Target::eBroadcastBitBreakpointChanged, data);
}
lldb::BreakpointEventType event_kind) {
if (!IsInternal())
GetTarget().NotifyBreakpointChanged(*this, event_kind);
}

void Breakpoint::SendBreakpointChangedEvent(
const lldb::EventDataSP &breakpoint_data_sp) {
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) {
Expand Down
8 changes: 1 addition & 7 deletions lldb/source/Breakpoint/BreakpointList.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,7 @@ using namespace lldb;
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);
}
bp->GetTarget().NotifyBreakpointChanged(*bp, event);
}

BreakpointList::BreakpointList(bool is_internal)
Expand Down
6 changes: 2 additions & 4 deletions lldb/source/Breakpoint/BreakpointLocation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}

Expand Down
17 changes: 17 additions & 0 deletions lldb/source/Target/Target.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -5271,3 +5272,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_sp =
std::make_shared<Breakpoint::BreakpointEventData>(
eventKind, bp.shared_from_this());
BroadcastEvent(Target::eBroadcastBitBreakpointChanged, data_sp);
}
}

void Target::NotifyBreakpointChanged(
Breakpoint &bp, const lldb::EventDataSP &breakpoint_data_sp) {
if (EventTypeHasListeners(Target::eBroadcastBitBreakpointChanged))
BroadcastEvent(Target::eBroadcastBitBreakpointChanged, breakpoint_data_sp);
}
Loading