blob: 0d17d9cb9ce87dce6b701f49c8a2324cff4b4b74 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_DEVELOPER_DEBUG_DEBUG_AGENT_HARDWARE_BREAKPOINT_H_
#define SRC_DEVELOPER_DEBUG_DEBUG_AGENT_HARDWARE_BREAKPOINT_H_
#include <set>
#include "src/developer/debug/debug_agent/arch.h"
#include "src/developer/debug/debug_agent/process_breakpoint.h"
namespace debug_agent {
class HardwareBreakpoint : public ProcessBreakpoint {
public:
explicit HardwareBreakpoint(Breakpoint* breakpoint, DebuggedProcess* process, uint64_t address);
virtual ~HardwareBreakpoint();
zx_status_t Update() override;
debug_ipc::BreakpointType Type() const override { return debug_ipc::BreakpointType::kHardware; }
bool Installed(zx_koid_t thread_koid) const override;
const std::set<zx_koid_t>& installed_threads() const { return installed_threads_; }
// Public ProcessBreakpoint overrides. See ProcessBreakpoint for more details.
void EndStepOver(DebuggedThread* thread) override;
void ExecuteStepOver(DebuggedThread* thread) override;
void StepOverCleanup(DebuggedThread* thread) override {}
private:
zx_status_t Install(DebuggedThread* thread);
zx_status_t Uninstall(DebuggedThread* thread) override;
zx_status_t Uninstall() override;
std::set<zx_koid_t> installed_threads_;
std::set<zx_koid_t> current_stepping_over_threads_;
};
} // namespace debug_agent
#endif // SRC_DEVELOPER_DEBUG_DEBUG_AGENT_HARDWARE_BREAKPOINT_H_