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