Message ID | 20170202224153.GX16671@olila.local.net-space.pl (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 2/2/17 4:41 PM, Daniel Kiper wrote: > On Thu, Feb 02, 2017 at 11:01:12PM +0100, Daniel Kiper wrote: >> Build xen.gz with EFI code. We need this to support multiboot2 >> protocol on EFI platforms. >> >> If we wish to load non-ELF file using multiboot (v1) or multiboot2 then >> it must contain "linear" (or "flat") representation of code and data. >> This is requirement of both boot protocols. Currently, PE file contains >> many sections which are not "linear" (one after another without any holes) >> or even do not have representation in a file (e.g. BSS). From EFI point >> of view everything is OK and works. However, this file layout cannot be >> properly interpreted by multiboot protocols family. In theory there is >> a chance that we could build proper PE file (from multiboot protocols POV) >> using current build system. However, it means that xen.efi further diverge >> from Xen ELF file (in terms of contents and build method). On the other >> hand ELF has all needed properties. So, it means that this is good starting >> point for further development. Additionally, I think that this is also good >> starting point for further xen.efi code and build optimizations. It looks >> that there is a chance that finally we can generate xen.efi directly from >> Xen ELF using just simple objcopy or other tool. This way we will have one >> Xen binary which can be loaded by three boot protocols: EFI native loader, >> multiboot (v1) and multiboot2. >> >> Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com> >> Acked-by: Jan Beulich <jbeulich@suse.com> >> Reviewed-by: Doug Goldstein <cardoe@cardoe.com> >> --- >> v14 - suggestions/fixes: >> - at least GNU Make 4.1 does not build efi/buildid.o if nothing >> depends on it; so, add "boot.init.o: buildid.o" dependency to >> force efi/buildid.o on some versions of make; I hope that this >> small change does not invalidate Acked-by/Reviewed-by; however, >> I am dropping Tested-by >> (discovered by Konrad Rzeszutek Wilk and Marcos Matsunaga). > > Diff as Doug asked: > > diff --git a/xen/arch/x86/efi/Makefile b/xen/arch/x86/efi/Makefile > index 442f3fc..3edff1c 100644 > --- a/xen/arch/x86/efi/Makefile > +++ b/xen/arch/x86/efi/Makefile > @@ -8,6 +8,8 @@ efi := $(if $(efi),$(shell rm disabled)y) > %.o: %.ihex > $(OBJCOPY) -I ihex -O binary $< $@ > > +boot.init.o: buildid.o > + > obj-y := stub.o > obj-$(efi) := boot.init.o compat.o relocs-dummy.o runtime.o > extra-$(efi) += buildid.o > FWIW, I had a similar fix for this cause I ran into it earlier today. I used runtime.o but I've switched to using boot.init.o so as to not conflict with you. This issue affects a lot more than this series so I'm going to mail mine once the tests finish at: https://travis-ci.org/cardoe/xen/builds/197819721
On Thu, Feb 02, 2017 at 04:46:14PM -0600, Doug Goldstein wrote: > On 2/2/17 4:41 PM, Daniel Kiper wrote: > > On Thu, Feb 02, 2017 at 11:01:12PM +0100, Daniel Kiper wrote: > >> Build xen.gz with EFI code. We need this to support multiboot2 > >> protocol on EFI platforms. > >> > >> If we wish to load non-ELF file using multiboot (v1) or multiboot2 then > >> it must contain "linear" (or "flat") representation of code and data. > >> This is requirement of both boot protocols. Currently, PE file contains > >> many sections which are not "linear" (one after another without any holes) > >> or even do not have representation in a file (e.g. BSS). From EFI point > >> of view everything is OK and works. However, this file layout cannot be > >> properly interpreted by multiboot protocols family. In theory there is > >> a chance that we could build proper PE file (from multiboot protocols POV) > >> using current build system. However, it means that xen.efi further diverge > >> from Xen ELF file (in terms of contents and build method). On the other > >> hand ELF has all needed properties. So, it means that this is good starting > >> point for further development. Additionally, I think that this is also good > >> starting point for further xen.efi code and build optimizations. It looks > >> that there is a chance that finally we can generate xen.efi directly from > >> Xen ELF using just simple objcopy or other tool. This way we will have one > >> Xen binary which can be loaded by three boot protocols: EFI native loader, > >> multiboot (v1) and multiboot2. > >> > >> Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com> > >> Acked-by: Jan Beulich <jbeulich@suse.com> > >> Reviewed-by: Doug Goldstein <cardoe@cardoe.com> > >> --- > >> v14 - suggestions/fixes: > >> - at least GNU Make 4.1 does not build efi/buildid.o if nothing > >> depends on it; so, add "boot.init.o: buildid.o" dependency to > >> force efi/buildid.o on some versions of make; I hope that this > >> small change does not invalidate Acked-by/Reviewed-by; however, > >> I am dropping Tested-by > >> (discovered by Konrad Rzeszutek Wilk and Marcos Matsunaga). > > > > Diff as Doug asked: > > > > diff --git a/xen/arch/x86/efi/Makefile b/xen/arch/x86/efi/Makefile > > index 442f3fc..3edff1c 100644 > > --- a/xen/arch/x86/efi/Makefile > > +++ b/xen/arch/x86/efi/Makefile > > @@ -8,6 +8,8 @@ efi := $(if $(efi),$(shell rm disabled)y) > > %.o: %.ihex > > $(OBJCOPY) -I ihex -O binary $< $@ > > > > +boot.init.o: buildid.o > > + > > obj-y := stub.o > > obj-$(efi) := boot.init.o compat.o relocs-dummy.o runtime.o > > extra-$(efi) += buildid.o > > > > FWIW, I had a similar fix for this cause I ran into it earlier today. I > used runtime.o but I've switched to using boot.init.o so as to not > conflict with you. This issue affects a lot more than this series so I'm Great! Thanks a lot! > going to mail mine once the tests finish at: > > https://travis-ci.org/cardoe/xen/builds/197819721 I am OK with it. If you wish you can add my Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com> to this patch. Daniel
diff --git a/xen/arch/x86/efi/Makefile b/xen/arch/x86/efi/Makefile index 442f3fc..3edff1c 100644 --- a/xen/arch/x86/efi/Makefile +++ b/xen/arch/x86/efi/Makefile @@ -8,6 +8,8 @@ efi := $(if $(efi),$(shell rm disabled)y) %.o: %.ihex $(OBJCOPY) -I ihex -O binary $< $@ +boot.init.o: buildid.o + obj-y := stub.o obj-$(efi) := boot.init.o compat.o relocs-dummy.o runtime.o extra-$(efi) += buildid.o