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

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

Diff for /src/sys/arch/i386/i386/locore.S between version 1.58.6.6 and 1.70

version 1.58.6.6, 2008/01/19 12:14:20 version 1.70, 2008/04/29 18:27:18
Line 85 
Line 85 
  * 2. Redistributions in binary form must reproduce the above copyright   * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the   *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.   *    documentation and/or other materials provided with the distribution.
  * 3. All advertising materials mentioning features or use of this software  
  *    must display the following acknowledgement:  
  *        This product includes software developed by the NetBSD  
  *        Foundation, Inc. and its contributors.  
  * 4. Neither the name of The NetBSD Foundation nor the names of its  
  *    contributors may be used to endorse or promote products derived  
  *    from this software without specific prior written permission.  
  *   *
  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS   * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
Line 816  NENTRY(lgdt_finish)
Line 809  NENTRY(lgdt_finish)
  * NOTE: This function does not have a normal calling sequence!   * NOTE: This function does not have a normal calling sequence!
  */   */
 NENTRY(lwp_trampoline)  NENTRY(lwp_trampoline)
         pushl   %ebp          movl    %ebp,%edi       /* for .Lsyscall_checkast */
         xorl    %ebp,%ebp          xorl    %ebp,%ebp
           pushl   %edi
         pushl   %eax          pushl   %eax
         call    _C_LABEL(lwp_startup)          call    _C_LABEL(lwp_startup)
         addl    $8,%esp          addl    $8,%esp
         pushl   %ebx          pushl   %ebx
         call    *%esi          call    *%esi
         addl    $4,%esp          addl    $4,%esp
         DO_DEFERRED_SWITCH          jmp     .Lsyscall_checkast
         INTRFASTEXIT  
         /* NOTREACHED */          /* NOTREACHED */
   
 /*  /*
Line 884  ENTRY(longjmp)
Line 877  ENTRY(longjmp)
         ret          ret
   
 /*  /*
    * void dumpsys(void)
    *
    * Mimic cpu_switchto() for postmortem debugging.
    */
   ENTRY(dumpsys)
           pushl   %ebx                    # set up fake switchframe
           pushl   %esi                    #   and save context
           pushl   %edi
           movl    %esp,_C_LABEL(dumppcb)+PCB_ESP
           movl    %ebp,_C_LABEL(dumppcb)+PCB_EBP
           call    _C_LABEL(dodumpsys)     # dump!
           addl    $(3*4), %esp            # unwind switchframe
           ret
   
   /*
  * struct lwp *cpu_switchto(struct lwp *oldlwp, struct newlwp,   * struct lwp *cpu_switchto(struct lwp *oldlwp, struct newlwp,
  *                          bool returning)   *                          bool returning)
  *   *
Line 899  ENTRY(cpu_switchto)
Line 907  ENTRY(cpu_switchto)
         pushl   %esi          pushl   %esi
         pushl   %edi          pushl   %edi
   
   #if defined(DIAGNOSTIC) && !defined(XEN)
           cmpl    $IPL_SCHED,CPUVAR(ILEVEL)
           jbe     0f
           pushl   $.Lstr
           call    _C_LABEL(panic)
           addl    $4,%esp
   .Lstr:  .string "cpu_switcho: switching above IPL_SCHED\0"
   0:
   #endif
   
         movl    16(%esp),%esi           # oldlwp          movl    16(%esp),%esi           # oldlwp
         movl    20(%esp),%edi           # newlwp          movl    20(%esp),%edi           # newlwp
         movl    24(%esp),%edx           # returning          movl    24(%esp),%edx           # returning
Line 1055  IDTVEC(syscall)
Line 1073  IDTVEC(syscall)
 syscall1:  syscall1:
         pushl   $T_ASTFLT       # trap # for doing ASTs          pushl   $T_ASTFLT       # trap # for doing ASTs
         INTRENTRY          INTRENTRY
   
 #ifdef DIAGNOSTIC  #ifdef DIAGNOSTIC
         cmpl    $0, CPUVAR(WANT_PMAPLOAD)  
         jz      1f  
         pushl   $6f  
         call    _C_LABEL(printf)  
         addl    $4, %esp  
 1:  
         movl    CPUVAR(ILEVEL),%ebx          movl    CPUVAR(ILEVEL),%ebx
         testl   %ebx,%ebx          testl   %ebx,%ebx
         jz      1f          jz      1f
Line 1074  syscall1:
Line 1085  syscall1:
 #endif  #endif
 1:  1:
 #endif /* DIAGNOSTIC */  #endif /* DIAGNOSTIC */
         movl    CPUVAR(CURLWP),%edx          incl    CPUVAR(NSYSCALL)        # count it atomically
         movl    %esp,L_MD_REGS(%edx)    # save pointer to frame          movl    CPUVAR(CURLWP),%edi
         movl    L_PROC(%edx),%edx          movl    L_PROC(%edi),%edx
           movl    %esp,L_MD_REGS(%edi)    # save pointer to frame
         pushl   %esp          pushl   %esp
         call    *P_MD_SYSCALL(%edx)     # get pointer to syscall() function          call    *P_MD_SYSCALL(%edx)     # get pointer to syscall() function
         addl    $4,%esp          addl    $4,%esp
 .Lsyscall_checkast:  .Lsyscall_checkast:
         /* Check for ASTs on exit to user mode. */          /* Check for ASTs on exit to user mode. */
         CLI(%eax)          CLI(%eax)
         CHECK_ASTPENDING(%eax)          movl    L_MD_ASTPENDING(%edi), %eax
         je      1f          orl     CPUVAR(WANT_PMAPLOAD), %eax
         /* Always returning to user mode here. */  
         CLEAR_ASTPENDING(%eax)  
         STI(%eax)  
         /* Pushed T_ASTFLT into tf_trapno on entry. */  
         pushl   %esp  
         call    _C_LABEL(trap)  
         addl    $4,%esp  
         jmp     .Lsyscall_checkast      /* re-check ASTs */  
 1:      CHECK_DEFERRED_SWITCH  
         jnz     9f          jnz     9f
 #ifdef XEN  #ifdef XEN
         STIC(%eax)          STIC(%eax)
