Changeset 7c8e1e1 in mainline for kernel/arch/sparc64/src/debug
- Timestamp:
- 2010-05-21T23:02:10Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ecbd287d
- Parents:
- 3500f75 (diff), 0242621 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- kernel/arch/sparc64/src/debug
- Files:
-
- 2 edited
-
stacktrace.c (modified) (1 diff)
-
stacktrace_asm.S (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/sparc64/src/debug/stacktrace.c
r3500f75 r7c8e1e1 37 37 #include <typedefs.h> 38 38 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 39 52 bool kernel_frame_pointer_validate(uintptr_t fp) 40 53 { 41 return false; 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 && (fp == kstack)) 66 return false; 67 return fp != 0; 42 68 } 43 69 44 70 bool kernel_frame_pointer_prev(uintptr_t fp, uintptr_t *prev) 45 71 { 46 return false; 72 uint64_t *stack = (void *) fp; 73 alloc_window_and_flush(); 74 *prev = stack[FRAME_OFFSET_FP_PREV] + STACK_BIAS; 75 return true; 47 76 } 48 77 49 78 bool kernel_return_address_get(uintptr_t fp, uintptr_t *ra) 50 79 { 51 return false; 80 uint64_t *stack = (void *) fp; 81 alloc_window_and_flush(); 82 *ra = stack[FRAME_OFFSET_RA]; 83 return true; 52 84 } 53 85 -
kernel/arch/sparc64/src/debug/stacktrace_asm.S
r3500f75 r7c8e1e1 27 27 # 28 28 29 #include <arch/stack.h> 30 29 31 .text 30 32 31 33 .global frame_pointer_get 32 34 .global program_counter_get 35 .global alloc_window_and_flush 33 36 34 37 frame_pointer_get: 38 # Add the stack bias to %sp to get the actual address. 35 39 retl 36 nop40 add %sp, STACK_BIAS, %o0 37 41 38 42 program_counter_get: 39 43 retl 40 nop44 mov %o7, %o0 41 45 46 alloc_window_and_flush: 47 save %sp, -(STACK_WINDOW_SAVE_AREA_SIZE+STACK_ARG_SAVE_AREA_SIZE), %sp 48 # Flush all other windows to memory so that we can read their contents. 49 flushw 50 ret 51 restore 52
Note:
See TracChangeset
for help on using the changeset viewer.
