addr2line with FreeBSD kernel failing

Pratyush Yadav pratyush at freebsd.org
Mon Aug 6 09:06:04 UTC 2018


On Mon, Aug 6, 2018 at 7:04 AM Farhan Khan <khanzf at gmail.com> wrote:
>
> Hi all,
>
> Is there a way to go from a memory address to a kernel symbol?
>
> I am working with a subsystem that uses a lot of function pointers,
> and I am not certain which particular function is being called. I have
> dtrace(1) printing out the memory address of the function, like this:
>
> printf("Runs vap->iv_newstate: 0x%p", vap->iv_newstate);
>
> The resulting memory address will be 0xffffffff834fa6d0. I was told I
> can use addr2line(1), but it seems to fail, as follows:
>
> # addr2line -e /usr/obj/usr/src/amd64.amd64/sys/GENERIC/kernel.full
> ffffffff834fa6d0
> ??:0
>
> Am I doing something wrong? Also, if I can do this directly in
> dtrace(1), that would be much much better. This is definitely the
> installed kernel, so there is no kernel mismatch. I have also tried
> using kernel.debug and kernel, same result.

I usually do:

addr2line -e /usr/lib/debug/boot/kernel/kernel.debug <address>

Try that, maybe it will work for you.


PS: I'm not sure addr2line would work for runtime pointers. I use it
to translate the instruction pointer addresses to lines.

--
Regards,
Pratyush Yadav


More information about the freebsd-hackers mailing list