- movl 68(%esp), %ebx # 取出esp
- movl %ebx, 56(%eax) # 存入__current->ustack_top
+ movl 124(%esp), %ebx # 取出esp
+ movl %ebx, 60(%eax) # 存入__current->ustack_top
#ifdef __ASM_INTR_DIAGNOSIS
movl %eax, (debug_resv + 8)
#ifdef __ASM_INTR_DIAGNOSIS
movl %eax, (debug_resv + 8)
movl %eax, debug_resv
#endif
# 处理TSS.ESP的一些边界条件。如果是正常iret(即从内核模式*优雅地*退出)
# 那么TSS.ESP0应该为iret进行弹栈后,%esp的值。
# 所以这里的边界条件是:如返回用户模式,iret会额外弹出8个字节(ss,esp)
movl %eax, debug_resv
#endif
# 处理TSS.ESP的一些边界条件。如果是正常iret(即从内核模式*优雅地*退出)
# 那么TSS.ESP0应该为iret进行弹栈后,%esp的值。
# 所以这里的边界条件是:如返回用户模式,iret会额外弹出8个字节(ss,esp)
- movl 60(%eax), %ecx # __current->pagetable
- movl 60(%ebx), %eax # next->pagetable
+ movl 64(%eax), %ecx # __current->pagetable
+ movl 64(%ebx), %eax # next->pagetable
# invoke the sigreturn syscall to exit the signal wrapper
movl $__SYSCALL_sigreturn, %eax
# invoke the sigreturn syscall to exit the signal wrapper
movl $__SYSCALL_sigreturn, %eax