加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – ARM汇编“retne”指令

发布时间:2020-12-14 02:21:15 所属栏目:Linux 来源:网络整理
导读:我目前正在了解 Linux内核启动所需的内容.我正在浏览Linux内核源代码树,特别是ARM体系结构,直到我在 arch/arm/kernel/hyp-stub.S中偶然发现了这个汇编指令retne lr 从概念上讲,很容易理解,如果Z标志为0,则指令返回存储在链接寄存器中的地址.我要查找的是实际
我目前正在了解 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  retc,reg
#if __LINUX_ARM_ARCH__ < 6
        movc   pc,reg
#else
        .ifeqs  "reg","lr"
        bxc    reg
        .else
        movc   pc,reg
        .endif
#endif
        .endm
        .endr

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读