Skip to content

Commit 9902c8e

Browse files
committed
[lldb/debugserver] Unify the breakpoint/watchpoint interface (NFCI)
Unify the interface for enabling and disabling breakpoints with their watchpoint counterpart. This allows both to go through DoHardwareBreakpointAction. Differential revision: https://reviews.llvm.org/D72981
1 parent e1440f5 commit 9902c8e

File tree

5 files changed

+48
-34
lines changed

5 files changed

+48
-34
lines changed

lldb/tools/debugserver/source/DNBArch.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,15 +78,19 @@ class DNBArchProtocol {
7878
virtual bool NotifyException(MachException::Data &exc) { return false; }
7979
virtual uint32_t NumSupportedHardwareBreakpoints() { return 0; }
8080
virtual uint32_t NumSupportedHardwareWatchpoints() { return 0; }
81-
virtual uint32_t EnableHardwareBreakpoint(nub_addr_t addr, nub_size_t size) {
81+
virtual uint32_t EnableHardwareBreakpoint(nub_addr_t addr, nub_size_t size,
82+
bool also_set_on_task) {
8283
return INVALID_NUB_HW_INDEX;
8384
}
8485
virtual uint32_t EnableHardwareWatchpoint(nub_addr_t addr, nub_size_t size,
8586
bool read, bool write,
8687
bool also_set_on_task) {
8788
return INVALID_NUB_HW_INDEX;
8889
}
89-
virtual bool DisableHardwareBreakpoint(uint32_t hw_index) { return false; }
90+
virtual bool DisableHardwareBreakpoint(uint32_t hw_index,
91+
bool also_set_on_task) {
92+
return false;
93+
}
9094
virtual bool DisableHardwareWatchpoint(uint32_t hw_index,
9195
bool also_set_on_task) {
9296
return false;

lldb/tools/debugserver/source/MacOSX/MachThread.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -534,9 +534,12 @@ bool MachThread::RestoreRegisterState(uint32_t save_id) {
534534
return m_arch_up->RestoreRegisterState(save_id);
535535
}
536536

537-
uint32_t MachThread::EnableHardwareBreakpoint(const DNBBreakpoint *bp) {
538-
if (bp != NULL && bp->IsBreakpoint())
539-
return m_arch_up->EnableHardwareBreakpoint(bp->Address(), bp->ByteSize());
537+
uint32_t MachThread::EnableHardwareBreakpoint(const DNBBreakpoint *bp,
538+
bool also_set_on_task) {
539+
if (bp != NULL && bp->IsBreakpoint()) {
540+
return m_arch_up->EnableHardwareBreakpoint(bp->Address(), bp->ByteSize(),
541+
also_set_on_task);
542+
}
540543
return INVALID_NUB_HW_INDEX;
541544
}
542545

@@ -555,9 +558,12 @@ bool MachThread::RollbackTransForHWP() {
555558

556559
bool MachThread::FinishTransForHWP() { return m_arch_up->FinishTransForHWP(); }
557560

558-
bool MachThread::DisableHardwareBreakpoint(const DNBBreakpoint *bp) {
559-
if (bp != NULL && bp->IsHardware())
560-
return m_arch_up->DisableHardwareBreakpoint(bp->GetHardwareIndex());
561+
bool MachThread::DisableHardwareBreakpoint(const DNBBreakpoint *bp,
562+
bool also_set_on_task) {
563+
if (bp != NULL && bp->IsHardware()) {
564+
return m_arch_up->DisableHardwareBreakpoint(bp->GetHardwareIndex(),
565+
also_set_on_task);
566+
}
561567
return false;
562568
}
563569

lldb/tools/debugserver/source/MacOSX/MachThread.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,12 @@ class MachThread {
6666
uint64_t GetSP(uint64_t failValue = INVALID_NUB_ADDRESS); // Get stack pointer
6767

6868
DNBBreakpoint *CurrentBreakpoint();
69-
uint32_t EnableHardwareBreakpoint(const DNBBreakpoint *breakpoint);
69+
uint32_t EnableHardwareBreakpoint(const DNBBreakpoint *breakpoint,
70+
bool also_set_on_task);
7071
uint32_t EnableHardwareWatchpoint(const DNBBreakpoint *watchpoint,
7172
bool also_set_on_task);
72-
bool DisableHardwareBreakpoint(const DNBBreakpoint *breakpoint);
73+
bool DisableHardwareBreakpoint(const DNBBreakpoint *breakpoint,
74+
bool also_set_on_task);
7375
bool DisableHardwareWatchpoint(const DNBBreakpoint *watchpoint,
7476
bool also_set_on_task);
7577
uint32_t NumSupportedHardwareWatchpoints() const;

lldb/tools/debugserver/source/MacOSX/MachThreadList.cpp

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -483,28 +483,9 @@ void MachThreadList::NotifyBreakpointChanged(const DNBBreakpoint *bp) {
483483
}
484484
}
485485

486-
uint32_t
487-
MachThreadList::EnableHardwareBreakpoint(const DNBBreakpoint *bp) const {
488-
if (bp != NULL) {
489-
const size_t num_threads = m_threads.size();
490-
for (uint32_t idx = 0; idx < num_threads; ++idx)
491-
m_threads[idx]->EnableHardwareBreakpoint(bp);
492-
}
493-
return INVALID_NUB_HW_INDEX;
494-
}
495-
496-
bool MachThreadList::DisableHardwareBreakpoint(const DNBBreakpoint *bp) const {
497-
if (bp != NULL) {
498-
const size_t num_threads = m_threads.size();
499-
for (uint32_t idx = 0; idx < num_threads; ++idx)
500-
m_threads[idx]->DisableHardwareBreakpoint(bp);
501-
}
502-
return false;
503-
}
504-
505486
uint32_t MachThreadList::DoHardwareBreakpointAction(
506-
const DNBBreakpoint *wp, HardwareBreakpointAction action) const {
507-
if (wp == NULL)
487+
const DNBBreakpoint *bp, HardwareBreakpointAction action) const {
488+
if (bp == NULL)
508489
return INVALID_NUB_HW_INDEX;
509490

510491
uint32_t hw_index = INVALID_NUB_HW_INDEX;
@@ -517,11 +498,18 @@ uint32_t MachThreadList::DoHardwareBreakpointAction(
517498
for (uint32_t idx = 0; idx < num_threads; ++idx) {
518499
switch (action) {
519500
case HardwareBreakpointAction::EnableWatchpoint:
520-
hw_index = m_threads[idx]->EnableHardwareWatchpoint(wp, also_set_on_task);
501+
hw_index = m_threads[idx]->EnableHardwareWatchpoint(bp, also_set_on_task);
521502
break;
522503
case HardwareBreakpointAction::DisableWatchpoint:
523504
hw_index =
524-
m_threads[idx]->DisableHardwareWatchpoint(wp, also_set_on_task);
505+
m_threads[idx]->DisableHardwareWatchpoint(bp, also_set_on_task);
506+
break;
507+
case HardwareBreakpointAction::EnableBreakpoint:
508+
hw_index = m_threads[idx]->EnableHardwareBreakpoint(bp, also_set_on_task);
509+
break;
510+
case HardwareBreakpointAction::DisableBreakpoint:
511+
hw_index =
512+
m_threads[idx]->DisableHardwareBreakpoint(bp, also_set_on_task);
525513
break;
526514
}
527515
if (hw_index == INVALID_NUB_HW_INDEX) {
@@ -554,6 +542,18 @@ bool MachThreadList::DisableHardwareWatchpoint(const DNBBreakpoint *wp) const {
554542
INVALID_NUB_HW_INDEX;
555543
}
556544

545+
uint32_t
546+
MachThreadList::EnableHardwareBreakpoint(const DNBBreakpoint *bp) const {
547+
return DoHardwareBreakpointAction(bp,
548+
HardwareBreakpointAction::EnableBreakpoint);
549+
}
550+
551+
bool MachThreadList::DisableHardwareBreakpoint(const DNBBreakpoint *bp) const {
552+
return DoHardwareBreakpointAction(
553+
bp, HardwareBreakpointAction::DisableBreakpoint) !=
554+
INVALID_NUB_HW_INDEX;
555+
}
556+
557557
uint32_t MachThreadList::NumSupportedHardwareWatchpoints() const {
558558
PTHREAD_MUTEX_LOCKER(locker, m_threads_mutex);
559559
const size_t num_threads = m_threads.size();

lldb/tools/debugserver/source/MacOSX/MachThreadList.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,11 @@ class MachThreadList {
8686
enum class HardwareBreakpointAction {
8787
EnableWatchpoint,
8888
DisableWatchpoint,
89+
EnableBreakpoint,
90+
DisableBreakpoint,
8991
};
9092

91-
uint32_t DoHardwareBreakpointAction(const DNBBreakpoint *wp,
93+
uint32_t DoHardwareBreakpointAction(const DNBBreakpoint *bp,
9294
HardwareBreakpointAction action) const;
9395

9496
uint32_t UpdateThreadList(MachProcess *process, bool update,

0 commit comments

Comments
 (0)