You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Absence of tail call unwinding makes kernel crash analysis very difficult, in most of cases just impossible. Unfortunately tail calls are massively used in kernel. F.e. see attached examples: kernel module test.c and user space testu.c. examples.zip
gdb understand it just fine:
(gdb) bt
#0 __printf (format=format@entry=0x402010 "%d\n") at printf.c:28
#1 0x00000000004011b3 in a (b=b@entry=0x7fffffffe3f0) at testu.c:10
#2 0x00000000004011c7 in b (x=x@entry=0x7fffffffe3f0) at testu.c:16
#3 0x00000000004011d7 in c (x=x@entry=0x7fffffffe3f0) at testu.c:21
Thanks (especially for the example). To support this, drgn needs to look for DW_TAG_call_site entries when assembling the frames for a stack trace (note to self: section 3.4.1 "Call Site Entries" in the DWARF 5 spec). I added it to the roadmap.
Absence of tail call unwinding makes kernel crash analysis very difficult, in most of cases just impossible. Unfortunately tail calls are massively used in kernel. F.e. see attached examples: kernel module test.c and user space testu.c.
examples.zip
gdb understand it just fine:
And drgn:
See? Unless we knew about path from test_work -> a, we would never find it.
The text was updated successfully, but these errors were encountered: