An outermost stack frame (having a NULL previous frame) was
incorrectly recognized as iframe. Fixes the read fault when doing "sc" for a kernel thread. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23628 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
42a5ea091a
commit
1111ffc50b
|
@ -29,8 +29,6 @@ struct stack_frame {
|
|||
|
||||
#define NUM_PREVIOUS_LOCATIONS 32
|
||||
|
||||
extern struct iframe_stack gBootFrameStack;
|
||||
|
||||
|
||||
static bool
|
||||
already_visited(uint32 *visited, int32 *_last, int32 *_num, uint32 ebp)
|
||||
|
@ -200,8 +198,11 @@ is_kernel_stack_address(struct thread* thread, addr_t address)
|
|||
static bool
|
||||
is_iframe(struct thread* thread, addr_t frame)
|
||||
{
|
||||
return is_kernel_stack_address(thread, frame)
|
||||
&& (*(addr_t*)frame & ~IFRAME_TYPE_MASK) == 0;
|
||||
if (!is_kernel_stack_address(thread, frame))
|
||||
return false;
|
||||
|
||||
addr_t previousFrame = *(addr_t*)frame;
|
||||
return ((previousFrame & ~IFRAME_TYPE_MASK) == 0 && previousFrame != 0);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -67,8 +67,11 @@ find_previous_iframe(addr_t frame)
|
|||
while (frame >= thread->kernel_stack_base
|
||||
&& frame < thread->kernel_stack_base + KERNEL_STACK_SIZE) {
|
||||
addr_t previousFrame = *(addr_t*)frame;
|
||||
if ((previousFrame & ~IFRAME_TYPE_MASK) == 0)
|
||||
if ((previousFrame & ~IFRAME_TYPE_MASK) == 0) {
|
||||
if (previousFrame == 0)
|
||||
return NULL;
|
||||
return (struct iframe*)frame;
|
||||
}
|
||||
|
||||
frame = previousFrame;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue