Ignore:
File:
1 edited

Legend:

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

    r0aee9b4 r4bf0926e  
    2727#
    2828
     29#include <abi/asmtool.h>
     30#include <arch/context_struct.h>
     31#include <arch/vreg.h>
     32
    2933.text
    30 
    31 .global context_save_arch
    32 .global context_restore_arch
    33 
    34 #include <arch/context_struct.h>
    3534
    3635## Save current CPU context
     
    3938# pointed by the 1st argument. Returns 1 in EAX.
    4039#
    41 context_save_arch:
    42         movq (%rsp), %rdx     # the caller's return %eip
     40FUNCTION_BEGIN(context_save_arch)
     41        movq (%rsp), %rdx     # the caller's return %rip
    4342       
    44         # 1st argument passed in %edi
    4543        movq %rdx, CONTEXT_OFFSET_PC(%rdi)
    4644        movq %rsp, CONTEXT_OFFSET_SP(%rdi)
     
    5351        movq %r15, CONTEXT_OFFSET_R15(%rdi)
    5452       
     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       
    5562        xorl %eax, %eax       # context_save returns 1
    5663        incl %eax
    5764        ret
     65FUNCTION_END(context_save_arch)
    5866
    5967
     
    6371# pointed by the 1st argument. Returns 0 in EAX.
    6472#
    65 context_restore_arch:
     73FUNCTION_BEGIN(context_restore_arch)
    6674        movq CONTEXT_OFFSET_R15(%rdi), %r15
    6775        movq CONTEXT_OFFSET_R14(%rdi), %r14
     
    7179        movq CONTEXT_OFFSET_RBX(%rdi), %rbx
    7280       
    73         movq CONTEXT_OFFSET_SP(%rdi), %rsp   # ctx->sp -> %rsp
     81        movq CONTEXT_OFFSET_SP(%rdi), %rsp
    7482       
    75         movq CONTEXT_OFFSET_PC(%rdi), %rdx
     83        movq CONTEXT_OFFSET_PC(%rdi), %rdx
     84        movq %rdx, (%rsp)
    7685       
    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)
    7894       
    7995        xorl %eax, %eax       # context_restore returns 0
    8096        ret
     97FUNCTION_END(context_restore_arch)
    8198
Note: See TracChangeset for help on using the changeset viewer.