mirror of
https://github.com/momo5502/emulator.git
synced 2026-01-26 15:11:01 +00:00
50 lines
1.3 KiB
C++
50 lines
1.3 KiB
C++
#pragma once
|
|
#include <cstdint>
|
|
#include <network/address.hpp>
|
|
|
|
namespace gdb_stub
|
|
{
|
|
enum class action : uint8_t
|
|
{
|
|
none,
|
|
resume,
|
|
shutdown,
|
|
};
|
|
|
|
enum class breakpoint_type : uint8_t
|
|
{
|
|
software = 0,
|
|
hardware_exec = 1,
|
|
hardware_write = 2,
|
|
hardware_read = 3,
|
|
hardware_read_write = 4,
|
|
END,
|
|
};
|
|
|
|
struct debugging_handler
|
|
{
|
|
virtual ~debugging_handler() = default;
|
|
|
|
virtual action run() = 0;
|
|
virtual action singlestep() = 0;
|
|
|
|
virtual size_t get_register_count() = 0;
|
|
virtual size_t get_max_register_size() = 0;
|
|
|
|
virtual bool read_register(size_t reg, void* data, size_t max_length) = 0;
|
|
virtual bool write_register(size_t reg, const void* data, size_t size) = 0;
|
|
|
|
virtual bool read_memory(uint64_t address, void* data, size_t length) = 0;
|
|
virtual bool write_memory(uint64_t address, const void* data, size_t length) = 0;
|
|
|
|
virtual bool set_breakpoint(breakpoint_type type, uint64_t address, size_t size) = 0;
|
|
virtual bool delete_breakpoint(breakpoint_type type, uint64_t address, size_t size) = 0;
|
|
|
|
virtual void on_interrupt() = 0;
|
|
|
|
virtual std::string get_target_description() = 0;
|
|
};
|
|
|
|
bool run_gdb_stub(const network::address& bind_address, debugging_handler& handler);
|
|
}
|