胶水-df.h中使用什么CPU_DABORT_HANDLER?

时间:2018-08-10 02:17:53

标签: assembly exception-handling linux-kernel arm

在Linux内核中,该文件是ARM数据中止异常处理代码的一部分,该代码未定义CPU_DABORT_HANDLER,然后检查是否在更下层定义。

https://github.com/torvalds/linux/blob/112cbae26d18e75098d95cc234cfa5059de8d479/arch/arm/include/asm/glue-df.h#L31

为什么有此代码?您将如何使用它?

1 个答案:

答案 0 :(得分:0)

  

在Linux内核中,该文件是ARM数据中止异常处理代码的一部分,该代码未定义CPU_DABORT_HANDLER,然后检查是否在更下层定义。

...

  

为什么会有这个代码?

正在处理两种情况。一种是针对特定CPU的定制内核构建。如果Linux内核可以在多个板(Debian,Ubuntu等)上运行,则为第二个。您需要检查难题的其他方面。

重要的部分在entry-armv.S宏dabt_helper中。

        .macro  dabt_helper

        @
        @ Call the processor-specific abort handler:
        @
        @  r2 - pt_regs
        @  r4 - aborted context pc
        @  r5 - aborted context psr
        @
        @ The abort handler must return the aborted address in r0, and
        @ the fault status register in r1.  r9 must be preserved.
        @
#ifdef MULTI_DABORT
        ldr     ip, .LCprocfns
        mov     lr, pc
        ldr     pc, [ip, #PROCESSOR_DABT_FUNC]
#else
        bl      CPU_DABORT_HANDLER
#endif
        .endm

通用代码将调用dabt_helper。这是针对CPU特定版本的直接函数调用。否则,这是一个函数指针查找(对于CPU来说很难预取),它会稍微慢一些,并且会增加代码。

  

您将如何使用它?

您可以将其与内核“ kconfig”选项一起使用。如果您针对特定的CPU进行编译,则将获得直接函数调用。