1 /* 2 * Copyright 2005-2016, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 #ifndef KERNEL_ARCH_USER_DEBUGGER_H 6 #define KERNEL_ARCH_USER_DEBUGGER_H 7 8 9 #include "kernel_debug_config.h" 10 11 #ifndef _ASSEMBLER 12 13 #include <debugger.h> 14 15 #ifdef __cplusplus 16 extern "C" { 17 #endif 18 19 struct arch_team_debug_info; 20 struct arch_thread_debug_info; 21 22 namespace BKernel { 23 struct Thread; 24 } 25 using BKernel::Thread; 26 27 28 void arch_clear_team_debug_info(struct arch_team_debug_info *info); 29 void arch_destroy_team_debug_info(struct arch_team_debug_info *info); 30 void arch_clear_thread_debug_info(struct arch_thread_debug_info *info); 31 void arch_destroy_thread_debug_info(struct arch_thread_debug_info *info); 32 33 void arch_update_thread_single_step(); 34 35 void arch_set_debug_cpu_state(const debug_cpu_state *cpuState); 36 void arch_get_debug_cpu_state(debug_cpu_state *cpuState); 37 status_t arch_get_thread_debug_cpu_state(Thread *thread, 38 debug_cpu_state *cpuState); 39 40 status_t arch_set_breakpoint(void *address); 41 status_t arch_clear_breakpoint(void *address); 42 status_t arch_set_watchpoint(void *address, uint32 type, int32 length); 43 status_t arch_clear_watchpoint(void *address); 44 bool arch_has_breakpoints(struct arch_team_debug_info *info); 45 46 #if KERNEL_BREAKPOINTS 47 status_t arch_set_kernel_breakpoint(void *address); 48 status_t arch_clear_kernel_breakpoint(void *address); 49 status_t arch_set_kernel_watchpoint(void *address, uint32 type, int32 length); 50 status_t arch_clear_kernel_watchpoint(void *address); 51 #endif 52 53 #ifdef __cplusplus 54 } 55 #endif 56 57 #include <arch_user_debugger.h> 58 59 // Defaults for macros defined by the architecture specific header: 60 61 // maximum number of instruction breakpoints 62 #ifndef DEBUG_MAX_BREAKPOINTS 63 # define DEBUG_MAX_BREAKPOINTS 0 64 #endif 65 66 // maximum number of data watchpoints 67 #ifndef DEBUG_MAX_WATCHPOINTS 68 # define DEBUG_MAX_WATCHPOINTS 0 69 #endif 70 71 // the software breakpoint instruction 72 #if !defined(DEBUG_SOFTWARE_BREAKPOINT) \ 73 || !defined(DEBUG_SOFTWARE_BREAKPOINT_SIZE) 74 # undef DEBUG_SOFTWARE_BREAKPOINT 75 # undef DEBUG_SOFTWARE_BREAKPOINT_SIZE 76 # define DEBUG_SOFTWARE_BREAKPOINT NULL 77 # define DEBUG_SOFTWARE_BREAKPOINT_SIZE 0 78 #endif 79 80 // Boolean whether break- and watchpoints use the same registers. If != 0, then 81 // DEBUG_MAX_BREAKPOINTS == DEBUG_MAX_WATCHPOINTS and either specifies the 82 // total count of break- plus watchpoints. 83 #ifndef DEBUG_SHARED_BREAK_AND_WATCHPOINTS 84 # define DEBUG_SHARED_BREAK_AND_WATCHPOINTS 0 85 #endif 86 87 #endif // _ASSEMBLER 88 89 #endif // KERNEL_ARCH_USER_DEBUGGER_H 90