From da39673d5d194e66c9ad70ad4de4e90ee69f0886 Mon Sep 17 00:00:00 2001 From: Juergen Gross Date: Fri, 7 Dec 2018 13:11:38 +0100 Subject: [PATCH 10/20] xen: Add PVH boot entry code Add the code for the Xen PVH mode boot entry. Signed-off-by: Juergen Gross Reviewed-by: Daniel Kiper Tested-by: Hans van Kranenburg (cherry picked from commit 1a4d83af2fc1eb0a0951775a2b86860ab074c699) --- grub-core/kern/i386/xen/startup_pvh.S | 52 +++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/grub-core/kern/i386/xen/startup_pvh.S b/grub-core/kern/i386/xen/startup_pvh.S index 69b8fdcca..363c31858 100644 --- a/grub-core/kern/i386/xen/startup_pvh.S +++ b/grub-core/kern/i386/xen/startup_pvh.S @@ -19,11 +19,63 @@ #include #include +#include .file "startup_pvh.S" .text + .globl start, _start + .code32 +start: +_start: + cld + lgdt gdtdesc + ljmp $GRUB_MEMORY_MACHINE_PROT_MODE_CSEG, $1f +1: + movl $GRUB_MEMORY_MACHINE_PROT_MODE_DSEG, %eax + mov %eax, %ds + mov %eax, %es + mov %eax, %fs + mov %eax, %gs + mov %eax, %ss + leal LOCAL(stack_end), %esp + + /* Save address of start info structure. */ + mov %ebx, pvh_start_info + call EXT_C(grub_main) + /* Doesn't return. */ + + .p2align 3 +gdt: + .word 0, 0 + .byte 0, 0, 0, 0 + + /* -- code segment -- + * base = 0x00000000, limit = 0xFFFFF (4 KiB Granularity), present + * type = 32bit code execute/read, DPL = 0 + */ + .word 0xFFFF, 0 + .byte 0, 0x9A, 0xCF, 0 + + /* -- data segment -- + * base = 0x00000000, limit 0xFFFFF (4 KiB Granularity), present + * type = 32 bit data read/write, DPL = 0 + */ + .word 0xFFFF, 0 + .byte 0, 0x92, 0xCF, 0 + + .p2align 3 +/* this is the GDT descriptor */ +gdtdesc: + .word 0x17 /* limit */ + .long gdt /* addr */ + + .p2align 2 /* Saved pointer to start info structure. */ .globl pvh_start_info pvh_start_info: .long 0 + + .bss + .space GRUB_MEMORY_MACHINE_PROT_STACK_SIZE +LOCAL(stack_end): -- 2.21.0