Ignore:
File:
1 edited

Legend:

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

    rd32358f r50fda24  
    2727 */
    2828
    29 /** @addtogroup abs32le
     29/** @addtogroup ia32
    3030 * @{
    3131 */
     
    3838#include <typedefs.h>
    3939
     40#define FRAME_OFFSET_FP_PREV    0
     41#define FRAME_OFFSET_RA         1
     42
    4043bool kernel_frame_pointer_validate(uintptr_t fp)
    4144{
    42         return true;;
     45        return fp != 0;
    4346}
    4447
    4548bool kernel_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    4649{
     50        uint32_t *stack = (void *) fp;
     51        *prev = stack[FRAME_OFFSET_FP_PREV];
    4752        return true;
    4853}
     
    5055bool kernel_return_address_get(uintptr_t fp, uintptr_t *ra)
    5156{
     57        uint32_t *stack = (void *) fp;
     58        *ra = stack[FRAME_OFFSET_RA];
    5259        return true;
    5360}
     
    5562bool uspace_frame_pointer_validate(uintptr_t fp)
    5663{
    57         return true;
     64        return fp != 0;
    5865}
    5966
    6067bool uspace_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
    6168{
    62         return true;
     69        return !copy_from_uspace((void *) prev,
     70            (uint32_t *) fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
    6371}
    6472
    6573bool uspace_return_address_get(uintptr_t fp, uintptr_t *ra)
    6674{
    67         return true;
    68 }
    69 
    70 uintptr_t frame_pointer_get(void)
    71 {
    72         return 0;
    73 }
    74 
    75 uintptr_t program_counter_get(void)
    76 {
    77         return 0;
     75        return !copy_from_uspace((void *) ra, (uint32_t *) fp + FRAME_OFFSET_RA,
     76            sizeof(*ra));
    7877}
    7978
Note: See TracChangeset for help on using the changeset viewer.