xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Daniel Kiper <daniel.kiper@oracle.com>
To: xen-devel@lists.xenproject.org, grub-devel@gnu.org
Cc: jgross@suse.com, keir@xen.org, ian.campbell@citrix.com,
	andrew.cooper3@citrix.com, stefano.stabellini@eu.citrix.com,
	roy.franz@linaro.org, ning.sun@intel.com,
	david.vrabel@citrix.com, jbeulich@suse.com, phcoder@gmail.com,
	wei.liu2@citrix.com, qiaowei.ren@intel.com,
	richard.l.maliszewski@intel.com, gang.wei@intel.com,
	fu.wei@linaro.org
Subject: [PATCH v2 10/23] efi: build xen.gz with EFI code
Date: Mon, 20 Jul 2015 16:29:05 +0200	[thread overview]
Message-ID: <1437402558-7313-11-git-send-email-daniel.kiper__17376.640221528$1437402770$gmane$org@oracle.com> (raw)
In-Reply-To: <1437402558-7313-1-git-send-email-daniel.kiper@oracle.com>

Build xen.gz with EFI code. We need this to support multiboot2
protocol on EFI platforms.

If we wish to load not ELF file using multiboot (v1) or multiboot2 then
it must contain "linear" (or "flat") representation of code and data.
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). In theory there is a chance that we could build
proper PE file using current build system. However, it means that
xen.efi further diverge from xen ELF file (in terms of contents and
build method). ELF have 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.

Signed-off-by: Daniel Kiper <daniel.kiper@oracle.com>
---
v2 - suggestions/fixes:
   - build EFI code only if it is supported in a given build environment
     (suggested by Jan Beulich).
---
 xen/arch/x86/Makefile     |   13 +++++--------
 xen/arch/x86/efi/Makefile |   16 +++++++++-------
 xen/arch/x86/mm.c         |    3 ++-
 xen/common/efi/runtime.c  |    6 ++++++
 4 files changed, 22 insertions(+), 16 deletions(-)

diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 5f24951..0335445 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -80,7 +80,7 @@ ALL_OBJS := $(BASEDIR)/arch/x86/boot/built_in.o $(BASEDIR)/arch/x86/efi/built_in
 
 ifeq ($(lto),y)
 # Gather all LTO objects together
-prelink_lto.o: $(ALL_OBJS)
+prelink_lto.o: $(ALL_OBJS) efi/relocs-dummy.o
 	$(LD_LTO) -r -o $@ $^
 
 prelink-efi_lto.o: $(ALL_OBJS) efi/runtime.o efi/compat.o
@@ -90,14 +90,14 @@ prelink-efi_lto.o: $(ALL_OBJS) efi/runtime.o efi/compat.o
 prelink.o: $(patsubst %/built_in.o,%/built_in_bin.o,$(ALL_OBJS)) prelink_lto.o
 	$(LD) $(LDFLAGS) -r -o $@ $^
 
-prelink-efi.o: $(patsubst %/built_in.o,%/built_in_bin.o,$(ALL_OBJS)) prelink-efi_lto.o efi/boot.init.o
+prelink-efi.o: $(patsubst %/built_in.o,%/built_in_bin.o,$(ALL_OBJS)) prelink-efi_lto.o
 	$(guard) $(LD) $(LDFLAGS) -r -o $@ $^
 else
-prelink.o: $(ALL_OBJS)
+prelink.o: $(ALL_OBJS) efi/relocs-dummy.o
 	$(LD) $(LDFLAGS) -r -o $@ $^
 
-prelink-efi.o: $(ALL_OBJS) efi/boot.init.o efi/runtime.o efi/compat.o
-	$(guard) $(LD) $(LDFLAGS) -r -o $@ $(filter-out %/efi/built_in.o,$^)
+prelink-efi.o: $(ALL_OBJS)
+	$(guard) $(LD) $(LDFLAGS) -r -o $@ $^
 endif
 
 $(BASEDIR)/common/symbols-dummy.o:
@@ -146,9 +146,6 @@ $(TARGET).efi: prelink-efi.o efi.lds efi/relocs-dummy.o $(BASEDIR)/common/symbol
 	if $(guard) false; then rm -f $@; echo 'EFI support disabled'; fi
 	rm -f $(@D)/.$(@F).[0-9]*
 
-efi/boot.init.o efi/runtime.o efi/compat.o: $(BASEDIR)/arch/x86/efi/built_in.o
-efi/boot.init.o efi/runtime.o efi/compat.o: ;
-
 asm-offsets.s: $(TARGET_SUBARCH)/asm-offsets.c
 	$(CC) $(filter-out -flto,$(CFLAGS)) -S -o $@ $<
 
diff --git a/xen/arch/x86/efi/Makefile b/xen/arch/x86/efi/Makefile
index 1daa7ac..b1e8883 100644
--- a/xen/arch/x86/efi/Makefile
+++ b/xen/arch/x86/efi/Makefile
@@ -1,14 +1,16 @@
 CFLAGS += -fshort-wchar
 
-obj-y += stub.o
-
-create = test -e $(1) || touch -t 199901010000 $(1)
-
 efi := $(filter y,$(x86_64)$(shell rm -f disabled))
 efi := $(if $(efi),$(shell $(CC) $(filter-out $(CFLAGS-y) .%.d,$(CFLAGS)) -c check.c 2>disabled && echo y))
 efi := $(if $(efi),$(shell $(LD) -mi386pep --subsystem=10 -o check.efi check.o 2>disabled && echo y))
-efi := $(if $(efi),$(shell rm disabled)y,$(shell $(call create,boot.init.o); $(call create,runtime.o)))
+efi := $(if $(efi),$(shell rm disabled)y)
 
-extra-$(efi) += boot.init.o relocs-dummy.o runtime.o compat.o
+extra-y += relocs-dummy.o
 
-stub.o: $(extra-y)
+ifeq ($(efi),y)
+obj-y += boot.init.o
+obj-y += compat.o
+obj-y += runtime.o
+else
+obj-y += stub.o
+endif
diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
index 342414f..cef2eb6 100644
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -344,7 +344,8 @@ void __init arch_init_memory(void)
 
     subarch_init_memory();
 
-    efi_init_memory();
+    if ( efi_enabled(EFI_PLATFORM) )
+        efi_init_memory();
 
     mem_sharing_init();
 
