gpt4 book ai didi

linux-kernel - 模块可以在 ARM 上使用 'ref' 部分吗?

转载 作者:行者123 更新时间:2023-12-02 03:45:39 24 4
gpt4 key购买 nike

我有一个模块,其中包含具有 ref 属性的函数。这会将 .text 放在不同的部分。的方式ARM stack frame unwinding有效的是将两个额外的部分放在 ELF 文件中。这些部分为 ARM unwind.c 提供表格. module.c文件在加载模块时填充这些表。

使用.ref.text部分时,.ARM.extab.ref.text.ARM.exidx.ref.text<这两个部分 由 gcc-4.7 创建以允许展开此代码。不幸的是,module.c 只扫描 .init.devinit 等,并没有添加这些部分。如果我们打开 CONFIG_DEBUG_KMEMLEAK,并且 __ref 帧在分配期间处于事件状态,堆栈跟踪代码会在中给出许多unwind: Index not found 消息内核日志。

  1. 在模块中使用__ref 是错误的吗?
  2. architechure ARM 的链接器文件是否应该将 .ref extabexidx 放在核心 .ARM.extab.ARM.exidx 部分?
  3. 为什么只有我看到这个?我有2.6.36,但问题似乎存在于主线。

最佳答案

68kia64有额外的链接器文件,ia64 符合 ARM __ref 要求。

将以下内容添加到 arch/arm/Makefile

# Glob 'ref' unwind tables.
KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/arm/module.lds

arch/arm/modules.lds 作为,

SECTIONS {
/DISCARD/ : {
*(.ARM.exidx.exit.text)
*(.ARM.extab.exit.text)
*(.ARM.exidx.devexit.text)
*(.ARM.extab.devexit.text)
}
/* Group unwind sections together: */
.ARM.extab : { *(.ARM.extab*) }
.ARM.exidx : { *(.ARM.exidx*) }
.text : { *(.text); *(.ref.text); *(.rodata*); }
}

会将 __ref 注释 unwind 信息与普通 unwind 代码放在一起。

这可能会解决在 ARM Linux 上使用模块 时出现的多个unwind: Index not found 内核日志消息。较新的 module.c 不需要 /DISCARD/ 部分因为它支持模块 .exit 展开信息;但它对 2.6.36 很有用,因为此信息的使用较新。

这可能会导致其他问题,并且还没有通过 ARM Linux 邮件列表来审查问题。

关于linux-kernel - 模块可以在 ARM 上使用 'ref' 部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17374314/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com