Ignore:
File:
1 edited

Legend:

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

    r4bf0926e r9d58539  
    2727#
    2828
    29 #include <abi/asmtool.h>
    30 #include <arch/context_struct.h>
    31 #include <arch/vreg.h>
     29.text
    3230
    33 .text
     31.global context_save_arch
     32.global context_restore_arch
     33
     34#include <arch/context_offset.h>
    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       
    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)
     44        # 1st argument passed in %edi
     45        CONTEXT_SAVE_ARCH_CORE %rdi %rdx
    6146       
    6247        xorl %eax, %eax       # context_save returns 1
    6348        incl %eax
    6449        ret
    65 FUNCTION_END(context_save_arch)
    6650
    6751
     
    7155# pointed by the 1st argument. Returns 0 in EAX.
    7256#
    73 FUNCTION_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
     57context_restore_arch:
     58        CONTEXT_RESTORE_ARCH_CORE %rdi %rdx
    8059       
    81         movq CONTEXT_OFFSET_SP(%rdi), %rsp
    82        
    83         movq CONTEXT_OFFSET_PC(%rdi), %rdx
    8460        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)
    9461       
    9562        xorl %eax, %eax       # context_restore returns 0
    9663        ret
    97 FUNCTION_END(context_restore_arch)
    98 
Note: See TracChangeset for help on using the changeset viewer.