tests: Add migration test for aarch64
v9 cover tests: Add migration test for aarch64
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.shSignature · 1 line
1.8.3.1
PATCH v9 1/4 tests/migration: Convert x86 boot block compilation script into Makefile
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.
---
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%)tests/migration/Makefile new file +31 -0
@@ -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
tests/migration/rebuild-x86-bootblock.sh deleted +0 -33
@@ -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: [email protected] - -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"
tests/migration/x86-a-b-bootblock.S renamed from tests/migration/x86-a-b-bootblock.s +0 -0
Signature · 1 line
1.8.3.1
Re: [Qemu-devel] [PATCH V9 1/4] tests/migration: Convert x86 boot block compilation script into Makefile
Quoted 12 lines · Wei Huang
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_PREFIXin "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 <[email protected]>Signed-off-by Wei Huang <[email protected]>
Quoted 9 lines
---
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%)PATCH v9 2/4 tests/migration: Support cross compilation in generating boot header file
In reply to Wei HuangRecently 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.
---
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%)tests/migration-test.c +1 -1
@@ -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) {
tests/migration/Makefile +24 -20
55 lines not on this page · raw message
tests/migration/i386/Makefile new file +22 -0
@@ -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
tests/migration/i386/a-b-bootblock.S renamed from tests/migration/x86-a-b-bootblock.S +0 -4
@@ -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.
tests/migration/i386/a-b-bootblock.h renamed from tests/migration/x86-a-b-bootblock.h +4 -4
@@ -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 ,
Signature · 1 line
1.8.3.1
Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
Quoted 65 lines · Wei Huang
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-layerMakefileis created in tests/migration/ directory. ThisMakefilesearches and parsesCROSS_CC_GUESTto generateCROSS_PREFIX. TheCROSS_PREFIX, if available, is then passed to migration/$ARCH/Makefile.Reviewed-by Juan Quintela <[email protected]>Signed-off-by Wei Huang <[email protected]>--- 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%)tests/migration-test.c +1
-1@@ -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) {tests/migration/Makefile +14
-6@@ -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
tests/migration/Makefile line 21
Quoted 10 lines
tests/migration/Makefile +1
-7export __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
Quoted 90 lines
tests/migration/Makefile +9
-7+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; \ + donetests/migration/i386/Makefile new file +22
-0@@ -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 *.bootsecttests/migration/i386/a-b-bootblock.S renamed from tests/migration/x86-a-b-bootblock.S +0
-4@@ -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.tests/migration/i386/a-b-bootblock.h renamed from tests/migration/x86-a-b-bootblock.h +4
-4@@ -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 ,Signature · 1 line
1.8.3.1
Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
----- Original Message -----
Quoted 99 lines
From: "Andrew Jones" <[email protected]>
To: "Wei Huang" <[email protected]>
Cc: [email protected], [email protected], "peter maydell" <[email protected]>, [email protected], [email protected], "alex bennee" <[email protected]>
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 fileQuoted 79 lines · Wei Huang
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-layerMakefileis created in tests/migration/ directory. ThisMakefilesearches and parsesCROSS_CC_GUESTto generateCROSS_PREFIX.
TheCROSS_PREFIX, if available, is then passed to migration/$ARCH/Makefile.Reviewed-by Juan Quintela <[email protected]>Signed-off-by Wei Huang <[email protected]>--- 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%)tests/migration-test.c +1
-1@@ -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) {tests/migration/Makefile +4
-2@@ -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 orlater.
tests/migration/Makefile +11
-11+# 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="Quoted 2 lines
$(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_64alone, just aarch64 alone, and also configuring bothx86_64and 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
Quoted 7 lines
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 withmain()is something theCROSS_CC_GUESTcompiler 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.
Quoted 100 lines
Thanks,
drewQuoted 95 lines
+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)))
tests/migration/Makefile +7
-7-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; \ + donetests/migration/i386/Makefile new file +22
-0@@ -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 *.bootsecttests/migration/i386/a-b-bootblock.S renamed from tests/migration/x86-a-b-bootblock.S +0
-4@@ -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.
tests/migration/i386/a-b-bootblock.h renamed from tests/migration/x86-a-b-bootblock.h +4
-5@@ -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
Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
Quoted 110 lines · Wei Huang
----- Original Message -----
Quoted 99 lines
From: "Andrew Jones" <[email protected]>
To: "Wei Huang" <[email protected]>
Cc: [email protected], [email protected], "peter maydell" <[email protected]>, [email protected], [email protected], "alex bennee" <[email protected]>
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 fileQuoted 79 lines · Wei Huang
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-layerMakefileis created in tests/migration/ directory. ThisMakefilesearches and parsesCROSS_CC_GUESTto generateCROSS_PREFIX.
TheCROSS_PREFIX, if available, is then passed to migration/$ARCH/Makefile.Reviewed-by Juan Quintela <[email protected]>Signed-off-by Wei Huang <[email protected]>--- 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%)tests/migration-test.c +1
-1@@ -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) {tests/migration/Makefile +4
-2@@ -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 orlater.
tests/migration/Makefile +11
-11+# 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="Quoted 2 lines
$(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_64alone, just aarch64 alone, and also configuring bothx86_64and 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
Quoted 7 lines
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 withmain()is something theCROSS_CC_GUESTcompiler needs to do. Maybe that test can be relaxed. Alex?
Quoted 2 lines
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
Quoted 102 lines
Quoted 101 lines
Thanks,
drewQuoted 95 lines
+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)))
tests/migration/Makefile +7
-7-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; \ + donetests/migration/i386/Makefile new file +22
-0@@ -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 *.bootsecttests/migration/i386/a-b-bootblock.S renamed from tests/migration/x86-a-b-bootblock.S +0
-4@@ -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.
tests/migration/i386/a-b-bootblock.h renamed from tests/migration/x86-a-b-bootblock.h +4
-5@@ -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
Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
----- Original Message -----
Quoted 125 lines
From: "Andrew Jones" <[email protected]>
To: "Wei Huang" <[email protected]>
Cc: [email protected], "peter maydell" <[email protected]>, [email protected], [email protected], [email protected], "alex bennee" <[email protected]>
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 fileQuoted 117 lines · Wei Huang
----- Original Message -----
Quoted 113 lines
From: "Andrew Jones" <[email protected]>
To: "Wei Huang" <[email protected]>
Cc: [email protected], [email protected], "peter maydell" <[email protected]>, [email protected], [email protected], "alex bennee" <[email protected]>
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 fileQuoted 82 lines · Wei Huang
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-layerMakefileis created in tests/migration/ directory. ThisMakefilesearches and parsesCROSS_CC_GUESTto generateCROSS_PREFIX.
TheCROSS_PREFIX, if available, is then passed to migration/$ARCH/Makefile.Reviewed-by Juan Quintela <[email protected]>Signed-off-by Wei Huang <[email protected]>--- 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%)
tests/migration-test.c +1
-1@@ -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) {tests/migration/Makefile +4
-2@@ -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 orlater.
tests/migration/Makefile +11
-11+# 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="Quoted 2 lines
$(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_64alone,
just aarch64 alone, and also configuring bothx86_64and 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 withmain()). I'm not sure if building programs withmain()is something theCROSS_CC_GUESTcompiler needs to do. Maybe that test can be relaxed. Alex?
Quoted 9 lines
Quoted 3 lines
I saw the same problem and it needs to be addressed in ./configure file. Most distros don't ship with
cross-compiled glibc. So compilingmain()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)
Quoted 108 lines
Thanks,
drewQuoted 104 lines
Quoted 103 lines
Thanks,
drewQuoted 97 lines
+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)))
tests/migration/Makefile +7
-7-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; \ + donetests/migration/i386/Makefile new file +22
-0@@ -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 *.bootsecttests/migration/i386/a-b-bootblock.S renamed from tests/migration/x86-a-b-bootblock.S +0
-4@@ -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.
tests/migration/i386/a-b-bootblock.h renamed from tests/migration/x86-a-b-bootblock.h +4
-4@@ -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
Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
Quoted 138 lines · Wei Huang
----- Original Message -----
Quoted 125 lines
From: "Andrew Jones" <[email protected]>
To: "Wei Huang" <[email protected]>
Cc: [email protected], "peter maydell" <[email protected]>, [email protected], [email protected], [email protected], "alex bennee" <[email protected]>
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 fileQuoted 117 lines · Wei Huang
----- Original Message -----
Quoted 113 lines
From: "Andrew Jones" <[email protected]>
To: "Wei Huang" <[email protected]>
Cc: [email protected], [email protected], "peter maydell" <[email protected]>, [email protected], [email protected], "alex bennee" <[email protected]>
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 fileQuoted 82 lines · Wei Huang
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-layerMakefileis created in tests/migration/ directory. ThisMakefilesearches and parsesCROSS_CC_GUESTto generateCROSS_PREFIX.
TheCROSS_PREFIX, if available, is then passed to migration/$ARCH/Makefile.Reviewed-by Juan Quintela <[email protected]>Signed-off-by Wei Huang <[email protected]>--- 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%)
tests/migration-test.c +1
-1@@ -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) {tests/migration/Makefile +4
-2@@ -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 orlater.
tests/migration/Makefile +11
-11+# 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="Quoted 2 lines
$(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_64alone,
just aarch64 alone, and also configuring bothx86_64and 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 withmain()). I'm not sure if building programs withmain()is something theCROSS_CC_GUESTcompiler needs to do. Maybe that test can be relaxed. Alex?Quoted 9 lines
Quoted 3 lines
I saw the same problem and it needs to be addressed in ./configure file. Most distros don't ship with
cross-compiled glibc. So compilingmain()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.
Quoted 6 lines
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
Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
Quoted 144 lines · Andrew Jones
Quoted 143 lines · Wei Huang
----- Original Message -----
Quoted 125 lines
From: "Andrew Jones" <[email protected]>
To: "Wei Huang" <[email protected]>
Cc: [email protected], "peter maydell" <[email protected]>, [email protected], [email protected], [email protected], "alex bennee" <[email protected]>
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 fileQuoted 117 lines · Wei Huang
----- Original Message -----
Quoted 113 lines
From: "Andrew Jones" <[email protected]>
To: "Wei Huang" <[email protected]>
Cc: [email protected], [email protected], "peter maydell" <[email protected]>, [email protected], [email protected], "alex bennee" <[email protected]>
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 fileQuoted 82 lines · Wei Huang
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-layerMakefileis created in tests/migration/ directory. ThisMakefilesearches and parsesCROSS_CC_GUESTto generateCROSS_PREFIX.
TheCROSS_PREFIX, if available, is then passed to migration/$ARCH/Makefile.Reviewed-by Juan Quintela <[email protected]>Signed-off-by Wei Huang <[email protected]>--- 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%)
tests/migration-test.c +1
-1@@ -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) {tests/migration/Makefile +4
-2@@ -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 orlater.
tests/migration/Makefile +11
-11+# 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="Quoted 2 lines
$(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_64alone,
just aarch64 alone, and also configuring bothx86_64and 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 withmain()). I'm not sure if building programs withmain()is something theCROSS_CC_GUESTcompiler needs to do. Maybe that test can be relaxed. Alex?Quoted 9 lines
Quoted 3 lines
I saw the same problem and it needs to be addressed in ./configure file. Most distros don't ship with
cross-compiled glibc. So compilingmain()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.
Quoted 6 lines
Quoted 1 line
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_64will 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...
Quoted 5 lines
That's not correct, but I won't hold the patch up over it.
Thanks,
drew
Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
In reply to Wei HuangQuoted 68 lines · Wei Huang
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-layerMakefileis created in tests/migration/ directory. ThisMakefilesearches and parsesCROSS_CC_GUESTto generateCROSS_PREFIX. TheCROSS_PREFIX, if available, is then passed to migration/$ARCH/Makefile.Reviewed-by Juan Quintela <[email protected]>Signed-off-by Wei Huang <[email protected]>--- 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%)tests/migration-test.c +1
-1@@ -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) {tests/migration/Makefile +14
-7@@ -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
tests/migration/Makefile line 24
Quoted 10 lines
tests/migration/Makefile +3
-6-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?
Quoted 74 lines
tests/migration/Makefile +7
-7-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; \ + donetests/migration/i386/Makefile new file +22
-0@@ -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 *.bootsecttests/migration/i386/a-b-bootblock.S renamed from tests/migration/x86-a-b-bootblock.S +0
-4@@ -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.tests/migration/i386/a-b-bootblock.h renamed from tests/migration/x86-a-b-bootblock.h +0
-1@@ -1,7 +1,7 @@ -/* This file is automatically generated from
tests/migration/i386/a-b-bootblock.h line 7
Quoted 10 lines
tests/migration/i386/a-b-bootblock.h renamed from tests/migration/x86-a-b-bootblock.h +4
-3-* 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
Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
Alex Bennée <[email protected]> wrote:
Quoted 31 lines · D> Wei Huang <[email protected]> writes:
Quoted 25 lines
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-layerMakefileis created in tests/migration/ directory. ThisMakefilesearches and parsesCROSS_CC_GUESTto generateCROSS_PREFIX. TheCROSS_PREFIX, if available, is then passed to migration/$ARCH/Makefile.Reviewed-by Juan Quintela <[email protected]>Signed-off-by Wei Huang <[email protected]>-.PHONY: all clean
tests/migration/Makefile +3
-6-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=%-,$(callQuoted 1 line
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.
Quoted 7 lines
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.
Re: [Qemu-devel] [PATCH V9 2/4] tests/migration: Support cross compilation in generating boot header file
In reply to Alex BennéeQuoted 86 lines · Alex Bennée
Quoted 68 lines · Wei Huang
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-layerMakefileis created in tests/migration/ directory. ThisMakefilesearches and parsesCROSS_CC_GUESTto generateCROSS_PREFIX. TheCROSS_PREFIX, if available, is then passed to migration/$ARCH/Makefile.Reviewed-by Juan Quintela <[email protected]>Signed-off-by Wei Huang <[email protected]>--- 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%)tests/migration-test.c +1
-1@@ -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) {tests/migration/Makefile +14
-7@@ -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 cleantests/migration/Makefile line 24
Quoted 10 lines
tests/migration/Makefile +3
-6-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.
Quoted 3 lines
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.
Quoted 4 lines
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.
Quoted 90 lines
Quoted 75 lines
tests/migration/Makefile +7
-7-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; \ + donetests/migration/i386/Makefile new file +22
-0@@ -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 *.bootsecttests/migration/i386/a-b-bootblock.S renamed from tests/migration/x86-a-b-bootblock.S +0
-4@@ -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.tests/migration/i386/a-b-bootblock.h renamed from tests/migration/x86-a-b-bootblock.h +0
-1@@ -1,7 +1,7 @@ -/* This file is automatically generated from tests/migration/i386/a-b-bootblock.h line 7
Quoted 10 lines
tests/migration/i386/a-b-bootblock.h renamed from tests/migration/x86-a-b-bootblock.h +4
-3-* 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
PATCH v9 3/4 tests/migration: Add migration-test header file
In reply to Wei HuangThis patch moves the settings related migration-test from the migration-test.c file to a new header file.
--- 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
tests/migration-test.c +18 -10
@@ -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 (); }
tests/migration/migration-test.h new file +21 -0
@@ -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_ */
Signature · 1 line
1.8.3.1
PATCH v9 4/4 tests: Add migration test for aarch64
In reply to Wei HuangThis 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.
--- 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
tests/Makefile.include +1 -0
@@ -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)
tests/migration-test.c +23 -4
@@ -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 );
tests/migration/Makefile +1 -1
@@ -5,7 +5,7 @@ # See the COPYING file in the top-level directory. # -TARGET_LIST = i386 +TARGET_LIST = i386 aarch64 SRC_PATH = ../..
tests/migration/aarch64/Makefile new file +20 -0
@@ -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 +
tests/migration/aarch64/a-b-kernel.S new file +75 -0
75 lines not on this page · raw message
tests/migration/aarch64/a-b-kernel.h new file +19 -0
@@ -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 +}; +
tests/migration/migration-test.h +9 -0
@@ -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_ */
Signature · 1 line
1.8.3.1
Quoted 17 lines · Wei Huang
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 is0x40000000. We change thestart_addressandend_addressfor 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 <[email protected]>Signed-off-by Wei Huang <[email protected]>
Quoted 13 lines
--- 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
Juan Quintela
AppliedQuoted 50 lines · Wei Huang
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 ofx86_64; changeMakefileaccordingly
* Remove $(ARCH) from the assembly and header file names
V7->V8:
* Support cross compilation by searching forCROSS_CC_GUESToption, 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 inmigration-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 newmigration-test.hfile
* Use different cpu & gic settings for kvm and tcg modes on aarch64
* Clean upaarch64-a-b-kernel.Sbased on Andrew Jones' comments
V2->V3:
* Convert build script toMakefile
* 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" totest_deprecated()because aarch64 doesn't have a default machine type.
Quoted 6 lines
RFC->V1:
* aarch64 kernel blob is defined as anuint32_tarray
* The test code is re-written to address a data caching issue under KVM. Tests passed under both x86 and aarch64.
* Re-useinit_bootfile_x86()for both x86 and aarch64
* Other minor fixes
Queued for next Migration PULL request, thanks.
Later, Juan.