aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/lguest/i386_head.S
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2007-10-21 21:29:44 -0400
committerRusty Russell <rusty@rustcorp.com.au>2007-10-23 01:49:57 -0400
commit814a0e5cdfbd384f4bf7a8443f9c3b885f413d58 (patch)
tree4cb82a6ec1db54ce00fbc3700762cd3dc46a0b4e /arch/x86/lguest/i386_head.S
parent1f5a29022ac66bc90cbe2a2162f56e9cd7b393ef (diff)
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.S17
1 files changed, 4 insertions, 13 deletions
diff --git a/arch/x86/lguest/i386_head.S b/arch/x86/lguest/i386_head.S
index ba4282eba5bf..ebc6ac733899 100644
--- a/arch/x86/lguest/i386_head.S
+++ b/arch/x86/lguest/i386_head.S
@@ -5,11 +5,8 @@
5#include <asm/thread_info.h> 5#include <asm/thread_info.h>
6#include <asm/processor-flags.h> 6#include <asm/processor-flags.h>
7 7
8/*G:020 This is where we begin: we have a magic signature which the launcher 8/*G:020 This is where we begin: head.S notes that the boot header's platform
9 * looks for. The plan is that the Linux boot protocol will be extended with a 9 * type field is "1" (lguest), so calls us here. The boot header is in %esi.
10 * "platform type" field which will guide us here from the normal entry point,
11 * but for the moment this suffices. The normal boot code uses %esi for the
12 * boot header, so we do too.
13 * 10 *
14 * WARNING: be very careful here! We're running at addresses equal to physical 11 * WARNING: be very careful here! We're running at addresses equal to physical
15 * addesses (around 0), not above PAGE_OFFSET as most code expectes 12 * addesses (around 0), not above PAGE_OFFSET as most code expectes
@@ -19,19 +16,14 @@
19 * The .section line puts this code in .init.text so it will be discarded after 16 * The .section line puts this code in .init.text so it will be discarded after
20 * boot. */ 17 * boot. */
21.section .init.text, "ax", @progbits 18.section .init.text, "ax", @progbits
22.ascii "GenuineLguest" 19ENTRY(lguest_entry)
23 /* Make initial hypercall now, so we can set up the pagetables. */ 20 /* Make initial hypercall now, so we can set up the pagetables. */
24 movl $LHCALL_LGUEST_INIT, %eax 21 movl $LHCALL_LGUEST_INIT, %eax
25 movl $lguest_data - __PAGE_OFFSET, %edx 22 movl $lguest_data - __PAGE_OFFSET, %edx
26 int $LGUEST_TRAP_ENTRY 23 int $LGUEST_TRAP_ENTRY
27 24
28 /* Set up boot information pointer to hand to lguest_init(): it wants
29 * a virtual address. */
30 movl %esi, %eax
31 addl $__PAGE_OFFSET, %eax
32
33 /* The Host put the toplevel pagetable in lguest_data.pgdir. The movsl 25 /* The Host put the toplevel pagetable in lguest_data.pgdir. The movsl
34 * instruction uses %esi, so we needed to save it above. */ 26 * instruction uses %esi implicitly. */
35 movl lguest_data - __PAGE_OFFSET + LGUEST_DATA_pgdir, %esi 27 movl lguest_data - __PAGE_OFFSET + LGUEST_DATA_pgdir, %esi
36 28
37 /* Copy first 32 entries of page directory to __PAGE_OFFSET entries. 29 /* Copy first 32 entries of page directory to __PAGE_OFFSET entries.
@@ -47,7 +39,6 @@
47 /* Set up the initial stack so we can run C code. */ 39 /* Set up the initial stack so we can run C code. */
48 movl $(init_thread_union+THREAD_SIZE),%esp 40 movl $(init_thread_union+THREAD_SIZE),%esp
49 41
50
51 /* Jumps are relative, and we're running __PAGE_OFFSET too low at the 42 /* Jumps are relative, and we're running __PAGE_OFFSET too low at the
52 * moment. */ 43 * moment. */
53 jmp lguest_init+__PAGE_OFFSET 44 jmp lguest_init+__PAGE_OFFSET