Rev 103 | Rev 312 | 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 |