From: Ilya Leoshkevich <iii@linux.ibm.com>
To: Richard Henderson <richard.henderson@linaro.org>,
Cornelia Huck <cohuck@redhat.com>,
Eric Farman <farman@linux.ibm.com>,
Matthew Rosato <mjrosato@linux.ibm.com>
Cc: David Hildenbrand <david@kernel.org>,
qemu-s390x@nongnu.org, qemu-devel@nongnu.org,
Ilya Leoshkevich <iii@linux.ibm.com>
Subject: [PATCH v2 2/2] tests/tcg/s390x: Test STCKF condition code on a faulting store
Date: Tue, 14 Jul 2026 22:29:55 +0200 [thread overview]
Message-ID: <20260714203206.363028-3-iii@linux.ibm.com> (raw)
In-Reply-To: <20260714203206.363028-1-iii@linux.ibm.com>
Add a small test to prevent regressions.
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
---
tests/tcg/s390x/Makefile.target | 1 +
tests/tcg/s390x/stckf.c | 44 +++++++++++++++++++++++++++++++++
2 files changed, 45 insertions(+)
create mode 100644 tests/tcg/s390x/stckf.c
diff --git a/tests/tcg/s390x/Makefile.target b/tests/tcg/s390x/Makefile.target
index 0ca030ded01..6a5bf8b7813 100644
--- a/tests/tcg/s390x/Makefile.target
+++ b/tests/tcg/s390x/Makefile.target
@@ -50,6 +50,7 @@ TESTS+=cvb
TESTS+=ts
TESTS+=ex-smc
TESTS+=divide-to-integer
+TESTS+=stckf
cdsg: CFLAGS+=-pthread
cdsg: LDFLAGS+=-pthread
diff --git a/tests/tcg/s390x/stckf.c b/tests/tcg/s390x/stckf.c
new file mode 100644
index 00000000000..51c8c9df9f8
--- /dev/null
+++ b/tests/tcg/s390x/stckf.c
@@ -0,0 +1,44 @@
+/*
+ * Test that a faulting STORE CLOCK FAST does not clobber the condition code.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+#include <assert.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+static void handle_sigsegv(int sig, siginfo_t *info, void *ucontext)
+{
+ mcontext_t *mcontext = &((ucontext_t *)ucontext)->uc_mcontext;
+
+ /* The condition code must be the one set by SLGR, not garbage. */
+ _exit(((mcontext->psw.mask >> 44) & 3) == 3 ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+
+int main(void)
+{
+ struct sigaction act = {
+ .sa_sigaction = handle_sigsegv,
+ .sa_flags = SA_SIGINFO,
+ };
+ int err;
+
+ err = sigaction(SIGSEGV, &act, NULL);
+ assert(err == 0);
+
+ asm volatile(
+ "lghi %%r1,100\n"
+ "lghi %%r2,0\n"
+ "clgr %%r1,%%r2\n" /* CC_OP_LTUGTU_64 */
+ /* cc_src=100 is not valid for CC_OP_SUBU */
+ "ipm %%r0\n" /* force cc_src to env */
+ "lghi %%r3,5\n"
+ "lghi %%r4,3\n"
+ "slgr %%r3,%%r4\n" /* CC_OP_SUBU, cc=3 */
+ "lghi %%r5,0\n"
+ "stckf 0(%%r5)\n" /* faults; cc must stay 3 */
+ : : : "r0", "r1", "r2", "r3", "r4", "r5", "cc", "memory");
+
+ return EXIT_FAILURE;
+}
--
2.55.0
prev parent reply other threads:[~2026-07-14 20:33 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-14 20:29 [PATCH v2 0/2] target/s390x/tcg: Set STCK/STCKF condition code after the store Ilya Leoshkevich
2026-07-14 20:29 ` [PATCH v2 1/2] " Ilya Leoshkevich
2026-07-14 20:29 ` Ilya Leoshkevich [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260714203206.363028-3-iii@linux.ibm.com \
--to=iii@linux.ibm.com \
--cc=cohuck@redhat.com \
--cc=david@kernel.org \
--cc=farman@linux.ibm.com \
--cc=mjrosato@linux.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-s390x@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.