From nobody Sat Jun 27 08:23:16 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1781110009; cv=none; d=zohomail.com; s=zohoarc; b=av/kk/M1fEpSCad5ziPJSCa4YmdDsXE6gMJWvWI9efGY5VY7HQrYM5/S4//GKEEkmgzMP+2/RGNFO1/sWSiuENeYVpaApocvwMwGFAxcV8W0zEmfbx3FD8qRKRMVw6M+hYAvYx6LG4T3IjUfvMpwoKGV+9Pd1Q2oG4rn2P5lAtI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781110009; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=uJYohCP5AnuX7NPUMRjtL6qY4Sdy/K2vE+H1RS4C8dU=; b=PqOFxushwWXrOsvYw2dbXorHyAY5gm4flOeFe1tRsbJG/zuDjzQKKadXBGTOeLBI8thl9KOIH5H//C9pdm59xnaHlB7w948WJEAYeRHVzoTIDZfYwA+0Chr9cXlB1waf1vUVYfmqVWd44nkgpeCWUufwQXtbQo+F8GscKZxBJ3M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781110009309966.9404681263637; Wed, 10 Jun 2026 09:46:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wXM45-0003IF-Gv; Wed, 10 Jun 2026 12:46:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wXM44-0003Hi-JE for qemu-devel@nongnu.org; Wed, 10 Jun 2026 12:46:04 -0400 Received: from sea.source.kernel.org ([172.234.252.31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wXM40-0000jR-9n for qemu-devel@nongnu.org; Wed, 10 Jun 2026 12:46:01 -0400 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id BEB2E43263; Wed, 10 Jun 2026 16:45:56 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5D25F1F00898; Wed, 10 Jun 2026 16:45:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1781109956; bh=uJYohCP5AnuX7NPUMRjtL6qY4Sdy/K2vE+H1RS4C8dU=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=efwiRbkCv0rDMF1KYSyx3mIFYiXmac1eNa8I6/E8FvrVUZ/6hD63nsBYpf2Mcqd2J BBRYpl5dbMtkfntyiDzQgHD8nn4M9MNOYkIr7l8s5acuBxF3UMUyVMnCEql8Wulm1r gP6a4iwSNQI/QdDGMM+c8okZV/VKHoCuXpwxvfabKUQgEKIFtJSGptHnU3YkyiLEsl cU3bsx1/Wq5goQW7KwePHdFgBjUYYpW8x5gclimZva2Ce3+FzbbA/MwIATDS5s9g8Z sR5426xgRBVRv1IGH9OJj73s6SvOD4YsC0GAJ9EvKxrX7yD37BYCcXSfA8CwlsB3bt jLh7OPPBJLSbg== From: Helge Deller To: Stefan Hajnoczi , qemu-devel@nongnu.org Cc: Yoshinori Sato , Pierrick Bouvier , Laurent Vivier , Helge Deller , Max Filippov , Xinhui Yang Subject: [PULL v3 1/8] linux-user: implement fsmount(2) series of syscalls Date: Wed, 10 Jun 2026 18:45:42 +0200 Message-ID: <20260610164549.5699-2-deller@kernel.org> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260610164549.5699-1-deller@kernel.org> References: <20260610164549.5699-1-deller@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=172.234.252.31; envelope-from=deller@kernel.org; helo=sea.source.kernel.org X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @kernel.org) X-ZM-MESSAGEID: 1781110010716158500 Content-Type: text/plain; charset="utf-8" From: Xinhui Yang This series of syscalls replaces the old mount(2) syscall with a series of syscalls that operates around a filesystem context. This series of syscalls is available since Linux 5.2 and glibc 2.36+. Their users include systemd since v259 and libmount from util-linux, and possibly other widely used projects. Preliminary checks are implemented to ensure the validity of the interface. v2: Add syscall wrappers in case the build machine does not support the fsmount() syscalls. (added by Helge Deller) Signed-off-by: Xinhui Yang Reviewed-by: Pierrick Bouvier Signed-off-by: Helge Deller --- linux-user/syscall.c | 104 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 7d7a7b489c..37ede95510 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -9713,6 +9713,19 @@ _syscall5(int, sys_move_mount, int, __from_dfd, cons= t char *, __from_pathname, int, __to_dfd, const char *, __to_pathname, unsigned int, flag) #endif =20 +#if defined(TARGET_NR_fsopen) && defined(NR_fsopen) +#define __NR_sys_fsopen __NR_fsopen +_syscall2(int, sys_fsopen, const char *, fs_name, unsigned int, flags); +#define __NR_sys_fsconfig __NR_fsconfig +_syscall5(int, sys_fsconfig, int, fs_fd, unsigned int, cmd, const char *, = key, + const void *, value, int, aux) +#define __NR_sys_fsmount __NR_fsmount +_syscall3(int, sys_fsmount, int, fs_fd, unsigned int, flags, + unsigned int, ms_flags) +#define __NR_sys_fspick __NR_fspick +_syscall3(int, sys_fspick, int, dfd, const char *, path, unsigned int, fla= gs) +#endif + /* This is an internal helper for do_syscall so that it is easier * to have a single return point, so that actions, such as logging * of syscall results, can be performed. @@ -14412,6 +14425,97 @@ static abi_long do_syscall1(CPUArchState *cpu_env,= int num, abi_long arg1, return do_map_shadow_stack(cpu_env, arg1, arg2, arg3); #endif =20 +#if defined(TARGET_NR_fsopen) && defined(NR_fsopen) + case TARGET_NR_fsopen: + { + p =3D lock_user_string(arg1); + if (!p) { + return -TARGET_EFAULT; + } + ret =3D get_errno(sys_fsopen(p, arg2)); + unlock_user(p, arg1, 0); + } + return ret; + case TARGET_NR_fsconfig: + { + /* + * fsconfig(int, int, char *, void *, int) + * NOTE: p4 is nullable and its type might not be a string. + */ + void *p3, *p4; + int cmd =3D (int) arg2; + switch (cmd) { + case FSCONFIG_SET_BINARY: + case FSCONFIG_SET_STRING: + case FSCONFIG_SET_PATH: + case FSCONFIG_SET_PATH_EMPTY: + p3 =3D lock_user_string(arg3); + if (!p3) { + return -TARGET_EFAULT; + } + if (cmd !=3D FSCONFIG_SET_BINARY) { + /* key and value must be strings. */ + p4 =3D lock_user_string(arg4); + } else { + /* + * Otherwise the value must be a raw buffer with its + * length specified in arg5 (aux). + */ + p4 =3D lock_user(VERIFY_READ, arg4, arg5, 1); + } + if (!p4) { + unlock_user(p3, arg3, 0); + return -TARGET_EFAULT; + } + ret =3D get_errno(sys_fsconfig(arg1, arg2, p3, p4, arg5)); + unlock_user(p3, arg3, 0); + unlock_user(p4, arg4, 0); + break; + + case FSCONFIG_SET_FLAG: + case FSCONFIG_SET_FD: + /* arg4 (value) must be NULL. */ + if (arg4) { + return -TARGET_EFAULT; + } + p3 =3D lock_user_string(arg3); + if (!p3) { + return -TARGET_EFAULT; + } + ret =3D get_errno(sys_fsconfig(arg1, arg2, p3, NULL, arg5)= ); + unlock_user(p3, arg3, 0); + break; + case FSCONFIG_CMD_CREATE: + case FSCONFIG_CMD_RECONFIGURE: +#ifdef FSCONFIG_CMD_CREATE_EXCL + /* + * FSCONFIG_CMD_CREATE_EXCL is only available since Linux + * 6.6. Guarding it to allow building with pre-6.6 headers. + */ + case FSCONFIG_CMD_CREATE_EXCL: +#endif + /* key and value must be NULL, aux must be 0. */ + if (arg3 || arg4 || arg5) { + return -TARGET_EFAULT; + } + ret =3D get_errno(sys_fsconfig(arg1, arg2, NULL, NULL, 0)); + break; + default: + return -TARGET_EFAULT; + } + } + return ret; + case TARGET_NR_fsmount: + ret =3D get_errno(sys_fsmount(arg1, arg2, arg3)); + return ret; + case TARGET_NR_fspick: + { + p =3D lock_user_string(arg2); + ret =3D get_errno(sys_fspick(arg1, p, arg3)); + unlock_user(p, arg2, 0); + } + return ret; +#endif default: qemu_log_mask(LOG_UNIMP, "Unsupported syscall: %d\n", num); return -TARGET_ENOSYS; --=20 2.54.0 From nobody Sat Jun 27 08:23:16 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1781110046; cv=none; d=zohomail.com; s=zohoarc; b=hIao3sRuPTkEewU98m7sFv7vnsAfbc6y6Qh1PJr3FVoBPTDOqMxuA+OoWZUkSI7uddHxpm9DNBQjJ6wjhSvh0L5W75hAHdb/MrbTEcQXpc87AxOgVGszzKLSrWtufzUArRM7cOXeP0WHGvITMqfXVNUVn3iSZpeOfOOqhm6I/D0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781110046; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fjd0o77VDDEjqSE2I8LinZtck7DDkgHKVhpWYZ6jkMc=; b=M1J2Xj+t6ou8PFHterDKYJWVCaQin8psCHQzIdl0ICGN4uk9OMzkiAVzj9KJMkONLmNZCrCnxPgRyrlWPkVb/lNc5GqBetujUCPP4HnCaY6RxbxvVb0t/ewWc2KK3PlpRuhsFzAsDM75a2W/HKO7HLsngbAj6GcTkhH1vD32JVI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781110046093360.0826208931659; Wed, 10 Jun 2026 09:47:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wXM47-0003Ig-2D; Wed, 10 Jun 2026 12:46:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wXM44-0003Hh-Iq for qemu-devel@nongnu.org; Wed, 10 Jun 2026 12:46:04 -0400 Received: from sea.source.kernel.org ([172.234.252.31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wXM40-0000jt-Al for qemu-devel@nongnu.org; Wed, 10 Jun 2026 12:46:01 -0400 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 2B0BA4043C; Wed, 10 Jun 2026 16:45:59 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 26AF01F00898; Wed, 10 Jun 2026 16:45:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1781109959; bh=fjd0o77VDDEjqSE2I8LinZtck7DDkgHKVhpWYZ6jkMc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=hAsRWg7MoMMRgQYWzC5vj3oIVm4R+M/+ZBZ8DKs5F5YrkxnolMiIir31RWAGfMs5j BJZIO3UtuQYSV2D2G9IX6xiKYXSIxF6/4lpb3KP5SEBfAg25b/zUft6l2UiB3P3OFa ZQzbEBqrMMgFK4/u+4jVCWUy4CIpkRMnolyauOv/Py7URFSiHg3N5P1bjrKPnJqYxj maskblOQfLP0dd9It171tN6v/7iq19Aczb633v3lTeSChTjtEHiY8w+qCX0m7FLuEx 5M0iDNCz6kxgryPD1EOb+gPTstXY181Iw5/eFBXbfD4jDxP7WcnZOPVV/cRT7oE1W7 NpbGo2Y47LnqQ== From: Helge Deller To: Stefan Hajnoczi , qemu-devel@nongnu.org Cc: Yoshinori Sato , Pierrick Bouvier , Laurent Vivier , Helge Deller , Max Filippov , Xinhui Yang Subject: [PULL v3 2/8] linux-user/strace: add fsmount series of syscalls Date: Wed, 10 Jun 2026 18:45:43 +0200 Message-ID: <20260610164549.5699-3-deller@kernel.org> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260610164549.5699-1-deller@kernel.org> References: <20260610164549.5699-1-deller@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=172.234.252.31; envelope-from=deller@kernel.org; helo=sea.source.kernel.org X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @kernel.org) X-ZM-MESSAGEID: 1781110046886158500 Content-Type: text/plain; charset="utf-8" From: Xinhui Yang Following the addition of fsmount(2) series of syscalls in the syscall handler, strace support is added, with a dedicated function to print the parameters of fsconfig(2), which contains parameters that can be interpreted as multiple types. Snippet of the strace dump when running `mount -t tmpfs tmpfs /media`: 18 fsopen(tmpfs,1) =3D 3 18 read(3,0x407fcf1c,8191) =3D -1 errno=3D61 (No data available) 18 fsconfig(3,FSCONFIG_SET_STRING,"source","tmpfs",0) =3D 0 18 read(3,0x407fce3c,8191) =3D -1 errno=3D61 (No data available) 18 fsconfig(3,FSCONFIG_CMD_CREATE,NULL,NULL,0) =3D 0 18 read(3,0x407fce3c,8191) =3D -1 errno=3D61 (No data available) 18 fsmount(3,1,0) =3D 4 18 read(3,0x407fce3c,8191) =3D -1 errno=3D61 (No data available) 18 statx(4,"",AT_EMPTY_PATH|AT_STATX_SYNC_AS_STAT,0x1000,0x407fee98) =3D 0 18 move_mount(4,,-100,/media,4) =3D 0 18 read(3,0x407fcfcc,8191) =3D -1 errno=3D61 (No data available) 18 close(3) =3D 0 18 close(4) =3D 0 v2: Fixed build on RHEL9 due to missing syscalls (Helge) Signed-off-by: Xinhui Yang Reviewed-by: Pierrick Bouvier Signed-off-by: Helge Deller --- linux-user/strace.c | 105 +++++++++++++++++++++++++++++++++++++++++ linux-user/strace.list | 15 ++++++ 2 files changed, 120 insertions(+) diff --git a/linux-user/strace.c b/linux-user/strace.c index 2cbaf94c89..3a81cc95f4 100644 --- a/linux-user/strace.c +++ b/linux-user/strace.c @@ -4344,6 +4344,111 @@ print_statx(CPUArchState *cpu_env, const struct sys= callname *name, } #endif =20 +#if defined(TARGET_NR_fsconfig) && defined(NR_fsconfig) +static void +print_fsconfig_cmd_name(int cmd) +{ + switch (cmd) { + case FSCONFIG_SET_FLAG: + qemu_log("%s%s", "FSCONFIG_SET_FLAG", get_comma(0)); + break; + case FSCONFIG_SET_STRING: + qemu_log("%s%s", "FSCONFIG_SET_STRING", get_comma(0)); + break; + case FSCONFIG_SET_BINARY: + qemu_log("%s%s", "FSCONFIG_SET_BINARY", get_comma(0)); + break; + case FSCONFIG_SET_PATH: + qemu_log("%s%s", "FSCONFIG_SET_PATH", get_comma(0)); + break; + case FSCONFIG_SET_PATH_EMPTY: + qemu_log("%s%s", "FSCONFIG_SET_PATH_EMPTY", get_comma(0)); + break; + case FSCONFIG_SET_FD: + qemu_log("%s%s", "FSCONFIG_SET_FD", get_comma(0)); + break; + case FSCONFIG_CMD_CREATE: + qemu_log("%s%s", "FSCONFIG_CMD_CREATE", get_comma(0)); + break; + case FSCONFIG_CMD_RECONFIGURE: + qemu_log("%s%s", "FSCONFIG_CMD_RECONFIGURE", get_comma(0)); + break; +#ifdef FSCONFIG_CMD_CREATE_EXCL + case FSCONFIG_CMD_CREATE_EXCL: + /* Only available since Linux 6.6. */ + qemu_log("%s%s", "FSCONFIG_CMD_CREATE_EXCL", get_comma(0)); + break; +#endif + default: + qemu_log("%s (%d)%s", "UNKNOWN_CMD", cmd, get_comma(0)); + break; + } +} + +static void +print_fsconfig(CPUArchState *cpu_env, const struct syscallname *name, + abi_long arg0, abi_long arg1, abi_long arg2, + abi_long arg3, abi_long arg4, abi_long arg5) +{ + /* + * fsconfig(int fd, int cmd, char* key, void* value, int aux) + * Where: + * fd: file descriptor returned by fsopen(). + * cmd: integer constant specifying a command. + * key: a string, can be NULL on certain commands. + * value: any data in a buffer, can be NULL, raw buffer or a string. + * aux: axillary values such as flags for FSCONFIG_SET_PATH. + */ + int cmd =3D (int) arg1; + print_syscall_prologue(name); + print_raw_param("%d", arg0, 0); + print_fsconfig_cmd_name(cmd); + /* Process arg2 (key). */ + switch (cmd) { + case FSCONFIG_SET_FLAG: + case FSCONFIG_SET_STRING: + case FSCONFIG_SET_BINARY: + case FSCONFIG_SET_PATH: + case FSCONFIG_SET_PATH_EMPTY: + case FSCONFIG_SET_FD: + print_string(arg2, 0); + break; + default: + print_pointer(arg2, 0); + break; + } + /* Process arg3 (value). */ + switch (cmd) { + case FSCONFIG_SET_STRING: + case FSCONFIG_SET_PATH: + case FSCONFIG_SET_PATH_EMPTY: + print_string(arg3, 0); + break; + default: + print_pointer(arg3, 0); + break; + } + /* + * Process arg4 (aux). + * On FSCONFIG_SET_PATH and FSCONFIG_SET_PATH_EMPTY, aux can + * be either 0 or AT_FDCWD. + * On FSCONFIG_SET_BINARY, aux is an integer to state the length + * of the buffer pointed by arg3. + * Otherwise, it must be 0. + */ + switch (cmd) { + case FSCONFIG_SET_PATH: + case FSCONFIG_SET_PATH_EMPTY: + print_at_dirfd(arg4, 1); + break; + default: + print_raw_param("%d", arg4, 1); + break; + } + print_syscall_epilogue(name); +} +#endif + #ifdef TARGET_NR_ioctl static void print_ioctl(CPUArchState *cpu_env, const struct syscallname *name, diff --git a/linux-user/strace.list b/linux-user/strace.list index 6162a407f9..e363892e0a 100644 --- a/linux-user/strace.list +++ b/linux-user/strace.list @@ -1722,3 +1722,18 @@ #ifdef TARGET_NR_rseq { TARGET_NR_rseq, "rseq" , "%s(%p,%u,%d,%#x)", NULL, NULL }, #endif +#ifdef TARGET_NR_fsopen +{ TARGET_NR_fsopen, "fsopen", "%s(%s,%d)", NULL, NULL }, +#endif +#if defined(TARGET_NR_fsconfig) && defined(NR_fsconfig) +{ TARGET_NR_fsconfig, "fsconfig", NULL, print_fsconfig, NULL }, +#endif +#ifdef TARGET_NR_fsmount +{ TARGET_NR_fsmount, "fsmount", "%s(%d,%d,%d)", NULL, NULL }, +#endif +#ifdef TARGET_NR_move_mount +{ TARGET_NR_move_mount, "move_mount", "%s(%d,%s,%d,%s,%d)", NULL, NULL }, +#endif +#ifdef TARGET_NR_fspick +{ TARGET_NR_fspick, "fspick", "%s(%d,%s,%d)", NULL, NULL }, +#endif --=20 2.54.0 From nobody Sat Jun 27 08:23:16 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1781110020; cv=none; d=zohomail.com; s=zohoarc; b=DiCytpAse2EKzTnhJzMPkLVeQosrSe8nCZLERCZJnv8hlKdKimCbihtP/FLtM2RHdpYgd8lx+4A3b61QBaP1nwzv8u6SL0XYscMK9venXyLh0xJRtN8aKq92Jx6rk7d2P/yjVYlauRWb+u2/4bT4zeM1ylaB9QggfTYobWYSbQs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781110020; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=7yYTiLNsF0Ma6LBU7IM8obbatVSGeWaX23IU43WW7R0=; b=HZ3UVI8+eL3Fmp9VkEEin3BctrKeSwjfaPvGzxqQV3VSnhgFcWVIKaoYPkGPsR/uxr2qQnbwXDEL/MKppYIArXnWvWahyqfO6NGL0vo1Pr+DHda4wZrX7uudB/pSHuiPqDjOekSR1M399CHKP59IV58sugRY50rFYf0/QCsXvDE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781110020735271.5082781029388; Wed, 10 Jun 2026 09:47:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wXM49-0003JW-I4; Wed, 10 Jun 2026 12:46:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wXM47-0003Iw-MR for qemu-devel@nongnu.org; Wed, 10 Jun 2026 12:46:07 -0400 Received: from sea.source.kernel.org ([172.234.252.31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wXM43-0000kJ-KB for qemu-devel@nongnu.org; Wed, 10 Jun 2026 12:46:05 -0400 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 1FF0143CB2; Wed, 10 Jun 2026 16:46:02 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 82ACB1F00893; Wed, 10 Jun 2026 16:45:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1781109962; bh=7yYTiLNsF0Ma6LBU7IM8obbatVSGeWaX23IU43WW7R0=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=io8YFkpg/WjZaC/DCLZZs52IwMpfCwXjLAKfQ4Xg35iGWBtMrx3R0aW7o+wWGeEMb WEQyBy61KNbMWUMok/Aj/zh05UuS50HHGi2oIw1aPcdPif9MTzW9OZGgwhXiBIlVFY uoVMX/FmZ1p/cFteJ3Sqz6PT5gQVtLDb/+b5HobgtIkG+qUgNDROIJ6lD7WsDZq+6V bK1yjqKLU1smlbaMg+PRj1VPzjnHOQOnbBjh4HRvT5MVWPEw28Vc0hXViOhAzReGTf 819MtnPTjKy/NNohpYbf4XM4+lzMiDkXBtovI8pzUXxQHkdjcRe7b5oQWe7mewAchj BOk9BtPNC/V+g== From: Helge Deller To: Stefan Hajnoczi , qemu-devel@nongnu.org Cc: Yoshinori Sato , Pierrick Bouvier , Laurent Vivier , Helge Deller , Max Filippov , Matt Turner , Richard Henderson Subject: [PULL v3 3/8] linux-user/alpha: add coredump support Date: Wed, 10 Jun 2026 18:45:44 +0200 Message-ID: <20260610164549.5699-4-deller@kernel.org> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260610164549.5699-1-deller@kernel.org> References: <20260610164549.5699-1-deller@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=172.234.252.31; envelope-from=deller@kernel.org; helo=sea.source.kernel.org X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @kernel.org) X-ZM-MESSAGEID: 1781110022697158500 Content-Type: text/plain; charset="utf-8" From: Matt Turner Define HAVE_ELF_CORE_DUMP and target_elf_gregset_t in target_elf.h, mirroring the kernel's elf_gregset_t (ELF_NGREG =3D 66): r0-r31 [0..31], f0-f31 [32..63], pc [64], unique [65]. Implement elf_core_copy_regs() in elfload.c to populate the gregset from CPUAlphaState. Without this, bprm->core_dump is NULL for Alpha targets. When a guest signal goes unhandled, dump_core_and_abort() skips the core write and falls through to die_with_signal(), which re-raises the signal to the host. The host kernel then writes an x86-64 core file for the qemu-alpha process instead of an Alpha guest core. v2: Store thread unique field, same as in Linux kernel. Added by Helge & suggested by Richard. Signed-off-by: Matt Turner Signed-off-by: Helge Deller Reviewed-by: Richard Henderson --- linux-user/alpha/elfload.c | 12 ++++++++++++ linux-user/alpha/target_elf.h | 13 +++++++++++++ 2 files changed, 25 insertions(+) diff --git a/linux-user/alpha/elfload.c b/linux-user/alpha/elfload.c index 1e44475c47..1969f620a5 100644 --- a/linux-user/alpha/elfload.c +++ b/linux-user/alpha/elfload.c @@ -3,8 +3,20 @@ #include "qemu/osdep.h" #include "qemu.h" #include "loader.h" +#include "target_elf.h" =20 =20 +void elf_core_copy_regs(target_elf_gregset_t *r, const CPUAlphaState *env) +{ + int i; + + for (i =3D 0; i < 31; i++) { + r->regs[i] =3D tswap64(env->ir[i]); + } + r->pc =3D tswap64(env->pc); + r->unique =3D tswap64(env->unique); +} + const char *get_elf_cpu_model(uint32_t eflags) { return "ev67"; diff --git a/linux-user/alpha/target_elf.h b/linux-user/alpha/target_elf.h index 864dc6e2e6..4987ae3944 100644 --- a/linux-user/alpha/target_elf.h +++ b/linux-user/alpha/target_elf.h @@ -11,4 +11,17 @@ #define ELF_CLASS ELFCLASS64 #define ELF_MACHINE EM_ALPHA =20 +#define HAVE_ELF_CORE_DUMP 1 + +/* + * Matches the kernel's elf_gregset_t (ELF_NGREG =3D 33): + * r0-r30 at indices 0-30, pc at 31, ps at 32. + * r31 (hardwired zero) is not stored; pc occupies index 31. + */ +typedef struct target_elf_gregset_t { + abi_ulong regs[31]; /* integer registers r0-r30 [0..30] */ + abi_ulong pc; /* program counter [31] */ + abi_ulong unique; /* thread's UNIQUE field [32] */ +} target_elf_gregset_t; + #endif --=20 2.54.0 From nobody Sat Jun 27 08:23:16 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1781109987; cv=none; d=zohomail.com; s=zohoarc; b=VyKIqsiLVmk1ezt9/qElp/tlZsZDIr68qrEiomEy1grxMwr6lTsOL+eOqVNlB0rKQwrDWV95wpWzfZRdkiEf8Q4P1bibZ7bivmkiliJiGEtm10cvcE5xPdKsXswbbTvDduJAw6CGmaDO85xTy0SKbu18HFvJ2OmVfje56pVhTjM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781109987; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=UPeXJIlKzbTxaer6fjTxCLj0ISR2mmzL0SNT7pcKTJM=; b=bbED7maw2wFDA1EmX4r47VH64snwQKiGudrS7lUrNtT7gG0zSL9bYTc6e48htzfRgFsxlsLLmQucssFPZ6yh1eC3DcyjMTiacPZSeiXC4UvWb+FBXTsU3qIeoabAblcEigEi7B2CzXZ5nskZDTb8gSZNghEper01UtPke2NECrI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781109987586854.5840215180393; Wed, 10 Jun 2026 09:46:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wXM4B-0003Ko-6U; Wed, 10 Jun 2026 12:46:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wXM49-0003Js-NR for qemu-devel@nongnu.org; Wed, 10 Jun 2026 12:46:09 -0400 Received: from sea.source.kernel.org ([172.234.252.31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wXM45-0000lB-Gb for qemu-devel@nongnu.org; Wed, 10 Jun 2026 12:46:08 -0400 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id A714C40674; Wed, 10 Jun 2026 16:46:04 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 77F101F00893; Wed, 10 Jun 2026 16:46:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1781109964; bh=UPeXJIlKzbTxaer6fjTxCLj0ISR2mmzL0SNT7pcKTJM=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=XVQsAcV6T/qLFRv8DYDFiJiLOu2HGfCYoMIv7peq2WE2DdIL7vLRWYQl3VJ+bokqs 9tvFnTDGnFuR7KBZxPFFQDOyxpkFpkaQpnu/b9Thl+4OEW8w5QKvC/4gvAQ+KY9ECl YMPNWAVbXiUAAp7+JdcNmozUpkN/d/bImUdZ0MFK/4LAVWiG9cWrKJdJelUTzb3Ywv IAF6GcK3Jkm1bcW6/iXeSn5ayJLGMKon9cud+KzrtqQNm6MKpBGibw60Ea7Pry6d0I jHTAGCnU3HxnAjQeDaABxcf96606QBugnXlA7fM7inWuFBzq0dx+0ylG+aPYGCkjZc cLkxNx+Bv/n1A== From: Helge Deller To: Stefan Hajnoczi , qemu-devel@nongnu.org Cc: Yoshinori Sato , Pierrick Bouvier , Laurent Vivier , Helge Deller , Max Filippov , Matt Turner , Mark Cave-Ayland Subject: [PULL v3 4/8] linux-user/sparc: add coredump support Date: Wed, 10 Jun 2026 18:45:45 +0200 Message-ID: <20260610164549.5699-5-deller@kernel.org> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260610164549.5699-1-deller@kernel.org> References: <20260610164549.5699-1-deller@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=172.234.252.31; envelope-from=deller@kernel.org; helo=sea.source.kernel.org X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @kernel.org) X-ZM-MESSAGEID: 1781109988850158500 Content-Type: text/plain; charset="utf-8" From: Matt Turner Define HAVE_ELF_CORE_DUMP and target_elf_gregset_t in target_elf.h sized to match the kernel's elf_gregset_t: sparc32/sparc32plus (ELF_NGREG =3D 38): [0] PSR [1] PC [2] NPC [3] Y [4..11] G0-G7 [12..19] O0-O7 [20..27] L0-L7 [28..35] I0-I7 [36..37] reserved (stack_check) sparc64 (ELF_NGREG =3D 36): [0..7] G0-G7 [8..15] O0-O7 [16..23] L0-L7 [24..31] I0-I7 [32] TSTATE [33] TPC [34] TNPC [35] Y Also define ELF_MACHINE as EM_SPARC32PLUS for TARGET_ABI32 builds, matching the kernel and ensuring the correct machine type appears in the core file. Implement elf_core_copy_regs() in elfload.c to populate the gregset from CPUSPARCState, including L0-L7 and I0-I7 from env->regwptr. A memset() at entry zeros the trailing reserved slots. Without this, bprm->core_dump is NULL for SPARC targets. When a guest signal goes unhandled, dump_core_and_abort() skips the core write and falls through to die_with_signal(), which re-raises the signal to the host. The host kernel then writes an x86-64 core file for the qemu-sparc process instead of a SPARC guest core. Populating the full register layout is required for tools like libunwind-coredump, which reads pr_reg[33] for the trap PC and pr_reg[16..31] for the windowed registers. Signed-off-by: Matt Turner Cc: Mark Cave-Ayland Signed-off-by: Helge Deller --- linux-user/sparc/elfload.c | 27 +++++++++++++++++++++++++++ linux-user/sparc/target_elf.h | 11 +++++++++++ 2 files changed, 38 insertions(+) diff --git a/linux-user/sparc/elfload.c b/linux-user/sparc/elfload.c index 32ca1b05b1..e6387ec891 100644 --- a/linux-user/sparc/elfload.c +++ b/linux-user/sparc/elfload.c @@ -4,8 +4,35 @@ #include "qemu.h" #include "loader.h" #include "elf.h" +#include "target_elf.h" =20 =20 +void elf_core_copy_regs(target_elf_gregset_t *r, const CPUArchState *env) +{ + CPUSPARCState *e =3D (CPUSPARCState *)env; + int i; + +#if defined(TARGET_SPARC64) && !defined(TARGET_ABI32) + for (i =3D 0; i < 8; i++) { + r->regs[i] =3D tswap64(env->gregs[i]); + r->regs[8 + i] =3D tswap64(env->regwptr[WREG_O0 + i]); + } + r->regs[16] =3D tswap64(sparc64_tstate(e)); + r->regs[17] =3D tswap64(env->pc); + r->regs[18] =3D tswap64(env->npc); + r->regs[19] =3D tswap64(env->y); +#else + r->regs[0] =3D tswap32(cpu_get_psr(e)); + r->regs[1] =3D tswap32(env->pc); + r->regs[2] =3D tswap32(env->npc); + r->regs[3] =3D tswap32(env->y); + for (i =3D 0; i < 8; i++) { + r->regs[4 + i] =3D tswap32(env->gregs[i]); + r->regs[12 + i] =3D tswap32(env->regwptr[WREG_O0 + i]); + } +#endif +} + const char *get_elf_cpu_model(uint32_t eflags) { #ifdef TARGET_SPARC64 diff --git a/linux-user/sparc/target_elf.h b/linux-user/sparc/target_elf.h index 7827767bcb..edb0b3103c 100644 --- a/linux-user/sparc/target_elf.h +++ b/linux-user/sparc/target_elf.h @@ -13,6 +13,7 @@ # define ELF_MACHINE EM_SPARC #elif defined(TARGET_ABI32) # define ELF_CLASS ELFCLASS32 +# define ELF_MACHINE EM_SPARC32PLUS # define elf_check_machine(x) ((x) =3D=3D EM_SPARC32PLUS || (x) =3D=3D E= M_SPARC) #else # define ELF_CLASS ELFCLASS64 @@ -20,5 +21,15 @@ #endif =20 #define HAVE_ELF_HWCAP 1 +#define HAVE_ELF_CORE_DUMP 1 + +/* + * Matches the kernel's elf_gregset_t (ELF_NGREG =3D 20). + * sparc32/sparc32plus: psr, pc, npc, y, u_regs[16] (g0-g7, o0-o7) + * sparc64: u_regs[16] (g0-g7, o0-o7), tstate, pc, npc, y + */ +typedef struct target_elf_gregset_t { + abi_ulong regs[20]; +} target_elf_gregset_t; =20 #endif --=20 2.54.0 From nobody Sat Jun 27 08:23:16 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1781110050; cv=none; d=zohomail.com; s=zohoarc; b=IdXlhQ7c28Jr4iXr8Qb2Oks15qaynjc7654YImvulrtG6m7Ry5Vh9G+6hRnCwKQ6c3Pw5h+wSem1hx7HEjQtDTSCR2tSY51I5gXlw4Lb9H/NycRN0kQ3Ve4HB7mC27Yl6qmtz+hzNoj9PeMaqQDF16j2s3ht0OUhcEsC5RkyyuM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781110050; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=J1AWjYZU/hD53VPk5IiZ2Jz6nUV+3nPhEWHBfOxyoTE=; b=aJAUty6KCxkpKePgg9MyF9LM5lhMrq/Ph+wR4/GAhnGMe1Bp3uPdfIa/OQyO+HdPDfuQXMyhe2hMZ3San5YFL0mpef6jBp1wXV9lS29eITeXgJygCqIbZ6UgJQfOVaI2J3K5PwH/cyF2AUNWuV9oWe1PHX2f3duUOTF0qiwyNXk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781110050274764.4530577313342; Wed, 10 Jun 2026 09:47:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wXM4C-0003L2-Ky; Wed, 10 Jun 2026 12:46:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wXM4A-0003KQ-U6 for qemu-devel@nongnu.org; Wed, 10 Jun 2026 12:46:10 -0400 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wXM49-0000mF-DY for qemu-devel@nongnu.org; Wed, 10 Jun 2026 12:46:10 -0400 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id D5555601DC; Wed, 10 Jun 2026 16:46:07 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0DCE51F00893; Wed, 10 Jun 2026 16:46:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1781109967; bh=J1AWjYZU/hD53VPk5IiZ2Jz6nUV+3nPhEWHBfOxyoTE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=AEI29t0OJatCDPFeE3GcPHEPhaybpikQ0xApcmL4hSIsg6K9VazZ37W4p9v7Ox+Tb f5p4kvRHGb1bOjIrJ6oyF3RX+eDc0uQJK9In3fVcjmgDyfLdUwQQ3pjF5OHTMXaJNz BpI6vuYlvqK9AintsSpKT74Zywum+GDAN+yrtwvGqtGqfJmo7wmMrSdsZm1U7LbQNN JP0vtoDkX4xCWZ8Dycbf3x0jT+aHt3m9IHw02lEZn0JSUTotSwnqxJ/g5b7vKFupOV rJxdDMRY02xMP8Yq15vi10J8sjBagLejmZU7P5tTFy3GyyvAhhD2RpmCSUf8EYz40t Jz5jB2xIGIYJw== From: Helge Deller To: Stefan Hajnoczi , qemu-devel@nongnu.org Cc: Yoshinori Sato , Pierrick Bouvier , Laurent Vivier , Helge Deller , Max Filippov , Matt Turner , Mark Cave-Ayland Subject: [PULL v3 5/8] linux-user/sparc: restore L/I registers from RSA in sparc64_set_context Date: Wed, 10 Jun 2026 18:45:46 +0200 Message-ID: <20260610164549.5699-6-deller@kernel.org> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260610164549.5699-1-deller@kernel.org> References: <20260610164549.5699-1-deller@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2600:3c04:e001:324:0:1991:8:25; envelope-from=deller@kernel.org; helo=tor.source.kernel.org X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @kernel.org) X-ZM-MESSAGEID: 1781110050935158500 Content-Type: text/plain; charset="utf-8" From: Matt Turner The kernel's do_rt_sigreturn loads L and I registers from the register save area (RSA) at the restored O6+STACK_BIAS. QEMU lacks the kernel's window-fill path, so restore L0-L7 and I0-I5 explicitly from the RSA. I6 and I7 are already restored from mc_fp/mc_i7. Signed-off-by: Matt Turner Cc: Mark Cave-Ayland Signed-off-by: Helge Deller --- linux-user/sparc/signal.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/linux-user/sparc/signal.c b/linux-user/sparc/signal.c index d339f89928..fda5508c48 100644 --- a/linux-user/sparc/signal.c +++ b/linux-user/sparc/signal.c @@ -656,6 +656,24 @@ void sparc64_set_context(CPUSPARCState *env) __get_user(env->regwptr[WREG_FP], &(ucp->tuc_mcontext.mc_fp)); __get_user(env->regwptr[WREG_I7], &(ucp->tuc_mcontext.mc_i7)); =20 + /* + * The kernel's do_rt_sigreturn loads L and I registers from the + * register save area (RSA) at the new O6+STACK_BIAS. Unlike the + * kernel, QEMU has no kernel-mode path that triggers a window fill, + * so we must do it explicitly here. I6 and I7 are already restored + * from mc_fp and mc_i7 above; restore L0-L7 and I0-I5 from the RSA. + */ + { + abi_ulong sp_ptr =3D env->regwptr[WREG_O6]; + /* LP64 O6 is biased (8-byte-aligned - 2047); low bit set. ILP32 O= 6 is 4-byte-aligned. */ + if (sp_ptr & 3) + sp_ptr +=3D TARGET_STACK_BIAS; + for (i =3D 0; i < 8; i++) + get_user_ual(env->regwptr[WREG_L0 + i], sp_ptr + i * 8); + for (i =3D 0; i < 6; i++) /* I0-I5; I6=3DFP and I7 already restor= ed */ + get_user_ual(env->regwptr[WREG_I0 + i], sp_ptr + 64 + i * 8); + } + fpup =3D &ucp->tuc_mcontext.mc_fpregs; =20 __get_user(fenab, &(fpup->mcfpu_enab)); --=20 2.54.0 From nobody Sat Jun 27 08:23:16 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1781109990; cv=none; d=zohomail.com; s=zohoarc; b=V+cfCotD0njP3FbUCZ1pNqdSw/CHJfmXEvKwR0lCVZ/miff+5EfvsesliCQK3RyJaTI4MAQgAmUqTEOlDy1XQZvddlFi1b49vP4ZZz9KPZTekOVTiC7/PcK3Z+JrOT03AiVSxENudkt56VHckAP9v3/P7+VR4uf0MzeDQ2ofdpo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781109990; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Z1dfaMdDG1BHIABJPuyTvw9aGXsVucAwD1oVosQ69OE=; b=KVs14Uwp8chZ9pENEne9vSoYHplgslc1I9X33or9pAFwAF490HQsaqWjl0sPt+whDEMZQGDwg8X78vvtnLzlqMYz/QnqBH/ul8S3Z8zmJoSlJ/N4eHkUvM2oobllmwYESlDHfc1i2WxKxlbIUSVcSO0fqXj1N2v9hvLmGV21InA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781109990032916.8387950098883; Wed, 10 Jun 2026 09:46:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wXM4F-0003Ln-Vb; Wed, 10 Jun 2026 12:46:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wXM4D-0003LM-6w for qemu-devel@nongnu.org; Wed, 10 Jun 2026 12:46:13 -0400 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wXM4B-0000nb-P7 for qemu-devel@nongnu.org; Wed, 10 Jun 2026 12:46:12 -0400 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id D5D36601DC; Wed, 10 Jun 2026 16:46:10 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 700721F00893; Wed, 10 Jun 2026 16:46:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1781109970; bh=Z1dfaMdDG1BHIABJPuyTvw9aGXsVucAwD1oVosQ69OE=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=GQk9j8nPbFH2CxyiRN3bCjbJv28QYW6vV2+b01hzpn36mmtkjv3I2pcTyfKS1PPI/ Q1+mBlfzz40orrCs6MBFcCiFqglUUqyTq2TcGPKA9xX8imruA7HwOA7JCe+qu7BYnc 7Hz7tZsjmrssvHLviarb6xrVvD1ESSUbRRcPeI0ezFxjr8TWLX3H7Pqe8pehvLUkJ4 E88AcGNSUv03jioLJondk0kix3SzvqghB3imnVhw0N57qCCNfvn4+uXajjYHuZ0n+F yXInF9h3IzH2bpRDvyTBPNUoji030dLIZMjCf2ddZ2D5VyNo3Fky5mdrFyT3oaPM7+ 7+EDFzTSLZf6g== From: Helge Deller To: Stefan Hajnoczi , qemu-devel@nongnu.org Cc: Yoshinori Sato , Pierrick Bouvier , Laurent Vivier , Helge Deller , Max Filippov , Matt Turner , Mark Cave-Ayland Subject: [PULL v3 6/8] linux-user/sparc: call block_signals() before set_sigmask() in setcontext Date: Wed, 10 Jun 2026 18:45:47 +0200 Message-ID: <20260610164549.5699-7-deller@kernel.org> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260610164549.5699-1-deller@kernel.org> References: <20260610164549.5699-1-deller@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2600:3c04:e001:324:0:1991:8:25; envelope-from=deller@kernel.org; helo=tor.source.kernel.org X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @kernel.org) X-ZM-MESSAGEID: 1781109990629158500 Content-Type: text/plain; charset="utf-8" From: Matt Turner sparc64_set_context() emulates the kernel's `ta 0x6f` trap by calling set_sigmask() to install the mask supplied via the user's ucontext_t. The contract of set_sigmask() (see its comment in linux-user/signal.c) is that the caller must have first called block_signals(), which sets TaskState::signal_pending. Without block_signals(), if a guest signal is pending-and-blocked at the time setcontext is invoked and the new mask unblocks it, signal_pending stays 0 and the post-trap process_pending_signals() call in linux-user/sparc/cpu_loop.c never enters its while loop, so the now-deliverable signal is left undelivered indefinitely. This affects programs that use getcontext/setcontext to swap signal masks, including libunwind's unw_resume() out of a signal handler: without this fix, the test program below loops forever printing "calling setcontext" instead of delivering the pending SIGUSR2. #define _GNU_SOURCE #include #include #include #include static int got; static void h(int s) { got =3D 1; } int main(void) { signal(SIGUSR2, h); sigset_t m; sigemptyset(&m); sigaddset(&m, SIGUSR2); sigprocmask(SIG_BLOCK, &m, NULL); kill(getpid(), SIGUSR2); ucontext_t uc; getcontext(&uc); if (got) return 0; uc.uc_sigmask.__val[0] =3D 0; setcontext(&uc); return 1; } The 32-bit sparc do_sigreturn / do_rt_sigreturn paths already get block_signals() from the rt_sigreturn syscall wrapper in linux-user/syscall.c, so only sparc64_set_context (invoked directly from cpu_loop) needs the addition. Signed-off-by: Matt Turner Cc: Mark Cave-Ayland Signed-off-by: Helge Deller --- linux-user/sparc/signal.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/linux-user/sparc/signal.c b/linux-user/sparc/signal.c index fda5508c48..ba692c3123 100644 --- a/linux-user/sparc/signal.c +++ b/linux-user/sparc/signal.c @@ -619,6 +619,15 @@ void sparc64_set_context(CPUSPARCState *env) } } target_to_host_sigset_internal(&set, &target_set); + /* + * set_sigmask() requires the caller to have first called + * block_signals() so that process_pending_signals() is guaranteed + * to run after the mask change. Without this, a guest signal that + * is pending-and-blocked at setcontext time is left undelivered + * even after its mask bit is cleared, because signal_pending stays + * 0 and the post-trap process_pending_signals() loop never enters. + */ + block_signals(); set_sigmask(&set); } env->pc =3D pc; --=20 2.54.0 From nobody Sat Jun 27 08:23:16 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1781109998; cv=none; d=zohomail.com; s=zohoarc; b=bKtDHOFPcPbceiu9q0PcA33PqO7V+aebPc0veT/Ik6Cs7G6s+3KBx0csLERpnV+sUO8xLm2/3tIYIaH0v78Edn+ZbDZ969ecNYAYt9udbCiVWJwf6qIx2pHGqj3Fl8G/efFe6UGymkzMjtB0+xYMsBfB6at54rJMPUMsmTFaGKA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781109998; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=gEmpbKVD9hDcSZqLWrik9HtYpOvGlKu3Ri0bvNo/FQk=; b=SnYT12O/a5mfjAYoLavaN7BiRN4VOOTkmJ3ewHY6FCIKCELQ2/Uv1dnoad+i3oUKEer0PyArqxLJqhxqE+KgQF9aKDFh1NXJjtnyCjd4g05Y7xFL3bSbdZR6ENExHWnS9xYdLJpjtG+7sM65yYxY1r49scqo8iSNNu8KWiu3Rzk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781109998584929.2640760103519; Wed, 10 Jun 2026 09:46:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wXM4H-0003Pr-VB; Wed, 10 Jun 2026 12:46:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wXM4G-0003Lp-7c for qemu-devel@nongnu.org; Wed, 10 Jun 2026 12:46:16 -0400 Received: from tor.source.kernel.org ([2600:3c04:e001:324:0:1991:8:25]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wXM4E-0000o1-Dp for qemu-devel@nongnu.org; Wed, 10 Jun 2026 12:46:16 -0400 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 71DC9601DC; Wed, 10 Jun 2026 16:46:13 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0DD261F00893; Wed, 10 Jun 2026 16:46:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1781109973; bh=gEmpbKVD9hDcSZqLWrik9HtYpOvGlKu3Ri0bvNo/FQk=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=evecwYYiChwBH7Rl+HMpm9ufG2QYpQ7GjQs8ks+q3qkTHme4SmUFaM6fFapiow75/ QGKfBZ3cLn8xub3xQCxNTCHN/KTuP+PeNmmxA0p35wDz6GENpiYtVUUVqJavxwhvyO 7Aj0rcNKkZUg2tnQCNYVd7JZjlS20vW0aogtRC0Hen4sUmTYjz1nXauraRRm8E3A0x BCtvlZ3wWJzpHcEaw/vxQXUoLAWdNZiQpTocgc1BSnrdqgMupGKKgV5mR5kod7Ll1G 2W1nHIpE8JfbcT1XyUkmCtvqWjowZvdQxdJJ6CNn6y9Y5tM7rKA2BUIAtEpadsASYN Lfyv9+nOCFcJg== From: Helge Deller To: Stefan Hajnoczi , qemu-devel@nongnu.org Cc: Yoshinori Sato , Pierrick Bouvier , Laurent Vivier , Helge Deller , Max Filippov , Matt Turner , Mark Cave-Ayland Subject: [PULL v3 7/8] linux-user/sparc: flush register windows before core dump Date: Wed, 10 Jun 2026 18:45:48 +0200 Message-ID: <20260610164549.5699-8-deller@kernel.org> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260610164549.5699-1-deller@kernel.org> References: <20260610164549.5699-1-deller@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2600:3c04:e001:324:0:1991:8:25; envelope-from=deller@kernel.org; helo=tor.source.kernel.org X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @kernel.org) X-ZM-MESSAGEID: 1781110000798158500 Content-Type: text/plain; charset="utf-8" From: Matt Turner Without this, only the crash frame's window is spilled to the stack; all deeper call frames remain in the register file and are absent from the core's memory segments. Stack unwinding fails past the first DWARF step because the callers' register save areas contain stale/garbage data. The real kernel calls flush_all_user_windows() at the top of do_coredump(). Mirror that via a weak target_flush_windows() hook called from dump_core_and_abort(), with the SPARC override calling the existing flush_windows() in cpu_loop.c. Signed-off-by: Matt Turner Cc: Mark Cave-Ayland Signed-off-by: Helge Deller --- linux-user/elfload.c | 9 ++++++++ linux-user/sparc/cpu_loop.c | 3 ++- linux-user/sparc/cpu_loop.h | 7 +++++++ linux-user/sparc/elfload.c | 39 +++++++++++++++++++++++++++++------ linux-user/sparc/target_elf.h | 17 +++++++++++---- 5 files changed, 64 insertions(+), 11 deletions(-) create mode 100644 linux-user/sparc/cpu_loop.h diff --git a/linux-user/elfload.c b/linux-user/elfload.c index f7625c0952..b05b8b0c6b 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -2445,6 +2445,9 @@ static int wmr_write_region(void *opaque, vaddr start, * handler (provided that target process haven't registered * handler for that) that does the dump when signal is received. */ +#ifdef TARGET_SPARC +#include "sparc/cpu_loop.h" +#endif static int elf_core_dump(int signr, const CPUArchState *env) { const CPUState *cpu =3D env_cpu_const(env); @@ -2468,6 +2471,12 @@ static int elf_core_dump(int signr, const CPUArchSta= te *env) cpu_list_lock(); mmap_lock(); =20 +#ifdef TARGET_SPARC + CPU_FOREACH(cpu_iter) { + flush_windows(cpu_env(cpu_iter)); + } +#endif + /* By unprotecting, we merge vmas that might be split. */ walk_memory_regions(NULL, wmr_page_unprotect_regions); =20 diff --git a/linux-user/sparc/cpu_loop.c b/linux-user/sparc/cpu_loop.c index ab633eeae3..0aacda9448 100644 --- a/linux-user/sparc/cpu_loop.c +++ b/linux-user/sparc/cpu_loop.c @@ -22,6 +22,7 @@ #include "user-internals.h" #include "user/cpu_loop.h" #include "signal-common.h" +#include "sparc/cpu_loop.h" =20 #define SPARC64_STACK_BIAS 2047 =20 @@ -119,7 +120,7 @@ static void restore_window(CPUSPARCState *env) #endif } =20 -static void flush_windows(CPUSPARCState *env) +void flush_windows(CPUSPARCState *env) { int offset, cwp1; =20 diff --git a/linux-user/sparc/cpu_loop.h b/linux-user/sparc/cpu_loop.h new file mode 100644 index 0000000000..fb6e82d372 --- /dev/null +++ b/linux-user/sparc/cpu_loop.h @@ -0,0 +1,7 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +#ifndef SPARC_CPU_LOOP_H +#define SPARC_CPU_LOOP_H + +void flush_windows(CPUSPARCState *env); + +#endif diff --git a/linux-user/sparc/elfload.c b/linux-user/sparc/elfload.c index e6387ec891..181f1e00b5 100644 --- a/linux-user/sparc/elfload.c +++ b/linux-user/sparc/elfload.c @@ -12,16 +12,41 @@ void elf_core_copy_regs(target_elf_gregset_t *r, const = CPUArchState *env) CPUSPARCState *e =3D (CPUSPARCState *)env; int i; =20 + memset(r, 0, sizeof(*r)); + #if defined(TARGET_SPARC64) && !defined(TARGET_ABI32) + /* Linux kernel layout for sparc64 (arch/sparc/include/asm/elf_64.h): + * [0..7] G0-G7 + * [8..15] O0-O7 + * [16..23] L0-L7 + * [24..31] I0-I7 + * [32] TSTATE + * [33] TPC + * [34] TNPC + * [35] Y + */ for (i =3D 0; i < 8; i++) { - r->regs[i] =3D tswap64(env->gregs[i]); - r->regs[8 + i] =3D tswap64(env->regwptr[WREG_O0 + i]); + r->regs[i] =3D tswap64(env->gregs[i]); + r->regs[8 + i] =3D tswap64(env->regwptr[WREG_O0 + i]); + r->regs[16 + i] =3D tswap64(env->regwptr[WREG_L0 + i]); + r->regs[24 + i] =3D tswap64(env->regwptr[WREG_I0 + i]); } - r->regs[16] =3D tswap64(sparc64_tstate(e)); - r->regs[17] =3D tswap64(env->pc); - r->regs[18] =3D tswap64(env->npc); - r->regs[19] =3D tswap64(env->y); + r->regs[32] =3D tswap64(sparc64_tstate(e)); + r->regs[33] =3D tswap64(env->pc); + r->regs[34] =3D tswap64(env->npc); + r->regs[35] =3D tswap64(env->y); #else + /* Linux kernel layout for sparc32 (arch/sparc/include/asm/elf_32.h): + * [0] PSR + * [1] PC + * [2] NPC + * [3] Y + * [4..11] G0-G7 + * [12..19] O0-O7 + * [20..27] L0-L7 + * [28..35] I0-I7 + * [36..37] reserved (stack_check) + */ r->regs[0] =3D tswap32(cpu_get_psr(e)); r->regs[1] =3D tswap32(env->pc); r->regs[2] =3D tswap32(env->npc); @@ -29,6 +54,8 @@ void elf_core_copy_regs(target_elf_gregset_t *r, const CP= UArchState *env) for (i =3D 0; i < 8; i++) { r->regs[4 + i] =3D tswap32(env->gregs[i]); r->regs[12 + i] =3D tswap32(env->regwptr[WREG_O0 + i]); + r->regs[20 + i] =3D tswap32(env->regwptr[WREG_L0 + i]); + r->regs[28 + i] =3D tswap32(env->regwptr[WREG_I0 + i]); } #endif } diff --git a/linux-user/sparc/target_elf.h b/linux-user/sparc/target_elf.h index edb0b3103c..365af864b0 100644 --- a/linux-user/sparc/target_elf.h +++ b/linux-user/sparc/target_elf.h @@ -24,12 +24,21 @@ #define HAVE_ELF_CORE_DUMP 1 =20 /* - * Matches the kernel's elf_gregset_t (ELF_NGREG =3D 20). - * sparc32/sparc32plus: psr, pc, npc, y, u_regs[16] (g0-g7, o0-o7) - * sparc64: u_regs[16] (g0-g7, o0-o7), tstate, pc, npc, y + * Matches the kernel's elf_gregset_t. + * sparc32/sparc32plus (ELF_NGREG =3D 38): + * psr, pc, npc, y, u_regs[16] (g0-g7, o0-o7), + * reg_window[16] (l0-l7, i0-i7), stack_check[2] + * sparc64 (ELF_NGREG =3D 36): + * u_regs[16] (g0-g7, o0-o7), reg_window[16] (l0-l7, i0-i7), + * tstate, tpc, tnpc, y */ +#if defined(TARGET_SPARC64) && !defined(TARGET_ABI32) +# define TARGET_ELF_NGREG 36 +#else +# define TARGET_ELF_NGREG 38 +#endif typedef struct target_elf_gregset_t { - abi_ulong regs[20]; + abi_ulong regs[TARGET_ELF_NGREG]; } target_elf_gregset_t; =20 #endif --=20 2.54.0 From nobody Sat Jun 27 08:23:16 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=kernel.org ARC-Seal: i=1; a=rsa-sha256; t=1781110063; cv=none; d=zohomail.com; s=zohoarc; b=Os1HJgGyMNYw+LZqt+5JBTQ3X16w2OUbOKEAiorX54uPmWjs7SYnWDGGgcaFTZu8GWX/M6/Bl8+EPOOASETcIxgkTunHGmPDuSQjcCsgGbvdrck9XMYmbcV9FZ6HOP7wjqZZcnVjM6R6dfkp48O8m2E7UaN7Z9JK4UPO8dg/Zqc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781110063; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=jX18zqXFA+LNSDjlxcNAVPph0zpvwfV3CNTKM9znobo=; b=kNUaZ/lFcDFer7gYS0bZx46CWm/BSnWI+d32X8U1a/hl/uaGEwy7O/XTEO2sEGfj9anXpV57Bsk4QZ3WX7A5aYkAtfbuoFAQkm3Szaq+nfbTNRnWjUXhxgmtpUI0vQyLk3y+1v2Awj7Skccu7xrt/70uyzfJXkjp0UCRLCwu3tg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1781110063191714.5117259832025; Wed, 10 Jun 2026 09:47:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wXM4O-0003WC-Ov; Wed, 10 Jun 2026 12:46:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wXM4L-0003Rc-G5 for qemu-devel@nongnu.org; Wed, 10 Jun 2026 12:46:22 -0400 Received: from sea.source.kernel.org ([2600:3c0a:e001:78e:0:1991:8:25]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wXM4H-0000oT-Q2 for qemu-devel@nongnu.org; Wed, 10 Jun 2026 12:46:19 -0400 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by sea.source.kernel.org (Postfix) with ESMTP id 731E8439C7; Wed, 10 Jun 2026 16:46:16 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9FE951F00893; Wed, 10 Jun 2026 16:46:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1781109976; bh=jX18zqXFA+LNSDjlxcNAVPph0zpvwfV3CNTKM9znobo=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=c9M+Ykr/WwX4IFRkyhaOEdOQ/xIiKAl4tdcpwnQ5MRgx8JyOOJwaxy6I/MMTSIZ4e vPJeKwrxct9RGOfBuxFzQsRT+qS5l5hfT6mcDns2VTzD4mEmC+RA9Sy/cef8NhSKHI jDZ8X/gGvV/gBM1dHxt8WSX4ZOyrumgyp37FjH8H3MMQkPuqx70MX6aoXzW5wzoKbX 8POKZloryQn3eIoL3BVSNF/KynPw5mfcLsUAjHySqnavgGOqME/3fINVbFWHgAjVpL PJey4mdPo5jMEIkU45QjJzQIA9mtv3WgBsaFtdX7OHPp4MUFQ164pWKzGBpbgAPCVf rq2/dcNQBy5UA== From: Helge Deller To: Stefan Hajnoczi , qemu-devel@nongnu.org Cc: Yoshinori Sato , Pierrick Bouvier , Laurent Vivier , Helge Deller , Max Filippov , Matt Turner , Richard Henderson Subject: [PULL v3 8/8] target/sh4: decode_gusa: recognize add#imm with prior mov Rm, Rn Date: Wed, 10 Jun 2026 18:45:49 +0200 Message-ID: <20260610164549.5699-9-deller@kernel.org> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260610164549.5699-1-deller@kernel.org> References: <20260610164549.5699-1-deller@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=2600:3c0a:e001:78e:0:1991:8:25; envelope-from=deller@kernel.org; helo=sea.source.kernel.org X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @kernel.org) X-ZM-MESSAGEID: 1781110065143158500 Content-Type: text/plain; charset="utf-8" From: Matt Turner The gUSA pattern matcher rejected `add #imm, Rn` whenever any prior `mov Rm, Rn` appeared (mv_src >=3D 0), forcing a fallback to cpu_exec_step_atomic for sequences like: mov.l @r2, r3 ; load mov r3, r7 ; save old value (mv_src =3D=3D ld_dst) add #1, r7 ; increment copy mov.l r7, @r2 ; store When mv_src =3D=3D ld_dst the move merely copies the loaded value to preserve it -- exactly the situation already accepted for the `add Rm, Rn` form. The immediate form can be handled identically with tcg_gen_atomic_fetch_add_i32 + tcg_gen_add_i32, so translate it inline instead of taking the slower single-step atomic fallback. Signed-off-by: Matt Turner Cc: Yoshinori Sato Cc: Richard Henderson Signed-off-by: Helge Deller --- target/sh4/translate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/sh4/translate.c b/target/sh4/translate.c index 5adf650744..d38a6bd352 100644 --- a/target/sh4/translate.c +++ b/target/sh4/translate.c @@ -1974,7 +1974,7 @@ static void decode_gusa(DisasContext *ctx, CPUSH4Stat= e *env) break; =20 case 0x7000 ... 0x700f: /* add #imm,Rn */ - if (op_dst !=3D B11_8 || mv_src >=3D 0) { + if (op_dst !=3D B11_8 || (mv_src >=3D 0 && mv_src !=3D ld_dst)) { goto fail; } op_opc =3D INDEX_op_add; --=20 2.54.0