在完成Lab1的过程中有一些疑惑,想请教一下是否是我的理解出了问题:
test_stack_lr()
<stack_test+0x50>
stack_test(0)
<stack_test+0x30>
stack_backtrace()
第一问,fp就是x29,寄存器上电时默认就是0,保持fp为零,是刻意这么做的。这样使得递归backtrace时可以终止。
第二问,没看明白,不太明白你的意思。但是一般来说要使用配套的gcc版本,因为不同的版本O1优化方式不一样,对于栈的处理,参数的摆放可能有细微的不同。
第三问,你说的没错,当前的栈帧里可能并没有保存所有的参数,特别是像这种递归优化的,有些参数放在x19这样的寄存器里,只有联系上下栈帧才能收集完全。