Changeset 23628

Show
Ignore:
Timestamp:
01/19/08 05:56:40 (10 months ago)
Author:
bonefish
Message:

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.

Location:
haiku/trunk/src/system/kernel/arch/x86
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • haiku/trunk/src/system/kernel/arch/x86/arch_debug.cpp

    r23549 r23628  
    2929 
    3030#define NUM_PREVIOUS_LOCATIONS 32 
    31  
    32 extern struct iframe_stack gBootFrameStack; 
    3331 
    3432 
     
    201199is_iframe(struct thread* thread, addr_t frame) 
    202200{ 
    203         return is_kernel_stack_address(thread, frame) 
    204                 && (*(addr_t*)frame & ~IFRAME_TYPE_MASK) == 0; 
     201        if (!is_kernel_stack_address(thread, frame)) 
     202                return false; 
     203 
     204        addr_t previousFrame = *(addr_t*)frame; 
     205        return ((previousFrame & ~IFRAME_TYPE_MASK) == 0 && previousFrame != 0); 
    205206} 
    206207 
  • haiku/trunk/src/system/kernel/arch/x86/arch_thread.c

    r23370 r23628  
    6868                && frame < thread->kernel_stack_base + KERNEL_STACK_SIZE) { 
    6969                addr_t previousFrame = *(addr_t*)frame; 
    70                 if ((previousFrame & ~IFRAME_TYPE_MASK) == 0) 
     70                if ((previousFrame & ~IFRAME_TYPE_MASK) == 0) { 
     71                        if (previousFrame == 0) 
     72                                return NULL; 
    7173                        return (struct iframe*)frame; 
     74                } 
    7275 
    7376                frame = previousFrame;