diff --git a/xen/common/efi/runtime.c b/xen/common/efi/runtime.c
index aa064e7..3eb21c1 100644
--- a/xen/common/efi/runtime.c
+++ b/xen/common/efi/runtime.c
@@ -167,6 +167,9 @@ int efi_get_info(uint32_t idx, union xenpf_efi_info *info)
 {
     unsigned int i, n;
 
+    if ( !efi_enabled(EFI_PLATFORM) )
+        return -EOPNOTSUPP;
+
     switch ( idx )
     {
     case XEN_FW_EFI_VERSION:
@@ -301,6 +304,9 @@ int efi_runtime_call(struct xenpf_efi_runtime_call *op)
     EFI_STATUS status = EFI_NOT_STARTED;
     int rc = 0;
 
+    if ( !efi_enabled(EFI_PLATFORM) )
+        return -EOPNOTSUPP;
+
     switch ( op->function )
     {
     case XEN_EFI_get_time:
-- 
1.7.10.4

  parent reply	other threads:[~2015-07-20 14:31 UTC|newest]

Thread overview: 116+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1437402558-7313-1-git-send-email-daniel.kiper@oracle.com>
2015-07-20 14:28 ` [PATCH v2 01/23] x86/boot: remove unneeded instruction Daniel Kiper
2015-07-20 14:28 ` [PATCH v2 02/23] x86/boot: copy only text section from *.lnk file to *.bin file Daniel Kiper
2015-07-20 14:28 ` [PATCH v2 03/23] x86: zero BSS using stosl instead of stosb Daniel Kiper
2015-07-20 14:28 ` [PATCH v2 04/23] x86/boot: call reloc() using cdecl calling convention Daniel Kiper
2015-07-20 14:29 ` [PATCH v2 05/23] x86/boot/reloc: create generic alloc and copy functions Daniel Kiper
2015-07-20 14:29 ` [PATCH v2 06/23] x86/boot: use %ecx instead of %eax Daniel Kiper
2015-07-20 14:29 ` [PATCH v2 07/23] x86/boot/reloc: Rename some variables and rearrange code a bit Daniel Kiper
2015-07-20 14:29 ` [PATCH v2 08/23] x86: add multiboot2 protocol support Daniel Kiper
2015-08-10 19:17   ` Konrad Rzeszutek Wilk
     [not found]   ` <20150810191747.GE13576@l.oracle.com>
2015-08-13 19:22     ` Daniel Kiper
     [not found]     ` <20150813192212.GI3503@olila.local.net-space.pl>
2015-08-14 10:03       ` Jan Beulich
     [not found]       ` <55CDD8F4020000780009AF3C@prv-mh.provo.novell.com>
2015-08-15  6:00         ` Andrew Cooper
2015-08-18  8:12   ` Jan Beulich
2015-08-18 12:00     ` Daniel Kiper
2015-08-18 14:20       ` Jan Beulich
2015-07-20 14:29 ` [PATCH v2 09/23] efi: create efi_enabled() Daniel Kiper
2015-08-10 19:20   ` Konrad Rzeszutek Wilk
2015-08-20 15:18   ` Jan Beulich
2015-08-22 12:33     ` Daniel Kiper
     [not found]     ` <20150822123359.GX7143@olila.local.net-space.pl>
2015-08-24 11:29       ` Jan Beulich
2015-07-20 14:29 ` Daniel Kiper [this message]
2015-07-20 14:29 ` [PATCH v2 11/23] efi: split out efi_init() Daniel Kiper
2015-08-10 19:25   ` Konrad Rzeszutek Wilk
2015-07-20 14:29 ` [PATCH v2 12/23] efi: split out efi_console_set_mode() Daniel Kiper
2015-07-20 14:29 ` [PATCH v2 13/23] efi: split out efi_get_gop() Daniel Kiper
2015-07-20 14:29 ` [PATCH v2 14/23] efi: split out efi_find_gop_mode() Daniel Kiper
2015-08-10 19:31   ` Konrad Rzeszutek Wilk
2015-08-20 15:48   ` Jan Beulich
2015-07-20 14:29 ` [PATCH v2 15/23] efi: split out efi_tables() Daniel Kiper
2015-08-10 19:32   ` Konrad Rzeszutek Wilk
2015-07-20 14:29 ` [PATCH v2 16/23] efi: split out efi_variables() Daniel Kiper
2015-08-10 19:34   ` Konrad Rzeszutek Wilk
2015-07-20 14:29 ` [PATCH v2 17/23] efi: split out efi_set_gop_mode() Daniel Kiper
2015-08-10 19:34   ` Konrad Rzeszutek Wilk
2015-07-20 14:29 ` [PATCH v2 18/23] efi: split out efi_exit_boot() Daniel Kiper
2015-07-20 14:29 ` [PATCH v2 19/23] x86/efi: create new early memory allocator Daniel Kiper
2015-07-20 14:29 ` [PATCH v2 20/23] x86: add multiboot2 protocol support for EFI platforms Daniel Kiper
2015-08-10 20:07   ` Konrad Rzeszutek Wilk
2015-08-11 15:23   ` Konrad Rzeszutek Wilk
2015-08-27 12:01   ` Jan Beulich
     [not found]   ` <55DF1836020000780009D674@prv-mh.provo.novell.com>
2015-09-22 15:21     ` Daniel Kiper
2015-09-22 15:58       ` Jan Beulich
2015-07-20 14:29 ` [PATCH v2 21/23] x86/boot: implement early command line parser in C Daniel Kiper
2015-07-20 14:29 ` [PATCH v2 22/23] x86: make Xen early boot code relocatable Daniel Kiper
2015-07-20 14:29 ` [PATCH v2 23/23] x86: add multiboot2 protocol support for relocatable images Daniel Kiper
2015-08-11 16:56   ` Konrad Rzeszutek Wilk
     [not found]   ` <20150811165658.GC32231@l.oracle.com>
2015-08-14 11:57     ` Daniel Kiper
     [not found]     ` <20150814115701.GB8034@olila.local.net-space.pl>
2015-08-14 13:43       ` Konrad Rzeszutek Wilk
     [not found] ` <1437402558-7313-3-git-send-email-daniel.kiper@oracle.com>
2015-07-21  9:35   ` [PATCH v2 02/23] x86/boot: copy only text section from *.lnk file to *.bin file Jan Beulich
2015-07-21 17:23     ` Daniel Kiper
2015-07-22  5:14       ` Jan Beulich
2015-07-22  8:02       ` Jan Beulich
2015-07-22 13:31         ` Daniel Kiper
2015-07-22 14:07           ` Jan Beulich
     [not found] ` <1437402558-7313-4-git-send-email-daniel.kiper@oracle.com>
2015-07-21  9:37   ` [PATCH v2 03/23] x86: zero BSS using stosl instead of stosb Jan Beulich
2015-07-21 18:23     ` Daniel Kiper
2015-07-22  5:18       ` Jan Beulich
2015-07-22  8:42         ` Andrew Cooper
2015-07-22 10:04           ` Jan Beulich
2015-07-22 11:22             ` Andrew Cooper
2015-07-22 11:48               ` Jan Beulich
2015-07-21  9:39 ` [PATCH v2 00/23] x86: multiboot2 protocol support Jan Beulich
     [not found] ` <1437402558-7313-2-git-send-email-daniel.kiper@oracle.com>
2015-07-24 16:22   ` [PATCH v2 01/23] x86/boot: remove unneeded instruction Konrad Rzeszutek Wilk
     [not found]   ` <20150724162257.GB2220@l.oracle.com>
2015-07-27 19:46     ` Daniel Kiper
     [not found]     ` <20150727194608.GB3492@olila.local.net-space.pl>
2015-08-10 16:07       ` Konrad Rzeszutek Wilk
     [not found] ` <1437402558-7313-5-git-send-email-daniel.kiper@oracle.com>
2015-08-10 16:33   ` [PATCH v2 04/23] x86/boot: call reloc() using cdecl calling convention Konrad Rzeszutek Wilk
2015-08-17 15:44   ` Jan Beulich
     [not found] ` <1437402558-7313-7-git-send-email-daniel.kiper@oracle.com>
2015-08-10 16:36   ` [PATCH v2 06/23] x86/boot: use %ecx instead of %eax Konrad Rzeszutek Wilk
     [not found] ` <1437402558-7313-8-git-send-email-daniel.kiper@oracle.com>
2015-08-10 16:40   ` [PATCH v2 07/23] x86/boot/reloc: Rename some variables and rearrange code a bit Konrad Rzeszutek Wilk
2015-08-17 15:55   ` Jan Beulich
     [not found] ` <1437402558-7313-11-git-send-email-daniel.kiper@oracle.com>
2015-08-10 19:24   ` [PATCH v2 10/23] efi: build xen.gz with EFI code Konrad Rzeszutek Wilk
2015-08-20 15:39   ` Jan Beulich
2015-08-22 13:59     ` Daniel Kiper
     [not found]     ` <20150822135919.GY7143@olila.local.net-space.pl>
2015-08-24 11:35       ` Jan Beulich
2015-08-24 20:54         ` Daniel Kiper
     [not found]         ` <20150824205445.GG7143@olila.local.net-space.pl>
2015-08-25 10:50           ` Andrew Cooper
2015-08-25 12:09           ` Jan Beulich
     [not found]           ` <55DC485D.4030904@citrix.com>
2015-08-25 15:39             ` Daniel Kiper
     [not found]           ` <55DC7705020000780009CE76@prv-mh.provo.novell.com>
2015-08-25 16:31             ` Daniel Kiper
     [not found]             ` <20150825163141.GJ7143@olila.local.net-space.pl>
2015-08-26  6:46               ` Jan Beulich
     [not found]               ` <55DD7CDE020000780009D086@prv-mh.provo.novell.com>
2015-08-26 12:33                 ` Daniel Kiper
     [not found]                 ` <20150826123356.GB10861@olila.local.net-space.pl>
2015-08-26 12:40                   ` Jan Beulich
     [not found]                   ` <55DDCFD6020000780009D226@prv-mh.provo.novell.com>
2015-08-26 12:58                     ` Daniel Kiper
     [not found] ` <1437402558-7313-13-git-send-email-daniel.kiper@oracle.com>
2015-08-10 19:25   ` [PATCH v2 12/23] efi: split out efi_console_set_mode() Konrad Rzeszutek Wilk
     [not found] ` <1437402558-7313-14-git-send-email-daniel.kiper@oracle.com>
2015-08-10 19:27   ` [PATCH v2 13/23] efi: split out efi_get_gop() Konrad Rzeszutek Wilk
     [not found] ` <1437402558-7313-19-git-send-email-daniel.kiper@oracle.com>
2015-08-10 19:36   ` [PATCH v2 18/23] efi: split out efi_exit_boot() Konrad Rzeszutek Wilk
     [not found] ` <1437402558-7313-20-git-send-email-daniel.kiper@oracle.com>
2015-08-10 19:49   ` [PATCH v2 19/23] x86/efi: create new early memory allocator Konrad Rzeszutek Wilk
2015-08-27 11:23   ` Jan Beulich
     [not found] ` <1437402558-7313-6-git-send-email-daniel.kiper@oracle.com>
2015-08-17 15:51   ` [PATCH v2 05/23] x86/boot/reloc: create generic alloc and copy functions Jan Beulich
     [not found]   ` <55D21F3E020000780009B716@prv-mh.provo.novell.com>
2015-08-17 22:03     ` Daniel Kiper
     [not found] ` <1437402558-7313-22-git-send-email-daniel.kiper@oracle.com>
2015-08-10 20:31   ` [PATCH v2 21/23] x86/boot: implement early command line parser in C Konrad Rzeszutek Wilk
2015-08-11 14:43   ` Konrad Rzeszutek Wilk
2015-08-27 12:43   ` Jan Beulich
     [not found]   ` <55DF221B020000780009D6C6@prv-mh.provo.novell.com>
2015-09-22 17:03     ` Daniel Kiper
     [not found]     ` <20150922170332.GH3501@olila.local.net-space.pl>
2015-09-23  7:25       ` Jan Beulich
     [not found] ` <1437402558-7313-23-git-send-email-daniel.kiper@oracle.com>
2015-08-11 16:48   ` [PATCH v2 22/23] x86: make Xen early boot code relocatable Konrad Rzeszutek Wilk
     [not found]   ` <20150811164806.GB32231@l.oracle.com>
2015-08-14 11:52     ` Daniel Kiper
     [not found]     ` <20150814115205.GA8034@olila.local.net-space.pl>
2015-08-14 12:49       ` Jan Beulich
     [not found]       ` <55CDFFEE020000780009B0B0@prv-mh.provo.novell.com>
2015-08-14 13:59         ` Daniel Kiper
     [not found]         ` <20150814135904.GC8034@olila.local.net-space.pl>
2015-08-14 14:32           ` Jan Beulich
     [not found]           ` <55CE1805020000780009B1C0@prv-mh.provo.novell.com>
2015-08-14 14:37             ` Daniel Kiper
     [not found]             ` <20150814143729.GE8034@olila.local.net-space.pl>
2015-08-14 15:12               ` Jan Beulich
2015-08-14 15:20       ` Konrad Rzeszutek Wilk
2015-08-27 13:12   ` Jan Beulich
     [not found]   ` <55DF28E6020000780009D6E4@prv-mh.provo.novell.com>
2015-08-27 15:10     ` Daniel Kiper
     [not found]     ` <20150827151054.GI10944@olila.local.net-space.pl>
2015-08-27 15:29       ` Jan Beulich
     [not found]       ` <55DF48FB020000780009D83F@prv-mh.provo.novell.com>
2015-08-27 17:56         ` Ben Hildred
2015-08-27 18:04         ` Andrew Cooper
     [not found]         ` <55DF5125.20708@citrix.com>
2015-08-28  6:54           ` Jan Beulich
     [not found]           ` <55E021C4020000780009DA95@prv-mh.provo.novell.com>
2015-08-28 11:59             ` Andrew Cooper
     [not found]         ` <CAKcyEGpdnJUXA=uW4cNdcLn9xS7fUDowzzCbhn6c1yTh4WkPGg@mail.gmail.com>
2015-08-28  8:22           ` Jan Beulich
     [not found]           ` <55E03676020000780009DAFB@prv-mh.provo.novell.com>
2015-08-28 13:42             ` Konrad Rzeszutek Wilk
     [not found]             ` <20150828134214.GC2412@l.oracle.com>
2015-08-28 14:16               ` Jan Beulich
2015-08-31 19:49                 ` Daniel Kiper
     [not found]                 ` <20150831194956.GJ4530@olila.local.net-space.pl>
2015-09-01  6:59                   ` Jan Beulich
2015-08-28 14:24         ` Jan Beulich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='1437402558-7313-11-git-send-email-daniel.kiper__17376.640221528$1437402770$gmane$org@oracle.com' \
    --to=daniel.kiper@oracle.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=david.vrabel@citrix.com \
    --cc=fu.wei@linaro.org \
    --cc=gang.wei@intel.com \
    --cc=grub-devel@gnu.org \
    --cc=ian.campbell@citrix.com \
    --cc=jbeulich@suse.com \
    --cc=jgross@suse.com \
    --cc=keir@xen.org \
    --cc=ning.sun@intel.com \
    --cc=phcoder@gmail.com \
    --cc=qiaowei.ren@intel.com \
    --cc=richard.l.maliszewski@intel.com \
    --cc=roy.franz@linaro.org \
    --cc=stefano.stabellini@eu.citrix.com \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).