//===-- NativeBreakpoint.cpp ------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include "NativeBreakpoint.h" #include "lldb/lldb-defines.h" #include "lldb/Core/Error.h" #include "lldb/Core/Log.h" using namespace lldb_private; NativeBreakpoint::NativeBreakpoint (lldb::addr_t addr) : m_addr (addr), m_ref_count (1), m_enabled (true) { assert (addr != LLDB_INVALID_ADDRESS && "breakpoint set for invalid address"); } NativeBreakpoint::~NativeBreakpoint () { } void NativeBreakpoint::AddRef () { ++m_ref_count; Log *log (GetLogIfAnyCategoriesSet (LIBLLDB_LOG_BREAKPOINTS)); if (log) log->Printf ("NativeBreakpoint::%s addr = 0x%" PRIx64 " bumped up, new ref count %" PRIu32, __FUNCTION__, m_addr, m_ref_count); } int32_t NativeBreakpoint::DecRef () { --m_ref_count; Log *log (GetLogIfAnyCategoriesSet (LIBLLDB_LOG_BREAKPOINTS)); if (log) log->Printf ("NativeBreakpoint::%s addr = 0x%" PRIx64 " ref count decremented, new ref count %" PRIu32, __FUNCTION__, m_addr, m_ref_count); return m_ref_count; } Error NativeBreakpoint::Enable () { Log *log (GetLogIfAnyCategoriesSet (LIBLLDB_LOG_BREAKPOINTS)); if (m_enabled) { // We're already enabled. Just log and exit. if (log) log->Printf ("NativeBreakpoint::%s addr = 0x%" PRIx64 " already enabled, ignoring.", __FUNCTION__, m_addr); return Error (); } // Log and enable. if (log) log->Printf ("NativeBreakpoint::%s addr = 0x%" PRIx64 " enabling...", __FUNCTION__, m_addr); Error error = DoEnable (); if (error.Success ()) { m_enabled = true; if (log) log->Printf ("NativeBreakpoint::%s addr = 0x%" PRIx64 " enable SUCCESS.", __FUNCTION__, m_addr); } else { if (log) log->Printf ("NativeBreakpoint::%s addr = 0x%" PRIx64 " enable FAIL: %s", __FUNCTION__, m_addr, error.AsCString ()); } return error; } Error NativeBreakpoint::Disable () { Log *log (GetLogIfAnyCategoriesSet (LIBLLDB_LOG_BREAKPOINTS)); if (!m_enabled) { // We're already disabled. Just log and exit. if (log) log->Printf ("NativeBreakpoint::%s addr = 0x%" PRIx64 " already disabled, ignoring.", __FUNCTION__, m_addr); return Error (); } // Log and disable. if (log) log->Printf ("NativeBreakpoint::%s addr = 0x%" PRIx64 " disabling...", __FUNCTION__, m_addr); Error error = DoDisable (); if (error.Success ()) { m_enabled = false; if (log) log->Printf ("NativeBreakpoint::%s addr = 0x%" PRIx64 " disable SUCCESS.", __FUNCTION__, m_addr); } else { if (log) log->Printf ("NativeBreakpoint::%s addr = 0x%" PRIx64 " disable FAIL: %s", __FUNCTION__, m_addr, error.AsCString ()); } return error; }