【发布时间】:2014-02-05 01:34:22
【问题描述】:
我正在阅读有关 Linux here 上 MIPS 上的 PIC 实现的信息。它说:
存储在 $gp 寄存器(又名 $28)中的全局指针是一个被调用者保存的寄存器。
Wikipedia article about MIPS 也是这么说的。
然而,根据他们的说法,当在函数序言中使用.cpload 指令时,它会破坏 $gp 的先前值而不先保存它。当使用.cprestore 时,它将当前 $gp 保存到堆栈帧,而不是函数入口处的$gp 值。 .cprestore 对 jal/jalr 的影响也是如此:一旦被调用者返回,它就会恢复 $gp - 假设被调用者可能已经破坏了它。
最后,函数尾声中没有关于 $gp 的内容。
总而言之,对我来说,这听起来不像是被调用者保存的寄存器。听起来像一个呼叫者保存的寄存器。我在这里误会了什么?
【问题讨论】: