39
39
#define FRAME_OFFSET_FP_PREV 0
40
40
#define FRAME_OFFSET_RA 1
42
bool kernel_frame_pointer_validate(uintptr_t fp)
42
bool kernel_stack_trace_context_validate(stack_trace_context_t *ctx)
47
bool kernel_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
47
bool kernel_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
49
uint64_t *stack = (void *) fp;
49
uint64_t *stack = (void *) ctx->fp;
50
50
*prev = stack[FRAME_OFFSET_FP_PREV];
55
bool kernel_return_address_get(uintptr_t fp, uintptr_t *ra)
55
bool kernel_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
57
uint64_t *stack = (void *) fp;
57
uint64_t *stack = (void *) ctx->fp;
58
58
*ra = stack[FRAME_OFFSET_RA];
63
bool uspace_frame_pointer_validate(uintptr_t fp)
63
bool uspace_stack_trace_context_validate(stack_trace_context_t *ctx)
68
bool uspace_frame_pointer_prev(uintptr_t fp, uintptr_t *prev)
68
bool uspace_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)
70
70
return !copy_from_uspace((void *) prev,
71
(uint64_t *) fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
71
(uint64_t *) ctx->fp + FRAME_OFFSET_FP_PREV, sizeof(*prev));
74
bool uspace_return_address_get(uintptr_t fp, uintptr_t *ra)
74
bool uspace_return_address_get(stack_trace_context_t *ctx, uintptr_t *ra)
76
return !copy_from_uspace((void *) ra, (uint64_t *) fp + FRAME_OFFSET_RA,
76
return !copy_from_uspace((void *) ra,
77
(uint64_t *) ctx->fp + FRAME_OFFSET_RA, sizeof(*ra));