- # 保存用户栈顶指针。这是因为我们允许系统调用内进行上下文切换,而这样一来,我们就失去了用户栈的信息,
- # 这样一来,就无法设置信号上下文。这主要是为了实现了pause()而做的准备
- movl (__current), %eax
- movl 68(%esp), %ebx # 取出esp
- movl %ebx, 84(%eax) # 存入__current->ustack_top
+ movl __current, %ebx
+
+ # Save x87 context to user stack, rather than kernel's memory.
+ # XXX what will happen if we triggered a page fault during fxsave?
+ # FIXME can we remove this overhead?
+ movl iuesp(%esp), %eax
+ andl $stack_alignment, %eax
+ subl $512, %eax
+ fxsave (%eax)
+
+ # 保存用户栈顶指针。因为我们允许同级中断的产生,所以需要该手段跟踪用户栈的地址。
+ movl %eax, proc_ustack_top(%ebx) # 存入__current->ustack_top