Files
haiku-beta6/src/system/kernel/arch/m68k/arch_user_debugger.cpp
T
Ingo Weinhold 568ade58d0 User debugger support:
* 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
2009-06-14 12:14:06 +00:00

119 lines
1.9 KiB
C++

/*
* Copyright 2007, François Revol, [email protected].
* Distributed under the terms of the MIT License.
*
* Copyright 2005, Axel Dörfler, [email protected]
* Distributed under the terms of the MIT License.
*/
#include <debugger.h>
#include <int.h>
#include <thread.h>
#include <arch/user_debugger.h>
#warning M68K: WRITEME
void
arch_clear_team_debug_info(struct arch_team_debug_info *info)
{
}
void
arch_destroy_team_debug_info(struct arch_team_debug_info *info)
{
arch_clear_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)
{
arch_clear_thread_debug_info(info);
}
void
arch_update_thread_single_step()
{
if (struct iframe* frame = m68k_get_user_iframe()) {
struct thread* thread = thread_get_current_thread();
// set/clear T1 in SR depending on if single stepping is desired
// T1 T0
// 0 0 no tracing
// 0 1 trace on flow
// 1 0 single step
// 1 1 undef
// note 060 and 020(?) only have T1 bit,
// but this should be compatible as well.
if (thread->debug_info.flags & B_THREAD_DEBUG_SINGLE_STEP) {
frame->cpu.sr &= ~(M68K_SR_T_MASK);
frame->cpu.sr |= (1 << M68K_SR_T1);
} else {
frame->cpu.sr &= ~(M68K_SR_T_MASK);
}
}
}
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)
{
return B_UNSUPPORTED;
}
status_t
arch_set_breakpoint(void *address)
{
return B_ERROR;
}
status_t
arch_clear_breakpoint(void *address)
{
return B_ERROR;
}
status_t
arch_set_watchpoint(void *address, uint32 type, int32 length)
{
return B_ERROR;
}
status_t
arch_clear_watchpoint(void *address)
{
return B_ERROR;
}
bool
arch_has_breakpoints(struct arch_team_debug_info *info)
{
return false;
}