2005-02-24 18:44:48 +03:00
|
|
|
/*
|
2016-04-20 17:15:41 +03:00
|
|
|
* Copyright 2005-2016, Ingo Weinhold, ingo_weinhold@gmx.de.
|
2005-02-24 18:44:48 +03:00
|
|
|
* Distributed under the terms of the MIT License.
|
|
|
|
*/
|
|
|
|
#ifndef KERNEL_ARCH_USER_DEBUGGER_H
|
|
|
|
#define KERNEL_ARCH_USER_DEBUGGER_H
|
|
|
|
|
2011-01-11 00:54:38 +03:00
|
|
|
|
2008-10-17 01:43:32 +04:00
|
|
|
#include "kernel_debug_config.h"
|
2008-08-27 16:50:56 +04:00
|
|
|
|
|
|
|
#ifndef _ASSEMBLER
|
|
|
|
|
2005-02-28 03:43:43 +03:00
|
|
|
#include <debugger.h>
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
struct arch_team_debug_info;
|
2005-03-02 02:49:20 +03:00
|
|
|
struct arch_thread_debug_info;
|
2011-01-11 00:54:38 +03:00
|
|
|
|
2016-04-20 17:15:41 +03:00
|
|
|
namespace BKernel {
|
|
|
|
struct Thread;
|
|
|
|
}
|
|
|
|
using BKernel::Thread;
|
|
|
|
|
2005-02-28 03:43:43 +03:00
|
|
|
|
|
|
|
void arch_clear_team_debug_info(struct arch_team_debug_info *info);
|
|
|
|
void arch_destroy_team_debug_info(struct arch_team_debug_info *info);
|
2005-03-02 02:49:20 +03:00
|
|
|
void arch_clear_thread_debug_info(struct arch_thread_debug_info *info);
|
|
|
|
void arch_destroy_thread_debug_info(struct arch_thread_debug_info *info);
|
2005-02-28 03:43:43 +03:00
|
|
|
|
2008-01-11 03:36:44 +03:00
|
|
|
void arch_update_thread_single_step();
|
|
|
|
|
2009-07-22 02:18:39 +04:00
|
|
|
void arch_set_debug_cpu_state(const debug_cpu_state *cpuState);
|
|
|
|
void arch_get_debug_cpu_state(debug_cpu_state *cpuState);
|
2016-04-20 17:15:41 +03:00
|
|
|
status_t arch_get_thread_debug_cpu_state(Thread *thread,
|
|
|
|
debug_cpu_state *cpuState);
|
2005-02-24 18:44:48 +03:00
|
|
|
|
2005-02-28 03:43:43 +03:00
|
|
|
status_t arch_set_breakpoint(void *address);
|
|
|
|
status_t arch_clear_breakpoint(void *address);
|
|
|
|
status_t arch_set_watchpoint(void *address, uint32 type, int32 length);
|
|
|
|
status_t arch_clear_watchpoint(void *address);
|
2008-01-11 03:36:44 +03:00
|
|
|
bool arch_has_breakpoints(struct arch_team_debug_info *info);
|
2005-02-28 03:43:43 +03:00
|
|
|
|
2007-09-03 02:04:36 +04:00
|
|
|
#if KERNEL_BREAKPOINTS
|
|
|
|
status_t arch_set_kernel_breakpoint(void *address);
|
|
|
|
status_t arch_clear_kernel_breakpoint(void *address);
|
|
|
|
status_t arch_set_kernel_watchpoint(void *address, uint32 type, int32 length);
|
|
|
|
status_t arch_clear_kernel_watchpoint(void *address);
|
|
|
|
#endif
|
|
|
|
|
2005-02-28 03:43:43 +03:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#include <arch_user_debugger.h>
|
|
|
|
|
2009-06-24 01:03:57 +04:00
|
|
|
// Defaults for macros defined by the architecture specific header:
|
|
|
|
|
|
|
|
// maximum number of instruction breakpoints
|
|
|
|
#ifndef DEBUG_MAX_BREAKPOINTS
|
|
|
|
# define DEBUG_MAX_BREAKPOINTS 0
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// maximum number of data watchpoints
|
|
|
|
#ifndef DEBUG_MAX_WATCHPOINTS
|
|
|
|
# define DEBUG_MAX_WATCHPOINTS 0
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// the software breakpoint instruction
|
|
|
|
#if !defined(DEBUG_SOFTWARE_BREAKPOINT) \
|
|
|
|
|| !defined(DEBUG_SOFTWARE_BREAKPOINT_SIZE)
|
|
|
|
# undef DEBUG_SOFTWARE_BREAKPOINT
|
|
|
|
# undef DEBUG_SOFTWARE_BREAKPOINT_SIZE
|
|
|
|
# define DEBUG_SOFTWARE_BREAKPOINT NULL
|
|
|
|
# define DEBUG_SOFTWARE_BREAKPOINT_SIZE 0
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// Boolean whether break- and watchpoints use the same registers. If != 0, then
|
|
|
|
// DEBUG_MAX_BREAKPOINTS == DEBUG_MAX_WATCHPOINTS and either specifies the
|
|
|
|
// total count of break- plus watchpoints.
|
|
|
|
#ifndef DEBUG_SHARED_BREAK_AND_WATCHPOINTS
|
|
|
|
# define DEBUG_SHARED_BREAK_AND_WATCHPOINTS 0
|
|
|
|
#endif
|
|
|
|
|
2008-08-27 16:50:56 +04:00
|
|
|
#endif // _ASSEMBLER
|
|
|
|
|
2005-02-24 18:44:48 +03:00
|
|
|
#endif // KERNEL_ARCH_USER_DEBUGGER_H
|