我有一个包含带有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,但这个问题似乎存在于主线中。