Ignore:
File:
1 edited

Legend:

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

    r9d58539 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_offset.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
    45         CONTEXT_SAVE_ARCH_CORE %rdi %rdx
     43        movq %rdx, CONTEXT_OFFSET_PC(%rdi)
     44        movq %rsp, CONTEXT_OFFSET_SP(%rdi)
     45       
     46        movq %rbx, CONTEXT_OFFSET_RBX(%rdi)
     47        movq %rbp, CONTEXT_OFFSET_RBP(%rdi)
     48        movq %r12, CONTEXT_OFFSET_R12(%rdi)
     49        movq %r13, CONTEXT_OFFSET_R13(%rdi)
     50        movq %r14, CONTEXT_OFFSET_R14(%rdi)
     51        movq %r15, CONTEXT_OFFSET_R15(%rdi)
     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)
    4661       
    4762        xorl %eax, %eax       # context_save returns 1
    4863        incl %eax
    4964        ret
     65FUNCTION_END(context_save_arch)
    5066
    5167
     
    5571# pointed by the 1st argument. Returns 0 in EAX.
    5672#
    57 context_restore_arch:
    58         CONTEXT_RESTORE_ARCH_CORE %rdi %rdx
     73FUNCTION_BEGIN(context_restore_arch)
     74        movq CONTEXT_OFFSET_R15(%rdi), %r15
     75        movq CONTEXT_OFFSET_R14(%rdi), %r14
     76        movq CONTEXT_OFFSET_R13(%rdi), %r13
     77        movq CONTEXT_OFFSET_R12(%rdi), %r12
     78        movq CONTEXT_OFFSET_RBP(%rdi), %rbp
     79        movq CONTEXT_OFFSET_RBX(%rdi), %rbx
    5980       
     81        movq CONTEXT_OFFSET_SP(%rdi), %rsp
     82       
     83        movq CONTEXT_OFFSET_PC(%rdi), %rdx
    6084        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)
    6194       
    6295        xorl %eax, %eax       # context_restore returns 0
    6396        ret
     97FUNCTION_END(context_restore_arch)
     98
Note: See TracChangeset for help on using the changeset viewer.