aboutsummaryrefslogtreecommitdiffstats
path: root/tools/testing/selftests/syscall_user_dispatch/sud_test.c
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2024-04-29 20:22:39 +0200
committerDaniel Vetter <daniel.vetter@ffwll.ch>2024-04-29 20:22:39 +0200
commitb84bc948528e6474ba48596144e9c17466a98448 (patch)
tree194e9a20ae9ec40614937de8a23753908bffc75e /tools/testing/selftests/syscall_user_dispatch/sud_test.c
parentMerge tag 'mediatek-drm-next-6.10' of https://git.kernel.org/pub/scm/linux/ke... (diff)
parentLinux 6.9-rc6 (diff)
downloadlinux-b84bc948528e6474ba48596144e9c17466a98448.tar.gz
linux-b84bc948528e6474ba48596144e9c17466a98448.zip
Merge v6.9-rc6 into drm-next
Thomas needs the defio fixes, MaĆ­ra needs the vkms fixes and Joonas has some fun with i915-gem conflicts. Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'tools/testing/selftests/syscall_user_dispatch/sud_test.c')
-rw-r--r--tools/testing/selftests/syscall_user_dispatch/sud_test.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/tools/testing/selftests/syscall_user_dispatch/sud_test.c b/tools/testing/selftests/syscall_user_dispatch/sud_test.c
index b5d592d4099e..d975a6767329 100644
--- a/tools/testing/selftests/syscall_user_dispatch/sud_test.c
+++ b/tools/testing/selftests/syscall_user_dispatch/sud_test.c
@@ -158,6 +158,20 @@ static void handle_sigsys(int sig, siginfo_t *info, void *ucontext)
/* In preparation for sigreturn. */
SYSCALL_DISPATCH_OFF(glob_sel);
+
+ /*
+ * The tests for argument handling assume that `syscall(x) == x`. This
+ * is a NOP on x86 because the syscall number is passed in %rax, which
+ * happens to also be the function ABI return register. Other
+ * architectures may need to swizzle the arguments around.
+ */
+#if defined(__riscv)
+/* REG_A7 is not defined in libc headers */
+# define REG_A7 (REG_A0 + 7)
+
+ ((ucontext_t *)ucontext)->uc_mcontext.__gregs[REG_A0] =
+ ((ucontext_t *)ucontext)->uc_mcontext.__gregs[REG_A7];
+#endif
}
TEST(dispatch_and_return)