|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [XEN PATCH v2] build: Fix x86 out-of-tree build without EFI
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
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |