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