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
|
#define NUM_PREVIOUS_LOCATIONS 32
|
||||||
|
|
||||||
extern struct iframe_stack gBootFrameStack;
|
|
||||||
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
already_visited(uint32 *visited, int32 *_last, int32 *_num, uint32 ebp)
|
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
|
static bool
|
||||||
is_iframe(struct thread* thread, addr_t frame)
|
is_iframe(struct thread* thread, addr_t frame)
|
||||||
{
|
{
|
||||||
return is_kernel_stack_address(thread, frame)
|
if (!is_kernel_stack_address(thread, frame))
|
||||||
&& (*(addr_t*)frame & ~IFRAME_TYPE_MASK) == 0;
|
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
|
while (frame >= thread->kernel_stack_base
|
||||||
&& frame < thread->kernel_stack_base + KERNEL_STACK_SIZE) {
|
&& frame < thread->kernel_stack_base + KERNEL_STACK_SIZE) {
|
||||||
addr_t previousFrame = *(addr_t*)frame;
|
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;
|
return (struct iframe*)frame;
|
||||||
|
}
|
||||||
|
|
||||||
frame = previousFrame;
|
frame = previousFrame;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue