From d34232858880672a9e6b88ff5ebd966969aabb9f Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Mon, 7 Sep 2015 08:08:16 +0200 Subject: [PATCH] core_unwind: fix the missing frame build_id and file_name The documentation of dwfl_module_build_id() says: This returns 0 when the module's main ELF file has not yet been loaded and its build ID bits were not reported. To ensure the ID is always returned when determinable, call dwfl_module_getelf first. /usr/include/elfutils/libdwfl.h ABRT upstream commit 88c6b3683a129c0e369071204b29fbca94772d3b verifies this patch. Discovered by Richard Marko Resolved by Mark Wielaard Related: #1210599 Signed-off-by: Jakub Filak --- lib/core_unwind.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/core_unwind.c b/lib/core_unwind.c index cf9973a..c30f9db 100644 --- a/lib/core_unwind.c +++ b/lib/core_unwind.c @@ -278,9 +278,14 @@ resolve_frame(Dwfl *dwfl, Dwarf_Addr ip, bool minus_one) int ret; const unsigned char *build_id_bits; const char *filename, *funcname; - GElf_Addr bid_addr; + GElf_Addr bias, bid_addr; Dwarf_Addr start; + /* Initialize the module's main Elf for dwfl_module_build_id and dwfl_module_info */ + /* No need to deallocate the variable 'bias' and the return value.*/ + if (NULL == dwfl_module_getelf(mod, &bias)) + warn("The module's main Elf was not found"); + ret = dwfl_module_build_id(mod, &build_id_bits, &bid_addr); if (ret > 0) { -- 2.4.3