Ignore:
File:
1 edited

Legend:

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

    re98f1c3e r9d58539  
    2727#
    2828
    29 #include <abi/asmtool.h>
    30 #include <arch/context_struct.h>
    31 #include <arch/vreg.h>
     29#include <arch/context_offset.h>
    3230
    3331.text
     32
     33.global context_save_arch
     34.global context_restore_arch
     35
    3436
    3537## Save current CPU context
     
    3840# pointed by the 1st argument. Returns 1 in EAX.
    3941#
    40 FUNCTION_BEGIN(context_save_arch)
    41         movl 0(%esp), %eax      # save pc value into eax       
    42         movl 4(%esp), %edx      # address of the context variable to save context to
     42context_save_arch:
     43        movl 0(%esp),%eax       # save pc value into eax       
     44        movl 4(%esp),%edx       # address of the context variable to save context to
    4345
    44         # save registers to given structure
    45         movl %esp, CONTEXT_OFFSET_SP(%edx)      # %esp -> ctx->sp
    46         movl %eax, CONTEXT_OFFSET_PC(%edx)      # %eip -> ctx->pc
    47         movl %ebx, CONTEXT_OFFSET_EBX(%edx)     # %ebx -> ctx->ebx
    48         movl %esi, CONTEXT_OFFSET_ESI(%edx)     # %esi -> ctx->esi
    49         movl %edi, CONTEXT_OFFSET_EDI(%edx)     # %edi -> ctx->edi
    50         movl %ebp, CONTEXT_OFFSET_EBP(%edx)     # %ebp -> ctx->ebp
     46                # save registers to given structure
     47        CONTEXT_SAVE_ARCH_CORE %edx %eax
    5148
    52         mov vreg_ptr, %ecx
    53         movl %gs:VREG_TP(%ecx), %ecx
    54         movl %ecx, CONTEXT_OFFSET_TP(%edx)
    55 
    56         xorl %eax, %eax         # context_save returns 1
     49        xorl %eax,%eax          # context_save returns 1
    5750        incl %eax
    5851        ret
    59 FUNCTION_END(context_save_arch)
     52
    6053
    6154## Restore saved CPU context
     
    6457# pointed by the 1st argument. Returns 0 in EAX.
    6558#
    66 FUNCTION_BEGIN(context_restore_arch)
    67         movl 4(%esp), %eax      # address of the context variable to restore context from
     59context_restore_arch:
     60        movl 4(%esp),%eax       # address of the context variable to restore context from
    6861
    69         # restore registers from given structure
    70         movl CONTEXT_OFFSET_SP(%eax), %esp      # ctx->sp -> %esp
    71         movl CONTEXT_OFFSET_PC(%eax), %edx      # ctx->pc -> \pc
    72         movl CONTEXT_OFFSET_EBX(%eax), %ebx     # ctx->ebx -> %ebx
    73         movl CONTEXT_OFFSET_ESI(%eax), %esi     # ctx->esi -> %esi
    74         movl CONTEXT_OFFSET_EDI(%eax), %edi     # ctx->edi -> %edi
    75         movl CONTEXT_OFFSET_EBP(%eax), %ebp     # ctx->ebp -> %ebp
     62                # restore registers from given structure
     63        CONTEXT_RESTORE_ARCH_CORE %eax %edx
    7664
    77         movl %edx, 0(%esp)      # put saved pc on stack
    78 
    79         mov vreg_ptr, %ecx
    80         movl CONTEXT_OFFSET_TP(%eax), %edx
    81         movl %edx, %gs:VREG_TP(%ecx)
    82 
    83         xorl %eax, %eax         # context_restore returns 0
     65        movl %edx,0(%esp)       # put saved pc on stack
     66        xorl %eax,%eax          # context_restore returns 0
    8467        ret
Note: See TracChangeset for help on using the changeset viewer.