我有一个包含具有ref
属性的函数的模块。这会将.text
放在不同的部分。ARM 堆栈帧展开的工作方式是将两个附加部分放置在ELF文件中。这些部分为 ARM unwind.c提供了表格。module.c文件在加载模块时填充这些表。
使用该.ref.text
部分时,这两个部分由 gcc-4.7 创建,以允许展开此代码.ARM.extab.ref.text
。.ARM.exidx.ref.text
不幸的是,module.c只扫描.init
,.devinit
等,并没有添加这些部分。如果我们打开CONFIG_DEBUG_KMEMLEAK,并且__ref
在分配期间有一个框架处于活动状态,则堆栈跟踪代码会在内核日志中提供许多unwind: Index not found消息。
__ref
在模块 中使用是错误的吗?- 是否应该通过ARM 的架构链接器文件将
.ref
extab和exidx放在核心.ARM.extab和.ARM.exidx部分中? - 为什么只有我一个看到这个?我有2.6.36,但问题似乎存在于主线。