小编lrn*_*rnz的帖子

SPARC 窗口溢出

假设我有 8 个这样的窗口:http : //www.sics.se/~psm/sparcwin.gif

在那种情况下我是对的,WIM 指向 w7,而我在窗口 w0 中。

假设在这个窗口中,我将调用一些接收一个参数的函数。所以我将参数值设置为 %o1(让函数在 %i0 中接收它)。

好的,然后我拨打电话,该功能执行“保存”。该窗口位中的 WIM 为 1,因此触发 window_overflow。我对此的理解是,处理程序保存在窗口 w7 (%sp) 的堆栈中,寄存器 %i1,..,%i7,%l0,..,%l7,然后“返回时”在 window_underflow 中恢复该窗口。

我的问题是...当窗口被保存时,w7 的原件 %i0,...,%i7 由于现在丢失是 w0 中的程序调用的函数的参数(因为我设置了 %o0,. . 在调用之前的 w0 中,然后进行“保存”错误)。所以这个“系统”没有意义,所以我想我错过了一些东西。

另一个类似的问题。假设我在 w0 中的程序没有调用函数,而是使用 %o0,%o1,.. 作为“本地”变量,我会遇到同样的问题,甚至不知道我杀死了 w7 的 %i0,%i1,..。

回答:我发现无效的窗口已经保存在堆栈中,所以当“保存”完成时,window_overflow 处理程序会将 w6 保存在堆栈中(并将 WIM 设置为 w6)。这显然解释了我的问题。我想我在看到这个陷阱的处理程序示例时感到困惑,并且不记得在 V8 中它总是在不检查 WIM 的情况下递减 CWP。

window overflow sparc

5
推荐指数
0
解决办法
428
查看次数

标签 统计

overflow ×1

sparc ×1

window ×1