[BACK]Return to locore.S CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / arch / amd64 / amd64

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/arch/amd64/amd64/locore.S between version 1.55.2.2 and 1.55.2.3

version 1.55.2.2, 2010/08/17 06:43:51 version 1.55.2.3, 2010/10/22 07:20:57
Line 1085  IDTVEC(syscall)
Line 1085  IDTVEC(syscall)
         pushq   $(LSEL(LUDATA_SEL, SEL_UPL))    /* Known to be user ss */          pushq   $(LSEL(LUDATA_SEL, SEL_UPL))    /* Known to be user ss */
         pushq   %r15                            /* User space rsp */          pushq   %r15                            /* User space rsp */
         movq    CPUVAR(SCRATCH),%r15          movq    CPUVAR(SCRATCH),%r15
         sti  
         subq    $TF_REGSIZE+(TF_RSP-TF_TRAPNO),%rsp          subq    $TF_REGSIZE+(TF_RSP-TF_TRAPNO),%rsp
           movw    %es,TF_ES(%rsp)
           sti
         INTR_SAVE_GPRS          INTR_SAVE_GPRS
         movw    %fs,TF_FS(%rsp)          movw    %fs,TF_FS(%rsp)
         movw    %gs,TF_GS(%rsp)          movw    %gs,TF_GS(%rsp)
         movw    %es,TF_ES(%rsp)  
         movw    $(LSEL(LUDATA_SEL, SEL_UPL)),TF_DS(%rsp)          movw    $(LSEL(LUDATA_SEL, SEL_UPL)),TF_DS(%rsp)
         movq    %r11, TF_RFLAGS(%rsp)   /* old rflags from syscall insn */          movq    %r11, TF_RFLAGS(%rsp)   /* old rflags from syscall insn */
         movq    $(LSEL(LUCODE_SEL, SEL_UPL)), TF_CS(%rsp)          movq    $(LSEL(LUCODE_SEL, SEL_UPL)), TF_CS(%rsp)
Line 1128  IDTVEC(syscall)
Line 1128  IDTVEC(syscall)
         jnz     9f          jnz     9f
         testl   $MDP_IRET, L_MD_FLAGS(%r14)          testl   $MDP_IRET, L_MD_FLAGS(%r14)
         jne     iret_return;          jne     iret_return;
 syscall_return:  
 #ifdef DIAGNOSTIC  #ifdef DIAGNOSTIC
         cmpl    $IPL_NONE,CPUVAR(ILEVEL)          cmpl    $IPL_NONE,CPUVAR(ILEVEL)
         jne     3f          jne     3f
Line 1172  syscall_return:
Line 1171  syscall_return:
         call    _C_LABEL(do_pmap_load)          call    _C_LABEL(do_pmap_load)
         jmp     .Lsyscall_checkast      /* re-check ASTs */          jmp     .Lsyscall_checkast      /* re-check ASTs */
 10:  10:
         /* Always returning to user mode here. */  
         CLEAR_ASTPENDING(%r14)          CLEAR_ASTPENDING(%r14)
         STI(si)          STI(si)
         /* Pushed T_ASTFLT into tf_trapno on entry. */          /* Pushed T_ASTFLT into tf_trapno on entry. */
Line 1260  _C_LABEL(osyscall_return):
Line 1258  _C_LABEL(osyscall_return):
 .Losyscall_checkast:  .Losyscall_checkast:
         /* Check for ASTs on exit to user mode. */          /* Check for ASTs on exit to user mode. */
         CLI(si)          CLI(si)
         CHECK_ASTPENDING(%r14)          movl    L_MD_ASTPENDING(%r14), %eax
         je      1f          orl     CPUVAR(WANT_PMAPLOAD), %eax
         /* Always returning to user mode here. */  
         CLEAR_ASTPENDING(%r14)  
         STI(si)  
         /* Pushed T_ASTFLT into tf_trapno on entry. */  
         movq    %rsp,%rdi  
         call    _C_LABEL(trap)  
         jmp     .Losyscall_checkast  
 1:      CHECK_DEFERRED_SWITCH  
         jnz     9f          jnz     9f
 iret_return:  iret_return:
 #ifndef DIAGNOSTIC  #ifdef DIAGNOSTIC
         INTRFASTEXIT  
 #else /* DIAGNOSTIC */  
         cmpl    $IPL_NONE,CPUVAR(ILEVEL)          cmpl    $IPL_NONE,CPUVAR(ILEVEL)
         jne     3f          jne     3f
   #endif
         INTRFASTEXIT          INTRFASTEXIT
 3:  #ifdef DIAGNOSTIC
         STI(si)  3:      movabsq $4f, %rdi
         movabsq $4f, %rdi          movl    TF_RAX(%rsp),%esi
           movl    TF_RDI(%rsp),%edx
           movl    %ebx,%ecx
           movl    CPUVAR(ILEVEL),%r8d
         xorq    %rax,%rax          xorq    %rax,%rax
         call    _C_LABEL(printf)          call    _C_LABEL(printf)
         movl    $IPL_NONE,%edi          movl    $IPL_NONE,%edi
         call    _C_LABEL(spllower)          call    _C_LABEL(spllower)
         jmp     .Losyscall_checkast          jmp     .Losyscall_checkast
 4:      .asciz  "WARNING: SPL NOT LOWERED ON SYSCALL EXIT\n"  4:      .asciz  "WARNING: SPL NOT LOWERED ON SYSCALL %d %d EXIT %x %x\n"
 #endif /* DIAGNOSTIC */  #endif
 9:      STI(si)  9:
           cmpl    $0, CPUVAR(WANT_PMAPLOAD)
           jz      10f
           STI(si)
         call    _C_LABEL(do_pmap_load)          call    _C_LABEL(do_pmap_load)
         jmp     .Losyscall_checkast     /* re-check ASTs */          jmp     .Losyscall_checkast     /* re-check ASTs */
   10:
           CLEAR_ASTPENDING(%r14)
           STI(si)
           /* Pushed T_ASTFLT into tf_trapno on entry. */
           movq    %rsp,%rdi
           call    _C_LABEL(trap)
           jmp     .Losyscall_checkast     /* re-check ASTs */
   
 /*  /*
  * void sse2_idlezero_page(void *pg)   * void sse2_idlezero_page(void *pg)

Legend:
Removed from v.1.55.2.2  
changed lines
  Added in v.1.55.2.3

CVSweb <webmaster@jp.NetBSD.org>