Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/amd64/src/context.S

    r4bf0926e r0aee9b4  
    2727#
    2828
    29 #include <abi/asmtool.h>
     29.text
     30
     31.global context_save_arch
     32.global context_restore_arch
     33
    3034#include <arch/context_struct.h>
    31 #include <arch/vreg.h>
    32 
    33 .text
    3435
    3536## Save current CPU context
     
    3839# pointed by the 1st argument. Returns 1 in EAX.
    3940#
    40 FUNCTION_BEGIN(context_save_arch)
    41         movq (%rsp), %rdx     # the caller's return %rip
     41context_save_arch:
     42        movq (%rsp), %rdx     # the caller's return %eip
    4243       
     44        # 1st argument passed in %edi
    4345        movq %rdx, CONTEXT_OFFSET_PC(%rdi)
    4446        movq %rsp, CONTEXT_OFFSET_SP(%rdi)
     
    5153        movq %r15, CONTEXT_OFFSET_R15(%rdi)
    5254       
    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        
    6255        xorl %eax, %eax       # context_save returns 1
    6356        incl %eax
    6457        ret
    65 FUNCTION_END(context_save_arch)
    6658
    6759
     
    7163# pointed by the 1st argument. Returns 0 in EAX.
    7264#
    73 FUNCTION_BEGIN(context_restore_arch)
     65context_restore_arch:
    7466        movq CONTEXT_OFFSET_R15(%rdi), %r15
    7567        movq CONTEXT_OFFSET_R14(%rdi), %r14
     
    7971        movq CONTEXT_OFFSET_RBX(%rdi), %rbx
    8072       
    81         movq CONTEXT_OFFSET_SP(%rdi), %rsp
     73        movq CONTEXT_OFFSET_SP(%rdi), %rsp   # ctx->sp -> %rsp
    8274       
    83         movq CONTEXT_OFFSET_PC(%rdi), %rdx
     75        movq CONTEXT_OFFSET_PC(%rdi), %rdx
     76       
    8477        movq %rdx, (%rsp)
    85        
    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)
    9478       
    9579        xorl %eax, %eax       # context_restore returns 0
    9680        ret
    97 FUNCTION_END(context_restore_arch)
    9881
Note: See TracChangeset for help on using the changeset viewer.