All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nikos Nikoleris <nikos.nikoleris@arm.com>
To: kvm@vger.kernel.org, kvmarm@lists.linux.dev, andrew.jones@linux.dev
Cc: pbonzini@redhat.com, alexandru.elisei@arm.com,
	ricarkol@google.com, shahuang@redhat.com
Subject: [kvm-unit-tests PATCH v6 28/32] arm64: Add support for efi in Makefile
Date: Tue, 30 May 2023 17:09:20 +0100	[thread overview]
Message-ID: <20230530160924.82158-29-nikos.nikoleris@arm.com> (raw)
In-Reply-To: <20230530160924.82158-1-nikos.nikoleris@arm.com>

Users can now build kvm-unit-tests as efi apps by supplying an extra
argument when invoking configure:

$> ./configure --enable-efi

This patch is based on an earlier version by
Andrew Jones <drjones@redhat.com>

Signed-off-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Reviewed-by: Ricardo Koller <ricarkol@google.com>
Reviewed-by: Shaoqin Huang <shahuang@redhat.com>
---
 configure           | 17 +++++++++++++----
 arm/Makefile.arm    |  6 ++++++
 arm/Makefile.arm64  | 18 ++++++++++++++----
 arm/Makefile.common | 45 ++++++++++++++++++++++++++++++++++-----------
 4 files changed, 67 insertions(+), 19 deletions(-)

diff --git a/configure b/configure
index c36fd290..b665f7d5 100755
--- a/configure
+++ b/configure
@@ -86,7 +86,7 @@ usage() {
 	               pl011,mmio32,ADDR
 	                           Specify a PL011 compatible UART at address ADDR. Supported
 	                           register stride is 32 bit only.
-	    --[enable|disable]-efi Boot and run from UEFI (disabled by default, x86_64 only)
+	    --[enable|disable]-efi Boot and run from UEFI (disabled by default, x86_64 and arm64 only)
 	    --[enable|disable]-werror
 	                           Select whether to compile with the -Werror compiler flag
 EOF
@@ -208,14 +208,19 @@ else
     fi
 fi
 
-if [ "$efi" ] && [ "$arch" != "x86_64" ]; then
+if [ "$efi" ] && [ "$arch" != "x86_64" ] && [ "$arch" != "arm64" ]; then
     echo "--[enable|disable]-efi is not supported for $arch"
     usage
 fi
 
 if [ -z "$page_size" ]; then
-    [ "$arch" = "arm64" ] && page_size="65536"
-    [ "$arch" = "arm" ] && page_size="4096"
+    if [ "$efi" = 'y' ] && [ "$arch" = "arm64" ]; then
+        page_size="4096"
+    elif [ "$arch" = "arm64" ]; then
+        page_size="65536"
+    elif [ "$arch" = "arm" ]; then
+        page_size="4096"
+    fi
 else
     if [ "$arch" != "arm64" ]; then
         echo "--page-size is not supported for $arch"
@@ -230,6 +235,10 @@ else
         echo "arm64 doesn't support page size of $page_size"
         usage
     fi
+    if [ "$efi" = 'y' ] && [ "$page_size" != "4096" ]; then
+        echo "efi must use 4K pages"
+        exit 1
+    fi
 fi
 
 [ -z "$processor" ] && processor="$arch"
diff --git a/arm/Makefile.arm b/arm/Makefile.arm
index 01fd4c7b..2ce00f52 100644
--- a/arm/Makefile.arm
+++ b/arm/Makefile.arm
@@ -7,6 +7,10 @@ bits = 32
 ldarch = elf32-littlearm
 machine = -marm -mfpu=vfp
 
+ifeq ($(CONFIG_EFI),y)
+$(error Cannot build arm32 tests as EFI apps)
+endif
+
 # stack.o relies on frame pointers.
 KEEP_FRAME_POINTER := y
 
@@ -32,6 +36,8 @@ cflatobjs += lib/arm/stack.o
 cflatobjs += lib/ldiv32.o
 cflatobjs += lib/arm/ldivmod.o
 
+exe = flat
+
 # arm specific tests
 tests =
 
diff --git a/arm/Makefile.arm64 b/arm/Makefile.arm64
index 6dff6cad..eada7f9a 100644
--- a/arm/Makefile.arm64
+++ b/arm/Makefile.arm64
@@ -31,11 +31,21 @@ endif
 
 OBJDIRS += lib/arm64
 
+ifeq ($(CONFIG_EFI),y)
+# avoid jump tables before all relocations have been processed
+arm/efi/reloc_aarch64.o: CFLAGS += -fno-jump-tables
+cflatobjs += arm/efi/reloc_aarch64.o
+
+exe = efi
+else
+exe = flat
+endif
+
 # arm64 specific tests
-tests = $(TEST_DIR)/timer.flat
-tests += $(TEST_DIR)/micro-bench.flat
-tests += $(TEST_DIR)/cache.flat
-tests += $(TEST_DIR)/debug.flat
+tests = $(TEST_DIR)/timer.$(exe)
+tests += $(TEST_DIR)/micro-bench.$(exe)
+tests += $(TEST_DIR)/cache.$(exe)
+tests += $(TEST_DIR)/debug.$(exe)
 
 include $(SRCDIR)/$(TEST_DIR)/Makefile.common
 
diff --git a/arm/Makefile.common b/arm/Makefile.common
index 647b0fb1..a133309d 100644
--- a/arm/Makefile.common
+++ b/arm/Makefile.common
@@ -4,14 +4,14 @@
 # Authors: Andrew Jones <drjones@redhat.com>
 #
 
-tests-common  = $(TEST_DIR)/selftest.flat
-tests-common += $(TEST_DIR)/spinlock-test.flat
-tests-common += $(TEST_DIR)/pci-test.flat
-tests-common += $(TEST_DIR)/pmu.flat
-tests-common += $(TEST_DIR)/gic.flat
-tests-common += $(TEST_DIR)/psci.flat
-tests-common += $(TEST_DIR)/sieve.flat
-tests-common += $(TEST_DIR)/pl031.flat
+tests-common  = $(TEST_DIR)/selftest.$(exe)
+tests-common += $(TEST_DIR)/spinlock-test.$(exe)
+tests-common += $(TEST_DIR)/pci-test.$(exe)
+tests-common += $(TEST_DIR)/pmu.$(exe)
+tests-common += $(TEST_DIR)/gic.$(exe)
+tests-common += $(TEST_DIR)/psci.$(exe)
+tests-common += $(TEST_DIR)/sieve.$(exe)
+tests-common += $(TEST_DIR)/pl031.$(exe)
 
 tests-all = $(tests-common) $(tests)
 all: directories $(tests-all)
@@ -54,6 +54,9 @@ cflatobjs += lib/arm/smp.o
 cflatobjs += lib/arm/delay.o
 cflatobjs += lib/arm/gic.o lib/arm/gic-v2.o lib/arm/gic-v3.o
 cflatobjs += lib/arm/timer.o
+ifeq ($(CONFIG_EFI),y)
+cflatobjs += lib/efi.o
+endif
 
 OBJDIRS += lib/arm
 
@@ -61,6 +64,25 @@ libeabi = lib/arm/libeabi.a
 eabiobjs = lib/arm/eabi_compat.o
 
 FLATLIBS = $(libcflat) $(LIBFDT_archive) $(libeabi)
+
+ifeq ($(CONFIG_EFI),y)
+%.so: EFI_LDFLAGS += -defsym=EFI_SUBSYSTEM=0xa --no-undefined
+%.so: %.o $(FLATLIBS) $(SRCDIR)/arm/efi/elf_aarch64_efi.lds $(cstart.o)
+	$(CC) $(CFLAGS) -c -o $(@:.so=.aux.o) $(SRCDIR)/lib/auxinfo.c \
+		-DPROGNAME=\"$(@:.so=.efi)\" -DAUXFLAGS=$(AUXFLAGS)
+	$(LD) $(EFI_LDFLAGS) -o $@ -T $(SRCDIR)/arm/efi/elf_aarch64_efi.lds \
+		$(filter %.o, $^) $(FLATLIBS) $(@:.so=.aux.o) \
+		$(EFI_LIBS)
+	$(RM) $(@:.so=.aux.o)
+
+%.efi: %.so
+	$(call arch_elf_check, $^)
+	$(OBJCOPY) \
+		-j .text -j .sdata -j .data -j .dynamic -j .dynsym \
+		-j .rel -j .rela -j .rel.* -j .rela.* -j .rel* -j .rela* \
+		-j .reloc \
+		-O binary $^ $@
+else
 %.elf: LDFLAGS = -nostdlib $(arch_LDFLAGS)
 %.elf: %.o $(FLATLIBS) $(SRCDIR)/arm/flat.lds $(cstart.o)
 	$(CC) $(CFLAGS) -c -o $(@:.elf=.aux.o) $(SRCDIR)/lib/auxinfo.c \
@@ -74,13 +96,14 @@ FLATLIBS = $(libcflat) $(LIBFDT_archive) $(libeabi)
 	$(call arch_elf_check, $^)
 	$(OBJCOPY) -O binary $^ $@
 	@chmod a-x $@
+endif
 
 $(libeabi): $(eabiobjs)
 	$(AR) rcs $@ $^
 
 arm_clean: asm_offsets_clean
-	$(RM) $(TEST_DIR)/*.{o,flat,elf} $(libeabi) $(eabiobjs) \
-	      $(TEST_DIR)/.*.d lib/arm/.*.d
+	$(RM) $(TEST_DIR)/*.{o,flat,elf,so,efi} $(libeabi) $(eabiobjs) \
+	      $(TEST_DIR)/.*.d $(TEST_DIR)/efi/.*.d lib/arm/.*.d
 
 generated-files = $(asm-offsets)
-$(tests-all:.flat=.o) $(cstart.o) $(cflatobjs): $(generated-files)
+$(tests-all:.$(exe)=.o) $(cstart.o) $(cflatobjs): $(generated-files)
-- 
2.25.1


  parent reply	other threads:[~2023-05-30 16:11 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-30 16:08 [kvm-unit-tests PATCH v6 00/32] EFI and ACPI support for arm64 Nikos Nikoleris
2023-05-30 16:08 ` [kvm-unit-tests PATCH v6 01/32] lib: Move acpi header and implementation to lib Nikos Nikoleris
2023-05-30 16:08 ` [kvm-unit-tests PATCH v6 02/32] x86: Move x86_64-specific EFI CFLAGS to x86_64 Makefile Nikos Nikoleris
2023-05-30 16:08 ` [kvm-unit-tests PATCH v6 03/32] lib: Apply Lindent to acpi.{c,h} Nikos Nikoleris
2023-05-30 16:08 ` [kvm-unit-tests PATCH v6 04/32] lib: Fix style for acpi.{c,h} Nikos Nikoleris
2023-05-30 16:08 ` [kvm-unit-tests PATCH v6 05/32] lib/acpi: Convert table names to Linux style Nikos Nikoleris
2023-05-30 16:08 ` [kvm-unit-tests PATCH v6 06/32] x86: Avoid references to fields of ACPI tables Nikos Nikoleris
2023-05-30 16:08 ` [kvm-unit-tests PATCH v6 07/32] lib/acpi: Ensure all struct definition for ACPI tables are packed Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 08/32] lib/acpi: Add support for the XSDT table Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 09/32] lib/acpi: Extend the definition of the FADT table Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 10/32] devicetree: Check that fdt is not NULL in dt_available() Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 11/32] arm64: Add support for setting up the PSCI conduit through ACPI Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 12/32] arm64: Add support for discovering the UART " Nikos Nikoleris
2023-06-08 17:18   ` Nadav Amit
2023-06-08 17:24     ` Nadav Amit
2023-06-09  7:21       ` Andrew Jones
2023-06-09 14:06         ` Nikos Nikoleris
2023-06-09 14:31           ` Andrew Jones
2023-06-10  1:13             ` Nadav Amit
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 13/32] arm64: Add support for timer initialization " Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 14/32] arm64: Add support for cpu " Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 15/32] arm64: Add support for gic " Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 16/32] lib/printf: Support for precision modifier in printf Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 17/32] lib/printf: Add support for printing wide strings Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 18/32] lib/efi: Add support for getting the cmdline Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 19/32] lib/efi: Add support for reading an FDT Nikos Nikoleris
2023-06-07 16:58   ` Andrew Jones
2023-06-08  6:55     ` Andrew Jones
2023-06-08  9:48       ` Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 20/32] arm/arm64: Rename etext to _etext Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 21/32] lib: Avoid ms_abi for calls related to EFI on arm64 Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 22/32] arm64: Add a new type of memory type flag MR_F_RESERVED Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 23/32] arm64: Add a setup sequence for systems that boot through EFI Nikos Nikoleris
2023-06-10  1:17   ` Nadav Amit
2023-06-12  7:54     ` Andrew Jones
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 24/32] arm64: Copy code from GNU-EFI Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 25/32] arm64: Change GNU-EFI imported code to use defined types Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 26/32] arm64: Use code from the gnu-efi when booting with EFI Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 27/32] lib: Avoid external dependency in libelf Nikos Nikoleris
2023-05-30 16:09 ` Nikos Nikoleris [this message]
2023-06-08 20:41   ` [kvm-unit-tests PATCH v6 28/32] arm64: Add support for efi in Makefile Nadav Amit
2023-06-09  7:36     ` Andrew Jones
2023-06-09 17:14       ` Nadav Amit
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 29/32] lib: arm: Print test exit status Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 30/32] arm64: debug: Make inline assembly symbols global Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 31/32] arm64: Add an efi/run script Nikos Nikoleris
2023-05-30 16:09 ` [kvm-unit-tests PATCH v6 32/32] arm64: Use the provided fdt when booting through EFI Nikos Nikoleris
2023-06-07 18:52 ` [kvm-unit-tests PATCH v6 00/32] EFI and ACPI support for arm64 Andrew Jones
2023-06-08  7:01 ` Andrew Jones
2023-06-10  8:32 ` Nadav Amit
2023-06-12  7:52   ` Andrew Jones
2023-06-12  9:52     ` Nikos Nikoleris
2023-06-12 10:41       ` Andrew Jones
2023-06-12 10:43         ` Nikos Nikoleris
2023-06-12 15:59       ` Nadav Amit
2023-06-12 21:53         ` Nikos Nikoleris
2023-06-13 11:21           ` Andrew Jones
2023-06-13 12:54             ` Nadav Amit
2023-07-01 12:18 ` Andrew Jones

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=20230530160924.82158-29-nikos.nikoleris@arm.com \
    --to=nikos.nikoleris@arm.com \
    --cc=alexandru.elisei@arm.com \
    --cc=andrew.jones@linux.dev \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.linux.dev \
    --cc=pbonzini@redhat.com \
    --cc=ricarkol@google.com \
    --cc=shahuang@redhat.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.