Module Name: src Committed By: maxv Date: Fri Nov 11 11:00:38 UTC 2016
Modified Files: src/sys/arch/i386/i386: locore.S Log Message: KNF and simplify Xen, and reduce the diff with amd64 a little To generate a diff of this commit: cvs rdiff -u -r1.138 -r1.139 src/sys/arch/i386/i386/locore.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/i386/i386/locore.S diff -u src/sys/arch/i386/i386/locore.S:1.138 src/sys/arch/i386/i386/locore.S:1.139 --- src/sys/arch/i386/i386/locore.S:1.138 Sun Oct 16 10:51:31 2016 +++ src/sys/arch/i386/i386/locore.S Fri Nov 11 11:00:38 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: locore.S,v 1.138 2016/10/16 10:51:31 maxv Exp $ */ +/* $NetBSD: locore.S,v 1.139 2016/11/11 11:00:38 maxv Exp $ */ /* * Copyright-o-rama! @@ -128,7 +128,7 @@ */ #include <machine/asm.h> -__KERNEL_RCSID(0, "$NetBSD: locore.S,v 1.138 2016/10/16 10:51:31 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: locore.S,v 1.139 2016/11/11 11:00:38 maxv Exp $"); #include "opt_compat_oldboot.h" #include "opt_copy_symtab.h" @@ -847,7 +847,7 @@ begin: pushl $0 /* init386() expects a 64 bits paddr_t with PAE */ #endif pushl %eax - call _C_LABEL(init386) /* wire 386 chip for unix operation */ + call _C_LABEL(init386) addl $PDE_SIZE,%esp /* pop paddr_t */ addl $NGDT*8,%esp /* pop temporary gdt */ @@ -876,38 +876,43 @@ begin: popfl cld - movl %esp, %ebx /* save start of available space */ - movl $_RELOC(tmpstk),%esp /* bootstrap stack end location */ + + /* + * Xen info: + * - %esp -> stack, *theoretically* the last used page by Xen bootstrap + */ + movl %esp,%ebx + movl $_RELOC(tmpstk),%esp /* Clear BSS. */ xorl %eax,%eax movl $RELOC(__bss_start),%edi movl $RELOC(_end),%ecx subl %edi,%ecx - rep stosb + rep + stosb /* Copy the necessary stuff from start_info structure. */ /* We need to copy shared_info early, so that sti/cli work */ movl $RELOC(start_info_union),%edi movl $128,%ecx - rep movsl + rep + movsl - /* Clear segment registers; always null in proc0. */ + /* Clear segment registers. */ xorl %eax,%eax movw %ax,%fs movw %ax,%gs - decl %eax - movl %eax,RELOC(cpuid_level) xorl %eax,%eax cpuid movl %eax,RELOC(cpuid_level) /* - * Use a temp page. We'll re- add it to uvm(9) once we're - * done using it. + * Use a temporary GDT page. We'll re-add it to uvm(9) once we're done + * using it. */ - movl $RELOC(tmpgdt), %eax + movl $RELOC(tmpgdt),%eax pushl %eax /* start of temporary gdt */ call _C_LABEL(initgdt) addl $4,%esp @@ -915,23 +920,23 @@ begin: call xen_pmap_bootstrap /* - * First avail returned by xen_pmap_bootstrap in %eax + * The first VA available is returned by xen_pmap_bootstrap in %eax. We + * use it as the UAREA, and set up the stack here. */ - movl %eax, %esi; - movl %esi, _C_LABEL(lwp0uarea) - - /* Set up bootstrap stack. */ + movl %eax,%esi + movl %esi,_C_LABEL(lwp0uarea) leal (USPACE-FRAMESIZE)(%eax),%esp xorl %ebp,%ebp /* mark end of frames */ - addl $USPACE, %esi - subl $KERNBASE, %esi /* init386 wants a physical address */ + /* Set first_avail after the UAREA. */ + addl $USPACE,%esi + subl $KERNBASE,%esi /* init386 wants a physical address */ #ifdef PAE pushl $0 /* init386() expects a 64 bits paddr_t with PAE */ #endif pushl %esi - call _C_LABEL(init386) /* wire 386 chip for unix operation */ + call _C_LABEL(init386) addl $PDE_SIZE,%esp /* pop paddr_t */ call _C_LABEL(main) #endif /* XEN */