Hi,
I have a coredump which cannot be processed by eu-unstrip.
It is from crashed firefox's nspluginwrapper. Crashed binary is
/usr/lib/nspluginwrapper/npviewer.bin and
"ldd /usr/lib/nspluginwrapper/npviewer.bin" shows that
it is apparently a normal dynamically linked program.
Other people which are working with me on abrt
also say that some firefox crashes can't be processes.
It's likely they refer to this (or similar) problem.
[CC-ing abrt ml]
Coredump is about 200 MB big (bzipped 20 MB), I can send it
on request.
eu-unstrip just says this and exits with exitcode 1:
# eu-unstrip -n --core=coredump.big
eu-unstrip: coredump.big: Callback returned failure
I built unstrip from current git and it does the same.
With some instrumentation, I see that execution deviates from
"normal" flow (one which I see with good coredumps) in
libdwfl/link_map.c, report_r_debug(), here:
...
GElf_Addr next = addrs[0];
Dwfl_Module **lastmodp = &dwfl->modulelist;
int result = 0;
while (next != 0)
{
...
if (name != NULL && name[0] == '\0')
name = NULL;
/* If content-sniffing already reported a module covering
the same area, find that existing module to adjust.
The l_ld address is the only one we know for sure
to be within the module's own segments (its .dynamic). */
Dwfl_Module *mod;
int segndx = INTUSE(dwfl_addrsegment) (dwfl, l_ld, &mod);
if (unlikely (segndx < 0))
{fprintf(stderr, "%s.%d: %s() we return -1 (segndx:%d < 0)\n", __FILE__, __LINE__, "report_r_debug", segndx);
return release_buffer (-1);
}
...
The fprintf shown above triggers.
Full instrumented output is:
core-file.c.459: dwfl_core_file_report() dwfl_link_map_report ...
link_map.c.873: dwfl_link_map_report() report_r_debug(integrated_memory_callback) ...
link_map.c.210: integrated_memory_callback() dwfl_addrsegment(vaddr:7fa09549c276) returns mod->name:'ld-linux-x86-64.so.2' mod->main.name:'(null)'
link_map.c.216: integrated_memory_callback() dwfl_module_address_section ...
derelocate.c.391: dwfl_module_address_section() check_module ...
derelocate.c.291: check_module() dwfl_module_getsymtab ...
dwfl_module_getdwarf.c.752: dwfl_module_getsymtab() find_symtab ...
dwfl_module_getdwarf.c.507: find_symtab() __libdwfl_getelf ...
dwfl_module_getdwarf.c.134: __libdwfl_getelf() find_elf ...
dwfl_module_getdwarf.c.138: __libdwfl_getelf() open_elf ...
dwfl_module_getdwarf.c.66: open_elf() file->name:'(null)'
dwfl_module_getdwarf.c.71: open_elf() returns CBFAIL: fd < 0
dwfl_module_getdwarf.c.140: __libdwfl_getelf() open_elf returned
dwfl_module_getdwarf.c.760: dwfl_module_getsymtab() we return -1
derelocate.c.298: check_module() dwfl_module_getsymtab returned error 16, we return true
derelocate.c.393: dwfl_module_address_section() we return NULL (check_module != 0)
link_map.c.228: integrated_memory_callback() we got scn == NULL and return false
link_map.c.210: integrated_memory_callback() dwfl_addrsegment(vaddr:7fa09549c276) returns mod->name:'ld-linux-x86-64.so.2' mod->main.name:'(null)'
link_map.c.216: integrated_memory_callback() dwfl_module_address_section ...
derelocate.c.391: dwfl_module_address_section() check_module ...
derelocate.c.291: check_module() dwfl_module_getsymtab ...
dwfl_module_getdwarf.c.752: dwfl_module_getsymtab() find_symtab ...
dwfl_module_getdwarf.c.760: dwfl_module_getsymtab() we return -1
derelocate.c.298: check_module() dwfl_module_getsymtab returned error 16, we return true
derelocate.c.393: dwfl_module_address_section() we return NULL (check_module != 0)
link_map.c.228: integrated_memory_callback() we got scn == NULL and return false
link_map.c.389: report_r_debug() we return -1 (segndx:-1 < 0)
unstrip: coredump.big: Callback returned failure
and it is different from unstrip runs or "good" coredump only in two last lines,
those continue like this:
derelocate.c.393: dwfl_module_address_section() we return NULL (check_module != 0)
link_map.c.228: integrated_memory_callback() we got scn == NULL and return false
link_map.c.453: report_r_debug() we return result:6
dwfl_module_getelf.c.58: dwfl_module_getelf() __libdwfl_getelf ...
dwfl_module_getdwarf.c.134: __libdwfl_getelf() find_elf ...
dwfl_module_getdwarf.c.138: __libdwfl_getelf() open_elf ...
dwfl_module_getdwarf.c.66: open_elf() file->name:'(null)'
dwfl_module_getdwarf.c.71: open_elf() returns CBFAIL: fd < 0
dwfl_module_getdwarf.c.140: __libdwfl_getelf() open_elf returned
dwfl_module_getdwarf.c.675: find_dw() __libdwfl_getelf ...
...and here we are getting 1st line of the output:
0x400000+0x209000 23c77451cf6adff77fc1f5ee2a01d75de6511dda@0x40024c - - [exe]
...
Instrumentation is attached.
So, is it a bug?
--
vda