diff --git a/src/coredump/stacktrace.c b/src/coredump/stacktrace.c index a962cde125..4e0d3e7698 100644 --- a/src/coredump/stacktrace.c +++ b/src/coredump/stacktrace.c @@ -32,6 +32,7 @@ static int frame_callback(Dwfl_Frame *frame, void *userdata) { const char *fname = NULL, *symbol = NULL; Dwfl_Module *module; bool is_activation; + uint64_t module_offset = 0; assert(frame); assert(c); @@ -48,6 +49,7 @@ static int frame_callback(Dwfl_Frame *frame, void *userdata) { if (module) { Dwarf_Die *s, *cudie; int n; + Dwarf_Addr start; cudie = dwfl_module_addrdie(module, pc_adjusted, &bias); if (cudie) { @@ -73,10 +75,11 @@ static int frame_callback(Dwfl_Frame *frame, void *userdata) { if (!symbol) symbol = dwfl_module_addrname(module, pc_adjusted); - fname = dwfl_module_info(module, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + fname = dwfl_module_info(module, NULL, &start, NULL, NULL, NULL, NULL, NULL); + module_offset = pc - start; } - fprintf(c->f, "#%-2u 0x%016" PRIx64 " %s (%s)\n", c->n_frame, (uint64_t) pc, strna(symbol), strna(fname)); + fprintf(c->f, "#%-2u 0x%016" PRIx64 " %s (%s + 0x%" PRIx64 ")\n", c->n_frame, (uint64_t) pc, strna(symbol), strna(fname), module_offset); c->n_frame++; return DWARF_CB_OK;