arch_debug_get_interrupt_pc() does now also support the currently
debugged thread, if set. This makes "dis" without specified address work when used with "in_context". git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27190 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -710,10 +710,19 @@ arch_debug_get_stack_trace(addr_t* returnAddresses, int32 maxCount,
|
|||||||
void*
|
void*
|
||||||
arch_debug_get_interrupt_pc()
|
arch_debug_get_interrupt_pc()
|
||||||
{
|
{
|
||||||
struct iframe* frame = i386_get_current_iframe();
|
struct thread* thread = debug_get_debugged_thread();
|
||||||
if (frame == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
|
if (thread == thread_get_current_thread()) {
|
||||||
|
struct iframe* frame = i386_get_current_iframe();
|
||||||
|
if (frame == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return (void*)(addr_t)frame->eip;
|
||||||
|
}
|
||||||
|
|
||||||
|
addr_t ebp = thread->arch_info.current_stack.esp[2];
|
||||||
|
// NOTE: This doesn't work, if the thread is running (on another CPU).
|
||||||
|
struct iframe* frame = find_previous_iframe(thread, ebp);
|
||||||
return (void*)(addr_t)frame->eip;
|
return (void*)(addr_t)frame->eip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user