如何通过 Objdump 文件发现寄存器溢出?

How Can I Aware Register Spilling via Objdump File?

如何通过查看 objdump 文件来了解寄存器溢出? 我的想法是,它可以通过跟踪堆栈指针来完成:将 sp 移动到函数序言和结尾之外,表示寄存器溢出。

我想知道是哪几行代码在做寄存器溢出。另外,恢复指向全局变量的寄存器在哪里,还有堆栈?

寄存器溢出不需要移动堆栈指针,局部变量可能会溢出到堆栈并在仍在当前帧中时从那里不断地直接使用,编译器将只使用堆栈帧及其偏移量而不是寄存器。

你最好的选择就是寻找不断被读取and/or写入的内存地址。由于编译器的缺陷,或者无法证明没有其他 thread/code 单元正在通过 addr 访问某个局部变量(例如,如果变量地址被复制到范围之外的某个地方),这甚至可能发生在周围有可用寄存器的情况下。在这种情况下,有必要在内存中维护该变量。