/* Copyright (c) 2013-2014 Jeffrey Pfau * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef ARM_DEBUGGER_H #define ARM_DEBUGGER_H #include CXX_GUARD_START #include #include #include struct ParseTree; struct ARMDebugBreakpoint { struct mBreakpoint d; struct { uint32_t opcode; enum ExecutionMode mode; } sw; }; DECLARE_VECTOR(ARMDebugBreakpointList, struct ARMDebugBreakpoint); struct ARMDebugger { struct mDebuggerPlatform d; struct ARMCore* cpu; struct ARMDebugBreakpointList breakpoints; struct ARMDebugBreakpointList swBreakpoints; struct mWatchpointList watchpoints; struct ARMMemory originalMemory; ssize_t nextId; uint32_t stackTraceMode; void (*entered)(struct mDebugger*, enum mDebuggerEntryReason, struct mDebuggerEntryInfo*); bool (*setSoftwareBreakpoint)(struct ARMDebugger*, uint32_t address, enum ExecutionMode mode, uint32_t* opcode); void (*clearSoftwareBreakpoint)(struct ARMDebugger*, const struct ARMDebugBreakpoint*); }; struct mDebuggerPlatform* ARMDebuggerPlatformCreate(void); ssize_t ARMDebuggerSetSoftwareBreakpoint(struct mDebuggerPlatform* debugger, uint32_t address, enum ExecutionMode mode); CXX_GUARD_END #endif