Changes in kernel/arch/sparc64/src/debug/stacktrace.c [294f7a52:6d7f9bfe] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/sparc64/src/debug/stacktrace.c
r294f7a52 r6d7f9bfe 35 35 #include <stacktrace.h> 36 36 #include <syscall/copy.h> 37 #include <arch/types.h> 37 38 #include <typedefs.h> 38 39 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) 40 bool kernel_frame_pointer_validate(uintptr_t fp) 87 41 { 88 42 return false; 89 43 } 90 44 91 bool uspace_frame_pointer_prev(stack_trace_context_t *ctx, uintptr_t *prev)45 bool kernel_frame_pointer_prev(uintptr_t fp, uintptr_t *prev) 92 46 { 93 47 return false; 94 48 } 95 49 96 bool uspace_return_address_get(stack_trace_context_t *ctx , uintptr_t *ra) 50 bool kernel_return_address_get(uintptr_t fp, uintptr_t *ra) 51 { 52 return false; 53 } 54 55 bool uspace_frame_pointer_validate(uintptr_t fp) 56 { 57 return false; 58 } 59 60 bool uspace_frame_pointer_prev(uintptr_t fp, uintptr_t *prev) 61 { 62 return false; 63 } 64 65 bool uspace_return_address_get(uintptr_t fp, uintptr_t *ra) 97 66 { 98 67 return false;
Note:
See TracChangeset
for help on using the changeset viewer.