Subversion Repositories HelenOS-historic

Rev

Rev 103 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 103 Rev 125
Line 40... Line 40...
40
context_save:
40
context_save:
41
	push %ebx
41
	push %ebx
42
 
42
 
43
	movl 4(%esp),%eax	# the caller's return %eip
43
	movl 4(%esp),%eax	# the caller's return %eip
44
	movl 8(%esp),%ebx	# address of the kernel_context variable to save context to
44
	movl 8(%esp),%ebx	# address of the kernel_context variable to save context to
45
        movl %eax,4(%ebx)	# %eip -> ctx->pc
45
	movl %eax,4(%ebx)	# %eip -> ctx->pc
46
	movl %esp,(%ebx)	# %esp -> ctx->sp
46
	movl %esp,(%ebx)	# %esp -> ctx->sp
47
 
47
 
48
	movl %ebx,%eax
48
	movl %ebx,%eax
49
	pop %ebx
49
	pop %ebx
50
 
50
 
51
	movl %ebx,8(%eax)
51
	movl %ebx,8(%eax)
52
	movl %ecx,12(%eax)
52
	movl %ecx,12(%eax)
53
	movl %edx,16(%eax)
53
	movl %edx,16(%eax)
54
	movl %esi,20(%eax)
54
	movl %esi,20(%eax)
55
	movl %edi,24(%eax)
55
	movl %edi,24(%eax)
56
	movl %ebp,28(%eax)    
56
	movl %ebp,28(%eax)
57
    
57
 
58
	xorl %eax,%eax		# context_save returns 1
58
	xorl %eax,%eax		# context_save returns 1
59
	incl %eax
59
	incl %eax
60
	ret
60
	ret
61
 
61
 
62
 
62
 
63
## Restore current CPU context
63
## Restore current CPU context
64
#
64
#
65
# Restore CPU context from the kernel_context variable
65
# Restore CPU context from the kernel_context variable
66
# pointed by the 1st argument. Returns 0 in EAX.
66
# pointed by the 1st argument. Returns 0 in EAX.
67
#    
67
#
68
context_restore:
68
context_restore:
69
	movl 4(%esp),%eax	# address of the kernel_context variable to restore context from
69
	movl 4(%esp),%eax	# address of the kernel_context variable to restore context from
70
	movl (%eax),%esp	# ctx->sp -> %esp
70
	movl (%eax),%esp	# ctx->sp -> %esp
71
	addl $4,%esp		# this is for the pop we don't do
71
	addl $4,%esp		# this is for the pop we don't do
72
 
72
 
Line 77... Line 77...
77
	movl 24(%eax),%edi
77
	movl 24(%eax),%edi
78
	movl 28(%eax),%ebp
78
	movl 28(%eax),%ebp
79
 
79
 
80
	movl 4(%eax),%eax
80
	movl 4(%eax),%eax
81
	movl %eax,(%esp)	# ctx->pc -> saver's return %eip
81
	movl %eax,(%esp)	# ctx->pc -> saver's return %eip
82
        xorl %eax,%eax		# context_restore returns 0
82
	xorl %eax,%eax		# context_restore returns 0
83
	ret
83
	ret