Line 1134  syscall1:
Line 1137  syscall1:
         jmp     .Lsyscall_checkast          jmp     .Lsyscall_checkast
 4:      .asciz  "WARNING: SPL NOT LOWERED ON SYSCALL EXIT\n"  4:      .asciz  "WARNING: SPL NOT LOWERED ON SYSCALL EXIT\n"
 5:      .asciz  "WARNING: SPL NOT ZERO ON SYSCALL ENTRY\n"  5:      .asciz  "WARNING: SPL NOT ZERO ON SYSCALL ENTRY\n"
 6:      .asciz  "WARNING: WANT PMAPLOAD ON SYSCALL ENTRY\n"  
 #endif /* DIAGNOSTIC */  #endif /* DIAGNOSTIC */
 9:      STI(%eax)  9:
           cmpl    $0, CPUVAR(WANT_PMAPLOAD)
           jz      10f
           STI(%eax)
         call    _C_LABEL(pmap_load)          call    _C_LABEL(pmap_load)
         jmp     .Lsyscall_checkast      /* re-check ASTs */          jmp     .Lsyscall_checkast      /* re-check ASTs */
   10:
           /* Always returning to user mode here. */
           movl    $0, L_MD_ASTPENDING(%edi)
           STI(%eax)
           /* Pushed T_ASTFLT into tf_trapno on entry. */
           pushl   %esp
           call    _C_LABEL(trap)
           addl    $4,%esp
           jmp     .Lsyscall_checkast      /* re-check ASTs */
   
 #if NNPX > 0  #if NNPX > 0
 /*  /*

Legend:
Removed from v.1.58.6.6  
changed lines
  Added in v.1.70

CVSweb <webmaster@jp.NetBSD.org>