version 1.135.2.4, 2017/03/20 06:57:14 |
version 1.149, 2017/07/29 12:34:34 |
|
|
#include <machine/asm.h> |
#include <machine/asm.h> |
__KERNEL_RCSID(0, "$NetBSD$"); |
__KERNEL_RCSID(0, "$NetBSD$"); |
|
|
#include "opt_compat_oldboot.h" |
|
#include "opt_copy_symtab.h" |
#include "opt_copy_symtab.h" |
#include "opt_ddb.h" |
#include "opt_ddb.h" |
#include "opt_modular.h" |
#include "opt_modular.h" |
|
|
addl $PDE_SIZE,%esp /* pop paddr_t */ |
addl $PDE_SIZE,%esp /* pop paddr_t */ |
addl $NGDT*8,%esp /* pop temporary gdt */ |
addl $NGDT*8,%esp /* pop temporary gdt */ |
|
|
#ifdef SAFARI_FIFO_HACK |
|
movb $5,%al |
|
movw $0x37b,%dx |
|
outb %al,%dx |
|
movw $0x37f,%dx |
|
inb %dx,%al |
|
movb %al,%cl |
|
|
|
orb $1,%cl |
|
|
|
movb $5,%al |
|
movw $0x37b,%dx |
|
outb %al,%dx |
|
movw $0x37f,%dx |
|
movb %cl,%al |
|
outb %al,%dx |
|
#endif /* SAFARI_FIFO_HACK */ |
|
|
|
call _C_LABEL(main) |
call _C_LABEL(main) |
#else /* XEN */ |
#else /* XEN */ |
/* First, reset the PSL. */ |
/* First, reset the PSL. */ |
|
|
END(savectx) |
END(savectx) |
|
|
/* |
/* |
* osyscall() |
|
* |
|
* Old call gate entry for syscall |
|
*/ |
|
IDTVEC(osyscall) |
|
#ifndef XEN |
|
/* XXX we are in trouble! interrupts be off here. */ |
|
cli /* must be first instruction */ |
|
#endif |
|
pushfl /* set eflags in trap frame */ |
|
popl 8(%esp) |
|
orl $PSL_I,8(%esp) /* re-enable ints on return to user */ |
|
pushl $7 /* size of instruction for restart */ |
|
jmp syscall1 |
|
IDTVEC_END(osyscall) |
|
|
|
/* |
|
* syscall() |
* syscall() |
* |
* |
* Trap gate entry for syscall |
* Trap gate entry for syscall |
*/ |
*/ |
IDTVEC(syscall) |
IDTVEC(syscall) |
pushl $2 /* size of instruction for restart */ |
pushl $2 /* size of instruction for restart */ |
syscall1: |
|
pushl $T_ASTFLT /* trap # for doing ASTs */ |
pushl $T_ASTFLT /* trap # for doing ASTs */ |
INTRENTRY |
INTRENTRY |
STI(%eax) |
STI(%eax) |
|
|
jmp .Lsyscall_checkast /* re-check ASTs */ |
jmp .Lsyscall_checkast /* re-check ASTs */ |
IDTVEC_END(syscall) |
IDTVEC_END(syscall) |
|
|
IDTVEC(svr4_fasttrap) |
|
pushl $2 /* size of instruction for restart */ |
|
pushl $T_ASTFLT /* trap # for doing ASTs */ |
|
INTRENTRY |
|
STI(%eax) |
|
pushl $RW_READER |
|
pushl $_C_LABEL(svr4_fasttrap_lock) |
|
call _C_LABEL(rw_enter) |
|
addl $8,%esp |
|
call *_C_LABEL(svr4_fasttrap_vec) |
|
pushl $_C_LABEL(svr4_fasttrap_lock) |
|
call _C_LABEL(rw_exit) |
|
addl $4,%esp |
|
2: /* Check for ASTs on exit to user mode. */ |
|
cli |
|
CHECK_ASTPENDING(%eax) |
|
je 1f |
|
/* Always returning to user mode here. */ |
|
CLEAR_ASTPENDING(%eax) |
|
sti |
|
/* Pushed T_ASTFLT into tf_trapno on entry. */ |
|
pushl %esp |
|
call _C_LABEL(trap) |
|
addl $4,%esp |
|
jmp 2b |
|
1: CHECK_DEFERRED_SWITCH |
|
jnz 9f |
|
INTRFASTEXIT |
|
9: sti |
|
call _C_LABEL(pmap_load) |
|
cli |
|
jmp 2b |
|
|
|
/* |
/* |
* int npx586bug1(int a, int b) |
* int npx586bug1(int a, int b) |
* Used when checking for the FDIV bug on first generations pentiums. |
* Used when checking for the FDIV bug on first generations pentiums. |