Changes in uspace/lib/libc/generic/stacktrace.c [e515b21a:47246f4] in mainline
- File:
-
- 1 edited
-
uspace/lib/libc/generic/stacktrace.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/libc/generic/stacktrace.c
re515b21a r47246f4 1 1 /* 2 2 * Copyright (c) 2009 Jakub Jermar 3 * Copyright (c) 2010 Jiri Svoboda4 3 * All rights reserved. 5 4 * … … 37 36 #include <stdio.h> 38 37 #include <sys/types.h> 39 #include <errno.h>40 38 41 static int stacktrace_read_uintptr(void *arg, uintptr_t addr, uintptr_t *data); 42 43 void stacktrace_print_fp_pc(uintptr_t fp, uintptr_t pc) 39 void stack_trace_fp_pc(uintptr_t fp, uintptr_t pc) 44 40 { 45 stacktrace_t st; 46 uintptr_t nfp; 47 48 st.op_arg = NULL; 49 st.read_uintptr = stacktrace_read_uintptr; 50 51 while (stacktrace_fp_valid(&st, fp)) { 41 printf("Printing stack trace:\n"); 42 printf("=====================\n"); 43 while (frame_pointer_validate(fp)) { 52 44 printf("%p: %p()\n", fp, pc); 53 (void) stacktrace_ra_get(&st, fp, &pc); 54 (void) stacktrace_fp_prev(&st, fp, &nfp); 55 fp = nfp; 45 pc = return_address_get(fp); 46 fp = frame_pointer_prev(fp); 56 47 } 48 printf("=====================\n"); 57 49 } 58 50 59 void stack trace_print(void)51 void stack_trace(void) 60 52 { 61 stacktrace_prepare(); 62 stacktrace_print_fp_pc(stacktrace_fp_get(), stacktrace_pc_get()); 63 /* 64 * Prevent the tail call optimization of the previous call by 65 * making it a non-tail call. 66 */ 67 (void) stacktrace_fp_get(); 68 } 69 70 static int stacktrace_read_uintptr(void *arg, uintptr_t addr, uintptr_t *data) 71 { 72 (void) arg; 73 *data = *((uintptr_t *) addr); 74 return EOK; 53 stack_trace_fp_pc(frame_pointer_get(), program_counter_get()); 75 54 } 76 55
Note:
See TracChangeset
for help on using the changeset viewer.
