grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH v6 10/20] xen: add PVH boot entry code


From: Juergen Gross
Subject: [PATCH v6 10/20] xen: add PVH boot entry code
Date: Wed, 28 Nov 2018 14:55:20 +0100

Add the code for the Xen PVH mode boot entry.

Signed-off-by: Juergen Gross <address@hidden>
Reviewed-by: Daniel Kiper <address@hidden>
---
V3: clear %fs and %gs, too (Daniel Kiper)
    use GRUB_MEMORY_MACHINE_PROT_STACK_SIZE for stack size (Daniel Kiper)
V5: reorder clearing segment regs (Daniel Kiper)
---
 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 <config.h>
 #include <grub/symbol.h>
+#include <grub/machine/memory.h>
 
        .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.16.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]