summaryrefslogtreecommitdiff
path: root/source/Host/common/NativeBreakpointList.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/Host/common/NativeBreakpointList.cpp')
-rw-r--r--source/Host/common/NativeBreakpointList.cpp229
1 files changed, 0 insertions, 229 deletions
diff --git a/source/Host/common/NativeBreakpointList.cpp b/source/Host/common/NativeBreakpointList.cpp
deleted file mode 100644
index cfcbe0831064..000000000000
--- a/source/Host/common/NativeBreakpointList.cpp
+++ /dev/null
@@ -1,229 +0,0 @@
-//===-- NativeBreakpointList.cpp --------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "lldb/Host/common/NativeBreakpointList.h"
-
-#include "lldb/Utility/Log.h"
-
-#include "lldb/Host/common/NativeBreakpoint.h"
-#include "lldb/Host/common/SoftwareBreakpoint.h"
-
-using namespace lldb;
-using namespace lldb_private;
-
-NativeBreakpointList::NativeBreakpointList() : m_mutex() {}
-
-Status NativeBreakpointList::AddRef(lldb::addr_t addr, size_t size_hint,
- bool hardware,
- CreateBreakpointFunc create_func) {
- Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_BREAKPOINTS));
- if (log)
- log->Printf("NativeBreakpointList::%s addr = 0x%" PRIx64
- ", size_hint = %zu, hardware = %s",
- __FUNCTION__, addr, size_hint, hardware ? "true" : "false");
-
- std::lock_guard<std::recursive_mutex> guard(m_mutex);
-
- // Check if the breakpoint is already set.
- auto iter = m_breakpoints.find(addr);
- if (iter != m_breakpoints.end()) {
- // Yes - bump up ref count.
- if (log)
- log->Printf("NativeBreakpointList::%s addr = 0x%" PRIx64
- " -- already enabled, upping ref count",
- __FUNCTION__, addr);
-
- iter->second->AddRef();
- return Status();
- }
-
- // Create a new breakpoint using the given create func.
- if (log)
- log->Printf(
- "NativeBreakpointList::%s creating breakpoint for addr = 0x%" PRIx64
- ", size_hint = %zu, hardware = %s",
- __FUNCTION__, addr, size_hint, hardware ? "true" : "false");
-
- NativeBreakpointSP breakpoint_sp;
- Status error = create_func(addr, size_hint, hardware, breakpoint_sp);
- if (error.Fail()) {
- if (log)
- log->Printf(
- "NativeBreakpointList::%s creating breakpoint for addr = 0x%" PRIx64
- ", size_hint = %zu, hardware = %s -- FAILED: %s",
- __FUNCTION__, addr, size_hint, hardware ? "true" : "false",
- error.AsCString());
- return error;
- }
-
- // Remember the breakpoint.
- assert(breakpoint_sp && "NativeBreakpoint create function succeeded but "
- "returned NULL breakpoint");
- m_breakpoints.insert(BreakpointMap::value_type(addr, breakpoint_sp));
-
- return error;
-}
-
-Status NativeBreakpointList::DecRef(lldb::addr_t addr) {
- Status error;
-
- Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_BREAKPOINTS));
- if (log)
- log->Printf("NativeBreakpointList::%s addr = 0x%" PRIx64, __FUNCTION__,
- addr);
-
- std::lock_guard<std::recursive_mutex> guard(m_mutex);
-
- // Check if the breakpoint is already set.
- auto iter = m_breakpoints.find(addr);
- if (iter == m_breakpoints.end()) {
- // Not found!
- if (log)
- log->Printf("NativeBreakpointList::%s addr = 0x%" PRIx64 " -- NOT FOUND",
- __FUNCTION__, addr);
- error.SetErrorString("breakpoint not found");
- return error;
- }
-
- // Decrement ref count.
- const int32_t new_ref_count = iter->second->DecRef();
- assert(new_ref_count >= 0 && "NativeBreakpoint ref count went negative");
-
- if (new_ref_count > 0) {
- // Still references to this breakpoint. Leave it alone.
- if (log)
- log->Printf("NativeBreakpointList::%s addr = 0x%" PRIx64
- " -- new breakpoint ref count %" PRIu32,
- __FUNCTION__, addr, new_ref_count);
- return error;
- }
-
- // Breakpoint has no more references. Disable it if it's not already
- // disabled.
- if (log)
- log->Printf("NativeBreakpointList::%s addr = 0x%" PRIx64
- " -- removing due to no remaining references",
- __FUNCTION__, addr);
-
- // If it's enabled, we need to disable it.
- if (iter->second->IsEnabled()) {
- if (log)
- log->Printf("NativeBreakpointList::%s addr = 0x%" PRIx64
- " -- currently enabled, now disabling",
- __FUNCTION__, addr);
- error = iter->second->Disable();
- if (error.Fail()) {
- if (log)
- log->Printf("NativeBreakpointList::%s addr = 0x%" PRIx64
- " -- removal FAILED: %s",
- __FUNCTION__, addr, error.AsCString());
- // Continue since we still want to take it out of the breakpoint list.
- }
- } else {
- if (log)
- log->Printf("NativeBreakpointList::%s addr = 0x%" PRIx64
- " -- already disabled, nothing to do",
- __FUNCTION__, addr);
- }
-
- // Take the breakpoint out of the list.
- if (log)
- log->Printf("NativeBreakpointList::%s addr = 0x%" PRIx64
- " -- removed from breakpoint map",
- __FUNCTION__, addr);
-
- m_breakpoints.erase(iter);
- return error;
-}
-
-Status NativeBreakpointList::EnableBreakpoint(lldb::addr_t addr) {
- Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_BREAKPOINTS));
- if (log)
- log->Printf("NativeBreakpointList::%s addr = 0x%" PRIx64, __FUNCTION__,
- addr);
-
- std::lock_guard<std::recursive_mutex> guard(m_mutex);
-
- // Ensure we have said breakpoint.
- auto iter = m_breakpoints.find(addr);
- if (iter == m_breakpoints.end()) {
- // Not found!
- if (log)
- log->Printf("NativeBreakpointList::%s addr = 0x%" PRIx64 " -- NOT FOUND",
- __FUNCTION__, addr);
- return Status("breakpoint not found");
- }
-
- // Enable it.
- return iter->second->Enable();
-}
-
-Status NativeBreakpointList::DisableBreakpoint(lldb::addr_t addr) {
- Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_BREAKPOINTS));
- if (log)
- log->Printf("NativeBreakpointList::%s addr = 0x%" PRIx64, __FUNCTION__,
- addr);
-
- std::lock_guard<std::recursive_mutex> guard(m_mutex);
-
- // Ensure we have said breakpoint.
- auto iter = m_breakpoints.find(addr);
- if (iter == m_breakpoints.end()) {
- // Not found!
- if (log)
- log->Printf("NativeBreakpointList::%s addr = 0x%" PRIx64 " -- NOT FOUND",
- __FUNCTION__, addr);
- return Status("breakpoint not found");
- }
-
- // Disable it.
- return iter->second->Disable();
-}
-
-Status NativeBreakpointList::GetBreakpoint(lldb::addr_t addr,
- NativeBreakpointSP &breakpoint_sp) {
- Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_BREAKPOINTS));
- if (log)
- log->Printf("NativeBreakpointList::%s addr = 0x%" PRIx64, __FUNCTION__,
- addr);
-
- std::lock_guard<std::recursive_mutex> guard(m_mutex);
-
- // Ensure we have said breakpoint.
- auto iter = m_breakpoints.find(addr);
- if (iter == m_breakpoints.end()) {
- // Not found!
- breakpoint_sp.reset();
- return Status("breakpoint not found");
- }
-
- // Disable it.
- breakpoint_sp = iter->second;
- return Status();
-}
-
-Status NativeBreakpointList::RemoveTrapsFromBuffer(lldb::addr_t addr, void *buf,
- size_t size) const {
- for (const auto &map : m_breakpoints) {
- lldb::addr_t bp_addr = map.first;
- // Breapoint not in range, ignore
- if (bp_addr < addr || addr + size <= bp_addr)
- continue;
- const auto &bp_sp = map.second;
- // Not software breakpoint, ignore
- if (!bp_sp->IsSoftwareBreakpoint())
- continue;
- auto software_bp_sp = std::static_pointer_cast<SoftwareBreakpoint>(bp_sp);
- auto opcode_addr = static_cast<char *>(buf) + bp_addr - addr;
- auto saved_opcodes = software_bp_sp->m_saved_opcodes;
- auto opcode_size = software_bp_sp->m_opcode_size;
- ::memcpy(opcode_addr, saved_opcodes, opcode_size);
- }
- return Status();
-}