diff options
author | Bartosz Taudul <wolf.pld@gmail.com> | 2020-05-30 16:38:59 +0300 |
---|---|---|
committer | Bartosz Taudul <wolf.pld@gmail.com> | 2020-05-30 16:38:59 +0300 |
commit | 54eb75b0633b5e1b3d4a1ff74f881993131e30ac (patch) | |
tree | c459184188fe236e76e1a70f46693556abc9255f /libbacktrace | |
parent | ff27656533e47a4d062100f8b6c0c3ff1ede5097 (diff) |
Report symbol entry address in inline function discovery.
Diffstat (limited to 'libbacktrace')
-rw-r--r-- | libbacktrace/backtrace.hpp | 2 | ||||
-rw-r--r-- | libbacktrace/dwarf.cpp | 14 |
2 files changed, 8 insertions, 8 deletions
diff --git a/libbacktrace/backtrace.hpp b/libbacktrace/backtrace.hpp index 583421a7..f0c66a8f 100644 --- a/libbacktrace/backtrace.hpp +++ b/libbacktrace/backtrace.hpp @@ -95,7 +95,7 @@ extern struct backtrace_state *backtrace_create_state ( continuing tracing. The FILENAME and FUNCTION buffers may become invalid after this function returns. */ -typedef int (*backtrace_full_callback) (void *data, uintptr_t pc, +typedef int (*backtrace_full_callback) (void *data, uintptr_t pc, uintptr_t lowaddr, const char *filename, int lineno, const char *function); diff --git a/libbacktrace/dwarf.cpp b/libbacktrace/dwarf.cpp index a58d2aac..4543c1fe 100644 --- a/libbacktrace/dwarf.cpp +++ b/libbacktrace/dwarf.cpp @@ -3874,7 +3874,7 @@ report_inlined_functions (uintptr_t pc, struct function *function, return ret; /* Report this inlined call. */ - ret = callback (data, pc, *filename, *lineno, inlined->name); + ret = callback (data, pc, function_addrs->low, *filename, *lineno, inlined->name); if (ret != 0) return ret; @@ -4026,7 +4026,7 @@ dwarf_lookup_pc (struct backtrace_state *state, struct dwarf_data *ddata, if (new_data) return dwarf_lookup_pc (state, ddata, pc, callback, error_callback, data, found); - return callback (data, pc, NULL, 0, NULL); + return callback (data, pc, 0, NULL, 0, NULL); } /* Search for PC within this unit. */ @@ -4073,13 +4073,13 @@ dwarf_lookup_pc (struct backtrace_state *state, struct dwarf_data *ddata, entry->u->abs_filename = filename; } - return callback (data, pc, entry->u->abs_filename, 0, NULL); + return callback (data, pc, 0, entry->u->abs_filename, 0, NULL); } /* Search for function name within this unit. */ if (entry->u->function_addrs_count == 0) - return callback (data, pc, ln->filename, ln->lineno, NULL); + return callback (data, pc, 0, ln->filename, ln->lineno, NULL); function_addrs = ((struct function_addrs *) bsearch (&pc, entry->u->function_addrs, @@ -4087,7 +4087,7 @@ dwarf_lookup_pc (struct backtrace_state *state, struct dwarf_data *ddata, sizeof (struct function_addrs), function_addrs_search)); if (function_addrs == NULL) - return callback (data, pc, ln->filename, ln->lineno, NULL); + return callback (data, pc, 0, ln->filename, ln->lineno, NULL); /* If there are multiple function ranges that contain PC, use the last one, in order to produce predictable results. */ @@ -4108,7 +4108,7 @@ dwarf_lookup_pc (struct backtrace_state *state, struct dwarf_data *ddata, if (ret != 0) return ret; - return callback (data, pc, filename, lineno, function->name); + return callback (data, pc, function_addrs->low, filename, lineno, function->name); } @@ -4158,7 +4158,7 @@ dwarf_fileline (struct backtrace_state *state, uintptr_t pc, /* FIXME: See if any libraries have been dlopen'ed. */ - return callback (data, pc, NULL, 0, NULL); + return callback (data, pc, 0, NULL, 0, NULL); } /* Initialize our data structures from the DWARF debug info for a |