[RFC] elfutils: Checks for debuginfo file without .debug extension as well
Mark Wielaard
mjw@redhat.com
Mon Feb 22 13:45:00 GMT 2016
Hi Ravi,
On Sat, 2016-02-20 at 19:10 +0530, Ravi Bangoria wrote:
> Thanks for the patch. Indeed this is optimized one compared to what I've
> proposed.
>
> On Friday 19 February 2016 08:41 PM, Mark Wielaard wrote:
> > Thanks, that looks like what I expected.
> > I also got access to a somewhat newer version of ubuntu ppc64le and that
> > has an additional issue. It has the vmlinux file installed unreadable
> > (except for root). That causes almost the same issue, but slightly
> > differently, now no kernel at all is found... Although in that case it
> > can be worked around be using /usr/lib/debug as base. But the main issue
> > is exactly as you describe.
>
> Can you please provide me system configurations like ubuntu versrion,
> kernel version, stap version, elfutils version etc. I'll check if I'll
> be able to get similar system.
Ubuntu 15.10 wily. 4.2.0-27-generic #32-Ubuntu SMP ppc64le
elfutils-0.163-4ubuntu1 stap from systemtap git.
> > Could you try out if this variant of the patch works for you?
>
> I've tested your patch and it's working fine with Ubuntu 14.04 with
> kernel 3.13,
> stap 2.3 and elfutils 0.165.
Great, thanks for testing.
> But I've a little doubt here. Here is the code snip of try_kernel_name
> from libdwfl/linux-kernel-modules.c
>
> static int
> try_kernel_name (Dwfl *dwfl, char **fname, bool try_debug)
> {
> LINE A:
> int fd = ((((dwfl->callbacks->debuginfo_path
> ? *dwfl->callbacks->debuginfo_path : NULL)
> ?: DEFAULT_DEBUGINFO_PATH)[0] == ':') ? -1
> : TEMP_FAILURE_RETRY (open64 (*fname, O_RDONLY)));
>
> if (fd < 0)
> {
> LINE B:
> /* look for "vmlinux" files. */
> fd = INTUSE(dwfl_standard_find_debuginfo) (&fakemod, NULL,
> NULL, 0,
> *fname, basename
> (*fname), 0,
> &fakemod.debug.name);
> if (fd < 0 && try_debug)
> LINE C:
> /* look for "vmlinux.debug" files. */
> fd = INTUSE(dwfl_standard_find_debuginfo) (&fakemod, NULL,
> NULL, 0,
> *fname, NULL, 0,
> &fakemod.debug.name);
>
> try_kernel_name is doing almost same thing what I have proposed. Now let's
> say we want to go ahead with your patch, than call to dwfl_standard_find_debuginfo
> in LINE C will look for both vmlinux and vmlinux.debug right? But it has
> already checked for vmlinux in LINE B. So, in this case we have to modify
> try_kernel_name as well.
Interesting find. And I think you are right.
In our case on ubuntu ppc64le, LINE A would find the vmlinux image
already and we would never reach LINE B or C. The separate debuginfo
would then be found, through dwfl_standard_find_debuginfo, when we want
to get the DWARF for the kernel.
But on other arches where the main image isn't called vmlinux we would
indeed hit them. When try_debug == true then we only need to do C now,
otherwise we only need to do B.
Updated patch attached. This time with updated commit message and
ChangeLog entry. Does this look correct to you?
Thanks,
Mark
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-libdwfl-Checks-for-kernel-debuginfo-file-without-.de.patch
Type: text/x-patch
Size: 5447 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/systemtap/attachments/20160222/b474c8e1/attachment.bin>
More information about the Systemtap
mailing list