version 1.145.6.3, 2018/03/13 15:47:44 |
version 1.153, 2017/09/30 11:43:57 |
|
|
#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" |
#include "opt_multiboot.h" |
#include "opt_multiboot.h" |
#include "opt_realmem.h" |
#include "opt_realmem.h" |
#include "opt_vm86.h" |
|
#include "opt_xen.h" |
#include "opt_xen.h" |
|
|
#include "assym.h" |
#include "assym.h" |
|
|
pushl $0 /* init386() expects a 64 bits paddr_t with PAE */ |
pushl $0 /* init386() expects a 64 bits paddr_t with PAE */ |
#endif |
#endif |
pushl %eax |
pushl %eax |
|
call _C_LABEL(init_bootspace) |
call _C_LABEL(init386) |
call _C_LABEL(init386) |
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 */ |
|
|
addl $4,%esp |
addl $4,%esp |
#else |
#else |
movl PCB_ESP0(%ebx),%eax |
movl PCB_ESP0(%ebx),%eax |
movl CPUVAR(TSS),%ecx |
movl %eax,CPUVAR(ESP0) |
movl %eax,TSS_ESP0(%ecx) |
|
#endif |
#endif |
|
|
/* Don't bother with the rest if switching to a system process. */ |
/* Don't bother with the rest if switching to a system process. */ |
|
|
movl PCB_IOMAP(%ebx),%eax |
movl PCB_IOMAP(%ebx),%eax |
orl %eax,%eax |
orl %eax,%eax |
jnz .Lcopy_iobitmap |
jnz .Lcopy_iobitmap |
movl CPUVAR(TSS),%eax |
movl $(IOMAP_INVALOFF << 16),CPUVAR(IOBASE) |
movl $(IOMAP_INVALOFF << 16),TSS_IOBASE(%eax) |
|
.Liobitmap_done: |
.Liobitmap_done: |
|
|
/* Is this process using RAS (restartable atomic sequences)? */ |
/* Is this process using RAS (restartable atomic sequences)? */ |
|
|
pushl %esi |
pushl %esi |
pushl %edi |
pushl %edi |
movl %eax,%esi /* pcb_iomap */ |
movl %eax,%esi /* pcb_iomap */ |
movl CPUVAR(TSS),%edi |
movl CPUVAR(SELF),%edi |
leal TSS_IOMAP(%edi),%edi |
leal CPU_INFO_IOMAP(%edi),%edi |
rep |
rep |
movsl |
movsl |
popl %edi |
popl %edi |
popl %esi |
popl %esi |
movl CPUVAR(TSS),%eax |
movl $((CPU_INFO_IOMAP - CPU_INFO_TSS) << 16),CPUVAR(IOBASE) |
movl $((TSS_IOMAP - TSS_TSS) << 16),TSS_IOBASE(%eax) |
|
jmp .Liobitmap_done |
jmp .Liobitmap_done |
END(cpu_switchto) |
END(cpu_switchto) |
|
|
Line 1318 IDTVEC(syscall) |
|
Line 1314 IDTVEC(syscall) |
|
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. |
Line 1405 ENTRY(sse2_idlezero_page) |
|
Line 1368 ENTRY(sse2_idlezero_page) |
|
popl %ebp |
popl %ebp |
ret |
ret |
END(sse2_idlezero_page) |
END(sse2_idlezero_page) |
|
|
|
ENTRY(intrfastexit) |
|
movw TF_GS(%esp),%gs |
|
movw TF_FS(%esp),%fs |
|
movw TF_ES(%esp),%es |
|
movw TF_DS(%esp),%ds |
|
movl TF_EDI(%esp),%edi |
|
movl TF_ESI(%esp),%esi |
|
movl TF_EBP(%esp),%ebp |
|
movl TF_EBX(%esp),%ebx |
|
movl TF_EDX(%esp),%edx |
|
movl TF_ECX(%esp),%ecx |
|
movl TF_EAX(%esp),%eax |
|
addl $(TF_PUSHSIZE+8),%esp |
|
iret |
|
END(intrfastexit) |
|
|