haiku/headers/private/kernel/arch/user_debugger.h

90 lines
2.5 KiB
C
Raw Permalink Normal View History

/*
* Copyright 2005-2016, Ingo Weinhold, ingo_weinhold@gmx.de.
* 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;
namespace BKernel {
struct Thread;
}
using BKernel::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);
Merged branch haiku/branches/developer/bonefish/optimization revision 23139 into trunk, with roughly the following changes (for details svn log the branch): * The int 99 syscall handler is now fully in assembly. * Added a sysenter/sysexit handler and use it on Pentiums that support it (via commpage). * Got rid of i386_handle_trap(). A bit of functionality was moved into the assembly handler which now uses a jump table to call C functions handling the respective interrupt. * Some optimizations to get user debugger support code out of the interrupt handling path. * Introduced a thread::flags fields which allows to skip handling of rare events (signals, user debug enabling/disabling) on the common interrupt handling path. * Got rid of the explicit iframe stack. The iframes can still be retrieved by iterating through the stack frames. * Made the commpage an architecture independent feature. It's used for the real time data stuff (instead of creating a separate area). * The x86 CPU modules can now provide processor optimized versions for common functions (currently memcpy() only). They are used in the kernel and are provided to the userland via commpage entries. * Introduced build system feature allowing easy use of C structure member offsets in assembly code. Changes after merging: * Fixed merge conflict in src/system/kernel/arch/x86/arch_debug.cpp (caused by refactoring and introduction of "call" debugger command). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23370 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-11 03:36:44 +03:00
void arch_update_thread_single_step();
void arch_set_debug_cpu_state(const debug_cpu_state *cpuState);
void arch_get_debug_cpu_state(debug_cpu_state *cpuState);
status_t arch_get_thread_debug_cpu_state(Thread *thread,
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);
Merged branch haiku/branches/developer/bonefish/optimization revision 23139 into trunk, with roughly the following changes (for details svn log the branch): * The int 99 syscall handler is now fully in assembly. * Added a sysenter/sysexit handler and use it on Pentiums that support it (via commpage). * Got rid of i386_handle_trap(). A bit of functionality was moved into the assembly handler which now uses a jump table to call C functions handling the respective interrupt. * Some optimizations to get user debugger support code out of the interrupt handling path. * Introduced a thread::flags fields which allows to skip handling of rare events (signals, user debug enabling/disabling) on the common interrupt handling path. * Got rid of the explicit iframe stack. The iframes can still be retrieved by iterating through the stack frames. * Made the commpage an architecture independent feature. It's used for the real time data stuff (instead of creating a separate area). * The x86 CPU modules can now provide processor optimized versions for common functions (currently memcpy() only). They are used in the kernel and are provided to the userland via commpage entries. * Introduced build system feature allowing easy use of C structure member offsets in assembly code. Changes after merging: * Fixed merge conflict in src/system/kernel/arch/x86/arch_debug.cpp (caused by refactoring and introduction of "call" debugger command). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23370 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-11 03:36:44 +03:00
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>
// 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
#endif // _ASSEMBLER
#endif // KERNEL_ARCH_USER_DEBUGGER_H