SparcV8 栈


永远不要忘了配置异常向量表,否则都不知道怎么死的。
1/ 当触发栈上溢出异常后,需要将CWP-1的register context保存到对应的栈帧中。由于约定%i6当作%fp使用,%o6当作%sp寄存器使用,在保存时根据%o6找到栈地址,然后将寄存器值写入到memory中。最后修改WIM用于指示各个windows可用。从而可以使用CWP-1的windows作为新函数的register context。
2/ 而当触发栈下溢出异常后,由于CWP的%o6是CWP+1的%i6,所以可以使用当前的%sp从memory恢复register context。
3/ Register context包括l0-l7和i0-i7。
本文详细解析了SparcV8架构中栈溢出异常的处理机制。当发生栈上溢出时,如何保存CWP-1的registercontext至内存,并更新WIM以备后续调用。栈下溢出时,则从内存恢复registercontext至%sp。Registercontext包含l0-l7和i0-i7寄存器。
3725

被折叠的 条评论
为什么被折叠?



