我正在尝试在A53上执行级别切换。我从EL3-> El2开始,然后调用SMC指令返回EL3。一旦执行SMC指令,处理器就会进入EL3模式并生成异常。
我写了一个异常处理程序来从这个问题中返回。我的问题是我应该在异常处理程序的末尾使用ERET吗?在那种情况下,它将返回EL2还是保留在EL3中(因为在EL2中生成了异常)?我希望处理器保留在EL3中。我应该手动修改ELR,以便处理器保留在EL3中。我想知道它通常如何完成。
我正在尝试在A53上执行级别切换。我从EL3-> El2开始,然后调用SMC指令返回EL3。一旦执行SMC指令,处理器就会进入EL3模式并生成异常。
我写了一个异常处理程序来从这个问题中返回。我的问题是我应该在异常处理程序的末尾使用ERET吗?在那种情况下,它将返回EL2还是保留在EL3中(因为在EL2中生成了异常)?我希望处理器保留在EL3中。我应该手动修改ELR,以便处理器保留在EL3中。我想知道它通常如何完成。
在ARMv8-A AArch64中,ERET是唯一的异常返回指令。您通常希望在处理程序的末尾使用ERET。
在EL2中执行的SMC指令触发了异常,导致进入EL3。自动生成的ELR_EL3和SPSR_EL3值将指向SMC之后紧跟的指令EL2。因此,如果您不修改ELR / SPSR并执行ERET,则执行将在那里进行。
如果要返回某处,则需要在执行ERET之前修改ELR和/或SPSR。
尽管如果您希望停留在EL3中,则不必完全在ERET中执行。您可以分支到接下来要运行的任何代码。