diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2007-10-22 11:29:44 +1000 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2007-10-23 15:49:57 +1000 |
commit | 814a0e5cdfbd384f4bf7a8443f9c3b885f413d58 (patch) | |
tree | 4cb82a6ec1db54ce00fbc3700762cd3dc46a0b4e /arch/x86/lguest/i386_head.S | |
parent | 1f5a29022ac66bc90cbe2a2162f56e9cd7b393ef (diff) | |
download | op-kernel-dev-814a0e5cdfbd384f4bf7a8443f9c3b885f413d58.zip op-kernel-dev-814a0e5cdfbd384f4bf7a8443f9c3b885f413d58.tar.gz |
Revert lguest magic and use hook in head.S
Version 2.07 of the boot protocol uses 0x23C for the hardware_subarch
field, that for lguest is "1". This allows us to use the standard
boot entry point rather than the "GenuineLguest" string hack.
The standard entry point also clears the BSS and copies the boot parameters
and commandline for us, saving more code.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Diffstat (limited to 'arch/x86/lguest/i386_head.S')
-rw-r--r-- | arch/x86/lguest/i386_head.S | 17 |
1 files changed, 4 insertions, 13 deletions
diff --git a/arch/x86/lguest/i386_head.S b/arch/x86/lguest/i386_head.S index ba4282e..ebc6ac7 100644 --- a/arch/x86/lguest/i386_head.S +++ b/arch/x86/lguest/i386_head.S @@ -5,11 +5,8 @@ #include <asm/thread_info.h> #include <asm/processor-flags.h> -/*G:020 This is where we begin: we have a magic signature which the launcher - * looks for. The plan is that the Linux boot protocol will be extended with a - * "platform type" field which will guide us here from the normal entry point, - * but for the moment this suffices. The normal boot code uses %esi for the - * boot header, so we do too. +/*G:020 This is where we begin: head.S notes that the boot header's platform + * type field is "1" (lguest), so calls us here. The boot header is in %esi. * * WARNING: be very careful here! We're running at addresses equal to physical * addesses (around 0), not above PAGE_OFFSET as most code expectes @@ -19,19 +16,14 @@ * The .section line puts this code in .init.text so it will be discarded after * boot. */ .section .init.text, "ax", @progbits -.ascii "GenuineLguest" +ENTRY(lguest_entry) /* Make initial hypercall now, so we can set up the pagetables. */ movl $LHCALL_LGUEST_INIT, %eax movl $lguest_data - __PAGE_OFFSET, %edx int $LGUEST_TRAP_ENTRY - /* Set up boot information pointer to hand to lguest_init(): it wants - * a virtual address. */ - movl %esi, %eax - addl $__PAGE_OFFSET, %eax - /* The Host put the toplevel pagetable in lguest_data.pgdir. The movsl - * instruction uses %esi, so we needed to save it above. */ + * instruction uses %esi implicitly. */ movl lguest_data - __PAGE_OFFSET + LGUEST_DATA_pgdir, %esi /* Copy first 32 entries of page directory to __PAGE_OFFSET entries. @@ -47,7 +39,6 @@ /* Set up the initial stack so we can run C code. */ movl $(init_thread_union+THREAD_SIZE),%esp - /* Jumps are relative, and we're running __PAGE_OFFSET too low at the * moment. */ jmp lguest_init+__PAGE_OFFSET |