diff options
author | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2005-05-18 15:11:20 +0000 |
---|---|---|
committer | kaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk> | 2005-05-18 15:11:20 +0000 |
commit | fb7d812c3861307d3a101933060b2518f3dc7f78 (patch) | |
tree | 036ef28e107551dd48eb72c5efa5aebbb5d36abe /xen/arch/x86/boot/x86_64.S | |
parent | 30b9127ed984e4e826bc9aabe363bb1c04a25962 (diff) | |
download | xen-fb7d812c3861307d3a101933060b2518f3dc7f78.tar.gz xen-fb7d812c3861307d3a101933060b2518f3dc7f78.tar.bz2 xen-fb7d812c3861307d3a101933060b2518f3dc7f78.zip |
bitkeeper revision 1.1449 (428b5b18LCgVTMb_50LKESAAA5057Q)
Fix x86/64 bootstrap.
Signed-off-by: Keir Fraser <keir@xensource.com>
Diffstat (limited to 'xen/arch/x86/boot/x86_64.S')
-rw-r--r-- | xen/arch/x86/boot/x86_64.S | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/xen/arch/x86/boot/x86_64.S b/xen/arch/x86/boot/x86_64.S index 56b2dcb5e5..5ebb24d647 100644 --- a/xen/arch/x86/boot/x86_64.S +++ b/xen/arch/x86/boot/x86_64.S @@ -46,13 +46,13 @@ print_err: mov $7,%al stosb # Write an attribute to the VGA framebuffer jmp 1b - + __start: cld cli /* Set up a few descriptors: on entry only CS is guaranteed good. */ - lgdt %cs:0x100400 + lgdt %cs:0x100306 # nopaging_gdt_descr mov $(__HYPERVISOR_DS32),%ecx mov %ecx,%ds mov %ecx,%es @@ -65,7 +65,7 @@ __start: jne not_multiboot /* Save the Multiboot info structure for later use. */ - mov %ebx,0x100300 + mov %ebx,0x100300 # multiboot_ptr /* We begin by interrogating the CPU for the presence of long mode. */ mov $0x80000000,%eax @@ -87,7 +87,7 @@ skip_boot_checks: mov %ecx,%cr4 /* Load pagetable base register. */ - mov $0x101000,%eax /* idle_pg_table */ + mov $0x102000,%eax /* idle_pg_table */ mov %eax,%cr3 /* Set up EFER (Extended Feature Enable Register). */ @@ -168,9 +168,8 @@ __high_start: loop 1b /* Pass off the Multiboot info structure to C land. */ - mov 0x100300,%edi - lea start(%rip),%rax - sub $0x100000,%rax + mov multiboot_ptr(%rip),%edi + lea start-0x100000(%rip),%rax add %rax,%rdi call __start_xen ud2 /* Force a panic (invalid opcode). */ @@ -184,26 +183,30 @@ ignore_int: call printf 1: jmp 1b - .code32 - .org 0x300 - /*** DESCRIPTOR TABLES ***/ .globl idt -.globl gdt +.globl gdt + + .org 0x300 + .code32 + +multiboot_ptr: /* 0x300 */ + .long 0 - .org 0x400 - .word LAST_RESERVED_GDT_BYTE - .long 0x101000 - FIRST_RESERVED_GDT_BYTE - .word 0 +nopaging_gdt_descr: /* 0x306 */ + .word LAST_RESERVED_GDT_BYTE + .quad gdt_table - FIRST_RESERVED_GDT_BYTE - __PAGE_OFFSET + + .word 0,0,0 gdt_descr: .word LAST_RESERVED_GDT_BYTE -gdt: +gdt: .quad gdt_table - FIRST_RESERVED_GDT_BYTE - .word 0 + .word 0,0,0 idt_descr: .word 256*16-1 idt: @@ -214,7 +217,7 @@ ENTRY(stack_start) high_start: .quad __high_start - + .org 0x1000 ENTRY(gdt_table) .quad 0x0000000000000000 /* unused */ @@ -231,14 +234,14 @@ ENTRY(gdt_table) .org 0x2000 ENTRY(idle_pg_table) ENTRY(idle_pg_table_4) - .quad 0x0000000000102007 # PML4[0] + .quad idle_pg_table_l3 - __PAGE_OFFSET + 7 # PML4[0] .fill 261,8,0 - .quad 0x0000000000102007 # PML4[262] + .quad idle_pg_table_l3 - __PAGE_OFFSET + 7 # PML4[262] /* Initial PDP -- level-3 page table */ .org 0x3000 ENTRY(idle_pg_table_l3) - .quad 0x0000000000103007 + .quad idle_pg_table_l2 - __PAGE_OFFSET + 7 /* Initial PDE -- level-2 page table. */ .org 0x4000 |