[v14,2/9] efi: build xen.gz with EFI code
diff mbox

Message ID 20170202224153.GX16671@olila.local.net-space.pl
State New, archived
Headers show

Commit Message

Daniel Kiper Feb. 2, 2017, 10:41 p.m. UTC
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:

Comments

Doug Goldstein Feb. 2, 2017, 10:46 p.m. UTC | #1
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
Daniel Kiper Feb. 2, 2017, 10:56 p.m. UTC | #2
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

Patch
diff mbox

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