您现在的位置: 主页 > 嵌入式操作系统 > armlinux > GETREGSET 获得“cpsr”注册
本文所属标签:
为本文创立个标签吧:

GETREGSET 获得“cpsr”注册

来源: 网络用户发布,如有版权联系网管删除 2020-04-16 

GETREGSET 获得“cpsr”注册 熟悉AArch64的人可能会注意到GETREGSET我们已经获得了“cpsr”注册,但硬件架构没有。 GETREGSET返回的内容已经从AArch64上可单独访问的字段合成为类似cpsr的布局。

两者之间更显着的差异是GETREGSET缺少orig_r0(或orig_x0)。这种缺乏与系统调用有关。在ARM 32位上,系统调用编号放在r7中,并且系统调用参数在系统调用(SVC)指令之前放在参数寄存器r0-r3中。从系统调用返回的值位于r0(根据通常的APCS,在特殊情况下为r7)。内核从 syscall 返回后,orig_r0将原始的第一个参数提供给 syscall (已被返回值覆盖)。

I实际上不知道“正常”应用程序应该使用什么用于这个原始的第一个参数。我们使用它来支持 restart_syscall ,其中返回值为ERESTART_RESTARTBLOCK。

不幸的是,缺乏orig_x0对我们来说是个问题,我们还没有在任何情况下解决。如果我们已经记录了系统调用的条目,那么我们就拥有了所需的所有信息。但是,如果我们在 restart_syscall 期间附加了,那么我们就不知道x0的原始值。我们唯一的选择是允许内核重新启动 syscall ,但这次重启对我们来说是低效的,因为我们无法优化系统调用的录制。

回到GETREGS与GETREGSET的主题:GETHBPREGS和NT_ARM_HW_BREAK也有很大不同。对于GETHBPREGS请求,使用 ptrace 调用中的 addr 字段来请求特定的硬件断点寄存器。 NT_ARM_HW_BREAK返回所有硬件断点寄存器。


              查看评论 回复



嵌入式交流网主页 > 嵌入式操作系统 > armlinux > GETREGSET 获得“cpsr”注册
 

"GETREGSET 获得“cpsr”注册"的相关文章

网站地图

围观()