有时dump_stack()会在函数名称中添加后缀“.cold”和“.part”,例如,这里是[1]中的部分行,
[ 638.115912][ C0] Call Trace:
[ 638.115986][ C0] ? kasan_set_free_info+0x1b/0x30
[ 638.115990][ C0] ? __kasan_slab_free+0xd8/0x120
[ 638.115995][ C0] ? kmem_cache_free.part.0+0x67/0x1f0
[ 638.115999][ C0] ? __put_cred+0x1de/0x250
[ 638.116004][ C0] ? revert_creds+0x1a8/0x1f0
[ 638.116008][ C0] ? do_faccessat+0x2ca/0x820
[ 638.116013][ C0] ? do_syscall_64+0x2d/0x70
[ 638.116017][ C0] ? find_held_lock+0x2d/0x110
[ 638.116022][ C0] ? lock_acquire+0x1f1/0xad0
[ 638.116027][ C0] ? debug_check_no_obj_freed+0xc7/0x41c
[ 638.116031][ C0] ? find_held_lock+0x2d/0x110
[ 638.116036][ C0] ? debug_check_no_obj_freed+0x20c/0x41c
[ 638.116041][ C0] ? lock_downgrade+0x830/0x830
[ 638.116045][ C0] ? lockdep_hardirqs_off+0x89/0xc0
[ 638.116050][ C0] ? trace_hardirqs_off+0x27/0x210
[ 638.116055][ C0] ? _raw_spin_unlock_irqrestore+0x9b/0xe0
[ 638.116060][ C0] ? debug_check_no_obj_freed+0x20c/0x41c
[ 638.116064][ C0] kasan_set_track+0x1c/0x30
[ 638.116069][ C0] kasan_set_free_info+0x1b/0x30
[ 638.116073][ C0] __kasan_slab_free+0xd8/0x120
[ 638.116078][ C0] ? __put_cred+0x1de/0x250
[ 638.116082][ C0] kmem_cache_free.part.0+0x67/0x1f0
[ 638.116220][ T1172] Kernel panic - not syncing: hung_task: blocked tasks
[ 638.570843][ T1172] Call Trace:
[ 638.574119][ T1172] dump_stack+0x18f/0x20d
[ 638.578499][ T1172] panic+0x2e3/0x75c
[ 638.582375][ T1172] ? __warn_printk+0xf3/0xf3
[ 638.586953][ T1172] ? lapic_can_unplug_cpu.cold+0x38/0x38
[ 638.592562][ T1172] ? preempt_schedule_thunk+0x16/0x18
[ 638.597922][ T1172] ? watchdog.cold+0x22d/0x24b
[ 638.602659][ T1172] ? watchdog+0xc59/0xf30
[ 638.606965][ T1172] watchdog.cold+0x23e/0x24b
[ 638.611530][ T1172] ? trace_sched_process_hang+0x2e0/0x2e0
[ 638.617227][ T1172] kthread+0x3b5/0x4a0
[ 638.621272][ T1172] ? __kthread_bind_mask+0xc0/0xc0
[ 638.626358][ T1172] ? __kthread_bind_mask+0xc0/0xc0
[ 638.631445][ T1172] ret_from_fork+0x1f/0x30
[ 638.637042][ T1172] Kernel Offset: disabled
[ 638.641361][ T1172] Rebooting in 86400 seconds..
Run Code Online (Sandbox Code Playgroud)
这些后缀是什么意思?
[1] https://syzkaller.appspot.com/text?tag=CrashLog&x=12fa85ee900000
.cold是一个函数属性。GCC 文档在声明函数属性中描述了函数属性:
在 GNU C 和 C++ 中,您可以使用函数属性来指定某些函数属性,这些属性可以帮助编译器优化调用或更仔细地检查代码的正确性。
公共函数属性,包括,在6.33.1 公共函数属性.cold中描述:
函数的冷属性用于通知编译器该函数不太可能被执行。该函数针对大小而不是速度进行了优化,并且在许多目标上,它被放置在文本部分的特殊小节中,因此所有冷函数看起来都靠近在一起,从而提高了程序非冷部分的代码局部性。分支预测机制将导致代码中冷函数调用的路径标记为不可能的路径。因此,将用于处理不太可能发生的情况(例如 perror)的函数标记为冷函数非常有用,以改进在极少数情况下调用标记函数的热函数的优化。
用户 lgeorget 在Unix & Linux StackExchange中对后缀.part.<n>进行了解释:
有时,GCC 评估大函数的控制流的某些部分可以很容易地内联,但内联整个大函数是不行的。因此,它拆分函数,将大部分放在自己的函数中,该函数接收原始函数名称加上 .part + . 作为名称,并将其余部分内联到其他函数中。
| 归档时间: |
|
| 查看次数: |
1980 次 |
| 最近记录: |