Ignore:
File:
1 edited

Legend:

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

    r4afd4ab rb92ee1e  
    3535#include <stacktrace.h>
    3636#include <syscall/copy.h>
    37 #include <arch/types.h>
    3837#include <typedefs.h>
    3938
    40 bool kernel_frame_pointer_validate(uintptr_t fp)
     39#define FRAME_OFFSET_FP_PREV  0
     40#define FRAME_OFFSET_RA       1
     41
     42bool kernel_stack_trace_context_validate(stack_trace_context_t *ctx)
    4143{
    42         return false;
     44        return ctx->fp != 0;
    4345}
    4446
    45 bool kernel_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
     47bool kernel_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
    4648{
    47         return false;
     49        uint32_t *stack = (void *) ctx->fp;
     50        *prev = stack[FRAME_OFFSET_FP_PREV];
     51        return true;
    4852}
    4953
    50 bool kernel_return_address_get(uintptr_t fp, uintptr_t *ra)
     54bool kernel_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
    5155{
    52         return false;
     56        uint32_t *stack = (void *) ctx->fp;
     57        *ra = stack[FRAME_OFFSET_RA];
     58        return true;
    5359}
    5460
    55 bool uspace_frame_pointer_validate(uintptr_t fp)
     61bool uspace_stack_trace_context_validate(stack_trace_context_t *ctx)
    5662{
    57         return false;
     63        return ctx->fp != 0;
    5864}
    5965
    60 bool uspace_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
     66bool uspace_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
    6167{
    62         return false;
     68        return !copy_from_uspace((void *) prev,
     69            (uint32_t *) ctx->fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
    6370}
    6471
    65 bool uspace_return_address_get(uintptr_t fp, uintptr_t *ra)
     72bool uspace_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
    6673{
    67         return false;
     74        return !copy_from_uspace((void *) ra,
     75            (uint32_t *) ctx->fp + FRAME_OFFSET_RA, sizeof(*ra));
    6876}
    6977
Note: See TracChangeset for help on using the changeset viewer.