[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[XEN PATCH v2] build: Fix x86 out-of-tree build without EFI


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Anthony PERARD <anthony.perard@xxxxxxxxxx>
  • Date: Wed, 17 Aug 2022 10:15:40 +0100
  • Authentication-results: esa2.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none
  • Cc: Anthony PERARD <anthony.perard@xxxxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, George Dunlap <george.dunlap@xxxxxxxxxx>, "Jan Beulich" <jbeulich@xxxxxxxx>, Julien Grall <julien@xxxxxxx>, "Stefano Stabellini" <sstabellini@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Delivery-date: Wed, 17 Aug 2022 09:15:59 +0000
  • Ironport-data: A9a23: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
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

We can't have a source file with the same name that exist in both the
common code and in the arch specific code for efi/. This can lead to
comfusion in make and it can pick up the wrong source file. This issue
lead to a failure to build a pv-shim for x86 out-of-tree, as this is
one example of an x86 build using the efi/stub.c.

The issue is that in out-of-tree, make might find x86/efi/stub.c via
VPATH, but as the target needs to be rebuilt due to FORCE, make
actually avoid changing the source tree and rebuilt the target with
VPATH ignored, so $@ lead to the build tree where "stub.c" dosen't
exist yet so a link is made to "common/stub.c".

Rework the new common/stub.c file to have a different name than the
already existing one, by renaming the existing one. We will take
example of efi/boot.c and have the common stub.c include a per-arch
stub.h. This at least avoid the need to expose to Arm both alias
efi_compat_get_info and efi_compat_runtime_call.

Avoid using $(EFIOBJ-y) as an alias for $(clean-files), add
"stub.c" directly to $(clean-files).

Also update .gitignore as this was also missing from the original
patch.

Fixes: 7f96859b0d00 ("xen: reuse x86 EFI stub functions for Arm")
Reported-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
---

Notes:
    v2:
    - instead of renaming common/efi/stub.c to common_stub.c; we rename
      arch/*/efi/stub.c to stub.h and include it from common/stub.c
    - update .gitignore
    
    CC: Jan Beulich <jbeulich@xxxxxxxx>
    CC: Wei Chen <wei.chen@xxxxxxx>

 xen/arch/arm/efi/Makefile           | 4 ----
 xen/common/efi/efi-common.mk        | 4 ++--
 xen/arch/arm/efi/stub.h             | 4 ++++
 xen/arch/x86/efi/{stub.c => stub.h} | 5 ++++-
 xen/common/efi/stub.c               | 5 +++++
 .gitignore                          | 1 +
 6 files changed, 16 insertions(+), 7 deletions(-)
 create mode 100644 xen/arch/arm/efi/stub.h
 rename xen/arch/x86/efi/{stub.c => stub.h} (93%)

diff --git a/xen/arch/arm/efi/Makefile b/xen/arch/arm/efi/Makefile
index bd954a3b2d..ff1bcd6c50 100644
--- a/xen/arch/arm/efi/Makefile
+++ b/xen/arch/arm/efi/Makefile
@@ -4,10 +4,6 @@ ifeq ($(CONFIG_ARM_EFI),y)
 obj-y += $(EFIOBJ-y)
 obj-$(CONFIG_ACPI) +=  efi-dom0.init.o
 else
-# Add stub.o to EFIOBJ-y to re-use the clean-files in
-# efi-common.mk. Otherwise the link of stub.c in arm/efi
-# will not be cleaned in "make clean".
-EFIOBJ-y += stub.o
 obj-y += stub.o
 
 $(obj)/stub.o: CFLAGS-y += -fno-short-wchar
diff --git a/xen/common/efi/efi-common.mk b/xen/common/efi/efi-common.mk
index ec2c34f198..950f564575 100644
--- a/xen/common/efi/efi-common.mk
+++ b/xen/common/efi/efi-common.mk
@@ -9,9 +9,9 @@ CFLAGS-y += -iquote $(srcdir)
 # e.g.: It transforms "dir/foo/bar" into successively
 #       "dir foo bar", ".. .. ..", "../../.."
 $(obj)/%.c: $(srctree)/common/efi/%.c FORCE
-       $(Q)test -f $@ || \
-           ln -nfs $(subst $(space),/,$(patsubst %,..,$(subst /, 
,$(obj))))/source/common/efi/$(<F) $@
+       $(Q)ln -nfs $(subst $(space),/,$(patsubst %,..,$(subst /, 
,$(obj))))/source/common/efi/$(<F) $@
 
 clean-files += $(patsubst %.o, %.c, $(EFIOBJ-y:.init.o=.o) $(EFIOBJ-))
+clean-files += stub.c
 
 .PRECIOUS: $(obj)/%.c
diff --git a/xen/arch/arm/efi/stub.h b/xen/arch/arm/efi/stub.h
new file mode 100644
index 0000000000..b0a9b03e59
--- /dev/null
+++ b/xen/arch/arm/efi/stub.h
@@ -0,0 +1,4 @@
+/*
+ * Architecture specific implementation for EFI stub code.  This file
+ * is intended to be included by common/efi/stub.c _only_.
+ */
diff --git a/xen/arch/x86/efi/stub.c b/xen/arch/x86/efi/stub.h
similarity index 93%
rename from xen/arch/x86/efi/stub.c
rename to xen/arch/x86/efi/stub.h
index f2365bc041..9d2845b833 100644
--- a/xen/arch/x86/efi/stub.c
+++ b/xen/arch/x86/efi/stub.h
@@ -1,3 +1,7 @@
+/*
+ * Architecture specific implementation for EFI stub code.  This file
+ * is intended to be included by common/efi/stub.c _only_.
+ */
 #include <xen/efi.h>
 #include <xen/init.h>
 #include <asm/asm_defns.h>
@@ -8,7 +12,6 @@
 #include <efi/eficon.h>
 #include <efi/efidevp.h>
 #include <efi/efiapi.h>
-#include "../../../common/efi/stub.c"
 
 /*
  * Here we are in EFI stub. EFI calls are not supported due to lack
diff --git a/xen/common/efi/stub.c b/xen/common/efi/stub.c
index 15694632c2..854efd9c99 100644
--- a/xen/common/efi/stub.c
+++ b/xen/common/efi/stub.c
@@ -30,3 +30,8 @@ int efi_runtime_call(struct xenpf_efi_runtime_call *op)
 {
     return -ENOSYS;
 }
+
+/*
+ * Include architecture specific implementation here.
+ */
+#include "stub.h"
diff --git a/.gitignore b/.gitignore
index ed7bd8bdc7..3a91e79672 100644
--- a/.gitignore
+++ b/.gitignore
@@ -311,6 +311,7 @@ xen/arch/*/efi/ebmalloc.c
 xen/arch/*/efi/efi.h
 xen/arch/*/efi/pe.c
 xen/arch/*/efi/runtime.c
+xen/arch/*/efi/stub.c
 xen/arch/*/include/asm/asm-offsets.h
 xen/common/config_data.S
 xen/common/config.gz
-- 
Anthony PERARD




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.