From 15d2cdc331828a80b528650b25415c9edca4f421 Mon Sep 17 00:00:00 2001 From: Andrei Vagin Date: Thu, 5 Sep 2024 18:15:57 -0700 Subject: [PATCH] tests: check fpu registers before doing any function call Function calls can "corrupt" fpu registers. PiperOrigin-RevId: 671577096 --- test/syscalls/linux/fpsig_fork.cc | 4 ++-- test/syscalls/linux/fpsig_nested.cc | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/test/syscalls/linux/fpsig_fork.cc b/test/syscalls/linux/fpsig_fork.cc index ae03fe3ba..a6d86598d 100644 --- a/test/syscalls/linux/fpsig_fork.cc +++ b/test/syscalls/linux/fpsig_fork.cc @@ -110,11 +110,11 @@ TEST(FPSigTest, Fork) { asm volatile("svc #0\n" : "=r"(x0) : "r"(x0), "r"(x1), "r"(x2), "r"(x8) :); ret = x0; #endif - EXPECT_EQ(ret, 0); - uint64_t got; GET_FP0(got); + EXPECT_EQ(ret, 0); + if (getpid() == parent) { // Parent. int status; ASSERT_THAT(waitpid(child, &status, 0), SyscallSucceedsWithValue(child)); diff --git a/test/syscalls/linux/fpsig_nested.cc b/test/syscalls/linux/fpsig_nested.cc index 0f2368448..f5840d578 100644 --- a/test/syscalls/linux/fpsig_nested.cc +++ b/test/syscalls/linux/fpsig_nested.cc @@ -82,11 +82,12 @@ void sigusr1(int s, siginfo_t* siginfo, void* _uc) { asm volatile("svc #0\n" : "=r"(x0) : "r"(x0), "r"(x1), "r"(x2), "r"(x8) :); ret = x0; #endif - EXPECT_EQ(ret, 0); // Record value of %xmm0 again to verify that the nested signal handler // does not clobber it. GET_FP0(exitxmm[0]); + + EXPECT_EQ(ret, 0); } TEST(FPSigTest, NestedSignals) { @@ -132,11 +133,11 @@ TEST(FPSigTest, NestedSignals) { asm volatile("svc #0\n" : "=r"(x0) : "r"(x0), "r"(x1), "r"(x2), "r"(x8) :); ret = x0; #endif - EXPECT_EQ(ret, 0); - uint64_t got; GET_FP0(got); + EXPECT_EQ(ret, 0); + // // The checks below verifies the following: // - signal handlers must called with a clean fpu state.