Makefile | 6 +- configure | 1 + docs/devel/testing.rst | 76 ++ linux-user/ppc/signal.c | 4 +- target/alpha/fpu_helper.c | 15 +- target/alpha/helper.c | 64 +- target/i386/whpx-all.c | 1 + tests/docker/Makefile.include | 18 +- tests/docker/docker.py | 36 +- tests/docker/dockerfiles/centos7.docker | 2 +- tests/docker/dockerfiles/debian-ports.docker | 36 - .../dockerfiles/debian-powerpc-user-cross.docker | 21 - tests/docker/dockerfiles/debian-sid.docker | 35 - .../docker/dockerfiles/debian-xtensa-cross.docker | 2 +- tests/docker/dockerfiles/debian10.docker | 2 +- tests/docker/dockerfiles/debian8.docker | 34 - tests/docker/dockerfiles/debian9-mxe.docker | 3 +- tests/docker/dockerfiles/debian9.docker | 2 +- tests/docker/dockerfiles/travis.docker | 2 +- tests/docker/dockerfiles/ubuntu.docker | 2 +- tests/docker/dockerfiles/ubuntu1804.docker | 2 +- tests/docker/test-clang | 6 +- tests/tcg/Makefile.target | 16 +- tests/tcg/aarch64/Makefile.softmmu-target | 21 + tests/tcg/aarch64/Makefile.target | 3 +- tests/tcg/aarch64/float_convs.ref | 748 ++++++++++++++++++++ tests/tcg/aarch64/float_madds.ref | 768 +++++++++++++++++++++ tests/tcg/arm/Makefile.target | 16 +- tests/tcg/arm/float_convs.ref | 748 ++++++++++++++++++++ tests/tcg/arm/float_madds.ref | 768 +++++++++++++++++++++ tests/tcg/multiarch/Makefile.target | 23 +- tests/tcg/multiarch/float_convs.c | 105 +++ tests/tcg/multiarch/float_helpers.c | 230 ++++++ tests/tcg/multiarch/float_helpers.h | 26 + tests/tcg/multiarch/float_madds.c | 103 +++ 35 files changed, 3709 insertions(+), 236 deletions(-) delete mode 100644 tests/docker/dockerfiles/debian-ports.docker delete mode 100644 tests/docker/dockerfiles/debian-powerpc-user-cross.docker delete mode 100644 tests/docker/dockerfiles/debian-sid.docker delete mode 100644 tests/docker/dockerfiles/debian8.docker create mode 100755 tests/tcg/aarch64/float_convs.ref create mode 100644 tests/tcg/aarch64/float_madds.ref create mode 100644 tests/tcg/arm/float_convs.ref create mode 100644 tests/tcg/arm/float_madds.ref create mode 100644 tests/tcg/multiarch/float_convs.c create mode 100644 tests/tcg/multiarch/float_helpers.c create mode 100644 tests/tcg/multiarch/float_helpers.h create mode 100644 tests/tcg/multiarch/float_madds.c
The following changes since commit eb13d1cf4a0478fc29f80abfbac8209479325f35:
Merge remote-tracking branch 'remotes/dgilbert/tags/pull-migration-20190925a' into staging (2019-09-26 14:23:58 +0100)
are available in the Git repository at:
https://github.com/stsquad/qemu.git tags/pull-testing-next-260919-1
for you to fetch changes up to 80394ccf216da9ff48f23b9b8dab65ef809b7870:
tests/docker: remove debian-powerpc-user-cross (2019-09-26 19:00:53 +0100)
----------------------------------------------------------------
Testing updates plus alpha FP fixes:
- fix alpha handling of FtoI overflow
- various docker cleanups
- fix docker.py cleanup race
- fix podman invocation
- tests/tcg: add float and record/replay tests
- remove unused docker images
- expand documentation for check-tcg
----------------------------------------------------------------
Alex Bennée (11):
target/ppc: fix signal delivery for ppc64abi32
tests/docker: fix DOCKER_PARTIAL_IMAGES
tests/docker: reduce scary warnings by cleaning up clean up
tests/tcg: clean-up some comments after the de-tangling
tests/tcg: re-enable linux-test for ppc64abi32
tests/tcg: add float_madds test to multiarch
tests/tcg: add generic version of float_convs
tests/tcg: add simple record/replay smoke test for aarch64
configure: preserve PKG_CONFIG for subdir builds
docs/devel: add "check-tcg" to testing.rst
tests/docker: remove debian-powerpc-user-cross
John Snow (9):
tests/docker: add sanitizers back to clang build
tests/docker: remove python2.7 from debian9-mxe
podman: fix command invocation
docker: remove debian8-mxe definitions
docker: remove unused debian8 partial image
docker: remove 'deprecated' image definitions
docker: remove unused debian-ports
docker: remove unused debian-sid
docker: move tests from python2 to python3
Philippe Mathieu-Daudé (1):
target/i386: Fix broken build with WHPX enabled
Richard Henderson (7):
target/alpha: Use array for FPCR_DYN conversion
target/alpha: Fix SWCR_MAP_UMZ
target/alpha: Fix SWCR_TRAP_ENABLE_MASK
target/alpha: Handle SWCR_MAP_DMZ earlier
target/alpha: Write to fpcr_flush_to_zero once
target/alpha: Mask IOV exception with INV for user-only
target/alpha: Tidy helper_fp_exc_raise_s
Makefile | 6 +-
configure | 1 +
docs/devel/testing.rst | 76 ++
linux-user/ppc/signal.c | 4 +-
target/alpha/fpu_helper.c | 15 +-
target/alpha/helper.c | 64 +-
target/i386/whpx-all.c | 1 +
tests/docker/Makefile.include | 18 +-
tests/docker/docker.py | 36 +-
tests/docker/dockerfiles/centos7.docker | 2 +-
tests/docker/dockerfiles/debian-ports.docker | 36 -
.../dockerfiles/debian-powerpc-user-cross.docker | 21 -
tests/docker/dockerfiles/debian-sid.docker | 35 -
.../docker/dockerfiles/debian-xtensa-cross.docker | 2 +-
tests/docker/dockerfiles/debian10.docker | 2 +-
tests/docker/dockerfiles/debian8.docker | 34 -
tests/docker/dockerfiles/debian9-mxe.docker | 3 +-
tests/docker/dockerfiles/debian9.docker | 2 +-
tests/docker/dockerfiles/travis.docker | 2 +-
tests/docker/dockerfiles/ubuntu.docker | 2 +-
tests/docker/dockerfiles/ubuntu1804.docker | 2 +-
tests/docker/test-clang | 6 +-
tests/tcg/Makefile.target | 16 +-
tests/tcg/aarch64/Makefile.softmmu-target | 21 +
tests/tcg/aarch64/Makefile.target | 3 +-
tests/tcg/aarch64/float_convs.ref | 748 ++++++++++++++++++++
tests/tcg/aarch64/float_madds.ref | 768 +++++++++++++++++++++
tests/tcg/arm/Makefile.target | 16 +-
tests/tcg/arm/float_convs.ref | 748 ++++++++++++++++++++
tests/tcg/arm/float_madds.ref | 768 +++++++++++++++++++++
tests/tcg/multiarch/Makefile.target | 23 +-
tests/tcg/multiarch/float_convs.c | 105 +++
tests/tcg/multiarch/float_helpers.c | 230 ++++++
tests/tcg/multiarch/float_helpers.h | 26 +
tests/tcg/multiarch/float_madds.c | 103 +++
35 files changed, 3709 insertions(+), 236 deletions(-)
delete mode 100644 tests/docker/dockerfiles/debian-ports.docker
delete mode 100644 tests/docker/dockerfiles/debian-powerpc-user-cross.docker
delete mode 100644 tests/docker/dockerfiles/debian-sid.docker
delete mode 100644 tests/docker/dockerfiles/debian8.docker
create mode 100755 tests/tcg/aarch64/float_convs.ref
create mode 100644 tests/tcg/aarch64/float_madds.ref
create mode 100644 tests/tcg/arm/float_convs.ref
create mode 100644 tests/tcg/arm/float_madds.ref
create mode 100644 tests/tcg/multiarch/float_convs.c
create mode 100644 tests/tcg/multiarch/float_helpers.c
create mode 100644 tests/tcg/multiarch/float_helpers.h
create mode 100644 tests/tcg/multiarch/float_madds.c
--
2.20.1
On Thu, 26 Sep 2019 at 19:35, Alex Bennée <alex.bennee@linaro.org> wrote: > > The following changes since commit eb13d1cf4a0478fc29f80abfbac8209479325f35: > > Merge remote-tracking branch 'remotes/dgilbert/tags/pull-migration-20190925a' into staging (2019-09-26 14:23:58 +0100) > > are available in the Git repository at: > > https://github.com/stsquad/qemu.git tags/pull-testing-next-260919-1 > > for you to fetch changes up to 80394ccf216da9ff48f23b9b8dab65ef809b7870: > > tests/docker: remove debian-powerpc-user-cross (2019-09-26 19:00:53 +0100) > > ---------------------------------------------------------------- > Testing updates plus alpha FP fixes: > > - fix alpha handling of FtoI overflow > - various docker cleanups > - fix docker.py cleanup race > - fix podman invocation > - tests/tcg: add float and record/replay tests > - remove unused docker images > - expand documentation for check-tcg Applied, thanks. Please update the changelog at https://wiki.qemu.org/ChangeLog/4.2 for any user-visible changes. -- PMM
From: Richard Henderson <richard.henderson@linaro.org>
This is a bit more straight-forward than using a switch statement.
No functional change.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-Id: <20190921043256.4575-2-richard.henderson@linaro.org>
diff --git a/target/alpha/helper.c b/target/alpha/helper.c
index 19cda0a2db..6c1703682e 100644
--- a/target/alpha/helper.c
+++ b/target/alpha/helper.c
@@ -36,6 +36,13 @@ uint64_t cpu_alpha_load_fpcr(CPUAlphaState *env)
void cpu_alpha_store_fpcr(CPUAlphaState *env, uint64_t val)
{
+ static const uint8_t rm_map[] = {
+ [FPCR_DYN_NORMAL >> FPCR_DYN_SHIFT] = float_round_nearest_even,
+ [FPCR_DYN_CHOPPED >> FPCR_DYN_SHIFT] = float_round_to_zero,
+ [FPCR_DYN_MINUS >> FPCR_DYN_SHIFT] = float_round_down,
+ [FPCR_DYN_PLUS >> FPCR_DYN_SHIFT] = float_round_up,
+ };
+
uint32_t fpcr = val >> 32;
uint32_t t = 0;
@@ -48,22 +55,7 @@ void cpu_alpha_store_fpcr(CPUAlphaState *env, uint64_t val)
env->fpcr = fpcr;
env->fpcr_exc_enable = ~t & FPCR_STATUS_MASK;
- switch (fpcr & FPCR_DYN_MASK) {
- case FPCR_DYN_NORMAL:
- default:
- t = float_round_nearest_even;
- break;
- case FPCR_DYN_CHOPPED:
- t = float_round_to_zero;
- break;
- case FPCR_DYN_MINUS:
- t = float_round_down;
- break;
- case FPCR_DYN_PLUS:
- t = float_round_up;
- break;
- }
- env->fpcr_dyn_round = t;
+ env->fpcr_dyn_round = rm_map[(fpcr & FPCR_DYN_MASK) >> FPCR_DYN_SHIFT];
env->fpcr_flush_to_zero = (fpcr & FPCR_UNFD) && (fpcr & FPCR_UNDZ);
env->fp_status.flush_inputs_to_zero = (fpcr & FPCR_DNZ) != 0;
--
2.20.1
From: Richard Henderson <richard.henderson@linaro.org>
We were setting the wrong bit. The fp_status.flush_to_zero
setting is overwritten by either the constant 1 or the value
of fpcr_flush_to_zero depending on bits within an fp insn.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20190921043256.4575-3-richard.henderson@linaro.org>
diff --git a/target/alpha/helper.c b/target/alpha/helper.c
index 6c1703682e..10602fb339 100644
--- a/target/alpha/helper.c
+++ b/target/alpha/helper.c
@@ -71,7 +71,7 @@ void cpu_alpha_store_fpcr(CPUAlphaState *env, uint64_t val)
env->fp_status.flush_inputs_to_zero = 1;
}
if (env->swcr & SWCR_MAP_UMZ) {
- env->fp_status.flush_to_zero = 1;
+ env->fpcr_flush_to_zero = 1;
}
env->fpcr_exc_enable &= ~(alpha_ieee_swcr_to_fpcr(env->swcr) >> 32);
#endif
--
2.20.1
From: Richard Henderson <richard.henderson@linaro.org>
The CONFIG_USER_ONLY adjustment blindly mashed the swcr
exception enable bits into the fpcr exception disable bits.
However, fpcr_exc_enable has already converted the exception
disable bits into the exception status bits in order to make
it easier to mask status bits at runtime.
Instead, merge the swcr enable bits with the fpcr before we
convert to status bits.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-Id: <20190921043256.4575-4-richard.henderson@linaro.org>
diff --git a/target/alpha/helper.c b/target/alpha/helper.c
index 10602fb339..e21c488aa3 100644
--- a/target/alpha/helper.c
+++ b/target/alpha/helper.c
@@ -46,34 +46,39 @@ void cpu_alpha_store_fpcr(CPUAlphaState *env, uint64_t val)
uint32_t fpcr = val >> 32;
uint32_t t = 0;
+ /* Record the raw value before adjusting for linux-user. */
+ env->fpcr = fpcr;
+
+#ifdef CONFIG_USER_ONLY
+ /*
+ * Override some of these bits with the contents of ENV->SWCR.
+ * In system mode, some of these would trap to the kernel, at
+ * which point the kernel's handler would emulate and apply
+ * the software exception mask.
+ */
+ uint32_t soft_fpcr = alpha_ieee_swcr_to_fpcr(env->swcr) >> 32;
+ fpcr |= soft_fpcr & FPCR_STATUS_MASK;
+#endif
+
t |= CONVERT_BIT(fpcr, FPCR_INED, FPCR_INE);
t |= CONVERT_BIT(fpcr, FPCR_UNFD, FPCR_UNF);
t |= CONVERT_BIT(fpcr, FPCR_OVFD, FPCR_OVF);
t |= CONVERT_BIT(fpcr, FPCR_DZED, FPCR_DZE);
t |= CONVERT_BIT(fpcr, FPCR_INVD, FPCR_INV);
- env->fpcr = fpcr;
env->fpcr_exc_enable = ~t & FPCR_STATUS_MASK;
env->fpcr_dyn_round = rm_map[(fpcr & FPCR_DYN_MASK) >> FPCR_DYN_SHIFT];
env->fpcr_flush_to_zero = (fpcr & FPCR_UNFD) && (fpcr & FPCR_UNDZ);
env->fp_status.flush_inputs_to_zero = (fpcr & FPCR_DNZ) != 0;
-
#ifdef CONFIG_USER_ONLY
- /*
- * Override some of these bits with the contents of ENV->SWCR.
- * In system mode, some of these would trap to the kernel, at
- * which point the kernel's handler would emulate and apply
- * the software exception mask.
- */
if (env->swcr & SWCR_MAP_DMZ) {
env->fp_status.flush_inputs_to_zero = 1;
}
if (env->swcr & SWCR_MAP_UMZ) {
env->fpcr_flush_to_zero = 1;
}
- env->fpcr_exc_enable &= ~(alpha_ieee_swcr_to_fpcr(env->swcr) >> 32);
#endif
}
--
2.20.1
From: Richard Henderson <richard.henderson@linaro.org>
Since we're converting the swcr to fpcr format for exceptions,
it's trivial to add FPCR_DNZ to the set of fpcr bits overriden.
No functional change.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20190921043256.4575-5-richard.henderson@linaro.org>
diff --git a/target/alpha/helper.c b/target/alpha/helper.c
index e21c488aa3..2f959c65ef 100644
--- a/target/alpha/helper.c
+++ b/target/alpha/helper.c
@@ -57,7 +57,7 @@ void cpu_alpha_store_fpcr(CPUAlphaState *env, uint64_t val)
* the software exception mask.
*/
uint32_t soft_fpcr = alpha_ieee_swcr_to_fpcr(env->swcr) >> 32;
- fpcr |= soft_fpcr & FPCR_STATUS_MASK;
+ fpcr |= soft_fpcr & (FPCR_STATUS_MASK | FPCR_DNZ);
#endif
t |= CONVERT_BIT(fpcr, FPCR_INED, FPCR_INE);
@@ -73,9 +73,6 @@ void cpu_alpha_store_fpcr(CPUAlphaState *env, uint64_t val)
env->fpcr_flush_to_zero = (fpcr & FPCR_UNFD) && (fpcr & FPCR_UNDZ);
env->fp_status.flush_inputs_to_zero = (fpcr & FPCR_DNZ) != 0;
#ifdef CONFIG_USER_ONLY
- if (env->swcr & SWCR_MAP_DMZ) {
- env->fp_status.flush_inputs_to_zero = 1;
- }
if (env->swcr & SWCR_MAP_UMZ) {
env->fpcr_flush_to_zero = 1;
}
--
2.20.1
From: Richard Henderson <richard.henderson@linaro.org>
Tidy the computation of the value; no functional change.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20190921043256.4575-6-richard.henderson@linaro.org>
diff --git a/target/alpha/helper.c b/target/alpha/helper.c
index 2f959c65ef..1b3479738b 100644
--- a/target/alpha/helper.c
+++ b/target/alpha/helper.c
@@ -69,14 +69,13 @@ void cpu_alpha_store_fpcr(CPUAlphaState *env, uint64_t val)
env->fpcr_exc_enable = ~t & FPCR_STATUS_MASK;
env->fpcr_dyn_round = rm_map[(fpcr & FPCR_DYN_MASK) >> FPCR_DYN_SHIFT];
-
- env->fpcr_flush_to_zero = (fpcr & FPCR_UNFD) && (fpcr & FPCR_UNDZ);
env->fp_status.flush_inputs_to_zero = (fpcr & FPCR_DNZ) != 0;
+
+ t = (fpcr & FPCR_UNFD) && (fpcr & FPCR_UNDZ);
#ifdef CONFIG_USER_ONLY
- if (env->swcr & SWCR_MAP_UMZ) {
- env->fpcr_flush_to_zero = 1;
- }
+ t |= (env->swcr & SWCR_MAP_UMZ) != 0;
#endif
+ env->fpcr_flush_to_zero = t;
}
uint64_t helper_load_fpcr(CPUAlphaState *env)
--
2.20.1
From: Richard Henderson <richard.henderson@linaro.org>
The kernel masks the integer overflow exception with the
software invalid exception mask. Include IOV in the set
of exception bits masked by fpcr_exc_enable.
Fixes the new float_convs test.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20190921043256.4575-7-richard.henderson@linaro.org>
diff --git a/target/alpha/helper.c b/target/alpha/helper.c
index 1b3479738b..55d7274d94 100644
--- a/target/alpha/helper.c
+++ b/target/alpha/helper.c
@@ -58,6 +58,13 @@ void cpu_alpha_store_fpcr(CPUAlphaState *env, uint64_t val)
*/
uint32_t soft_fpcr = alpha_ieee_swcr_to_fpcr(env->swcr) >> 32;
fpcr |= soft_fpcr & (FPCR_STATUS_MASK | FPCR_DNZ);
+
+ /*
+ * The IOV exception is disabled by the kernel with SWCR_TRAP_ENABLE_INV,
+ * which got mapped by alpha_ieee_swcr_to_fpcr to FPCR_INVD.
+ * Add FPCR_IOV to fpcr_exc_enable so that it is handled identically.
+ */
+ t |= CONVERT_BIT(soft_fpcr, FPCR_INVD, FPCR_IOV);
#endif
t |= CONVERT_BIT(fpcr, FPCR_INED, FPCR_INE);
--
2.20.1
From: Richard Henderson <richard.henderson@linaro.org>
Remove a redundant masking of ignore. Once that's gone it is
obvious that the system-mode inner test is redundant with the
outer test. Move the fpcr_exc_enable masking up and tidy.
No functional change.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-Id: <20190921043256.4575-8-richard.henderson@linaro.org>
diff --git a/target/alpha/fpu_helper.c b/target/alpha/fpu_helper.c
index 62a066d902..df8b58963b 100644
--- a/target/alpha/fpu_helper.c
+++ b/target/alpha/fpu_helper.c
@@ -90,25 +90,18 @@ void helper_fp_exc_raise_s(CPUAlphaState *env, uint32_t ignore, uint32_t regno)
uint32_t exc = env->error_code & ~ignore;
if (exc) {
env->fpcr |= exc;
- exc &= ~ignore;
-#ifdef CONFIG_USER_ONLY
- /*
- * In user mode, the kernel's software handler only
- * delivers a signal if the exception is enabled.
- */
- if (!(exc & env->fpcr_exc_enable)) {
- return;
- }
-#else
+ exc &= env->fpcr_exc_enable;
/*
* In system mode, the software handler gets invoked
* for any non-ignored exception.
+ * In user mode, the kernel's software handler only
+ * delivers a signal if the exception is enabled.
*/
+#ifdef CONFIG_USER_ONLY
if (!exc) {
return;
}
#endif
- exc &= env->fpcr_exc_enable;
fp_exc_raise1(env, GETPC(), exc, regno, EXC_M_SWC);
}
}
--
2.20.1
We were incorrectly using the 64-bit AIX ABI instead of the 32-bit
SYSV ABI for setting NIP for the signal handler.
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
diff --git a/linux-user/ppc/signal.c b/linux-user/ppc/signal.c
index 619a56950d..5b82af6cb6 100644
--- a/linux-user/ppc/signal.c
+++ b/linux-user/ppc/signal.c
@@ -501,7 +501,9 @@ void setup_rt_frame(int sig, struct target_sigaction *ka,
int i, err = 0;
#if defined(TARGET_PPC64)
struct target_sigcontext *sc = 0;
+#if !defined(TARGET_ABI32)
struct image_info *image = ((TaskState *)thread_cpu->opaque)->info;
+#endif
#endif
rt_sf_addr = get_sigframe(ka, env, sizeof(*rt_sf));
@@ -557,7 +559,7 @@ void setup_rt_frame(int sig, struct target_sigaction *ka,
env->gpr[5] = (target_ulong) h2g(&rt_sf->uc);
env->gpr[6] = (target_ulong) h2g(rt_sf);
-#if defined(TARGET_PPC64)
+#if defined(TARGET_PPC64) && !defined(TARGET_ABI32)
if (get_ppc64_abi(image) < 2) {
/* ELFv1 PPC64 function pointers are pointers to OPD entries. */
struct target_func_ptr *handler =
--
2.20.1
From: John Snow <jsnow@redhat.com> Fedora23 is but a distant twinkle. The sanitizer works again, and even if not, we have --enable-sanitizers now. Signed-off-by: John Snow <jsnow@redhat.com> Message-Id: <20190912014442.5757-1-jsnow@redhat.com> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> diff --git a/tests/docker/test-clang b/tests/docker/test-clang index 324e341cea..db9e6970b7 100755 --- a/tests/docker/test-clang +++ b/tests/docker/test-clang @@ -17,11 +17,7 @@ requires clang cd "$BUILD_DIR" -OPTS="--cxx=clang++ --cc=clang --host-cc=clang" -# -fsanitize=undefined is broken on Fedora 23, skip it for now -# See also: https://bugzilla.redhat.com/show_bug.cgi?id=1263834 -#OPTS="$OPTS --extra-cflags=-fsanitize=undefined \ - #--extra-cflags=-fno-sanitize=float-divide-by-zero" +OPTS="--cxx=clang++ --cc=clang --host-cc=clang --enable-sanitizers" build_qemu $OPTS check_qemu install_qemu -- 2.20.1
On 26/09/19 20:35, Alex Bennée wrote: > From: John Snow <jsnow@redhat.com> > > Fedora23 is but a distant twinkle. The sanitizer works again, and even > if not, we have --enable-sanitizers now. > > Signed-off-by: John Snow <jsnow@redhat.com> > Message-Id: <20190912014442.5757-1-jsnow@redhat.com> > Signed-off-by: Alex Bennée <alex.bennee@linaro.org> > > diff --git a/tests/docker/test-clang b/tests/docker/test-clang > index 324e341cea..db9e6970b7 100755 > --- a/tests/docker/test-clang > +++ b/tests/docker/test-clang > @@ -17,11 +17,7 @@ requires clang > > cd "$BUILD_DIR" > > -OPTS="--cxx=clang++ --cc=clang --host-cc=clang" > -# -fsanitize=undefined is broken on Fedora 23, skip it for now > -# See also: https://bugzilla.redhat.com/show_bug.cgi?id=1263834 > -#OPTS="$OPTS --extra-cflags=-fsanitize=undefined \ > - #--extra-cflags=-fno-sanitize=float-divide-by-zero" > +OPTS="--cxx=clang++ --cc=clang --host-cc=clang --enable-sanitizers" > build_qemu $OPTS > check_qemu > install_qemu > -fsanitize=undefined is not the same thing as --enable-sanitizers. This is basically duplicating the asan (test-debug) test now. In fact, since we have the asan test that includes all sanitizers including ubsan, I think it's easiest to just revert this patch. Paolo
On 10/1/19 3:36 AM, Paolo Bonzini wrote: > On 26/09/19 20:35, Alex Bennée wrote: >> From: John Snow <jsnow@redhat.com> >> >> Fedora23 is but a distant twinkle. The sanitizer works again, and even >> if not, we have --enable-sanitizers now. >> >> Signed-off-by: John Snow <jsnow@redhat.com> >> Message-Id: <20190912014442.5757-1-jsnow@redhat.com> >> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> >> >> diff --git a/tests/docker/test-clang b/tests/docker/test-clang >> index 324e341cea..db9e6970b7 100755 >> --- a/tests/docker/test-clang >> +++ b/tests/docker/test-clang >> @@ -17,11 +17,7 @@ requires clang >> >> cd "$BUILD_DIR" >> >> -OPTS="--cxx=clang++ --cc=clang --host-cc=clang" >> -# -fsanitize=undefined is broken on Fedora 23, skip it for now >> -# See also: https://bugzilla.redhat.com/show_bug.cgi?id=1263834 >> -#OPTS="$OPTS --extra-cflags=-fsanitize=undefined \ >> - #--extra-cflags=-fno-sanitize=float-divide-by-zero" >> +OPTS="--cxx=clang++ --cc=clang --host-cc=clang --enable-sanitizers" >> build_qemu $OPTS >> check_qemu >> install_qemu >> > > -fsanitize=undefined is not the same thing as --enable-sanitizers. This > is basically duplicating the asan (test-debug) test now. > > In fact, since we have the asan test that includes all sanitizers > including ubsan, I think it's easiest to just revert this patch. > Ah, whoops :( Sorry about that, just go ahead and revert it, then -- but the revert will restore some comment confetti that's pretty outdated that we want to get rid of. --js
Finger trouble in a previous clean-up inadvertently set DEBIAN_PARTIAL_IMAGES instead of DOCKER_PARTIAL_IMAGES. Also fix the typo to debian-9-mxe. Fixes: 44d5a8bf5d2 Signed-off-by: John Snow <jsnow@redhat.com> [AJB: merged fix from Message-Id: <20190917185537.25417-1-jsnow@redhat.com>] Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: Cleber Rosa <crosa@redhat.com> diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include index 50a400b573..3fc7a863e5 100644 --- a/tests/docker/Makefile.include +++ b/tests/docker/Makefile.include @@ -7,7 +7,7 @@ DOCKER_FILES_DIR := $(SRC_PATH)/tests/docker/dockerfiles DOCKER_DEPRECATED_IMAGES := debian # we don't run tests on intermediate images (used as base by another image) DOCKER_PARTIAL_IMAGES := debian debian8 debian9 debian10 debian-sid -DEBIAN_PARTIAL_IMAGES += debian8-mxe debian-9-mxe debian-ports debian-bootstrap +DOCKER_PARTIAL_IMAGES += debian8-mxe debian9-mxe debian-ports debian-bootstrap DOCKER_IMAGES := $(filter-out $(DOCKER_DEPRECATED_IMAGES),$(sort $(notdir $(basename $(wildcard $(DOCKER_FILES_DIR)/*.docker))))) DOCKER_TARGETS := $(patsubst %,docker-image-%,$(DOCKER_IMAGES)) # Use a global constant ccache directory to speed up repetitive builds -- 2.20.1
From: John Snow <jsnow@redhat.com>
When it was based on debian8 which uses python-minimal, it needed this.
It no longer does.
Goodbye, python2.7.
Signed-off-by: John Snow <jsnow@redhat.com>
Message-Id: <20190918222546.11696-1-jsnow@redhat.com>
[AJB: fixed up commit message]
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>
diff --git a/tests/docker/dockerfiles/debian9-mxe.docker b/tests/docker/dockerfiles/debian9-mxe.docker
index 7431168dad..62ff1cecf2 100644
--- a/tests/docker/dockerfiles/debian9-mxe.docker
+++ b/tests/docker/dockerfiles/debian9-mxe.docker
@@ -16,7 +16,6 @@ RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C6BF758A33A3A276 &&
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive eatmydata \
apt-get install -y --no-install-recommends \
- libpython2.7-stdlib \
$(apt-get -s install -y --no-install-recommends gw32.shared-mingw-w64 | egrep "^Inst mxe-x86-64-unknown-" | cut -d\ -f2)
-ENV PATH $PATH:/usr/lib/mxe/usr/bin/
+ENV PATH $PATH:/usr/lib/mxe/usr/bin/
--
2.20.1
There was in the clean-up code caused by attempting to inspect images
which finished before we got there. Clean up the clean up code by:
- only track the one instance at a time
- use --filter for docker ps instead of doing it by hand
- just call docker rm -f to be done with it
- use uuid.uuid4() for a random uid
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index 29613afd48..3112892fdf 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -215,7 +215,7 @@ class Docker(object):
""" Running Docker commands """
def __init__(self):
self._command = _guess_engine_command()
- self._instances = []
+ self._instance = None
atexit.register(self._kill_instances)
signal.signal(signal.SIGTERM, self._kill_instances)
signal.signal(signal.SIGHUP, self._kill_instances)
@@ -234,21 +234,19 @@ class Docker(object):
cmd = ["ps", "-q"]
if not only_active:
cmd.append("-a")
+
+ filter = "--filter=label=com.qemu.instance.uuid"
+ if only_known:
+ if self._instance:
+ filter += "=%s" % (self._instance)
+ else:
+ # no point trying to kill, we finished
+ return
+
+ print("filter=%s" % (filter))
+ cmd.append(filter)
for i in self._output(cmd).split():
- resp = self._output(["inspect", i])
- labels = json.loads(resp)[0]["Config"]["Labels"]
- active = json.loads(resp)[0]["State"]["Running"]
- if not labels:
- continue
- instance_uuid = labels.get("com.qemu.instance.uuid", None)
- if not instance_uuid:
- continue
- if only_known and instance_uuid not in self._instances:
- continue
- print("Terminating", i)
- if active:
- self._do(["kill", i])
- self._do(["rm", i])
+ self._do(["rm", "-f", i])
def clean(self):
self._do_kill_instances(False, False)
@@ -325,9 +323,9 @@ class Docker(object):
return checksum == _text_checksum(_dockerfile_preprocess(dockerfile))
def run(self, cmd, keep, quiet, as_user=False):
- label = uuid.uuid1().hex
+ label = uuid.uuid4().hex
if not keep:
- self._instances.append(label)
+ self._instance = label
if as_user:
uid = os.getuid()
@@ -340,7 +338,7 @@ class Docker(object):
"com.qemu.instance.uuid=" + label] + cmd,
quiet=quiet)
if not keep:
- self._instances.remove(label)
+ self._instance = None
return ret
def command(self, cmd, argv, quiet):
--
2.20.1
From: John Snow <jsnow@redhat.com>
Oops; there's no argv here.
Signed-off-by: John Snow <jsnow@redhat.com>
Message-Id: <20190913193821.17756-1-jsnow@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Cleber Rosa <crosa@redhat.com>
Tested-by: Cleber Rosa <crosa@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Tested-by: Thomas Huth <thuth@redhat.com>
diff --git a/tests/docker/docker.py b/tests/docker/docker.py
index 3112892fdf..31d8adf836 100755
--- a/tests/docker/docker.py
+++ b/tests/docker/docker.py
@@ -332,7 +332,7 @@ class Docker(object):
cmd = [ "-u", str(uid) ] + cmd
# podman requires a bit more fiddling
if self._command[0] == "podman":
- argv.insert(0, '--userns=keep-id')
+ cmd.insert(0, '--userns=keep-id')
ret = self._do_check(["run", "--label",
"com.qemu.instance.uuid=" + label] + cmd,
--
2.20.1
Now we have fixed the signal delivary bug we can remove this horrible hack from the system. Cc: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com> diff --git a/tests/tcg/multiarch/Makefile.target b/tests/tcg/multiarch/Makefile.target index 6b1e30e2fe..657a04f802 100644 --- a/tests/tcg/multiarch/Makefile.target +++ b/tests/tcg/multiarch/Makefile.target @@ -12,14 +12,6 @@ VPATH += $(MULTIARCH_SRC) MULTIARCH_SRCS =$(notdir $(wildcard $(MULTIARCH_SRC)/*.c)) MULTIARCH_TESTS =$(MULTIARCH_SRCS:.c=) -# FIXME: ppc64abi32 linux-test seems to have issues but the other basic tests work -ifeq ($(TARGET_NAME),ppc64abi32) -BROKEN_TESTS = linux-test -endif - -# Update TESTS -TESTS += $(filter-out $(BROKEN_TESTS), $(MULTIARCH_TESTS)) - # # The following are any additional rules needed to build things # @@ -39,3 +31,6 @@ run-test-mmap: test-mmap run-test-mmap-%: test-mmap $(call run-test, test-mmap-$*, $(QEMU) -p $* $<,\ "$< ($* byte pages) on $(TARGET_NAME)") + +# Update TESTS +TESTS += $(MULTIARCH_TESTS) -- 2.20.1
This adds two new tests that re-use the memory test to check basic record replay functionality is still working. We have to define our own runners rather than using the default pattern as we want to change the test name but re-use the memory binary. We declare the test binaries as PHONY as they don't really exist. [AJB: A better test would output some sort of timer value or other otherwise variable value so we could compare the record and replay outputs and ensure they match] Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com> Cc: Pavel Dovgalyuk <dovgaluk@ispras.ru> diff --git a/tests/tcg/aarch64/Makefile.softmmu-target b/tests/tcg/aarch64/Makefile.softmmu-target index 4c4aaf61dd..b4b3957963 100644 --- a/tests/tcg/aarch64/Makefile.softmmu-target +++ b/tests/tcg/aarch64/Makefile.softmmu-target @@ -32,3 +32,24 @@ memory: CFLAGS+=-DCHECK_UNALIGNED=1 # Running QEMU_OPTS+=-M virt -cpu max -display none -semihosting-config enable=on,target=native,chardev=output -kernel + +# Simple Record/Replay Test +.PHONY: memory-record +run-memory-record: memory-record memory + $(call run-test, $<, \ + $(QEMU) -monitor none -display none \ + -chardev file$(COMMA)path=$<.out$(COMMA)id=output \ + -icount shift=5$(COMMA)rr=record$(COMMA)rrfile=record.bin \ + $(QEMU_OPTS) memory, \ + "$< on $(TARGET_NAME)") + +.PHONY: memory-replay +run-memory-replay: memory-replay run-memory-record + $(call run-test, $<, \ + $(QEMU) -monitor none -display none \ + -chardev file$(COMMA)path=$<.out$(COMMA)id=output \ + -icount shift=5$(COMMA)rr=replay$(COMMA)rrfile=record.bin \ + $(QEMU_OPTS) memory, \ + "$< on $(TARGET_NAME)") + +TESTS+=memory-record memory-replay -- 2.20.1
It was pointed out we haven't documented the check-tcg part of the build system. Attempt to rectify that now. Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> diff --git a/docs/devel/testing.rst b/docs/devel/testing.rst index bf75675fb0..8e981e062d 100644 --- a/docs/devel/testing.rst +++ b/docs/devel/testing.rst @@ -266,6 +266,8 @@ another application on the host may have locked the file, possibly leading to a test failure. If using such devices are explicitly desired, consider adding ``locking=off`` option to disable image locking. +.. _docker-ref: + Docker based tests ================== @@ -799,3 +801,77 @@ And remove any package you want with:: If you've used ``make check-acceptance``, the Python virtual environment where Avocado is installed will be cleaned up as part of ``make check-clean``. + +Testing with "make check-tcg" +============================= + +The check-tcg tests are intended for simple smoke tests of both +linux-user and softmmu TCG functionality. However to build test +programs for guest targets you need to have cross compilers available. +If your distribution supports cross compilers you can do something as +simple as:: + + apt install gcc-aarch64-linux-gnu + +The configure script will automatically pick up their presence. +Sometimes compilers have slightly odd names so the availability of +them can be prompted by passing in the appropriate configure option +for the architecture in question, for example:: + + $(configure) --cross-cc-aarch64=aarch64-cc + +There is also a ``--cross-cc-flags-ARCH`` flag in case additional +compiler flags are needed to build for a given target. + +If you have the ability to run containers as the user you can also +take advantage of the build systems "Docker" support. It will then use +containers to build any test case for an enabled guest where there is +no system compiler available. See :ref: `_docker-ref` for details. + +Running subset of tests +----------------------- + +You can build the tests for one architecture:: + + make build-tcg-tests-$TARGET + +And run with:: + + make run-tcg-tests-$TARGET + +Adding ``V=1`` to the invocation will show the details of how to +invoke QEMU for the test which is useful for debugging tests. + +TCG test dependencies +--------------------- + +The TCG tests are deliberately very light on dependencies and are +either totally bare with minimal gcc lib support (for softmmu tests) +or just glibc (for linux-user tests). This is because getting a cross +compiler to work with additional libraries can be challenging. + +Other TCG Tests +--------------- + +There are a number of out-of-tree test suites that are used for more +extensive testing of processor features. + +KVM Unit Tests +~~~~~~~~~~~~~~ + +The KVM unit tests are designed to run as a Guest OS under KVM but +there is no reason why they can't exercise the TCG as well. It +provides a minimal OS kernel with hooks for enabling the MMU as well +as reporting test results via a special device:: + + https://git.kernel.org/pub/scm/virt/kvm/kvm-unit-tests.git + +Linux Test Project +~~~~~~~~~~~~~~~~~~ + +The LTP is focused on exercising the syscall interface of a Linux +kernel. It checks that syscalls behave as documented and strives to +exercise as many corner cases as possible. It is a useful test suite +to run to exercise QEMU's linux-user code:: + + https://linux-test-project.github.io/ -- 2.20.1
From: Philippe Mathieu-Daudé <philmd@redhat.com>
The WHPX build is broken since commit 12e9493df92 which removed the
"hw/boards.h" where MachineState is declared:
$ ./configure \
--enable-hax --enable-whpx
$ make x86_64-softmmu/all
[...]
CC x86_64-softmmu/target/i386/whpx-all.o
target/i386/whpx-all.c: In function 'whpx_accel_init':
target/i386/whpx-all.c:1378:25: error: dereferencing pointer to
incomplete type 'MachineState' {aka 'struct MachineState'}
whpx->mem_quota = ms->ram_size;
^~
make[1]: *** [rules.mak:69: target/i386/whpx-all.o] Error 1
CC x86_64-softmmu/trace/generated-helpers.o
make[1]: Target 'all' not remade because of errors.
make: *** [Makefile:471: x86_64-softmmu/all] Error 2
Restore this header, partially reverting commit 12e9493df92.
Fixes: 12e9493df92
Reported-by: Ilias Maratos <i.maratos@gmail.com>
Reviewed-by: Stefan Weil <sw@weilnetz.de>
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20190920113329.16787-2-philmd@redhat.com>
diff --git a/target/i386/whpx-all.c b/target/i386/whpx-all.c
index 0c15241ae4..def0c28480 100644
--- a/target/i386/whpx-all.c
+++ b/target/i386/whpx-all.c
@@ -18,6 +18,7 @@
#include "sysemu/cpus.h"
#include "sysemu/runstate.h"
#include "qemu/main-loop.h"
+#include "hw/boards.h"
#include "qemu/error-report.h"
#include "qapi/error.h"
#include "migration/blocker.h"
--
2.20.1
From: John Snow <jsnow@redhat.com> We don't have a debian8-mxe dockerfile anymore. Fixes: 67bd36beda1ae Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-Id: <20190923181140.7235-2-jsnow@redhat.com> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include index 3fc7a863e5..274c848a1c 100644 --- a/tests/docker/Makefile.include +++ b/tests/docker/Makefile.include @@ -7,7 +7,7 @@ DOCKER_FILES_DIR := $(SRC_PATH)/tests/docker/dockerfiles DOCKER_DEPRECATED_IMAGES := debian # we don't run tests on intermediate images (used as base by another image) DOCKER_PARTIAL_IMAGES := debian debian8 debian9 debian10 debian-sid -DOCKER_PARTIAL_IMAGES += debian8-mxe debian9-mxe debian-ports debian-bootstrap +DOCKER_PARTIAL_IMAGES += debian9-mxe debian-ports debian-bootstrap DOCKER_IMAGES := $(filter-out $(DOCKER_DEPRECATED_IMAGES),$(sort $(notdir $(basename $(wildcard $(DOCKER_FILES_DIR)/*.docker))))) DOCKER_TARGETS := $(patsubst %,docker-image-%,$(DOCKER_IMAGES)) # Use a global constant ccache directory to speed up repetitive builds -- 2.20.1
From: John Snow <jsnow@redhat.com> There isn't a debian.dockerfile anymore, so perform some ghost-busting. Signed-off-by: John Snow <jsnow@redhat.com> Message-Id: <20190923181140.7235-4-jsnow@redhat.com> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Acked-by: Philippe Mathieu-Daudé <philmd@redhat.com> diff --git a/tests/docker/Makefile.include b/tests/docker/Makefile.include index 47ff777440..a19341e326 100644 --- a/tests/docker/Makefile.include +++ b/tests/docker/Makefile.include @@ -4,11 +4,10 @@ DOCKER_SUFFIX := .docker DOCKER_FILES_DIR := $(SRC_PATH)/tests/docker/dockerfiles -DOCKER_DEPRECATED_IMAGES := debian # we don't run tests on intermediate images (used as base by another image) -DOCKER_PARTIAL_IMAGES := debian debian9 debian10 debian-sid +DOCKER_PARTIAL_IMAGES := debian9 debian10 debian-sid DOCKER_PARTIAL_IMAGES += debian9-mxe debian-ports debian-bootstrap -DOCKER_IMAGES := $(filter-out $(DOCKER_DEPRECATED_IMAGES),$(sort $(notdir $(basename $(wildcard $(DOCKER_FILES_DIR)/*.docker))))) +DOCKER_IMAGES := $(sort $(notdir $(basename $(wildcard $(DOCKER_FILES_DIR)/*.docker)))) DOCKER_TARGETS := $(patsubst %,docker-image-%,$(DOCKER_IMAGES)) # Use a global constant ccache directory to speed up repetitive builds DOCKER_CCACHE_DIR := $$HOME/.cache/qemu-docker-ccache @@ -158,7 +157,7 @@ docker-image-debian-powerpc-user-cross: docker-binfmt-image-debian-powerpc-user DOCKER_USER_IMAGES += debian-powerpc-user # Expand all the pre-requistes for each docker image and test combination -$(foreach i,$(filter-out $(DOCKER_PARTIAL_IMAGES),$(DOCKER_IMAGES) $(DOCKER_DEPRECATED_IMAGES)), \ +$(foreach i,$(filter-out $(DOCKER_PARTIAL_IMAGES),$(DOCKER_IMAGES)), \ $(foreach t,$(DOCKER_TESTS) $(DOCKER_TOOLS), \ $(eval .PHONY: docker-$t@$i) \ $(eval docker-$t@$i: docker-image-$i docker-run-$t@$i) \ -- 2.20.1
© 2016 - 2025 Red Hat, Inc.