猿问

对 ARM 寄存器 R10 和 R11 的限制

我希望将高度优化的加密ASM实现移植到Go ASM。关于Go Arm Assembly的唯一文档是快速指南,它提到了以下内容:

  • 寄存器 R10 和 R11 由编译器和链接器保留。

  • R10指向g(戈鲁汀)结构。在汇编程序源代码中,此指针必须称为 g;无法识别名称 R10。

  • 手写汇编可以使用R11,但这样做需要确保链接器也没有使用它来实现函数中的任何其他指令。

我希望移植使用的ASM,所以我的问题是:R10R11

  • 我可以使用R10/g吗?

  • 如果我使用R10 / g,只要我在堆栈上调用开始时存储R10值,然后在结束时加载它,会有任何问题吗?(假设用于停止抢占行为)go:nosplit

  • 只要我没有从Go ASM调用任何其他函数,那么我就不必担心链接器对R11的限制,对吗?


摇曳的蔷薇
浏览 279回答 1
1回答

森栏

例如,如果您的代码被抢占或发生恐慌,您不应该触摸。我相信指南对此非常清楚。R10R11链接器用于合成一些指令,例如对全局变量的引用。最好检查是否通过组装然后反汇编代码来使用。在反汇编中,链接器引入的任何引用都应该是可见的。R11R11
随时随地看视频慕课网APP

相关分类

Go
我要回答