This is the mail archive of the elfutils-devel@sourceware.org mailing list for the elfutils project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi Matthias, elfutils hackers, The ubuntu package builders sometimes see failures in backtrace-native and/or backtrace-native-biarch tests. The failures comes from an assert in tests/backtrace.c (see_exec_module): struct see_exec_module { Dwfl_Module *mod; char selfpath[PATH_MAX + 1]; }; static int see_exec_module (Dwfl_Module *mod, void **userdata __attribute__ ((unused)), const char *name __attribute__ ((unused)), Dwarf_Addr start __attribute__ ((unused)), void *arg) { struct see_exec_module *data = arg; if (strcmp (name, data->selfpath) != 0) return DWARF_CB_OK; assert (data->mod == NULL); data->mod = mod; return DWARF_CB_OK; } The assert makes sure that we only see one one module with the same "selfpath". The selfpath is setup as follows: char *selfpathname; int i = asprintf (&selfpathname, "/proc/%ld/exe", (long) pid); assert (i > 0); size_t ssize = (selfpathname, data.selfpath, sizeof (data.selfpath)); free (selfpathname); assert (ssize > 0 && ssize < (ssize_t) sizeof (data.selfpath)); data.selfpath[ssize] = '\0'; data.mod = NULL; ptrdiff_t ptrdiff = dwfl_getmodules (dwfl, see_exec_module, &data, 0); assert (ptrdiff == 0); assert (data.mod != NULL); The dwfl is setup with dwfl_linux_proc_report (dwfl, pid). So it could be a bug in our /proc/PID/maps reader. But it could also be that for some reason the exec file is actually mapped twice and two separate Dwfl_Modules are created for it. I have been unable to recreate the failure and so don't really understand what is going wrong. Has anybody else seen a failure with backtrace-native and/or backtrace-native-biarch in see_exec_module? This is probably the wrong place to do this sanity check and we should have a separate testcase for it, so it is clearer why/what is going wrong/tested. It probably would also be a good idea to add a dwfl_mainmodule () function that gives you the main exec or kernel module since this is something people seem to often want. In this case we really just want the first Dwfl_Module with the given path anyway and we could just remove the assert and skip further probing once we find the requested main module. But before we do it would be good to understand why the failure is happening. Matthias, would you be able to replicate the issue somehow with the attached patch added to give us a bit more information? Thanks, Mark
Attachment:
see_exec_module.patch
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |