version 1.153, 2017/09/30 11:43:57 |
version 1.156.2.2, 2018/07/28 04:37:34 |
|
|
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 %esi |
pushl %esi |
|
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 */ |
call _C_LABEL(main) |
call _C_LABEL(main) |
Line 933 END(hypercall_page) |
|
Line 934 END(hypercall_page) |
|
* this only happens at run time when the GDT is resized. |
* this only happens at run time when the GDT is resized. |
*/ |
*/ |
/* LINTSTUB: Func: void lgdt_finish(void) */ |
/* LINTSTUB: Func: void lgdt_finish(void) */ |
NENTRY(lgdt_finish) |
ENTRY(lgdt_finish) |
movl $GSEL(GDATA_SEL, SEL_KPL),%eax |
movl $GSEL(GDATA_SEL, SEL_KPL),%eax |
movw %ax,%ds |
movw %ax,%ds |
movw %ax,%es |
movw %ax,%es |
Line 960 END(lgdt_finish) |
|
Line 961 END(lgdt_finish) |
|
* stub to call. |
* stub to call. |
* NOTE: This function does not have a normal calling sequence! |
* NOTE: This function does not have a normal calling sequence! |
*/ |
*/ |
NENTRY(lwp_trampoline) |
ENTRY(lwp_trampoline) |
movl %ebp,%edi /* for .Lsyscall_checkast */ |
movl %ebp,%edi /* for .Lsyscall_checkast */ |
xorl %ebp,%ebp |
xorl %ebp,%ebp |
pushl %edi |
pushl %edi |
Line 980 END(lwp_trampoline) |
|
Line 981 END(lwp_trampoline) |
|
* Signal trampoline; copied to top of user stack. Used only for |
* Signal trampoline; copied to top of user stack. Used only for |
* compatibility with old releases of NetBSD. |
* compatibility with old releases of NetBSD. |
*/ |
*/ |
NENTRY(sigcode) |
ENTRY(sigcode) |
/* |
/* |
* Handler has returned here as if we called it. The sigcontext |
* Handler has returned here as if we called it. The sigcontext |
* is on the stack after the 3 args "we" pushed. |
* is on the stack after the 3 args "we" pushed. |
|
|
addl $4,%esp |
addl $4,%esp |
#else |
#else |
movl PCB_ESP0(%ebx),%eax |
movl PCB_ESP0(%ebx),%eax |
movl %eax,CPUVAR(ESP0) |
movl CPUVAR(TSS),%ecx |
|
movl %eax,TSS_ESP0(%ecx) |
|
#endif |
|
|
|
/* Switch the dbregs. */ |
|
pushl %edi |
|
pushl %esi |
|
call _C_LABEL(x86_dbregs_switch) |
|
addl $8,%esp |
|
|
|
#ifndef XEN |
|
pushl %edx |
|
movb _C_LABEL(x86_fpu_eager),%dl |
|
testb %dl,%dl |
|
jz .Lno_eagerfpu |
|
pushl %edi |
|
pushl %esi |
|
call _C_LABEL(fpu_eagerswitch) |
|
addl $8,%esp |
|
.Lno_eagerfpu: |
|
popl %edx |
#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 $(IOMAP_INVALOFF << 16),CPUVAR(IOBASE) |
movl CPUVAR(TSS),%eax |
|
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(SELF),%edi |
movl CPUVAR(TSS),%edi |
leal CPU_INFO_IOMAP(%edi),%edi |
leal TSS_IOMAP(%edi),%edi |
rep |
rep |
movsl |
movsl |
popl %edi |
popl %edi |
popl %esi |
popl %esi |
movl $((CPU_INFO_IOMAP - CPU_INFO_TSS) << 16),CPUVAR(IOBASE) |
movl CPUVAR(TSS),%eax |
|
movl $(IOMAP_VALIDOFF << 16),TSS_IOBASE(%eax) |
jmp .Liobitmap_done |
jmp .Liobitmap_done |
END(cpu_switchto) |
END(cpu_switchto) |
|
|
Line 1319 IDTVEC_END(syscall) |
|
Line 1342 IDTVEC_END(syscall) |
|
* Used when checking for the FDIV bug on first generations pentiums. |
* Used when checking for the FDIV bug on first generations pentiums. |
* Anything 120MHz or above is fine. |
* Anything 120MHz or above is fine. |
*/ |
*/ |
NENTRY(npx586bug1) |
ENTRY(npx586bug1) |
fildl 4(%esp) /* x */ |
fildl 4(%esp) /* x */ |
fildl 8(%esp) /* y */ |
fildl 8(%esp) /* y */ |
fld %st(1) |
fld %st(1) |