Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/sparc64/src/debug/stacktrace.c

    r294f7a52 r6d7f9bfe  
    3535#include <stacktrace.h>
    3636#include <syscall/copy.h>
     37#include <arch/types.h>
    3738#include <typedefs.h>
    3839
    39 #include <arch.h>
    40 #include <arch/stack.h>
    41 #include <arch/trap/trap_table.h>
    42 
    43 #if defined(SUN4V)
    44 #include <arch/sun4v/arch.h>
    45 #endif
    46 
    47 #define FRAME_OFFSET_FP_PREV    14
    48 #define FRAME_OFFSET_RA         15
    49 
    50 extern void alloc_window_and_flush(void);
    51 
    52 bool kernel_stack_trace_context_validate(stack_trace_context_t *ctx)
    53 {
    54         uintptr_t kstack;
    55        
    56 #if defined(SUN4U)
    57         kstack = read_from_ag_g6();
    58 #elif defined(SUN4V)
    59         kstack = asi_u64_read(ASI_SCRATCHPAD, SCRATCHPAD_KSTACK);
    60 #endif
    61 
    62         kstack += STACK_BIAS;
    63         kstack -= PREEMPTIBLE_HANDLER_STACK_FRAME_SIZE;
    64 
    65         if (THREAD && (ctx->fp == kstack))
    66                 return false;
    67         return ctx->fp != 0;
    68 }
    69 
    70 bool kernel_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
    71 {
    72         uint64_t *stack = (void *) ctx->fp;
    73         alloc_window_and_flush();
    74         *prev = stack[FRAME_OFFSET_FP_PREV] + STACK_BIAS;
    75         return true;
    76 }
    77 
    78 bool kernel_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
    79 {
    80         uint64_t *stack = (void *) ctx->fp;
    81         alloc_window_and_flush();
    82         *ra = stack[FRAME_OFFSET_RA];
    83         return true;
    84 }
    85 
    86 bool uspace_stack_trace_context_validate(stack_trace_context_t *ctx)
     40bool kernel_frame_pointer_validate(uintptr_t fp)
    8741{
    8842        return false;
    8943}
    9044
    91 bool uspace_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
     45bool kernel_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    9246{
    9347        return false;
    9448}
    9549
    96 bool uspace_return_address_get(stack_trace_context_t *ctx , uintptr_t *ra)
     50bool kernel_return_address_get(uintptr_t fp, uintptr_t *ra)
     51{
     52        return false;
     53}
     54
     55bool uspace_frame_pointer_validate(uintptr_t fp)
     56{
     57        return false;
     58}
     59
     60bool uspace_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
     61{
     62        return false;
     63}
     64
     65bool uspace_return_address_get(uintptr_t fp, uintptr_t *ra)
    9766{
    9867        return false;
Note: See TracChangeset for help on using the changeset viewer.