568ade58d0
* Generalized address checks. The debugger can now also read the commpage. * Added new syscall _kern_get_thread_cpu_state() to get the CPU state of a not running thread. Introduced arch_get_thread_debug_cpu_state() for that purpose, which is only implemented for x86 ATM (uses the new i386_get_thread_user_iframe()). * Don't allow a debugger to change a thread's "esp" anymore. That's the esp register in the kernel. "user_esp" can still be changed. * Generally set RF (resume flag) in eflags in interrupt handlers, not only after a instruction breakpoint debug exception. This should prevent breakpoints from being triggered more than once (e.g. when the breakpoint is on an instruction that can cause a page fault). I still saw those with bdb in VMware, but that might be a VMware bug. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31045 a95241bf-73f2-0310-859d-f6bbb57e9c96
56 lines
1.6 KiB
C
56 lines
1.6 KiB
C
/*
|
|
* Copyright 2005, Ingo Weinhold, bonefish@users.sf.net.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef KERNEL_ARCH_USER_DEBUGGER_H
|
|
#define KERNEL_ARCH_USER_DEBUGGER_H
|
|
|
|
#include "kernel_debug_config.h"
|
|
|
|
#ifndef _ASSEMBLER
|
|
|
|
#include <debugger.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
struct arch_team_debug_info;
|
|
struct arch_thread_debug_info;
|
|
struct thread;
|
|
|
|
void arch_clear_team_debug_info(struct arch_team_debug_info *info);
|
|
void arch_destroy_team_debug_info(struct arch_team_debug_info *info);
|
|
void arch_clear_thread_debug_info(struct arch_thread_debug_info *info);
|
|
void arch_destroy_thread_debug_info(struct arch_thread_debug_info *info);
|
|
|
|
void arch_update_thread_single_step();
|
|
|
|
void arch_set_debug_cpu_state(const struct debug_cpu_state *cpuState);
|
|
void arch_get_debug_cpu_state(struct debug_cpu_state *cpuState);
|
|
status_t arch_get_thread_debug_cpu_state(struct thread *thread,
|
|
struct debug_cpu_state *cpuState);
|
|
|
|
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);
|
|
bool arch_has_breakpoints(struct arch_team_debug_info *info);
|
|
|
|
#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
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#include <arch_user_debugger.h>
|
|
|
|
#endif // _ASSEMBLER
|
|
|
|
#endif // KERNEL_ARCH_USER_DEBUGGER_H
|