diff mbox series

[kvm-unit-tests,v2,10/10] x86 UEFI: Make _NO_FILE_4Uhere_ work w/ BOOTX64.EFI

Message ID 20211116204053.220523-11-zxwang42@gmail.com (mailing list archive)
State New, archived
Headers show
Series x86_64 UEFI set up process refactor and scripts fixes | expand

Commit Message

Zixuan Wang Nov. 16, 2021, 8:40 p.m. UTC
From: Marc Orr <marcorr@google.com>

The `_NO_FILE_4Uhere_` test case is used by the runner scripts to verify
QEMU's configuration. Make it work with EFI/BOOT/BOOTX64.EFI by compling
a minimal EFI binary, called dummy.c that returns immediately.

Signed-off-by: Marc Orr <marcorr@google.com>
---
 scripts/runtime.bash |  2 +-
 x86/efi/run          | 12 ++++++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)

Comments

Paolo Bonzini Jan. 18, 2022, 3:47 p.m. UTC | #1
On 11/16/21 21:40, Zixuan Wang wrote:
> From: Marc Orr <marcorr@google.com>
> 
> The `_NO_FILE_4Uhere_` test case is used by the runner scripts to verify
> QEMU's configuration. Make it work with EFI/BOOT/BOOTX64.EFI by compling
> a minimal EFI binary, called dummy.c that returns immediately.
> 
> Signed-off-by: Marc Orr <marcorr@google.com>

A slightly simpler way to do it is to just let the normal build process
create dummy.efi as well:

commit 2fbec25780568559e13486f7e5b5350630d061d3 (HEAD -> uefi)
Author: Marc Orr <marcorr@google.com>
Date:   Tue Nov 16 12:40:53 2021 -0800

     x86 UEFI: Make _NO_FILE_4Uhere_ work w/ BOOTX64.EFI
     
     The `_NO_FILE_4Uhere_` test case is used by the runner scripts to verify
     QEMU's configuration. Make it work with EFI/BOOT/BOOTX64.EFI by compling
     a minimal EFI binary, called dummy.c that returns immediately.
     
     Signed-off-by: Marc Orr <marcorr@google.com>
     Message-Id: <20211116204053.220523-11-zxwang42@gmail.com>
     Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

diff --git a/scripts/runtime.bash b/scripts/runtime.bash
index 228a207..bb89a53 100644
--- a/scripts/runtime.bash
+++ b/scripts/runtime.bash
@@ -132,7 +132,7 @@ function run()
  
      last_line=$(premature_failure > >(tail -1)) && {
          skip=true
-        if [ "${TARGET_EFI}" == "y" ] && [[ "${last_line}" =~ "Reset" ]]; then
+        if [ "${TARGET_EFI}" == "y" ] && [[ "${last_line}" =~ "enabling apic" ]]; then
              skip=false
          fi
          if [ ${skip} == true ]; then
diff --git a/x86/Makefile.common b/x86/Makefile.common
index 2b39dd5..984444e 100644
--- a/x86/Makefile.common
+++ b/x86/Makefile.common
@@ -72,7 +72,7 @@ else
  endif
  
  tests-common = $(TEST_DIR)/vmexit.$(exe) $(TEST_DIR)/tsc.$(exe) \
-               $(TEST_DIR)/smptest.$(exe)  \
+               $(TEST_DIR)/smptest.$(exe) $(TEST_DIR)/dummy.$(exe) \
                 $(TEST_DIR)/msr.$(exe) \
                 $(TEST_DIR)/hypercall.$(exe) $(TEST_DIR)/sieve.$(exe) \
                 $(TEST_DIR)/kvmclock_test.$(exe) \
diff --git a/x86/dummy.c b/x86/dummy.c
new file mode 100644
index 0000000..5019e79
--- /dev/null
+++ b/x86/dummy.c
@@ -0,0 +1,4 @@
+int main(int argc, char **argv)
+{
+	return 0;
+}
diff --git a/x86/efi/run b/x86/efi/run
index a888979..ac368a5 100755
--- a/x86/efi/run
+++ b/x86/efi/run
@@ -29,6 +29,10 @@ fi
  # Remove the TEST_CASE from $@
  shift 1
  
+if [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then
+	EFI_CASE=dummy
+fi
+
  # Prepare EFI boot file system
  #   - Copy .efi file to host dir $EFI_TEST/$EFI_CASE/EFI/BOOT/BOOTX64.EFI
  #     This host dir will be loaded by QEMU as a FAT32 image
@@ -37,9 +41,7 @@ shift 1
  : "${EFI_CASE_BINARY:="$EFI_CASE_DIR/BOOTX64.EFI"}"
  
  mkdir -p "$EFI_CASE_DIR"
-if [ "$EFI_CASE" != "_NO_FILE_4Uhere_" ]; then
-	cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_BINARY"
-fi
+cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_BINARY"
  
  # Run test case with 256MiB QEMU memory. QEMU default memory size is 128MiB.
  # After UEFI boot up and we call `LibMemoryMap()`, the largest consecutive
diff mbox series

Patch

diff --git a/scripts/runtime.bash b/scripts/runtime.bash
index 228a207..bb89a53 100644
--- a/scripts/runtime.bash
+++ b/scripts/runtime.bash
@@ -132,7 +132,7 @@  function run()
 
     last_line=$(premature_failure > >(tail -1)) && {
         skip=true
-        if [ "${TARGET_EFI}" == "y" ] && [[ "${last_line}" =~ "Reset" ]]; then
+        if [ "${TARGET_EFI}" == "y" ] && [[ "${last_line}" =~ "enabling apic" ]]; then
             skip=false
         fi
         if [ ${skip} == true ]; then
diff --git a/x86/efi/run b/x86/efi/run
index a888979..834cd90 100755
--- a/x86/efi/run
+++ b/x86/efi/run
@@ -39,6 +39,18 @@  shift 1
 mkdir -p "$EFI_CASE_DIR"
 if [ "$EFI_CASE" != "_NO_FILE_4Uhere_" ]; then
 	cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_BINARY"
+else
+	if ! [ -f "$EFI_CASE_BINARY" ]; then
+		cat <<EOF >$EFI_SRC/efi/dummy.c
+int main(int argc, char **argv)
+{
+	return 0;
+}
+EOF
+		make "$EFI_SRC/efi/dummy.efi"
+		cp "$EFI_SRC/efi/dummy.efi" "$EFI_CASE_BINARY"
+		rm -f $EFI_SRC/efi/dummy*
+	fi
 fi
 
 # Run test case with 256MiB QEMU memory. QEMU default memory size is 128MiB.