Changeset 2fbb42f in mainline for kernel/generic/src/debug/stacktrace.c
- Timestamp:
- 2023-10-26T19:20:09Z (16 months ago)
- Branches:
- master, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 001957b6
- Parents:
- da13982
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/debug/stacktrace.c
rda13982 r2fbb42f 39 39 #include <stdio.h> 40 40 41 #include <debug/line.h> 42 41 43 #define STACK_FRAMES_MAX 20 42 44 … … 44 46 { 45 47 int cnt = 0; 46 const char *symbol; 47 uintptr_t offset; 48 48 49 uintptr_t fp; 49 50 uintptr_t pc; … … 51 52 while ((cnt++ < STACK_FRAMES_MAX) && 52 53 (ops->stack_trace_context_validate(ctx))) { 54 55 const char *symbol = NULL; 56 uintptr_t symbol_addr = 0; 57 const char *file_name = NULL; 58 const char *dir_name = NULL; 59 int line = 0; 60 int column = 0; 61 53 62 if (ops->symbol_resolve && 54 ops->symbol_resolve(ctx->pc, &symbol, &offset)) { 55 if (offset) 56 printf("%p: %s()+%p\n", (void *) ctx->fp, 57 symbol, (void *) offset); 58 else 59 printf("%p: %s()\n", (void *) ctx->fp, symbol); 63 ops->symbol_resolve(ctx->pc, 0, &symbol, &symbol_addr, &file_name, &dir_name, &line, &column)) { 64 65 if (symbol == NULL) 66 symbol = "<unknown>"; 67 68 if (file_name == NULL && line == 0) { 69 printf("%p: %24s()+%zu\n", (void *) ctx->fp, symbol, ctx->pc - symbol_addr); 70 } else { 71 if (file_name == NULL) 72 file_name = "<unknown>"; 73 if (dir_name == NULL) 74 dir_name = "<unknown>"; 75 76 printf("%p: %20s()+%zu\t %s/%s:%d:%d\n", 77 (void *) ctx->fp, symbol, ctx->pc - symbol_addr, 78 dir_name, file_name, line, column); 79 } 60 80 } else 61 81 printf("%p: %p()\n", (void *) ctx->fp, (void *) ctx->pc); … … 104 124 105 125 static bool 106 kernel_symbol_resolve(uintptr_t addr, const char **sp, uintptr_t *op) 126 resolve_kernel_address(uintptr_t addr, int op_index, 127 const char **symbol, uintptr_t *symbol_addr, 128 const char **filename, const char **dirname, 129 int *line, int *column) 107 130 { 108 uintptr_tsymbol_addr = 0;109 *s p = symtab_name_lookup(addr, &symbol_addr);110 *op = addr - symbol_addr; 111 return symbol_addr != 0;131 *symbol_addr = 0; 132 *symbol = symtab_name_lookup(addr, symbol_addr); 133 134 return debug_line_get_address_info(addr, op_index, filename, dirname, line, column) || *symbol_addr != 0; 112 135 } 113 136 … … 116 139 .frame_pointer_prev = kernel_frame_pointer_prev, 117 140 .return_address_get = kernel_return_address_get, 118 .symbol_resolve = kernel_symbol_resolve141 .symbol_resolve = resolve_kernel_address, 119 142 }; 120 143
Note:
See TracChangeset
for help on using the changeset viewer.