Linux kernel 模块能否使用';参考';手臂上的部分?

Linux kernel 模块能否使用';参考';手臂上的部分?,linux-kernel,arm,Linux Kernel,Arm,我有一个模块,其中包含带有ref属性的函数。这会将.text放在不同的部分。工作方式是在ELF文件中放置两个附加部分。这些部分为ARM提供了表格。加载模块时,该文件填充这些表 使用.ref.text部分时,gcc-4.7会创建.ARM.extab.ref.text和.ARM.exidx.ref.text两个部分,以允许展开此代码。不幸的是,module.c只扫描.init、.devinit等,而不添加这些部分。如果我们打开CONFIG\u DEBUG\u KMEMLEAK,并且\u ref帧在分

我有一个模块,其中包含带有
ref
属性的函数。这会将
.text
放在不同的部分。工作方式是在ELF文件中放置两个附加部分。这些部分为ARM提供了表格。加载模块时,该文件填充这些表

使用
.ref.text
部分时,gcc-4.7会创建
.ARM.extab.ref.text
.ARM.exidx.ref.text
两个部分,以允许展开此代码。不幸的是,module.c只扫描
.init
.devinit
等,而不添加这些部分。如果我们打开CONFIG\u DEBUG\u KMEMLEAK,并且
\u ref
帧在分配过程中处于活动状态,则堆栈跟踪代码会在内核日志中提供许多“未找到索引”消息

  • 在模块中使用
    \u ref
    是否错误
  • ARM的Architecture链接器文件是否应该将
    .ref
    extab和exidx放在core.ARM.extab和.ARM.exidx部分
  • 为什么只有我一个人看到这个?我有2.6.36,但问题似乎存在于主线中
  • 和都有附加的链接器文件,ia64符合ARM
    \uuu ref
    要求

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

    和arch/arm/modules.lds组件

    将把
    \u ref
    注释展开信息与正常展开代码放在一起

    这可能会解决在ARM Linux上使用模块时出现的多个unwind:Index not found内核日志消息。较新版本不需要使用
    /DISCARD/
    部分,因为它支持模块
    。退出
    展开信息;但它对于2.6.36非常有用,因为在2.6.36中使用了更新的信息


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

    +1尼斯研究。不过,在将其用于试验用途之前,由相关人员运行它似乎是一个好主意。
    # Glob 'ref' unwind tables.
    KBUILD_LDFLAGS_MODULE += -T $(srctree)/arch/arm/module.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*); }
    }