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

[Xen-devel] [PATCH v7 10/20] xen: add PVH boot entry code



Add the code for the Xen PVH mode boot entry.

Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
Reviewed-by: Daniel Kiper <daniel.kiper@xxxxxxxxxx>
---
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


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.