如何在内核调用跟踪中显示指令地址?

如何在内核调用跟踪中显示指令地址?

[<XXXXXXXX>]当内核模块导致 oops 时,如何在调用跟踪中显示地址?我一直在寻找一些内核配置选项,但运气不佳。

我的 dmesg 输出

...
[26246.257523] Call Trace:
[26246.257530]  do_one_initcall+0x59/0x240
[26246.257540]  do_init_module+0x5c/0x230
[26246.257545]  load_module+0x2725/0x29e0
[26246.257556]  ? __do_sys_finit_module+0xbb/0x120
[26246.257560]  __do_sys_finit_module+0xbb/0x120
[26246.257567]  do_syscall_64+0x4e/0x150
[26246.257573]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
[26246.257577] RIP: 0033:0x7f3680ff5f8d
...

其他一些带有地址的 dmesg 输出

...
Call Trace:
 [<c010102d>] ? _stext+0x2d/0x170
 [<c01708e4>] ? __vunmap+0xa4/0xf0
 [<c0170981>] ? vfree+0x21/0x30
 [<c014b698>] ? load_module+0x19b8/0x1a40
 [<c035e965>] ? __mutex_unlock_slowpath+0xd5/0x140
 [<c0140da6>] ? trace_hardirqs_on_caller+0x106/0x150
 [<c014b7aa>] ? sys_init_module+0x8a/0x1b0
 [<c0140da6>] ? trace_hardirqs_on_caller+0x106/0x150
 [<c0240a08>] ? trace_hardirqs_on_thunk+0xc/0x10
 [<c0103407>] ? sysenter_do_call+0x12/0x43
...

编辑:适用于内核版本 4.19。根据这个页面https://www.kernel.org/doc/html/v4.19/admin-guide/bug-hunting.html,我认为它应该在调试内核中可见,但是 DEBUG_KERNEL、DEBUG_INFO、KALLSYMS 和 KALLSYMS_ALL 对我来说都已打开。

edit2:如果我查看 dumpstack.c 中的代码,我开始认为它是在较旧的内核中打印的,而在较新的内核中不再打印

相关内容