1*c9157d92SDimitry Andric //===-- SBWatchpointOptions.cpp -------------------------------------------===// 2*c9157d92SDimitry Andric // 3*c9157d92SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*c9157d92SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*c9157d92SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*c9157d92SDimitry Andric // 7*c9157d92SDimitry Andric //===----------------------------------------------------------------------===// 8*c9157d92SDimitry Andric 9*c9157d92SDimitry Andric #include "lldb/API/SBWatchpointOptions.h" 10*c9157d92SDimitry Andric #include "lldb/Breakpoint/Watchpoint.h" 11*c9157d92SDimitry Andric #include "lldb/Utility/Instrumentation.h" 12*c9157d92SDimitry Andric 13*c9157d92SDimitry Andric #include "Utils.h" 14*c9157d92SDimitry Andric 15*c9157d92SDimitry Andric using namespace lldb; 16*c9157d92SDimitry Andric using namespace lldb_private; 17*c9157d92SDimitry Andric 18*c9157d92SDimitry Andric class WatchpointOptionsImpl { 19*c9157d92SDimitry Andric public: 20*c9157d92SDimitry Andric bool m_read = false; 21*c9157d92SDimitry Andric bool m_write = false; 22*c9157d92SDimitry Andric bool m_modify = false; 23*c9157d92SDimitry Andric }; 24*c9157d92SDimitry Andric 25*c9157d92SDimitry Andric SBWatchpointOptions()26*c9157d92SDimitry AndricSBWatchpointOptions::SBWatchpointOptions() 27*c9157d92SDimitry Andric : m_opaque_up(new WatchpointOptionsImpl()) { 28*c9157d92SDimitry Andric LLDB_INSTRUMENT_VA(this); 29*c9157d92SDimitry Andric } 30*c9157d92SDimitry Andric SBWatchpointOptions(const SBWatchpointOptions & rhs)31*c9157d92SDimitry AndricSBWatchpointOptions::SBWatchpointOptions(const SBWatchpointOptions &rhs) { 32*c9157d92SDimitry Andric LLDB_INSTRUMENT_VA(this, rhs); 33*c9157d92SDimitry Andric 34*c9157d92SDimitry Andric m_opaque_up = clone(rhs.m_opaque_up); 35*c9157d92SDimitry Andric } 36*c9157d92SDimitry Andric 37*c9157d92SDimitry Andric const SBWatchpointOptions & operator =(const SBWatchpointOptions & rhs)38*c9157d92SDimitry AndricSBWatchpointOptions::operator=(const SBWatchpointOptions &rhs) { 39*c9157d92SDimitry Andric LLDB_INSTRUMENT_VA(this, rhs); 40*c9157d92SDimitry Andric 41*c9157d92SDimitry Andric if (this != &rhs) 42*c9157d92SDimitry Andric m_opaque_up = clone(rhs.m_opaque_up); 43*c9157d92SDimitry Andric return *this; 44*c9157d92SDimitry Andric } 45*c9157d92SDimitry Andric 46*c9157d92SDimitry Andric SBWatchpointOptions::~SBWatchpointOptions() = default; 47*c9157d92SDimitry Andric SetWatchpointTypeRead(bool read)48*c9157d92SDimitry Andricvoid SBWatchpointOptions::SetWatchpointTypeRead(bool read) { 49*c9157d92SDimitry Andric m_opaque_up->m_read = read; 50*c9157d92SDimitry Andric } GetWatchpointTypeRead() const51*c9157d92SDimitry Andricbool SBWatchpointOptions::GetWatchpointTypeRead() const { 52*c9157d92SDimitry Andric return m_opaque_up->m_read; 53*c9157d92SDimitry Andric } 54*c9157d92SDimitry Andric SetWatchpointTypeWrite(WatchpointWriteType write_type)55*c9157d92SDimitry Andricvoid SBWatchpointOptions::SetWatchpointTypeWrite( 56*c9157d92SDimitry Andric WatchpointWriteType write_type) { 57*c9157d92SDimitry Andric if (write_type == eWatchpointWriteTypeOnModify) { 58*c9157d92SDimitry Andric m_opaque_up->m_write = false; 59*c9157d92SDimitry Andric m_opaque_up->m_modify = true; 60*c9157d92SDimitry Andric } else if (write_type == eWatchpointWriteTypeAlways) { 61*c9157d92SDimitry Andric m_opaque_up->m_write = true; 62*c9157d92SDimitry Andric m_opaque_up->m_modify = false; 63*c9157d92SDimitry Andric } else 64*c9157d92SDimitry Andric m_opaque_up->m_write = m_opaque_up->m_modify = false; 65*c9157d92SDimitry Andric } 66*c9157d92SDimitry Andric GetWatchpointTypeWrite() const67*c9157d92SDimitry AndricWatchpointWriteType SBWatchpointOptions::GetWatchpointTypeWrite() const { 68*c9157d92SDimitry Andric if (m_opaque_up->m_modify) 69*c9157d92SDimitry Andric return eWatchpointWriteTypeOnModify; 70*c9157d92SDimitry Andric if (m_opaque_up->m_write) 71*c9157d92SDimitry Andric return eWatchpointWriteTypeAlways; 72*c9157d92SDimitry Andric return eWatchpointWriteTypeDisabled; 73*c9157d92SDimitry Andric } 74