Ignore:
File:
1 edited

Legend:

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

    rd99c1d2 r50fda24  
    2727 */
    2828
    29 /** @addtogroup abs32le
     29/** @addtogroup ia32
    3030 * @{
    3131 */
     
    3535#include <stacktrace.h>
    3636#include <syscall/copy.h>
     37#include <arch/types.h>
    3738#include <typedefs.h>
     39
     40#define FRAME_OFFSET_FP_PREV    0
     41#define FRAME_OFFSET_RA         1
    3842
    3943bool kernel_frame_pointer_validate(uintptr_t fp)
    4044{
    41         return true;
     45        return fp != 0;
    4246}
    4347
    4448bool kernel_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    4549{
     50        uint32_t *stack = (void *) fp;
     51        *prev = stack[FRAME_OFFSET_FP_PREV];
    4652        return true;
    4753}
     
    4955bool kernel_return_address_get(uintptr_t fp, uintptr_t *ra)
    5056{
     57        uint32_t *stack = (void *) fp;
     58        *ra = stack[FRAME_OFFSET_RA];
    5159        return true;
    5260}
     
    5462bool uspace_frame_pointer_validate(uintptr_t fp)
    5563{
    56         return true;
     64        return fp != 0;
    5765}
    5866
    5967bool uspace_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    6068{
    61         return true;
     69        return !copy_from_uspace((void *) prev,
     70            (uint32_t *) fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
    6271}
    6372
    6473bool uspace_return_address_get(uintptr_t fp, uintptr_t *ra)
    6574{
    66         return true;
    67 }
    68 
    69 uintptr_t frame_pointer_get(void)
    70 {
    71         return 0;
    72 }
    73 
    74 uintptr_t program_counter_get(void)
    75 {
    76         return 0;
     75        return !copy_from_uspace((void *) ra, (uint32_t *) fp + FRAME_OFFSET_RA,
     76            sizeof(*ra));
    7777}
    7878
Note: See TracChangeset for help on using the changeset viewer.