[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC v1 20/74] x86: produce a binary that can be booted as PVH
Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- .gitignore | 1 + xen/arch/x86/Makefile | 10 +++++++++- xen/arch/x86/boot/head.S | 10 ++++++++++ xen/arch/x86/xen.lds.S | 9 ++++++++- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index d64b03d06c..8da67daf31 100644 --- a/.gitignore +++ b/.gitignore @@ -323,6 +323,7 @@ xen/xsm/flask/xenpolicy-* tools/flask/policy/policy.conf tools/flask/policy/xenpolicy-* xen/xen +xen/xen-shim xen/xen-syms xen/xen-syms.map xen/xen.* diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile index d5d58a205e..b58141efe2 100644 --- a/xen/arch/x86/Makefile +++ b/xen/arch/x86/Makefile @@ -75,6 +75,8 @@ efi-y := $(shell if [ ! -r $(BASEDIR)/include/xen/compile.h -o \ -O $(BASEDIR)/include/xen/compile.h ]; then \ echo '$(TARGET).efi'; fi) +shim-$(CONFIG_PVH_GUEST) := $(TARGET)-shim + ifneq ($(build_id_linker),) notes_phdrs = --notes else @@ -93,7 +95,7 @@ endif syms-warn-dup-y := --warn-dup syms-warn-dup-$(CONFIG_SUPPRESS_DUPLICATE_SYMBOL_WARNINGS) := -$(TARGET): $(TARGET)-syms $(efi-y) boot/mkelf32 +$(TARGET): $(TARGET)-syms $(efi-y) boot/mkelf32 $(shim-y) ./boot/mkelf32 $(notes_phdrs) $(TARGET)-syms $(TARGET) $(XEN_IMG_OFFSET) \ `$(NM) $(TARGET)-syms | sed -ne 's/^\([^ ]*\) . __2M_rwdata_end$$/0x\1/p'` @@ -144,6 +146,11 @@ $(TARGET)-syms: prelink.o xen.lds $(BASEDIR)/common/symbols-dummy.o >$(@D)/$(@F).map rm -f $(@D)/.$(@F).[0-9]* +# Use elf32-x86-64 if toolchain support exists, elf32-i386 otherwise. +$(TARGET)-shim: FORMAT = $(firstword $(filter elf32-x86-64,$(shell $(OBJCOPY) --help)) elf32-i386) +$(TARGET)-shim: $(TARGET)-syms + $(OBJCOPY) -O $(FORMAT) $< $@ + note.o: $(TARGET)-syms $(OBJCOPY) -O binary --only-section=.note.gnu.build-id $(BASEDIR)/xen-syms $@.bin $(OBJCOPY) -I binary -O elf64-x86-64 -B i386:x86-64 \ @@ -224,5 +231,6 @@ clean:: rm -f asm-offsets.s *.lds boot/*.o boot/*~ boot/core boot/mkelf32 rm -f $(BASEDIR)/.xen-syms.[0-9]* boot/.*.d rm -f $(BASEDIR)/.xen.efi.[0-9]* efi/*.efi efi/disabled efi/mkreloc + rm -f $(BASEDIR)/xen-shim rm -f boot/cmdline.S boot/reloc.S boot/*.lnk boot/*.bin rm -f note.o diff --git a/xen/arch/x86/boot/head.S b/xen/arch/x86/boot/head.S index 475c678f2c..6810422435 100644 --- a/xen/arch/x86/boot/head.S +++ b/xen/arch/x86/boot/head.S @@ -7,6 +7,7 @@ #include <asm/page.h> #include <asm/msr.h> #include <asm/cpufeature.h> +#include <public/elfnote.h> .text .code32 @@ -374,6 +375,15 @@ cs32_switch: /* Jump to earlier loaded address. */ jmp *%edi + +#ifdef CONFIG_PVH_GUEST +ELFNOTE(Xen, XEN_ELFNOTE_PHYS32_ENTRY, .long sym_offs(__pvh_start)) + +__pvh_start: + ud2a + +#endif /* CONFIG_PVH_GUEST */ + __start: cld cli diff --git a/xen/arch/x86/xen.lds.S b/xen/arch/x86/xen.lds.S index 400d8a56c4..d880b0a61a 100644 --- a/xen/arch/x86/xen.lds.S +++ b/xen/arch/x86/xen.lds.S @@ -34,7 +34,7 @@ OUTPUT_ARCH(i386:x86-64) PHDRS { text PT_LOAD ; -#if defined(BUILD_ID) && !defined(EFI) +#if (defined(BUILD_ID) && !defined(EFI)) || defined (CONFIG_PVH_GUEST) note PT_NOTE ; #endif } @@ -128,6 +128,12 @@ SECTIONS __param_end = .; } :text +#if defined(CONFIG_PVH_GUEST) && !defined(EFI) + DECL_SECTION(.note.Xen) { + *(.note.Xen) + } :note :text +#endif + #if defined(BUILD_ID) #if !defined(EFI) /* @@ -279,6 +285,7 @@ SECTIONS #ifdef EFI *(.comment) *(.comment.*) + *(.note.Xen) #endif } -- 2.11.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |