All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH V9 0/4] tests: Add migration test for aarch64
@ 2018-09-05 19:15 Wei Huang
  2018-09-05 19:15 ` [Qemu-devel] [PATCH V9 1/4] tests/migration: Convert x86 boot block compilation script into Makefile Wei Huang
                   ` (4 more replies)
  0 siblings, 5 replies; 17+ messages in thread
From: Wei Huang @ 2018-09-05 19:15 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, lvivier, drjones, dgilbert, quintela, wei

This patchset adds a migration test for aarch64. It leverages
Dave Gilbert's migration boot block patches to create a new test case
for aarch64.

V8->V9:
 * Remove accel= setting for AArch64. It uses the default "kvm:tcg" now
 * Revise the header file comment (suggested by drjones)
 * Name x86 directory to i386 instead of x86_64; change Makefile accordingly
 * Remove $(ARCH) from the assembly and header file names

V7->V8:
 * Support cross compilation by searching for CROSS_CC_GUEST option,
   instead of using the find-cross-prefix defined in roms/Makefile
 * Use the "max" options for ARM guest VM's CPU and GIC types
 * $(TARGET)/Makefile rules are rewritten based on Laurent Vivier's comment
 * NOTE: because Patch 1/2 is re-written, I remove the "Reviewed-by" for
   reviewers to take a look again. Thanks.

V6->V7:
 * Define test memory start/end addresses for all architectures
 * Check aarch64 kernel binary size, limit under 512KB

V5->V6:
 * Add Reviewed-by to patch 1-3
 * Add more design notes in patch 4 (aarch64 assembly compilation, bin space)

V4->V5:
 * Extract cross compilation detection code into rules.mak for sharing
 * Minor comment and code revision in migration-test.c & aarch64-a-b-kernel.S
 
V3->V4:
 * Rename .s to .S, allowing assembly to include C-style header file
 * Move test defines into a new migration-test.h file
 * Use different cpu & gic settings for kvm and tcg modes on aarch64
 * Clean up aarch64-a-b-kernel.S based on Andrew Jones' comments
 
V2->V3:
 * Convert build script to Makefile
 * Add cross-compilation support
 * Fix CPU type for "tcg" machine type
 * Revise asm code and the compilation process from asm to header file

V1->V2:
 * Similar to Dave Gilbert's recent changes to migration-test, we
   provide the test source and a build script in V2.
 * aarch64 kernel blob is defined as "unsigned char" because the source
   is now provided in V2.
 * Add "-machine none" to test_deprecated() because aarch64 doesn't have
   a default machine type.

RFC->V1:
 * aarch64 kernel blob is defined as an uint32_t array
 * The test code is re-written to address a data caching issue under KVM.
   Tests passed under both x86 and aarch64.
 * Re-use init_bootfile_x86() for both x86 and aarch64
 * Other minor fixes

Thanks,
-Wei

Wei Huang (4):
  tests/migration: Convert x86 boot block compilation script into
    Makefile
  tests/migration: Support cross compilation in generating boot header
    file
  tests/migration: Add migration-test header file
  tests: Add migration test for aarch64

 tests/Makefile.include                             |  1 +
 tests/migration-test.c                             | 57 +++++++++++-----
 tests/migration/Makefile                           | 35 ++++++++++
 tests/migration/aarch64/Makefile                   | 20 ++++++
 tests/migration/aarch64/a-b-kernel.S               | 75 ++++++++++++++++++++++
 tests/migration/aarch64/a-b-kernel.h               | 19 ++++++
 tests/migration/i386/Makefile                      | 22 +++++++
 .../{x86-a-b-bootblock.s => i386/a-b-bootblock.S}  |  4 --
 .../{x86-a-b-bootblock.h => i386/a-b-bootblock.h}  |  8 +--
 tests/migration/migration-test.h                   | 30 +++++++++
 tests/migration/rebuild-x86-bootblock.sh           | 33 ----------
 11 files changed, 248 insertions(+), 56 deletions(-)
 create mode 100644 tests/migration/Makefile
 create mode 100644 tests/migration/aarch64/Makefile
 create mode 100644 tests/migration/aarch64/a-b-kernel.S
 create mode 100644 tests/migration/aarch64/a-b-kernel.h
 create mode 100644 tests/migration/i386/Makefile
 rename tests/migration/{x86-a-b-bootblock.s => i386/a-b-bootblock.S} (93%)
 rename tests/migration/{x86-a-b-bootblock.h => i386/a-b-bootblock.h} (92%)
 create mode 100644 tests/migration/migration-test.h
 delete mode 100755 tests/migration/rebuild-x86-bootblock.sh

-- 
1.8.3.1

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Qemu-devel] [PATCH V9 1/4] tests/migration: Convert x86 boot block compilation script into Makefile
  2018-09-05 19:15 [Qemu-devel] [PATCH V9 0/4] tests: Add migration test for aarch64 Wei Huang
@ 2018-09-05 19:15 ` Wei Huang
  2018-09-06  7:58   ` Andrew Jones
  2018-09-05 19:15 ` [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file Wei Huang
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 17+ messages in thread
From: Wei Huang @ 2018-09-05 19:15 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, lvivier, drjones, dgilbert, quintela, wei

The x86 boot block header currently is generated with a shell script.
To better support other CPUs (e.g. aarch64), we convert the script
into Makefile. This allows us to 1) support cross-compilation easily,
and 2) avoid creating a script file for every architecture.

Note that, in the new design, the cross compiler prefix can be specified by
setting the CROSS_PREFIX in "make" command. Also to allow gcc pre-processor
to include the C-style file correctly, it also renames the
x86-a-b-bootblock.s file extension from .s to .S.

Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Wei Huang <wei@redhat.com>
---
 tests/migration/Makefile                           | 31 ++++++++++++++++++++
 tests/migration/rebuild-x86-bootblock.sh           | 33 ----------------------
 .../{x86-a-b-bootblock.s => x86-a-b-bootblock.S}   |  0
 3 files changed, 31 insertions(+), 33 deletions(-)
 create mode 100644 tests/migration/Makefile
 delete mode 100755 tests/migration/rebuild-x86-bootblock.sh
 rename tests/migration/{x86-a-b-bootblock.s => x86-a-b-bootblock.S} (100%)

diff --git a/tests/migration/Makefile b/tests/migration/Makefile
new file mode 100644
index 0000000..c0824b4
--- /dev/null
+++ b/tests/migration/Makefile
@@ -0,0 +1,31 @@
+# To specify cross compiler prefix, use CROSS_PREFIX=
+#   $ make CROSS_PREFIX=x86_64-linux-gnu-
+
+override define __note
+/* This file is automatically generated from
+ * tests/migration/x86-a-b-bootblock.S, edit that and then run
+ * tests/migration/rebuild-x86-bootblock.sh to update,
+ * and then remember to send both in your patch submission.
+ */
+endef
+export __note
+
+.PHONY: all clean
+all: x86-a-b-bootblock.h
+
+x86-a-b-bootblock.h: x86.bootsect
+	echo "$$__note" > header.tmp
+	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
+	mv header.tmp $@
+
+x86.bootsect: x86.boot
+	dd if=$< of=$@ bs=256 count=2 skip=124
+
+x86.boot: x86.o
+	$(CROSS_PREFIX)objcopy -O binary $< $@
+
+x86.o: x86-a-b-bootblock.S
+	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
+
+clean:
+	@rm -rf *.boot *.o *.bootsect
diff --git a/tests/migration/rebuild-x86-bootblock.sh b/tests/migration/rebuild-x86-bootblock.sh
deleted file mode 100755
index 86cec5d..0000000
--- a/tests/migration/rebuild-x86-bootblock.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh
-# Copyright (c) 2016-2018 Red Hat, Inc. and/or its affiliates
-# This work is licensed under the terms of the GNU GPL, version 2 or later.
-# See the COPYING file in the top-level directory.
-#
-# Author: dgilbert@redhat.com
-
-ASMFILE=$PWD/tests/migration/x86-a-b-bootblock.s
-HEADER=$PWD/tests/migration/x86-a-b-bootblock.h
-
-if [ ! -e "$ASMFILE" ]
-then
-  echo "Couldn't find $ASMFILE" >&2
-  exit 1
-fi
-
-ASM_WORK_DIR=$(mktemp -d --tmpdir X86BB.XXXXXX)
-cd "$ASM_WORK_DIR" &&
-as --32 -march=i486 "$ASMFILE" -o x86.o &&
-objcopy -O binary x86.o x86.boot &&
-dd if=x86.boot of=x86.bootsect bs=256 count=2 skip=124 &&
-xxd -i x86.bootsect |
-sed -e 's/.*int.*//' > x86.hex &&
-cat - x86.hex <<HERE > "$HEADER"
-/* This file is automatically generated from
- * tests/migration/x86-a-b-bootblock.s, edit that and then run
- * tests/migration/rebuild-x86-bootblock.sh to update,
- * and then remember to send both in your patch submission.
- */
-HERE
-
-rm x86.hex x86.bootsect x86.boot x86.o
-cd .. && rmdir "$ASM_WORK_DIR"
diff --git a/tests/migration/x86-a-b-bootblock.s b/tests/migration/x86-a-b-bootblock.S
similarity index 100%
rename from tests/migration/x86-a-b-bootblock.s
rename to tests/migration/x86-a-b-bootblock.S
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
  2018-09-05 19:15 [Qemu-devel] [PATCH V9 0/4] tests: Add migration test for aarch64 Wei Huang
  2018-09-05 19:15 ` [Qemu-devel] [PATCH V9 1/4] tests/migration: Convert x86 boot block compilation script into Makefile Wei Huang
@ 2018-09-05 19:15 ` Wei Huang
  2018-09-06 12:03   ` Andrew Jones
  2018-09-10 16:18   ` Alex Bennée
  2018-09-05 19:15 ` [Qemu-devel] [PATCH V9 3/4] tests/migration: Add migration-test " Wei Huang
                   ` (2 subsequent siblings)
  4 siblings, 2 replies; 17+ messages in thread
From: Wei Huang @ 2018-09-05 19:15 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, lvivier, drjones, dgilbert, quintela, wei

Recently a new configure option, CROSS_CC_GUEST, was added to
$(TARGET)-softmmu/config-target.mak to support TCG-related tests. This
patch tries to leverage this option to support cross compilation when the
migration boot block file is being re-generated:

 * The x86 related files are moved to a new sub-dir (named ./i386).
 * A new top-layer Makefile is created in tests/migration/ directory.
   This Makefile searches and parses CROSS_CC_GUEST to generate CROSS_PREFIX.
   The CROSS_PREFIX, if available, is then passed to migration/$ARCH/Makefile.

Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Wei Huang <wei@redhat.com>
---
 tests/migration-test.c                             |  2 +-
 tests/migration/Makefile                           | 44 ++++++++++++----------
 tests/migration/i386/Makefile                      | 22 +++++++++++
 .../{x86-a-b-bootblock.S => i386/a-b-bootblock.S}  |  4 --
 .../{x86-a-b-bootblock.h => i386/a-b-bootblock.h}  |  8 ++--
 5 files changed, 51 insertions(+), 29 deletions(-)
 create mode 100644 tests/migration/i386/Makefile
 rename tests/migration/{x86-a-b-bootblock.S => i386/a-b-bootblock.S} (93%)
 rename tests/migration/{x86-a-b-bootblock.h => i386/a-b-bootblock.h} (92%)

diff --git a/tests/migration-test.c b/tests/migration-test.c
index 0e687b7..fe6b41a 100644
--- a/tests/migration-test.c
+++ b/tests/migration-test.c
@@ -83,7 +83,7 @@ static const char *tmpfs;
 /* A simple PC boot sector that modifies memory (1-100MB) quickly
  * outputting a 'B' every so often if it's still running.
  */
-#include "tests/migration/x86-a-b-bootblock.h"
+#include "tests/migration/i386/a-b-bootblock.h"
 
 static void init_bootfile_x86(const char *bootpath)
 {
diff --git a/tests/migration/Makefile b/tests/migration/Makefile
index c0824b4..a9ed875 100644
--- a/tests/migration/Makefile
+++ b/tests/migration/Makefile
@@ -1,31 +1,35 @@
-# To specify cross compiler prefix, use CROSS_PREFIX=
-#   $ make CROSS_PREFIX=x86_64-linux-gnu-
+#
+# Copyright (c) 2018 Red Hat, Inc. and/or its affiliates
+#
+# This work is licensed under the terms of the GNU GPL, version 2 or later.
+# See the COPYING file in the top-level directory.
+#
+
+TARGET_LIST = i386
+
+SRC_PATH = ../..
 
 override define __note
-/* This file is automatically generated from
- * tests/migration/x86-a-b-bootblock.S, edit that and then run
- * tests/migration/rebuild-x86-bootblock.sh to update,
- * and then remember to send both in your patch submission.
+/* This file is automatically generated from the assembly file in
+ * tests/migration/$@. Edit that file and then run "make all"
+ * inside tests/migration to update, and then remember to send both
+ * the header and the assembler differences in your patch submission.
  */
 endef
 export __note
 
-.PHONY: all clean
-all: x86-a-b-bootblock.h
-
-x86-a-b-bootblock.h: x86.bootsect
-	echo "$$__note" > header.tmp
-	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
-	mv header.tmp $@
+find-arch-cross-cc = $(lastword $(shell grep -h "CROSS_CC_GUEST=" $(wildcard $(SRC_PATH)/$(patsubst i386,*86*,$(1))-softmmu/config-target.mak)))
+parse-cross-prefix = $(subst gcc,,$(patsubst cc,gcc,$(patsubst CROSS_CC_GUEST="%",%,$(call find-arch-cross-cc,$(1)))))
+gen-cross-prefix = $(patsubst %-,CROSS_PREFIX=%-,$(call parse-cross-prefix,$(1)))
 
-x86.bootsect: x86.boot
-	dd if=$< of=$@ bs=256 count=2 skip=124
+.PHONY: all $(TARGET_LIST)
 
-x86.boot: x86.o
-	$(CROSS_PREFIX)objcopy -O binary $< $@
+all: $(TARGET_LIST)
 
-x86.o: x86-a-b-bootblock.S
-	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
+$(TARGET_LIST):
+	$(MAKE) -C $@ $(call gen-cross-prefix,$@)
 
 clean:
-	@rm -rf *.boot *.o *.bootsect
+	for target in $(TARGET_LIST); do \
+		$(MAKE) -C $$target clean; \
+	done
diff --git a/tests/migration/i386/Makefile b/tests/migration/i386/Makefile
new file mode 100644
index 0000000..5c03241
--- /dev/null
+++ b/tests/migration/i386/Makefile
@@ -0,0 +1,22 @@
+# To specify cross compiler prefix, use CROSS_PREFIX=
+#   $ make CROSS_PREFIX=x86_64-linux-gnu-
+
+.PHONY: all clean
+all: a-b-bootblock.h
+
+a-b-bootblock.h: x86.bootsect
+	echo "$$__note" > header.tmp
+	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
+	mv header.tmp $@
+
+x86.bootsect: x86.boot
+	dd if=$< of=$@ bs=256 count=2 skip=124
+
+x86.boot: x86.o
+	$(CROSS_PREFIX)objcopy -O binary $< $@
+
+x86.o: a-b-bootblock.S
+	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
+
+clean:
+	@rm -rf *.boot *.o *.bootsect
diff --git a/tests/migration/x86-a-b-bootblock.S b/tests/migration/i386/a-b-bootblock.S
similarity index 93%
rename from tests/migration/x86-a-b-bootblock.S
rename to tests/migration/i386/a-b-bootblock.S
index b164264..3f97f28 100644
--- a/tests/migration/x86-a-b-bootblock.S
+++ b/tests/migration/i386/a-b-bootblock.S
@@ -3,10 +3,6 @@
 #  range.
 #  Outputs an initial 'A' on serial followed by repeated 'B's
 #
-# run   tests/migration/rebuild-x86-bootblock.sh
-#   to regenerate the hex, and remember to include both the .h and .s
-#   in any patches.
-#
 # Copyright (c) 2016 Red Hat, Inc. and/or its affiliates
 # This work is licensed under the terms of the GNU GPL, version 2 or later.
 # See the COPYING file in the top-level directory.
diff --git a/tests/migration/x86-a-b-bootblock.h b/tests/migration/i386/a-b-bootblock.h
similarity index 92%
rename from tests/migration/x86-a-b-bootblock.h
rename to tests/migration/i386/a-b-bootblock.h
index 78a151f..7d459d4 100644
--- a/tests/migration/x86-a-b-bootblock.h
+++ b/tests/migration/i386/a-b-bootblock.h
@@ -1,7 +1,7 @@
-/* This file is automatically generated from
- * tests/migration/x86-a-b-bootblock.s, edit that and then run
- * tests/migration/rebuild-x86-bootblock.sh to update,
- * and then remember to send both in your patch submission.
+/* This file is automatically generated from the assembly file in
+ * tests/migration/i386. Edit that file and then run "make all"
+ * inside tests/migration to update, and then remember to send both
+ * the header and the assembler differences in your patch submission.
  */
 unsigned char x86_bootsect[] = {
   0xfa, 0x0f, 0x01, 0x16, 0x74, 0x7c, 0x66, 0xb8, 0x01, 0x00, 0x00, 0x00,
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [Qemu-devel] [PATCH V9 3/4] tests/migration: Add migration-test header file
  2018-09-05 19:15 [Qemu-devel] [PATCH V9 0/4] tests: Add migration test for aarch64 Wei Huang
  2018-09-05 19:15 ` [Qemu-devel] [PATCH V9 1/4] tests/migration: Convert x86 boot block compilation script into Makefile Wei Huang
  2018-09-05 19:15 ` [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file Wei Huang
@ 2018-09-05 19:15 ` Wei Huang
  2018-09-05 19:15 ` [Qemu-devel] [PATCH V9 4/4] tests: Add migration test for aarch64 Wei Huang
  2018-09-06  8:28 ` [Qemu-devel] [PATCH V9 0/4] " Juan Quintela
  4 siblings, 0 replies; 17+ messages in thread
From: Wei Huang @ 2018-09-05 19:15 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, lvivier, drjones, dgilbert, quintela, wei

This patch moves the settings related migration-test from the
migration-test.c file to a new header file.

Reviewed-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Andrew Jones <drjones@redhat.com>
Signed-off-by: Wei Huang <wei@redhat.com>
---
 tests/migration-test.c           | 28 ++++++++++++++++++----------
 tests/migration/migration-test.h | 21 +++++++++++++++++++++
 2 files changed, 39 insertions(+), 10 deletions(-)
 create mode 100644 tests/migration/migration-test.h

diff --git a/tests/migration-test.c b/tests/migration-test.c
index fe6b41a..17c6896 100644
--- a/tests/migration-test.c
+++ b/tests/migration-test.c
@@ -21,11 +21,13 @@
 #include "chardev/char.h"
 #include "sysemu/sysemu.h"
 
+#include "migration/migration-test.h"
+
 /* TODO actually test the results and get rid of this */
 #define qtest_qmp_discard_response(...) qobject_unref(qtest_qmp(__VA_ARGS__))
 
-const unsigned start_address = 1024 * 1024;
-const unsigned end_address = 100 * 1024 * 1024;
+unsigned start_address;
+unsigned end_address;
 bool got_stop;
 static bool uffd_feature_thread_id;
 
@@ -80,8 +82,8 @@ static bool ufd_version_check(void)
 
 static const char *tmpfs;
 
-/* A simple PC boot sector that modifies memory (1-100MB) quickly
- * outputting a 'B' every so often if it's still running.
+/* The boot file modifies memory area in [start_address, end_address)
+ * repeatedly. It outputs a 'B' at a fixed rate while it's still running.
  */
 #include "tests/migration/i386/a-b-bootblock.h"
 
@@ -270,11 +272,11 @@ static void wait_for_migration_pass(QTestState *who)
 static void check_guests_ram(QTestState *who)
 {
     /* Our ASM test will have been incrementing one byte from each page from
-     * 1MB to <100MB in order.
-     * This gives us a constraint that any page's byte should be equal or less
-     * than the previous pages byte (mod 256); and they should all be equal
-     * except for one transition at the point where we meet the incrementer.
-     * (We're running this with the guest stopped).
+     * start_address to < end_address in order. This gives us a constraint
+     * that any page's byte should be equal or less than the previous pages
+     * byte (mod 256); and they should all be equal except for one transition
+     * at the point where we meet the incrementer. (We're running this with
+     * the guest stopped).
      */
     unsigned address;
     uint8_t first_byte;
@@ -285,7 +287,8 @@ static void check_guests_ram(QTestState *who)
     qtest_memread(who, start_address, &first_byte, 1);
     last_byte = first_byte;
 
-    for (address = start_address + 4096; address < end_address; address += 4096)
+    for (address = start_address + TEST_MEM_PAGE_SIZE; address < end_address;
+         address += TEST_MEM_PAGE_SIZE)
     {
         uint8_t b;
         qtest_memread(who, address, &b, 1);
@@ -437,6 +440,8 @@ static int test_migrate_start(QTestState **from, QTestState **to,
                                   " -drive file=%s,format=raw"
                                   " -incoming %s",
                                   accel, tmpfs, bootpath, uri);
+        start_address = X86_TEST_MEM_START;
+        end_address = X86_TEST_MEM_END;
     } else if (strcmp(arch, "ppc64") == 0) {
         cmd_src = g_strdup_printf("-machine accel=%s -m 256M"
                                   " -name source,debug-threads=on"
@@ -451,6 +456,9 @@ static int test_migrate_start(QTestState **from, QTestState **to,
                                   " -serial file:%s/dest_serial"
                                   " -incoming %s",
                                   accel, tmpfs, uri);
+
+        start_address = PPC_TEST_MEM_START;
+        end_address = PPC_TEST_MEM_END;
     } else {
         g_assert_not_reached();
     }
diff --git a/tests/migration/migration-test.h b/tests/migration/migration-test.h
new file mode 100644
index 0000000..c4c0c52
--- /dev/null
+++ b/tests/migration/migration-test.h
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2018 Red Hat, Inc. and/or its affiliates
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+#ifndef _TEST_MIGRATION_H_
+#define _TEST_MIGRATION_H_
+
+/* Common */
+#define TEST_MEM_PAGE_SIZE 4096
+
+/* x86 */
+#define X86_TEST_MEM_START (1 * 1024 * 1024)
+#define X86_TEST_MEM_END   (100 * 1024 * 1024)
+
+/* PPC */
+#define PPC_TEST_MEM_START (1 * 1024 * 1024)
+#define PPC_TEST_MEM_END   (100 * 1024 * 1024)
+
+#endif /* _TEST_MIGRATION_H_ */
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [Qemu-devel] [PATCH V9 4/4] tests: Add migration test for aarch64
  2018-09-05 19:15 [Qemu-devel] [PATCH V9 0/4] tests: Add migration test for aarch64 Wei Huang
                   ` (2 preceding siblings ...)
  2018-09-05 19:15 ` [Qemu-devel] [PATCH V9 3/4] tests/migration: Add migration-test " Wei Huang
@ 2018-09-05 19:15 ` Wei Huang
  2018-09-06 12:25   ` Andrew Jones
  2018-09-06  8:28 ` [Qemu-devel] [PATCH V9 0/4] " Juan Quintela
  4 siblings, 1 reply; 17+ messages in thread
From: Wei Huang @ 2018-09-05 19:15 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, lvivier, drjones, dgilbert, quintela, wei

This patch adds migration test support for aarch64. The test code, which
implements the same functionality as x86, is booted as a kernel in qemu.
Here are the design choices we make for aarch64:

 * We choose this -kernel approach because aarch64 QEMU doesn't provide a
   built-in fw like x86 does. So instead of relying on a boot loader, we
   use -kernel approach for aarch64.
 * The serial output is sent to PL011 directly.
 * The physical memory base for mach-virt machine is 0x40000000. We change
   the start_address and end_address for aarch64.

In addition to providing the binary, this patch also includes the source
code and the build script in tests/migration/aarch64. So users can change
the source and/or re-compile the binary as they wish.

Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Wei Huang <wei@redhat.com>
---
 tests/Makefile.include               |  1 +
 tests/migration-test.c               | 27 +++++++++++--
 tests/migration/Makefile             |  2 +-
 tests/migration/aarch64/Makefile     | 20 ++++++++++
 tests/migration/aarch64/a-b-kernel.S | 75 ++++++++++++++++++++++++++++++++++++
 tests/migration/aarch64/a-b-kernel.h | 19 +++++++++
 tests/migration/migration-test.h     |  9 +++++
 7 files changed, 148 insertions(+), 5 deletions(-)
 create mode 100644 tests/migration/aarch64/Makefile
 create mode 100644 tests/migration/aarch64/a-b-kernel.S
 create mode 100644 tests/migration/aarch64/a-b-kernel.h

diff --git a/tests/Makefile.include b/tests/Makefile.include
index 87c81d1..fab8fb9 100644
--- a/tests/Makefile.include
+++ b/tests/Makefile.include
@@ -390,6 +390,7 @@ check-qtest-arm-y += tests/hexloader-test$(EXESUF)
 check-qtest-aarch64-y = tests/numa-test$(EXESUF)
 check-qtest-aarch64-$(CONFIG_SDHCI) += tests/sdhci-test$(EXESUF)
 check-qtest-aarch64-y += tests/boot-serial-test$(EXESUF)
+check-qtest-aarch64-y += tests/migration-test$(EXESUF)
 
 check-qtest-microblazeel-y = $(check-qtest-microblaze-y)
 
diff --git a/tests/migration-test.c b/tests/migration-test.c
index 17c6896..ecfae0b 100644
--- a/tests/migration-test.c
+++ b/tests/migration-test.c
@@ -86,12 +86,13 @@ static const char *tmpfs;
  * repeatedly. It outputs a 'B' at a fixed rate while it's still running.
  */
 #include "tests/migration/i386/a-b-bootblock.h"
+#include "tests/migration/aarch64/a-b-kernel.h"
 
-static void init_bootfile_x86(const char *bootpath)
+static void init_bootfile(const char *bootpath, void *content)
 {
     FILE *bootfile = fopen(bootpath, "wb");
 
-    g_assert_cmpint(fwrite(x86_bootsect, 512, 1, bootfile), ==, 1);
+    g_assert_cmpint(fwrite(content, 512, 1, bootfile), ==, 1);
     fclose(bootfile);
 }
 
@@ -428,7 +429,7 @@ static int test_migrate_start(QTestState **from, QTestState **to,
     got_stop = false;
 
     if (strcmp(arch, "i386") == 0 || strcmp(arch, "x86_64") == 0) {
-        init_bootfile_x86(bootpath);
+        init_bootfile(bootpath, x86_bootsect);
         cmd_src = g_strdup_printf("-machine accel=%s -m 150M"
                                   " -name source,debug-threads=on"
                                   " -serial file:%s/src_serial"
@@ -459,6 +460,24 @@ static int test_migrate_start(QTestState **from, QTestState **to,
 
         start_address = PPC_TEST_MEM_START;
         end_address = PPC_TEST_MEM_END;
+    } else if (strcmp(arch, "aarch64") == 0) {
+        init_bootfile(bootpath, aarch64_kernel);
+        cmd_src = g_strdup_printf("-machine virt,accel=%s,gic-version=max "
+                                  "-name vmsource,debug-threads=on -cpu max "
+                                  "-m 150M -serial file:%s/src_serial "
+                                  "-kernel %s ",
+                                  accel, tmpfs, bootpath);
+        cmd_dst = g_strdup_printf("-machine virt,accel=%s,gic-version=max "
+                                  "-name vmdest,debug-threads=on -cpu max "
+                                  "-m 150M -serial file:%s/dest_serial "
+                                  "-kernel %s "
+                                  "-incoming %s ",
+                                  accel, tmpfs, bootpath, uri);
+
+        start_address = ARM_TEST_MEM_START;
+        end_address = ARM_TEST_MEM_END;
+
+        g_assert(sizeof(aarch64_kernel) <= ARM_TEST_MAX_KERNEL_SIZE);
     } else {
         g_assert_not_reached();
     }
@@ -545,7 +564,7 @@ static void test_deprecated(void)
 {
     QTestState *from;
 
-    from = qtest_start("");
+    from = qtest_start("-machine none");
 
     deprecated_set_downtime(from, 0.12345);
     deprecated_set_speed(from, 12345);
diff --git a/tests/migration/Makefile b/tests/migration/Makefile
index a9ed875..13af934 100644
--- a/tests/migration/Makefile
+++ b/tests/migration/Makefile
@@ -5,7 +5,7 @@
 # See the COPYING file in the top-level directory.
 #
 
-TARGET_LIST = i386
+TARGET_LIST = i386 aarch64
 
 SRC_PATH = ../..
 
diff --git a/tests/migration/aarch64/Makefile b/tests/migration/aarch64/Makefile
new file mode 100644
index 0000000..d440fa8
--- /dev/null
+++ b/tests/migration/aarch64/Makefile
@@ -0,0 +1,20 @@
+# To specify cross compiler prefix, use CROSS_PREFIX=
+#   $ make CROSS_PREFIX=aarch64-linux-gnu-
+
+.PHONY: all clean
+all: a-b-kernel.h
+
+a-b-kernel.h: aarch64.kernel
+	echo "$$__note" > header.tmp
+	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
+	mv header.tmp $@
+
+aarch64.kernel: aarch64.elf
+	$(CROSS_PREFIX)objcopy -O binary $< $@
+
+aarch64.elf: a-b-kernel.S
+	$(CROSS_PREFIX)gcc -o $@ -nostdlib -Wl,--build-id=none $<
+
+clean:
+	@rm -rf *.kernel *.elf
+
diff --git a/tests/migration/aarch64/a-b-kernel.S b/tests/migration/aarch64/a-b-kernel.S
new file mode 100644
index 0000000..507af30
--- /dev/null
+++ b/tests/migration/aarch64/a-b-kernel.S
@@ -0,0 +1,75 @@
+#
+# Copyright (c) 2018 Red Hat, Inc. and/or its affiliates
+#
+# Author:
+#   Wei Huang <wei@redhat.com>
+#
+# This work is licensed under the terms of the GNU GPL, version 2 or later.
+# See the COPYING file in the top-level directory.
+#
+# Note: Please make sure the compiler compiles the assembly code below with
+# pc-relative address. Also the branch instructions should use relative
+# addresses only.
+
+#include "../migration-test.h"
+
+.section .text
+
+        .globl  _start
+
+_start:
+        /* disable MMU to use phys mem address */
+        mrs     x0, sctlr_el1
+        bic     x0, x0, #(1<<0)
+        msr     sctlr_el1, x0
+        isb
+
+        /* traverse test memory region */
+        mov     x0, #ARM_TEST_MEM_START
+        mov     x1, #ARM_TEST_MEM_END
+
+        /* output char 'A' to PL011 */
+        mov     w3, 'A'
+        mov     x2, #ARM_MACH_VIRT_UART
+        strb    w3, [x2]
+
+        /* clean up memory */
+        mov     w3, #0
+        mov     x4, x0
+clean:
+        strb    w3, [x4]
+        add     x4, x4, #TEST_MEM_PAGE_SIZE
+        cmp     x4, x1
+        ble     clean
+
+        /* w5 keeps a counter so we can limit the output speed */
+        mov     w5, #0
+
+        /* main body */
+mainloop:
+        mov     x4, x0
+
+innerloop:
+        /* clean cache because el2 might still cache guest data under KVM */
+        dc      civac, x4
+
+        /* increment the first byte of each page by 1 */
+        ldrb    w3, [x4]
+        add     w3, w3, #1
+        and     w3, w3, #0xff
+        strb    w3, [x4]
+
+        add     x4, x4, #TEST_MEM_PAGE_SIZE
+        cmp     x4, x1
+        blt     innerloop
+
+        add     w5, w5, #1
+        and     w5, w5, #0xff
+        cmp     w5, #0
+        bne     mainloop
+
+        /* output char 'B' to PL011 */
+        mov     w3, 'B'
+        strb    w3, [x2]
+
+        b       mainloop
diff --git a/tests/migration/aarch64/a-b-kernel.h b/tests/migration/aarch64/a-b-kernel.h
new file mode 100644
index 0000000..521125e
--- /dev/null
+++ b/tests/migration/aarch64/a-b-kernel.h
@@ -0,0 +1,19 @@
+/* This file is automatically generated from the assembly file in
+ * tests/migration/aarch64. Edit that file and then run "make all"
+ * inside tests/migration to update, and then remember to send both
+ * the header and the assembler differences in your patch submission.
+ */
+unsigned char aarch64_kernel[] = {
+  0x00, 0x10, 0x38, 0xd5, 0x00, 0xf8, 0x7f, 0x92, 0x00, 0x10, 0x18, 0xd5,
+  0xdf, 0x3f, 0x03, 0xd5, 0x00, 0x02, 0xa8, 0xd2, 0x01, 0xc8, 0xa8, 0xd2,
+  0x23, 0x08, 0x80, 0x52, 0x02, 0x20, 0xa1, 0xd2, 0x43, 0x00, 0x00, 0x39,
+  0x03, 0x00, 0x80, 0x52, 0xe4, 0x03, 0x00, 0xaa, 0x83, 0x00, 0x00, 0x39,
+  0x84, 0x04, 0x40, 0x91, 0x9f, 0x00, 0x01, 0xeb, 0xad, 0xff, 0xff, 0x54,
+  0x05, 0x00, 0x80, 0x52, 0xe4, 0x03, 0x00, 0xaa, 0x24, 0x7e, 0x0b, 0xd5,
+  0x83, 0x00, 0x40, 0x39, 0x63, 0x04, 0x00, 0x11, 0x63, 0x1c, 0x00, 0x12,
+  0x83, 0x00, 0x00, 0x39, 0x84, 0x04, 0x40, 0x91, 0x9f, 0x00, 0x01, 0xeb,
+  0x2b, 0xff, 0xff, 0x54, 0xa5, 0x04, 0x00, 0x11, 0xa5, 0x1c, 0x00, 0x12,
+  0xbf, 0x00, 0x00, 0x71, 0x81, 0xfe, 0xff, 0x54, 0x43, 0x08, 0x80, 0x52,
+  0x43, 0x00, 0x00, 0x39, 0xf1, 0xff, 0xff, 0x17
+};
+
diff --git a/tests/migration/migration-test.h b/tests/migration/migration-test.h
index c4c0c52..6939a13 100644
--- a/tests/migration/migration-test.h
+++ b/tests/migration/migration-test.h
@@ -18,4 +18,13 @@
 #define PPC_TEST_MEM_START (1 * 1024 * 1024)
 #define PPC_TEST_MEM_END   (100 * 1024 * 1024)
 
+/* ARM */
+#define ARM_TEST_MEM_START (0x40000000 + 1 * 1024 * 1024)
+#define ARM_TEST_MEM_END   (0x40000000 + 100 * 1024 * 1024)
+#define ARM_MACH_VIRT_UART 0x09000000
+/* AArch64 kernel load address is 0x40080000, and the test memory starts at
+ * 0x40100000. So the maximum allowable kernel size is 512KB.
+ */
+#define ARM_TEST_MAX_KERNEL_SIZE (512 * 1024)
+
 #endif /* _TEST_MIGRATION_H_ */
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [Qemu-devel] [PATCH V9 1/4] tests/migration: Convert x86 boot block compilation script into Makefile
  2018-09-05 19:15 ` [Qemu-devel] [PATCH V9 1/4] tests/migration: Convert x86 boot block compilation script into Makefile Wei Huang
@ 2018-09-06  7:58   ` Andrew Jones
  0 siblings, 0 replies; 17+ messages in thread
From: Andrew Jones @ 2018-09-06  7:58 UTC (permalink / raw)
  To: Wei Huang; +Cc: qemu-devel, lvivier, peter.maydell, quintela, dgilbert

On Wed, Sep 05, 2018 at 03:15:31PM -0400, Wei Huang wrote:
> The x86 boot block header currently is generated with a shell script.
> To better support other CPUs (e.g. aarch64), we convert the script
> into Makefile. This allows us to 1) support cross-compilation easily,
> and 2) avoid creating a script file for every architecture.
> 
> Note that, in the new design, the cross compiler prefix can be specified by
> setting the CROSS_PREFIX in "make" command. Also to allow gcc pre-processor
> to include the C-style file correctly, it also renames the
> x86-a-b-bootblock.s file extension from .s to .S.
> 
> Reviewed-by: Juan Quintela <quintela@redhat.com>
> Signed-off-by: Wei Huang <wei@redhat.com>
> ---
>  tests/migration/Makefile                           | 31 ++++++++++++++++++++
>  tests/migration/rebuild-x86-bootblock.sh           | 33 ----------------------
>  .../{x86-a-b-bootblock.s => x86-a-b-bootblock.S}   |  0
>  3 files changed, 31 insertions(+), 33 deletions(-)
>  create mode 100644 tests/migration/Makefile
>  delete mode 100755 tests/migration/rebuild-x86-bootblock.sh
>  rename tests/migration/{x86-a-b-bootblock.s => x86-a-b-bootblock.S} (100%)
>

Reviewed-by: Andrew Jones <drjones@redhat.com>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Qemu-devel] [PATCH V9 0/4] tests: Add migration test for aarch64
  2018-09-05 19:15 [Qemu-devel] [PATCH V9 0/4] tests: Add migration test for aarch64 Wei Huang
                   ` (3 preceding siblings ...)
  2018-09-05 19:15 ` [Qemu-devel] [PATCH V9 4/4] tests: Add migration test for aarch64 Wei Huang
@ 2018-09-06  8:28 ` Juan Quintela
  4 siblings, 0 replies; 17+ messages in thread
From: Juan Quintela @ 2018-09-06  8:28 UTC (permalink / raw)
  To: Wei Huang; +Cc: qemu-devel, peter.maydell, lvivier, drjones, dgilbert

Wei Huang <wei@redhat.com> wrote:
> This patchset adds a migration test for aarch64. It leverages
> Dave Gilbert's migration boot block patches to create a new test case
> for aarch64.
>
> V8->V9:
>  * Remove accel= setting for AArch64. It uses the default "kvm:tcg" now
>  * Revise the header file comment (suggested by drjones)
>  * Name x86 directory to i386 instead of x86_64; change Makefile accordingly
>  * Remove $(ARCH) from the assembly and header file names
>
> V7->V8:
>  * Support cross compilation by searching for CROSS_CC_GUEST option,
>    instead of using the find-cross-prefix defined in roms/Makefile
>  * Use the "max" options for ARM guest VM's CPU and GIC types
>  * $(TARGET)/Makefile rules are rewritten based on Laurent Vivier's comment
>  * NOTE: because Patch 1/2 is re-written, I remove the "Reviewed-by" for
>    reviewers to take a look again. Thanks.
>
> V6->V7:
>  * Define test memory start/end addresses for all architectures
>  * Check aarch64 kernel binary size, limit under 512KB
>
> V5->V6:
>  * Add Reviewed-by to patch 1-3
>  * Add more design notes in patch 4 (aarch64 assembly compilation, bin space)
>
> V4->V5:
>  * Extract cross compilation detection code into rules.mak for sharing
>  * Minor comment and code revision in migration-test.c & aarch64-a-b-kernel.S
>  
> V3->V4:
>  * Rename .s to .S, allowing assembly to include C-style header file
>  * Move test defines into a new migration-test.h file
>  * Use different cpu & gic settings for kvm and tcg modes on aarch64
>  * Clean up aarch64-a-b-kernel.S based on Andrew Jones' comments
>  
> V2->V3:
>  * Convert build script to Makefile
>  * Add cross-compilation support
>  * Fix CPU type for "tcg" machine type
>  * Revise asm code and the compilation process from asm to header file
>
> V1->V2:
>  * Similar to Dave Gilbert's recent changes to migration-test, we
>    provide the test source and a build script in V2.
>  * aarch64 kernel blob is defined as "unsigned char" because the source
>    is now provided in V2.
>  * Add "-machine none" to test_deprecated() because aarch64 doesn't have
>    a default machine type.
>
> RFC->V1:
>  * aarch64 kernel blob is defined as an uint32_t array
>  * The test code is re-written to address a data caching issue under KVM.
>    Tests passed under both x86 and aarch64.
>  * Re-use init_bootfile_x86() for both x86 and aarch64
>  * Other minor fixes

Queued for next Migration PULL request, thanks.

Later, Juan.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
  2018-09-05 19:15 ` [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file Wei Huang
@ 2018-09-06 12:03   ` Andrew Jones
  2018-09-06 13:37     ` Wei Huang
  2018-09-10 16:18   ` Alex Bennée
  1 sibling, 1 reply; 17+ messages in thread
From: Andrew Jones @ 2018-09-06 12:03 UTC (permalink / raw)
  To: Wei Huang
  Cc: qemu-devel, lvivier, peter.maydell, quintela, dgilbert, alex.bennee

On Wed, Sep 05, 2018 at 03:15:32PM -0400, Wei Huang wrote:
> Recently a new configure option, CROSS_CC_GUEST, was added to
> $(TARGET)-softmmu/config-target.mak to support TCG-related tests. This
> patch tries to leverage this option to support cross compilation when the
> migration boot block file is being re-generated:
> 
>  * The x86 related files are moved to a new sub-dir (named ./i386).
>  * A new top-layer Makefile is created in tests/migration/ directory.
>    This Makefile searches and parses CROSS_CC_GUEST to generate CROSS_PREFIX.
>    The CROSS_PREFIX, if available, is then passed to migration/$ARCH/Makefile.
> 
> Reviewed-by: Juan Quintela <quintela@redhat.com>
> Signed-off-by: Wei Huang <wei@redhat.com>
> ---
>  tests/migration-test.c                             |  2 +-
>  tests/migration/Makefile                           | 44 ++++++++++++----------
>  tests/migration/i386/Makefile                      | 22 +++++++++++
>  .../{x86-a-b-bootblock.S => i386/a-b-bootblock.S}  |  4 --
>  .../{x86-a-b-bootblock.h => i386/a-b-bootblock.h}  |  8 ++--
>  5 files changed, 51 insertions(+), 29 deletions(-)
>  create mode 100644 tests/migration/i386/Makefile
>  rename tests/migration/{x86-a-b-bootblock.S => i386/a-b-bootblock.S} (93%)
>  rename tests/migration/{x86-a-b-bootblock.h => i386/a-b-bootblock.h} (92%)
> 
> diff --git a/tests/migration-test.c b/tests/migration-test.c
> index 0e687b7..fe6b41a 100644
> --- a/tests/migration-test.c
> +++ b/tests/migration-test.c
> @@ -83,7 +83,7 @@ static const char *tmpfs;
>  /* A simple PC boot sector that modifies memory (1-100MB) quickly
>   * outputting a 'B' every so often if it's still running.
>   */
> -#include "tests/migration/x86-a-b-bootblock.h"
> +#include "tests/migration/i386/a-b-bootblock.h"
>  
>  static void init_bootfile_x86(const char *bootpath)
>  {
> diff --git a/tests/migration/Makefile b/tests/migration/Makefile
> index c0824b4..a9ed875 100644
> --- a/tests/migration/Makefile
> +++ b/tests/migration/Makefile
> @@ -1,31 +1,35 @@
> -# To specify cross compiler prefix, use CROSS_PREFIX=
> -#   $ make CROSS_PREFIX=x86_64-linux-gnu-
> +#
> +# Copyright (c) 2018 Red Hat, Inc. and/or its affiliates
> +#
> +# This work is licensed under the terms of the GNU GPL, version 2 or later.
> +# See the COPYING file in the top-level directory.
> +#
> +
> +TARGET_LIST = i386
> +
> +SRC_PATH = ../..
>  
>  override define __note
> -/* This file is automatically generated from
> - * tests/migration/x86-a-b-bootblock.S, edit that and then run
> - * tests/migration/rebuild-x86-bootblock.sh to update,
> - * and then remember to send both in your patch submission.
> +/* This file is automatically generated from the assembly file in
> + * tests/migration/$@. Edit that file and then run "make all"
> + * inside tests/migration to update, and then remember to send both
> + * the header and the assembler differences in your patch submission.
>   */
>  endef
>  export __note
>  
> -.PHONY: all clean
> -all: x86-a-b-bootblock.h
> -
> -x86-a-b-bootblock.h: x86.bootsect
> -	echo "$$__note" > header.tmp
> -	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
> -	mv header.tmp $@
> +find-arch-cross-cc = $(lastword $(shell grep -h "CROSS_CC_GUEST=" $(wildcard $(SRC_PATH)/$(patsubst i386,*86*,$(1))-softmmu/config-target.mak)))

The above function hangs unless configuring with
'--target-list=x86_64-softmmu,aarch64-softmmu'. I tried just x86_64 alone,
just aarch64 alone, and also configuring both x86_64 and i386, but none
of those worked. For some reason grep isn't happy with the generated path
list. I tested like this

 ./configure --target-list=x86_64-softmmu,i386-softmmu
 make -C tests/migration

And, while not an issue of this series, I had to manually add
CROSS_CC_GUEST="aarch64-linux-gnu-gcc" to aarch64-softmmu/config-target.mak
for it to work, because configure's compiler test fails with the Fedora
aarch64-linux-gnu-gcc installation (the linker can't find code it needs
to a build a program with main()). I'm not sure if building programs with
main() is something the CROSS_CC_GUEST compiler needs to do. Maybe that
test can be relaxed. Alex?

Thanks,
drew

> +parse-cross-prefix = $(subst gcc,,$(patsubst cc,gcc,$(patsubst CROSS_CC_GUEST="%",%,$(call find-arch-cross-cc,$(1)))))
> +gen-cross-prefix = $(patsubst %-,CROSS_PREFIX=%-,$(call parse-cross-prefix,$(1)))
>  
> -x86.bootsect: x86.boot
> -	dd if=$< of=$@ bs=256 count=2 skip=124
> +.PHONY: all $(TARGET_LIST)
>  
> -x86.boot: x86.o
> -	$(CROSS_PREFIX)objcopy -O binary $< $@
> +all: $(TARGET_LIST)
>  
> -x86.o: x86-a-b-bootblock.S
> -	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
> +$(TARGET_LIST):
> +	$(MAKE) -C $@ $(call gen-cross-prefix,$@)
>  
>  clean:
> -	@rm -rf *.boot *.o *.bootsect
> +	for target in $(TARGET_LIST); do \
> +		$(MAKE) -C $$target clean; \
> +	done
> diff --git a/tests/migration/i386/Makefile b/tests/migration/i386/Makefile
> new file mode 100644
> index 0000000..5c03241
> --- /dev/null
> +++ b/tests/migration/i386/Makefile
> @@ -0,0 +1,22 @@
> +# To specify cross compiler prefix, use CROSS_PREFIX=
> +#   $ make CROSS_PREFIX=x86_64-linux-gnu-
> +
> +.PHONY: all clean
> +all: a-b-bootblock.h
> +
> +a-b-bootblock.h: x86.bootsect
> +	echo "$$__note" > header.tmp
> +	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
> +	mv header.tmp $@
> +
> +x86.bootsect: x86.boot
> +	dd if=$< of=$@ bs=256 count=2 skip=124
> +
> +x86.boot: x86.o
> +	$(CROSS_PREFIX)objcopy -O binary $< $@
> +
> +x86.o: a-b-bootblock.S
> +	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
> +
> +clean:
> +	@rm -rf *.boot *.o *.bootsect
> diff --git a/tests/migration/x86-a-b-bootblock.S b/tests/migration/i386/a-b-bootblock.S
> similarity index 93%
> rename from tests/migration/x86-a-b-bootblock.S
> rename to tests/migration/i386/a-b-bootblock.S
> index b164264..3f97f28 100644
> --- a/tests/migration/x86-a-b-bootblock.S
> +++ b/tests/migration/i386/a-b-bootblock.S
> @@ -3,10 +3,6 @@
>  #  range.
>  #  Outputs an initial 'A' on serial followed by repeated 'B's
>  #
> -# run   tests/migration/rebuild-x86-bootblock.sh
> -#   to regenerate the hex, and remember to include both the .h and .s
> -#   in any patches.
> -#
>  # Copyright (c) 2016 Red Hat, Inc. and/or its affiliates
>  # This work is licensed under the terms of the GNU GPL, version 2 or later.
>  # See the COPYING file in the top-level directory.
> diff --git a/tests/migration/x86-a-b-bootblock.h b/tests/migration/i386/a-b-bootblock.h
> similarity index 92%
> rename from tests/migration/x86-a-b-bootblock.h
> rename to tests/migration/i386/a-b-bootblock.h
> index 78a151f..7d459d4 100644
> --- a/tests/migration/x86-a-b-bootblock.h
> +++ b/tests/migration/i386/a-b-bootblock.h
> @@ -1,7 +1,7 @@
> -/* This file is automatically generated from
> - * tests/migration/x86-a-b-bootblock.s, edit that and then run
> - * tests/migration/rebuild-x86-bootblock.sh to update,
> - * and then remember to send both in your patch submission.
> +/* This file is automatically generated from the assembly file in
> + * tests/migration/i386. Edit that file and then run "make all"
> + * inside tests/migration to update, and then remember to send both
> + * the header and the assembler differences in your patch submission.
>   */
>  unsigned char x86_bootsect[] = {
>    0xfa, 0x0f, 0x01, 0x16, 0x74, 0x7c, 0x66, 0xb8, 0x01, 0x00, 0x00, 0x00,
> -- 
> 1.8.3.1
> 
> 

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Qemu-devel] [PATCH V9 4/4] tests: Add migration test for aarch64
  2018-09-05 19:15 ` [Qemu-devel] [PATCH V9 4/4] tests: Add migration test for aarch64 Wei Huang
@ 2018-09-06 12:25   ` Andrew Jones
  0 siblings, 0 replies; 17+ messages in thread
From: Andrew Jones @ 2018-09-06 12:25 UTC (permalink / raw)
  To: Wei Huang; +Cc: qemu-devel, lvivier, peter.maydell, quintela, dgilbert

On Wed, Sep 05, 2018 at 03:15:34PM -0400, Wei Huang wrote:
> This patch adds migration test support for aarch64. The test code, which
> implements the same functionality as x86, is booted as a kernel in qemu.
> Here are the design choices we make for aarch64:
> 
>  * We choose this -kernel approach because aarch64 QEMU doesn't provide a
>    built-in fw like x86 does. So instead of relying on a boot loader, we
>    use -kernel approach for aarch64.
>  * The serial output is sent to PL011 directly.
>  * The physical memory base for mach-virt machine is 0x40000000. We change
>    the start_address and end_address for aarch64.
> 
> In addition to providing the binary, this patch also includes the source
> code and the build script in tests/migration/aarch64. So users can change
> the source and/or re-compile the binary as they wish.
> 
> Reviewed-by: Juan Quintela <quintela@redhat.com>
> Signed-off-by: Wei Huang <wei@redhat.com>
> ---
>  tests/Makefile.include               |  1 +
>  tests/migration-test.c               | 27 +++++++++++--
>  tests/migration/Makefile             |  2 +-
>  tests/migration/aarch64/Makefile     | 20 ++++++++++
>  tests/migration/aarch64/a-b-kernel.S | 75 ++++++++++++++++++++++++++++++++++++
>  tests/migration/aarch64/a-b-kernel.h | 19 +++++++++
>  tests/migration/migration-test.h     |  9 +++++
>  7 files changed, 148 insertions(+), 5 deletions(-)
>  create mode 100644 tests/migration/aarch64/Makefile
>  create mode 100644 tests/migration/aarch64/a-b-kernel.S
>  create mode 100644 tests/migration/aarch64/a-b-kernel.h
>

I see this is already pulled, but just in case it still matters

Reviewed-by: Andrew Jones <drjones@redhat.com>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
  2018-09-06 12:03   ` Andrew Jones
@ 2018-09-06 13:37     ` Wei Huang
  2018-09-06 14:00       ` Andrew Jones
  0 siblings, 1 reply; 17+ messages in thread
From: Wei Huang @ 2018-09-06 13:37 UTC (permalink / raw)
  To: Andrew Jones
  Cc: qemu-devel, lvivier, peter maydell, quintela, dgilbert, alex bennee



----- Original Message -----
> From: "Andrew Jones" <drjones@redhat.com>
> To: "Wei Huang" <wei@redhat.com>
> Cc: qemu-devel@nongnu.org, lvivier@redhat.com, "peter maydell" <peter.maydell@linaro.org>, quintela@redhat.com,
> dgilbert@redhat.com, "alex bennee" <alex.bennee@linaro.org>
> Sent: Thursday, September 6, 2018 7:03:32 AM
> Subject: Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
> 
> On Wed, Sep 05, 2018 at 03:15:32PM -0400, Wei Huang wrote:
> > Recently a new configure option, CROSS_CC_GUEST, was added to
> > $(TARGET)-softmmu/config-target.mak to support TCG-related tests. This
> > patch tries to leverage this option to support cross compilation when the
> > migration boot block file is being re-generated:
> > 
> >  * The x86 related files are moved to a new sub-dir (named ./i386).
> >  * A new top-layer Makefile is created in tests/migration/ directory.
> >    This Makefile searches and parses CROSS_CC_GUEST to generate
> >    CROSS_PREFIX.
> >    The CROSS_PREFIX, if available, is then passed to
> >    migration/$ARCH/Makefile.
> > 
> > Reviewed-by: Juan Quintela <quintela@redhat.com>
> > Signed-off-by: Wei Huang <wei@redhat.com>
> > ---
> >  tests/migration-test.c                             |  2 +-
> >  tests/migration/Makefile                           | 44
> >  ++++++++++++----------
> >  tests/migration/i386/Makefile                      | 22 +++++++++++
> >  .../{x86-a-b-bootblock.S => i386/a-b-bootblock.S}  |  4 --
> >  .../{x86-a-b-bootblock.h => i386/a-b-bootblock.h}  |  8 ++--
> >  5 files changed, 51 insertions(+), 29 deletions(-)
> >  create mode 100644 tests/migration/i386/Makefile
> >  rename tests/migration/{x86-a-b-bootblock.S => i386/a-b-bootblock.S} (93%)
> >  rename tests/migration/{x86-a-b-bootblock.h => i386/a-b-bootblock.h} (92%)
> > 
> > diff --git a/tests/migration-test.c b/tests/migration-test.c
> > index 0e687b7..fe6b41a 100644
> > --- a/tests/migration-test.c
> > +++ b/tests/migration-test.c
> > @@ -83,7 +83,7 @@ static const char *tmpfs;
> >  /* A simple PC boot sector that modifies memory (1-100MB) quickly
> >   * outputting a 'B' every so often if it's still running.
> >   */
> > -#include "tests/migration/x86-a-b-bootblock.h"
> > +#include "tests/migration/i386/a-b-bootblock.h"
> >  
> >  static void init_bootfile_x86(const char *bootpath)
> >  {
> > diff --git a/tests/migration/Makefile b/tests/migration/Makefile
> > index c0824b4..a9ed875 100644
> > --- a/tests/migration/Makefile
> > +++ b/tests/migration/Makefile
> > @@ -1,31 +1,35 @@
> > -# To specify cross compiler prefix, use CROSS_PREFIX=
> > -#   $ make CROSS_PREFIX=x86_64-linux-gnu-
> > +#
> > +# Copyright (c) 2018 Red Hat, Inc. and/or its affiliates
> > +#
> > +# This work is licensed under the terms of the GNU GPL, version 2 or
> > later.
> > +# See the COPYING file in the top-level directory.
> > +#
> > +
> > +TARGET_LIST = i386
> > +
> > +SRC_PATH = ../..
> >  
> >  override define __note
> > -/* This file is automatically generated from
> > - * tests/migration/x86-a-b-bootblock.S, edit that and then run
> > - * tests/migration/rebuild-x86-bootblock.sh to update,
> > - * and then remember to send both in your patch submission.
> > +/* This file is automatically generated from the assembly file in
> > + * tests/migration/$@. Edit that file and then run "make all"
> > + * inside tests/migration to update, and then remember to send both
> > + * the header and the assembler differences in your patch submission.
> >   */
> >  endef
> >  export __note
> >  
> > -.PHONY: all clean
> > -all: x86-a-b-bootblock.h
> > -
> > -x86-a-b-bootblock.h: x86.bootsect
> > -	echo "$$__note" > header.tmp
> > -	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
> > -	mv header.tmp $@
> > +find-arch-cross-cc = $(lastword $(shell grep -h "CROSS_CC_GUEST="
> > $(wildcard $(SRC_PATH)/$(patsubst
> > i386,*86*,$(1))-softmmu/config-target.mak)))
> 
> The above function hangs unless configuring with
> '--target-list=x86_64-softmmu,aarch64-softmmu'. I tried just x86_64 alone,
> just aarch64 alone, and also configuring both x86_64 and i386, but none
> of those worked. For some reason grep isn't happy with the generated path
> list. I tested like this
> 
>  ./configure --target-list=x86_64-softmmu,i386-softmmu
>  make -C tests/migration
> 
> And, while not an issue of this series, I had to manually add
> CROSS_CC_GUEST="aarch64-linux-gnu-gcc" to aarch64-softmmu/config-target.mak
> for it to work, because configure's compiler test fails with the Fedora
> aarch64-linux-gnu-gcc installation (the linker can't find code it needs
> to a build a program with main()). I'm not sure if building programs with
> main() is something the CROSS_CC_GUEST compiler needs to do. Maybe that
> test can be relaxed. Alex?

I saw the same problem and it needs to be addressed in ./configure file. Most distros don't ship with
cross-compiled glibc. So compiling main() will fail because of that. 

> 
> Thanks,
> drew
> 
> > +parse-cross-prefix = $(subst gcc,,$(patsubst cc,gcc,$(patsubst
> > CROSS_CC_GUEST="%",%,$(call find-arch-cross-cc,$(1)))))
> > +gen-cross-prefix = $(patsubst %-,CROSS_PREFIX=%-,$(call
> > parse-cross-prefix,$(1)))
> >  
> > -x86.bootsect: x86.boot
> > -	dd if=$< of=$@ bs=256 count=2 skip=124
> > +.PHONY: all $(TARGET_LIST)
> >  
> > -x86.boot: x86.o
> > -	$(CROSS_PREFIX)objcopy -O binary $< $@
> > +all: $(TARGET_LIST)
> >  
> > -x86.o: x86-a-b-bootblock.S
> > -	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
> > +$(TARGET_LIST):
> > +	$(MAKE) -C $@ $(call gen-cross-prefix,$@)
> >  
> >  clean:
> > -	@rm -rf *.boot *.o *.bootsect
> > +	for target in $(TARGET_LIST); do \
> > +		$(MAKE) -C $$target clean; \
> > +	done
> > diff --git a/tests/migration/i386/Makefile b/tests/migration/i386/Makefile
> > new file mode 100644
> > index 0000000..5c03241
> > --- /dev/null
> > +++ b/tests/migration/i386/Makefile
> > @@ -0,0 +1,22 @@
> > +# To specify cross compiler prefix, use CROSS_PREFIX=
> > +#   $ make CROSS_PREFIX=x86_64-linux-gnu-
> > +
> > +.PHONY: all clean
> > +all: a-b-bootblock.h
> > +
> > +a-b-bootblock.h: x86.bootsect
> > +	echo "$$__note" > header.tmp
> > +	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
> > +	mv header.tmp $@
> > +
> > +x86.bootsect: x86.boot
> > +	dd if=$< of=$@ bs=256 count=2 skip=124
> > +
> > +x86.boot: x86.o
> > +	$(CROSS_PREFIX)objcopy -O binary $< $@
> > +
> > +x86.o: a-b-bootblock.S
> > +	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
> > +
> > +clean:
> > +	@rm -rf *.boot *.o *.bootsect
> > diff --git a/tests/migration/x86-a-b-bootblock.S
> > b/tests/migration/i386/a-b-bootblock.S
> > similarity index 93%
> > rename from tests/migration/x86-a-b-bootblock.S
> > rename to tests/migration/i386/a-b-bootblock.S
> > index b164264..3f97f28 100644
> > --- a/tests/migration/x86-a-b-bootblock.S
> > +++ b/tests/migration/i386/a-b-bootblock.S
> > @@ -3,10 +3,6 @@
> >  #  range.
> >  #  Outputs an initial 'A' on serial followed by repeated 'B's
> >  #
> > -# run   tests/migration/rebuild-x86-bootblock.sh
> > -#   to regenerate the hex, and remember to include both the .h and .s
> > -#   in any patches.
> > -#
> >  # Copyright (c) 2016 Red Hat, Inc. and/or its affiliates
> >  # This work is licensed under the terms of the GNU GPL, version 2 or
> >  later.
> >  # See the COPYING file in the top-level directory.
> > diff --git a/tests/migration/x86-a-b-bootblock.h
> > b/tests/migration/i386/a-b-bootblock.h
> > similarity index 92%
> > rename from tests/migration/x86-a-b-bootblock.h
> > rename to tests/migration/i386/a-b-bootblock.h
> > index 78a151f..7d459d4 100644
> > --- a/tests/migration/x86-a-b-bootblock.h
> > +++ b/tests/migration/i386/a-b-bootblock.h
> > @@ -1,7 +1,7 @@
> > -/* This file is automatically generated from
> > - * tests/migration/x86-a-b-bootblock.s, edit that and then run
> > - * tests/migration/rebuild-x86-bootblock.sh to update,
> > - * and then remember to send both in your patch submission.
> > +/* This file is automatically generated from the assembly file in
> > + * tests/migration/i386. Edit that file and then run "make all"
> > + * inside tests/migration to update, and then remember to send both
> > + * the header and the assembler differences in your patch submission.
> >   */
> >  unsigned char x86_bootsect[] = {
> >    0xfa, 0x0f, 0x01, 0x16, 0x74, 0x7c, 0x66, 0xb8, 0x01, 0x00, 0x00, 0x00,
> > --
> > 1.8.3.1
> > 
> > 
> 

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
  2018-09-06 13:37     ` Wei Huang
@ 2018-09-06 14:00       ` Andrew Jones
  2018-09-06 16:23         ` Wei Huang
  0 siblings, 1 reply; 17+ messages in thread
From: Andrew Jones @ 2018-09-06 14:00 UTC (permalink / raw)
  To: Wei Huang
  Cc: lvivier, peter maydell, quintela, qemu-devel, dgilbert, alex bennee

On Thu, Sep 06, 2018 at 09:37:04AM -0400, Wei Huang wrote:
> 
> 
> ----- Original Message -----
> > From: "Andrew Jones" <drjones@redhat.com>
> > To: "Wei Huang" <wei@redhat.com>
> > Cc: qemu-devel@nongnu.org, lvivier@redhat.com, "peter maydell" <peter.maydell@linaro.org>, quintela@redhat.com,
> > dgilbert@redhat.com, "alex bennee" <alex.bennee@linaro.org>
> > Sent: Thursday, September 6, 2018 7:03:32 AM
> > Subject: Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
> > 
> > On Wed, Sep 05, 2018 at 03:15:32PM -0400, Wei Huang wrote:
> > > Recently a new configure option, CROSS_CC_GUEST, was added to
> > > $(TARGET)-softmmu/config-target.mak to support TCG-related tests. This
> > > patch tries to leverage this option to support cross compilation when the
> > > migration boot block file is being re-generated:
> > > 
> > >  * The x86 related files are moved to a new sub-dir (named ./i386).
> > >  * A new top-layer Makefile is created in tests/migration/ directory.
> > >    This Makefile searches and parses CROSS_CC_GUEST to generate
> > >    CROSS_PREFIX.
> > >    The CROSS_PREFIX, if available, is then passed to
> > >    migration/$ARCH/Makefile.
> > > 
> > > Reviewed-by: Juan Quintela <quintela@redhat.com>
> > > Signed-off-by: Wei Huang <wei@redhat.com>
> > > ---
> > >  tests/migration-test.c                             |  2 +-
> > >  tests/migration/Makefile                           | 44
> > >  ++++++++++++----------
> > >  tests/migration/i386/Makefile                      | 22 +++++++++++
> > >  .../{x86-a-b-bootblock.S => i386/a-b-bootblock.S}  |  4 --
> > >  .../{x86-a-b-bootblock.h => i386/a-b-bootblock.h}  |  8 ++--
> > >  5 files changed, 51 insertions(+), 29 deletions(-)
> > >  create mode 100644 tests/migration/i386/Makefile
> > >  rename tests/migration/{x86-a-b-bootblock.S => i386/a-b-bootblock.S} (93%)
> > >  rename tests/migration/{x86-a-b-bootblock.h => i386/a-b-bootblock.h} (92%)
> > > 
> > > diff --git a/tests/migration-test.c b/tests/migration-test.c
> > > index 0e687b7..fe6b41a 100644
> > > --- a/tests/migration-test.c
> > > +++ b/tests/migration-test.c
> > > @@ -83,7 +83,7 @@ static const char *tmpfs;
> > >  /* A simple PC boot sector that modifies memory (1-100MB) quickly
> > >   * outputting a 'B' every so often if it's still running.
> > >   */
> > > -#include "tests/migration/x86-a-b-bootblock.h"
> > > +#include "tests/migration/i386/a-b-bootblock.h"
> > >  
> > >  static void init_bootfile_x86(const char *bootpath)
> > >  {
> > > diff --git a/tests/migration/Makefile b/tests/migration/Makefile
> > > index c0824b4..a9ed875 100644
> > > --- a/tests/migration/Makefile
> > > +++ b/tests/migration/Makefile
> > > @@ -1,31 +1,35 @@
> > > -# To specify cross compiler prefix, use CROSS_PREFIX=
> > > -#   $ make CROSS_PREFIX=x86_64-linux-gnu-
> > > +#
> > > +# Copyright (c) 2018 Red Hat, Inc. and/or its affiliates
> > > +#
> > > +# This work is licensed under the terms of the GNU GPL, version 2 or
> > > later.
> > > +# See the COPYING file in the top-level directory.
> > > +#
> > > +
> > > +TARGET_LIST = i386
> > > +
> > > +SRC_PATH = ../..
> > >  
> > >  override define __note
> > > -/* This file is automatically generated from
> > > - * tests/migration/x86-a-b-bootblock.S, edit that and then run
> > > - * tests/migration/rebuild-x86-bootblock.sh to update,
> > > - * and then remember to send both in your patch submission.
> > > +/* This file is automatically generated from the assembly file in
> > > + * tests/migration/$@. Edit that file and then run "make all"
> > > + * inside tests/migration to update, and then remember to send both
> > > + * the header and the assembler differences in your patch submission.
> > >   */
> > >  endef
> > >  export __note
> > >  
> > > -.PHONY: all clean
> > > -all: x86-a-b-bootblock.h
> > > -
> > > -x86-a-b-bootblock.h: x86.bootsect
> > > -	echo "$$__note" > header.tmp
> > > -	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
> > > -	mv header.tmp $@
> > > +find-arch-cross-cc = $(lastword $(shell grep -h "CROSS_CC_GUEST="
> > > $(wildcard $(SRC_PATH)/$(patsubst
> > > i386,*86*,$(1))-softmmu/config-target.mak)))
> > 
> > The above function hangs unless configuring with
> > '--target-list=x86_64-softmmu,aarch64-softmmu'. I tried just x86_64 alone,
> > just aarch64 alone, and also configuring both x86_64 and i386, but none
> > of those worked. For some reason grep isn't happy with the generated path
> > list. I tested like this
> > 
> >  ./configure --target-list=x86_64-softmmu,i386-softmmu
> >  make -C tests/migration
> > 
> > And, while not an issue of this series, I had to manually add
> > CROSS_CC_GUEST="aarch64-linux-gnu-gcc" to aarch64-softmmu/config-target.mak
> > for it to work, because configure's compiler test fails with the Fedora
> > aarch64-linux-gnu-gcc installation (the linker can't find code it needs
> > to a build a program with main()). I'm not sure if building programs with
> > main() is something the CROSS_CC_GUEST compiler needs to do. Maybe that
> > test can be relaxed. Alex?
> 
> I saw the same problem and it needs to be addressed in ./configure file. Most distros don't ship with
> cross-compiled glibc. So compiling main() will fail because of that. 

I don't care too much about that problem. You just need to have the right
cross compiler installed. I care about the one above, which is a separate
problem and should be fixed. The tests/migration build shouldn't hang
when a target-list other than x86_64-softmmu,aarch64-softmmu is used.

Thanks,
drew

> 
> > 
> > Thanks,
> > drew
> > 
> > > +parse-cross-prefix = $(subst gcc,,$(patsubst cc,gcc,$(patsubst
> > > CROSS_CC_GUEST="%",%,$(call find-arch-cross-cc,$(1)))))
> > > +gen-cross-prefix = $(patsubst %-,CROSS_PREFIX=%-,$(call
> > > parse-cross-prefix,$(1)))
> > >  
> > > -x86.bootsect: x86.boot
> > > -	dd if=$< of=$@ bs=256 count=2 skip=124
> > > +.PHONY: all $(TARGET_LIST)
> > >  
> > > -x86.boot: x86.o
> > > -	$(CROSS_PREFIX)objcopy -O binary $< $@
> > > +all: $(TARGET_LIST)
> > >  
> > > -x86.o: x86-a-b-bootblock.S
> > > -	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
> > > +$(TARGET_LIST):
> > > +	$(MAKE) -C $@ $(call gen-cross-prefix,$@)
> > >  
> > >  clean:
> > > -	@rm -rf *.boot *.o *.bootsect
> > > +	for target in $(TARGET_LIST); do \
> > > +		$(MAKE) -C $$target clean; \
> > > +	done
> > > diff --git a/tests/migration/i386/Makefile b/tests/migration/i386/Makefile
> > > new file mode 100644
> > > index 0000000..5c03241
> > > --- /dev/null
> > > +++ b/tests/migration/i386/Makefile
> > > @@ -0,0 +1,22 @@
> > > +# To specify cross compiler prefix, use CROSS_PREFIX=
> > > +#   $ make CROSS_PREFIX=x86_64-linux-gnu-
> > > +
> > > +.PHONY: all clean
> > > +all: a-b-bootblock.h
> > > +
> > > +a-b-bootblock.h: x86.bootsect
> > > +	echo "$$__note" > header.tmp
> > > +	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
> > > +	mv header.tmp $@
> > > +
> > > +x86.bootsect: x86.boot
> > > +	dd if=$< of=$@ bs=256 count=2 skip=124
> > > +
> > > +x86.boot: x86.o
> > > +	$(CROSS_PREFIX)objcopy -O binary $< $@
> > > +
> > > +x86.o: a-b-bootblock.S
> > > +	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
> > > +
> > > +clean:
> > > +	@rm -rf *.boot *.o *.bootsect
> > > diff --git a/tests/migration/x86-a-b-bootblock.S
> > > b/tests/migration/i386/a-b-bootblock.S
> > > similarity index 93%
> > > rename from tests/migration/x86-a-b-bootblock.S
> > > rename to tests/migration/i386/a-b-bootblock.S
> > > index b164264..3f97f28 100644
> > > --- a/tests/migration/x86-a-b-bootblock.S
> > > +++ b/tests/migration/i386/a-b-bootblock.S
> > > @@ -3,10 +3,6 @@
> > >  #  range.
> > >  #  Outputs an initial 'A' on serial followed by repeated 'B's
> > >  #
> > > -# run   tests/migration/rebuild-x86-bootblock.sh
> > > -#   to regenerate the hex, and remember to include both the .h and .s
> > > -#   in any patches.
> > > -#
> > >  # Copyright (c) 2016 Red Hat, Inc. and/or its affiliates
> > >  # This work is licensed under the terms of the GNU GPL, version 2 or
> > >  later.
> > >  # See the COPYING file in the top-level directory.
> > > diff --git a/tests/migration/x86-a-b-bootblock.h
> > > b/tests/migration/i386/a-b-bootblock.h
> > > similarity index 92%
> > > rename from tests/migration/x86-a-b-bootblock.h
> > > rename to tests/migration/i386/a-b-bootblock.h
> > > index 78a151f..7d459d4 100644
> > > --- a/tests/migration/x86-a-b-bootblock.h
> > > +++ b/tests/migration/i386/a-b-bootblock.h
> > > @@ -1,7 +1,7 @@
> > > -/* This file is automatically generated from
> > > - * tests/migration/x86-a-b-bootblock.s, edit that and then run
> > > - * tests/migration/rebuild-x86-bootblock.sh to update,
> > > - * and then remember to send both in your patch submission.
> > > +/* This file is automatically generated from the assembly file in
> > > + * tests/migration/i386. Edit that file and then run "make all"
> > > + * inside tests/migration to update, and then remember to send both
> > > + * the header and the assembler differences in your patch submission.
> > >   */
> > >  unsigned char x86_bootsect[] = {
> > >    0xfa, 0x0f, 0x01, 0x16, 0x74, 0x7c, 0x66, 0xb8, 0x01, 0x00, 0x00, 0x00,
> > > --
> > > 1.8.3.1
> > > 
> > > 
> > 
> 

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
  2018-09-06 14:00       ` Andrew Jones
@ 2018-09-06 16:23         ` Wei Huang
  2018-09-07  7:04           ` Andrew Jones
  0 siblings, 1 reply; 17+ messages in thread
From: Wei Huang @ 2018-09-06 16:23 UTC (permalink / raw)
  To: Andrew Jones
  Cc: lvivier, peter maydell, quintela, qemu-devel, dgilbert, alex bennee



----- Original Message -----
> From: "Andrew Jones" <drjones@redhat.com>
> To: "Wei Huang" <wehuang@redhat.com>
> Cc: lvivier@redhat.com, "peter maydell" <peter.maydell@linaro.org>, quintela@redhat.com, qemu-devel@nongnu.org,
> dgilbert@redhat.com, "alex bennee" <alex.bennee@linaro.org>
> Sent: Thursday, September 6, 2018 9:00:33 AM
> Subject: Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
> 
> On Thu, Sep 06, 2018 at 09:37:04AM -0400, Wei Huang wrote:
> > 
> > 
> > ----- Original Message -----
> > > From: "Andrew Jones" <drjones@redhat.com>
> > > To: "Wei Huang" <wei@redhat.com>
> > > Cc: qemu-devel@nongnu.org, lvivier@redhat.com, "peter maydell"
> > > <peter.maydell@linaro.org>, quintela@redhat.com,
> > > dgilbert@redhat.com, "alex bennee" <alex.bennee@linaro.org>
> > > Sent: Thursday, September 6, 2018 7:03:32 AM
> > > Subject: Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross
> > > compilation in generating boot header file
> > > 
> > > On Wed, Sep 05, 2018 at 03:15:32PM -0400, Wei Huang wrote:
> > > > Recently a new configure option, CROSS_CC_GUEST, was added to
> > > > $(TARGET)-softmmu/config-target.mak to support TCG-related tests. This
> > > > patch tries to leverage this option to support cross compilation when
> > > > the
> > > > migration boot block file is being re-generated:
> > > > 
> > > >  * The x86 related files are moved to a new sub-dir (named ./i386).
> > > >  * A new top-layer Makefile is created in tests/migration/ directory.
> > > >    This Makefile searches and parses CROSS_CC_GUEST to generate
> > > >    CROSS_PREFIX.
> > > >    The CROSS_PREFIX, if available, is then passed to
> > > >    migration/$ARCH/Makefile.
> > > > 
> > > > Reviewed-by: Juan Quintela <quintela@redhat.com>
> > > > Signed-off-by: Wei Huang <wei@redhat.com>
> > > > ---
> > > >  tests/migration-test.c                             |  2 +-
> > > >  tests/migration/Makefile                           | 44
> > > >  ++++++++++++----------
> > > >  tests/migration/i386/Makefile                      | 22 +++++++++++
> > > >  .../{x86-a-b-bootblock.S => i386/a-b-bootblock.S}  |  4 --
> > > >  .../{x86-a-b-bootblock.h => i386/a-b-bootblock.h}  |  8 ++--
> > > >  5 files changed, 51 insertions(+), 29 deletions(-)
> > > >  create mode 100644 tests/migration/i386/Makefile
> > > >  rename tests/migration/{x86-a-b-bootblock.S => i386/a-b-bootblock.S}
> > > >  (93%)
> > > >  rename tests/migration/{x86-a-b-bootblock.h => i386/a-b-bootblock.h}
> > > >  (92%)
> > > > 
> > > > diff --git a/tests/migration-test.c b/tests/migration-test.c
> > > > index 0e687b7..fe6b41a 100644
> > > > --- a/tests/migration-test.c
> > > > +++ b/tests/migration-test.c
> > > > @@ -83,7 +83,7 @@ static const char *tmpfs;
> > > >  /* A simple PC boot sector that modifies memory (1-100MB) quickly
> > > >   * outputting a 'B' every so often if it's still running.
> > > >   */
> > > > -#include "tests/migration/x86-a-b-bootblock.h"
> > > > +#include "tests/migration/i386/a-b-bootblock.h"
> > > >  
> > > >  static void init_bootfile_x86(const char *bootpath)
> > > >  {
> > > > diff --git a/tests/migration/Makefile b/tests/migration/Makefile
> > > > index c0824b4..a9ed875 100644
> > > > --- a/tests/migration/Makefile
> > > > +++ b/tests/migration/Makefile
> > > > @@ -1,31 +1,35 @@
> > > > -# To specify cross compiler prefix, use CROSS_PREFIX=
> > > > -#   $ make CROSS_PREFIX=x86_64-linux-gnu-
> > > > +#
> > > > +# Copyright (c) 2018 Red Hat, Inc. and/or its affiliates
> > > > +#
> > > > +# This work is licensed under the terms of the GNU GPL, version 2 or
> > > > later.
> > > > +# See the COPYING file in the top-level directory.
> > > > +#
> > > > +
> > > > +TARGET_LIST = i386
> > > > +
> > > > +SRC_PATH = ../..
> > > >  
> > > >  override define __note
> > > > -/* This file is automatically generated from
> > > > - * tests/migration/x86-a-b-bootblock.S, edit that and then run
> > > > - * tests/migration/rebuild-x86-bootblock.sh to update,
> > > > - * and then remember to send both in your patch submission.
> > > > +/* This file is automatically generated from the assembly file in
> > > > + * tests/migration/$@. Edit that file and then run "make all"
> > > > + * inside tests/migration to update, and then remember to send both
> > > > + * the header and the assembler differences in your patch submission.
> > > >   */
> > > >  endef
> > > >  export __note
> > > >  
> > > > -.PHONY: all clean
> > > > -all: x86-a-b-bootblock.h
> > > > -
> > > > -x86-a-b-bootblock.h: x86.bootsect
> > > > -	echo "$$__note" > header.tmp
> > > > -	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
> > > > -	mv header.tmp $@
> > > > +find-arch-cross-cc = $(lastword $(shell grep -h "CROSS_CC_GUEST="
> > > > $(wildcard $(SRC_PATH)/$(patsubst
> > > > i386,*86*,$(1))-softmmu/config-target.mak)))
> > > 
> > > The above function hangs unless configuring with
> > > '--target-list=x86_64-softmmu,aarch64-softmmu'. I tried just x86_64
> > > alone,
> > > just aarch64 alone, and also configuring both x86_64 and i386, but none
> > > of those worked. For some reason grep isn't happy with the generated path
> > > list. I tested like this
> > > 
> > >  ./configure --target-list=x86_64-softmmu,i386-softmmu
> > >  make -C tests/migration
> > > 
> > > And, while not an issue of this series, I had to manually add
> > > CROSS_CC_GUEST="aarch64-linux-gnu-gcc" to
> > > aarch64-softmmu/config-target.mak
> > > for it to work, because configure's compiler test fails with the Fedora
> > > aarch64-linux-gnu-gcc installation (the linker can't find code it needs
> > > to a build a program with main()). I'm not sure if building programs with
> > > main() is something the CROSS_CC_GUEST compiler needs to do. Maybe that
> > > test can be relaxed. Alex?
> > 
> > I saw the same problem and it needs to be addressed in ./configure file.
> > Most distros don't ship with
> > cross-compiled glibc. So compiling main() will fail because of that.
> 
> I don't care too much about that problem. You just need to have the right
> cross compiler installed. I care about the one above, which is a separate
> problem and should be fixed. The tests/migration build shouldn't hang
> when a target-list other than x86_64-softmmu,aarch64-softmmu is used.
> 

Since you don't have aarch64, the stall happens when grep is supplied with
an empty file name and waiting on standard input. There is no easy way to
skip standard input for grep. How about the following? Basically we always
supply with a terminator. 

grep -h "CROSS_CC_GUEST=" $(wildcard $(SRC_PATH)/$(patsubst i386,*86*,$(1))-softmmu/config-target.mak) /dev/null)

> Thanks,
> drew
> 
> > 
> > > 
> > > Thanks,
> > > drew
> > > 
> > > > +parse-cross-prefix = $(subst gcc,,$(patsubst cc,gcc,$(patsubst
> > > > CROSS_CC_GUEST="%",%,$(call find-arch-cross-cc,$(1)))))
> > > > +gen-cross-prefix = $(patsubst %-,CROSS_PREFIX=%-,$(call
> > > > parse-cross-prefix,$(1)))
> > > >  
> > > > -x86.bootsect: x86.boot
> > > > -	dd if=$< of=$@ bs=256 count=2 skip=124
> > > > +.PHONY: all $(TARGET_LIST)
> > > >  
> > > > -x86.boot: x86.o
> > > > -	$(CROSS_PREFIX)objcopy -O binary $< $@
> > > > +all: $(TARGET_LIST)
> > > >  
> > > > -x86.o: x86-a-b-bootblock.S
> > > > -	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
> > > > +$(TARGET_LIST):
> > > > +	$(MAKE) -C $@ $(call gen-cross-prefix,$@)
> > > >  
> > > >  clean:
> > > > -	@rm -rf *.boot *.o *.bootsect
> > > > +	for target in $(TARGET_LIST); do \
> > > > +		$(MAKE) -C $$target clean; \
> > > > +	done
> > > > diff --git a/tests/migration/i386/Makefile
> > > > b/tests/migration/i386/Makefile
> > > > new file mode 100644
> > > > index 0000000..5c03241
> > > > --- /dev/null
> > > > +++ b/tests/migration/i386/Makefile
> > > > @@ -0,0 +1,22 @@
> > > > +# To specify cross compiler prefix, use CROSS_PREFIX=
> > > > +#   $ make CROSS_PREFIX=x86_64-linux-gnu-
> > > > +
> > > > +.PHONY: all clean
> > > > +all: a-b-bootblock.h
> > > > +
> > > > +a-b-bootblock.h: x86.bootsect
> > > > +	echo "$$__note" > header.tmp
> > > > +	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
> > > > +	mv header.tmp $@
> > > > +
> > > > +x86.bootsect: x86.boot
> > > > +	dd if=$< of=$@ bs=256 count=2 skip=124
> > > > +
> > > > +x86.boot: x86.o
> > > > +	$(CROSS_PREFIX)objcopy -O binary $< $@
> > > > +
> > > > +x86.o: a-b-bootblock.S
> > > > +	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
> > > > +
> > > > +clean:
> > > > +	@rm -rf *.boot *.o *.bootsect
> > > > diff --git a/tests/migration/x86-a-b-bootblock.S
> > > > b/tests/migration/i386/a-b-bootblock.S
> > > > similarity index 93%
> > > > rename from tests/migration/x86-a-b-bootblock.S
> > > > rename to tests/migration/i386/a-b-bootblock.S
> > > > index b164264..3f97f28 100644
> > > > --- a/tests/migration/x86-a-b-bootblock.S
> > > > +++ b/tests/migration/i386/a-b-bootblock.S
> > > > @@ -3,10 +3,6 @@
> > > >  #  range.
> > > >  #  Outputs an initial 'A' on serial followed by repeated 'B's
> > > >  #
> > > > -# run   tests/migration/rebuild-x86-bootblock.sh
> > > > -#   to regenerate the hex, and remember to include both the .h and .s
> > > > -#   in any patches.
> > > > -#
> > > >  # Copyright (c) 2016 Red Hat, Inc. and/or its affiliates
> > > >  # This work is licensed under the terms of the GNU GPL, version 2 or
> > > >  later.
> > > >  # See the COPYING file in the top-level directory.
> > > > diff --git a/tests/migration/x86-a-b-bootblock.h
> > > > b/tests/migration/i386/a-b-bootblock.h
> > > > similarity index 92%
> > > > rename from tests/migration/x86-a-b-bootblock.h
> > > > rename to tests/migration/i386/a-b-bootblock.h
> > > > index 78a151f..7d459d4 100644
> > > > --- a/tests/migration/x86-a-b-bootblock.h
> > > > +++ b/tests/migration/i386/a-b-bootblock.h
> > > > @@ -1,7 +1,7 @@
> > > > -/* This file is automatically generated from
> > > > - * tests/migration/x86-a-b-bootblock.s, edit that and then run
> > > > - * tests/migration/rebuild-x86-bootblock.sh to update,
> > > > - * and then remember to send both in your patch submission.
> > > > +/* This file is automatically generated from the assembly file in
> > > > + * tests/migration/i386. Edit that file and then run "make all"
> > > > + * inside tests/migration to update, and then remember to send both
> > > > + * the header and the assembler differences in your patch submission.
> > > >   */
> > > >  unsigned char x86_bootsect[] = {
> > > >    0xfa, 0x0f, 0x01, 0x16, 0x74, 0x7c, 0x66, 0xb8, 0x01, 0x00, 0x00,
> > > >    0x00,
> > > > --
> > > > 1.8.3.1
> > > > 
> > > > 
> > > 
> > 
> 

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
  2018-09-06 16:23         ` Wei Huang
@ 2018-09-07  7:04           ` Andrew Jones
  2018-09-07 13:42             ` Wei Huang
  0 siblings, 1 reply; 17+ messages in thread
From: Andrew Jones @ 2018-09-07  7:04 UTC (permalink / raw)
  To: Wei Huang
  Cc: lvivier, peter maydell, quintela, qemu-devel, dgilbert, alex bennee

On Thu, Sep 06, 2018 at 12:23:45PM -0400, Wei Huang wrote:
> 
> 
> ----- Original Message -----
> > From: "Andrew Jones" <drjones@redhat.com>
> > To: "Wei Huang" <wehuang@redhat.com>
> > Cc: lvivier@redhat.com, "peter maydell" <peter.maydell@linaro.org>, quintela@redhat.com, qemu-devel@nongnu.org,
> > dgilbert@redhat.com, "alex bennee" <alex.bennee@linaro.org>
> > Sent: Thursday, September 6, 2018 9:00:33 AM
> > Subject: Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
> > 
> > On Thu, Sep 06, 2018 at 09:37:04AM -0400, Wei Huang wrote:
> > > 
> > > 
> > > ----- Original Message -----
> > > > From: "Andrew Jones" <drjones@redhat.com>
> > > > To: "Wei Huang" <wei@redhat.com>
> > > > Cc: qemu-devel@nongnu.org, lvivier@redhat.com, "peter maydell"
> > > > <peter.maydell@linaro.org>, quintela@redhat.com,
> > > > dgilbert@redhat.com, "alex bennee" <alex.bennee@linaro.org>
> > > > Sent: Thursday, September 6, 2018 7:03:32 AM
> > > > Subject: Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross
> > > > compilation in generating boot header file
> > > > 
> > > > On Wed, Sep 05, 2018 at 03:15:32PM -0400, Wei Huang wrote:
> > > > > Recently a new configure option, CROSS_CC_GUEST, was added to
> > > > > $(TARGET)-softmmu/config-target.mak to support TCG-related tests. This
> > > > > patch tries to leverage this option to support cross compilation when
> > > > > the
> > > > > migration boot block file is being re-generated:
> > > > > 
> > > > >  * The x86 related files are moved to a new sub-dir (named ./i386).
> > > > >  * A new top-layer Makefile is created in tests/migration/ directory.
> > > > >    This Makefile searches and parses CROSS_CC_GUEST to generate
> > > > >    CROSS_PREFIX.
> > > > >    The CROSS_PREFIX, if available, is then passed to
> > > > >    migration/$ARCH/Makefile.
> > > > > 
> > > > > Reviewed-by: Juan Quintela <quintela@redhat.com>
> > > > > Signed-off-by: Wei Huang <wei@redhat.com>
> > > > > ---
> > > > >  tests/migration-test.c                             |  2 +-
> > > > >  tests/migration/Makefile                           | 44
> > > > >  ++++++++++++----------
> > > > >  tests/migration/i386/Makefile                      | 22 +++++++++++
> > > > >  .../{x86-a-b-bootblock.S => i386/a-b-bootblock.S}  |  4 --
> > > > >  .../{x86-a-b-bootblock.h => i386/a-b-bootblock.h}  |  8 ++--
> > > > >  5 files changed, 51 insertions(+), 29 deletions(-)
> > > > >  create mode 100644 tests/migration/i386/Makefile
> > > > >  rename tests/migration/{x86-a-b-bootblock.S => i386/a-b-bootblock.S}
> > > > >  (93%)
> > > > >  rename tests/migration/{x86-a-b-bootblock.h => i386/a-b-bootblock.h}
> > > > >  (92%)
> > > > > 
> > > > > diff --git a/tests/migration-test.c b/tests/migration-test.c
> > > > > index 0e687b7..fe6b41a 100644
> > > > > --- a/tests/migration-test.c
> > > > > +++ b/tests/migration-test.c
> > > > > @@ -83,7 +83,7 @@ static const char *tmpfs;
> > > > >  /* A simple PC boot sector that modifies memory (1-100MB) quickly
> > > > >   * outputting a 'B' every so often if it's still running.
> > > > >   */
> > > > > -#include "tests/migration/x86-a-b-bootblock.h"
> > > > > +#include "tests/migration/i386/a-b-bootblock.h"
> > > > >  
> > > > >  static void init_bootfile_x86(const char *bootpath)
> > > > >  {
> > > > > diff --git a/tests/migration/Makefile b/tests/migration/Makefile
> > > > > index c0824b4..a9ed875 100644
> > > > > --- a/tests/migration/Makefile
> > > > > +++ b/tests/migration/Makefile
> > > > > @@ -1,31 +1,35 @@
> > > > > -# To specify cross compiler prefix, use CROSS_PREFIX=
> > > > > -#   $ make CROSS_PREFIX=x86_64-linux-gnu-
> > > > > +#
> > > > > +# Copyright (c) 2018 Red Hat, Inc. and/or its affiliates
> > > > > +#
> > > > > +# This work is licensed under the terms of the GNU GPL, version 2 or
> > > > > later.
> > > > > +# See the COPYING file in the top-level directory.
> > > > > +#
> > > > > +
> > > > > +TARGET_LIST = i386
> > > > > +
> > > > > +SRC_PATH = ../..
> > > > >  
> > > > >  override define __note
> > > > > -/* This file is automatically generated from
> > > > > - * tests/migration/x86-a-b-bootblock.S, edit that and then run
> > > > > - * tests/migration/rebuild-x86-bootblock.sh to update,
> > > > > - * and then remember to send both in your patch submission.
> > > > > +/* This file is automatically generated from the assembly file in
> > > > > + * tests/migration/$@. Edit that file and then run "make all"
> > > > > + * inside tests/migration to update, and then remember to send both
> > > > > + * the header and the assembler differences in your patch submission.
> > > > >   */
> > > > >  endef
> > > > >  export __note
> > > > >  
> > > > > -.PHONY: all clean
> > > > > -all: x86-a-b-bootblock.h
> > > > > -
> > > > > -x86-a-b-bootblock.h: x86.bootsect
> > > > > -	echo "$$__note" > header.tmp
> > > > > -	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
> > > > > -	mv header.tmp $@
> > > > > +find-arch-cross-cc = $(lastword $(shell grep -h "CROSS_CC_GUEST="
> > > > > $(wildcard $(SRC_PATH)/$(patsubst
> > > > > i386,*86*,$(1))-softmmu/config-target.mak)))
> > > > 
> > > > The above function hangs unless configuring with
> > > > '--target-list=x86_64-softmmu,aarch64-softmmu'. I tried just x86_64
> > > > alone,
> > > > just aarch64 alone, and also configuring both x86_64 and i386, but none
> > > > of those worked. For some reason grep isn't happy with the generated path
> > > > list. I tested like this
> > > > 
> > > >  ./configure --target-list=x86_64-softmmu,i386-softmmu
> > > >  make -C tests/migration
> > > > 
> > > > And, while not an issue of this series, I had to manually add
> > > > CROSS_CC_GUEST="aarch64-linux-gnu-gcc" to
> > > > aarch64-softmmu/config-target.mak
> > > > for it to work, because configure's compiler test fails with the Fedora
> > > > aarch64-linux-gnu-gcc installation (the linker can't find code it needs
> > > > to a build a program with main()). I'm not sure if building programs with
> > > > main() is something the CROSS_CC_GUEST compiler needs to do. Maybe that
> > > > test can be relaxed. Alex?
> > > 
> > > I saw the same problem and it needs to be addressed in ./configure file.
> > > Most distros don't ship with
> > > cross-compiled glibc. So compiling main() will fail because of that.
> > 
> > I don't care too much about that problem. You just need to have the right
> > cross compiler installed. I care about the one above, which is a separate
> > problem and should be fixed. The tests/migration build shouldn't hang
> > when a target-list other than x86_64-softmmu,aarch64-softmmu is used.
> > 
> 
> Since you don't have aarch64, the stall happens when grep is supplied with
> an empty file name and waiting on standard input. There is no easy way to
> skip standard input for grep. How about the following? Basically we always
> supply with a terminator. 
> 
> grep -h "CROSS_CC_GUEST=" $(wildcard $(SRC_PATH)/$(patsubst i386,*86*,$(1))-softmmu/config-target.mak) /dev/null)

Yeah, that should work. Also, when a target-list of
i386-softmmu,x86_64-softmmu is used, since lastword is applied to
the grep results, then the cross-cc-guest entry for x86_64 will be
selected for the i386 target (since it comes later in the alphabet).
That's not correct, but I won't hold the patch up over it.

Thanks,
drew

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
  2018-09-07  7:04           ` Andrew Jones
@ 2018-09-07 13:42             ` Wei Huang
  0 siblings, 0 replies; 17+ messages in thread
From: Wei Huang @ 2018-09-07 13:42 UTC (permalink / raw)
  To: Andrew Jones, Wei Huang
  Cc: lvivier, peter maydell, quintela, qemu-devel, dgilbert, alex bennee



On 09/07/2018 02:04 AM, Andrew Jones wrote:
> On Thu, Sep 06, 2018 at 12:23:45PM -0400, Wei Huang wrote:
>>
>>
>> ----- Original Message -----
>>> From: "Andrew Jones" <drjones@redhat.com>
>>> To: "Wei Huang" <wehuang@redhat.com>
>>> Cc: lvivier@redhat.com, "peter maydell" <peter.maydell@linaro.org>, quintela@redhat.com, qemu-devel@nongnu.org,
>>> dgilbert@redhat.com, "alex bennee" <alex.bennee@linaro.org>
>>> Sent: Thursday, September 6, 2018 9:00:33 AM
>>> Subject: Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
>>>
>>> On Thu, Sep 06, 2018 at 09:37:04AM -0400, Wei Huang wrote:
>>>>
>>>>
>>>> ----- Original Message -----
>>>>> From: "Andrew Jones" <drjones@redhat.com>
>>>>> To: "Wei Huang" <wei@redhat.com>
>>>>> Cc: qemu-devel@nongnu.org, lvivier@redhat.com, "peter maydell"
>>>>> <peter.maydell@linaro.org>, quintela@redhat.com,
>>>>> dgilbert@redhat.com, "alex bennee" <alex.bennee@linaro.org>
>>>>> Sent: Thursday, September 6, 2018 7:03:32 AM
>>>>> Subject: Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross
>>>>> compilation in generating boot header file
>>>>>
>>>>> On Wed, Sep 05, 2018 at 03:15:32PM -0400, Wei Huang wrote:
>>>>>> Recently a new configure option, CROSS_CC_GUEST, was added to
>>>>>> $(TARGET)-softmmu/config-target.mak to support TCG-related tests. This
>>>>>> patch tries to leverage this option to support cross compilation when
>>>>>> the
>>>>>> migration boot block file is being re-generated:
>>>>>>
>>>>>>  * The x86 related files are moved to a new sub-dir (named ./i386).
>>>>>>  * A new top-layer Makefile is created in tests/migration/ directory.
>>>>>>    This Makefile searches and parses CROSS_CC_GUEST to generate
>>>>>>    CROSS_PREFIX.
>>>>>>    The CROSS_PREFIX, if available, is then passed to
>>>>>>    migration/$ARCH/Makefile.
>>>>>>
>>>>>> Reviewed-by: Juan Quintela <quintela@redhat.com>
>>>>>> Signed-off-by: Wei Huang <wei@redhat.com>
>>>>>> ---
>>>>>>  tests/migration-test.c                             |  2 +-
>>>>>>  tests/migration/Makefile                           | 44
>>>>>>  ++++++++++++----------
>>>>>>  tests/migration/i386/Makefile                      | 22 +++++++++++
>>>>>>  .../{x86-a-b-bootblock.S => i386/a-b-bootblock.S}  |  4 --
>>>>>>  .../{x86-a-b-bootblock.h => i386/a-b-bootblock.h}  |  8 ++--
>>>>>>  5 files changed, 51 insertions(+), 29 deletions(-)
>>>>>>  create mode 100644 tests/migration/i386/Makefile
>>>>>>  rename tests/migration/{x86-a-b-bootblock.S => i386/a-b-bootblock.S}
>>>>>>  (93%)
>>>>>>  rename tests/migration/{x86-a-b-bootblock.h => i386/a-b-bootblock.h}
>>>>>>  (92%)
>>>>>>
>>>>>> diff --git a/tests/migration-test.c b/tests/migration-test.c
>>>>>> index 0e687b7..fe6b41a 100644
>>>>>> --- a/tests/migration-test.c
>>>>>> +++ b/tests/migration-test.c
>>>>>> @@ -83,7 +83,7 @@ static const char *tmpfs;
>>>>>>  /* A simple PC boot sector that modifies memory (1-100MB) quickly
>>>>>>   * outputting a 'B' every so often if it's still running.
>>>>>>   */
>>>>>> -#include "tests/migration/x86-a-b-bootblock.h"
>>>>>> +#include "tests/migration/i386/a-b-bootblock.h"
>>>>>>  
>>>>>>  static void init_bootfile_x86(const char *bootpath)
>>>>>>  {
>>>>>> diff --git a/tests/migration/Makefile b/tests/migration/Makefile
>>>>>> index c0824b4..a9ed875 100644
>>>>>> --- a/tests/migration/Makefile
>>>>>> +++ b/tests/migration/Makefile
>>>>>> @@ -1,31 +1,35 @@
>>>>>> -# To specify cross compiler prefix, use CROSS_PREFIX=
>>>>>> -#   $ make CROSS_PREFIX=x86_64-linux-gnu-
>>>>>> +#
>>>>>> +# Copyright (c) 2018 Red Hat, Inc. and/or its affiliates
>>>>>> +#
>>>>>> +# This work is licensed under the terms of the GNU GPL, version 2 or
>>>>>> later.
>>>>>> +# See the COPYING file in the top-level directory.
>>>>>> +#
>>>>>> +
>>>>>> +TARGET_LIST = i386
>>>>>> +
>>>>>> +SRC_PATH = ../..
>>>>>>  
>>>>>>  override define __note
>>>>>> -/* This file is automatically generated from
>>>>>> - * tests/migration/x86-a-b-bootblock.S, edit that and then run
>>>>>> - * tests/migration/rebuild-x86-bootblock.sh to update,
>>>>>> - * and then remember to send both in your patch submission.
>>>>>> +/* This file is automatically generated from the assembly file in
>>>>>> + * tests/migration/$@. Edit that file and then run "make all"
>>>>>> + * inside tests/migration to update, and then remember to send both
>>>>>> + * the header and the assembler differences in your patch submission.
>>>>>>   */
>>>>>>  endef
>>>>>>  export __note
>>>>>>  
>>>>>> -.PHONY: all clean
>>>>>> -all: x86-a-b-bootblock.h
>>>>>> -
>>>>>> -x86-a-b-bootblock.h: x86.bootsect
>>>>>> -	echo "$$__note" > header.tmp
>>>>>> -	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
>>>>>> -	mv header.tmp $@
>>>>>> +find-arch-cross-cc = $(lastword $(shell grep -h "CROSS_CC_GUEST="
>>>>>> $(wildcard $(SRC_PATH)/$(patsubst
>>>>>> i386,*86*,$(1))-softmmu/config-target.mak)))
>>>>>
>>>>> The above function hangs unless configuring with
>>>>> '--target-list=x86_64-softmmu,aarch64-softmmu'. I tried just x86_64
>>>>> alone,
>>>>> just aarch64 alone, and also configuring both x86_64 and i386, but none
>>>>> of those worked. For some reason grep isn't happy with the generated path
>>>>> list. I tested like this
>>>>>
>>>>>  ./configure --target-list=x86_64-softmmu,i386-softmmu
>>>>>  make -C tests/migration
>>>>>
>>>>> And, while not an issue of this series, I had to manually add
>>>>> CROSS_CC_GUEST="aarch64-linux-gnu-gcc" to
>>>>> aarch64-softmmu/config-target.mak
>>>>> for it to work, because configure's compiler test fails with the Fedora
>>>>> aarch64-linux-gnu-gcc installation (the linker can't find code it needs
>>>>> to a build a program with main()). I'm not sure if building programs with
>>>>> main() is something the CROSS_CC_GUEST compiler needs to do. Maybe that
>>>>> test can be relaxed. Alex?
>>>>
>>>> I saw the same problem and it needs to be addressed in ./configure file.
>>>> Most distros don't ship with
>>>> cross-compiled glibc. So compiling main() will fail because of that.
>>>
>>> I don't care too much about that problem. You just need to have the right
>>> cross compiler installed. I care about the one above, which is a separate
>>> problem and should be fixed. The tests/migration build shouldn't hang
>>> when a target-list other than x86_64-softmmu,aarch64-softmmu is used.
>>>
>>
>> Since you don't have aarch64, the stall happens when grep is supplied with
>> an empty file name and waiting on standard input. There is no easy way to
>> skip standard input for grep. How about the following? Basically we always
>> supply with a terminator. 
>>
>> grep -h "CROSS_CC_GUEST=" $(wildcard $(SRC_PATH)/$(patsubst i386,*86*,$(1))-softmmu/config-target.mak) /dev/null)
> 
> Yeah, that should work. Also, when a target-list of
> i386-softmmu,x86_64-softmmu is used, since lastword is applied to
> the grep results, then the cross-cc-guest entry for x86_64 will be
> selected for the i386 target (since it comes later in the alphabet).

This was done intentionally. Normally x86_64 cross compiler is able to
generate i386/i486 binaries, but not the other way. I prefer x86_64 over
i386 for this case...

> That's not correct, but I won't hold the patch up over it.
> 
> Thanks,
> drew
> 

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
  2018-09-05 19:15 ` [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file Wei Huang
  2018-09-06 12:03   ` Andrew Jones
@ 2018-09-10 16:18   ` Alex Bennée
  2018-09-10 16:59     ` Juan Quintela
  2018-09-10 17:03     ` Wei Huang
  1 sibling, 2 replies; 17+ messages in thread
From: Alex Bennée @ 2018-09-10 16:18 UTC (permalink / raw)
  To: Wei Huang; +Cc: qemu-devel, lvivier, peter.maydell, drjones, quintela, dgilbert


Wei Huang <wei@redhat.com> writes:

> Recently a new configure option, CROSS_CC_GUEST, was added to
> $(TARGET)-softmmu/config-target.mak to support TCG-related tests. This
> patch tries to leverage this option to support cross compilation when the
> migration boot block file is being re-generated:
>
>  * The x86 related files are moved to a new sub-dir (named ./i386).
>  * A new top-layer Makefile is created in tests/migration/ directory.
>    This Makefile searches and parses CROSS_CC_GUEST to generate CROSS_PREFIX.
>    The CROSS_PREFIX, if available, is then passed to migration/$ARCH/Makefile.
>
> Reviewed-by: Juan Quintela <quintela@redhat.com>
> Signed-off-by: Wei Huang <wei@redhat.com>
> ---
>  tests/migration-test.c                             |  2 +-
>  tests/migration/Makefile                           | 44 ++++++++++++----------
>  tests/migration/i386/Makefile                      | 22 +++++++++++
>  .../{x86-a-b-bootblock.S => i386/a-b-bootblock.S}  |  4 --
>  .../{x86-a-b-bootblock.h => i386/a-b-bootblock.h}  |  8 ++--
>  5 files changed, 51 insertions(+), 29 deletions(-)
>  create mode 100644 tests/migration/i386/Makefile
>  rename tests/migration/{x86-a-b-bootblock.S => i386/a-b-bootblock.S} (93%)
>  rename tests/migration/{x86-a-b-bootblock.h => i386/a-b-bootblock.h} (92%)
>
> diff --git a/tests/migration-test.c b/tests/migration-test.c
> index 0e687b7..fe6b41a 100644
> --- a/tests/migration-test.c
> +++ b/tests/migration-test.c
> @@ -83,7 +83,7 @@ static const char *tmpfs;
>  /* A simple PC boot sector that modifies memory (1-100MB) quickly
>   * outputting a 'B' every so often if it's still running.
>   */
> -#include "tests/migration/x86-a-b-bootblock.h"
> +#include "tests/migration/i386/a-b-bootblock.h"
>
>  static void init_bootfile_x86(const char *bootpath)
>  {
> diff --git a/tests/migration/Makefile b/tests/migration/Makefile
> index c0824b4..a9ed875 100644
> --- a/tests/migration/Makefile
> +++ b/tests/migration/Makefile
> @@ -1,31 +1,35 @@
> -# To specify cross compiler prefix, use CROSS_PREFIX=
> -#   $ make CROSS_PREFIX=x86_64-linux-gnu-
> +#
> +# Copyright (c) 2018 Red Hat, Inc. and/or its affiliates
> +#
> +# This work is licensed under the terms of the GNU GPL, version 2 or later.
> +# See the COPYING file in the top-level directory.
> +#
> +
> +TARGET_LIST = i386
> +
> +SRC_PATH = ../..
>
>  override define __note
> -/* This file is automatically generated from
> - * tests/migration/x86-a-b-bootblock.S, edit that and then run
> - * tests/migration/rebuild-x86-bootblock.sh to update,
> - * and then remember to send both in your patch submission.
> +/* This file is automatically generated from the assembly file in
> + * tests/migration/$@. Edit that file and then run "make all"
> + * inside tests/migration to update, and then remember to send both
> + * the header and the assembler differences in your patch submission.
>   */
>  endef
>  export __note
>
> -.PHONY: all clean
> -all: x86-a-b-bootblock.h
> -
> -x86-a-b-bootblock.h: x86.bootsect
> -	echo "$$__note" > header.tmp
> -	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
> -	mv header.tmp $@
> +find-arch-cross-cc = $(lastword $(shell grep -h "CROSS_CC_GUEST=" $(wildcard $(SRC_PATH)/$(patsubst i386,*86*,$(1))-softmmu/config-target.mak)))
> +parse-cross-prefix = $(subst gcc,,$(patsubst cc,gcc,$(patsubst CROSS_CC_GUEST="%",%,$(call find-arch-cross-cc,$(1)))))
> +gen-cross-prefix = $(patsubst %-,CROSS_PREFIX=%-,$(call
> parse-cross-prefix,$(1)))

This all seems awfully fiddly compared to moving the code to tests/tcg
and building with the existing machinery. You don't even get the docker
fall-back this way.

The aim being to have the ability to build the binary and manually
update the .hex/.S encoded version actually used in the test when you
don't have cross compilers available right?

I've got some TODOs in tests/tcg to start building the various system
tests. Perhaps I should port the various migration kernels when I get to
that?

>
> -x86.bootsect: x86.boot
> -	dd if=$< of=$@ bs=256 count=2 skip=124
> +.PHONY: all $(TARGET_LIST)
>
> -x86.boot: x86.o
> -	$(CROSS_PREFIX)objcopy -O binary $< $@
> +all: $(TARGET_LIST)
>
> -x86.o: x86-a-b-bootblock.S
> -	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
> +$(TARGET_LIST):
> +	$(MAKE) -C $@ $(call gen-cross-prefix,$@)
>
>  clean:
> -	@rm -rf *.boot *.o *.bootsect
> +	for target in $(TARGET_LIST); do \
> +		$(MAKE) -C $$target clean; \
> +	done
> diff --git a/tests/migration/i386/Makefile b/tests/migration/i386/Makefile
> new file mode 100644
> index 0000000..5c03241
> --- /dev/null
> +++ b/tests/migration/i386/Makefile
> @@ -0,0 +1,22 @@
> +# To specify cross compiler prefix, use CROSS_PREFIX=
> +#   $ make CROSS_PREFIX=x86_64-linux-gnu-
> +
> +.PHONY: all clean
> +all: a-b-bootblock.h
> +
> +a-b-bootblock.h: x86.bootsect
> +	echo "$$__note" > header.tmp
> +	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
> +	mv header.tmp $@
> +
> +x86.bootsect: x86.boot
> +	dd if=$< of=$@ bs=256 count=2 skip=124
> +
> +x86.boot: x86.o
> +	$(CROSS_PREFIX)objcopy -O binary $< $@
> +
> +x86.o: a-b-bootblock.S
> +	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
> +
> +clean:
> +	@rm -rf *.boot *.o *.bootsect
> diff --git a/tests/migration/x86-a-b-bootblock.S b/tests/migration/i386/a-b-bootblock.S
> similarity index 93%
> rename from tests/migration/x86-a-b-bootblock.S
> rename to tests/migration/i386/a-b-bootblock.S
> index b164264..3f97f28 100644
> --- a/tests/migration/x86-a-b-bootblock.S
> +++ b/tests/migration/i386/a-b-bootblock.S
> @@ -3,10 +3,6 @@
>  #  range.
>  #  Outputs an initial 'A' on serial followed by repeated 'B's
>  #
> -# run   tests/migration/rebuild-x86-bootblock.sh
> -#   to regenerate the hex, and remember to include both the .h and .s
> -#   in any patches.
> -#
>  # Copyright (c) 2016 Red Hat, Inc. and/or its affiliates
>  # This work is licensed under the terms of the GNU GPL, version 2 or later.
>  # See the COPYING file in the top-level directory.
> diff --git a/tests/migration/x86-a-b-bootblock.h b/tests/migration/i386/a-b-bootblock.h
> similarity index 92%
> rename from tests/migration/x86-a-b-bootblock.h
> rename to tests/migration/i386/a-b-bootblock.h
> index 78a151f..7d459d4 100644
> --- a/tests/migration/x86-a-b-bootblock.h
> +++ b/tests/migration/i386/a-b-bootblock.h
> @@ -1,7 +1,7 @@
> -/* This file is automatically generated from
> - * tests/migration/x86-a-b-bootblock.s, edit that and then run
> - * tests/migration/rebuild-x86-bootblock.sh to update,
> - * and then remember to send both in your patch submission.
> +/* This file is automatically generated from the assembly file in
> + * tests/migration/i386. Edit that file and then run "make all"
> + * inside tests/migration to update, and then remember to send both
> + * the header and the assembler differences in your patch submission.
>   */
>  unsigned char x86_bootsect[] = {
>    0xfa, 0x0f, 0x01, 0x16, 0x74, 0x7c, 0x66, 0xb8, 0x01, 0x00, 0x00, 0x00,


--
Alex Bennée

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
  2018-09-10 16:18   ` Alex Bennée
@ 2018-09-10 16:59     ` Juan Quintela
  2018-09-10 17:03     ` Wei Huang
  1 sibling, 0 replies; 17+ messages in thread
From: Juan Quintela @ 2018-09-10 16:59 UTC (permalink / raw)
  To: Alex Bennée
  Cc: Wei Huang, qemu-devel, lvivier, peter.maydell, drjones, dgilbert

Alex Bennée <alex.bennee@linaro.org> wrote:
D> Wei Huang <wei@redhat.com> writes:
>
>> Recently a new configure option, CROSS_CC_GUEST, was added to
>> $(TARGET)-softmmu/config-target.mak to support TCG-related tests. This
>> patch tries to leverage this option to support cross compilation when the
>> migration boot block file is being re-generated:
>>
>>  * The x86 related files are moved to a new sub-dir (named ./i386).
>>  * A new top-layer Makefile is created in tests/migration/ directory.
>>    This Makefile searches and parses CROSS_CC_GUEST to generate CROSS_PREFIX.
>>    The CROSS_PREFIX, if available, is then passed to migration/$ARCH/Makefile.
>>
>> Reviewed-by: Juan Quintela <quintela@redhat.com>
>> Signed-off-by: Wei Huang <wei@redhat.com>


>> -.PHONY: all clean
>> -all: x86-a-b-bootblock.h
>> -
>> -x86-a-b-bootblock.h: x86.bootsect
>> -	echo "$$__note" > header.tmp
>> -	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
>> -	mv header.tmp $@
>> +find-arch-cross-cc = $(lastword $(shell grep -h "CROSS_CC_GUEST=" $(wildcard $(SRC_PATH)/$(patsubst i386,*86*,$(1))-softmmu/config-target.mak)))
>> +parse-cross-prefix = $(subst gcc,,$(patsubst cc,gcc,$(patsubst CROSS_CC_GUEST="%",%,$(call find-arch-cross-cc,$(1)))))
>> +gen-cross-prefix = $(patsubst %-,CROSS_PREFIX=%-,$(call
>> parse-cross-prefix,$(1)))
>
> This all seems awfully fiddly compared to moving the code to tests/tcg
> and building with the existing machinery. You don't even get the docker
> fall-back this way.
>
> The aim being to have the ability to build the binary and manually
> update the .hex/.S encoded version actually used in the test when you
> don't have cross compilers available right?
>
> I've got some TODOs in tests/tcg to start building the various system
> tests. Perhaps I should port the various migration kernels when I get to
> that?

One only needs to run the compiler when they modify the aarch64 test,
and that should be almost never.  And if anyone does, it is expected to
be an arm developer being runing on an ARM host or having a propper
cross-compiler.  I.e. that code is not intended to be part of a normal
build.

I guess that in general would be useful to have a way to tell Makefile:
I want to compile this with an arm compiler (native or cross), or any
other architecture.  But this case is a quite simple case that is not
supposed to be run often.  To put things in prespective,  I think that
we haven't ever changed the x86-64 migration test code.  I can be wrong,
but we are talking in less than a run for each qemu release.

Later, Juan.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
  2018-09-10 16:18   ` Alex Bennée
  2018-09-10 16:59     ` Juan Quintela
@ 2018-09-10 17:03     ` Wei Huang
  1 sibling, 0 replies; 17+ messages in thread
From: Wei Huang @ 2018-09-10 17:03 UTC (permalink / raw)
  To: Alex Bennée
  Cc: qemu-devel, lvivier, peter.maydell, drjones, quintela, dgilbert



On 09/10/2018 11:18 AM, Alex Bennée wrote:
> 
> Wei Huang <wei@redhat.com> writes:
> 
>> Recently a new configure option, CROSS_CC_GUEST, was added to
>> $(TARGET)-softmmu/config-target.mak to support TCG-related tests. This
>> patch tries to leverage this option to support cross compilation when the
>> migration boot block file is being re-generated:
>>
>>  * The x86 related files are moved to a new sub-dir (named ./i386).
>>  * A new top-layer Makefile is created in tests/migration/ directory.
>>    This Makefile searches and parses CROSS_CC_GUEST to generate CROSS_PREFIX.
>>    The CROSS_PREFIX, if available, is then passed to migration/$ARCH/Makefile.
>>
>> Reviewed-by: Juan Quintela <quintela@redhat.com>
>> Signed-off-by: Wei Huang <wei@redhat.com>
>> ---
>>  tests/migration-test.c                             |  2 +-
>>  tests/migration/Makefile                           | 44 ++++++++++++----------
>>  tests/migration/i386/Makefile                      | 22 +++++++++++
>>  .../{x86-a-b-bootblock.S => i386/a-b-bootblock.S}  |  4 --
>>  .../{x86-a-b-bootblock.h => i386/a-b-bootblock.h}  |  8 ++--
>>  5 files changed, 51 insertions(+), 29 deletions(-)
>>  create mode 100644 tests/migration/i386/Makefile
>>  rename tests/migration/{x86-a-b-bootblock.S => i386/a-b-bootblock.S} (93%)
>>  rename tests/migration/{x86-a-b-bootblock.h => i386/a-b-bootblock.h} (92%)
>>
>> diff --git a/tests/migration-test.c b/tests/migration-test.c
>> index 0e687b7..fe6b41a 100644
>> --- a/tests/migration-test.c
>> +++ b/tests/migration-test.c
>> @@ -83,7 +83,7 @@ static const char *tmpfs;
>>  /* A simple PC boot sector that modifies memory (1-100MB) quickly
>>   * outputting a 'B' every so often if it's still running.
>>   */
>> -#include "tests/migration/x86-a-b-bootblock.h"
>> +#include "tests/migration/i386/a-b-bootblock.h"
>>
>>  static void init_bootfile_x86(const char *bootpath)
>>  {
>> diff --git a/tests/migration/Makefile b/tests/migration/Makefile
>> index c0824b4..a9ed875 100644
>> --- a/tests/migration/Makefile
>> +++ b/tests/migration/Makefile
>> @@ -1,31 +1,35 @@
>> -# To specify cross compiler prefix, use CROSS_PREFIX=
>> -#   $ make CROSS_PREFIX=x86_64-linux-gnu-
>> +#
>> +# Copyright (c) 2018 Red Hat, Inc. and/or its affiliates
>> +#
>> +# This work is licensed under the terms of the GNU GPL, version 2 or later.
>> +# See the COPYING file in the top-level directory.
>> +#
>> +
>> +TARGET_LIST = i386
>> +
>> +SRC_PATH = ../..
>>
>>  override define __note
>> -/* This file is automatically generated from
>> - * tests/migration/x86-a-b-bootblock.S, edit that and then run
>> - * tests/migration/rebuild-x86-bootblock.sh to update,
>> - * and then remember to send both in your patch submission.
>> +/* This file is automatically generated from the assembly file in
>> + * tests/migration/$@. Edit that file and then run "make all"
>> + * inside tests/migration to update, and then remember to send both
>> + * the header and the assembler differences in your patch submission.
>>   */
>>  endef
>>  export __note
>>
>> -.PHONY: all clean
>> -all: x86-a-b-bootblock.h
>> -
>> -x86-a-b-bootblock.h: x86.bootsect
>> -	echo "$$__note" > header.tmp
>> -	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
>> -	mv header.tmp $@
>> +find-arch-cross-cc = $(lastword $(shell grep -h "CROSS_CC_GUEST=" $(wildcard $(SRC_PATH)/$(patsubst i386,*86*,$(1))-softmmu/config-target.mak)))
>> +parse-cross-prefix = $(subst gcc,,$(patsubst cc,gcc,$(patsubst CROSS_CC_GUEST="%",%,$(call find-arch-cross-cc,$(1)))))
>> +gen-cross-prefix = $(patsubst %-,CROSS_PREFIX=%-,$(call
>> parse-cross-prefix,$(1)))
> 
> This all seems awfully fiddly compared to moving the code to tests/tcg
> and building with the existing machinery. You don't even get the docker
> fall-back this way.
> 
> The aim being to have the ability to build the binary and manually
> update the .hex/.S encoded version actually used in the test when you
> don't have cross compilers available right?

The purpose is to generate migration test binary (in the .h files) when
a cross compiler is available. If you can do it with docker, it is a plus.

But to be honest, unless people are updating the migration test code
themselves, it would be extremely rare for them to change (or invoke)
this Makefile.

> 
> I've got some TODOs in tests/tcg to start building the various system
> tests. Perhaps I should port the various migration kernels when I get to
> that?

Two architectures, x86 and aarch64, needs to be cross-compiled. PPC is
OK because it is script-based. Please wait until Juan's tree is pulled.

> 
>>
>> -x86.bootsect: x86.boot
>> -	dd if=$< of=$@ bs=256 count=2 skip=124
>> +.PHONY: all $(TARGET_LIST)
>>
>> -x86.boot: x86.o
>> -	$(CROSS_PREFIX)objcopy -O binary $< $@
>> +all: $(TARGET_LIST)
>>
>> -x86.o: x86-a-b-bootblock.S
>> -	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
>> +$(TARGET_LIST):
>> +	$(MAKE) -C $@ $(call gen-cross-prefix,$@)
>>
>>  clean:
>> -	@rm -rf *.boot *.o *.bootsect
>> +	for target in $(TARGET_LIST); do \
>> +		$(MAKE) -C $$target clean; \
>> +	done
>> diff --git a/tests/migration/i386/Makefile b/tests/migration/i386/Makefile
>> new file mode 100644
>> index 0000000..5c03241
>> --- /dev/null
>> +++ b/tests/migration/i386/Makefile
>> @@ -0,0 +1,22 @@
>> +# To specify cross compiler prefix, use CROSS_PREFIX=
>> +#   $ make CROSS_PREFIX=x86_64-linux-gnu-
>> +
>> +.PHONY: all clean
>> +all: a-b-bootblock.h
>> +
>> +a-b-bootblock.h: x86.bootsect
>> +	echo "$$__note" > header.tmp
>> +	xxd -i $< | sed -e 's/.*int.*//' >> header.tmp
>> +	mv header.tmp $@
>> +
>> +x86.bootsect: x86.boot
>> +	dd if=$< of=$@ bs=256 count=2 skip=124
>> +
>> +x86.boot: x86.o
>> +	$(CROSS_PREFIX)objcopy -O binary $< $@
>> +
>> +x86.o: a-b-bootblock.S
>> +	$(CROSS_PREFIX)gcc -m32 -march=i486 -c $< -o $@
>> +
>> +clean:
>> +	@rm -rf *.boot *.o *.bootsect
>> diff --git a/tests/migration/x86-a-b-bootblock.S b/tests/migration/i386/a-b-bootblock.S
>> similarity index 93%
>> rename from tests/migration/x86-a-b-bootblock.S
>> rename to tests/migration/i386/a-b-bootblock.S
>> index b164264..3f97f28 100644
>> --- a/tests/migration/x86-a-b-bootblock.S
>> +++ b/tests/migration/i386/a-b-bootblock.S
>> @@ -3,10 +3,6 @@
>>  #  range.
>>  #  Outputs an initial 'A' on serial followed by repeated 'B's
>>  #
>> -# run   tests/migration/rebuild-x86-bootblock.sh
>> -#   to regenerate the hex, and remember to include both the .h and .s
>> -#   in any patches.
>> -#
>>  # Copyright (c) 2016 Red Hat, Inc. and/or its affiliates
>>  # This work is licensed under the terms of the GNU GPL, version 2 or later.
>>  # See the COPYING file in the top-level directory.
>> diff --git a/tests/migration/x86-a-b-bootblock.h b/tests/migration/i386/a-b-bootblock.h
>> similarity index 92%
>> rename from tests/migration/x86-a-b-bootblock.h
>> rename to tests/migration/i386/a-b-bootblock.h
>> index 78a151f..7d459d4 100644
>> --- a/tests/migration/x86-a-b-bootblock.h
>> +++ b/tests/migration/i386/a-b-bootblock.h
>> @@ -1,7 +1,7 @@
>> -/* This file is automatically generated from
>> - * tests/migration/x86-a-b-bootblock.s, edit that and then run
>> - * tests/migration/rebuild-x86-bootblock.sh to update,
>> - * and then remember to send both in your patch submission.
>> +/* This file is automatically generated from the assembly file in
>> + * tests/migration/i386. Edit that file and then run "make all"
>> + * inside tests/migration to update, and then remember to send both
>> + * the header and the assembler differences in your patch submission.
>>   */
>>  unsigned char x86_bootsect[] = {
>>    0xfa, 0x0f, 0x01, 0x16, 0x74, 0x7c, 0x66, 0xb8, 0x01, 0x00, 0x00, 0x00,
> 
> 
> --
> Alex Bennée
> 

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2018-09-10 17:13 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-05 19:15 [Qemu-devel] [PATCH V9 0/4] tests: Add migration test for aarch64 Wei Huang
2018-09-05 19:15 ` [Qemu-devel] [PATCH V9 1/4] tests/migration: Convert x86 boot block compilation script into Makefile Wei Huang
2018-09-06  7:58   ` Andrew Jones
2018-09-05 19:15 ` [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file Wei Huang
2018-09-06 12:03   ` Andrew Jones
2018-09-06 13:37     ` Wei Huang
2018-09-06 14:00       ` Andrew Jones
2018-09-06 16:23         ` Wei Huang
2018-09-07  7:04           ` Andrew Jones
2018-09-07 13:42             ` Wei Huang
2018-09-10 16:18   ` Alex Bennée
2018-09-10 16:59     ` Juan Quintela
2018-09-10 17:03     ` Wei Huang
2018-09-05 19:15 ` [Qemu-devel] [PATCH V9 3/4] tests/migration: Add migration-test " Wei Huang
2018-09-05 19:15 ` [Qemu-devel] [PATCH V9 4/4] tests: Add migration test for aarch64 Wei Huang
2018-09-06 12:25   ` Andrew Jones
2018-09-06  8:28 ` [Qemu-devel] [PATCH V9 0/4] " Juan Quintela

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.