Changes in kernel/arch/amd64/src/context.S [0aee9b4:4bf0926e] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/amd64/src/context.S
r0aee9b4 r4bf0926e 27 27 # 28 28 29 #include <abi/asmtool.h> 30 #include <arch/context_struct.h> 31 #include <arch/vreg.h> 32 29 33 .text 30 31 .global context_save_arch32 .global context_restore_arch33 34 #include <arch/context_struct.h>35 34 36 35 ## Save current CPU context … … 39 38 # pointed by the 1st argument. Returns 1 in EAX. 40 39 # 41 context_save_arch: 42 movq (%rsp), %rdx # the caller's return % eip40 FUNCTION_BEGIN(context_save_arch) 41 movq (%rsp), %rdx # the caller's return %rip 43 42 44 # 1st argument passed in %edi45 43 movq %rdx, CONTEXT_OFFSET_PC(%rdi) 46 44 movq %rsp, CONTEXT_OFFSET_SP(%rdi) … … 53 51 movq %r15, CONTEXT_OFFSET_R15(%rdi) 54 52 53 #ifdef MEMORY_MODEL_large 54 movabsq $vreg_ptr, %rsi 55 movq (%rsi), %rsi 56 #else 57 movq vreg_ptr, %rsi 58 #endif 59 movq %fs:VREG_TP(%rsi), %rsi 60 movq %rsi, CONTEXT_OFFSET_TP(%rdi) 61 55 62 xorl %eax, %eax # context_save returns 1 56 63 incl %eax 57 64 ret 65 FUNCTION_END(context_save_arch) 58 66 59 67 … … 63 71 # pointed by the 1st argument. Returns 0 in EAX. 64 72 # 65 context_restore_arch: 73 FUNCTION_BEGIN(context_restore_arch) 66 74 movq CONTEXT_OFFSET_R15(%rdi), %r15 67 75 movq CONTEXT_OFFSET_R14(%rdi), %r14 … … 71 79 movq CONTEXT_OFFSET_RBX(%rdi), %rbx 72 80 73 movq CONTEXT_OFFSET_SP(%rdi), %rsp # ctx->sp -> %rsp81 movq CONTEXT_OFFSET_SP(%rdi), %rsp 74 82 75 movq CONTEXT_OFFSET_PC(%rdi), %rdx 83 movq CONTEXT_OFFSET_PC(%rdi), %rdx 84 movq %rdx, (%rsp) 76 85 77 movq %rdx, (%rsp) 86 movq CONTEXT_OFFSET_TP(%rdi), %rcx 87 #ifdef MEMORY_MODEL_large 88 movabsq $vreg_ptr, %rsi 89 movq (%rsi), %rsi 90 #else 91 movq vreg_ptr, %rsi 92 #endif 93 movq %rcx, %fs:VREG_TP(%rsi) 78 94 79 95 xorl %eax, %eax # context_restore returns 0 80 96 ret 97 FUNCTION_END(context_restore_arch) 81 98
Note:
See TracChangeset
for help on using the changeset viewer.