go 运行时,cmd/compile,cmd/internal/obj/ppc64:在ppc64/ppc64le上设置栈,以更接近地匹配PPC64 ABI,

nlejzf6q  于 4个月前  发布在  Go
关注(0)|答案(1)|浏览(44)

Power上的一些工具因为Go创建的堆栈与PPC64 ABI不匹配而出现问题。特别是,预期回溯链应该位于堆栈偏移量0处,链接寄存器值应该位于调用者的堆栈偏移量16处。
一个例子是使用glibc中的backtrace函数,它期望回溯链位于偏移量0处。这就是这里遇到的问题:#46374
其他人报告在使用Go和C混合时遇到性能问题。
这样做还有其他优势——这应该消除在C和Go之间调用时移动字段的某些代码,并简化竞态代码等。
我已经尝试了一些实验,能够生成prolog和epilog来实现这一点,但遇到了其他问题,我正在努力解决它们。
@pmur

e4yzc0pl

e4yzc0pl1#

更改帧布局会使编译器和运行时变得复杂。目前,对于所有LR架构,我们几乎具有相同的帧布局(除了帧指针和固定的帧大小)。如果我们改变这一点,将会有更多的特殊情况。
此外,更改帧布局将破坏现有的汇编代码。或者你只想更改ABIInternal函数的帧布局,但保持ABI0的不变?这可能会起作用,但我认为它会使堆栈展开器变得相当复杂。而且,只要堆栈上有一个旧式的ABI0帧,它可能对工具没有帮助。
我不确定我们是否想要这样做。
工具是否有可能读取例如调试信息而不是使用固定偏移量?

相关问题