[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH v2 01/18] plat/kvm: Place early boot code to the start of the image (x86)
Places early boot code (e.g., 64bit mode switch) and data (e.g., GDT) to the start of the image. This avoids general protection faults that were caused whenever the linker placed such items to addresses that were not accessible while the mode switch to 64bit and address space setup was not finished. Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> --- plat/kvm/x86/entry64.S | 21 ++++++++++++--------- plat/kvm/x86/link64.ld | 3 ++- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/plat/kvm/x86/entry64.S b/plat/kvm/x86/entry64.S index bda7d40..1a10359 100644 --- a/plat/kvm/x86/entry64.S +++ b/plat/kvm/x86/entry64.S @@ -30,24 +30,24 @@ #include <x86/cpu_defs.h> #include <kvm-x86/multiboot_defs.h> -#define ENTRY(x) .text; .globl x; .type x,%function; x: +#define ENTRY(x) .globl x; .type x,%function; x: #define END(x) .size x, . - x #define MYMULTIBOOT_FLAGS \ (MULTIBOOT_PAGE_ALIGN | MULTIBOOT_MEMORY_INFO | MULTIBOOT_AOUT_KLUDGE) -.section .data.multiboot +.section .data.boot .align 4 _multiboot_header: .long MULTIBOOT_HEADER_MAGIC .long MYMULTIBOOT_FLAGS -.long -(MULTIBOOT_HEADER_MAGIC+MYMULTIBOOT_FLAGS) -.long _multiboot_header -.long 0x100000 -.long _edata -.long _end -.long _libkvmplat_start32 +.long -(MULTIBOOT_HEADER_MAGIC+MYMULTIBOOT_FLAGS) /* checksum */ +.long _multiboot_header /* header addr */ +.long 0x100000 /* load addr */ +.long _edata /* load end addr */ +.long _end /* bss end addr */ +.long _libkvmplat_start32 /* entry addr */ .section .bss @@ -63,6 +63,7 @@ bootstack: * we've switched to long mode. */ .code32 +.section .text.boot ENTRY(_libkvmplat_start32) cld @@ -139,7 +140,7 @@ END(_libkvmplat_start32) * Uuuyea, exceptions. */ -.data +.section .data.boot .align 64 gdt64: .quad 0x0000000000000000 @@ -165,6 +166,7 @@ mxcsr_ptr: #include "pagetable.S" .code64 +.section .text.boot ENTRY(_libkvmplat_start64) movq $bootstack, %rsp @@ -192,6 +194,7 @@ ENTRY(_libkvmplat_start64) hlt END(_libkvmplat_start64) +.text ENTRY(_libkvmplat_newstack) movq %rdi, %rsp movq %rdx, %rdi diff --git a/plat/kvm/x86/link64.ld b/plat/kvm/x86/link64.ld index d1bfa73..60b5d21 100644 --- a/plat/kvm/x86/link64.ld +++ b/plat/kvm/x86/link64.ld @@ -33,7 +33,8 @@ SECTIONS .text : { /* prevent linker gc from removing multiboot header */ - KEEP (*(.data.multiboot)) + KEEP (*(.data.boot)) + *(.text.boot) *(.text) *(.text.*) -- 2.7.4 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |