linux – ARM汇编“retne”指令

前端之家收集整理的这篇文章主要介绍了linux – ARM汇编“retne”指令前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在了解 Linux内核启动所需的内容.我正在浏览Linux内核源代码树,特别是ARM体系结构,直到我在 arch/arm/kernel/hyp-stub.S中偶然发现了这个汇编指令retne lr

从概念上讲,很容易理解,如果Z标志为0,则指令返回存储在链接寄存器中的地址.我要查找的是实际记录此ARM汇编指令的位置.

我在ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition A8.8部分搜索,找不到指令的描述.

获取代码并查看它是否为ARM specific GNU AS extension并未特别显示任何内容.

谷歌搜索查询“手臂组装ret指令”,“手臂返回指令”和类似的任何东西也没有出现任何有用的东西.当然,我必须在错误的地方寻找,否则我一定会错过一些东西.

任何澄清将不胜感激.

解决方法

架构汇编语言是一回事,现实世界代码是另一回事.一旦汇编程序伪操作和宏发挥作用,熟悉工具链和相关代码库会有很大帮助. Linux特别令人讨厌,因为大部分汇编源包含汇编程序宏和CPP宏的多个层.如果您知道要查找的内容,并按照标题跟踪到 arch/arm/include/asm/assembler.h,您最终会发现这个复杂的野兽:
.irp    c,eq,ne,cs,cc,mi,pl,vs,vc,hi,ls,ge,lt,gt,le,hs,lo
.macro  ret\c,reg
#if __LINUX_ARM_ARCH__ < 6
        mov\c   pc,\reg
#else
        .ifeqs  "\reg","lr"
        bx\c    \reg
        .else
        mov\c   pc,\reg
        .endif
#endif
        .endm
        .endr

为了microarchitectures with a return stack的利益,这是为了emit the architecturally-preferred return instruction,同时允许相同的代码仍然为旧架构编译.

猜你在找的Linux相关文章