棋子 · 2020年01月08日

如何从SMC指令生成的异常中返回

我正在尝试在A53上执行级别切换。我从EL3-> El2开始,然后调用SMC指令返回EL3。一旦执行SMC指令,处理器就会进入EL3模式并生成异常。

我写了一个异常处理程序来从这个问题中返回。我的问题是我应该在异常处理程序的末尾使用ERET吗?在那种情况下,它将返回EL2还是保留在EL3中(因为在EL2中生成了异常)?我希望处理器保留在EL3中。我应该手动修改ELR,以便处理器保留在EL3中。我想知道它通常如何完成。

1 个回答 得票排序 · 时间排序
极术小姐姐 · 2020年01月08日

在ARMv8-A AArch64中,ERET是唯一的异常返回指令。您通常希望在处理程序的末尾使用ERET。

在EL2中执行的SMC指令触发了异常,导致进入EL3。自动生成的ELR_EL3和SPSR_EL3值将指向SMC之后紧跟的指令EL2。因此,如果您不修改ELR / SPSR并执行ERET,则执行将在那里进行。

如果要返回某处,则需要在执行ERET之前修改ELR和/或SPSR。

尽管如果您希望停留在EL3中,则不必完全在ERET中执行。您可以分支到接下来要运行的任何代码。

你的回答
关注数
1
收藏数
0
浏览数
2605
极术小姐姐
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息