From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097521; cv=none; d=zohomail.com; s=zohoarc; b=bjrkKh4mNG8jl2Sz6jOGEomcDxzckild/PJj8yvk2YNWjejIICkWmZC813rffElcGs+KCCiwecyP4eQnu87Mbak5H0NVrfHZ/kEl86OjJrBupE6hmP7fr58JBaBjz2HXJlSH9bu84M8OtSkM+y30LReOgEOOmFo3rFN1/ccwD6E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097521; h=Content-Type: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=YfOh8OoaQYgpTQSmCrfdR2/AwfLWimXK2o/Oo7feBGg=; b=OJlgnIS8Uc3s5G7gwuxDshMtrfe6hp+RdMEmARPRvy9vtkAC+Z0zLcaf62vyHYLdI22wxNafhPLtX70qTbeXDpHbo5FkZ5RNjPNh0mOQ1EZA1m9npp8kvgpiJ3LTDllo3Zto8LZvzXv7ltgLF+q22cydlmSepbLFDuhMyZIu36g= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097521503754.0902902670505; Tue, 18 Aug 2026 16:58:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTgR-0001oi-EY; Tue, 18 Aug 2026 19:57:31 -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 1wwTgP-0001oD-S3 for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:29 -0400 Received: from mail-oi1-x232.google.com ([2607:f8b0:4864:20::232]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTgM-0005C0-Qz for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:29 -0400 Received: by mail-oi1-x232.google.com with SMTP id 5614622812f47-4b28db06775so314718b6e.1 for ; Tue, 18 Aug 2026 16:57:26 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.57.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:57:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097446; x=1787702246; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=YfOh8OoaQYgpTQSmCrfdR2/AwfLWimXK2o/Oo7feBGg=; b=pk0YpdWUB4n5J826uPuThdxOaT/ccm1OSYSeQbRUJw1At98EOlSeaCQxemNL/LO2xG RWGfoFQOkvdVSRgZHm3hS1ZJ/xE+fkNq3fRzcvJy8lTpjSQT7OlFktqj15wYOOtHhjdj GcxRo/VsZ6KlrcjjNxDVKPnTlYb5ERiqr+cten4or4j5Ps1y5dnVyDZYrIbF1Osee5sI jDSBirROhHzPDB6tUzJt5A/7H5PL6hVCp6RzfHQXjA8knIAaewHjBqwW9RslH/STa488 gyU2m/ZggX3UyKXhUYyFMmBa+GJH9/udUrKWHwMJ53bmhk1ChPW9GwH1Ay0teXye5Y87 lu6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097446; x=1787702246; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=YfOh8OoaQYgpTQSmCrfdR2/AwfLWimXK2o/Oo7feBGg=; b=kUSohu+Th8PUG9BdW1C9yp5aAKJQRITdbF9nZ5gwKxlOE+P/TO7MvPTefnjJQzQxa4 YZxOANXAdoB3dwiHyscwY1II3bicYpyIsIr7OrqaEa+tguWs1UXDr/3Yh5nQQGj3x8TI E2oEm6YdBnMc9Kazl3EFjsVf/gpJ2OAo+6o8KE2HajT+bVF9owGhjDGXpga3JMEytb/H b6I9vAUOxrLpNiMLLwIJgJiSdN5pitcPXxv3CN9cv1BrNaYetcFjgEs/zvWgWKEVZELz lTzNEcjdHKnvRzKeEF5jUGDAqugL6GHJbyrVGo5mcm+VVcy6bnPhQnWpKHAbf3J0dKE9 pW0A== X-Gm-Message-State: AOJu0Yw6IsHuTLPReiLcsSrC8g87T23zNbV6edBGveLv9rR18ufKlSaI FgmfdEOqRYG9ExTj4FQeghQHXrlew9s0Gg/yHk2Wty3cHmo4TVIJfukZc2cHl5u5nPs= X-Gm-Gg: AR+sD10ZLnUbvxstafY9eC4lWlujOCPmI3peN+3xckTH1x4RkErXfXM+W7cLzpAyxXW J3xvYrkMg/HsRtI+NKlvhU3i54glwZXmpka3Nq6w1+x+zROzSFfLNw6hIRCGIegpuNzMsELXz+C oodcOUHQzJ9uxKxeS7Z7qf9949Krwyjpd/BgGEIfSM9MYxeT6/SQWaNATnEGVWGoa5fKtUzgn9l DaiGRCl6ToxrrF6NxHvQrisByNQ6LifCY6RlGd8Pl+2VYFV4g4BJ3u6hF4UkFe7SCE7k+jEwF9n azHR56WNluvGF0RbdF9c1Ou/6FIdxped1xK1srd+Zuy3U+AX7t64WiD4+20uEMbwB94z7MMc3nC 1ofTyiu7URrbyopuS9AkFuQNz15I/zZ7sqNy3s7EA4OS5XoVLSLHV3rdIpKUNc2RoKJtnzePkdG gC6wfnZFv9Bs6dFrGxm47MMn9HA1DjfpY1iPian/4bSlKO+no= X-Received: by 2002:a05:6808:238d:b0:4b2:8e24:799 with SMTP id 5614622812f47-4b2bcb4e333mr298202b6e.17.1787097445438; Tue, 18 Aug 2026 16:57:25 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:55:54 -0600 Subject: [PATCH v4 01/40] bsd-user: Rename cpu_env to env throughout bsd-user MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-1-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=23722; i=imp@bsdimp.com; h=from:subject:message-id; bh=E6Pqw9RKHOUbzH508FXwoeSGSiLNeRFD9I4NltDh4L4=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPEf84pusYvFP5bqwilbs05K9j1qYmSKO0KC4 vABus7q2/iJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxHxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQDZIw//TcnRfAP/8gQfVp9SKWPycVc/BrUUQsw mUDtz5M+TCjMWhssfVNWJp2khuisLqg8XP6NLd6QVPEAifetEPSpb212VoHNQJMJCfnpqdS2+L3 8s30sxUK3chSiD1ah2yvHiKpFLzgifGKesXiTW3W30mHFz4Kxb260lmxPi0FzIuKAn/FvOkCfye p0T0jnrROH3zm1hPLwk6BzJHuAxsvCIGNIso3YjQ8BNO1apQGqY7IWk2DlQalpupLReXtyZ8yj2 ffj1RY8k7mtRmfDLah9Ahp9RMcO5Cg9ueDcgfY+n/AOAfZOo6xwlpyDAwkLq4GIu9t9Hdvb0zDt RCi74i55Rx5EGCeClsh0s73lgLWow0/uvTzfVjVQnu98QSPTpr0kG0lA2Fum9wRZCFu0pCIuxNX 813rSr/WHw+kI26ak0OVejjtyYjDLoZRsNxvO1WPYfvQICmG0ITnWiCsHRqKmXlVj9ttvAn2wxE xoBbaAfVyWBc7Rx5YwQDDlFsflbniMJQ9MXmOq20LBXsJNIcCCfkUy/114KEm6+vFx8DMsIihc9 srjCPoagbBOEwfh8n63in/P61Am9UE91DfS4UJGykdwCraqWu0q09ZDj5r3F+lFNqXO/Js4/DXY /je9n4Bn3H56kkdGUHokUZ7tPYACCBt7NSBKLWKm0xzrga7lRQJM= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::232; envelope-from=imp@bsdimp.com; helo=mail-oi1-x232.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097523414158500 Replace 'void *cpu_env' parameters with 'CPUArchState *env' across all bsd-user source files. This improves type safety and aligns with the convention used in the rest of the codebase. Signed-off-by: Stacey Son Assisted-by: Claude Opus 4.6 (1M context) Reviewed-by: Pierrick Bouvier Reviewed-by: Richard Henderson Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/aarch64/target.h | 2 +- bsd-user/arm/target.h | 2 +- bsd-user/bsd-file.h | 28 +++++++++++++-------------- bsd-user/bsd-mem.h | 4 ++-- bsd-user/bsd-proc.h | 8 ++++---- bsd-user/freebsd/os-proc.c | 4 ++-- bsd-user/freebsd/os-proc.h | 26 ++++++++++++------------- bsd-user/freebsd/os-sys.c | 4 ++-- bsd-user/freebsd/os-syscall.c | 44 +++++++++++++++++++++------------------= ---- bsd-user/i386/target.h | 2 +- bsd-user/qemu.h | 6 +++--- bsd-user/riscv/target.h | 2 +- bsd-user/x86_64/target.h | 2 +- 13 files changed, 67 insertions(+), 67 deletions(-) diff --git a/bsd-user/aarch64/target.h b/bsd-user/aarch64/target.h index 702aeb7fc5..37b9817fe1 100644 --- a/bsd-user/aarch64/target.h +++ b/bsd-user/aarch64/target.h @@ -12,7 +12,7 @@ /* * aaarch64 ABI does not 'lump' the registers for 64-bit args. */ -static inline bool regpairs_aligned(void *cpu_env) +static inline bool regpairs_aligned(CPUArchState *env) { return false; } diff --git a/bsd-user/arm/target.h b/bsd-user/arm/target.h index 7c423ec575..cf131f29fb 100644 --- a/bsd-user/arm/target.h +++ b/bsd-user/arm/target.h @@ -12,7 +12,7 @@ /* * arm EABI 'lumps' the registers for 64-bit args. */ -static inline bool regpairs_aligned(void *cpu_env) +static inline bool regpairs_aligned(CPUArchState *env) { return true; } diff --git a/bsd-user/bsd-file.h b/bsd-user/bsd-file.h index dca1518cb1..dec59bd80b 100644 --- a/bsd-user/bsd-file.h +++ b/bsd-user/bsd-file.h @@ -72,7 +72,7 @@ static abi_long do_bsd_read(abi_long arg1, abi_long arg2,= abi_long arg3) } =20 /* pread(2) */ -static abi_long do_bsd_pread(void *cpu_env, abi_long arg1, +static abi_long do_bsd_pread(CPUArchState *env, abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg4, abi_long arg5, abi_long a= rg6) { abi_long ret; @@ -82,7 +82,7 @@ static abi_long do_bsd_pread(void *cpu_env, abi_long arg1, if (p =3D=3D NULL) { return -TARGET_EFAULT; } - if (regpairs_aligned(cpu_env) !=3D 0) { + if (regpairs_aligned(env) !=3D 0) { arg4 =3D arg5; arg5 =3D arg6; } @@ -109,14 +109,14 @@ static abi_long do_bsd_readv(abi_long arg1, abi_long = arg2, abi_long arg3) } =20 /* preadv(2) */ -static abi_long do_bsd_preadv(void *cpu_env, abi_long arg1, +static abi_long do_bsd_preadv(CPUArchState *env, abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg4, abi_long arg5, abi_long a= rg6) { abi_long ret; struct iovec *vec =3D lock_iovec(VERIFY_WRITE, arg2, arg3, 1); =20 if (vec !=3D NULL) { - if (regpairs_aligned(cpu_env) !=3D 0) { + if (regpairs_aligned(env) !=3D 0) { arg4 =3D arg5; arg5 =3D arg6; } @@ -151,7 +151,7 @@ static abi_long do_bsd_write(abi_long arg1, abi_long ar= g2, abi_long arg3) } =20 /* pwrite(2) */ -static abi_long do_bsd_pwrite(void *cpu_env, abi_long arg1, +static abi_long do_bsd_pwrite(CPUArchState *env, abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg4, abi_long arg5, abi_long a= rg6) { abi_long ret; @@ -161,7 +161,7 @@ static abi_long do_bsd_pwrite(void *cpu_env, abi_long a= rg1, if (p =3D=3D NULL) { return -TARGET_EFAULT; } - if (regpairs_aligned(cpu_env) !=3D 0) { + if (regpairs_aligned(env) !=3D 0) { arg4 =3D arg5; arg5 =3D arg6; } @@ -188,14 +188,14 @@ static abi_long do_bsd_writev(abi_long arg1, abi_long= arg2, abi_long arg3) } =20 /* pwritev(2) */ -static abi_long do_bsd_pwritev(void *cpu_env, abi_long arg1, +static abi_long do_bsd_pwritev(CPUArchState *env, abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg4, abi_long arg5, abi_long a= rg6) { abi_long ret; struct iovec *vec =3D lock_iovec(VERIFY_READ, arg2, arg3, 1); =20 if (vec !=3D NULL) { - if (regpairs_aligned(cpu_env) !=3D 0) { + if (regpairs_aligned(env) !=3D 0) { arg4 =3D arg5; arg5 =3D arg6; } @@ -484,14 +484,14 @@ static abi_long do_bsd_dup2(abi_long arg1, abi_long a= rg2) } =20 /* truncate(2) */ -static abi_long do_bsd_truncate(void *cpu_env, abi_long arg1, +static abi_long do_bsd_truncate(CPUArchState *env, abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg4) { abi_long ret; void *p; =20 LOCK_PATH(p, arg1); - if (regpairs_aligned(cpu_env) !=3D 0) { + if (regpairs_aligned(env) !=3D 0) { arg2 =3D arg3; arg3 =3D arg4; } @@ -502,10 +502,10 @@ static abi_long do_bsd_truncate(void *cpu_env, abi_lo= ng arg1, } =20 /* ftruncate(2) */ -static abi_long do_bsd_ftruncate(void *cpu_env, abi_long arg1, +static abi_long do_bsd_ftruncate(CPUArchState *env, abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg4) { - if (regpairs_aligned(cpu_env) !=3D 0) { + if (regpairs_aligned(env) !=3D 0) { arg2 =3D arg3; arg3 =3D arg4; } @@ -735,7 +735,7 @@ static abi_long do_bsd_freebsd11_mknodat(abi_long arg1,= abi_long arg2, } =20 /* post-ino64 mknodat(2) */ -static abi_long do_bsd_mknodat(void *cpu_env, abi_long arg1, +static abi_long do_bsd_mknodat(CPUArchState *env, abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg4, abi_long arg5, abi_long arg6) { @@ -744,7 +744,7 @@ static abi_long do_bsd_mknodat(void *cpu_env, abi_long = arg1, =20 LOCK_PATH(p, arg2); /* 32-bit arch's use two 32 registers for 64 bit return value */ - if (regpairs_aligned(cpu_env) !=3D 0) { + if (regpairs_aligned(env) !=3D 0) { ret =3D get_errno(mknodat(arg1, p, arg3, target_arg64(arg5, arg6))= ); } else { ret =3D get_errno(mknodat(arg1, p, arg3, target_arg64(arg4, arg5))= ); diff --git a/bsd-user/bsd-mem.h b/bsd-user/bsd-mem.h index 9d7b60d3c3..3086143d40 100644 --- a/bsd-user/bsd-mem.h +++ b/bsd-user/bsd-mem.h @@ -51,11 +51,11 @@ extern abi_ulong target_brk; extern abi_ulong initial_target_brk; =20 /* mmap(2) */ -static inline abi_long do_bsd_mmap(void *cpu_env, abi_long arg1, abi_long = arg2, +static inline abi_long do_bsd_mmap(CPUArchState *env, abi_long arg1, abi_l= ong arg2, abi_long arg3, abi_long arg4, abi_long arg5, abi_long arg6, abi_long a= rg7, abi_long arg8) { - if (regpairs_aligned(cpu_env) !=3D 0) { + if (regpairs_aligned(env) !=3D 0) { arg6 =3D arg7; arg7 =3D arg8; } diff --git a/bsd-user/bsd-proc.h b/bsd-user/bsd-proc.h index b1d4446ff1..7efc5b4c92 100644 --- a/bsd-user/bsd-proc.h +++ b/bsd-user/bsd-proc.h @@ -6,8 +6,8 @@ * SPDX-License-Identifier: GPL-2.0-or-later */ =20 -#ifndef BSD_PROC_H_ -#define BSD_PROC_H_ +#ifndef BSD_PROC_H +#define BSD_PROC_H =20 #include =20 @@ -19,7 +19,7 @@ extern int _getlogin(char*, int); int bsd_get_ncpu(void); =20 /* exit(2) */ -static inline abi_long do_bsd_exit(void *cpu_env, abi_long arg1) +static inline abi_long do_bsd_exit(CPUArchState *env, abi_long arg1) { gdb_exit(arg1); qemu_plugin_user_exit(); @@ -400,4 +400,4 @@ static inline abi_long do_bsd_setpriority(abi_long whic= h, abi_long who, return get_errno(setpriority(which, who, prio)); } =20 -#endif /* !BSD_PROC_H_ */ +#endif /* !BSD_PROC_H */ diff --git a/bsd-user/freebsd/os-proc.c b/bsd-user/freebsd/os-proc.c index 0309036178..0a0cea5bb2 100644 --- a/bsd-user/freebsd/os-proc.c +++ b/bsd-user/freebsd/os-proc.c @@ -238,7 +238,7 @@ h2t_procctl_reaper_pidinfo(struct procctl_reaper_pidinf= o *host_pi, } =20 abi_long -do_freebsd_procctl(void *cpu_env, int idtype, abi_ulong arg2, abi_ulong ar= g3, +do_freebsd_procctl(CPUArchState *env, int idtype, abi_ulong arg2, abi_ulon= g arg3, abi_ulong arg4, abi_ulong arg5, abi_ulong arg6) { abi_long error =3D 0, target_rp_pids; @@ -257,7 +257,7 @@ do_freebsd_procctl(void *cpu_env, int idtype, abi_ulong= arg2, abi_ulong arg3, =20 #if TARGET_ABI_BITS =3D=3D 32 /* See if we need to align the register pairs. */ - if (regpairs_aligned(cpu_env)) { + if (regpairs_aligned(env)) { id =3D (id_t)target_arg64(arg3, arg4); target_cmd =3D (int)arg5; target_arg =3D arg6; diff --git a/bsd-user/freebsd/os-proc.h b/bsd-user/freebsd/os-proc.h index 1cf3c43de3..7a035f5481 100644 --- a/bsd-user/freebsd/os-proc.h +++ b/bsd-user/freebsd/os-proc.h @@ -68,7 +68,7 @@ static inline abi_long do_freebsd_wait4(abi_long arg1, ab= i_ulong target_status, } =20 /* wait6(2) */ -static inline abi_long do_freebsd_wait6(void *cpu_env, abi_long idtype, +static inline abi_long do_freebsd_wait6(CPUArchState *env, abi_long idtype, abi_long id1, abi_long id2, abi_ulong target_status, abi_long options, abi_ulong target_wrusage, abi_ulong target_infop, abi_ulong pad1) @@ -79,7 +79,7 @@ static inline abi_long do_freebsd_wait6(void *cpu_env, ab= i_long idtype, siginfo_t info; void *p; =20 - if (regpairs_aligned(cpu_env) !=3D 0) { + if (regpairs_aligned(env) !=3D 0) { /* printf("shifting args\n"); */ /* 64-bit id is aligned, so shift all the arguments over by one */ id1 =3D id2; @@ -173,7 +173,7 @@ static inline abi_long do_freebsd___setugid(abi_long ar= g1) } =20 /* fork(2) */ -static inline abi_long do_freebsd_fork(void *cpu_env) +static inline abi_long do_freebsd_fork(CPUArchState *env) { abi_long ret; abi_ulong child_flag; @@ -183,7 +183,7 @@ static inline abi_long do_freebsd_fork(void *cpu_env) if (ret =3D=3D 0) { /* child */ child_flag =3D 1; - target_cpu_clone_regs(cpu_env, 0); + target_cpu_clone_regs(env, 0); } else { /* parent */ child_flag =3D 0; @@ -193,7 +193,7 @@ static inline abi_long do_freebsd_fork(void *cpu_env) * The fork system call sets a child flag in the second return * value: 0 for parent process, 1 for child process. */ - set_second_rval(cpu_env, child_flag); + set_second_rval(env, child_flag); =20 fork_end(ret); =20 @@ -201,13 +201,13 @@ static inline abi_long do_freebsd_fork(void *cpu_env) } =20 /* vfork(2) */ -static inline abi_long do_freebsd_vfork(void *cpu_env) +static inline abi_long do_freebsd_vfork(CPUArchState *env) { - return do_freebsd_fork(cpu_env); + return do_freebsd_fork(env); } =20 /* rfork(2) */ -static inline abi_long do_freebsd_rfork(void *cpu_env, abi_long flags) +static inline abi_long do_freebsd_rfork(CPUArchState *env, abi_long flags) { abi_long ret; abi_ulong child_flag; @@ -228,7 +228,7 @@ static inline abi_long do_freebsd_rfork(void *cpu_env, = abi_long flags) if (ret =3D=3D 0) { /* child */ child_flag =3D 1; - target_cpu_clone_regs(cpu_env, 0); + target_cpu_clone_regs(env, 0); } else { /* parent */ child_flag =3D 0; @@ -238,7 +238,7 @@ static inline abi_long do_freebsd_rfork(void *cpu_env, = abi_long flags) * The fork system call sets a child flag in the second return * value: 0 for parent process, 1 for child process. */ - set_second_rval(cpu_env, child_flag); + set_second_rval(env, child_flag); fork_end(ret); =20 return ret; @@ -246,7 +246,7 @@ static inline abi_long do_freebsd_rfork(void *cpu_env, = abi_long flags) } =20 /* pdfork(2) */ -static inline abi_long do_freebsd_pdfork(void *cpu_env, abi_ulong target_f= dp, +static inline abi_long do_freebsd_pdfork(CPUArchState *env, abi_ulong targ= et_fdp, abi_long flags) { abi_long ret; @@ -258,7 +258,7 @@ static inline abi_long do_freebsd_pdfork(void *cpu_env,= abi_ulong target_fdp, if (ret =3D=3D 0) { /* child */ child_flag =3D 1; - target_cpu_clone_regs(cpu_env, 0); + target_cpu_clone_regs(env, 0); } else { /* parent */ child_flag =3D 0; @@ -271,7 +271,7 @@ static inline abi_long do_freebsd_pdfork(void *cpu_env,= abi_ulong target_fdp, * The fork system call sets a child flag in the second return * value: 0 for parent process, 1 for child process. */ - set_second_rval(cpu_env, child_flag); + set_second_rval(env, child_flag); fork_end(ret); =20 return ret; diff --git a/bsd-user/freebsd/os-sys.c b/bsd-user/freebsd/os-sys.c index df31706558..d6f7c92420 100644 --- a/bsd-user/freebsd/os-sys.c +++ b/bsd-user/freebsd/os-sys.c @@ -593,7 +593,7 @@ out: } =20 /* sysarch() is architecture dependent. */ -abi_long do_freebsd_sysarch(void *cpu_env, abi_long arg1, abi_long arg2) +abi_long do_freebsd_sysarch(CPUArchState *env, abi_long arg1, abi_long arg= 2) { - return do_freebsd_arch_sysarch(cpu_env, arg1, arg2); + return do_freebsd_arch_sysarch(env, arg1, arg2); } diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c index 90ef1bd916..d402c64726 100644 --- a/bsd-user/freebsd/os-syscall.c +++ b/bsd-user/freebsd/os-syscall.c @@ -215,7 +215,7 @@ void unlock_iovec(struct iovec *vec, abi_ulong target_a= ddr, /* * All errnos that freebsd_syscall() returns must be -TARGET_. */ -static abi_long freebsd_syscall(void *cpu_env, int num, abi_long arg1, +static abi_long freebsd_syscall(CPUArchState *env, int num, abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg= 4, abi_long arg5, abi_long arg6, abi_long arg= 7, abi_long arg8) @@ -227,19 +227,19 @@ static abi_long freebsd_syscall(void *cpu_env, int nu= m, abi_long arg1, * process system calls */ case TARGET_FREEBSD_NR_fork: /* fork(2) */ - ret =3D do_freebsd_fork(cpu_env); + ret =3D do_freebsd_fork(env); break; =20 case TARGET_FREEBSD_NR_vfork: /* vfork(2) */ - ret =3D do_freebsd_vfork(cpu_env); + ret =3D do_freebsd_vfork(env); break; =20 case TARGET_FREEBSD_NR_rfork: /* rfork(2) */ - ret =3D do_freebsd_rfork(cpu_env, arg1); + ret =3D do_freebsd_rfork(env, arg1); break; =20 case TARGET_FREEBSD_NR_pdfork: /* pdfork(2) */ - ret =3D do_freebsd_pdfork(cpu_env, arg1, arg2); + ret =3D do_freebsd_pdfork(env, arg1, arg2); break; =20 case TARGET_FREEBSD_NR_execve: /* execve(2) */ @@ -255,12 +255,12 @@ static abi_long freebsd_syscall(void *cpu_env, int nu= m, abi_long arg1, break; =20 case TARGET_FREEBSD_NR_wait6: /* wait6(2) */ - ret =3D do_freebsd_wait6(cpu_env, arg1, arg2, arg3, + ret =3D do_freebsd_wait6(env, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); break; =20 case TARGET_FREEBSD_NR_exit: /* exit(2) */ - ret =3D do_bsd_exit(cpu_env, arg1); + ret =3D do_bsd_exit(env, arg1); break; =20 case TARGET_FREEBSD_NR_getgroups: /* getgroups(2) */ @@ -424,7 +424,7 @@ static abi_long freebsd_syscall(void *cpu_env, int num,= abi_long arg1, break; =20 case TARGET_FREEBSD_NR_procctl: /* procctl(2) */ - ret =3D do_freebsd_procctl(cpu_env, arg1, arg2, arg3, arg4, arg5, = arg6); + ret =3D do_freebsd_procctl(env, arg1, arg2, arg3, arg4, arg5, arg6= ); break; =20 /* @@ -435,7 +435,7 @@ static abi_long freebsd_syscall(void *cpu_env, int num,= abi_long arg1, break; =20 case TARGET_FREEBSD_NR_pread: /* pread(2) */ - ret =3D do_bsd_pread(cpu_env, arg1, arg2, arg3, arg4, arg5, arg6); + ret =3D do_bsd_pread(env, arg1, arg2, arg3, arg4, arg5, arg6); break; =20 case TARGET_FREEBSD_NR_readv: /* readv(2) */ @@ -443,7 +443,7 @@ static abi_long freebsd_syscall(void *cpu_env, int num,= abi_long arg1, break; =20 case TARGET_FREEBSD_NR_preadv: /* preadv(2) */ - ret =3D do_bsd_preadv(cpu_env, arg1, arg2, arg3, arg4, arg5, arg6); + ret =3D do_bsd_preadv(env, arg1, arg2, arg3, arg4, arg5, arg6); break; =20 case TARGET_FREEBSD_NR_write: /* write(2) */ @@ -451,7 +451,7 @@ static abi_long freebsd_syscall(void *cpu_env, int num,= abi_long arg1, break; =20 case TARGET_FREEBSD_NR_pwrite: /* pwrite(2) */ - ret =3D do_bsd_pwrite(cpu_env, arg1, arg2, arg3, arg4, arg5, arg6); + ret =3D do_bsd_pwrite(env, arg1, arg2, arg3, arg4, arg5, arg6); break; =20 case TARGET_FREEBSD_NR_writev: /* writev(2) */ @@ -459,7 +459,7 @@ static abi_long freebsd_syscall(void *cpu_env, int num,= abi_long arg1, break; =20 case TARGET_FREEBSD_NR_pwritev: /* pwritev(2) */ - ret =3D do_bsd_pwritev(cpu_env, arg1, arg2, arg3, arg4, arg5, arg6= ); + ret =3D do_bsd_pwritev(env, arg1, arg2, arg3, arg4, arg5, arg6); break; =20 case TARGET_FREEBSD_NR_open: /* open(2) */ @@ -559,11 +559,11 @@ static abi_long freebsd_syscall(void *cpu_env, int nu= m, abi_long arg1, break; =20 case TARGET_FREEBSD_NR_truncate: /* truncate(2) */ - ret =3D do_bsd_truncate(cpu_env, arg1, arg2, arg3, arg4); + ret =3D do_bsd_truncate(env, arg1, arg2, arg3, arg4); break; =20 case TARGET_FREEBSD_NR_ftruncate: /* ftruncate(2) */ - ret =3D do_bsd_ftruncate(cpu_env, arg1, arg2, arg3, arg4); + ret =3D do_bsd_ftruncate(env, arg1, arg2, arg3, arg4); break; =20 case TARGET_FREEBSD_NR_acct: /* acct(2) */ @@ -595,7 +595,7 @@ static abi_long freebsd_syscall(void *cpu_env, int num,= abi_long arg1, break; =20 case TARGET_FREEBSD_NR_readlink: /* readlink(2) */ - ret =3D do_bsd_readlink(cpu_env, arg1, arg2, arg3); + ret =3D do_bsd_readlink(env, arg1, arg2, arg3); break; =20 case TARGET_FREEBSD_NR_readlinkat: /* readlinkat(2) */ @@ -627,7 +627,7 @@ static abi_long freebsd_syscall(void *cpu_env, int num,= abi_long arg1, break; =20 case TARGET_FREEBSD_NR_mknodat: /* mknodat(2) */ - ret =3D do_bsd_mknodat(cpu_env, arg1, arg2, arg3, arg4, arg5, arg6= ); + ret =3D do_bsd_mknodat(env, arg1, arg2, arg3, arg4, arg5, arg6); break; =20 case TARGET_FREEBSD_NR_chown: /* chown(2) */ @@ -807,7 +807,7 @@ static abi_long freebsd_syscall(void *cpu_env, int num,= abi_long arg1, * Memory management system calls. */ case TARGET_FREEBSD_NR_mmap: /* mmap(2) */ - ret =3D do_bsd_mmap(cpu_env, arg1, arg2, arg3, arg4, arg5, arg6, a= rg7, + ret =3D do_bsd_mmap(env, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); break; =20 @@ -953,15 +953,15 @@ static abi_long freebsd_syscall(void *cpu_env, int nu= m, abi_long arg1, * sys{ctl, arch, call} */ case TARGET_FREEBSD_NR___sysctl: /* sysctl(3) */ - ret =3D do_freebsd_sysctl(cpu_env, arg1, arg2, arg3, arg4, arg5, a= rg6); + ret =3D do_freebsd_sysctl(env, arg1, arg2, arg3, arg4, arg5, arg6); break; =20 case TARGET_FREEBSD_NR___sysctlbyname: /* sysctlbyname(2) */ - ret =3D do_freebsd_sysctlbyname(cpu_env, arg1, arg2, arg3, arg4, a= rg5, arg6); + ret =3D do_freebsd_sysctlbyname(env, arg1, arg2, arg3, arg4, arg5,= arg6); break; =20 case TARGET_FREEBSD_NR_sysarch: /* sysarch(2) */ - ret =3D do_freebsd_sysarch(cpu_env, arg1, arg2); + ret =3D do_freebsd_sysarch(env, arg1, arg2); break; =20 default: @@ -979,7 +979,7 @@ static abi_long freebsd_syscall(void *cpu_env, int num,= abi_long arg1, * as a wrapper around freebsd_syscall() so that actually happens. Since * that is a singleton, modern compilers will inline it anyway... */ -abi_long do_freebsd_syscall(void *cpu_env, int num, abi_long arg1, +abi_long do_freebsd_syscall(CPUArchState *env, int num, abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg4, abi_long arg5, abi_long arg6, abi_long arg7, abi_long arg8) @@ -990,7 +990,7 @@ abi_long do_freebsd_syscall(void *cpu_env, int num, abi= _long arg1, print_freebsd_syscall(num, arg1, arg2, arg3, arg4, arg5, arg6); } =20 - ret =3D freebsd_syscall(cpu_env, num, arg1, arg2, arg3, arg4, arg5, ar= g6, + ret =3D freebsd_syscall(env, num, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); if (do_strace) { print_freebsd_syscall_ret(num, ret); diff --git a/bsd-user/i386/target.h b/bsd-user/i386/target.h index ddd3b8ec08..9cd158fc11 100644 --- a/bsd-user/i386/target.h +++ b/bsd-user/i386/target.h @@ -12,7 +12,7 @@ /* * i386 doesn't 'lump' the registers for 64-bit args. */ -static inline bool regpairs_aligned(void *cpu_env) +static inline bool regpairs_aligned(CPUArchState *env) { return false; } diff --git a/bsd-user/qemu.h b/bsd-user/qemu.h index b0b2c249fb..60d1adf560 100644 --- a/bsd-user/qemu.h +++ b/bsd-user/qemu.h @@ -176,7 +176,7 @@ abi_long memcpy_to_target(abi_ulong dest, const void *s= rc, void target_set_brk(abi_ulong new_brk); abi_long do_brk(abi_ulong new_brk); void syscall_init(void); -abi_long do_freebsd_syscall(void *cpu_env, int num, abi_long arg1, +abi_long do_freebsd_syscall(CPUArchState *env, int num, abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg4, abi_long arg5, abi_long arg6, abi_long arg7, abi_long arg8); @@ -238,7 +238,7 @@ int host_to_target_errno(int err); /* os-proc.c */ abi_long freebsd_exec_common(abi_ulong path_or_fd, abi_ulong guest_argp, abi_ulong guest_envp, int do_fexec); -abi_long do_freebsd_procctl(void *cpu_env, int idtype, abi_ulong arg2, +abi_long do_freebsd_procctl(CPUArchState *env, int idtype, abi_ulong arg2, abi_ulong arg3, abi_ulong arg4, abi_ulong arg5, abi_ulong arg6); =20 /* os-sys.c */ @@ -247,7 +247,7 @@ abi_long do_freebsd_sysctl(CPUArchState *env, abi_ulong= namep, int32_t namelen, abi_long do_freebsd_sysctlbyname(CPUArchState *env, abi_ulong namep, int32_t namelen, abi_ulong oldp, abi_ulong oldlenp, abi_ulong newp, abi_ulong newlen); -abi_long do_freebsd_sysarch(void *cpu_env, abi_long arg1, abi_long arg2); +abi_long do_freebsd_sysarch(CPUArchState *env, abi_long arg1, abi_long arg= 2); =20 /* user access */ =20 diff --git a/bsd-user/riscv/target.h b/bsd-user/riscv/target.h index 036ddd185e..dc3e0be795 100644 --- a/bsd-user/riscv/target.h +++ b/bsd-user/riscv/target.h @@ -12,7 +12,7 @@ /* * riscv64 ABI does not 'lump' the registers for 64-bit args. */ -static inline bool regpairs_aligned(void *cpu_env) +static inline bool regpairs_aligned(CPUArchState *env) { return false; } diff --git a/bsd-user/x86_64/target.h b/bsd-user/x86_64/target.h index 0cf0e2a14a..fccfc593bd 100644 --- a/bsd-user/x86_64/target.h +++ b/bsd-user/x86_64/target.h @@ -12,7 +12,7 @@ /* * x86 doesn't 'lump' the registers for 64-bit args, all args are 64 bits. */ -static inline bool regpairs_aligned(void *cpu_env) +static inline bool regpairs_aligned(CPUArchState *env) { return false; } --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097525; cv=none; d=zohomail.com; s=zohoarc; b=LTMrJkcbfRYm0A8QpU/FDY9UcVtAfc/e+JCdg1aJ1ddmRMy/2GYNcaDnEtssArwW0Gp9LfeGhJW8PzImBQHbT/bjGkrnvZwnYbDkLpyKmoRpzThyY9OuYdSpF9WlW+op2zyXj53xkQKaKWB65I8QvrKuDL4PCBhwRCkZmjo3DnQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097525; h=Content-Type: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=c7q9MkBLuXipFuADwgZrw+IHPbXMHvop+eYAjY9foRQ=; b=QsNszuCMHD/6AOf03e+ucSFPigDA+LgfGC/rgMKRekFRuymsSXKrvofjFKZtrJlSoSZEWDMRt9I7MpWj2kNxn1UX3IS44ES0rCEmWrs+eTgfymT3DDqYjv/h46tCUnp7N2JYmjGNNnzo2kx4iNHJk59a0yjG8UpOcBcMfMmlMTM= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097525439890.2011234482818; Tue, 18 Aug 2026 16:58:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTgR-0001ok-R7; Tue, 18 Aug 2026 19:57:31 -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 1wwTgQ-0001oY-Fc for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:30 -0400 Received: from mail-oi1-x22a.google.com ([2607:f8b0:4864:20::22a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTgP-0005C6-1H for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:30 -0400 Received: by mail-oi1-x22a.google.com with SMTP id 5614622812f47-4b28d7c729fso298526b6e.0 for ; Tue, 18 Aug 2026 16:57:28 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.57.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:57:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097448; x=1787702248; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=c7q9MkBLuXipFuADwgZrw+IHPbXMHvop+eYAjY9foRQ=; b=RGQu5dbBKPikWZvr3Nc/UHxKDQ4DSbX0zE2kTL+dbhHavQGMIKHMUBAkS1962rOOSd /JACASQYsFfz3k+0PgRNkQxkGlr5rEwAtJUiXC/+diZY1L17vQH7ESByWDfDSezNURmM JFx4OQRFJQgZf7AdJNBX4FZ9P8xEYt6Vf2bBuwjnVbChHJmbdtcySEMgdmNaReau71U5 8HGN2ihXDBV90DBTeatN9MNNjncaANAQ7j63YjrxsASaWLCGYbwi2aHTLKxk4Z71kXxm dC5QgAvGl+RGu+QeJ40QAie2oP2/bLzt29CbuEWMS+8nct2RLa/RmA5ts/G4D/jUv47S OFVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097448; x=1787702248; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=c7q9MkBLuXipFuADwgZrw+IHPbXMHvop+eYAjY9foRQ=; b=ZFcpIQjSxPrXr66D2VNAQUI++AjvWkqaUtYG5ZzeGeOpCDdyldvZsjxPz3Bn9L5c5j GvNYRQhy73N66rs98HmQZEt8z70V+H2WwQLu7G2Jjc5kxDPLYFepj8s5xUA05jsBtTj8 1GJxQz/cXs+abWegQm2suDnpZHjQzMKNmjieLOuWwgI2Wf7viS7zkNt94SAGVzBPVTzQ mK/8ykq7g/rTmAIurIu5k71C9w/xfoArv9O1CuGXwJ2q8EHV45AmtM4/8GZSxwQlei7S XZoEFRmw24++i360dQbTXDJJ7UWxqt3D08woIwLT4pQGzjL+dWtlYVkFnf3lNTbA2+zL 4P8A== X-Gm-Message-State: AOJu0YzwMKfecWjdQQMEsFrCMmx6yHjs0nTfaZ951o3XoG84Ozbjjv/X 7oPmhdJrMg/uPyMQiiYIHMVegZla+3cD8ik65wTmJAnP0maaBJkRCnZqz8Kn1+mPr7I= X-Gm-Gg: AR+sD12vmty4pP4E1XvMMDh+3GzMyOVOaAAeBlnVBlzgzyX3DGW0a6Bi+kdjPaJSH5l XDK+GNeYi+yRBWdf6dZJ5kTDWpSytn76pnK188Y+G2Lh/9QtwNG5YWbOj7snkA3yfTgjLXJjBOh WqDomTV1P9GjVYBi6K2WmrlNa5UpJ5/aX8K8L2zXZV46RR6eFn6ru7FOyqArdmpzM5HSAuS1ggu JeP8CsRUcSwXqe/X6QtYeerIJqXY/XLP5lHS/umtKzLFWhP1uFtM7ty357bvRyRcWvawBSqg1Wq +PBN9Ymio/uXImP+r5zcdUeQ2DPKJFolO5mqFf0SHVVWuz9k8UT1WU678YuVPN0BicYovzlSA8I MlMbnVOnON1N6MfQKal1y03YTuSXHiaKKXk5g8ZpDKq2V1BFPm25fIIC5zybcG77LRqF3wiETqw Zhx4Zjv8PHOlJnWAufoG66hcqbUOXehQCAtbdP/d/WyT0BrXIuIbnKRqrMMg== X-Received: by 2002:a05:6808:bc4:b0:4a4:866:c395 with SMTP id 5614622812f47-4b2bcad8a7fmr410098b6e.13.1787097447712; Tue, 18 Aug 2026 16:57:27 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:55:55 -0600 Subject: [PATCH v4 02/40] bsd-user: Fix copy direciton in preadv MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-2-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1338; i=imp@bsdimp.com; h=from:subject:message-id; bh=7Em3b9ep2V0F8WfpyI+BaZSBFKvOr1ifqfuI5wr1Vkc=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPEhlBLnM5MPiYWWc87nzO+VOd5ky45A51D5H JdJdwr9c2qJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxIRsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQDsthAApG2RRuo0TR3dmkPAkbEAdDYcB6oruMg 9QkckI6HjY/j1p+MP1vx/2+o6LOFXiX2ETJV0/x0oqJgy9JjaTMdkzGO9NElvGcFrxDhecinPu9 l9kJydLjBxDH359oEBe832Ppjb70ZXkzPrrWOs2BOiqI0FLi2tQ9FCaZPr7arwjdXQhYlhpjwf4 +WEPdStLyGaTnYyqyn3Iv6WWvkf4QFqQPhPRSUefKpUn5QWUrV5Pz97IDV2VrUWANaltelsgTnR EV8Ka8TtkthEE7DSCFv1VTGvvj8+DKJ6PCoNjXJ9nFbN+WwBJ61XaATRLSlwF56O6FrSjQ/kYNK wFjOF+nQ9GSVuwxuM1pAonkHX3kaijaSgc2kDqvsIH0RwFbIVBzgk64KwU6108MvHhvDdfb/+TQ JedTo0BuexPapIGIwQN2choOtZI5THaHFr4Ud83LqfQVpgDFQiIIFiTaK+vpmKJan1zwseYr0qG Sa8oo3VsX0R4YukMQx6FawLZirC/4FLYQCrbpx2pDWaocyk+ah6hBjTBhqn2xRmiqLB0dx9knRo OKLT3kK8KoScAxl1fFkMkSsNbES7cD4peNH2PTJYJNboaw3zjJQYypwj0YFV2UVdwCk0CBwhcZE g0s3yVpbNNJBh28wcygSpDMDsS1UVjmo9AWhP8UtqyBfsQ/8xdyA= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::22a; envelope-from=imp@bsdimp.com; helo=mail-oi1-x22a.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097527192158500 As written, we copy in the vector and data then don't copy it out, when instead. Instead, we should copy the data out. pread and read are already correct. Reviewed-by: Richard Henderson Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/bsd-file.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bsd-user/bsd-file.h b/bsd-user/bsd-file.h index dec59bd80b..7ef9470c4e 100644 --- a/bsd-user/bsd-file.h +++ b/bsd-user/bsd-file.h @@ -113,7 +113,7 @@ static abi_long do_bsd_preadv(CPUArchState *env, abi_lo= ng arg1, abi_long arg2, abi_long arg3, abi_long arg4, abi_long arg5, abi_long a= rg6) { abi_long ret; - struct iovec *vec =3D lock_iovec(VERIFY_WRITE, arg2, arg3, 1); + struct iovec *vec =3D lock_iovec(VERIFY_WRITE, arg2, arg3, 0); =20 if (vec !=3D NULL) { if (regpairs_aligned(env) !=3D 0) { @@ -121,7 +121,7 @@ static abi_long do_bsd_preadv(CPUArchState *env, abi_lo= ng arg1, arg5 =3D arg6; } ret =3D get_errno(safe_preadv(arg1, vec, arg3, target_arg64(arg4, = arg5))); - unlock_iovec(vec, arg2, arg3, 0); + unlock_iovec(vec, arg2, arg3, 1); } else { ret =3D -host_to_target_errno(errno); } --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097512; cv=none; d=zohomail.com; s=zohoarc; b=Dz0ZfUAzhzMBu6O/NoOeecEJaJDoMq2dSQilBD0xTg6QKw4Znonu4N4HLBWQGlM1UERQZu2igiYZWnLG43eaVmflQyxjEOcuBfbtIcwHzrL7m3tBhDWEh4+ZlnMnHFXNgu0ajPK4j2M56A9fby6reayZ72GNg+cHi4kdKbY9HCo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097512; h=Content-Type: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=isMuBHhI/dNebvc66IvHXOnjmMr0h/+Y4YeEnzJOcGs=; b=MU6mpLPMa0EEO4KrUl9FqAzAbaORg4KyAFHdp54S3YzRCmDlCz7XrndIr3F4X34QVaGM0I6QVZkPn+KZBLwU9vgV+gk2R67Mo1YHYwaI3aEMOfLE6XJsGIo4lxU3rkSfRVAouw+oDwVxO5Q8QDhgxeIR91uHo8VvNLQopnzQuzI= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097512713763.3922542284485; Tue, 18 Aug 2026 16:58:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTgU-0001u2-K9; Tue, 18 Aug 2026 19:57:34 -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 1wwTgS-0001qS-OK for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:32 -0400 Received: from mail-oi1-x235.google.com ([2607:f8b0:4864:20::235]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTgQ-0005CR-K7 for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:32 -0400 Received: by mail-oi1-x235.google.com with SMTP id 5614622812f47-4a4cb36ae00so357674b6e.0 for ; Tue, 18 Aug 2026 16:57:30 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.57.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:57:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097449; x=1787702249; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=isMuBHhI/dNebvc66IvHXOnjmMr0h/+Y4YeEnzJOcGs=; b=F5F05655aZM0igo9T3GGH7g7CuFg2Lgd8yWeNgwDwY3RMEYa6KC66VbB0ufqKEsyCG 0eVouh2pGK7mljEyQyOzWa/qwLy2HcAjKZEWH4EWtgVCsBDecGPTKA4wbl0GUMofqD3g tJyat1R0CKCq5yLze1vRf/PobXY2UUOq1ZTh/uDbj0mBHVJkkVmuv4jwD43DewPlS29v Ac4DKrDX5U+HS3H8cPqNM3O7g/P7KkmAH+IIS+R/c9HRLH4YpwOemDQdjP129SHvp+YT MKZxBegvuw+Sx/W2bei5eiMZHUenTDPghYUbSNW8aheqZxnvK1LzIovdac5GnqMqNOxI 6ZtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097449; x=1787702249; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=isMuBHhI/dNebvc66IvHXOnjmMr0h/+Y4YeEnzJOcGs=; b=HebtlpmwVo4UyEIlhrKJW5WVsxQU1XNryNkjlq24UvTpe6T5uDA0Q8rkPAz+83M0Qn +cgwewqY3l85Imo27YeD8Fw497MyHnD4cPGOQA1jiT0sGhOqC3w6TDsbU62Fi8N2K1wh pqQjvEFkhJ+VYYVRZF1hMo0ucZaUPeml/HSth+UejjWNpNsaMBRAo4T+v2P/oS86hVlA ujSQ1TGRLB2BcwwzOcQRk0AOkmMcxvBBswSgJS0nfyVPPdmQplVovmjqS+sWRKRB+v7H RKafDQ2RhMHDgykx5YaJ8VZkbG8tUJjhv5eDlaZKbiQSfyrXt6WjDXb1AJJ1/BDQnqGo 8aKA== X-Gm-Message-State: AOJu0Yw70NaSSp4z0fAh1vVs4z8oE+jJzofGZZDVk8Lq5nUBhjzcaR0e 6K7OUpUp3ffl8uWH1tOXVY8Kk6HzFsgbC5/nw5MJFT06TIPHjf4dvjwTAMZruRiyBLc= X-Gm-Gg: AR+sD120Hzjhx63hm5dLR0mccxUX+3EA15SpH7SRMGtkd3hWtjsarF0JziGmJC6csxn R9HdVU0YfUNMaGd8PIBYPrSEnrxoy9e+XKBLfv4+lx7equHDqNC/Cnk/Hv/uZHjf8ZS3kJctQNz vILnHJf9Gw2c72e1CzDzFvc0qZNtL5lBqc46Ce7fsI97IOB+4Ps+fGocCYAZ5HgNs3N/2G5turm LTQ03z7wjVwB+++eyFyCQaFT4IujzXpGMGLcg0N/ixYzgI8vW6WXGsjceIcHJx1kCSOjahoee4P /zckqnIZvOFEWUqZ97HWzlB9cJCxIh9P62CLT2u5h06DY1+tGBskQ1elbnTTQmLsGx2OG/IcCJj 1t5L2zGFq8eLcX4SlSamhRiW+pgsR1SbBB+tNsAkEDu60ZoRtLYWQuh3184LAWYCRTpKBkvGuzB BfTvCLi+l0jihjzdlxRI7dpzwjFTB/Dwv4jNQU11Mvf4sbu5uenA9e26FChA== X-Received: by 2002:a05:6808:148b:b0:4b2:8e1c:2b36 with SMTP id 5614622812f47-4b2bcb68105mr314089b6e.20.1787097449405; Tue, 18 Aug 2026 16:57:29 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:55:56 -0600 Subject: [PATCH v4 03/40] bsd-user: Add bsd-signal.h with sigaction through sigreturn MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-3-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Kyle Evans , Jessica Clarke , =?utf-8?q?Mika=C3=ABl_Urankar?= , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=9650; i=imp@bsdimp.com; h=from:subject:message-id; bh=oUO6qnw8M2WT+brJJsIeDGb0dGGZiOpvDTnPwmkDNy8=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPEiw3kNNkWYZEm/tnKhr6wtoGcaXxDLl4L+F E2p21dlRgqJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxIhsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQDb4Q/+NeoCRdhNaVqcmMxZ16AnQvbtW4z6jF0 fb3F/3S4tkUretXJSYe9aCiUPzKcBRK+tWtEKUUlOG/AB+yu/wTTUi9gpp7obAelOtFPXaBysUu 0787xcXyo2qUPGffAM+59jmd66eZkKaHXQD/Ya9MeyP81U5K8IANrtCrxC75N5kGuw2b9qrCx1b M2R4g++k1eu9olH16+ss+ocjuv4D052va1zb8Z0aGmsm7sGS69qGbSgcSaJ2YVFHP9VcjYXKXUd /0kXwTR9KV2X9oCkhjiYSlyG3GAJuXMNXwxy5VkmhNxEcSmOjnl/eoP1PbDSZWEhofr2VttY7/y 6trct7JhvcMEcuezMcqsbUMBnQ//sO8RY7LegbKW5lCjtCwbBZ0gNgwfvCEqwvK/U3Dkd8vxkFy F6xlUOY/XrhhxexWUIEO59jrh9+6/NEH65Ua62ewGySgGOotXSdOBVTOdDgMXdIaEemmLUZkalx bamDkNjRStGSwQgL8Y3I45im5NoIG3PHsj5gIv/JdqilQ7wJBRezdiIa0Rx+++85Vu9nUlU/2NX /klxXEd0Vx6mMGJ0VXlTo+CPXAl85sVo9P8J+PfGpX5+zHo5w+Cs4e2NR4I+k3dq6p+M8E0IQ9h Ob/CMLH3Ttb5MQKV8hLmowQjB2vEVe8VYWlYgeWjxj2R5lHAF0eM= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::235; envelope-from=imp@bsdimp.com; helo=mail-oi1-x235.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097513650158500 Add the first set of signal-related system call shims: sigaction, sigprocmask, sigpending, sigsuspend, and sigreturn. Also add the do_sigprocmask and target_to_host_sigevent helper functions to signal.c and their declarations to signal-common.h. Signed-off-by: Stacey Son Signed-off-by: Kyle Evans Signed-off-by: Jessica Clarke Signed-off-by: Mika=C3=ABl Urankar Assisted-by: Claude Opus 4.6 (1M context) Reviewed-by: Pierrick Bouvier Reviewed-by: Richard Henderson Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/bsd-signal.h | 151 ++++++++++++++++++++++++++++++++++++++= ++++ bsd-user/freebsd/os-syscall.c | 1 + bsd-user/signal-common.h | 4 ++ bsd-user/signal.c | 67 +++++++++++++++++++ 4 files changed, 223 insertions(+) diff --git a/bsd-user/bsd-signal.h b/bsd-user/bsd-signal.h new file mode 100644 index 0000000000..49e58d7436 --- /dev/null +++ b/bsd-user/bsd-signal.h @@ -0,0 +1,151 @@ +/* + * signal related system call shims + * + * Copyright (c) 2013 Stacey D. Son + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#ifndef BSD_SIGNAL_H +#define BSD_SIGNAL_H + +#include + +/* sigaction(2) */ +static inline abi_long do_bsd_sigaction(abi_long arg1, abi_long arg2, + abi_long arg3) +{ + abi_long ret; + struct target_sigaction *old_act, act, oact, *pact; + + if (arg2) { + if (!lock_user_struct(VERIFY_READ, old_act, arg2, 1)) { + return -TARGET_EFAULT; + } + act._sa_handler =3D old_act->_sa_handler; + act.sa_flags =3D old_act->sa_flags; + memcpy(&act.sa_mask, &old_act->sa_mask, sizeof(target_sigset_t)); + unlock_user_struct(old_act, arg2, 0); + pact =3D &act; + } else { + pact =3D NULL; + } + ret =3D get_errno(do_sigaction(arg1, pact, &oact)); + if (!is_error(ret) && arg3) { + if (!lock_user_struct(VERIFY_WRITE, old_act, arg3, 0)) { + return -TARGET_EFAULT; + } + old_act->_sa_handler =3D oact._sa_handler; + old_act->sa_flags =3D oact.sa_flags; + memcpy(&old_act->sa_mask, &oact.sa_mask, sizeof(target_sigset_t)); + unlock_user_struct(old_act, arg3, 1); + } + return ret; +} + + +/* sigprocmask(2) */ +static inline abi_long do_bsd_sigprocmask(abi_long arg1, abi_ulong arg2, + abi_ulong arg3) +{ + abi_long ret; + void *p; + sigset_t set, oldset, *set_ptr; + int how; + + ret =3D 0; + if (arg2) { + p =3D lock_user(VERIFY_READ, arg2, sizeof(target_sigset_t), 1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + target_to_host_sigset(&set, p); + unlock_user(p, arg2, 0); + set_ptr =3D &set; + switch (arg1) { + case TARGET_SIG_BLOCK: + how =3D SIG_BLOCK; + break; + case TARGET_SIG_UNBLOCK: + how =3D SIG_UNBLOCK; + break; + case TARGET_SIG_SETMASK: + how =3D SIG_SETMASK; + break; + default: + return -TARGET_EINVAL; + } + } else { + how =3D 0; + set_ptr =3D NULL; + } + ret =3D do_sigprocmask(how, set_ptr, &oldset); + if (!is_error(ret) && arg3) { + p =3D lock_user(VERIFY_WRITE, arg3, sizeof(target_sigset_t), 0); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + host_to_target_sigset(p, &oldset); + unlock_user(p, arg3, sizeof(target_sigset_t)); + } + return ret; +} + +/* sigpending(2) */ +static inline abi_long do_bsd_sigpending(abi_long arg1) +{ + abi_long ret; + void *p; + sigset_t set; + + ret =3D get_errno(sigpending(&set)); + if (!is_error(ret)) { + p =3D lock_user(VERIFY_WRITE, arg1, sizeof(target_sigset_t), 0); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + host_to_target_sigset(p, &set); + unlock_user(p, arg1, sizeof(target_sigset_t)); + } + return ret; +} + +/* sigsuspend(2) */ +static inline abi_long do_bsd_sigsuspend(CPUArchState *env, abi_long arg1, + abi_long arg2) +{ + CPUState *cpu =3D env_cpu(env); + TaskState *ts =3D cpu->opaque; + void *p; + abi_long ret; + + p =3D lock_user(VERIFY_READ, arg1, sizeof(target_sigset_t), 1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + target_to_host_sigset(&ts->sigsuspend_mask, p); + unlock_user(p, arg1, 0); + + ret =3D get_errno(sigsuspend(&ts->sigsuspend_mask)); + /* XXX Trivially true until safe_syscall */ + if (ret !=3D -TARGET_ERESTART) { + ts->in_sigsuspend =3D true; + } + + return ret; +} + +/* sigreturn(2) */ +static inline abi_long do_bsd_sigreturn(CPUArchState *env, abi_long arg1) +{ + if (block_signals()) { + return -TARGET_ERESTART; + } + return do_sigreturn(env, arg1); +} + +/* sigvec(2) - not defined */ +/* sigblock(2) - not defined */ +/* sigsetmask(2) - not defined */ +/* sigstack(2) - not defined */ + +#endif /* BSD_SIGNAL_H */ diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c index d402c64726..7fefdb569f 100644 --- a/bsd-user/freebsd/os-syscall.c +++ b/bsd-user/freebsd/os-syscall.c @@ -38,6 +38,7 @@ #include "bsd-mem.h" #include "bsd-proc.h" #include "bsd-misc.h" +#include "bsd-signal.h" =20 /* BSD dependent syscall shims */ #include "os-stat.h" diff --git a/bsd-user/signal-common.h b/bsd-user/signal-common.h index 4e634e04a3..9071757873 100644 --- a/bsd-user/signal-common.h +++ b/bsd-user/signal-common.h @@ -32,6 +32,7 @@ int block_signals(void); /* Returns non zero if signal pe= nding */ long do_rt_sigreturn(CPUArchState *env); int do_sigaction(int sig, const struct target_sigaction *act, struct target_sigaction *oact); +int do_sigprocmask(int how, const sigset_t *set, sigset_t *oldset); abi_long do_sigaltstack(abi_ulong uss_addr, abi_ulong uoss_addr, abi_ulong= sp); long do_sigreturn(CPUArchState *env, abi_ulong addr); void force_sig_fault(int sig, int code, abi_ulong addr); @@ -42,6 +43,9 @@ void process_pending_signals(CPUArchState *env); void queue_signal(CPUArchState *env, int sig, int si_type, target_siginfo_t *info); void signal_init(void); +abi_long target_to_host_sigevent(struct sigevent *host_sevp, + abi_ulong target_addr); +int target_to_host_signal(int sig); void target_to_host_sigset(sigset_t *d, const target_sigset_t *s); =20 /* diff --git a/bsd-user/signal.c b/bsd-user/signal.c index 3e5e41e1b1..da7cf1d60b 100644 --- a/bsd-user/signal.c +++ b/bsd-user/signal.c @@ -346,6 +346,33 @@ int block_signals(void) return qatomic_xchg(&ts->signal_pending, 1); } =20 +abi_long target_to_host_sigevent(struct sigevent *host_sevp, + abi_ulong target_addr) +{ + struct target_sigevent *target_sevp; + + if (!lock_user_struct(VERIFY_READ, target_sevp, target_addr, 1)) { + return -TARGET_EFAULT; + } + + /* + * This union is awkward on 64 bit systems because it has a 32 bit + * integer and a pointer in it; we follow the conversion approach + * used for handling sigval types in signal.c so the guest should get + * the correct value back even if we did a 64 bit byteswap and it's + * using the 32 bit integer. + */ + host_sevp->sigev_value.sival_ptr =3D + (void *)(uintptr_t)tswapal(target_sevp->sigev_value.sival_ptr); + host_sevp->sigev_signo =3D + target_to_host_signal(tswap32(target_sevp->sigev_signo)); + host_sevp->sigev_notify =3D tswap32(target_sevp->sigev_notify); + host_sevp->_sigev_un._threadid =3D tswap32(target_sevp->_sigev_un._thr= eadid); + + unlock_user_struct(target_sevp, target_addr, 0); + return 0; +} + /* Returns 1 if given signal should dump core if not handled. */ static int core_dump_signal(int sig) { @@ -725,6 +752,46 @@ int do_sigaction(int sig, const struct target_sigactio= n *act, return ret; } =20 +int do_sigprocmask(int how, const sigset_t *set, sigset_t *oldset) +{ + TaskState *ts =3D get_task_state(thread_cpu); + + if (oldset) { + *oldset =3D ts->signal_mask; + } + + if (set) { + int i; + + if (block_signals()) { + return -TARGET_ERESTART; + } + + switch (how) { + case SIG_BLOCK: + sigorset(&ts->signal_mask, &ts->signal_mask, set); + break; + case SIG_UNBLOCK: + for (i =3D 1; i <=3D NSIG; ++i) { + if (sigismember(set, i)) { + sigdelset(&ts->signal_mask, i); + } + } + break; + case SIG_SETMASK: + ts->signal_mask =3D *set; + break; + default: + g_assert_not_reached(); + } + + /* Silently ignore attempts to change blocking status of KILL or S= TOP */ + sigdelset(&ts->signal_mask, SIGKILL); + sigdelset(&ts->signal_mask, SIGSTOP); + } + return 0; +} + static inline abi_ulong get_sigframe(struct target_sigaction *ka, CPUArchState *env, size_t frame_size) { --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097542; cv=none; d=zohomail.com; s=zohoarc; b=jZjTQf8zQ6OMsYyQHeTLJoSORtHJgfDKUcyccd4Ege7bAvxgvmPQNZ9oxLTdgpk1HHtdlXEsihVKsGShQtwwWVAeUe3m91qzNjaMdLw40/BCNTPa2EkK45+oPoiWwBhRLn18TyzPQvDQL9a8xEG9DXRqPWTg8bj6IL4HdN4sSRw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097542; h=Content-Type: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=BTsKoaZTlO/6rt1Z9aAI2LxFAikp1OEAPGg7kdKUGAc=; b=N7uiAYCwejdIxtCoLNTFPM5Uwx1U1KpOKijzcsC5B68Yd1zVLAc7pYmMjXLgeTQLYanqgUahCYz9RMc4/je4q6kgKExmOOMA5jP2HZnSfAOZi6VDtfcwSWsNg4FAVwLIS6sD1cP26KXBkyi+jqHo2ldt7nNqn6IpfQrPj/+HNE4= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097542472951.6034468435546; Tue, 18 Aug 2026 16:59:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTgW-0001wO-9N; Tue, 18 Aug 2026 19:57:36 -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 1wwTgV-0001vn-1C for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:35 -0400 Received: from mail-oa1-x30.google.com ([2001:4860:4864:20::30]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTgT-0005Cs-Ax for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:34 -0400 Received: by mail-oa1-x30.google.com with SMTP id 586e51a60fabf-448b0ff4a57so392058fac.2 for ; Tue, 18 Aug 2026 16:57:32 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.57.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:57:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097451; x=1787702251; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=BTsKoaZTlO/6rt1Z9aAI2LxFAikp1OEAPGg7kdKUGAc=; b=kyDnOzDE1P82hEywc3OVZjMxIw+V1+OO+bMRx+KyyO1xW97HJCcGngY02LquO+f+A4 +Z5VJWOiJRcH+jBUyCrQoGCNSZ3rFsjH5LkhkqFT8ocZIp/RyCispMUu2QdkWboDcMe0 PqVT04r9KiF4ycH6BmTCcSWB+xmK1w5L28MKcbOmbykk+fR1VSIfHLI6L+n3FzHe90Pn n7Ey4gQZE4/cnVwu5ef+44niS3SorjK7/XY7pekhiEdCdozVmhGgsPhFm+ocZv2PEa8i W++4XbCtYnlB5fawO9LjjGi+QN8oCiiWHj1ELcPe6kV3ALhG0Poj8/I4pLtEZ2JTxbr0 xnlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097451; x=1787702251; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=BTsKoaZTlO/6rt1Z9aAI2LxFAikp1OEAPGg7kdKUGAc=; b=ig0qZWo/6GG2ni5ZUoGFd5y360z8HkqdQ5pEYXruIo3QRMtXXXAv67io64QIy/2/M8 /guRx8zXuxsWJ+qDQ/iDUYCWCyNyBnENMQgfxqjhPcbeVwLE5dXbEfpLUJnT+6zot5EG gUTy2Pcuyu7Hyn9wAzrjm+iY3J3CgsdALvK90CPFljXVdfVZHOYrhJuhaNDL1DOvOrAx TKl+Zqir3mZWk1JsVCr7PhXSGZDZxzH4rhkPdA4l1wSB4+4obPpxCGOhVNv9SsT8oTK5 KCzR2pS4HHOuZFb8W15vBMMcaA6QIC301YJUzNc1q7dnC2sSsGxiEdGRVs7EpcWVo2Fm L1nA== X-Gm-Message-State: AOJu0Yw5u0vwMtWDCInoW9XycJ7mS3rFGa13B42EQq9AyXbL0v3AgDTY C1wDMPQt90Q2+bsoVG/J8T0XAqow+MIHI4yqcedLguFpLpMyJzD8eIciVpGLiCjiKoM= X-Gm-Gg: AR+sD10SK4Gh3DGw8k+iUR0Vh7XygQSDRH8ajNqUuCGCEoeVtlkhAG9Hr71s7S/nr1z D0YlQ+uGA/k0gQhtTkzufJzai/fWZNFsJk5wKlZe/dcc8u/Utwkr9+HgFybZ1/4DuvPEaWRCEOE A5YWAnqFnLfyb4PZ/lSajuKDeUBZRlbHglE2Em0hn/Inc4gzSF7nOs8khHxYYljFhb2Nq84WcRU /yE7MHym1AqKNo4zKbqJXfhIXrXppNFdkJ28zPMOAgbFyDoF/jQbwB8jvPE49CdwYSWeJqN9SLQ ZgAy50fnXXf7KBGEGCURSviQ/0ycK8ZmryLj6SbiqnVPcKienotBhVBj/3opg3uyhUNHmkujpNY RdXGG1/LJjpNWe0UrzU05zz5ACztup6WgWjwZg2U2nXA860fQTN/mGRljfNuss3A8ogtNrZsJU/ QdDN4UpM6yxE46112xosj3a1bbuCVM5YdyA/FFNgrD3DZNqGQ= X-Received: by 2002:a05:6808:6d90:b0:4ab:230c:5faa with SMTP id 5614622812f47-4b2bcb6030dmr379911b6e.18.1787097451606; Tue, 18 Aug 2026 16:57:31 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:55:57 -0600 Subject: [PATCH v4 04/40] bsd-user: Add signal shims sigwait through kill and os-signal.h MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-4-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Kyle Evans , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4033; i=imp@bsdimp.com; h=from:subject:message-id; bh=16GTAWWUMqRVCxpmojAL0LGraqQ+5bPNS/76sTj3JFY=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPEkxYVA4GLkL9DMkI6mreISclg60rAwBrxPc TU62Tz0CmOJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxJBsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQBi6RAAzUdZVskmn95qHwT+m4EPIosUer9M1Lw HDxyXbjNovZVoLjPS8fUev/BdMX8cnPK3XJjP/qk5mvCG0ptLh9ztxhllZWfqei1b0gbGdV6ruV uaHOl5HchcWG5NucypzeiMet3Rn2Xii24aGyQOgXYPyBO594Y0VzjpCcFtvFaYCrxDVdK6X6v5j BJaLWvSTgKyZUGespv25pltQk84gQ2Hn1PU2du3ZOAopKHNvWW51UtXpxOLO534Rl5bhhTh4+LK K1+fQTVznzCM0IJEE2SOXvLmG5cDV+Nji3RnrbwTV71tjEwX09S67zzD9qKkTpeztfmAJ4v+LSG C47ZEErpaWCVM5C0xNgdnmjVowD2oqcmbVR0PVYxzy3hxJHFIv4XkLGhxNpoTTU/f/FEzD+2+qs jhZskSvvwK6W2JRGkcqpFIgDfRZxJ4PcCOEdbdg2cRMytMN3U5QlvrZx5qTyszr2RNmvbbdlg7E CwE0aZRkujT0G86/h6+dJ4E967bU8iO6rhE1XTGFNpNkileuxNtQ1LukBnEaLj66u8YVYd0x+uJ HVCs7yb+5FKxIg6md21TvU88Wlu/1ZsZNKNvJ55RI0BQNcG6Wr6JqD8mkBBuOGEb0FEbkJEe8R7 DKzA8r4UGG5Ol/xzvxVQ5I8bQWeyevGItG7EdH/Z3k2SopEUZchI= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2001:4860:4864:20::30; envelope-from=imp@bsdimp.com; helo=mail-oa1-x30.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097543383158500 Complete bsd-signal.h with sigwait, sigwaitinfo, sigqueue, sigaltstack, kill, and killpg. Add FreeBSD-specific os-signal.h with pdkill. Signed-off-by: Stacey Son Signed-off-by: Kyle Evans Assisted-by: Claude Opus 4.6 (1M context) Reviewed-by: Pierrick Bouvier Reviewed-by: Richard Henderson Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/bsd-signal.h | 80 ++++++++++++++++++++++++++++++++++++++++= ++++ bsd-user/freebsd/os-signal.h | 20 +++++++++++ 2 files changed, 100 insertions(+) diff --git a/bsd-user/bsd-signal.h b/bsd-user/bsd-signal.h index 49e58d7436..09c5b30913 100644 --- a/bsd-user/bsd-signal.h +++ b/bsd-user/bsd-signal.h @@ -148,4 +148,84 @@ static inline abi_long do_bsd_sigreturn(CPUArchState *= env, abi_long arg1) /* sigsetmask(2) - not defined */ /* sigstack(2) - not defined */ =20 +/* sigwait(2) */ +static inline abi_long do_bsd_sigwait(abi_ulong arg1, abi_ulong arg2, + abi_long arg3) +{ + abi_long ret; + void *p; + sigset_t set; + int sig; + + p =3D lock_user(VERIFY_READ, arg1, sizeof(target_sigset_t), 1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + target_to_host_sigset(&set, p); + unlock_user(p, arg1, 0); + ret =3D get_errno(sigwait(&set, &sig)); + if (!is_error(ret) && arg2) { + ret =3D put_user_s32(sig, arg2); + } + return ret; +} + +/* sigwaitinfo(2) */ +static inline abi_long do_bsd_sigwaitinfo(abi_ulong arg1, abi_ulong arg2) +{ + abi_long ret; + void *p; + sigset_t set; + siginfo_t uinfo; + + p =3D lock_user(VERIFY_READ, arg1, sizeof(target_sigset_t), 1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + target_to_host_sigset(&set, p); + unlock_user(p, arg1, 0); + ret =3D get_errno(sigwaitinfo(&set, &uinfo)); + if (!is_error(ret) && arg2) { + p =3D lock_user(VERIFY_WRITE, arg2, sizeof(target_siginfo_t), 0); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + host_to_target_siginfo(p, &uinfo); + unlock_user(p, arg2, sizeof(target_siginfo_t)); + } + return ret; +} + +/* sigqueue(2) */ +static inline abi_long do_bsd_sigqueue(abi_long arg1, abi_long arg2, + abi_ulong arg3) +{ + union sigval value; + target_sigval_t *tvalue =3D (target_sigval_t *)&arg3; + abi_ulong sival_ptr; + + __get_user(sival_ptr, &tvalue->sival_ptr); + value.sival_ptr =3D (void *)(uintptr_t)sival_ptr; + return get_errno(sigqueue(arg1, target_to_host_signal(arg2), value)); +} + +/* sigaltstck(2) */ +static inline abi_long do_bsd_sigaltstack(CPUArchState *env, abi_ulong arg= 1, + abi_ulong arg2) +{ + return do_sigaltstack(arg1, arg2, get_sp_from_cpustate(env)); +} + +/* kill(2) */ +static inline abi_long do_bsd_kill(abi_long pid, abi_long sig) +{ + return get_errno(kill(pid, target_to_host_signal(sig))); +} + +/* killpg(2) */ +static inline abi_long do_bsd_killpg(abi_long pg, abi_long sig) +{ + return get_errno(killpg(pg, target_to_host_signal(sig))); +} + #endif /* BSD_SIGNAL_H */ diff --git a/bsd-user/freebsd/os-signal.h b/bsd-user/freebsd/os-signal.h new file mode 100644 index 0000000000..fe102c33e4 --- /dev/null +++ b/bsd-user/freebsd/os-signal.h @@ -0,0 +1,20 @@ +/* + * FreeBSD signal system call shims + * + * Copyright (c) 2013 Stacey D. Son + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#ifndef FREEBSD_OS_SIGNAL_H +#define FREEBSD_OS_SIGNAL_H + +#include + +/* pdkill(2) */ +static inline abi_long do_freebsd_pdkill(abi_long arg1, abi_long arg2) +{ + + return get_errno(pdkill(arg1, target_to_host_signal(arg2))); +} + +#endif /* FREEBSD_OS_SIGNAL_H */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097494; cv=none; d=zohomail.com; s=zohoarc; b=TgzHkdSOrUu0+CZzWSuzUTF8Z7IEboX9luBWTcMidIiH8tmKeFnRRhrX46Hg4UKARU7m0fj7PHV4QHoopRIdshms2JT6nfTr9UjZlvAKk77LKtJNSlMQS9cq7pv25mFOpUJK0tZykQK6ootMGswe05QC96QXWt4Qspw6XdT5vLA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097494; h=Content-Type: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=Xb+YdlNPBadeoze7HAOEC8N9fCWlgAmWnIBHdbTxjjg=; b=TeclCoRO7ziALAwkABlrx/kQ/r6HlcsehkQ5gKQVtGaKJccw7kqKh6FyJ3KWb5bOku2SUqeDmfb15KKN5bg/CjOhfaRZPf0p5WIZ/HKUARwcUNHuTt5p3FlWVXmfrSRml95DT61lNwjMrf8F+gURqfAs+gcmSs1nqqmstbbzR4c= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097494034419.45121116917403; Tue, 18 Aug 2026 16:58:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTgY-0001wv-88; Tue, 18 Aug 2026 19:57:38 -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 1wwTgW-0001we-Qh for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:36 -0400 Received: from mail-oa1-x2a.google.com ([2001:4860:4864:20::2a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTgV-0005DD-8F for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:36 -0400 Received: by mail-oa1-x2a.google.com with SMTP id 586e51a60fabf-455ee8f529dso147933fac.1 for ; Tue, 18 Aug 2026 16:57:34 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.57.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:57:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097454; x=1787702254; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Xb+YdlNPBadeoze7HAOEC8N9fCWlgAmWnIBHdbTxjjg=; b=pOEK2Zq738Nlr6swiwK3OQBZRhmk8adPvoLq7KM5dV86OFdFH2+7t9V5TXRp+MPZV9 HDe3jCIzqsPNF+jWLcTcA+be9tZFsLLz1J8ZClEDSMde7ucjOkoTnmFqW23RFHO7wbjl jV+m2aHE2H3s3y6hpXcg6zVdmOOIKL/RPREGSu2YqyIEFOBihvbZBtQtHZ8JpX2Vd/4Q i2IFbbyr4PdydfBavYu+sNvMKxPURlOfAbjgT7W6bLWAo5Ul+adJN8Dg7PqtEykapI6S nDw4kCAom5hG037+MllePFryExkZxATiv8foBOIEbe+DD/zfhY2s6An3nmyXniPkiqS6 Z+Zg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097454; x=1787702254; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Xb+YdlNPBadeoze7HAOEC8N9fCWlgAmWnIBHdbTxjjg=; b=D1auRZSBfrMGHK4e5Lxf4eA1Fu1slzBf5db8XMv5n9U/3wu9CV1QhCx92L3Gh/gcID a8LAIxfyyjtCk3JwW8fkulIp7+JJyiE1nE9cdfrHHhcDDV+/JGh2STtEqLEfm8kAdkHn FqaU3zHGR7YSL9md7nA8zOrLKzL5FTwEBLRMuazGCdDvfjOXuT9LqyfOO/DMno9kzCNQ QJ1/lYv4M7JDZC9KFO94a2An5b7/4pPK6fpAXW+Aosy0BkEFVkeAL+/61Ma+LD9Ioxzp t3BzmAW3oFlQBFdj49c2MYHyofNz6sa2EY3L7QvlDcWKnU0APSJP0ZvYpMH1Q1reg+WZ hZSA== X-Gm-Message-State: AOJu0Yzr7OlE2gTPfB87d8yWcsnrnHT/cHhc1uh76PkP31uFd/87qL36 0HoqwwITAb381WfBHdl1/o2UUWDoAjVk61NzdPNjUm3qHL5ut9/MOCSl+msMvIlWyBjy2NyqmUv foy1l5Fg= X-Gm-Gg: AR+sD10+WXoi9QYIhtSPi5rtlsW2zNHwsV7zn4/osTWKxDkCtOHWZbNCnJV8N2Og9Bt Ec5I6bqCMaa1nbXLA1wFO7Jn0EAii566P0IdGXaiIxM+OgP/nDtUBtz1XlpXpLBIPEi65tNm394 GykNoAU13dPXx0h/YHSMsWZrpwddSuv21wz+wfsQiOJDfdkgfTgX7iVXXGEcwowghdo9v+s1ev+ hW9lN6Gk0wgMmeSK7PKYKpfuOIjE8GHZFKKoYbZSEd0ij/BdnsBJDVOx6wm7Bru2mmaDCr6rBsj 9N6wrV3tuA/ujYNS+C/Y4RQJeGDxa2oOGHodu4GJ6dn6w/VfON3BOwl1j71vc5tCujeHJnChFcB oBzDFgHyPOx4Y8k0tIKde239b3PuxjdUqG2ISmP4Wk3yXnoB8Ru5rMgWG1pX5RexZWS49R4YtDH ZmjpnFY7z5fRc292yE5sP6qObQXGdCQNluIJDvS6UO2VYR6qw= X-Received: by 2002:a05:6808:4fe5:b0:4b2:69a1:26e0 with SMTP id 5614622812f47-4b2bcacd70amr399948b6e.15.1787097454061; Tue, 18 Aug 2026 16:57:34 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:55:58 -0600 Subject: [PATCH v4 05/40] bsd-user: Add signal system call dispatch MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-5-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Kyle Evans , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2738; i=imp@bsdimp.com; h=from:subject:message-id; bh=36BJktEl6AtJLhxPMlpnlHsCaLT7KBc84/1auyINFA0=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPEm2CQJtotXk19JVdMUKS4rjkvJ64IIsmCHN 7XV5PmbXkiJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxJhsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQBbyg/9EVUABfX/JTANAjb0m5xUsrDAAXUuhps AZolyWGq1+e/uTUWqf9DqLnylE7xvq1QN0uNXCBks4CiZCBsnpGu3Mp7Ta0H0u5kl4/KfjMOlWe ktaTdFEuk3xKWMIL+D8FAMVBicgPBCHSJm+jt0FJhjAWLgAqNrRg8VUq6tdorSPnOLlY1W6bNXr ND99vwngI+EWj5o7SP0SFsH6VGfnOXMeh1r0iVXSU/PtvRahDJVKJiBHIOraBpp+K8kowi3iSlm Ef1Z8IKJ0T5tdng7/CeDuHaVnloJXt1shbbFVFjodfr/dOfB4bgaJ99jBviLcFvQ0cfGDHnp8lc FBoqhQP1qq3QkueETca7Q2AoqpYc+HPxpLtQceSusK9mfItMjljnD0TnO0xTX2GJmAdZexOsg7P 0YelxDQ3XgGasT49up7HJz3NzKk6TyCbimM5mNDRbJoyXwn8NHSn6DPLdh6JpAestVaMk3XA0I5 I8GhQfnZ4+ZX88ZsXtQ10+S7XnAY2XTbAuyQiLnv3YVCMmoAcwSjyOpfIktGSgI72xwBPUIj/PJ 3OgX0hXVhFsJ4fy6h9ILHxOhzUk8+6h55K63fSURlggfRy4B89DgB5+Z+QBeRMRVlzueCnNxGb+ LxnQmDxLuwgug5UbXDo6s0cnVpJGIiqU2UT7zQkUcR90LFCdI8to= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2001:4860:4864:20::2a; envelope-from=imp@bsdimp.com; helo=mail-oa1-x2a.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097495998158500 Wire up the signal-related system calls in the FreeBSD syscall dispatcher: sigaction, sigprocmask, sigpending, sigsuspend, sigreturn, sigwait, sigwaitinfo, sigqueue, sigaltstack, kill, and pdkill. Signed-off-by: Stacey Son Signed-off-by: Kyle Evans Assisted-by: Claude Opus 4.6 (1M context) Reviewed-by: Pierrick Bouvier Reviewed-by: Richard Henderson Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-syscall.c | 48 +++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 48 insertions(+) diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c index 7fefdb569f..06148fe3ce 100644 --- a/bsd-user/freebsd/os-syscall.c +++ b/bsd-user/freebsd/os-syscall.c @@ -43,6 +43,7 @@ /* BSD dependent syscall shims */ #include "os-stat.h" #include "os-proc.h" +#include "os-signal.h" #include "os-misc.h" =20 /* I/O */ @@ -950,6 +951,53 @@ static abi_long freebsd_syscall(CPUArchState *env, int= num, abi_long arg1, ret =3D do_bsd_getdtablesize(); break; =20 + /* + * signal system calls + */ + case TARGET_FREEBSD_NR_sigaction: /* sigaction(2) */ + ret =3D do_bsd_sigaction(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_sigprocmask: /* sigprocmask(2) */ + ret =3D do_bsd_sigprocmask(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_sigpending: /* sigpending(2) */ + ret =3D do_bsd_sigpending(arg1); + break; + + case TARGET_FREEBSD_NR_sigsuspend: /* sigsuspend(2) */ + ret =3D do_bsd_sigsuspend(env, arg1, arg2); + break; + + case TARGET_FREEBSD_NR_sigreturn: /* sigreturn(2) */ + ret =3D do_bsd_sigreturn(env, arg1); + break; + + case TARGET_FREEBSD_NR_sigwait: /* sigwait(2) */ + ret =3D do_bsd_sigwait(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_sigwaitinfo: /* sigwaitinfo(2) */ + ret =3D do_bsd_sigwaitinfo(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_sigqueue: /* sigqueue(2) */ + ret =3D do_bsd_sigqueue(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_sigaltstack: /* sigaltstack(2) */ + ret =3D do_bsd_sigaltstack(env, arg1, arg2); + break; + + case TARGET_FREEBSD_NR_kill: /* kill(2) */ + ret =3D do_bsd_kill(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_pdkill: /* pdkill(2) */ + ret =3D do_freebsd_pdkill(arg1, arg2); + break; + /* * sys{ctl, arch, call} */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097550; cv=none; d=zohomail.com; s=zohoarc; b=et60kYOcu5dVjrD/yGCXoqdThsFESXcVYMmF/QmoXCCOxqza3E1oAMlz/PyBPEqCr9K9haQaWHoLzhI2HuHmyLCZbXBTCB43mXcKQGnu54HrYAMY4sTb8F/2k/chlGYPWkPa5GiLUfohY+WwBiIyt12NZQAHoaZxjnQJ9ZD8fZA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097550; h=Content-Type: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=wWM7OUNvTHuS2jleASEOMT1hIEbUG/KIuuXdOsvSLdY=; b=gkw9UnP7h+pjwoXal2vU5ZEwASbFk2AU8+R6DNHFZ4MZo7QM+J29llczrLqHZotL+EW8930BnY//wgBw+QkT2e2aOZXvwPJqxUCFey2tbr2dntlgXx2If1mX2fl0QVt2tEyinNg4raRnjFjBjY7KTOsqIws0d55f8+wAFipi0h0= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097550233591.3114895556982; Tue, 18 Aug 2026 16:59:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTga-0001yI-Mx; Tue, 18 Aug 2026 19:57:40 -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 1wwTgZ-0001x1-3Q for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:39 -0400 Received: from mail-oi1-x22d.google.com ([2607:f8b0:4864:20::22d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTgX-0005Db-K0 for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:38 -0400 Received: by mail-oi1-x22d.google.com with SMTP id 5614622812f47-4ab47c40e7eso371257b6e.3 for ; Tue, 18 Aug 2026 16:57:37 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.57.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:57:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097456; x=1787702256; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=wWM7OUNvTHuS2jleASEOMT1hIEbUG/KIuuXdOsvSLdY=; b=giFOZoCUKOY1dC291LZ8kBhYLlk5B8MZlOncHUZUHa7sBgd31Siue8xKyp8gUf39bn Yz8IYepLqM8DUYL9H+QP0C/siHqCsIUfIKOYwfB5kybUzgbwDwU/FO4PMcbqj1cMKdTi szIRgze87FtX3IrxJcrfAF7K+2dZvqIPdyUhQUyRyZ+OGb2O0m8z7MotPSJ0O3277OrG Ur8nH2RI8IxGrr/El6ct8gIj+W0XG+SYJ9t2W09x/7RgUhczVKFUqO7QDUoH+ppe/ss0 u08ioRSflmkS3kcDZfK+qPjW+UvDCDbmQNhpJwLqjct+a5wG416qglgzxgUSCljhFztY 5/hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097456; x=1787702256; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=wWM7OUNvTHuS2jleASEOMT1hIEbUG/KIuuXdOsvSLdY=; b=n3dsBUrzgi2X4t5FClPVUIPP2jPW0z+GyrG36y6CKTV4ah8U8fL8AhXDtHuQ1RDALn a1zMBObw8h8DeiG2DAk+dA3ESvSGJ2ojnTfuIhMhj4Qvs80dVMxrka2fwiQE36otwPEv 88M1Q+GsQX72d338oLAI/4YgRVMsvDRpC3dmtgpfApzNbf1WU2QMqA2+za5RcJ7SBZXE wh2WQjakjR4crgt/1ZP29rfHJjQoY6m6A8/YA13OXCMHj8LcYPTXYgXHEKQWerukIZPv 0TNYXG1JFT64ba0WFkONoVjXGjR0q5/dLRtaoeMoK32cGLJQpCxmH4sKSVCpGauGuoqt cuxg== X-Gm-Message-State: AOJu0Yx/kc11RPYeTlQ82UcR25F/uoD0TDRV9qHyIH7SyzjJKryc0acv d5ss4R8UmEcHO8SpN4ICTkVRdbQZi3nPKOpNRbssJMtbKGQ92us9c1fOhzTcB9UkaZs= X-Gm-Gg: AR+sD12bNXrfdNtcOWm2TEhK3pXfKc8xnC7EMBE03ydnjcGI++br4oVX194aUD+YU8h 9VZ/izGIRtI82BtK0shE3kNZYpTvdc1LySsmglFJPA3BzqF9VzPEgwHRTq+ispm48mP4UNgBKQr gPkbZB+v6SQ/jKW8nNTmXxVcvBNXCctdEt1KlJPQgFEaNW2s38uEKA3evYEfj1Tk+uKk5sAf2fu c6+h8k7gd+6X9jQh/p3y6+Vra6Scql1oig87aADhCjN57kULTNp9UUB1Hhat1FBLvafhVV8cCHh ppB6tXmGVUMMgZEn+C7Qmm9/zAljod79C7oLKepehWxJ0i2v2unfsWeCFPEpGdWmU29hk74H3nR yM2PXse5V3EG/eQAKSyytWWvzcYJnbwg2PjREUqx62mdFal5U+16hkXUbcabC66Lm97tHF0Yg6y 9ws3aHb+HjHeUHebg9bDz4c1xiUjEhAr8gMxF6ZhCZuyPVR1gB X-Received: by 2002:a05:6808:f13:b0:4a3:fb6c:9adf with SMTP id 5614622812f47-4b2bca267dbmr333480b6e.12.1787097456422; Tue, 18 Aug 2026 16:57:36 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:55:59 -0600 Subject: [PATCH v4 06/40] bsd-user: move sys/shm.h lines MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-6-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2133; i=imp@bsdimp.com; h=from:subject:message-id; bh=VDw8FWYXjWq5IrVIJSTvSQkZ9EFhBBdS1PtzUEIgIcM=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPEnzo48ti1FapOM2ajbkbwkQlkMf4o9DPSE0 d47H8tb/oqJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxJxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQDI8RAAigjX4Em74c8mau4bVgrAYk0TxEmOxnd E6GlQwaBs1z7TWikX+A+d6nB13/jf06pRow4g6kfq5Rl7mnvq2JSvgYVmar7SgT/I5AQQSPBbdy K5r/EOQnSYQPkADA2jiqS8B3c4nf5tlYnh3DmL3bM+7JZR1tJ++CeWf/NOYZORztNKGbfa4vUxO /0gJLaCpPT7Lh6/A6CTq58gpGsx9VnmUopM4o8hzoP3Sz3bBSMtnDi7bezWDvU0rzNbWRSljrR8 u0V4xNOSHraYV+37L/iBbVv9F1i3fvRYWMSlZIrncWJ12aR0DWITerOuwpdf/Gp6tTPpvi2qB0f AjmOJjnuQ0P+okPSlzWxzzeWsRkxBb8o55AZQ9ztP665ze7CmQUP4I7pxKZ577/SnE12mrlEmDF q2V/VSx4iilSUc/U8wc4PCztKlt/u2OmBGjnc53QGiPypkmA9UxYQEtT4KMDqEvlC1iyszzUwbq /ZS2f9EeXTWTyC8QYOxPH/k9K5BebEbKaSzRHs/QkpWY0qAweWOil7MxEaWHFihln8gIYQfQT6/ IRDDRHGSu1zTrPO3vO7XKav1iD5CDq0Fnqo44dRccYa9Mie2k2wb3jjcbkYUlINad+eKDzq9QA2 V370lB87cx3/I1eMnPJT1mkmC1da+imtgdt1UB19Byuz2fxr7Lzk= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::22d; envelope-from=imp@bsdimp.com; helo=mail-oi1-x22d.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097551400158500 Diff reduction with blitz: move these lines to the same place in the blitz branch. Signed-off-by: Warner Losh Reviewed-by: Pierrick Bouvier --- bsd-user/syscall_defs.h | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/bsd-user/syscall_defs.h b/bsd-user/syscall_defs.h index 0612be8bbb..7e70d6ad57 100644 --- a/bsd-user/syscall_defs.h +++ b/bsd-user/syscall_defs.h @@ -42,26 +42,6 @@ struct target_ipc_perm { #define TARGET_IPC_SET 1 /* set options */ #define TARGET_IPC_STAT 2 /* get options */ =20 -/* - * sys/shm.h - */ -struct target_shmid_ds { - struct target_ipc_perm shm_perm; /* peration permission structure */ - abi_ulong shm_segsz; /* size of segment in bytes */ - int32_t shm_lpid; /* process ID of last shared memory op */ - int32_t shm_cpid; /* process ID of creator */ - int32_t shm_nattch; /* number of current attaches */ - target_time_t shm_atime; /* time of last shmat() */ - target_time_t shm_dtime; /* time of last shmdt() */ - target_time_t shm_ctime; /* time of last change by shmctl() */ -}; - -#define N_BSD_SHM_REGIONS 32 -struct bsd_shm_regions { - abi_long start; - abi_long size; -}; - /* * sys/sem.h */ @@ -93,6 +73,26 @@ struct target_semid_ds { target_time_t sem_ctime; /* times measured in secs */ }; =20 +/* + * sys/shm.h + */ +struct target_shmid_ds { + struct target_ipc_perm shm_perm; /* peration permission structure */ + abi_ulong shm_segsz; /* size of segment in bytes */ + int32_t shm_lpid; /* process ID of last shared memory op */ + int32_t shm_cpid; /* process ID of creator */ + int32_t shm_nattch; /* number of current attaches */ + target_time_t shm_atime; /* time of last shmat() */ + target_time_t shm_dtime; /* time of last shmdt() */ + target_time_t shm_ctime; /* time of last change by shmctl() */ +}; + +#define N_BSD_SHM_REGIONS 32 +struct bsd_shm_regions { + abi_long start; + abi_long size; +}; + /* * sys/msg.h */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097747; cv=none; d=zohomail.com; s=zohoarc; b=DH2RAtNVYsMYef10AfTIC+sj0Di/5sHDvVIXhWfjY63YepF/eh52c4Bfnyp8MXWAvIYIokczLbUZCDvCxuVS5gokJt0o9FFvOvLaZQJpoQBV0fGTO/3PEItGHF1mLeYmDFMiPtoAkHM6E9pt0xPewz4xqhMb3Dr7CK3pri3mnU8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097747; h=Content-Type: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=uUMY9WHuTdgvyHkA28I65k11CWVDaB0ciMNOALHZxlk=; b=FJoFd2KpGGLHsy92HXU9ALPNQIyTU2LkR7IiuTwjrcY+ZwLtcu0+aSRagDCNepVMAhL/gg3QgANabVyFSlvWLWrvauXNmjgmSO8Q8h7lBnpXgBYQ+dZitoF9IqpM1Awf1pAuSXtonjBjTMVhxnuknaqgUpCad9dz8j+M9Hm+jZ4= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097747220286.3533897111215; Tue, 18 Aug 2026 17:02:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTgc-0001ze-N1; Tue, 18 Aug 2026 19:57:42 -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 1wwTgb-0001zT-St for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:41 -0400 Received: from mail-oi1-x22d.google.com ([2607:f8b0:4864:20::22d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTga-0005Dm-H9 for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:41 -0400 Received: by mail-oi1-x22d.google.com with SMTP id 5614622812f47-499f6e0bbabso354428b6e.0 for ; Tue, 18 Aug 2026 16:57:40 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.57.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:57:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097459; x=1787702259; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=uUMY9WHuTdgvyHkA28I65k11CWVDaB0ciMNOALHZxlk=; b=Z5kGs7K3mXW+SP0GagBqAQXdIV+v1pv1zBgiKCXMXRLwys5jh4ofoOj7ziuRmc1gGl 0ddfcxKM+qrmwFesC2D9WBJAHk8syyneGewvepssz9/dJHP8+FayvLAMw4zY7X20xL2L I89NX9d4Oqgq3NVJRAru7Ivsl19guMbAzgGKL1piNw42+zfw9dEAU1xn3XbSQgxi21i2 gLYnGRfwZ9b+guX/fMwtYLzbHLbYvMnYQ9kCJV0K7NVn7q3HwjLiTNSeu7CxCdFJmlmF 9M5BUJvKqaz9bpF96KeDQmRVTe+wDj8YB7/tmIwWbnqGozOM4kFZpTOyDbq/wfRk2xSq htNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097459; x=1787702259; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=uUMY9WHuTdgvyHkA28I65k11CWVDaB0ciMNOALHZxlk=; b=H9lAKNfdV/f28SWfpZgmDeBLlxugMHM2h8vxQkEg1lPCRMMi6aAKi73twB1kPrNJ84 pcaQim16PY7eVCgm+56XJvN87SSho0iuUG9GHDdBWMNvN2xmmtssOnn24qD8iEB2B6OQ RiOjBuwsqfbMy55PH2OcmHlUE5VT0R4m7ZP/40yN8i2TT6S6xMqYIfcl5J8ejF3JbzuR eIkRlTC/qvzff8rjuNJiOggAH2O5vPfHvuL3wWolFRA9WKHLkpN6jetyW7RGTM+Nm25Q QyXlEeAX0vig/2dk9aRxe/kcgaajm2XhN6d0J3ju/Rb4sBooFfPZNRTQGFEsn0bo4+jd jUAA== X-Gm-Message-State: AOJu0Yya1NbuWoKeGtFSRfNvzIHRMdnT9GB/mkos7iP8tLcKf9XXeQtv qIcGcaIiFMnX1xrWH+iYwNPPYYAMolx1aJ1Ar9yWZ/AkES9tfX3AYO3y4f8MOKDr6HpbNCSQ1MM jX5oSXNU= X-Gm-Gg: AR+sD106XC+0WwKG7yxE6bfkk8a2CjdbYc7quqjqasB3Ub9ix6g+Bw+fiyvjULx+SXR xuMzqBWSIcLNpWUqOHJvMGiu1YhxvHDBDwlZ5x3bn+f9FbALy8IyOjPjmmdSxvSsyiO/cI3hYj3 tsSN/UNuxzUnDyP1uTR/9Jej2P3aNHgf9nLwxXkOWOuq/BLV28g2fGwSB3oqh4eQpU0ljt6lb4o OJ9zbk2qbcbqlNJp2ntnrSbZzA9GGiNxC0MfwPLjkoa+3qQWqOYlb15bxTpsbO4EYT/cfTIWF3Y a1jUcJ3czZ2VT/vVFp3Ub5Wdxevfr+WaB2fDR9hn/YlD6PDg9QnNU7A121mwmw8c3SkcOk89Tu6 kk2Y1gwNduUUq3IwXqQMKcjW3HF8YM+ZU8QJINLxcGu19coZ2yxkk6SrUAqi+Y4+N9a9Vam/coR 67rtoXi8h5VK/FLY00TrPoHamopz61kn0PSAGkiKD4+V6j/8JW2bi692OUuw== X-Received: by 2002:a05:6808:198d:b0:4b2:8e2a:295 with SMTP id 5614622812f47-4b2bc46de25mr460973b6e.0.1787097459393; Tue, 18 Aug 2026 16:57:39 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:00 -0600 Subject: [PATCH v4 07/40] bsd-user: Remove mmap defines MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-7-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1360; i=imp@bsdimp.com; h=from:subject:message-id; bh=KjLnsMmQjxyrIgZ9EdNkxfh5tG3P37D0w8anGK6QIfQ=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPEp0ylwa4efJbOLDt/NUp/rsppaKCgsufC0V b0idTrM1taJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxKRsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQDx8BAAhW/Efp+OSRi2WV0CM32Wbnq0MDzHmhg ZJ/rKIs9PZQ6U5DFxRP9Glk17bGqmUB9TujLicJRfZXRueolAgv2cBmM4O/II3+IjVNtpAokZBr bhGX18cz57AsUT3Ser5GU09HAEO6EuCRnGTc5tPWi6pZ7vSr+90+ZNMImgo2Q4DXyr6/FyXUm9r VJisBNXzrkF6CeZHHglqXbZD4QRsquaPXtIxtGcweq0urOIdFP8XMxOb5z3ppdChNwNRf69nzxX LirBtNd2l0WfIJ93IcZ7vTYrSChGku71tyOwF99p2NQNHvgLUOzj+DqXsB6xs7iR140c4JLKFrA 5L5fhbci14ky/Hj0xDS+feOVsv0UDlYsrfFMupgvot3RIFA8Biqw5IKRZstEQgWHBq9XXMU9KTx KJSQTah0+bfemAsaUIsCnSJ4vOBvmc6nvwqV5nWwnq23f0uFKgDsnFRyYZlc8PN6L3oGnxu2r39 GLTKWtR43VRrp8Wji3mZ0/yAUhBVJxSR6ZXl+FlvMOrOmW739w/s0AB3DUKe3j8BcCPZltK7Z/K SZ+ShnQ2BoMEaCb4WvclRfxUSzVLJzcchRI1VyRhBP3/oZUufIZOEe4/+NI0SdUkC1QnXPjaHK0 fFMmkjAudeSkcACLi8tb/bkFzmUMbi+90Ol4SRpNK/eTrViBx0A4= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::22d; envelope-from=imp@bsdimp.com; helo=mail-oi1-x22d.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097748345158500 These defines are not used, remove them. They aren't in blitz anymore. A future commit will cleanup several mmap issues, not least the obvious mismatch in the flags here. Signed-off-by: Warner Losh Reviewed-by: Pierrick Bouvier --- bsd-user/syscall_defs.h | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/bsd-user/syscall_defs.h b/bsd-user/syscall_defs.h index 7e70d6ad57..7646a52744 100644 --- a/bsd-user/syscall_defs.h +++ b/bsd-user/syscall_defs.h @@ -121,20 +121,6 @@ struct target_msgbuf { /* * sys/mman.h */ -#define TARGET_MADV_DONTNEED 4 /* dont need these pages */ - -#define TARGET_FREEBSD_MAP_RESERVED0080 0x0080 /* previously misimplement= ed */ - /* MAP_INHERIT */ -#define TARGET_FREEBSD_MAP_RESERVED0100 0x0100 /* previously unimplemente= d */ - /* MAP_NOEXTEND */ -#define TARGET_FREEBSD_MAP_STACK 0x0400 /* region grows down, like= a */ - /* stack */ -#define TARGET_FREEBSD_MAP_NOSYNC 0x0800 /* page to but do not sync= */ - /* underlying file */ - -#define TARGET_FREEBSD_MAP_FLAGMASK 0x1ff7 - -/* XXX */ #define TARGET_BSD_MAP_FLAGMASK 0x3ff7 =20 /* --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097741; cv=none; d=zohomail.com; s=zohoarc; b=iWX4fB3oVLq0qTVmCA0WkjH9U3Grk8Z4A7wedTx/PxIDLkVZTRQcLVk9hWG3IAgQ9yhKAYa43l8KHE6H7ogg+9rGuAwOqU3VVDJH2SqCxNfcOY283HGd+PGDdKAuYP7QpXqtEFl0EClqYGq985CH88YvE7fxl3IW1eqov9J8c54= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097741; h=Content-Type: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=uNfk2u0RGhpCzN267GPGuMQc65uLjr+nZWGb3qRlYsU=; b=ZG2Zb/TTZJck6P683rsbtbfkhgahm1+VvY17I45Umj8SyQSBqCl3na6MdGxODYsz2InNHuXPPS1PRoUJn5elTIr2GkBrCxpbGsZcjleoswcQEcEwgU8e/TdORrLNqllHYfzd56rRGpPQZDXm5y3FDEA+AfmFJhUw7bGNpbB7RoY= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097741835428.4092160950537; Tue, 18 Aug 2026 17:02:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTgg-00022W-4Y; Tue, 18 Aug 2026 19:57:46 -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 1wwTge-000201-Gn for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:44 -0400 Received: from mail-oi1-x22e.google.com ([2607:f8b0:4864:20::22e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTgd-0005Dx-4o for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:44 -0400 Received: by mail-oi1-x22e.google.com with SMTP id 5614622812f47-4b190cdc9feso380629b6e.0 for ; Tue, 18 Aug 2026 16:57:42 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.57.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:57:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097462; x=1787702262; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=uNfk2u0RGhpCzN267GPGuMQc65uLjr+nZWGb3qRlYsU=; b=dFBN1dC4HE555eyOnR1h87oHHWPM+SD12IT9dJdVT83w/09flWYztSkNH+7LmicqGy cVGBwP6IB4FqN78AQ4CR6R0Cq7r8E3KRwgUFDd0qgRkaY9/1AkPzEWwLmZRHBZrKgqS3 JBAe5XwAD2Igdvrd3s10lqa9YtxOrZoQ+SvGr2gABZNOOKQecabFgFOR9YAtw3dPXsT3 tr1vsrByPyimE9gI1XiKiB38E3lMQqlsfqKLOj6h3Z0HkgK7YueQbRw95VrPWj8BEKSQ KWeu2kP3ChzMyHaWmvNWT0MmoYu4bpxr8Fa+8eiv2yjRIjfiGGErO/mqCdCS1lsjEUQN HT9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097462; x=1787702262; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=uNfk2u0RGhpCzN267GPGuMQc65uLjr+nZWGb3qRlYsU=; b=ErTph536T2vv5AKSQJQEFzwOLGddVmr6LgY2e5psxaWayfDKeqtQCU3Llt9hkiUaQe XE7gHQz6WPfvyNWs+ZruRcbywQrn3QGbbeY/vQmGn7Ozh/7AyCHMgzWLhptzNMS+2CJC gzIeTtyDeCx08dTbk92eWBWphwXyc5zf3YxlVI9ZVkdiNwjAGwB0xXNdpHJ8mvZKMoxI D0bEMiOUFXQYVS3CNER0kiKdkgLt4oi9pe3nyya7kff/5bU7KRZMrvcQe/jiFawpMWUI wWBQXxhvv6q1XUTsOJl0YQu4swt9XCSFTJXat97A/Tck5HDWpxJOU3A89UJa8OTp+o46 keoA== X-Gm-Message-State: AOJu0Yx3Oa/HJL1Xu2urtcWf8P/OHUeJT+0r2khBjqkoRC23SoxqGezL /XjZIKdBYhBCqz0YvCca+DYUQSegLV2dgn/FPNcUi1WKo9E699TYOqrRJQSHbXEroec= X-Gm-Gg: AR+sD10MqsffyCL+FJ8Q5BbF4p9wSjSCUddIZHnlJ5nXdcUm4xX/JFoJDszKY1xe1aS g/5uyb2f/gOoE5QiF2ovPqE6UkUeXKO725sXtmjKmGeR6Q/3/q3OXW5LmbU/9TPo1WwJRzHyxMi u8iEueihNKdog+uuc/FptrgjIbhxfVISX2ys4BP/Dq07X4CDAhAnFn7ERnJXnmEFxeLuNhxl3u7 ZKQ3IEFGoXkEEkr579E3y2fJfGx0u+eqS0QFHDP+udUK5hWIXb6ZfkwVrh3wclYEHh1XHcKMLdt 1c9qlOpxIFG87Wq6nT4emtMLMd6Qe3FOkuYkdFVVUrPrppysSvaAxveCZUxaI1m7kTDNfuqtCKr QCJLq+w2lbGr8hiXQvi/u+rq2uWey4ocSrTNcNN5LuDj1J5IJu+Ib78i8AfmXcBM0Phh6HSKI+i xT4/7290RYg3/I3UrOfzJwmZxC8M55sBN00xUjm4N+H5/grdQ= X-Received: by 2002:a05:6808:198d:b0:497:da47:df4d with SMTP id 5614622812f47-4b2bcbb6acemr330995b6e.16.1787097461897; Tue, 18 Aug 2026 16:57:41 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:01 -0600 Subject: [PATCH v4 08/40] bsd-user: Use target_suseconds_t MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-8-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=982; i=imp@bsdimp.com; h=from:subject:message-id; bh=PtCMEanQ3MZJnYzIGAK9fNWKJ69JoNE7DZmPQcTbkJw=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPEqDw0MEjRxLjauJD8ksHQ2btbIQSuC8vgaR 5vxovk8eemJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxKhsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQAU4xAA2VyTbm7XQ/rOBC/9R4tV//gWgK8WG+H XhPpc3Fr/F95Z+WN3bjumCXZavcfK9EXwCp7QDn2LxMbtwmY+NT4xmPytQJgokiGfIuojzcCnM0 qUbDY2fdSZ2XfNzQmOJmStAQ3FmIPb/kGSWGdjP0eEjVcjmIlPmXaiKQCsEGhcphohnX6+SwizM jlqJjy8TJuCHHXoamAohxG5KGJrwsUZvZVImOgCq+kOxDkpDY4tgW4lOYhBGn1Lx1Sl2XXBedvn BqlIm1PH/RA+sgcUt3JY/z0hp8LMy4fQuSPSEsbLTZKwhitjx+90xbEagWY1JMMKEoj5UfB8Jf4 gOtUfsq6txGiWcnqMvJ+5lHK/cnkMm/FPYf0iY7iOzvMseL4em6fBbPENcyK89kxPAfuZ5DKyMt 8FCj0fKRxVU3jx7ZTq7bJx0SbD99OCyo4lPz8bTo3YB8jBUGQx0y2DWgHKUe2+fiyOWGd77dVaU r4ib2vejtgDbe0VQK6968/sTL+sJatLD3OZSyZ6TgucSrCy9ST6guwA/Ar1RPm6vCBwOR6hCZF1 BhL0FowZ991JmIkVp9pUMr5ve9Xm6Udgw/7kP7AIhPwqG3jWHyNmdZqfdt32+HEIf0AuExNP9zy uhqcRnzXIDncsLnrsLWlyG+qhsK6quwJFMDU4qUnPHj07Li7PVX4= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::22e; envelope-from=imp@bsdimp.com; helo=mail-oi1-x22e.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097742318158500 We no longer need target_freebsd_suseconds_t, so use target_suseconds_t instead. Signed-off-by: Warner Losh Reviewed-by: Pierrick Bouvier --- bsd-user/syscall_defs.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/bsd-user/syscall_defs.h b/bsd-user/syscall_defs.h index 7646a52744..4af79669e2 100644 --- a/bsd-user/syscall_defs.h +++ b/bsd-user/syscall_defs.h @@ -128,8 +128,6 @@ struct target_msgbuf { * sys/timex.h */ =20 -typedef abi_long target_freebsd_suseconds_t; - /* compare to sys/timespec.h */ struct target_freebsd_timespec { target_time_t tv_sec; /* seconds */ @@ -151,7 +149,7 @@ struct target_freebsd__umtx_time { =20 struct target_freebsd_timeval { target_time_t tv_sec; /* seconds */ - target_freebsd_suseconds_t tv_usec;/* and microseconds */ + target_suseconds_t tv_usec;/* and microseconds */ #if !defined(TARGET_I386) && TARGET_ABI_BITS =3D=3D 32 abi_long _pad; #endif --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097704; cv=none; d=zohomail.com; s=zohoarc; b=ASNxtaeUh8cmpx9Rr33xPeAfaMkT2FdIH8lgq0lid9bUm4/FP+WZf+At1f+Sr7khvwAxwIcG3RuwuyGXlF6yTmqYkRtK/HzoTB5fgfN6+3g02mPy4TH96DHx9z4FO8kb/gC817zHVZ7QmHtqmSWTxM4lAz+LpDpdpnSTKHf1Ypc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097704; h=Content-Type: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=+vI7tk3K2idiX1yRleH44e/nv4o2lsTH7+NN+3NLrZU=; b=NiM8TfYCls4HPQKmt3pyVZhtRhw8nwA93SXOncMHVcVyIpSPZTz8WnE34bZbWNANRcpMo2Gza4yHyDoeJpk0i8ssq3k9rhKNKWNYr+hWA+iEnou568vt6LkD6wIwEsMHITPHijM6dtr+VkHMpUSy36stIY7blpVL/NCAclIgnKo= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097704972913.7927237771772; Tue, 18 Aug 2026 17:01:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTgi-000239-HU; Tue, 18 Aug 2026 19:57:48 -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 1wwTgg-00022q-QB for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:46 -0400 Received: from mail-oi1-x236.google.com ([2607:f8b0:4864:20::236]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTgf-0005EC-AL for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:46 -0400 Received: by mail-oi1-x236.google.com with SMTP id 5614622812f47-4b1be215736so382619b6e.1 for ; Tue, 18 Aug 2026 16:57:44 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.57.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:57:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097464; x=1787702264; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=+vI7tk3K2idiX1yRleH44e/nv4o2lsTH7+NN+3NLrZU=; b=LTJJi6vxxCRjlxJTV1GcObucP+rHYChAdaSkd4oMsIJVwcjz7fBTEuIJL8gzNkoGz1 XgyjEZmw6FJJsO9NO54ivertvX8dVSfOzx9M8ILKkNc5u2tSgmwa93xCtZWX+5QhhTdM ASFJyA7UGEaUxSlmES2l8ytDvPXVMR7EG2zcwaKn9FETkn88Mu+n1VeSVYLD0kbCnYVI 3/LVa8wUbd3mDX5piB9EBMIr+0r9PCEWGstZGdAxfQHHZ8OS2RCPcQoDKus+cO3HuFjN kSGmM3LuFXDK/jb7cv/NZdqTHbtfc4Xx5Yjg2YDTF5dYwYzUb4BD5Es+C4HAwnyWD4jY ajtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097464; x=1787702264; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=+vI7tk3K2idiX1yRleH44e/nv4o2lsTH7+NN+3NLrZU=; b=APsy/hpq3jkeeQjZ6jx9WOR3KBtU6jM2GkPXrKW+DQVvAC4v2VRMto9kY5bT33Iah/ R+EY9wzgs8WdXJyzGmSqK4AQ+OrpYmxbKOWbW+DaKWSVFvi9MYN52LgbgpZ71XVDOeD6 zxvFZdBIU8LkvC4qyEeZLGhvn/Hv/uRjpubzLc2rnqleEoU7n+EaFntwl2wB/Yh1weSq 4QvN6zIEpGTz8CQHKyyRzo5bIPU7sqTxlbFgqfeG0f6w9iCwBMVXo1qk4W6M8j3YrEbI 0js1nLFGq+E2HOJZZFCGoTkL5G+pgPfmJfXkLBLzZ1TAFpuPSawb1gaQvkBS0HfD771Z Xdyw== X-Gm-Message-State: AOJu0YwG1bB8ZeRhrhoIH4qMJH7wVRL00ibn5kDaH/XGYS094ZpDtCrB iUUxRL0aqPOYsuLudDP7JXeac1QSKnUzVVoSS7k6nWSGcDXkVWpjOdAIsoxKaV+9Ats= X-Gm-Gg: AR+sD13ptj3qWCLyrShHdm0znRVx69xg5uy80B1JHdMk9VS+RKCf0g6MdWeS7L22g0Y iFWCmRm1UxchOD6mB1MLtgyw7e+v1K476ui7IVlWv3LzE+9euyEfHaRqpN+2bnPssK/uIETlWHi OB2Z44G0wRnWkWUczt4b5QvcSPlkqSI4m6qW/6yk0SKGmXthvd85YNEi5ZUNlYOMiqI0++ZdQFV oUGPEA4+MaNogfBjgzOWo9MtFZ3dM8IPfBVx2u4WjqBhG2t3V4OM6kuTIaS0+Bd+Q3iyWVY7GRl 3slYtMzTTNeK/+uJxhQFr6S/69/Q4qFReg8LnxzvGPPtSSJIhbi/YHNlcysMctsCdCglvXm50sL vLNPGcnWVUOQQYAWPz4Ci3xnY0RQWGm7F0VE2nmo142SNfhqkpfb2bPAG/fFScRvQcZh343CkMv eQFmD+S65ZiaLa7WoQOlJm41G8H3nxCw9dGKLEl/1p5McKS3E= X-Received: by 2002:a05:6808:2383:b0:4b2:8da4:9577 with SMTP id 5614622812f47-4b2bcac884emr331675b6e.15.1787097464195; Tue, 18 Aug 2026 16:57:44 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:02 -0600 Subject: [PATCH v4 09/40] bsd-user: Move sys/uuid.h defines MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-9-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1404; i=imp@bsdimp.com; h=from:subject:message-id; bh=DodGlBOZ7iJZoKoXq53E+MNPjKiMlrQx96TcTy5RKE8=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPEsjbH4+QRBevPcpsOgwFeC3PIslm3AFT+1X BADdx+vmdKJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxLBsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQBH8hAAwQkWu59pdThhstO4gFB4EwTY6oiBR2H Yjd9nFK4KxzpWFzKoRaYfBQ1P08rKXabtK7SXSjp+bhQvA659yfEPWTN1kC+JEdnVi0Q/PmLVFO 48jVILaWF4eW9/FqYlD9RX1w2aacN3SBXW1iPnWM3DrXoEqccodgHkyo+XPNZXFasIZn1k6qGUk /XEIEbhelya9+EBqVZOdBmqfzOHb9WoeWOAJZDCD23HC3PMkRYwVRII3uXIzo7YcguKM19sxsT4 H7kRb38hCs6I624HT+DP8JH1nfbF9iioATEnJKji3SgN3kH+Hp0kBL1TFZSjSB6lkb03srPqGB3 spN9Xl3ELd2coWXdlNhl9+gBghqxIvbZ7PhZTI+R5a4ioaz1dcQI2qI7ezols856h12LPXw6/nR Vmi5RHtAFU9ujWEKm5P5HU7Do6MubE2CEPDMsvwAlAqptAx3LpTZH60ksKJyythTFmeOHqpx664 v/cs2c49q+20OCKvSzYszirGoP96RcWZNKjnyZvxYNVfyt8gadjKCIwuXzgGMcmitif/OHPAeAn ABXsHRcut1IeNkCrplDkYndzFTpXvdmuamYnpCgh51cDJrLkcRI8MVMGaHsfgP7Gl9qvHGFmN9L o4MnLM/xyuOt4d4Wugq1Ky0eK9JJbeBXUGtma990ZSb8g4VyixGs= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::236; envelope-from=imp@bsdimp.com; helo=mail-oi1-x236.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097706190158500 Diff reduction to blitz. Move sys/uuid.h to the location in the blitz branch. Signed-off-by: Warner Losh Reviewed-by: Pierrick Bouvier --- bsd-user/syscall_defs.h | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/bsd-user/syscall_defs.h b/bsd-user/syscall_defs.h index 4af79669e2..47aa01fbb5 100644 --- a/bsd-user/syscall_defs.h +++ b/bsd-user/syscall_defs.h @@ -418,6 +418,21 @@ struct target_freebsd_flock { /* user: vfork(2) semantics, clear signals */ #define TARGET_RFSPAWN (1U << 31) =20 +/* + * sys/uuid.h + */ + +#define TARGET_UUID_NODE_LEN 6 + +struct target_uuid { + uint32_t time_low; + uint16_t time_mid; + uint16_t time_hi_and_version; + uint8_t clock_seq_hi_and_reserved; + uint8_t clock_seq_low; + uint8_t node[TARGET_UUID_NODE_LEN]; +}; + /* * from sys/procctl.h */ @@ -459,21 +474,6 @@ struct target_procctl_reaper_kill { uint32_t rk_pad0[15]; }; =20 -/* - * sys/uuid.h - */ -#define TARGET_UUID_NODE_LEN 6 - -struct target_uuid { - uint32_t time_low; - uint16_t time_mid; - uint16_t time_hi_and_version; - uint8_t clock_seq_hi_and_reserved; - uint8_t clock_seq_low; - uint8_t node[TARGET_UUID_NODE_LEN]; -}; - - #define safe_syscall0(type, name) \ type safe_##name(void) \ { \ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097507; cv=none; d=zohomail.com; s=zohoarc; b=GNDk5/FZlUZEw0XbyJwvDO0t1byLSJ0tLD9BzOm2keJk6P8gD4qf5Zjy5fTBngPPRRrHAS8EzuqpVF8crJpZEMJkWiCz7tiJBFvpVTeaYnqQ93O+vSIG0wgA8d4iqsZa2bktyvbQH5tUmAFUyWys+zPsrYOZppuBPR16Y3p27J8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097507; h=Content-Type: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=ov6n3a3M5ogrqOylpDInjV/9y04Z0hk/nlpSW1eYoXI=; b=gSLPsCTFo09aQXXXDf8+3693KGlnuO76PrG1OZFT5euLaW5g3DuRBm2HN0VTeo6TNPSQdNVhfQ/F+HpkwRopZZzIcEeJkNA4miGASDV2YDt22T6rKQ6N70JyPeIjUFJUrl03vrvmeM5ucGtqPufJkGmrLY81pWTYRnftSLzJohM= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097507792448.29387421192405; Tue, 18 Aug 2026 16:58:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTgk-00024p-Tq; Tue, 18 Aug 2026 19:57:50 -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 1wwTgj-00023L-4W for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:49 -0400 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTgh-0005EK-J8 for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:48 -0400 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-44ae14b4fd6so219219fac.2 for ; Tue, 18 Aug 2026 16:57:47 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.57.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:57:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097466; x=1787702266; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ov6n3a3M5ogrqOylpDInjV/9y04Z0hk/nlpSW1eYoXI=; b=PoQM3h3ibGsHC1n6g4orfYl1YaXD462ng1qifGaRM05I+i0MhR2dH+nl5lE6iFuOVh 7kEoijThzBdOKKbJj2kXxl5WPtiT1VzEA/AVSjB1n9MAO3dhfE33chVR3ROKqdZdGxjW scOjMDEJQ3lf8/gu29JJhUKiV1avz2FZz0A3eg3Tp3efAp/XYsaNee2LEQhd+IOpai37 GRrrn6owMymJuNjxxEuc/vQc7XP5/ttMWBnf1DnM/MdLkNRxgjLRLWgtKE8H2u/MgLUM wVlq6qv468vvkJl6K0u8EHRxxjw1apgmovldYcL4/z5+5FKpYvz6w0/pEVvU+ZTAkVfJ Ureg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097466; x=1787702266; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ov6n3a3M5ogrqOylpDInjV/9y04Z0hk/nlpSW1eYoXI=; b=YzXblWxTIAqI7L5zKuvk2QAMc4zXkBjydnoib0vl2N3YkJOrrNJai/2asdSZY6SN67 jmql/D4Bh8dvt+3pNgjNVlLD91x4QS+jiPt9iUCe/pKxZ7lQyEecpWQiwQ1sacxktkPZ aFT+JHEkQWgRqU3zXhj8Qdt4rbH7BQmpflB9jZl9KtG4QANBmcP16/6s7eFBbjkAjXWi IAma1g0Xstn49MspAqa341I99xtIoPjRRJDJ5NUEHguYwPMpfNVhlBUeshi7Qb9ODvNT QO80ELtgIB6zGvgeLeW74ZcvXDECYgq3/ej5uucLGUWQ/QbK24maUcSBbjbRuWjMsn6T esTw== X-Gm-Message-State: AOJu0Yy+vtcDsA9zqiwbt767my946tKX0LhemuTephmvFJ99Sia3ScOn f42+Pd4XiGIsG14+9oCP/5XpS+2l09cN+omqpbGi+iSn8jCzfMavVNDo7mgCpZURlLw= X-Gm-Gg: AR+sD10VD31zp/IbB0SOUelI6I8eePKLAoEKFV0U7MCarugzsIcJGsNNYUtDhDOyiGG +w+mgagb9A1BQtGM23K4e6UDZ7/BJgslZawicExsDQAbRNAdEbUDE9CpXxx9gmObhGxxtYx/uZQ iEVGicVSX+MfgAFBY37Z9Md1MfLW389p1VBHVnrwTqW7azRjfnNVEpuLPc84ketIq4Ik4/6ZXDy 6c4Ox8XwOU6yeH4xfE84coCBT83L/wI0XNySXpF7TAl0QXQmYtiZxURok4LIRo1zajsaRmtSxQS OPD8iOUn9WRpykDooMusBpb6uTh88bk+xoT9clZF4HDvIB2mkOiVjgWhFCSPG5LbRzzDzNBiRiC MnvM2ByPnx+cT+Eu5HeLnKMEvoQC4l0SvKQ1au1SKW35c29LWqWQjpVRaJA+602j7hti0ICy9aD wbXCrEl225yrds/5/Vi49yyZ3zgo2kAscxMUtDDlARAMa02ZM= X-Received: by 2002:a05:6808:1824:b0:4ae:f5be:fe29 with SMTP id 5614622812f47-4b2bc936382mr301283b6e.5.1787097466219; Tue, 18 Aug 2026 16:57:46 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:03 -0600 Subject: [PATCH v4 10/40] bsd-user: Fix realpathat for FreeBSD 15.0 and newer MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-10-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1512; i=imp@bsdimp.com; h=from:subject:message-id; bh=U4QLAf4pRBB7RfP8WXIa842IBu1rtlLK+V6DfrN5Ez0=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPEuFxHBqBMYYB5nALTDjBg7aLfxTlNqo0Nh6 wE5kdcJK6SJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxLhsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQAnFBAAqub4wXAHl8cTUyeNMZOzwhvZpIwSODI w5W2lxunAMsTYUiclYIs5CfiRMII73RedlAhg4naGa2hpzpbSdxHNs/yl+/RKmjGoqJmXgAYyWi OQaH5Jma0H7oEjS972JQemJegxsPBLOkwLBL4ZSm7zGysF3yzooRJ2IiCuZdbZh2MqZsdvLJa06 6Wigz5g1c/HIpvgVyOTV0c0ACxzkSHEacGxrkWdfMu9aGWPOMMwDXnlje2gwx5bzVxQ6fZk//XW 6hpfYBGrhhRtL24YTNvP14X1v+CGpqOaQf+o50U0pAyhE5bF3mo1LF6JAuX4OvUFx26L4wGfU5T 2iQcHBtj3kalgipzDMxUYPOLnaO+KFePGuVleE9pB1ur+XW/gLvC6t+iofoy6xCtRIJetGgW3Vf fQZeUCSPikFpTx9JbL5VUIfgvTR3a3Je43HWO9i3ENpjk2sNSA4m1bpZ0iyCk2Kqq2iqe3vlL6S CSgEbW690K5tIbMbFBY9zQJayST995RqTmu0OsjTqunmRrcF9M9Qczfh6y/8YX3a+XLG8qiJ/T4 OqMe1gFpxtEBTjylDpr9x4ArsggYwiYK5epzLHJ65RjiLMTDX77yHGsYZ+Q4LmTOjKkRLgp9b5f LCdYsiUqFegrJv+ptEqnVgaiP/QoH/o8GZTJtUn56OuXlAevX26M= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2001:4860:4864:20::2b; envelope-from=imp@bsdimp.com; helo=mail-oa1-x2b.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097509781158500 Fix __realpathat to use __sys___realpathat on FreeBSD >=3D 15.0. Reviewed-by: Pierrick Bouvier Reviewed-by: Richard Henderson Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-stat.h | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/bsd-user/freebsd/os-stat.h b/bsd-user/freebsd/os-stat.h index ea95aa6344..4e5fc30de4 100644 --- a/bsd-user/freebsd/os-stat.h +++ b/bsd-user/freebsd/os-stat.h @@ -622,11 +622,6 @@ static inline abi_long do_freebsd_fcntl(abi_long arg1,= abi_long arg2, return ret; } =20 -#if defined(__FreeBSD_version) && __FreeBSD_version >=3D 1300080 -extern int __realpathat(int fd, const char *path, char *buf, size_t size, - int flags); -/* https://svnweb.freebsd.org/base?view=3Drevision&revision=3D358172 */ -/* no man page */ static inline abi_long do_freebsd_realpathat(abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg4, abi_long arg5) { @@ -640,12 +635,11 @@ static inline abi_long do_freebsd_realpathat(abi_long= arg1, abi_long arg2, return -TARGET_EFAULT; } =20 - ret =3D get_errno(__realpathat(arg1, p, b, arg4, arg5)); + ret =3D get_errno(syscall(SYS___realpathat, arg1, p, b, arg4, arg5)); UNLOCK_PATH(p, arg2); unlock_user(b, arg3, ret); =20 return ret; } -#endif =20 #endif /* BSD_USER_FREEBSD_OS_STAT_H */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097511; cv=none; d=zohomail.com; s=zohoarc; b=emHjDsKhM0O1RPAQVZ24FsZmi1zIDNqoawoksE+sB0mi6lnp+Fif9KgbLAFqjW219YQ7wp6xDg8t6IIik/tWzvtwM0hMpsr7Nz+5BJtLjN97fR91c6gL2z9RIsQM1isH8yvuOPlg/nlci9IiI8iMLn5hBw8I/PFygKNx6TLKoc8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097511; h=Content-Type: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=Z492YrGq3t0Ma77Uz/OtV3SUo95r8bp5MtFKwiBLnwc=; b=MpZ38UBDs4/Ybup1gniOvAKdXBFoIgns6MZKTlZCWdscGIvAnIT9+NTIwte99vIOvCYkbZR6q4FXJbIT03ZHR26iGDRkX24S5PdrTTImnUkeStT4EIdADkMINsNNo6eVmqjqJj6YBjM7VtaRIyvKpnnsjzh0R/dq9dxw8z87RFQ= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097511306349.6844070348985; Tue, 18 Aug 2026 16:58:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTgm-00025A-AH; Tue, 18 Aug 2026 19:57:52 -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 1wwTgl-000252-Aj for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:51 -0400 Received: from mail-oi1-x22f.google.com ([2607:f8b0:4864:20::22f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTgj-0005ER-Jh for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:51 -0400 Received: by mail-oi1-x22f.google.com with SMTP id 5614622812f47-4b28d965adcso331289b6e.0 for ; Tue, 18 Aug 2026 16:57:49 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.57.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:57:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097468; x=1787702268; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Z492YrGq3t0Ma77Uz/OtV3SUo95r8bp5MtFKwiBLnwc=; b=Yimd8yxq4p5D1dc0hd1uodPAM46DfOBwgTSRgDW7sGYVQeOI5bCaNWwa2ULuwEaFNk kzoFowDPlMvfcKZdbpvzy3xjO/R4tBSH4wW2DtuCwTYIAbu3XA1ZVmGsMNfkNR5f3SUl 18UamStsPruhYr9oJLspYHXo6zDwWOPmGU7QTUJj0G5TvGgNKzDrDLTk5n+2PTAtf75V ufyFlDa4i8/gOkwFeNZUGLD3y7v3AY26JY2mWttW660TlZhWW7oIqd0Pc5eusq9NnzEe L0S1fen08Is8VPlF3PYIBoQ3VEsfg72PbP8WdNtScn9SmXMjsZZKwl0A3ZGz0+5vZEfj AnLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097468; x=1787702268; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Z492YrGq3t0Ma77Uz/OtV3SUo95r8bp5MtFKwiBLnwc=; b=Fmr3RmJMTKjvZTwVYWBsYNFR4I6g00i6JEhPCKDwkubaBCjI9cWpg31i6QJ7KmOXU2 hTBeHVgaHvV30M/4j/+wfLBIT2k2cFkH4qVzEn680nY2O0YP3qGLJKX+T4xQlFuXK26G 1SlKWma/xR1MpCBpRGnzzS0aPuNk+92naSinyU9nQh9cGIFqizcpCGR6f9ofD7OxLuxC FWe/ERmSQBUkY0yZ3JzL67v6oXDzigPJu8hwv6SwASeWigO/qj5ru0IF2AlQpQbSrHPQ qPqgcsuNfKaAgCnA68I1jdbjHv2cGOSNffzoRt49YMWS0mGG2ZRjJM+nGU+C7nngAVTW R0fg== X-Gm-Message-State: AOJu0Yyhixww0p202UasKgrNq7eFfTHhYR/2dXZtsPF78vadOtqEAhh0 m9x95JsEnYg3UneSZLpb0bPBPCqqCmMI223FCTwxVQxQzcY8UhobAlH9p8n+S3IpRBk= X-Gm-Gg: AR+sD120YPlhFN7iaAz4SWbBhhQADARWGWkqWGmCVjeP50qVxz3xq60y6sPDSESTmuq 8Rdd8lHHgji/xSbKuqf8FBpX5hzG3MzxrmSdlBrjjbivmjOYF/XBoDybyUd9WRras42Of5oqBJ6 XwXJuBQGrEbkBe6L6Dsdb/m0FscaL0Yeu4zYoLLD4+513L2XhlUK2iVLhyNfYdf5vf2lBKt06jF 7Yi4nhjE3aUXUnSDrKCZdN1ujGPFSN75jGck4+Hy4588T+m+zoIRFbj2EQryKPQdtwVOdwLQx1O +Ibj9kDi/V1cMK/I6qLmU7l5brREiQa9hpCDMJa4zwlf2s0aAN4KkSSlKEKFBLc+/A19z011Vya mX6hP9dP4OVKK6lqQiomJTjWGEZ9Wkjy6n479MK7pAuFklIurPG+9HBLwjj3PkUoMEZShHcO7eW fSS08dH4e2cwSyTFuJitFDF+k+jqJFfzJNPeZVLvWXOzWSW7foWxXM X-Received: by 2002:a05:6808:d51:b0:496:2b3:ae71 with SMTP id 5614622812f47-4b2bcbebed1mr281885b6e.18.1787097468274; Tue, 18 Aug 2026 16:57:48 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:04 -0600 Subject: [PATCH v4 11/40] bsd-user: Add os-file.h with chflagsat, close_range, and more MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-11-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6056; i=imp@bsdimp.com; h=from:subject:message-id; bh=UZ8BkUb5dczCiuWUQgyyadQHaUWOnI0O7OOYUJ7kBfg=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPEvJ6ubwk/ehtvO9jO10jkwnLr9UkLNERKe+ UldTyUMohaJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxLxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQDZEw//XgtCKfDNAO/hXoBjdDMzHheebTXnwWj YzaNZCDPx9uYlpO1oQpu/hQEAAhJr3R6dV24J2gLwA5m/s+93ZPZg/ti4pyEajOZ5rGEiRcpJ3d /bmSUjpThaKp1CVQdP0+tZz9Ja0J7u4V6kCOq6Y0q1oaVM8+uRQrVTRkc9hg5Kv/JyyDMy+QyZ3 El/FLVKupYr8f/J5rQRdXTCiAlhL3oAh1Hyd6DXaCKkhqlS6fCS9c2WC5D6CNcxDAcuENE1Kbxd wHN+hmO2ry61FRqjpVc6bVMJ2dCPJ6RqTEfwCXPLYhnl1DRIHD7L5gds/Vn3lG7z7K4DTMFzK6C pcEIfRLbRPRUx/4nxYSNgNxC31HbG73+zty/4IVDXIy2X02Aov1MbyO3IpMZhPFo8fmQMudp2ms utGEtQ7YjZ/rgdBzcWmHS1sfzSZOtpxYgxUm7N3krKpPLv0a5nRu0LOgdZHzeHUn6dJyUa0chL7 u55taoLPLC51yvwUsyXbJnGxMcWc1/+bnYSuKTWgwyIuHUbanJ93iHmVOXOK2B9ZRVCamxayG8x VTZZcBa1ZtgGOBDTVyCfjpizXHKzgDJaem9gQWZt+2NyshCcGc32f6R7QvRRH6Fw4re5cCm/Yo7 eeKqH+EDyNQ7/kAyZuMVNOEQHYZDzGFmn/FZOfRgHYRpPnf2/ots= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::22f; envelope-from=imp@bsdimp.com; helo=mail-oi1-x22f.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097513582158500 Add FreeBSD-specific file operation shims: chflagsat, close_range, copy_file_range, and __specialfd. Also add the safe_copy_file_range and safe_ppoll syscall wrappers and the target_specialfd_eventfd type definitions. Signed-off-by: Stacey Son Assisted-by: Claude Opus 4.6 (1M context) Reviewed-by: Pierrick Bouvier Reviewed-by: Richard Henderson Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-file.h | 103 ++++++++++++++++++++++++++++++++++++++= ++++ bsd-user/freebsd/os-syscall.c | 25 ++++++++++ bsd-user/syscall_defs.h | 10 ++++ 3 files changed, 138 insertions(+) diff --git a/bsd-user/freebsd/os-file.h b/bsd-user/freebsd/os-file.h new file mode 100644 index 0000000000..d5d91336ea --- /dev/null +++ b/bsd-user/freebsd/os-file.h @@ -0,0 +1,103 @@ +/* + * FreeBSD file related system call shims and definitions + * + * Copyright (c) 2014 Stacey D. Son + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#ifndef FREEBSD_OS_FILE_H +#define FREEBSD_OS_FILE_H + +#include + +/* + * Asynchronous I/O. + */ + +/* chflagsat(2) */ +static inline abi_long do_bsd_chflagsat(int fd, abi_ulong path, + abi_ulong flags, int atflags) +{ + abi_long ret; + void *p; + + LOCK_PATH(p, path); + ret =3D get_errno(chflagsat(fd, p, flags, atflags)); /* XXX path(p)? */ + UNLOCK_PATH(p, path); + + return ret; +} + +/* close_range(2) */ +static inline abi_long do_freebsd_close_range(unsigned int lowfd, + unsigned int highfd, int flags) +{ + + return get_errno(close_range(lowfd, highfd, flags)); +} + +ssize_t safe_copy_file_range(int, off_t *, int, off_t *, size_t, unsigned = int); + +/* copy_file_range(2) */ +static inline abi_long do_freebsd_copy_file_range(int infd, + abi_ulong inofftp, int outfd, abi_ulong outofftp, size_t len, + unsigned int flags) +{ + off_t inoff, outoff, *inp, *outp; + abi_long ret; + + inp =3D outp =3D NULL; + if (inofftp !=3D 0 && !access_ok(VERIFY_WRITE, inofftp, sizeof(off_t))= ) { + return -TARGET_EFAULT; + } else if (inofftp !=3D 0) { + inoff =3D tswap64(*(off_t *)g2h_untagged(inofftp)); + inp =3D &inoff; + } + if (outofftp !=3D 0 && !access_ok(VERIFY_WRITE, outofftp, sizeof(off_t= ))) { + return -TARGET_EFAULT; + } else if (outofftp !=3D 0) { + outoff =3D tswap64(*(off_t *)g2h_untagged(outofftp)); + outp =3D &outoff; + } + + ret =3D get_errno(safe_copy_file_range(infd, inp, outfd, outp, len, + flags)); + + if (!is_error(ret)) { + if (inofftp !=3D 0) { + *(off_t *)g2h_untagged(inofftp) =3D tswap64(inoff); + } + if (outofftp !=3D 0) { + *(off_t *)g2h_untagged(outofftp) =3D tswap64(outoff); + } + } + return ret; +} + +static inline abi_long do_freebsd___specialfd(int type, abi_ulong req, + size_t len) +{ + abi_long ret; + + ret =3D -TARGET_EINVAL; + switch (type) { + case TARGET_SPECIALFD_EVENT: { + struct specialfd_eventfd evfd; + struct target_specialfd_eventfd *target_eventfd; + + if (!lock_user_struct(VERIFY_READ, target_eventfd, req, 1)) { + return -TARGET_EFAULT; + } + + evfd.initval =3D tswap32(target_eventfd->initval); + evfd.flags =3D tswap32(target_eventfd->flags); + ret =3D get_errno(syscall(SYS___specialfd, type, &evfd, sizeof(evf= d))); + unlock_user_struct(target_eventfd, req, 0); + break; + } + } + + return ret; +} + +#endif /* FREEBSD_OS_FILE_H */ diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c index 06148fe3ce..4fc230e8e5 100644 --- a/bsd-user/freebsd/os-syscall.c +++ b/bsd-user/freebsd/os-syscall.c @@ -44,6 +44,7 @@ #include "os-stat.h" #include "os-proc.h" #include "os-signal.h" +#include "os-file.h" #include "os-misc.h" =20 /* I/O */ @@ -65,6 +66,9 @@ safe_syscall3(ssize_t, writev, int, fd, const struct iove= c *, iov, int, iovcnt); safe_syscall4(ssize_t, pwritev, int, fd, const struct iovec *, iov, int, i= ovcnt, off_t, offset); =20 +safe_syscall6(ssize_t, copy_file_range, int, infd, off_t *, inoffp, int, o= utfd, + off_t *, outoffp, size_t, len, unsigned int, flags); + /* used in os-proc */ safe_syscall4(pid_t, wait4, pid_t, wpid, int *, status, int, options, struct rusage *, rusage); @@ -692,6 +696,27 @@ static abi_long freebsd_syscall(CPUArchState *env, int= num, abi_long arg1, ret =3D do_bsd_undelete(arg1); break; =20 + case TARGET_FREEBSD_NR_chflagsat: /* chflagsat(2) */ + ret =3D do_bsd_chflagsat(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_close_range: /* close_range(2) */ + ret =3D do_freebsd_close_range(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR___realpathat: + /* __realpathat(2) (XXX no realpathat()) */ + ret =3D do_freebsd_realpathat(arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_copy_file_range: + ret =3D do_freebsd_copy_file_range(arg1, arg2, arg3, arg4, arg5, a= rg6); + break; + + case TARGET_FREEBSD_NR___specialfd: + ret =3D do_freebsd___specialfd(arg1, arg2, arg3); + break; + /* * ioctl(2) */ diff --git a/bsd-user/syscall_defs.h b/bsd-user/syscall_defs.h index 47aa01fbb5..88dd7a763a 100644 --- a/bsd-user/syscall_defs.h +++ b/bsd-user/syscall_defs.h @@ -418,6 +418,16 @@ struct target_freebsd_flock { /* user: vfork(2) semantics, clear signals */ #define TARGET_RFSPAWN (1U << 31) =20 +/* sys/specialfd.h */ +enum target_specialfd_type { + TARGET_SPECIALFD_EVENT =3D 1, +}; + +struct target_specialfd_eventfd { + unsigned int initval; + int flags; +}; + /* * sys/uuid.h */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097677; cv=none; d=zohomail.com; s=zohoarc; b=BwPoPW4zMi91q0gYlhIIwVBuiZypNzYUlnV9OHWQBjfBWpvQ1aY6i7nJ4sjk6En8qAWcizH2UhErdwbh7PL9PlZGN3x7ZRmsIGorAnwUs5Zim4SRE7P01kaClaTbSUzRjP1KLRg77TprUypW76zXoyf8P8RkRCUG5AX9cy8+zFk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097677; h=Content-Type: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=kHhsfnAsmurtQcuXQ4RBX7OuSGOb2edhhIFQh+yntY0=; b=ORmkmAexpeFlvyrQ5/PQEAg90wap17hbOTImpWOeKMp3B82OTKsnhK+S+YpL39MwuemUcC4v/G+fNeBwUG5EQCAGBMCfsLIQX9WgiaY4qbxBGDrHUzi3+ytWjPw40B0PmYO/SBp+JYnu7wKDr0ilTIX3wDFvGyEoU9ph6NEw9pg= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097676991210.39499558186537; Tue, 18 Aug 2026 17:01:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTgp-00027X-Hd; Tue, 18 Aug 2026 19:57:55 -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 1wwTgo-00026S-6F for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:54 -0400 Received: from mail-oi1-x231.google.com ([2607:f8b0:4864:20::231]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTgm-0005Em-1K for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:53 -0400 Received: by mail-oi1-x231.google.com with SMTP id 5614622812f47-4a40bcc8d69so362249b6e.3 for ; Tue, 18 Aug 2026 16:57:51 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.57.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:57:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097471; x=1787702271; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=kHhsfnAsmurtQcuXQ4RBX7OuSGOb2edhhIFQh+yntY0=; b=FdbFRGqGvJB0oOVlNImcRnVDlXILG5UjbRQVW6GK1VsFnRT/uKjRzLceMFB8nLeRt0 EoMkHPpNhd31TfpdoEvs/Oe6Kmltd3+HsUMux7TK7jOwZ/jJ+FWrti5i10CwnytIgTvA NmzDXgfJkuMDHAZRFS3ZoBcU7mBhGH2ty62D4TSCQKKKx3rcOPeyM6o6hGzlRkL5RG48 L+cBQ+v7IJAC6WEf4xRv1ZPoQWYZ08qCLrpbv1rfMq9vkoNubTxC9qihyom7hOuBwQBo Zls7o5RB05IugZn0MWS6Fv7oisBE3YPjsOkp5CKGrXOGm0r1jNIkRTz3+a12W+/7XFUV TVqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097471; x=1787702271; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=kHhsfnAsmurtQcuXQ4RBX7OuSGOb2edhhIFQh+yntY0=; b=erjVJRXwpeX1v1idBWjQ/20CVTJsKfoNADoLpMUDTBgwLQPg0zbgCxrStkH2oHl4wz oHDloF+rKV/aBSWPejHsdeYZkF52Zhfd8CMug5IGOcngdUhk9WnvBuIoFqnOP692sre2 FbU2mSzazTDf+yK8vb1uslqVkAUWjWejt9nmaHrpOKgS8Jhia5zv0ZudahHFpAt7P+VR ueaMIlMVUWLWO9C/kit9GOvqaBKv6wz9Q19PLQ7A/AghpDGrK58nEaJmpUKAT0j8xaWR nl8pFc35qqzpyZiKChx+TxmfiPFME5gNio8aQRQdTPihved0qkeB/MPqeZNJjufdDDJI xgEw== X-Gm-Message-State: AOJu0YwB1ICkG/Mvg0Cl3bW5E2AnclNOAusWhKeV0sj3LCHRC6TA+Lrr 7AVDM3LqmJA12/u1pqke93bZ5Z4x29ETPf9zuEoVTsNDKfZ9BwCLWt+tkMMAQKLI4No= X-Gm-Gg: AR+sD10QFwCZFXrn5QLDqjKejtcEJytStF2Ovu/3Q0uT4Ui/q3xsWgIxCJOEFSLnB+8 FwKnaGTZ/4SNsRGFPHJtIA4tcdsXH3ZXnVBUxsxeyXDgu3EeV8SbQ/OuJnm5Q7vH1AFifk39nPb yRyJALFIDeswPE/wu+kxV07POcdNXP1ZDVmwMY+lyA0BmXMDFbtUptxXI+MiZmfE0b/6obDd5hB QeAzoBMustu8grk3FegZ9UgcyWLb3JnflsDjbB2Vr5vBGefgF6XtR1gYeaV2flCeH2HA/UD8rzm +PmnZ8+m8ytm0TyEdCwCmwtCN+TePOSUqvhKOtT3iBfyztORxVHZdB8zER1dBfveFBcbcBJO4KV tRDfEe/dAsEE4meO5o6IL3Y2p5gfSPxSBz9tPK+zmzQp5DGF337UJuc4Ukw68+1pPktPdl6zbJF e/lyqU3Cr/FKxk2nhFzM2ANpPL81lS//bcIk3AGFL9ENtPZc8= X-Received: by 2002:a05:6808:3305:b0:495:f74a:b572 with SMTP id 5614622812f47-4b2bc97d844mr374240b6e.5.1787097470845; Tue, 18 Aug 2026 16:57:50 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:05 -0600 Subject: [PATCH v4 12/40] bsd-user: Add poll, poll2, lseek, pipe, and swap system call shims MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-12-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=8653; i=imp@bsdimp.com; h=from:subject:message-id; bh=yYNNi2kjb5//RpHVzDtDTaGab5HnAtRMdCAJ5uxS50s=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPExg1u/UUYvj/2b0JE9EpYPKpOArY1L5LtH+ sxT3SylKMqJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxMRsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQAakBAA3uLgCKNzwcuSm+BsJg2gKnO77Nw7wd+ TKHkYs+oayUm8DtkxbuPmYa8NWx+FMxqbpkxIzTZkYmLJAo+cKcEuFWxgT2FPmCH7KRhtkYYUi1 VVk89Q3cUirX1kZyg5JG5ArQLX9odjhYtbEswjwZsrT2dUi6BBvI/HFeUqa1AYpZ2aaLuk+Nbfj bcrWO1i99VCyCmRRyBeuGOdlHsYMTXsONkuK7rgkKNxWt1uBR+/Mg8vyzMoBu9c4ASDQkBQIFGO T80yNjP7ajKrkI6cxWjulSU77uS2fuAOp5yTfu3JzEkd+QbViL+lmNpLPnMJBfUjIXmJaLYhOXv 7j8cf4lZP40YeBkvDLwkTUYF9k28kPDoGrAVHaReSVU0m0eEk87NOhcnRE+QhFQ+rNd0bTGij7d ZH72wS9UI1XueC0jnjStBALpYNMYfSaV584PAynQainl7U39rlouIR6PvG5rPeb458IqSkugdCB 8bssQKJ7uh8gg146ruVCNzdZKEvJILqcK600b2/U/aK1ipYeOVHJ7ieyN0XPcXOrO74YgL7RufT 9CpuABiE7ZjH7Ky+FruMwtiDUnpBWvQKBDD87niRFeIhYQq5UqDmub32mo1jpX/FRc84CC5Sb0G JJaXuQLB9l28ilrEvwfhWrLjVg4JtWEDt2gTEpPZbrn8UbHI4VwY= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::231; envelope-from=imp@bsdimp.com; helo=mail-oi1-x231.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097678169158500 Add do_bsd_poll, do_bsd_lseek, do_bsd_pipe, do_bsd_swapon, do_freebsd13_swapoff, and do_bsd_swapoff to bsd-file.h. Also add target_pollfd structure to syscall_defs.h and include poll.h in os-syscall.c. Signed-off-by: Stacey Son Assisted-by: Claude Opus 4.6 (1M context) Reviewed-by: Pierrick Bouvier Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/bsd-file.h | 136 ++++++++++++++++++++++++++++++++++++++= ++++ bsd-user/freebsd/os-file.h | 26 ++++++++ bsd-user/freebsd/os-syscall.c | 34 +++++++++++ bsd-user/syscall_defs.h | 6 ++ 4 files changed, 202 insertions(+) diff --git a/bsd-user/bsd-file.h b/bsd-user/bsd-file.h index 7ef9470c4e..0fefc07232 100644 --- a/bsd-user/bsd-file.h +++ b/bsd-user/bsd-file.h @@ -55,6 +55,10 @@ ssize_t safe_pwrite(int fd, void *buf, size_t nbytes, of= f_t offset); ssize_t safe_writev(int fd, const struct iovec *iov, int iovcnt); ssize_t safe_pwritev(int fd, const struct iovec *iov, int iovcnt, off_t of= fset); =20 +int safe_ppoll(struct pollfd *fds, nfds_t nfds, + const struct timespec *restrict timeout, + const sigset_t *restrict newsigmask); + /* read(2) */ static abi_long do_bsd_read(abi_long arg1, abi_long arg2, abi_long arg3) { @@ -925,4 +929,136 @@ static abi_long do_bsd_undelete(abi_long arg1) return ret; } =20 +/* poll(2) */ +static abi_long do_bsd_poll(abi_long arg1, abi_long arg2, abi_long arg3) +{ + abi_long ret; + nfds_t i, nfds =3D arg2; + int timeout =3D arg3; + struct pollfd *pfd; + struct target_pollfd *target_pfd; + struct timespec ts, *pts =3D NULL; + + target_pfd =3D lock_user(VERIFY_WRITE, arg1, + sizeof(struct target_pollfd) * nfds, 1); + if (!target_pfd) { + return -TARGET_EFAULT; + } + pfd =3D alloca(sizeof(struct pollfd) * nfds); + for (i =3D 0; i < nfds; i++) { + pfd[i].fd =3D tswap32(target_pfd[i].fd); + pfd[i].events =3D tswap16(target_pfd[i].events); + } + + if (timeout !=3D INFTIM) { + ts.tv_sec =3D timeout / 1000; + ts.tv_nsec =3D (timeout % 1000) * 1000000; + pts =3D &ts; + } + + ret =3D get_errno(safe_ppoll(pfd, nfds, pts, NULL)); + + if (!is_error(ret)) { + for (i =3D 0; i < nfds; i++) { + target_pfd[i].revents =3D tswap16(pfd[i].revents); + } + } + unlock_user(target_pfd, arg1, sizeof(struct target_pollfd) * nfds); + + return ret; +} + +/* lseek(2) */ +static abi_long do_bsd_lseek(CPUArchState *env, abi_long arg1, abi_long ar= g2, + abi_long arg3, abi_long arg4, abi_long arg5) +{ + abi_long ret; +#if TARGET_ABI_BITS =3D=3D 32 + int64_t res; + + /* 32-bit arch's use two 32 registers for 64 bit return value */ + if (regpairs_aligned(env) !=3D 0) { + res =3D lseek(arg1, target_arg64(arg3, arg4), arg5); + } else { + res =3D lseek(arg1, target_arg64(arg2, arg3), arg4); + } + if (res =3D=3D -1) { + ret =3D get_errno(res); + set_second_rval(env, 0xFFFFFFFF); + } else { +#ifdef TARGET_BIG_ENDIAN + ret =3D ((res >> 32) & 0xFFFFFFFF); + set_second_rval(env, res & 0xFFFFFFFF); +#else + ret =3D res & 0xFFFFFFFF; + set_second_rval(env, (res >> 32) & 0xFFFFFFFF); +#endif + } +#else + ret =3D get_errno(lseek(arg1, arg2, arg3)); +#endif + return ret; +} + +/* pipe(2) */ +static abi_long do_bsd_pipe(CPUArchState *env, abi_ulong pipedes) +{ + abi_long ret; + int host_pipe[2]; + int host_ret =3D pipe(host_pipe); + + if (host_ret !=3D -1) { + set_second_rval(env, host_pipe[1]); + ret =3D host_pipe[0]; + } else { + ret =3D get_errno(host_ret); + } + return ret; +} + +/* swapon(2) */ +static abi_long do_bsd_swapon(abi_long arg1) +{ + abi_long ret; + void *p; + + LOCK_PATH(p, arg1); + ret =3D get_errno(swapon(path(p))); + UNLOCK_PATH(p, arg1); + + return ret; +} + +#ifdef TARGET_FREEBSD_NR_freebsd13_swapoff +/* swapoff(2) */ +static abi_long do_freebsd13_swapoff(abi_long arg1) +{ + abi_long ret; + void *p; + + LOCK_PATH(p, arg1); + ret =3D get_errno(swapoff(path(p), 0)); + UNLOCK_PATH(p, arg1); + + return ret; +} +#endif + +/* swapoff(2) */ +static abi_long do_bsd_swapoff(abi_long arg1, abi_long arg2) +{ + abi_long ret; + void *p; + + LOCK_PATH(p, arg1); +#ifdef TARGET_FREEBSD_NR_freebsd13_swapoff + ret =3D get_errno(swapoff(path(p), arg2)); +#else + ret =3D get_errno(swapoff(path(p))); +#endif + UNLOCK_PATH(p, arg1); + + return ret; +} + #endif /* BSD_FILE_H */ diff --git a/bsd-user/freebsd/os-file.h b/bsd-user/freebsd/os-file.h index d5d91336ea..c1da52789a 100644 --- a/bsd-user/freebsd/os-file.h +++ b/bsd-user/freebsd/os-file.h @@ -14,6 +14,32 @@ * Asynchronous I/O. */ =20 +/* pipe2(2) */ +static abi_long do_bsd_pipe2(CPUArchState *env, abi_ulong pipedes, int fla= gs) +{ + int host_pipe[2]; + int host_ret =3D pipe2(host_pipe, flags); + /* XXXss - flags should be translated from target to host. */ + + if (host_ret =3D=3D -1) { + return get_errno(host_ret); + } + + /* + * pipe2() returns it's second FD by copying it back to userspace and = not in + * a second register like pipe(2): set_second_rval(env, host_pipe[1]); + * + * Copy the FD's back to userspace: + */ + if (put_user_s32(host_pipe[0], pipedes) || + put_user_s32(host_pipe[1], pipedes + sizeof(host_pipe[0]))) { + close(host_pipe[0]); + close(host_pipe[1]); + return -TARGET_EFAULT; + } + return 0; +} + /* chflagsat(2) */ static inline abi_long do_bsd_chflagsat(int fd, abi_ulong path, abi_ulong flags, int atflags) diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c index 4fc230e8e5..228daed4c4 100644 --- a/bsd-user/freebsd/os-syscall.c +++ b/bsd-user/freebsd/os-syscall.c @@ -26,6 +26,7 @@ #include #include #include +#include =20 #include "include/gdbstub/syscalls.h" =20 @@ -66,6 +67,9 @@ safe_syscall3(ssize_t, writev, int, fd, const struct iove= c *, iov, int, iovcnt); safe_syscall4(ssize_t, pwritev, int, fd, const struct iovec *, iov, int, i= ovcnt, off_t, offset); =20 +safe_syscall4(int, ppoll, struct pollfd *, fds, nfds_t, nfds, + const struct timespec *, restrict_timeout, const sigset_t *, + restrict_newsigmask); safe_syscall6(ssize_t, copy_file_range, int, infd, off_t *, inoffp, int, o= utfd, off_t *, outoffp, size_t, len, unsigned int, flags); =20 @@ -696,6 +700,36 @@ static abi_long freebsd_syscall(CPUArchState *env, int= num, abi_long arg1, ret =3D do_bsd_undelete(arg1); break; =20 + case TARGET_FREEBSD_NR_poll: /* poll(2) */ + ret =3D do_bsd_poll(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_lseek: /* lseek(2) */ + ret =3D do_bsd_lseek(env, arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_freebsd10_pipe: /* pipe(2) */ + ret =3D do_bsd_pipe(env, arg1); + break; + + case TARGET_FREEBSD_NR_pipe2: /* pipe2(2) */ + ret =3D do_bsd_pipe2(env, arg1, arg2); + break; + + case TARGET_FREEBSD_NR_swapon: /* swapon(2) */ + ret =3D do_bsd_swapon(arg1); + break; + +#if TARGET_FREEBSD_NR_freebsd13_swapoff + case TARGET_FREEBSD_NR_freebsd13_swapoff: /* freebsd13_swapoff(2) */ + ret =3D do_freebsd13_swapoff(arg1); + break; +#endif + + case TARGET_FREEBSD_NR_swapoff: /* swapoff(2) */ + ret =3D do_bsd_swapoff(arg1, arg2); + break; + case TARGET_FREEBSD_NR_chflagsat: /* chflagsat(2) */ ret =3D do_bsd_chflagsat(arg1, arg2, arg3, arg4); break; diff --git a/bsd-user/syscall_defs.h b/bsd-user/syscall_defs.h index 88dd7a763a..75122ad521 100644 --- a/bsd-user/syscall_defs.h +++ b/bsd-user/syscall_defs.h @@ -547,6 +547,12 @@ struct target_in_addr { #define safe_ioctl(...) safe_syscall(SYS_ioctl, __VA_ARGS__) #define safe_fcntl(...) safe_syscall(SYS_fcntl, __VA_ARGS__) =20 +struct target_pollfd { + int32_t fd; /* file descriptor */ + int16_t events; /* requested events */ + int16_t revents; /* returned events */ +}; + /* So far all target and host bitmasks are the same */ #undef target_to_host_bitmask #define target_to_host_bitmask(x, tbl) (x) --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097740; cv=none; d=zohomail.com; s=zohoarc; b=YDR7B1vm9+mWd2BQ1YBsvMgJIzENOQujX6SFMXR3x1AAY6CG31sig4T7bWPHKM23AicpwXxE8huOjrgJnDOjgrnPGBvLfKka6J2st//nYvOnBNH7BrgBnCO3nfsCry3rg5rV3q89twcXwzGf7NMbRzDOG+EnhcTe/NYfTwKleP4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097740; h=Content-Type: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=CMrW+huNEl4YQloyIhdem/HVGGc9kbaQ9NQmJpLap6Y=; b=QIfvBH6vkn7ZLWeZVVMfLhXgSNR7PJ5/r43/2XvWvzu4JoQiLhFw8YW5+5nLKIqoMPpqgmnVjmBF4jSq4a5HEN/gX5QKc9rjfpACbUEapybEptN40KOBI/xY8icnZYlPwTDlXCzR/OcfbB+xuSEwCZwr97WO1z+0eSueNRI5Sgw= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178709774077420.993353743956845; Tue, 18 Aug 2026 17:02:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTgr-000284-IB; Tue, 18 Aug 2026 19:57:57 -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 1wwTgp-00027k-PE for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:55 -0400 Received: from mail-oi1-x232.google.com ([2607:f8b0:4864:20::232]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTgn-0005Eu-W7 for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:55 -0400 Received: by mail-oi1-x232.google.com with SMTP id 5614622812f47-4b1bf68b387so301902b6e.2 for ; Tue, 18 Aug 2026 16:57:53 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.57.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:57:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097473; x=1787702273; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=CMrW+huNEl4YQloyIhdem/HVGGc9kbaQ9NQmJpLap6Y=; b=vJ1uv7ZioMIY9zV8ITYFoR1d72Hb7XREljHtZMtSnejZ7pKQHa/QEVAeYY7WIRN2c7 4jw2ujfKv2cz/CFOfnjRQhC7KWd/kOOM9j+pAg91HBMxcyyyC4AMPCs91fk5cMDQFeKg f8q/ZQNn0HuJYCcehvfLvT7UCIe+gydoZ9/Sx4j6OphXU8HC933FRRVIOFgc2Nn4PLtI wzCISfa0pKDhyn3z3BynPGnjdGW5pvR0fy/s4sAIZXKT/RyXPWCMqD8M0WKNphqk/s9i 37QqpNDWBQesyQNnzfz7y9plGRAKVgBwLSGbFsFvnuvkkkwnSdFAPhe/ins5E2l7ZkRO L7gA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097473; x=1787702273; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=CMrW+huNEl4YQloyIhdem/HVGGc9kbaQ9NQmJpLap6Y=; b=afOYycrH7+tkFut5rpdWe5FJFk0gE1NtEGfTEp5O0zWA36LvAWeDJdPLaNk0G6wAYD cBvHldGm03W+SK4UWbcL+HkjADlDxjNS8+UnVY7w548GyE7swJ94RDflWX4YjlFsEiSX RepMTXuj4yovVAywDJa0fNMYX8qOI49/r2kwlZ56MNq0Z//YCBX+6asrVHqYmjv1xwEe SKzI8exScHkAueNjU2wOxYUZZ5OeCq6ZuOQlZKFhVHswjTO1hOK7WemE3TOY1+paqAGJ Lg+bH9ZGQ5dvf8cXV7yndmgHPjSrWqGGUc/c2/IS+nE6cy7O3WCnWfESWXKQ6GzKcsFo xhXA== X-Gm-Message-State: AOJu0YwoO+QCcEEdGsMss+ClZmJF+tq/EBSlFEi0E7lhxxpMRpb0xw70 1zp7y9CBo4MBhcVQ/M17218wvg++WeyJOndO8XFsLydARaxWBG1Ol8RqrC4Q/XpidV1wH+Ypo5K XNLc9Mqs= X-Gm-Gg: AR+sD13S6DOp20G00X65iUpShagLtjReFBaMwnp2Y+9Fsi/erb1/Gh9sz3w8+0RZ4EN I79CLtelp2IxDXnOtJM1lJyzcZbVbSGZIUWLVGE2rhbFMEWJ+AGgj7KBM4G1tNyfnsmBCwBHD74 v/WM7PwvqGAG2S7NaT8yxFf4manKYSLVYHKuVCL7GcR6aCrWM8cYdHhq5uxTv0Zwj0QVxUakDDB 2rT7zlzwTy5wRvCUtyuXxo+CQw/J1KtrV/9JK8EfwYlvPT8PSS33cQ0hF6gmTk9/Gb1hN+F6Rql ibnF24f5+pIcaupVxvmEU1RZtvpoZozcysmIgzSssVO3NoI3NjEz4UazenEMcw59QzIhMMRJJca YkdZJ+pa3iImLuQIQ3urr2gSb6moZIP6D5rB7GY7KnwHzdYkhwSUD9NG3ZDAmLn4M6osIA1EuZ/ Juv5z/+d45bRFi0lnYaRVXTTQydc+pzkbDGT1HvMX/W2kc4m8= X-Received: by 2002:a05:6808:c1f2:b0:497:d371:21c8 with SMTP id 5614622812f47-4b2bcb4f9f3mr372626b6e.19.1787097472965; Tue, 18 Aug 2026 16:57:52 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:06 -0600 Subject: [PATCH v4 13/40] bsd-user: Add FreeBSD socket helpers and sockaddr conversion MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-13-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6764; i=imp@bsdimp.com; h=from:subject:message-id; bh=QZHMhzUVP/6EvE5l/MWtcU36jkSP+XISYtDFwS0owRA=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPEzjcPRr+mELG99dqvWeRhIYI9iwnGtXjg6F LoIZ09lGkCJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxMxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQBa+BAAmXDWpbcddcUEN2Ka2WLKXhOMsmqx+va aSm8ELU/QECpXnrpnrYHYklAOko3HlmETZJWkC539tfLXzsqs8AQulVk6d1fh7UAHVKC4AqJu4Z bMkwq1xd3YJvKihhGnoeZnkq9U5Jhqz/AtnsmQfwhDdR4SNfy45sETeDbn5xNwMNg8uLyMaEvQa hD2b+vtxyBRBwpRNZIMLjSgEAyJjz4FPC+VAL1eCb5vdn843fhi/h4GwMf/vPDsA+3fKxmH7D3V hE++DFGbySDpa/L421QY2pny6RtuDw8ftrThBBkos9NVzlJSuS3WvHOViFEgQQd5JPVzM21IbID in02X5SUcgAw8JoXijwCCT1AYnHl3Ji89lwUE2sIHBt+HvWM4rm8cp8nfA9O3gHLsac0VSFKnCs rXewc+SDKyxJY9LhN0nRSYozGaSkuqCXh4ZbklZCP4HZNeiX35a2zbRXz+ZUJU3zdW4d2OfnChq ktmCTehmIZg6Cds3dHKhNs3bbNh5LgS7Q00A8/EekdYAZGeoD5Ck0iZeL4bGATKUlrON4SnPn2y A9Bl6c44KMbDgc19tnZcyDKkEVnvzFMlMbs66EYFBW72i0J52D0DnE6b+ey1RePlkJ5Uyg94TLc tlhauGBtap9Uy/6dQkute6g0giUaHWfw/AAunxl88z+tIDDhZ8ms= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::232; envelope-from=imp@bsdimp.com; helo=mail-oi1-x232.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097742400158501 Add bsd-socket.c with target_to_host_sockaddr, host_to_target_sockaddr, and target_to_host_ip_mreq helper functions, and add it to the build. Signed-off-by: Stacey Son Assisted-by: Claude Opus 4.6 (1M context) Reviewed-by: Pierrick Bouvier Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/bsd-socket.c | 98 +++++++++++++++++++++++++++++++++++++++++++++= ++++ bsd-user/meson.build | 1 + bsd-user/qemu-bsd.h | 8 ++++ bsd-user/syscall_defs.h | 49 ++++++++++++++++++------- 4 files changed, 143 insertions(+), 13 deletions(-) diff --git a/bsd-user/bsd-socket.c b/bsd-user/bsd-socket.c new file mode 100644 index 0000000000..cc45400e4c --- /dev/null +++ b/bsd-user/bsd-socket.c @@ -0,0 +1,98 @@ +/* + * BSD socket system call related helpers + * + * Copyright (c) 2013 Stacey D. Son + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#include "qemu/osdep.h" + +#include +#include +#include +#include + +#include "qemu.h" +#include "qemu-bsd.h" + +/* + * socket conversion + */ +abi_long target_to_host_sockaddr(struct sockaddr *addr, abi_ulong target_a= ddr, + socklen_t len) +{ + const socklen_t unix_maxlen =3D sizeof(struct sockaddr_un); + sa_family_t sa_family; + struct target_sockaddr *target_saddr; + + target_saddr =3D lock_user(VERIFY_READ, target_addr, len, 1); + if (target_saddr =3D=3D 0) { + return -TARGET_EFAULT; + } + + sa_family =3D target_saddr->sa_family; + + /* + * Oops. The caller might send a incomplete sun_path; sun_path + * must be terminated by \0 (see the manual page), but unfortunately + * it is quite common to specify sockaddr_un length as + * "strlen(x->sun_path)" while it should be "strlen(...) + 1". We will + * fix that here if needed. + */ + if (target_saddr->sa_family =3D=3D AF_UNIX) { + if (len < unix_maxlen && len > 0) { + char *cp =3D (char *)target_saddr; + + if (cp[len - 1] && !cp[len]) { + len++; + } + } + if (len > unix_maxlen) { + len =3D unix_maxlen; + } + } + + memcpy(addr, target_saddr, len); + addr->sa_family =3D sa_family; /* type uint8_t */ + addr->sa_len =3D target_saddr->sa_len; /* type uint8_t */ + unlock_user(target_saddr, target_addr, 0); + + return 0; +} + +abi_long host_to_target_sockaddr(abi_ulong target_addr, struct sockaddr *a= ddr, + socklen_t len) +{ + struct target_sockaddr *target_saddr; + + target_saddr =3D lock_user(VERIFY_WRITE, target_addr, len, 0); + if (target_saddr =3D=3D 0) { + return -TARGET_EFAULT; + } + memcpy(target_saddr, addr, len); + target_saddr->sa_family =3D addr->sa_family; /* type uint8_t */ + target_saddr->sa_len =3D addr->sa_len; /* type uint8_t */ + unlock_user(target_saddr, target_addr, len); + + return 0; +} + +abi_long target_to_host_ip_mreq(struct ip_mreqn *mreqn, abi_ulong target_a= ddr, + socklen_t len) +{ + struct target_ip_mreqn *target_smreqn; + + target_smreqn =3D lock_user(VERIFY_READ, target_addr, len, 1); + if (target_smreqn =3D=3D 0) { + return -TARGET_EFAULT; + } + mreqn->imr_multiaddr.s_addr =3D target_smreqn->imr_multiaddr.s_addr; + mreqn->imr_address.s_addr =3D target_smreqn->imr_address.s_addr; + if (len =3D=3D sizeof(struct target_ip_mreqn)) { + mreqn->imr_ifindex =3D tswap32(target_smreqn->imr_ifindex); + } + unlock_user(target_smreqn, target_addr, 0); + + return 0; +} + diff --git a/bsd-user/meson.build b/bsd-user/meson.build index 2abcae5122..ab6ddf2e9f 100644 --- a/bsd-user/meson.build +++ b/bsd-user/meson.build @@ -11,6 +11,7 @@ bsd_user_ss.add(files( 'bsd-mem.c', 'bsd-misc.c', 'bsd-proc.c', + 'bsd-socket.c', 'bsdload.c', 'elfload.c', 'main.c', diff --git a/bsd-user/qemu-bsd.h b/bsd-user/qemu-bsd.h index 756425d18e..e32a09b37c 100644 --- a/bsd-user/qemu-bsd.h +++ b/bsd-user/qemu-bsd.h @@ -32,6 +32,14 @@ int host_to_target_waitstatus(int status); void h2g_rusage(const struct rusage *rusage, struct target_freebsd_rusage *target_rusage); =20 +/* bsd-socket.c */ +abi_long target_to_host_sockaddr(struct sockaddr *addr, abi_ulong target_a= ddr, + socklen_t len); +abi_long host_to_target_sockaddr(abi_ulong target_addr, struct sockaddr *a= ddr, + socklen_t len); +abi_long target_to_host_ip_mreq(struct ip_mreqn *mreqn, abi_ulong target_a= ddr, + socklen_t len); + /* bsd-mem.c */ void target_to_host_ipc_perm__locked(struct ipc_perm *host_ip, struct target_ipc_perm *target_ip); diff --git a/bsd-user/syscall_defs.h b/bsd-user/syscall_defs.h index 75122ad521..1a85ceb464 100644 --- a/bsd-user/syscall_defs.h +++ b/bsd-user/syscall_defs.h @@ -203,6 +203,42 @@ struct target_freebsd__wrusage { struct target_freebsd_rusage wru_children; }; =20 +/* + * sys/socket.h + */ +struct target_msghdr { + abi_long msg_name; /* Socket name */ + int32_t msg_namelen; /* Length of name */ + abi_long msg_iov; /* Data blocks */ + int32_t msg_iovlen; /* Number of blocks */ + abi_long msg_control; /* Per protocol magic (eg BSD fd passing) = */ + int32_t msg_controllen; /* Length of cmsg list */ + int32_t msg_flags; /* flags on received message */ +}; + +struct target_sockaddr { + uint8_t sa_len; + uint8_t sa_family; + uint8_t sa_data[14]; +} QEMU_PACKED; + +struct target_in_addr { + uint32_t s_addr; /* big endian */ +}; +/* + * netinet/in.h + */ +struct target_ip_mreq { + struct target_in_addr imr_multiaddr; + struct target_in_addr imr_interface; +}; + +struct target_ip_mreqn { + struct target_in_addr imr_multiaddr; + struct target_in_addr imr_address; + int32_t imr_ifindex; +}; + /* * sys/stat.h */ @@ -531,19 +567,6 @@ type safe_##name(type1 arg1, type2 arg2, type3 arg3, t= ype4 arg4, \ return safe_syscall(SYS_##name, arg1, arg2, arg3, arg4, arg5, arg6); \ } =20 -/* - * sys/socket.h - */ -struct target_sockaddr { - uint8_t sa_len; - uint8_t sa_family; - uint8_t sa_data[14]; -} QEMU_PACKED; - -struct target_in_addr { - uint32_t s_addr; /* big endian */ -}; - #define safe_ioctl(...) safe_syscall(SYS_ioctl, __VA_ARGS__) #define safe_fcntl(...) safe_syscall(SYS_fcntl, __VA_ARGS__) =20 --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097740; cv=none; d=zohomail.com; s=zohoarc; b=DP3u89oKHkupkN7KTTnwv5UBrPA7bwFCVZ19q8mpvqcLYDyw8vNUojkT8DbuCxr7KTZQRCXVmODzYetQUME4Y0plAf2gtosJBTAfgOK2Zyyo+abeykyEjS3XWqp6Lwr57uLhf+gGCgHRDt/8Ip9g7/RQnFdCID1aei+f5QbQVpM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097740; h=Content-Type: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=ldz8g7OydEb3EVY03O2qkGbLw0XKBY+xTBXKbXNsTOQ=; b=c3va+kGIB/KgsCYozKGA9uIH/eFt3EbR3KhgqZR964E3qofp+OQ/XPG0pMUWiUu8TL3/6xfPjOEEgINtbLcYv/yM6y4dfIM+LCeyAORYm69YBO9O98BB8JDVWMzAZ4ffdylQTbOgc2Tg0aMsEXVEtVPfMk9xOfXWuqdTR3ZtmPA= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097740862129.473454169173; Tue, 18 Aug 2026 17:02:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTgt-00028i-UG; Tue, 18 Aug 2026 19:57:59 -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 1wwTgs-00028M-3J for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:58 -0400 Received: from mail-oi1-x235.google.com ([2607:f8b0:4864:20::235]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTgp-0005FC-RT for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:57:57 -0400 Received: by mail-oi1-x235.google.com with SMTP id 5614622812f47-4b21f09ea42so392295b6e.2 for ; Tue, 18 Aug 2026 16:57:55 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.57.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:57:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097475; x=1787702275; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ldz8g7OydEb3EVY03O2qkGbLw0XKBY+xTBXKbXNsTOQ=; b=dc3bfjnFtmscpbaS43kuNRu4zWnmK+cEm0Z5g6Ht7hf5pmV/hO0z5R0UENKGg79/AS AIxqte2OzFOuSo5aSqy1URDzalhu7XNJi6o7PfjeUt+3olPmnpXN17vvToYNZRS1txp4 1s52GG6zV2p2hscqLx68AXqsPd+W7+NYopQzCIqJWiFgUO+0ixtygI3LQeplT8UHtHkn 01eyhi4hmM5mYOeZZNobyv+0/1FytaNuDeLiKHmg4n8feGzoO5o0AzbLBAjezvFDMJeI otcXcIkcefeP/pciXD5c2Au2o6qpLw3okDZzgcZCmGOV2f7vOctVrFi7AlG30DYiiFK/ fsCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097475; x=1787702275; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ldz8g7OydEb3EVY03O2qkGbLw0XKBY+xTBXKbXNsTOQ=; b=qpEQWTEJHh99Dh4ycccDJWKUMaYYsvUHz3JrCLxc0+AU85QAmwaOrwUQmQScwaY/rV YQs2XGnFmzfc4rNsNlRiN/a4flq6LWZ7JvOT+CQKGSVEnpWpRCjWKo5tx5p0GDcgnfe/ 2k7KAy11HPg94Bxciw4sbvBbQPpoCX16N75hAmA28qK3d+/0zAkk/pPuFRySVdsLVX2E BGhcf4ofunLPNzauCxeTtc6m16GcPSmfteR+30CdQ0LwL/ARiBmjpT8C7+HYnjJ5agLz YK4tMZpSvla4gY4Zn1m/7gvXdOiRSHi/q8B2ZlxSxF7gPLvNTGG3XUiS/M6JEbA10iN5 X0iQ== X-Gm-Message-State: AOJu0YxNh3ortR7IwZ1S/H9KAD1TqRZ+/EFgKShGc4K+6Skcb9U1Z6FJ J9zZRbPHpvDIyqjLmB3wMgozjcUxxDic9xKw1JsJENztlxBZvYwmTPBSBBd2bFY4kD4= X-Gm-Gg: AR+sD11LqWpcnynwLl8kDdpomLJphruMyEph98z3ncP+n4GxkhlM859irzKedAwGRKk lTmurYawIPmiHaf6dCK5ub88CZfNEORaXfSPXw/FgMPKzkvcJRNpoLejE/v1TwxmmQM+KXTl359 ytB9R8ZOKOY3sP3Pg7hPZwGUmqFuLVwOzBn8e80ItcSHXtmoRxSSTWhI+FCGe1097XI7affqoXP WOtC797H38EviW1Y6loKJ/mw9R5dsJOpIpXv1wFUrYXFbaTAb/ki+ot2XYxD9GZ2jEfvnCQz0MS +fsdq2DCnN0/mzrYNJ1ASpMoOBh5jF3Yco6iwrIYZORUUn8E/ouIlANZdhrNnmNzQ9BxnBFTnC5 vEV9cGpsA0nIpMHWa5oxF7ycZEicQ1dH5Fpml8XyDv8GRrJJjWERAJYY4Itppt5dZB2hDKumC8n C6RkmTRXqBbAINnZYLjsT/sycJ9Dk6Xisk/0Or+/U24u5X/Qo= X-Received: by 2002:a05:6808:4fca:b0:4b2:8d7b:390b with SMTP id 5614622812f47-4b2bcb1bba9mr347662b6e.19.1787097474732; Tue, 18 Aug 2026 16:57:54 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:07 -0600 Subject: [PATCH v4 14/40] bsd-user: Add bsd-socket.h with bind through getsockname MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-14-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Kyle Evans , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=12428; i=imp@bsdimp.com; h=from:subject:message-id; bh=56MSqb87ZQMy9Vq9aWPZqoA2+HszGSqkQxsuUxOVM0A=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPE0Xr/aUP92C98WKvK0YUQKvDwzPzAFSQ9dz jWzUbcUD+KJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxNBsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQBC/BAAg2bcERsZEdEqpyeOsmvC5CHTzkQUvBj XZk9fQ0to2jA+T34+EJNdw5FHAu020BwGVyV6gAN999VAeVCE6uQutkxxLgfuWIuEqe+DMXLuNK YwLbehVGcnThBx0kmO4h8WsJ4XjzqyXwxvjMUmWhvd39DbiugMvgbA9joVJoRBB+F4eQ/zQX2Er h5swVShLcICa+jXDJzsrIf9l/RRT9NQnyn0B62e4TVfw6NSCpku2NGoj5a1Kgnl/Ln7moFX4KlC 0052QfTP/IJ6458Qk/IMRYZIm/jjwFqq93nPtIHzdqncgXJrhCfGpQsuTLVIcVQ9CVjQU31hGSP k2fJXQSrrDoSC5SmQuSRBqR2Hi2Xa1R818zLA8DBRwX5puwUN1S+7P7DqHLHVpR9YfXiGFadLLx giYC/rCopzJfbWK6WqBjxF0Nu5xbickENVqNplXIXmGmlrmLWW4YRh1Ll5utMzKuvzp2A7NMSLN pNJXIZ+YWJqPb5m5YOf9J8vbUsxbKr5JW5C9U7PQ0NlnlW/ZaeLH+wsi2efUHLUxaVgcJxLQ/SO IcIDxt4LR3tpNpP6MeskG58R6K36HDDHNnD6RH0tC1SKJTpY9S/Ux2UlT3LxGg1/rjeAGwwcSl2 qeQxiCyAvrY3FpM33KxsXVdgMEHcC1Ln8Ffgt1hwTwlgjmZzZeLI= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::235; envelope-from=imp@bsdimp.com; helo=mail-oi1-x235.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097742495158500 Add the first set of socket system call shims: bind, connect, accept, getpeername, and getsockname. Also add safe_syscall wrappers for sendto, recvfrom, select, and pselect. Signed-off-by: Stacey Son Signed-off-by: Kyle Evans Assisted-by: Claude Opus 4.6 (1M context) Reviewed-by: Pierrick Bouvier Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/bsd-socket.h | 167 ++++++++++++++++++++++++++++++++++++++= ++++ bsd-user/freebsd/os-syscall.c | 13 ++++ bsd-user/syscall_defs.h | 112 ++++++++++++++++++++++++++++ 3 files changed, 292 insertions(+) diff --git a/bsd-user/bsd-socket.h b/bsd-user/bsd-socket.h new file mode 100644 index 0000000000..c786d6717a --- /dev/null +++ b/bsd-user/bsd-socket.h @@ -0,0 +1,167 @@ +/* + * socket related system call shims + * + * Copyright (c) 2013 Stacey D. Son + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#ifndef BSD_SOCKET_H +#define BSD_SOCKET_H + +#include +#include +#include +#include + +#include "qemu-bsd.h" + +ssize_t safe_recvfrom(int s, void *buf, size_t len, int flags, + struct sockaddr *restrict from, socklen_t *restrict fromlen); +ssize_t safe_sendto(int s, const void *buf, size_t len, int flags, + const struct sockaddr *to, socklen_t tolen); +int safe_select(int nfds, fd_set *readfs, fd_set *writefds, fd_set *except= fds, + struct timeval *timeout); +int safe_pselect(int nfds, fd_set *restrict readfds, + fd_set *restrict writefds, fd_set *restrict exceptfds, + const struct timespec *restrict timeout, + const sigset_t *restrict newsigmask); + +/* bind(2) */ +static inline abi_long do_bsd_bind(int sockfd, abi_ulong target_addr, + socklen_t addrlen) +{ + abi_long ret; + void *addr; + + if ((int)addrlen < 0) { + return -TARGET_EINVAL; + } + + addr =3D alloca(addrlen + 1); + ret =3D target_to_host_sockaddr(addr, target_addr, addrlen); + if (is_error(ret)) { + return ret; + } + + return get_errno(bind(sockfd, addr, addrlen)); +} + +/* connect(2) */ +static inline abi_long do_bsd_connect(int sockfd, abi_ulong target_addr, + socklen_t addrlen) +{ + abi_long ret; + void *addr; + + if ((int)addrlen < 0) { + return -TARGET_EINVAL; + } + addr =3D alloca(addrlen + 1); + + ret =3D target_to_host_sockaddr(addr, target_addr, addrlen); + + if (is_error(ret)) { + return ret; + } + + return get_errno(connect(sockfd, addr, addrlen)); +} + +/* accept(2) */ +static inline abi_long do_bsd_accept(int fd, abi_ulong target_addr, + abi_ulong target_addrlen_addr) +{ + socklen_t addrlen; + void *addr; + abi_long ret; + + if (target_addr =3D=3D 0) { + return get_errno(accept(fd, NULL, NULL)); + } + /* return EINVAL if addrlen pointer is invalid */ + if (get_user_u32(addrlen, target_addrlen_addr)) { + return -TARGET_EINVAL; + } + if ((int)addrlen < 0) { + return -TARGET_EINVAL; + } + if (!access_ok(VERIFY_WRITE, target_addr, addrlen)) { + return -TARGET_EINVAL; + } + addr =3D alloca(addrlen); + + ret =3D get_errno(accept(fd, addr, &addrlen)); + if (!is_error(ret)) { + if (is_error(host_to_target_sockaddr(target_addr, addr, addrlen)))= { + close(ret); + ret =3D -TARGET_EFAULT; + } else if (put_user_u32(addrlen, target_addrlen_addr)) { + close(ret); + ret =3D -TARGET_EFAULT; + } + } + return ret; +} + +/* getpeername(2) */ +static inline abi_long do_bsd_getpeername(int fd, abi_ulong target_addr, + abi_ulong target_addrlen_addr) +{ + socklen_t addrlen; + void *addr; + abi_long ret; + + if (get_user_u32(addrlen, target_addrlen_addr)) { + return -TARGET_EFAULT; + } + if ((int)addrlen < 0) { + return -TARGET_EINVAL; + } + if (!access_ok(VERIFY_WRITE, target_addr, addrlen)) { + return -TARGET_EFAULT; + } + addr =3D alloca(addrlen); + ret =3D get_errno(getpeername(fd, addr, &addrlen)); + if (!is_error(ret)) { + ret =3D host_to_target_sockaddr(target_addr, addr, addrlen); + if (is_error(ret)) { + ret =3D -TARGET_EFAULT; + } else if (put_user_u32(addrlen, target_addrlen_addr)) { + ret =3D -TARGET_EFAULT; + } + } + return ret; +} + +/* getsockname(2) */ +static inline abi_long do_bsd_getsockname(int fd, abi_ulong target_addr, + abi_ulong target_addrlen_addr) +{ + socklen_t addrlen; + void *addr; + abi_long ret; + + if (get_user_u32(addrlen, target_addrlen_addr)) { + return -TARGET_EFAULT; + } + if ((int)addrlen < 0) { + return -TARGET_EINVAL; + } + if (!access_ok(VERIFY_WRITE, target_addr, addrlen)) { + return -TARGET_EFAULT; + } + addr =3D alloca(addrlen); + + ret =3D get_errno(getsockname(fd, addr, &addrlen)); + if (!is_error(ret)) { + ret =3D host_to_target_sockaddr(target_addr, addr, addrlen); + if (is_error(ret)) { + ret =3D -TARGET_EFAULT; + } else if (put_user_u32(addrlen, target_addrlen_addr)) { + ret =3D -TARGET_EFAULT; + } + } + return ret; +} + +#endif /* BSD_SOCKET_H */ diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c index 228daed4c4..7bc9fedfb7 100644 --- a/bsd-user/freebsd/os-syscall.c +++ b/bsd-user/freebsd/os-syscall.c @@ -40,6 +40,7 @@ #include "bsd-proc.h" #include "bsd-misc.h" #include "bsd-signal.h" +#include "bsd-socket.h" =20 /* BSD dependent syscall shims */ #include "os-stat.h" @@ -73,6 +74,18 @@ safe_syscall4(int, ppoll, struct pollfd *, fds, nfds_t, = nfds, safe_syscall6(ssize_t, copy_file_range, int, infd, off_t *, inoffp, int, o= utfd, off_t *, outoffp, size_t, len, unsigned int, flags); =20 +/* used in bsd-socket */ +safe_syscall5(int, select, int, nfds, fd_set *, readfs, fd_set *, writefds, + fd_set *, exceptfds, struct timeval *, timeout); +safe_syscall6(int, pselect, int, nfds, fd_set *restrict, readfs, + fd_set *restrict, writefds, fd_set *restrict, exceptfds, + const struct timespec *restrict, timeout, const sigset_t *restrict, + newsigmask); +safe_syscall6(ssize_t, recvfrom, int, fd, void *, buf, size_t, len, int, f= lags, + struct sockaddr *restrict, from, socklen_t *restrict, fromlen); +safe_syscall6(ssize_t, sendto, int, fd, const void *, buf, size_t, len, in= t, + flags, const struct sockaddr *, to, socklen_t, tolen); + /* used in os-proc */ safe_syscall4(pid_t, wait4, pid_t, wpid, int *, status, int, options, struct rusage *, rusage); diff --git a/bsd-user/syscall_defs.h b/bsd-user/syscall_defs.h index 1a85ceb464..0d7002312f 100644 --- a/bsd-user/syscall_defs.h +++ b/bsd-user/syscall_defs.h @@ -203,6 +203,73 @@ struct target_freebsd__wrusage { struct target_freebsd_rusage wru_children; }; =20 +/* + * sys/socket.h + */ + +/* + * Types + */ +#define TARGET_SOCK_STREAM 1 /* stream socket */ +#define TARGET_SOCK_DGRAM 2 /* datagram socket */ +#define TARGET_SOCK_RAW 3 /* raw-protocol interface */ +#define TARGET_SOCK_RDM 4 /* reliably-delivered message */ +#define TARGET_SOCK_SEQPACKET 5 /* sequenced packet stream */ + + +/* + * Option flags per-socket. + */ + +#define TARGET_SO_DEBUG 0x0001 /* turn on debugging info recordin= g */ +#define TARGET_SO_ACCEPTCONN 0x0002 /* socket has had listen() */ +#define TARGET_SO_REUSEADDR 0x0004 /* allow local address reuse */ +#define TARGET_SO_KEEPALIVE 0x0008 /* keep connections alive */ +#define TARGET_SO_DONTROUTE 0x0010 /* just use interface addresses */ +#define TARGET_SO_BROADCAST 0x0020 /* permit sending of broadcast msg= s */ +#define TARGET_SO_USELOOPBACK 0x0040 /* bypass hardware when possible */ +#define TARGET_SO_LINGER 0x0080 /* linger on close if data present= */ +#define TARGET_SO_OOBINLINE 0x0100 /* leave received OOB data in line= */ +#define TARGET_SO_REUSEPORT 0x0200 /* allow local address & port reus= e */ +#define TARGET_SO_TIMESTAMP 0x0400 /* timestamp received dgram traffi= c */ +#define TARGET_SO_NOSIGPIPE 0x0800 /* no SIGPIPE from EPIPE */ +#define TARGET_SO_ACCEPTFILTER 0x1000 /* there is an accept filter */ +#define TARGET_SO_BINTIME 0x2000 /* timestamp received dgram traffi= c */ +#define TARGET_SO_NO_OFFLOAD 0x4000 /* socket cannot be offloaded */ +#define TARGET_SO_NO_DDP 0x8000 /* disable direct data placement */ + +/* + * Additional options, not kept in so_options. + */ +#define TARGET_SO_SNDBUF 0x1001 /* send buffer size */ +#define TARGET_SO_RCVBUF 0x1002 /* receive buffer size */ +#define TARGET_SO_SNDLOWAT 0x1003 /* send low-water mark */ +#define TARGET_SO_RCVLOWAT 0x1004 /* receive low-water mark */ +#define TARGET_SO_SNDTIMEO 0x1005 /* send timeout */ +#define TARGET_SO_RCVTIMEO 0x1006 /* receive timeout */ +#define TARGET_SO_ERROR 0x1007 /* get error status and clear */ +#define TARGET_SO_TYPE 0x1008 /* get socket type */ +#define TARGET_SO_LABEL 0x1009 /* socket's MAC label */ +#define TARGET_SO_PEERLABEL 0x1010 /* socket's peer's MAC label */ +#define TARGET_SO_LISTENQLIMIT 0x1011 /* socket's backlog limit */ +#define TARGET_SO_LISTENQLEN 0x1012 /* socket's complete queue length = */ +#define TARGET_SO_LISTENINCQLEN 0x1013 /* socket's incomplete queue lengt= h */ +#define TARGET_SO_SETFIB 0x1014 /* use this FIB to route */ +#define TARGET_SO_USER_COOKIE 0x1015 /* user cookie (dummynet etc.) */ +#define TARGET_SO_PROTOCOL 0x1016 /* get socket protocol (Linux name= ) */ + +/* alias for SO_PROTOCOL (SunOS name) */ +#define TARGET_SO_PROTOTYPE TARGET_SO_PROTOCOL + +/* + * Level number for (get/set)sockopt() to apply to socket itself. + */ +#define TARGET_SOL_SOCKET 0xffff /* options for socket level */ + +#ifndef CMSG_ALIGN +#define CMSG_ALIGN(len) (((len) + sizeof(long) - 1) & ~(sizeof(long) - 1)) +#endif + /* * sys/socket.h */ @@ -225,6 +292,51 @@ struct target_sockaddr { struct target_in_addr { uint32_t s_addr; /* big endian */ }; + +struct target_cmsghdr { + uint32_t cmsg_len; + int32_t cmsg_level; + int32_t cmsg_type; +}; + +/* + * mips32 is the exception to the general rule of long-alignment; it + * unconditionally uses 64-bit alignment instead. + */ +#if defined(TARGET_MIPS) && TARGET_ABI_BITS =3D=3D 32 +#define TARGET_ALIGNBYTES (sizeof(abi_llong) - 1) +#else +#define TARGET_ALIGNBYTES (sizeof(abi_long) - 1) +#endif + +#define TARGET_CMSG_NXTHDR(mhdr, cmsg, cmsg_start) \ + __target_cmsg_nxthdr(mhdr, cmsg, cmsg_start) +#define TARGET_CMSG_ALIGN(len) (((len) + TARGET_ALIGNBYTES) \ + & (size_t) ~TARGET_ALIGNBYTES) +#define TARGET_CMSG_DATA(cmsg) \ + ((unsigned char *)(cmsg) + TARGET_CMSG_ALIGN(sizeof(struct target_cmsg= hdr))) +#define TARGET_CMSG_SPACE(len) \ + (TARGET_CMSG_ALIGN(sizeof(struct target_cmsghdr)) + TARGET_CMSG_ALIGN(= len)) +#define TARGET_CMSG_LEN(len) \ + (TARGET_CMSG_ALIGN(sizeof(struct target_cmsghdr)) + (len)) + +static inline struct target_cmsghdr * +__target_cmsg_nxthdr(struct target_msghdr *__mhdr, + struct target_cmsghdr *__cmsg, + struct target_cmsghdr *__cmsg_start) +{ + struct target_cmsghdr *__ptr; + + __ptr =3D (struct target_cmsghdr *)((unsigned char *) __cmsg + + TARGET_CMSG_ALIGN(tswap32(__cmsg->cmsg_len))); + if ((unsigned long)((char *)(__ptr + 1) - (char *)__cmsg_start) > + tswap32(__mhdr->msg_controllen)) { + /* No more entries. */ + return (struct target_cmsghdr *)0; + } + return __ptr; +} + /* * netinet/in.h */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097513; cv=none; d=zohomail.com; s=zohoarc; b=Z3lJ2VYL5h0mHIYJzC6Qk5Kn5+8xK6M1kQk0egGou9T4UvvHr0n6wcOtr0MpEJAG8wue+kTfeK9GQKwBqEUuOoN7oJx8Jqm66SMXdOkXD2yr2RqP6an1Jwz+jtRHRK4Dew7RbdrbuMePKKAmLNPelQ7cbaTPIpR+lg7NjOE71SA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097513; h=Content-Type: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=8294n884KVGJva1YRI5QhIhR/RZ1F/vd4a8RO/2ocQs=; b=EQz24u/pTLZ7mYQZfvo4VSJQtBItbQHNgYman+xlLv1tXr/tKRbqi98VQGKA48r+956O210+bSi0BYpmE6+iUkp/5vpg0SY30NF2+n3zWqwMS1aBJhrU11Ev+YbEdH2paDAvyicYvrUTXGc+NIFCGIpJXY4DPpU1QosjgGTaY78= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178709751313363.18328024915297; Tue, 18 Aug 2026 16:58:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTgv-00029I-Ui; Tue, 18 Aug 2026 19:58:01 -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 1wwTgu-00028z-Dx for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:00 -0400 Received: from mail-oi1-x235.google.com ([2607:f8b0:4864:20::235]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTgs-0005Fb-QY for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:00 -0400 Received: by mail-oi1-x235.google.com with SMTP id 5614622812f47-4af81963f35so412591b6e.0 for ; Tue, 18 Aug 2026 16:57:58 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.57.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:57:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097478; x=1787702278; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=8294n884KVGJva1YRI5QhIhR/RZ1F/vd4a8RO/2ocQs=; b=aJ6bd183hKDitMeqRwXyIiopQy6iQMkOtyWraFVt714y1CKEn3BUA5raT5th/lOYFl tv4u5zllx35DIg+m98CQP+S2nVArL2IYWiVKgANZgZpkbVkkfkN93/hCt7Uyak+8ZSU8 +mSplxFf5qVH0NZFxKHg1xHtdXOqfkRlClTDuVXLGV5fv/nuHxhul9dXvKr11u8UlcFU HvwXo/28AN2OoB+yb3c1HTkYiI4THasF7ORBR9vg5bOr88yOf+JaFxG2TU/DxcOUw7ls pegto8NdoQYpwiYYbXJrdpAB0E4roh2rYzqFAdgHbZhuEX/kpvGJe/YWRSMmlFmi2/B1 BvaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097478; x=1787702278; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=8294n884KVGJva1YRI5QhIhR/RZ1F/vd4a8RO/2ocQs=; b=V+7owK/+uiwbXeH6txi4jFCE5PKcDWWhfq4FeQNq+lmCmRVe35Iwx5xACpJPA5RvXk 72x+6zzXG/R5cDRkRbnPuLoxRd6iAoeWIyv7jRYZ8Jni3O7Q0t9/W/L6oLOFW90APPbf zZClwxt8Um09Jgtq+vY6xnVLDf0lXS0mu7sk0PBDNhmvng6/4yA2cDujVqSjdaHFPSnS j2oYA/CM8Wv1kuyqUFujlsIVrAd8DWXrcbJ7NhM7f5hGOFvjXMfqIeFzqrtgpQd+z1gi Ps2YEZxAfa40hhtZmHFfOdBMZQcu+A7+NT7STJNhMumRLY7AzE409LSXcMddjysd6izR syfA== X-Gm-Message-State: AOJu0YwKH+iSWr854nU/lbwBfP8xS+zVTg/PySMPvT1Xfs+IYxEz9fyh tUXpEgaNxDmzGJndd068PKQKbbJRP9f7d1Pd2gn4zhRlRGwrow5ntlZEEnLrl02e/LFQkpjSPk+ vSHYbmvU= X-Gm-Gg: AR+sD11PQPfstYrebOsFcsMae2WQce4ZgNkcq/xjJpHJ5mjPOimTlfJD+KL+0i8QlBe 7EWA+Sw+QOhD0OfNKkXaeHN75KsgR+kKj6NhOlS1SYzO0o823Cazl+N7I8ytUN8luH/S/XSw96Z kSN6dMuKYes9nEFrtNd6NRr8OY0bB3QjmXETYDqH+Fji4LXIicOWaWL6paaaHrbWSdYAqhR+KFw reFpEYCvWlbiVTE6krYReHrtJl2/Hbf7XSQEzPIRPr0u6XI6esN1ldricfRuL5U76z9hVLOfAPg 79WogkB76H7zdbyJH/odD78ms+C74yuM1iMWmroRBdhfdQFZ57VzJzyeRBVZD/xdKycTfISYPWK +FOor8wxutQPJDKFEGS6B3/D7zaeoT2+08AixxMhzWVJuZ12tP4HeREa01MB5zFofFm/i1aSSPU 4C+xPoC2sSmtYtbnULln1HCHmqKZQ1V7Uls1zvNuC6Nf45KF8= X-Received: by 2002:a05:6808:1a08:b0:4b2:8d89:6a40 with SMTP id 5614622812f47-4b2bc903077mr313182b6e.7.1787097477824; Tue, 18 Aug 2026 16:57:57 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:08 -0600 Subject: [PATCH v4 15/40] bsd-user: Add socket shims socketpair through shutdown MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-15-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Kyle Evans , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=4413; i=imp@bsdimp.com; h=from:subject:message-id; bh=JyExbELLtZERoEtbIzRdDiDpg31vaLIGV/sZy3cGa8c=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPE2N1G/L6GQ/Npov4eK3jl7uwXbGr9chn9qh pui10UoiI+JAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxNhsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQAofxAAkuudgep+C3hVtefZQkGp8HmOW7P3z09 KNVHe5ofSJdRCWQr/Fuq8KPUkB0TH976zuOSK5JvOSSAYQHUK4AYloc31wvKKPI+q2YOKdQsAER tsv7l6BAdyKrxEsbZu2mvb8O7CzSE/a6vRdc+WTaZPzq8hEiba1jVhlWIg8R8cauidfNt4B4hU5 W6cUpHyo6WNMV8CwFc0sNIUCtwtxrXVqLKFG0nuvkvYSAoKZ8t/HvtNsEMH5rj0J2jhssxa+cl3 zXkmCVWyDhLt2kMrARlSghspk7ujHKYNoD6Kkt81ow6b02L12mWAR1IB8IJpnkZ1d+HWLOy2nij qXUdy21YZDuE/S3f3Qqcoo6gK0wo1CQy5Qeo/tmwwA37rnwfnd3sWDNXv31uDNyaF+Tu6SEoacP SYiQKKO8UsepuEEVHW2dUC9J0Q+5mJ29VFYQEGVY1mo+dvnTjXZIX8EVg9ZXwxt44COE7cr8gJC JBklSAQaGNM1VBkV0JbuCjlJC6KbgYwuLTl/Tb0YLnXvrXsz+isKSUGJ/39JK8CTCmPAREqsaUY EgdnNtLxFylFr9CR5ywp3HX80lnKSWSmR4q69vBSfAhbtWY11o57hTB1df77ISgtGjiivoYnVVS stL9aUp83QoRrbtqdsIYh3qX8fnMDfHkhc0n7/R0k02irDE+Mwus= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::235; envelope-from=imp@bsdimp.com; helo=mail-oi1-x235.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097515095158500 Complete bsd-socket.h with socketpair, sendto, recvfrom, socket, and shutdown system call shims. Signed-off-by: Stacey Son Signed-off-by: Kyle Evans Assisted-by: Claude Opus 4.6 (1M context) Reviewed-by: Pierrick Bouvier Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/bsd-socket.h | 116 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 116 insertions(+) diff --git a/bsd-user/bsd-socket.h b/bsd-user/bsd-socket.h index c786d6717a..43aacce5dc 100644 --- a/bsd-user/bsd-socket.h +++ b/bsd-user/bsd-socket.h @@ -164,4 +164,120 @@ static inline abi_long do_bsd_getsockname(int fd, abi= _ulong target_addr, return ret; } =20 +/* socketpair(2) */ +static inline abi_long do_bsd_socketpair(int domain, int type, int protoco= l, + abi_ulong target_tab_addr) +{ + int tab[2]; + abi_long ret; + + if (!access_ok(VERIFY_WRITE, target_tab_addr, sizeof(tab[0]) * 2)) { + return -TARGET_EFAULT; + } + ret =3D get_errno(socketpair(domain, type, protocol, tab)); + if (!is_error(ret)) { + if (put_user_s32(tab[0], target_tab_addr) || + put_user_s32(tab[1], target_tab_addr + sizeof(tab[0]))) { + ret =3D -TARGET_EFAULT; + } + } + return ret; +} + +/* sendto(2) */ +static inline abi_long do_bsd_sendto(int fd, abi_ulong msg, size_t len, + int flags, abi_ulong target_addr, + socklen_t addrlen) +{ + struct sockaddr *saddr; + void *host_msg; + abi_long ret; + + if ((int)addrlen < 0) { + return -TARGET_EINVAL; + } + if (len !=3D 0) { + host_msg =3D lock_user(VERIFY_READ, msg, len, 1); + if (!host_msg) { + return -TARGET_EFAULT; + } + } else { + host_msg =3D NULL; + } + if (target_addr) { + saddr =3D alloca(addrlen + 1); + ret =3D target_to_host_sockaddr(saddr, target_addr, addrlen); + if (is_error(ret)) { + unlock_user(host_msg, msg, 0); + return ret; + } + ret =3D get_errno(safe_sendto(fd, host_msg, len, flags, saddr, add= rlen)); + } else { + ret =3D get_errno(send(fd, host_msg, len, flags)); + } + unlock_user(host_msg, msg, 0); + return ret; +} + +/* recvfrom(2) */ +static inline abi_long do_bsd_recvfrom(int fd, abi_ulong msg, size_t len, + int flags, abi_ulong target_addr, + abi_ulong target_addrlen) +{ + socklen_t addrlen; + struct sockaddr *saddr; + void *host_msg; + abi_long ret; + + host_msg =3D lock_user(VERIFY_WRITE, msg, len, 0); + if (!host_msg) { + return -TARGET_EFAULT; + } + if (target_addr) { + if (get_user_u32(addrlen, target_addrlen)) { + ret =3D -TARGET_EFAULT; + goto fail; + } + if ((int)addrlen < 0) { + ret =3D -TARGET_EINVAL; + goto fail; + } + saddr =3D alloca(addrlen + 1); + ret =3D get_errno(safe_recvfrom(fd, host_msg, len, flags, saddr, + &addrlen)); + } else { + saddr =3D NULL; /* To keep compiler quiet. */ + ret =3D get_errno(recv(fd, host_msg, len, flags)); + } + if (!is_error(ret)) { + if (target_addr) { + if (is_error(host_to_target_sockaddr(target_addr, saddr, addrl= en))) { + ret =3D -TARGET_EFAULT; + goto fail; + } else if (put_user_u32(addrlen, target_addrlen)) { + ret =3D -TARGET_EFAULT; + goto fail; + } + } + unlock_user(host_msg, msg, ret); + } else { +fail: + unlock_user(host_msg, msg, 0); + } + return ret; +} + +/* socket(2) */ +static inline abi_long do_bsd_socket(abi_long domain, abi_long type, + abi_long protocol) +{ + return get_errno(socket(domain, type, protocol)); +} + +/* shutdown(2) */ +static inline abi_long do_bsd_shutdown(abi_long s, abi_long how) +{ + return get_errno(shutdown(s, how)); +} + #endif /* BSD_SOCKET_H */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097593; cv=none; d=zohomail.com; s=zohoarc; b=IM1IUXXYwjnWb1ZpuPu5AhVnwlbTH/yNm6Mx7nm0sWvU9DEOHwyA3AUqkulLa79z+QUKFVhr7n84tRO5CLULt531P3klXmk4Gpaos7Zbl5OcjlpSlc94NLEpC4QxwyQFjI2PL6+QgOGIUfY8A/MUU1fSEd9qVfq3BTlSiIzw1M4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097593; h=Content-Type: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=P05gKFAhnhtv6wMGKTIwVZmLdqAW4DZ8XvSW9UBujCU=; b=G2Saan6tvfA1gtblID4xyAcsMYbKc17LN9yaIq3JAqwAOMAJV0HAHh7IcqLxN/eEyZOhTPH/xy9/w2XYqCrks50EPhS4tCLnzdoJlqnVhNYn9umkajkOQq+IlGxjLo7SjrThwroxasD2hcL8qZd/MZDytQOoI88Fer+h9d4+3I8= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097593827166.31227761992818; Tue, 18 Aug 2026 16:59:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTgz-0002AE-AM; Tue, 18 Aug 2026 19:58: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 1wwTgx-00029m-0p for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:03 -0400 Received: from mail-oi1-x230.google.com ([2607:f8b0:4864:20::230]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTgu-0005Fs-Id for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:02 -0400 Received: by mail-oi1-x230.google.com with SMTP id 5614622812f47-4a45b3f0becso381899b6e.1 for ; Tue, 18 Aug 2026 16:58:00 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.57.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:57:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097479; x=1787702279; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=P05gKFAhnhtv6wMGKTIwVZmLdqAW4DZ8XvSW9UBujCU=; b=FONM9E610v7C68Ex9ejfFJKrBtbLRMqmbnwLaaZr6WW1a9StBJaIIGcMZxUQepTDNi fsl6//NqEhlIVMmr+M1a4LDfxR1T4asnS8YwSkBzOOwvlCaHosuNwkZ++ewG3+b/BqYq aNP2zDYYKfXeLL31At5JLkLdPplkrvJMsZIwX7qzDTfBWNx+HPeWHUEtCAK46m2S6T10 0URO4KlJ1xzPhFA/HMs7RkK2zoGF1kqL+doU9x5oj31BhF+rm0ZHnoKgUWjsKXcScFp5 oovv98utRZ4I4EkYq+7B0DLpaeMLo/bFO0upf/QLzxlFM2r/5hJbRc4J3n6X8h/G2VUI 4rOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097479; x=1787702279; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=P05gKFAhnhtv6wMGKTIwVZmLdqAW4DZ8XvSW9UBujCU=; b=LiXC8LfzBL5JzosdWfxhpRfvEh/wgRsPo4gV8pK8al6k5/jn86F5W693889kkGCTOz /6msMuxc+nMp9PmirpLFuwMXcz/zxwVEIi2vlx8tCoX5Rieh+xIVghXt1Xox/gTREBYo 5Z1LJA+3Vnv2oPLXpl87C9IeXuO2i44fiDoE9bPPbsXjIg4YHA0ZjQPogWQ2jfTd/Vmy 4FXFcZiVZKRtAV2XtDoKZqAMuxkBw950ENp2K0EM1J6mZZtIrqca8ooNuEwHup8+Hv2I CaqN/2Yi4+f16Eg+6ArdA5CoiZk96Tig0XWRhOpGmLsX4ULNuFDgjNufg7WyYjiYkTgD gyZA== X-Gm-Message-State: AOJu0YwpqOpI2cv6jWVqOQrJfOomWYLCNgm99+SQ57yPxl7qqf3F2/zZ dy3CdsXAyPbJIA/ADliJ+JI3XKPiJ6Gts2VuNc1OpXPwg+3R/R85QctiVgat/PeS/9c= X-Gm-Gg: AR+sD13wlOS2ev94yjPQcEihYiFyNCbi/J3ue2l3Mu71FPdaSbs0NBGuhV70BenBreR yINITdbF3YvvHFu0g8wezXH5+FhtMVpZtikvzB7q9pZC8lxiFQULeQYflxlykVuS9kRjihrY1zM ZY5mQlgjPGbAlAhFqsqunM7C4W6a+jNp5x+6JAhYlIuZryW64GmvHeEKf2V4oOMw4vweOUGdA5r 0veV/p0hl1PwbPjg8kQPsBbohN6zpt5NNSq9iJAioNN3M0c0gjf+fPBRNcbm2hPxlA+i58MMiA+ xVRqCrKjlWKMPxlq2TBeRil/a18n8EaQMVj7HJUrgfyZ4kERaFRcBvVVDRXKdxW3x/93PWfjaqy 5NcwmucLF4/fj3cqzomLjeJYx/bmwjr6MP/s0f66cj+s6bxDUgOa+aqfZzTUuSflPbQNserViMi 7KjHhIusPUkYa7IfkOPHzMHS8yzQgmAouZwRyMcqenKa3AMMwwMERdpU2CVA== X-Received: by 2002:a05:6808:bc5:b0:4a3:3108:866a with SMTP id 5614622812f47-4b2bcba1303mr342862b6e.17.1787097479208; Tue, 18 Aug 2026 16:57:59 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:09 -0600 Subject: [PATCH v4 16/40] bsd-user: Commit the generated os-sockopt.h files MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-16-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=20509; i=imp@bsdimp.com; h=from:subject:message-id; bh=mhEZGt3LGJuLt7Cq3uvWkaPE0b5klyv5X3fj+jZ4BHM=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPE48p33kCfcV9dgMDSGP4tYF+tucXLkhmlb+ +ltWqpQ8vGJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxOBsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQBg9BAAuex/885Bj57gaaU+UhF2c8fvjh+wUEe IC3yN1KGRF9YtYgTwKe75PLJ+LNlUoV/yZntIQsVIviB5L9QLXP9IN5kmRPoJDnm4dXg4mNFAQf Kbf0BVJrPLy3swm/I4xjpH0YurnvcsGLJavNcQKdeJAYZRlHz/Y3lgJ5adyMtP/O78okNF6qU4/ iwX0UZAiNloiKjaVsImkvArgnfmkY4psW5bpVRH/bta4HGjcEWSbaDPCoCtfZuWTtlxFcMXFRfc F7LXUONwvGwQfnsJlHTgAXeubp6yq9KGc1g0UKmOuKY+f4X9OHNq4/78qc+Be7BOwG9KkBdKo8g 9LkhS4tDEtULqXjHYpXh0W0OZTeljpuQq4YcQQzYA0HJCpPMLuA8BVJXKPTADp/oQveC1NYuGLP qTjQvIB0mANtiNFihp1EKnwvHe6SWxBGesfF2AeaT4ISnJ0TpJJAUZ+ec4o9UFg+6KfkWeBjzsA 7Sw0uCpBVvvDq3WVhlVbRZTQznwa2DS1/9hFVIJkCLchy53JzNawj96cxI3IxSKxFCCTBgmnUyX 6XBUv/Uy/4ClJRLxasXUUkFsX02+ET2R6pRqM5FUImCpEC+gtSMvtudNCUVdwTgSWbGgYW/KXV5 ELHyejdHrxmDmrvbj2WQ/cXNxDTFn7uNPWHD89oo9YJ45jV371m8= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::230; envelope-from=imp@bsdimp.com; helo=mail-oi1-x230.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, UPPERCASE_75_100=0.001 autolearn=no 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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097595706158500 Generate the table of all socket options in FreeBSD. This only works against the latest FreeBSD, so we have to commit this table for now. Once the supporting machinery is merged to the stable branches, we can move to generating it as a build artifact. This uses BSD-2-Clause because it's derived from BSD-2-Clause material. It's likely in the public domain, though, since it's a generated file. Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-sockopt.h | 316 ++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 316 insertions(+) diff --git a/bsd-user/freebsd/os-sockopt.h b/bsd-user/freebsd/os-sockopt.h new file mode 100644 index 0000000000..2f984cf8e3 --- /dev/null +++ b/bsd-user/freebsd/os-sockopt.h @@ -0,0 +1,316 @@ +/* Auto-generated by gen_sockopt.sh -- do not edit */ +/* SPDX-License-Identifier: BSD-2-Clause */ +#pragma once + +#define SOCK_LEVEL_NONE -1234 + +#include +#include +#include +#include +#include + +enum sockopt_type { + SOCKOPT_TYPE_NONE =3D 0, + SOCKOPT_TYPE___MSFILTERREQ, + SOCKOPT_TYPE_ACCEPT_FILTER_ARG, + SOCKOPT_TYPE_BOOL, + SOCKOPT_TYPE_DUMP, + SOCKOPT_TYPE_ICMP6_FILTER, + SOCKOPT_TYPE_IN6_PKTINFO, + SOCKOPT_TYPE_INT, + SOCKOPT_TYPE_IP_MREQ_SOURCE, + SOCKOPT_TYPE_IP_MREQ, + SOCKOPT_TYPE_IP_OPTS, + SOCKOPT_TYPE_IP6_DEST, + SOCKOPT_TYPE_IP6_HBH, + SOCKOPT_TYPE_IP6_RTHDR, + SOCKOPT_TYPE_IPV6_MREQ, + SOCKOPT_TYPE_LINGER, + SOCKOPT_TYPE_SADB_X_POLICY, + SOCKOPT_TYPE_SOCKADDR, + SOCKOPT_TYPE_SPLICE, + SOCKOPT_TYPE_TCP_FASTOPEN, + SOCKOPT_TYPE_TCP_FUNCTION_SET, + SOCKOPT_TYPE_TCP_INFO, + SOCKOPT_TYPE_TCP_PERF_INFO, + SOCKOPT_TYPE_TIMEVAL, + SOCKOPT_TYPE_U_CHAR, + SOCKOPT_TYPE_U_INT, + SOCKOPT_TYPE_UINT32_T, + SOCKOPT_TYPE_UINT64_T, +}; + +struct sockopt_entry { + int level; + int optname; + enum sockopt_type type[5]; +}; +static struct sockopt_entry sol_socket[] =3D { + { SOL_SOCKET , SO_DEBUG , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_ACCEPTCONN , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_REUSEADDR , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_KEEPALIVE , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_DONTROUTE , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_BROADCAST , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_USELOOPBACK , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_LINGER , { SOCKOPT_TYPE_LINGER, } }, + { SOL_SOCKET , SO_OOBINLINE , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_REUSEPORT , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_TIMESTAMP , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_NOSIGPIPE , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_ACCEPTFILTER , { SOCKOPT_TYPE_ACCEPT_FILTER= _ARG, } }, + { SOL_SOCKET , SO_BINTIME , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_NO_OFFLOAD , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_NO_DDP , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_REUSEPORT_LB , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_RERROR , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_SNDBUF , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_RCVBUF , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_SNDLOWAT , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_RCVLOWAT , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_SNDTIMEO , { SOCKOPT_TYPE_TIMEVAL, } }, + { SOL_SOCKET , SO_RCVTIMEO , { SOCKOPT_TYPE_TIMEVAL, } }, + { SOL_SOCKET , SO_ERROR , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_TYPE , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_LISTENQLIMIT , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_LISTENQLEN , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_LISTENINCQLEN , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_FIB , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_USER_COOKIE , { SOCKOPT_TYPE_UINT32_T, } }, + { SOL_SOCKET , SO_PROTOCOL , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_TS_CLOCK , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_MAX_PACING_RATE , { SOCKOPT_TYPE_UINT32_T, } }, + { SOL_SOCKET , SO_DOMAIN , { SOCKOPT_TYPE_INT, } }, + { SOL_SOCKET , SO_SPLICE , { SOCKOPT_TYPE_SPLICE, } }, + { SOL_SOCKET , NET_RT_DUMP , { SOCKOPT_TYPE_DUMP, } }, + { SOCK_LEVEL_NONE } +}; + +static struct sockopt_entry ipproto_ip[] =3D { + { IPPROTO_IP , IP_HDRINCL , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IP , IP_TOS , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IP , IP_TTL , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IP , IP_RECVOPTS , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IP , IP_RECVRETOPTS , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IP , IP_RECVDSTADDR , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IP , IP_RETOPTS , { SOCKOPT_TYPE_IP_OPTS, } }, + { IPPROTO_IP , IP_MULTICAST_TTL , { SOCKOPT_TYPE_U_INT, SOCKOP= T_TYPE_U_CHAR, } }, + { IPPROTO_IP , IP_MULTICAST_LOOP , { SOCKOPT_TYPE_U_INT, SOCKOP= T_TYPE_U_CHAR, } }, + { IPPROTO_IP , IP_ADD_MEMBERSHIP , { SOCKOPT_TYPE_IP_MREQ, } }, + { IPPROTO_IP , IP_DROP_MEMBERSHIP , { SOCKOPT_TYPE_IP_MREQ, } }, + { IPPROTO_IP , IP_MULTICAST_VIF , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IP , IP_RSVP_ON , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IP , IP_RSVP_OFF , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IP , IP_RSVP_VIF_ON , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IP , IP_RSVP_VIF_OFF , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IP , IP_PORTRANGE , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IP , IP_RECVIF , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IP , IP_IPSEC_POLICY , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IP , IP_ONESBCAST , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IP , IP_BINDANY , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IP , IP_ORIGDSTADDR , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IP , IP_RECVTTL , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IP , IP_MINTTL , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IP , IP_DONTFRAG , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IP , IP_RECVTOS , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IP , IP_ADD_SOURCE_MEMBERSHIP, { SOCKOPT_TYPE_IP_MREQ_S= OURCE, } }, + { IPPROTO_IP , IP_DROP_SOURCE_MEMBERSHIP, { SOCKOPT_TYPE_IP_MREQ_= SOURCE, } }, + { IPPROTO_IP , IP_BLOCK_SOURCE , { SOCKOPT_TYPE_IP_MREQ_SOURC= E, } }, + { IPPROTO_IP , IP_UNBLOCK_SOURCE , { SOCKOPT_TYPE_IP_MREQ_SOURC= E, } }, + { IPPROTO_IP , IP_MSFILTER , { SOCKOPT_TYPE___MSFILTERREQ= , } }, + { IPPROTO_IP , IP_VLAN_PCP , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IP , IP_FLOWID , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IP , IP_FLOWTYPE , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IP , IP_RSSBUCKETID , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IP , IP_RECVFLOWID , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IP , IP_RECVRSSBUCKETID , { SOCKOPT_TYPE_BOOL, } }, + { SOCK_LEVEL_NONE } +}; + +static struct sockopt_entry ipproto_ipv6[] =3D { + { IPPROTO_IPV6, IPV6_UNICAST_HOPS , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IPV6, IPV6_MULTICAST_IF , { SOCKOPT_TYPE_U_INT, } }, + { IPPROTO_IPV6, IPV6_MULTICAST_HOPS , { SOCKOPT_TYPE_U_INT, } }, + { IPPROTO_IPV6, IPV6_MULTICAST_LOOP , { SOCKOPT_TYPE_U_INT, } }, + { IPPROTO_IPV6, IPV6_JOIN_GROUP , { SOCKOPT_TYPE_IPV6_MREQ, } = }, + { IPPROTO_IPV6, IPV6_LEAVE_GROUP , { SOCKOPT_TYPE_IPV6_MREQ, } = }, + { IPPROTO_IPV6, IPV6_PORTRANGE , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IPV6, ICMP6_FILTER , { SOCKOPT_TYPE_ICMP6_FILTER,= } }, + { IPPROTO_IPV6, IPV6_CHECKSUM , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IPV6, IPV6_V6ONLY , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IPV6, IPV6_IPSEC_POLICY , { SOCKOPT_TYPE_SADB_X_POLICY= , } }, + { IPPROTO_IPV6, IPV6_RTHDRDSTOPTS , { SOCKOPT_TYPE_IP6_DEST, } }, + { IPPROTO_IPV6, IPV6_RECVPKTINFO , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IPV6, IPV6_RECVHOPLIMIT , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IPV6, IPV6_RECVRTHDR , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IPV6, IPV6_RECVHOPOPTS , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IPV6, IPV6_RECVDSTOPTS , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IPV6, IPV6_USE_MIN_MTU , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IPV6, IPV6_RECVPATHMTU , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IPV6, IPV6_PKTINFO , { SOCKOPT_TYPE_IN6_PKTINFO, = } }, + { IPPROTO_IPV6, IPV6_HOPLIMIT , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IPV6, IPV6_NEXTHOP , { SOCKOPT_TYPE_SOCKADDR, } }, + { IPPROTO_IPV6, IPV6_HOPOPTS , { SOCKOPT_TYPE_IP6_HBH, } }, + { IPPROTO_IPV6, IPV6_DSTOPTS , { SOCKOPT_TYPE_IP6_DEST, } }, + { IPPROTO_IPV6, IPV6_RTHDR , { SOCKOPT_TYPE_IP6_RTHDR, } = }, + { IPPROTO_IPV6, IPV6_RECVTCLASS , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IPV6, IPV6_AUTOFLOWLABEL , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IPV6, IPV6_TCLASS , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IPV6, IPV6_DONTFRAG , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IPV6, IPV6_BINDANY , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IPV6, IPV6_FLOWID , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IPV6, IPV6_FLOWTYPE , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IPV6, IPV6_RSSBUCKETID , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_IPV6, IPV6_RECVFLOWID , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IPV6, IPV6_RECVRSSBUCKETID, { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IPV6, IPV6_ORIGDSTADDR , { SOCKOPT_TYPE_BOOL, } }, + { IPPROTO_IPV6, IPV6_VLAN_PCP , { SOCKOPT_TYPE_INT, } }, + { SOCK_LEVEL_NONE } +}; + +static struct sockopt_entry ipproto_tcp[] =3D { + { IPPROTO_TCP , TCP_NODELAY , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_MAXSEG , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_NOPUSH , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_NOOPT , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_MD5SIG , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_INFO , { SOCKOPT_TYPE_TCP_INFO, } }, + { IPPROTO_TCP , TCP_LOG , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_TXTLS_MODE , { SOCKOPT_TYPE_U_INT, } }, + { IPPROTO_TCP , TCP_RXTLS_MODE , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_IWND_NB , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_IWND_NSEG , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_LOGID_CNT , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_USER_LOG , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_MAXUNACKTIME , { SOCKOPT_TYPE_U_INT, } }, + { IPPROTO_TCP , TCP_IDLE_REDUCE , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_REMOTE_UDP_ENCAPS_PORT, { SOCKOPT_TYPE_INT, } = }, + { IPPROTO_TCP , TCP_DELACK , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_FIN_IS_RST , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_LOG_LIMIT , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_SHARED_CWND_ALLOWED, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_PROC_ACCOUNTING , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_USE_CMP_ACKS , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_PERF_INFO , { SOCKOPT_TYPE_TCP_PERF_INFO= , } }, + { IPPROTO_TCP , TCP_KEEPINIT , { SOCKOPT_TYPE_U_INT, } }, + { IPPROTO_TCP , TCP_KEEPIDLE , { SOCKOPT_TYPE_U_INT, } }, + { IPPROTO_TCP , TCP_KEEPINTVL , { SOCKOPT_TYPE_U_INT, } }, + { IPPROTO_TCP , TCP_KEEPCNT , { SOCKOPT_TYPE_U_INT, } }, + { IPPROTO_TCP , TCP_FASTOPEN , { SOCKOPT_TYPE_TCP_FASTOPEN,= } }, + { IPPROTO_TCP , TCP_FUNCTION_BLK , { SOCKOPT_TYPE_TCP_FUNCTION_= SET, } }, + { IPPROTO_TCP , TCP_FUNCTION_ALIAS , { SOCKOPT_TYPE_TCP_FUNCTION_= SET, } }, + { IPPROTO_TCP , TCP_REUSPORT_LB_NUMA, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_MBUF_QUEUE , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_TLP_REDUCE , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_PACE_MAX_SEG, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_PACE_ALWAYS, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_PRR_SENDALOT, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_MIN_TO , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_EARLY_SEG , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_REORD_THRESH, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_REORD_FADE , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_TLP_THRESH , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_PKT_DELAY , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_IWINTSO , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_STARTUP_PG , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_DRAIN_PG , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_PROBE_RTT_INT, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_STARTUP_LOSS_EXIT, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_TSLIMITS , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_PACE_OH , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_USEDEL_RATE , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_MIN_RTO , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_MAX_RTO , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_ALGORITHM , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_PACE_PER_SEC, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_PACE_DEL_TAR, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_PACE_SEG_MAX, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_PACE_SEG_MIN, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_PACE_CROSS , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_TLP_USE , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_TMR_PACE_OH , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_DO_DETECTION, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_RACK_RTT_USE, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_RETRAN_WTSO , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_DATA_AFTER_CLOSE, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_PROBE_RTT_GAIN, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_PROBE_RTT_LEN, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_SEND_IWND_IN_TSO, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_USE_RACK_RR , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_HDWR_PACE , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_UTTER_MAX_TSO, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_EXTRA_STATE , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_FLOOR_MIN_TSO, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_MIN_TOPACEOUT, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_TSTMP_RAISES, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_POLICER_DETECT, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_BBR_RACK_INIT_RATE, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_RR_CONF , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_GP_INCREASE_CA, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_GP_INCREASE_SS, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_GP_INCREASE_REC, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_FORCE_MSEG , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_PACE_RATE_CA, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_PACE_RATE_SS, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_PACE_RATE_REC, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_NO_PRR , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_NONRXT_CFG_RATE, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_SHARED_CWND_ENABLE, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_TIMELY_DYN_ADJ , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_NO_PUSH_AT_MAX, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_PACE_TO_FILL, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_SHARED_CWND_TIME_LIMIT, { SOCKOPT_TYPE_INT, } = }, + { IPPROTO_TCP , TCP_RACK_PROFILE , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_HDWR_RATE_CAP , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_PACING_RATE_CAP , { SOCKOPT_TYPE_UINT64_T, } }, + { IPPROTO_TCP , TCP_HDWR_UP_ONLY , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_ABC_VAL , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_REC_ABC_VAL , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_MEASURE_CNT, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_DEFER_OPTIONS , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_PACING_BETA, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_PACING_BETA_ECN, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_TIMER_SLOP , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_DSACK_OPT , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_ENABLE_HYSTART, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_SET_RXT_OPTIONS, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_HI_BETA , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_SPLIT_LIMIT, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_PACING_DIVISOR, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_PACE_MIN_SEG, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_RACK_DGP_IN_REC , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_PACING_DND , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_SS_EEXIT , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_DGP_UPPER_BOUNDS, { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_NO_TIMELY , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_HONOR_HPTS_MIN , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_REC_IS_DYN , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_SIDECHAN_DIS , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_FILLCW_RATE_CAP , { SOCKOPT_TYPE_INT, } }, + { IPPROTO_TCP , TCP_GP_USE_LTBW , { SOCKOPT_TYPE_INT, } }, + { SOCK_LEVEL_NONE } +}; + +static struct sockopt_entry ipproto_udp[] =3D { + { IPPROTO_UDP , UDP_ENCAP , { SOCKOPT_TYPE_INT, } }, + { SOCK_LEVEL_NONE } +}; + +static struct sockopt_entry sol_local[] =3D { + { SOL_LOCAL , LOCAL_CREDS , { SOCKOPT_TYPE_INT, } }, + { SOL_LOCAL , LOCAL_CREDS_PERSISTENT, { SOCKOPT_TYPE_INT, } }, + { SOCK_LEVEL_NONE } +}; + +static struct sockopt_cache { + int level; + struct sockopt_entry *entry; +} so_cache[] =3D { + { SOL_SOCKET, sol_socket }, + { IPPROTO_IP, ipproto_ip }, + { IPPROTO_IPV6, ipproto_ipv6 }, + { IPPROTO_TCP, ipproto_tcp }, + { IPPROTO_UDP, ipproto_udp }, + { SOL_LOCAL, sol_local }, +}; --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097540; cv=none; d=zohomail.com; s=zohoarc; b=ODYGhmY7UedHfbEpJPurS30Ij9nYByzK9s152oyz5WBVtP5TXXQNuGPf2CbNxmBqkNHO9pZhccMy0A3M12Z6YHksLf+wRL4BwgGyIol7jGCstJFN3OgzFUvUdxKLN7+9CnAMyn40YRygMamqFDS4ZpgvhWyox83Q+/5YcbZXA6g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097540; h=Content-Type: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=iow9qajfhmYMga59c+8d/X1ecDIlGCULjEyRaVzS7QY=; b=RFpF+wXnZ/yCxw9ZQwu5eFm5VmvTEB/v5taKAyVAqktELiEGtprzo2IsYvruDH+nDKK6LZx9Vo5gUDyL7lRYNMxtkuA9xNHo8mXcb/L0LCRZoBsxJj2BqGjac8YroYJslV0H1bt0jSINZjizZJGZYDSuX0jGB3Nkw3Mxaa0UJzw= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097540871421.73593612021887; Tue, 18 Aug 2026 16:59:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTh0-0002AT-9h; Tue, 18 Aug 2026 19:58:06 -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 1wwTgy-0002A3-MW for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:04 -0400 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTgw-0005G3-Np for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:04 -0400 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-459281bc13bso333136fac.2 for ; Tue, 18 Aug 2026 16:58:02 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.57.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097481; x=1787702281; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=iow9qajfhmYMga59c+8d/X1ecDIlGCULjEyRaVzS7QY=; b=oQLy8XsndxtgOsS7i0LbTZPQCYLnY8S1kuDc9Q0tprXkTT7D+wrgEbo9gT4+0VjzgY 0c3zzNdQr74uMTu9oiqzsLHj/9IUnVB/dnRBi5vqyvHHC6h+3EAxx5PKxO0LkPM9r5R+ IVBAokrDO/lDsJiJJvvOhGbOjcGF4h5ipPNjSEXx9spKaCdDzQVlOnKMSrSB9XaiI7VJ HYlPDnbUIdbqOfMttRasdMocOKDw0zZDnj2xISNdw3I1hGklIa8DmJsex+q95hg3OTuw KbNquFxPdP0Np9T+wtqF+lO8SVUqBLs9DHCCaVD3fA8qwMUA9Qc4aeS5PTzZppfvl+9g Kogg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097481; x=1787702281; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=iow9qajfhmYMga59c+8d/X1ecDIlGCULjEyRaVzS7QY=; b=JYali/a0V+GJCpwHsl4Wz+bC05qgOGJ1lZktPKnK4CGY7VPewJI/l+JGKoXPphK8iA v4aIxFkIHcJ+EmuZGeKz+/JLLpQQW4vp19RAWTC9cFiY3iHWIirv+eZ0n3H/79wewpGL CjXTNFshQDI9xF/kauUP3zrcsE2T5pkNJwcQRDqJ/sbmA6bKSvw5/2Lciw1qVf9CnSWH kjWqGFb+XjU/XSIH3UfByopkUCFEQM7pPwxtAVJzBM3CRO7+KSpAwiobWL5rKTklS9yw Z0pQfYYnn2f1zRCNcvqr4VTVfSVM5eVyAjsOb/9t9JXYR6/eroEkcfUyu7FEtbr42BBo ZSpQ== X-Gm-Message-State: AOJu0YwisFy9C0HBhcJtKlei3FrFKx2zTHW9PRxgsmHUfJgr5xvTzkmu oylqN777yJFoGEyHK39nDC0w2UmSpNB/fhTjDOMIQ+5Pn7EBnRBpw1XNkw/6q803/En19C1x1Du hNZ1TEZA= X-Gm-Gg: AR+sD12k6aPIfrNsx0k0Ox7LzVo7pjREJmLbT69gmnnU/9RclqtPfIpl8XyJYHzuwps ii5GivQsLVAptC2wCf3xq59A/K7v08Rz2D21wU6jD88ESHyyd37y/cD+ZraAS94MjUoeLKFTyVl fR/2dqlcjBIvHkqWTk1unA0TQlvaUxWMXXEWlVl0GLDKQBcjGoHR5m6svtjHLUI796dHfSuvoW8 iwrmnnYI1ztxm0RTtoxpw2C/ZuurxZJXa7kWJjyLu3mglDqFJ3+W4F3vefym5SVo1OFXpjv8hqR x53DwA+8j02GzNKyQ8nIfHCE/mGmwwbapHl/RfmOUo4rWQACFlPqXMe1BPevX63kxAsLlVVp88o pU3JHm8wMC4yEzFrAZ1zjZL0ekJgPBtU+BShDiWbIEn76w06uEyXjc5XansgtbWk0YbzJz1uVVC KdQum2pqemrfhd7xDML/GpsY3JGhoMsw4mmMlczYXdUv70FGk= X-Received: by 2002:a05:6808:14c3:b0:4a4:88ab:126f with SMTP id 5614622812f47-4b2bcc22492mr313584b6e.21.1787097481554; Tue, 18 Aug 2026 16:58:01 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:10 -0600 Subject: [PATCH v4 17/40] bsd-user: Implement both getsockopt and setsockopt MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-17-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=11486; i=imp@bsdimp.com; h=from:subject:message-id; bh=6ZuOfhsrPJ64+xItOZmhdVLc9V8Npqc+NdbZVNt62Hc=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPE5QkShbRyhVc+UlJFrguPSkXaYK+fqvEHz2 08+xF5d4JeJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxORsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQD/2Q//TZi8vxtUh3YbaFywwb/XbrJWRfYheiH jbavst1TDJlUW+dpVZ2qNIEjyTW10fhEowCCmAAILNwvqTFNnvLxWGTEinaXX6CPGlZ7bsgY6RV DEOT5whrznf2j03BAMDi43YGysrfqROUpf9fVeAS9tEzR40kQdNmSgtEY7AxiKchNDWQ4tkcxqU oLIT09UxZO7o287CV3Qm/BMHtH03sL8L+iWhfCMktw/jQhEyeU5kUwwfCe53/mR0+YBLitodza4 K2ZADYWBLdWLCLpbuxcC4NgXCnXfvUR0Dzi1eQZHdtgUzPzxpwpaFUYlDFcAEaN9NkAfaS0nL5A PlAGhCTdzT37wPJkLYf+1fBB0Qsp/WJUB5qSY0ADiNURUUBLcfdIU8pOGiNWiLUvj9ZM0uA8GsT flvdGvNcpQIxFeBBo8YA24WPNaPS94SHvGUqkAFWaSkmZfs8CrWovfyvWBJzZmKpIeb9mNzumVU eMsct4gnKGQkLejCAnvUjYRimnwJ/+jvRhfR+AC8LxQH7SEG1DinYISqJxzrQAaZxg4l+8F2NQf a63Afq07G7DdkwpChDU9bPxPbvl+T8Prorzhsz5hxt0THFfXALMvyF3AeT5oc20yWED0A87Rsu1 4FvWHxOqMdYgRmsmgGzImSl5q8esuCmj9YWPs8gqKyHlO3Sb0Szk= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2001:4860:4864:20::31; envelope-from=imp@bsdimp.com; helo=mail-oa1-x31.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097541660158500 Implement get/setsockopt with the generated file describing the socket options. This uses a table driven conversion. At the moment, we only implement the simple types. For 64 on 64 with the same endian, we also try to just copy in/out since the representation should be the same. Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-socket.h | 340 +++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 340 insertions(+) diff --git a/bsd-user/freebsd/os-socket.h b/bsd-user/freebsd/os-socket.h new file mode 100644 index 0000000000..126e49b282 --- /dev/null +++ b/bsd-user/freebsd/os-socket.h @@ -0,0 +1,340 @@ +/* + * FreeBSD socket related system call shims + * + * Copyright (c) 2013-2014 Stacey D. Son + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#ifndef BSD_USER_FREEBSD_OS_SOCKET_H +#define BSD_USER_FREEBSD_OS_SOCKET_H + +#include +#include +#include +#include + +#include "qemu-os.h" +#include "os-sockopt.h" + +ssize_t safe_recvmsg(int s, struct msghdr *msg, int flags); +ssize_t safe_sendmsg(int s, const struct msghdr *msg, int flags); + +/* do_sendrecvmsg_locked() Must return target values and target errnos. */ +static abi_long do_sendrecvmsg_locked(int fd, struct target_msghdr *msgp, + int flags, int send) +{ + abi_long ret, len; + struct msghdr msg; + abi_ulong count; + struct iovec *vec; + abi_ulong target_vec; + + if (msgp->msg_name) { + msg.msg_namelen =3D tswap32(msgp->msg_namelen); + msg.msg_name =3D alloca(msg.msg_namelen + 1); + ret =3D target_to_host_sockaddr(msg.msg_name, + tswapal(msgp->msg_name), + msg.msg_namelen); + if (ret =3D=3D -TARGET_EFAULT) { + /* + * For connected sockets msg_name and msg_namelen must be igno= red, + * so returning EFAULT immediately is wrong. Instead, pass a = bad + * msg_name to the host kernel, and let it decide whether to r= eturn + * EFAULT or not. + */ + msg.msg_name =3D (void *)-1; + } else if (ret) { + goto out2; + } + } else { + msg.msg_name =3D NULL; + msg.msg_namelen =3D 0; + } + msg.msg_controllen =3D 2 * tswap32(msgp->msg_controllen); + if (msgp->msg_control) { + msg.msg_control =3D alloca(msg.msg_controllen); + memset(msg.msg_control, 0, msg.msg_controllen); + } else { + msg.msg_control =3D NULL; + } + + msg.msg_flags =3D tswap32(msgp->msg_flags); + + count =3D tswap32(msgp->msg_iovlen); + target_vec =3D tswapal(msgp->msg_iov); + + if (count > IOV_MAX) { + /* + * sendrcvmsg returns a different errno for this condition than + * readv/writev, so we must catch it here before lock_iovec() does. + */ + ret =3D -TARGET_EMSGSIZE; + goto out2; + } + + vec =3D lock_iovec(send ? VERIFY_READ : VERIFY_WRITE, + target_vec, count, send); + if (vec =3D=3D NULL) { + ret =3D -host_to_target_errno(errno); + goto out2; + } + msg.msg_iovlen =3D count; + msg.msg_iov =3D vec; + + if (send) { + if (msg.msg_control !=3D NULL) { + ret =3D t2h_freebsd_cmsg(&msg, msgp); + } else { + ret =3D 0; + } + if (ret =3D=3D 0) { + ret =3D get_errno(safe_sendmsg(fd, &msg, flags)); + } + } else { + ret =3D get_errno(safe_recvmsg(fd, &msg, flags)); + if (!is_error(ret)) { + len =3D ret; + if (msg.msg_control !=3D NULL) { + ret =3D h2t_freebsd_cmsg(msgp, &msg); + } else { + ret =3D 0; + } + if (!is_error(ret)) { + msgp->msg_namelen =3D tswap32(msg.msg_namelen); + msgp->msg_flags =3D tswap32(msg.msg_flags); + if (msg.msg_name !=3D NULL && msg.msg_name !=3D (void *)-1= ) { + ret =3D host_to_target_sockaddr(tswapal(msgp->msg_name= ), + msg.msg_name, msg.msg_namelen); + if (ret) { + goto out; + } + } + + ret =3D len; + } + } + } + +out: + unlock_iovec(vec, target_vec, count, !send); +out2: + return ret; +} + + +static abi_long do_sendrecvmsg(int fd, abi_ulong target_msg, + int flags, int send) +{ + abi_long ret; + struct target_msghdr *msgp; + + if (!lock_user_struct(send ? VERIFY_READ : VERIFY_WRITE, + msgp, + target_msg, + send ? 1 : 0)) { + return -TARGET_EFAULT; + } + ret =3D do_sendrecvmsg_locked(fd, msgp, flags, send); + unlock_user_struct(msgp, target_msg, send ? 0 : 1); + return ret; +} + +static inline struct sockopt_entry *get_sockopt_entry(int level) +{ + for (int i =3D 0; i < ARRAY_SIZE(so_cache); i++) { + if (so_cache[i].level =3D=3D level) { + return so_cache[i].entry; + } + } + return NULL; +} + +/* setsockopt(2) */ +static inline abi_long do_bsd_setsockopt(int sockfd, int level, int optnam= e, + abi_ulong optval_addr, socklen_t optlen) +{ + abi_long ret; + int val; + u_char ch; + uint64_t val64; + struct sockopt_entry *e =3D get_sockopt_entry(level); + void *p; + + if (e =3D=3D NULL) { + gemu_log("Unsupported setsockopt level=3D%d optname=3D%d\n", + level, optname); + return -TARGET_ENOPROTOOPT; + } + + while (e->level !=3D SOCK_LEVEL_NONE && e->optname !=3D optname) { + e++; + } + + if (e->level =3D=3D SOCK_LEVEL_NONE) { + gemu_log("Unsupported setsockopt level=3D%d optname=3D%d\n", + level, optname); + return -TARGET_ENOPROTOOPT; + } + + for (int i =3D 0; i < ARRAY_SIZE(e->type) && e->type[i] !=3D 0; i++) { + switch (e->type[i]) { + case SOCKOPT_TYPE_BOOL: + case SOCKOPT_TYPE_INT: + case SOCKOPT_TYPE_U_INT: + case SOCKOPT_TYPE_UINT32_T: + if (optlen !=3D sizeof(int)) { + continue; + } + if (get_user_u32(val, optval_addr)) { + return -TARGET_EFAULT; + } + return get_errno(setsockopt(sockfd, level, optname, &val, size= of(val))); + case SOCKOPT_TYPE_U_CHAR: + if (optlen !=3D sizeof(u_char)) { + continue; + } + if (get_user_u8(ch, optval_addr)) { + return -TARGET_EFAULT; + } + return get_errno(setsockopt(sockfd, level, optname, &ch, sizeo= f(ch))); + case SOCKOPT_TYPE_UINT64_T: + if (optlen !=3D sizeof(uint64_t)) { + continue; + } + if (get_user_u64(val64, optval_addr)) { + return -TARGET_EFAULT; + } + return get_errno(setsockopt(sockfd, level, optname, &val64, si= zeof(val64))); + default: +#if HOST_LONG_BITS !=3D TARGET_ABI_BITS || HOST_BIG_ENDIAN !=3D TARGET_BIG= _ENDIAN + gemu_log("Unsupported setsockopt level=3D%d optname=3D%d\n", + level, optname); + return -TARGET_ENOPROTOOPT; +#endif + break; + } + } + + /* + * When bit size and endian are the same, the structures are the same = (we hope). + */ + p =3D lock_user(VERIFY_READ, optval_addr, optlen, 1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D get_errno(setsockopt(sockfd, level, optname, p, optlen)); + unlock_user(p, optval_addr, 0); + return ret; +} + +/* getsockopt(2) */ +static inline abi_long do_bsd_getsockopt(int sockfd, int level, int optnam= e, + abi_ulong optval_addr, abi_ulong optlen) +{ + abi_long ret; + int val; + u_char ch; + socklen_t len; + uint64_t val64; + struct sockopt_entry *e =3D get_sockopt_entry(level); + void *p; + + if (e =3D=3D NULL) { + gemu_log("Unsupported getsockopt level=3D%d optname=3D%d\n", + level, optname); + return -TARGET_ENOPROTOOPT; + } + + while (e->level !=3D SOCK_LEVEL_NONE && e->optname !=3D optname) { + e++; + } + + if (e->level =3D=3D SOCK_LEVEL_NONE) { + gemu_log("Unsupported getsockopt level=3D%d optname=3D%d\n", + level, optname); + return -TARGET_ENOPROTOOPT; + } + + if (get_user_u32(len, optlen)) { + return -TARGET_EFAULT; + } + + for (int i =3D 0; i < ARRAY_SIZE(e->type) && e->type[i] !=3D 0; i++) { + switch (e->type[i]) { + case SOCKOPT_TYPE_BOOL: + case SOCKOPT_TYPE_INT: + case SOCKOPT_TYPE_U_INT: + case SOCKOPT_TYPE_UINT32_T: + if (len !=3D sizeof(int)) { + continue; + } + ret =3D get_errno(getsockopt(sockfd, level, optname, &val, &le= n)); + if (ret < 0) { + return ret; + } + if (len =3D=3D sizeof(int)) { + if (put_user_u32(val, optval_addr)) { + return -TARGET_EFAULT; + } + goto done; + } + continue; + case SOCKOPT_TYPE_U_CHAR: + if (len !=3D sizeof(u_char)) { + continue; + } + ret =3D get_errno(getsockopt(sockfd, level, optname, &ch, &len= )); + if (ret < 0) { + return ret; + } + if (len =3D=3D sizeof(u_char)) { + if (put_user_u8(ch, optval_addr)) { + return -TARGET_EFAULT; + } + goto done; + } + continue; + case SOCKOPT_TYPE_UINT64_T: + if (len !=3D sizeof(uint64_t)) { + continue; + } + ret =3D get_errno(getsockopt(sockfd, level, optname, &val64, &= len)); + if (ret < 0) { + return ret; + } + if (len =3D=3D sizeof(uint64_t)) { + if (put_user_u64(val64, optval_addr)) { + return -TARGET_EFAULT; + } + goto done; + } + continue; + default: +#if HOST_LONG_BITS !=3D TARGET_ABI_BITS || HOST_BIG_ENDIAN !=3D TARGET_BIG= _ENDIAN + gemu_log("Unsupported getsockopt level=3D%d optname=3D%d\n", + level, optname); + return -TARGET_ENOPROTOOPT; +#endif + break; + } + } + + /* + * When bit size and endian are the same, the structures are the same,= and + * if not that is handled above. + */ + p =3D lock_user(VERIFY_WRITE, optval_addr, len, 0); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D get_errno(getsockopt(sockfd, level, optname, p, &len)); + unlock_user(p, optval_addr, ret < 0 ? 0 : len); +done: + if (put_user_u32(len, optlen)) { + return -TARGET_EFAULT; + } + return ret; +} + + +#endif /* BSD_USER_FREEBSD_OS_SOCKET_H */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097657; cv=none; d=zohomail.com; s=zohoarc; b=c0YZ+SP4hb3KTJ1W4D+tGcpeBnFHflPRKr5XJuiZXuzPmnA3hbRXXdeNCT4Y9XKNZZVtlhdgW+2cOQr6rLy0G4Gw0GVFpRJ12Mub+Qv03oUuuCtwrSnTgHzJLYLHV7LOBJ6hg57268EKj/rzhyzGklnZlQ7RQCxBeT2k3wDsK6E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097657; h=Content-Type: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=CId43LBbKcBl5RKNJBzxoP27LJvXdGh0uXLlseMjipI=; b=EYYt+bnOhvam1aLKS6x3BogkMG0ulYU943oKzWOMQ2SIyAnR1pq43p5JAl40Rfi81zAwLX63ZG2mlhUVdEFZmS8C+7Ddv/oSs8ByxBvzg2Y+XRZGy2iAns7MBAdGPX+jpNAzhswGKm/2dgYks+Bs3tFXj+LRALBu7h3OrKrtyHs= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097657420695.3871685877735; Tue, 18 Aug 2026 17:00:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTh1-0002At-P9; Tue, 18 Aug 2026 19:58: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 1wwTh0-0002Ak-QW for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:06 -0400 Received: from mail-oi1-x22d.google.com ([2607:f8b0:4864:20::22d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTgz-0005GL-7P for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:06 -0400 Received: by mail-oi1-x22d.google.com with SMTP id 5614622812f47-4b21f09ec76so340229b6e.0 for ; Tue, 18 Aug 2026 16:58:04 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097484; x=1787702284; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=CId43LBbKcBl5RKNJBzxoP27LJvXdGh0uXLlseMjipI=; b=R60h3tiysn8EkyLoVnlJAQWM1/hMjKKoDCHp6UxfiUQlIjD0ULGxJjtL2QJ5hvCYwB 6KmSh4TYPn7rcj+UBcwUgX2QGQkJxfwwqhHCZOdMHknMPWDwiscG5yfy2z/pgEp4FM68 7JHBYfdFQhsnlUdO8rjIfv5L3Qhs1P0u0ctx3DSNHZ+pyMN2oBoG8st/1kNhsnHphKuP 8zOFlo6Tsjo3aElvmadLF4nH4T4zk2PViZL/PzIzqw9jElj8xFKoYZOddj6Hr5y3VOJh bBAqhgingWiFe5MP3soXRLEeDmeFWIWTroddvq3czZSu5vg2QE/sePVtXgzXykVlz2Iz CgSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097484; x=1787702284; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=CId43LBbKcBl5RKNJBzxoP27LJvXdGh0uXLlseMjipI=; b=Md+68JfR+JBYkk/tItvClFIbrahz7lYFvPxvtsWEoHyUEbujYH1hP4pzg1mFvVoHkt PfoRBEKJiPiKHEE6fXvOK9D3bpl+wr3Ay3e52eugWQXkXOJSYXbrwlyVpujRWmqdyDbe ZFuxnzW0F9jaAPXQVaYDd9uJF9G6AS3oK8yGpHIwBnk/lCBjuePKjgU8n83LKU8Hh5WF JuZRLs/txA/8GfIg3QNRjYtjpUGwYVJC/ldMGu+3NKaSxEF7W5wx8avS1wFnGZCp7yLd 6f8K1NW01XISFZVY4rKTTme9MKZLQrbqa/2DBZQtmhnsutwVMt7D8XxQqQLjAbtvEdq+ qDZQ== X-Gm-Message-State: AOJu0YwOc9LhuwlLxVE2ORY6ryRn/o4JelSdA5lv1hlFe+GwnTSIDbMC c5CS6rsYt/Vcfyg4fZcN19hel6RpvxHp1rmuCS4q74JiW0R/OvxyaioUEQ0+vB9dwnw= X-Gm-Gg: AR+sD133wtu1cZlvlwnvafrIoJygQxruR9IYMS0Hv3W7Ml80qbBlyGbp9XNrOfVq0RW xvy8PPb+dKyrveOUtnMdZLymIHutwopdIQhKB8qrheio/WXbYEs4gTwcAxIiJImf6chHk/Ayp/W MMf3/ml7BjEWyOZ+bEcLy7/4lH8K0lBI/F/UT9KnpJ2cfQhpbQOGhpQMC+d+tIr7Hj1nSb7wK/a hpLP7RmA5aJOIOKHyRKDU0GzQKDqoNSdIcfqu9dKxgVLJfhN6SfdGxxlXQHdSlqBNoGoV2vI4my c5cWKgmRlWLt+pjxc9j2Vl08D7D+gGObbmo3DgwqNiym1Lo7B5mnuqWB78ca+JxSdeP/+RRYYm2 ujTIPtVrMgtosbmcnk/Ra9R2yUnq71RnM5c20+gXU1DWbr7C0UbFR4Xf/bjYjuSwGWEhTKlZov/ fvi/Ifkcc7GxhIxPgVIlsELEYu/DH/VmspDNmwAK3PIVspmkA= X-Received: by 2002:a05:6808:4fe5:b0:495:e997:528d with SMTP id 5614622812f47-4b2bc88425fmr454840b6e.3.1787097484227; Tue, 18 Aug 2026 16:58:04 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:11 -0600 Subject: [PATCH v4 18/40] bsd-user: Add FreeBSD socket system calls MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-18-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2906; i=imp@bsdimp.com; h=from:subject:message-id; bh=9/LodQEazNPxU574lND5yAoPfGvZro3GQ14ZKs590XQ=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPE7Mn9Bo7oitIpHOCG/ThcPY6yE2raPnJuW+ xn6qOgRSsmJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxOxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQCeNw/+Px9aIPHAtfpcCXaTAb9+tpw8dnMHlMI VpBvtBylQcYWkYgqKthmgmdKidvcLOY8RB+9+p4MfZcSBhtuVZ6PNI9yAw/4z9E6a0GYeiZqtHD s1P47i22AHi8WWh6mTFuUyx4iKTtaOczXlAWQbPnj/gimzpLnfT9QmZAei3/mHg3lQDnw2PMZJz YsMoHNi1x9wMAHZ1C+Cwf5P3v1tJDxaRnjReW9BALLY7PstBCFb8jqcV6YbnyVns7tT+zFTN5ML mCzXw/qlIQhcgHKUjoxBMXmcMQO/mPzUvkwvqNaRIjITu/J5TdZfy84JcknCXCXrJ/fc6TV9yE0 1l+kk54VtbS8r4kRn8lB5RcHA6MGMAxtWjHF79CVaddzbCEGHp41sUdP5plVoCsEIAO2AU//T7Q yovMS9IX+rsgAtCXnYq/5jS1fFsSvUqSbeE+GAzx9Hru47QbRypYrXndUsjEvLQpCj7S6GI9BUm FQ/nXkLuoLElLnjyQwncWj/6HkykOHQCWP8jsDgONYJodh+yDStnIcZ/f/s9/6szdM9DLd9IV68 OeAgOT5JVxFpsTJQDbisktFFSs4AwLRYwt1AD3614sWf4ei+sMZd+UhUwVky66QDXkBdWEN8Xl3 saEfVUphR5iRF8ehi2E9nBObaOjiu7Q+INVHH4thWQ0fZEzndBE8= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::22d; envelope-from=imp@bsdimp.com; helo=mail-oi1-x22d.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097657853158500 Complete os-socket.h with setfib, bindat, connectat, and accept4. Signed-off-by: Stacey Son Assisted-by: Claude Opus 4.6 (1M context) Reviewed-by: Pierrick Bouvier Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-socket.h | 83 ++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 83 insertions(+) diff --git a/bsd-user/freebsd/os-socket.h b/bsd-user/freebsd/os-socket.h index 126e49b282..b0f2498ff7 100644 --- a/bsd-user/freebsd/os-socket.h +++ b/bsd-user/freebsd/os-socket.h @@ -336,5 +336,88 @@ done: return ret; } =20 +/* setfib(2) */ +static inline abi_long do_freebsd_setfib(abi_long fib) +{ + + return get_errno(setfib(fib)); +} + +/* bindat(2) */ +static inline abi_long do_freebsd_bindat(int fd, int sockfd, + abi_ulong target_addr, socklen_t addrlen) +{ + abi_long ret; + void *addr; + + if ((int)addrlen < 0) { + return -TARGET_EINVAL; + } + + addr =3D alloca(addrlen + 1); + ret =3D target_to_host_sockaddr(addr, target_addr, addrlen); + if (is_error(ret)) { + return ret; + } + + return get_errno(bindat(fd, sockfd, addr, addrlen)); +} + +/* connectat(2) */ +static inline abi_long do_freebsd_connectat(int fd, int sockfd, + abi_ulong target_addr, socklen_t addrlen) +{ + abi_long ret; + void *addr; + + if ((int)addrlen < 0) { + return -TARGET_EINVAL; + } + addr =3D alloca(addrlen + 1); + + ret =3D target_to_host_sockaddr(addr, target_addr, addrlen); + + if (is_error(ret)) { + return ret; + } + + return get_errno(connectat(fd, sockfd, addr, addrlen)); +} + +/* accept4(2) */ +static inline abi_long do_freebsd_accept4(int fd, abi_ulong target_addr, + abi_ulong target_addrlen_addr, int flags) +{ + socklen_t addrlen; + void *addr; + abi_long ret; + + if (target_addr =3D=3D 0) { + return get_errno(accept(fd, NULL, NULL)); + } + /* return EINVAL if addrlen pointer is invalid */ + if (get_user_u32(addrlen, target_addrlen_addr)) { + return -TARGET_EINVAL; + } + if ((int)addrlen < 0) { + return -TARGET_EINVAL; + } + if (!access_ok(VERIFY_WRITE, target_addr, addrlen)) { + return -TARGET_EINVAL; + } + addr =3D alloca(addrlen); + + ret =3D get_errno(accept4(fd, addr, &addrlen, flags)); + if (!is_error(ret)) { + if (is_error(host_to_target_sockaddr(target_addr, addr, addrlen)))= { + close(ret); + ret =3D -TARGET_EFAULT; + } else if (put_user_u32(addrlen, target_addrlen_addr)) { + close(ret); + ret =3D -TARGET_EFAULT; + } + } + return ret; +} =20 #endif /* BSD_USER_FREEBSD_OS_SOCKET_H */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097702; cv=none; d=zohomail.com; s=zohoarc; b=dAFFJJ4Hkt/zvw86qaqt2oFJpuB6LPDwiDO4IGlC8Zu4L0NJdYTAtDUCV4WgqaXH5B/mmqVQmEZ1xw/Lwr8k918AWmXU/e1JIi/5ZOstRc3CSGWdhWM54LY+6oCI25LBUI9E4aK1K0EzUohCC7zvHJPRp2bbpBpSqnKqM2Qf4mk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097702; h=Content-Type: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=6E8INjzxJXr9KwFH46m1NeXnpRMIGd6BTvLbPm7Ex6s=; b=OZ6YENRX6ps/LCJ+3UzqXLdmaJTacVLbY4RTJczYdkK9mAXU0sxu7eHZ6i5uIW8c1Fjv8gTEvtPKybRq9CzUDsRMTiEhd7wOmvV61+BUkkWwY4VL8T8m0geMPWftAa3g7h89ydAYzGoPgrWGcbQR5ObRJeLOicKHbqonR7qKkkc= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097702807700.9524041740698; Tue, 18 Aug 2026 17:01:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTh5-0002BV-RC; Tue, 18 Aug 2026 19:58: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 1wwTh4-0002BF-F8 for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:10 -0400 Received: from mail-oi1-x234.google.com ([2607:f8b0:4864:20::234]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTh2-0005Gg-6s for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:10 -0400 Received: by mail-oi1-x234.google.com with SMTP id 5614622812f47-499f6e0bbabso354544b6e.0 for ; Tue, 18 Aug 2026 16:58:07 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097487; x=1787702287; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=6E8INjzxJXr9KwFH46m1NeXnpRMIGd6BTvLbPm7Ex6s=; b=ycB2ljxepelOxKSwTawHZy8fMOD6/Zv2831BA17qgDEo1NFPTilQ0pwz34Hq40p3Bo N5hPIK4ncnlKrL3q1LXoA+JlyJPL/AHTuM9L+JyoODiYQBRlTiKfYSThlAxWTYa8lrmk Xwr3BYZ3E5nCHMwKafmN1OmJ98Ara4Dg1Y3rM6Sd0vDmlt4EJyyNfJQisRWcN0W++SNf h8vEW6RPNWych1uKjIlo3lD0cgiOl5t0vWTdxwHLq/j/PG2fNHTcSDsjqU1GRfkEyfAl pSTT4o86lH+7HAYSFaIVrYj7xznYxu5WEaZbzfNX+Cookq6nfFTC4zs6iOlQGsRa90YF dSXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097487; x=1787702287; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=6E8INjzxJXr9KwFH46m1NeXnpRMIGd6BTvLbPm7Ex6s=; b=Qbg1Fq939bjGkXX67yxoNYkaaih3+U6LmT+ym6Fku6uZNIOkbq+1xFsSLYZaqqsyqR w+kuxeP+8r5k3gwmGvUW/ugoHE95NiRiutPTaurEmlbfoad6wjWGXzTFWlcOqVSyRGW1 odBpmYQ4PEhOavR+zYK/z34cwP1QjTUWV8CmtbpbpdRWUP8VR3OVbIq/jKz7rWwS9zHU PQYuRodGypyDvlDIKIhhUSZ7sCI+ZRrMqmHOVR+f49n6KIL0Pdj2tMfO1u4TKqeObxcL HhT1hzaRT4jcn5a1+BBQMJqRMk/sb1Rj130rgv6gZ5D+UMfDzgX/DzY8wC8kMqjSH8K3 3mxA== X-Gm-Message-State: AOJu0YxwWoMJjP7ZVX88LYp5WdhcR9QdY2PybYgED6aqRE+fLuVlBuTX NfzW5J3v0RrfpyTlaUyW6AhU9aFJNeagN9p67v83iS4p7ItayVr80MkTcJvI7SisDQYDyIOLdQK dKcJZbwg= X-Gm-Gg: AR+sD13F8zffsrH+f3Pt1bexXx17Z27x+BNh5dtBWFO8HXoNeivh364rPtTsFXV291F j3PjXjpwZfOzChWwy34ehxiRxQPVYcw0clwaKH398NOKx/eI0CAeK61n9IZjeDb8l/XWH5eYZkK g3YkKP+vfl3NtGYshCNrVBnHu8bAHtqcWQ8uUxjhb7XcfPdjtlt/nJsrfGYkx3+ECRst+b1hY3/ wW2IMyZ5vDgrEW6Zh4nuOs/r/YsCbgP5bcQmtUT4zs1vZ70w9IpUKZ24SBAv6Ynq9kAA6siL426 TlLbd1HE28e0S3YQZ6ctyOAPA96Zb8R3C0XjmSt9CQd77x/7Y1okqqm8Z7zUZWOBHimeqfOgNTB 1N/VcI/WEqKx7usnYZzFR7ciUb2LdMiMy3cLlhfiJYc7+Ppud+owiT72TL1zYk7aMlp+5UjNrTM VEM+1aYqKsFexdT5aFS+MAB+WurK+htmvslswqZzp6Ol1kaO0TT7I6YkDHog== X-Received: by 2002:a05:6808:c2d6:b0:4a4:933:b20f with SMTP id 5614622812f47-4b2bc95f49emr362866b6e.7.1787097487067; Tue, 18 Aug 2026 16:58:07 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:12 -0600 Subject: [PATCH v4 19/40] bsd-user: Add os-socket.[ch] sendmsg, recvmsg and cmsg MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-19-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , =?utf-8?q?Mika=C3=ABl_Urankar?= , Kyle Evans , Michal Meloun , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=12886; i=imp@bsdimp.com; h=from:subject:message-id; bh=omMVtbAu8HlMop6aLpFoZ/FFEhIaHmzfJpZkuhQKW0A=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPE8NJOfY6yEzVPFFC+xHW9o1aMdvnsvqZpse d4AFILF+QiJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxPBsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQAGKRAA5PY2WuZuyWiQ8Rjg+C9EFS28WFUTA9z pU1Jc4DqBd+aMDZEeCVAZHTo7pJ2zvgg7xHjO7YaXNj2zyP1WbGfNbj+L0ZPkIYj29wUg5XEdmL y0osOXdyqZYPt0wugzyO4EVZe3cifSyEwpviCsTEQWeycGCsa7DRUQSi05m2/81x7Mq0pQBUg1d lEEoaAIbPEvjKiIh3Tz8x11ihf0y9M3Sg2ONWP6m+Dn7HQh8srrf4OzUez4DI9BCFti21YmJxVy NdUtQdghZBeEdBN6esi+8WlB6idpJaGH7xkBvGV/TIcXH4K0KFMeIsDJJVkUQUNwzN+J3MMDjLO Ra8Cm3eBuEm2NBhv9/4f1qn56zQzeksULWP1/bAbuHKwWEttyv6UK5vYcoEM4qZX0P3WgrKxOyr udGcx4Ly/8nUy0Crkpw3vA964PgrXZjKV5yX7IbgCUHcAQ9DrPnWb8eXkVbWB+dNouK/bHbG5iv FEHy2oUfaKhyvI4FNO+/q5wI+G8B/Z6rVAeoipmDpzFC+Nenfkxh8BwbR3Hbu7/N0dWurRkT81r 2z/ZEYx+jcP6Adh0aSFVDgHfXs/ddw3v8i35R8jYwuvr+CcMcgvEqNqJREUeF5pXIOcTPHokSEP tdLcm+s5TXVCzux4Ewt9MJaCr53tjELeV4ymFNDQHA3+7r2rFzOA= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::234; envelope-from=imp@bsdimp.com; helo=mail-oi1-x234.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097704219158500 Add the first part of FreeBSD socket support: do_sendrecvmsg_locked and do_sendrecvmsg functions. Also add target_msghdr, target_cmsghdr, and CMSG macros structures to syscall_defs.h. Add target-to-host and host-to-target control message conversion functions (t2h_freebsd_cmsg and h2t_freebsd_cmsg) for sendmsg/recvmsg support, and add os-socket.c to the FreeBSD build. Signed-off-by: Stacey Son Signed-off-by: Mika=C3=ABl Urankar Signed-off-by: Kyle Evans Signed-off-by: Michal Meloun Assisted-by: Claude Opus 4.6 (1M context) Reviewed-by: Pierrick Bouvier Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/meson.build | 3 +- bsd-user/freebsd/os-socket.c | 239 ++++++++++++++++++++++++++++++++++++++= ++++ bsd-user/freebsd/os-socket.h | 13 ++- bsd-user/freebsd/os-syscall.c | 3 + 4 files changed, 253 insertions(+), 5 deletions(-) diff --git a/bsd-user/freebsd/meson.build b/bsd-user/freebsd/meson.build index 38f2debf7e..83593a1e20 100644 --- a/bsd-user/freebsd/meson.build +++ b/bsd-user/freebsd/meson.build @@ -4,8 +4,9 @@ bsd_syscall_nr =3D custom_target('bsd-syscall-h', command: [sh, meson.current_source_dir() / 'scripts/syscallhdr.sh', '@= INPUT@', '@OUTPUT@', 'FREEBSD']) =20 bsd_user_ss.add(files( - 'os-stat.c', 'os-proc.c', + 'os-socket.c', + 'os-stat.c', 'os-sys.c', 'os-syscall.c'), bsd_syscall_nr diff --git a/bsd-user/freebsd/os-socket.c b/bsd-user/freebsd/os-socket.c new file mode 100644 index 0000000000..9c723d7608 --- /dev/null +++ b/bsd-user/freebsd/os-socket.c @@ -0,0 +1,239 @@ +/* + * FreeBSD socket related system call helpers + * + * Copyright (c) 2013 Stacey D. Son + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#include "qemu/osdep.h" + +#include +#include +#include + +#include "qemu.h" +#include "qemu-os.h" + +abi_long t2h_freebsd_cmsg(struct msghdr *msgh, + struct target_msghdr *target_msgh); +abi_long h2t_freebsd_cmsg(struct target_msghdr *target_msgh, + struct msghdr *msgh); + +abi_long t2h_freebsd_cmsg(struct msghdr *msgh, + struct target_msghdr *target_msgh) +{ + struct cmsghdr *cmsg =3D CMSG_FIRSTHDR(msgh); + socklen_t msg_controllen; + abi_ulong target_cmsg_addr; + struct target_cmsghdr *target_cmsg, *target_cmsg_start; + socklen_t space =3D 0; + + msg_controllen =3D tswap32(target_msgh->msg_controllen); + if (msg_controllen < sizeof(struct target_cmsghdr)) { + goto the_end; + } + target_cmsg_addr =3D tswapal(target_msgh->msg_control); + target_cmsg =3D lock_user(VERIFY_READ, target_cmsg_addr, msg_controlle= n, 1); + target_cmsg_start =3D target_cmsg; + if (!target_cmsg) { + return -TARGET_EFAULT; + } + + while (cmsg && target_cmsg) { + void *data =3D CMSG_DATA(cmsg); + void *target_data =3D TARGET_CMSG_DATA(target_cmsg); + int len =3D (unsigned char *)(target_cmsg) + + tswap32(target_cmsg->cmsg_len) - (unsigned char *)target_data; + + space +=3D CMSG_SPACE(len); + if (space > msgh->msg_controllen) { + space -=3D CMSG_SPACE(len); + /* + * This is a QEMU bug, since we allocated the payload area our= selves + * (unlike overflow in host-to-target conversion, which is jus= t the + * guest giving us a buffer that's too small). It can't happen= for + * the payload types we currently support; if it becomes an is= sue in + * future we would need to improve our allocation strategy to + * something more intelligent than "twice the size of the targ= et + * buffer we're reading from". + */ + gemu_log("Host cmsg overflow\n"); + break; + } + + if (tswap32(target_cmsg->cmsg_level) =3D=3D TARGET_SOL_SOCKET) { + cmsg->cmsg_level =3D SOL_SOCKET; + } else { + cmsg->cmsg_level =3D tswap32(target_cmsg->cmsg_level); + } + cmsg->cmsg_type =3D tswap32(target_cmsg->cmsg_type); + cmsg->cmsg_len =3D CMSG_LEN(len); + + if (cmsg->cmsg_level =3D=3D SOL_SOCKET && cmsg->cmsg_type =3D=3D S= CM_RIGHTS) { + int *fd =3D (int *)data; + int *target_fd =3D (int *)target_data; + int i, numfds =3D len / sizeof(int); + + for (i =3D 0; i < numfds; i++) { + __get_user(fd[i], target_fd + i); + } + } else if ((cmsg->cmsg_level =3D=3D SOL_SOCKET) && + (cmsg->cmsg_type =3D=3D SCM_TIMESTAMP) && + (len =3D=3D sizeof(struct target_freebsd_timeval))) { + /* copy struct timeval to host */ + struct timeval *tv =3D (struct timeval *)data; + struct target_freebsd_timeval *target_tv =3D + (struct target_freebsd_timeval *)target_data; + __get_user(tv->tv_sec, &target_tv->tv_sec); + __get_user(tv->tv_usec, &target_tv->tv_usec); + } else { + gemu_log("Unsupported target ancillary data: %d/%d\n", + cmsg->cmsg_level, cmsg->cmsg_type); + memcpy(data, target_data, len); + } + + cmsg =3D CMSG_NXTHDR(msgh, cmsg); + target_cmsg =3D TARGET_CMSG_NXTHDR(target_msgh, target_cmsg, + target_cmsg_start); + } + unlock_user(target_cmsg_start, target_cmsg_addr, 0); +the_end: + msgh->msg_controllen =3D space; + return 0; +} + +abi_long h2t_freebsd_cmsg(struct target_msghdr *target_msgh, + struct msghdr *msgh) +{ + struct cmsghdr *cmsg =3D CMSG_FIRSTHDR(msgh); + socklen_t msg_controllen; + abi_ulong target_cmsg_addr; + struct target_cmsghdr *target_cmsg, *target_cmsg_start; + socklen_t space =3D 0; + + msg_controllen =3D tswap32(target_msgh->msg_controllen); + if (msg_controllen < sizeof(struct target_cmsghdr)) { + goto the_end; + } + target_cmsg_addr =3D tswapal(target_msgh->msg_control); + target_cmsg =3D lock_user(VERIFY_WRITE, target_cmsg_addr, msg_controll= en, 0); + target_cmsg_start =3D target_cmsg; + if (!target_cmsg) { + return -TARGET_EFAULT; + } + + while (cmsg && target_cmsg) { + void *data =3D CMSG_DATA(cmsg); + void *target_data =3D TARGET_CMSG_DATA(target_cmsg); + int len =3D (unsigned char *)(cmsg) + cmsg->cmsg_len - + (unsigned char *)data; + + int tgt_len, tgt_space; + + /* + * We never copy a half-header but may copy half-data; this is Lin= ux's + * behaviour in put_cmsg(). Note that truncation here is a guest p= roblem + * (which we report to the guest via the CTRUNC bit), unlike trunc= ation + * in target_to_host_cmsg, which is a QEMU bug. + */ + if (msg_controllen < sizeof(struct target_cmsghdr)) { + target_msgh->msg_flags |=3D tswap32(MSG_CTRUNC); + break; + } + + if (cmsg->cmsg_level =3D=3D SOL_SOCKET) { + target_cmsg->cmsg_level =3D tswap32(TARGET_SOL_SOCKET); + } else { + target_cmsg->cmsg_level =3D tswap32(cmsg->cmsg_level); + } + target_cmsg->cmsg_type =3D tswap32(cmsg->cmsg_type); + + /* + * Payload types which need a different size of payload on the tar= get + * must adjust tgt_len here. + */ + tgt_len =3D len; + switch (cmsg->cmsg_level) { + case SOL_SOCKET: + switch (cmsg->cmsg_type) { + case SCM_TIMESTAMP: + tgt_len =3D sizeof(struct target_freebsd_timeval); + break; + default: + break; + } + break; + default: + break; + } + + if (msg_controllen < TARGET_CMSG_LEN(tgt_len)) { + target_msgh->msg_flags |=3D tswap32(MSG_CTRUNC); + tgt_len =3D msg_controllen - sizeof(struct target_cmsghdr); + } + + /* + * We must now copy-and-convert len bytes of payload into tgt_len = bytes + * of destination space. Bear in mind that in both source and + * destination we may be dealing with a truncated value! + */ + switch (cmsg->cmsg_level) { + case SOL_SOCKET: + switch (cmsg->cmsg_type) { + case SCM_RIGHTS: + { + int *fd =3D (int *)data; + int *target_fd =3D (int *)target_data; + int i, numfds =3D tgt_len / sizeof(int); + + for (i =3D 0; i < numfds; i++) { + __put_user(fd[i], target_fd + i); + } + break; + } + case SCM_TIMESTAMP: + { + struct timeval *tv =3D (struct timeval *)data; + struct target_freebsd_timeval *target_tv =3D + (struct target_freebsd_timeval *)target_data; + + if (len !=3D sizeof(struct timeval) || + tgt_len !=3D sizeof(struct target_freebsd_timeval)) { + goto unimplemented; + } + + /* copy struct timeval to target */ + __put_user(tv->tv_sec, &target_tv->tv_sec); + __put_user(tv->tv_usec, &target_tv->tv_usec); + break; + } + default: + goto unimplemented; + } + break; + default: + unimplemented: + gemu_log("Unsupported host ancillary data: %d/%d\n", + cmsg->cmsg_level, cmsg->cmsg_type); + memcpy(target_data, data, MIN(len, tgt_len)); + if (tgt_len > len) { + memset(target_data + len, 0, tgt_len - len); + } + } + + target_cmsg->cmsg_len =3D tswap32(TARGET_CMSG_LEN(tgt_len)); + tgt_space =3D TARGET_CMSG_SPACE(tgt_len); + if (msg_controllen < tgt_space) { + tgt_space =3D msg_controllen; + } + msg_controllen -=3D tgt_space; + space +=3D tgt_space; + cmsg =3D CMSG_NXTHDR(msgh, cmsg); + target_cmsg =3D TARGET_CMSG_NXTHDR(target_msgh, target_cmsg, + target_cmsg_start); + } + unlock_user(target_cmsg_start, target_cmsg_addr, space); +the_end: + target_msgh->msg_controllen =3D tswap32(space); + return 0; +} diff --git a/bsd-user/freebsd/os-socket.h b/bsd-user/freebsd/os-socket.h index b0f2498ff7..12e9ec3da8 100644 --- a/bsd-user/freebsd/os-socket.h +++ b/bsd-user/freebsd/os-socket.h @@ -19,9 +19,14 @@ ssize_t safe_recvmsg(int s, struct msghdr *msg, int flags); ssize_t safe_sendmsg(int s, const struct msghdr *msg, int flags); =20 +abi_long t2h_freebsd_cmsg(struct msghdr *msgh, + struct target_msghdr *target_msgh); +abi_long h2t_freebsd_cmsg(struct target_msghdr *target_msgh, + struct msghdr *msgh); + /* do_sendrecvmsg_locked() Must return target values and target errnos. */ -static abi_long do_sendrecvmsg_locked(int fd, struct target_msghdr *msgp, - int flags, int send) +static inline abi_long do_sendrecvmsg_locked(int fd, struct target_msghdr = *msgp, + int flags, int send) { abi_long ret, len; struct msghdr msg; @@ -122,8 +127,8 @@ out2: } =20 =20 -static abi_long do_sendrecvmsg(int fd, abi_ulong target_msg, - int flags, int send) +static inline abi_long do_sendrecvmsg(int fd, abi_ulong target_msg, + int flags, int send) { abi_long ret; struct target_msghdr *msgp; diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c index 7bc9fedfb7..46fee46336 100644 --- a/bsd-user/freebsd/os-syscall.c +++ b/bsd-user/freebsd/os-syscall.c @@ -47,6 +47,7 @@ #include "os-proc.h" #include "os-signal.h" #include "os-file.h" +#include "os-socket.h" #include "os-misc.h" =20 /* I/O */ @@ -85,6 +86,8 @@ safe_syscall6(ssize_t, recvfrom, int, fd, void *, buf, si= ze_t, len, int, flags, struct sockaddr *restrict, from, socklen_t *restrict, fromlen); safe_syscall6(ssize_t, sendto, int, fd, const void *, buf, size_t, len, in= t, flags, const struct sockaddr *, to, socklen_t, tolen); +safe_syscall3(ssize_t, recvmsg, int, s, struct msghdr *, msg, int, flags); +safe_syscall3(ssize_t, sendmsg, int, s, const struct msghdr *, msg, int, f= lags); =20 /* used in os-proc */ safe_syscall4(pid_t, wait4, pid_t, wpid, int *, status, int, options, --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097610; cv=none; d=zohomail.com; s=zohoarc; b=PD4qFQrp5cme28cSOqBt2jS3n1CQGDdJE/Zd0cc8YWuX9UqP3yjH+L4cXjWmmIFU7MUwYr6CNpgYpQogQ5VYGkryzM1PuG2LhZ50zKh/ZbsZdN7lwGoAW5kWbKEotUmcErDSixuxbuBHlftvL0wCtC4T7BlrtWIkE2jb87psk5Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097610; h=Content-Type: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=rgEPzUg88M3QnVNTgGZyRzTnSIXE6rtmq8dv27La6po=; b=jdlgtg4jfCKyiKRd2Or3Pi+Ne+waQm8W8bB4D0KsNS65W6y3M6Sc4lsosHb1lz1+p7jmyoUgQsyTfMk9cGXGurC3UZ2QInNlGITTB1p0ZRrt1rT+3W/b6GvCIlzs5nnJReM31Hm+XpGUE+AzRMGH2bNy1uLRlU2fhfvalTua0c4= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097610618601.0484008709495; Tue, 18 Aug 2026 17:00:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwTh9-0002Em-0s; Tue, 18 Aug 2026 19:58: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 1wwTh5-0002BO-IN for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:11 -0400 Received: from mail-oi1-x22d.google.com ([2607:f8b0:4864:20::22d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTh4-0005Gm-11 for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:11 -0400 Received: by mail-oi1-x22d.google.com with SMTP id 5614622812f47-4b28db06775so314963b6e.1 for ; Tue, 18 Aug 2026 16:58:09 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097489; x=1787702289; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=rgEPzUg88M3QnVNTgGZyRzTnSIXE6rtmq8dv27La6po=; b=D7HaP2z5/zwRSLvLPO+R5FOnUGgGiHE8cRxIbKj+HWqW6zty02rFG4r3uHrDGOhM4F mZJahcGpIzqh5t49ORKoW0kxYJj1e+5aUzZ3e8VKcL9Rm9/81q/+X0dZQ/uVXspuGO4p ipxyEAMnHASM2wG5HEyGMKUy1yrZuUJxD/7LsVBCVFvBj7mzUaQJNV8mFKP1P+jpFxiL ijXh07I3S9eCW577Y35FPn3EDRAAjVq+qz5EymAfPWCd3LMqCOdfgFDmfBkanCnvVL4H sQBQBm9rjKEvh9l9Cgvs274IaaiVBe7RAo1KdGw4Q6j5Tx/MlxsbemrqUUZH3aBWeSJ/ xJzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097489; x=1787702289; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=rgEPzUg88M3QnVNTgGZyRzTnSIXE6rtmq8dv27La6po=; b=DUfcq0QhZHNjBJa1qPfPlPbfneSXkThMO/H+zkQY98EO+yDyRj0Xc/QZs6XnOok+Eq abcwPIVkXvZ+IiI2NYQX0rQC4quZzbwIBRj/9ip+YMN4pHAjhB/4Tnndjh78d9J2HDqq pu9izK/sEcEIU9uLSxZ4ZGD/+NGMZ5gLyMd8g3thqovIEFgboc4dijYAEP6PYjtp8EQ0 wN47MnEzdEQyyctLSumxFohzyud7FeltH6YoBHvewfNxfSs9Elk2akxcA06z7FSooI9N KKSrx7dmIwNfaY0XnJfjze+qYEI/c9XRfKlxyGF7ejljiqbUanIGJVqDyBHXqEd7KqqL avqg== X-Gm-Message-State: AOJu0YziAcO2arOStjDLQGp60MeJ+EEjvm9Zib8MwWH0eSzM3L+3KHIN fHOSQLpUQJd1xixeV+qZYiw/b3j0ozSAIvfI2mjGKH1QeeiHyJbe0n+hKPACPf2kr6Hi7JQ6e2A 50VZXej0= X-Gm-Gg: AR+sD105Bo/l1DtNKCFT3v2zuk+XUtsadLJ34C+sIMAorGiEkWmF2KuQKxSmPDRMTba 4Li+oEwhDJSG5txPOtdARgQSEvdqB1xmol3gDjRJhcvwt6CvDHdpo1pX2tKgMuDb8ca+Suxjte9 WB497YLKJ7remUolZjD63G3QUReZKj3JB1Vr9DKARZrGcp/Mt5lJq0Ni6Kzyy+Yn7jlyeksbFR9 DvXG2cvEuHgd4d8IIKSdtQBFLGVf5EUotxNECiRWSTWp/I9k+BBwC3kXJdezZRfNH+qX5OBP1kJ KSjBOLWUVAKyEsnCotUltdyogYytgrpIgjniqCQthiOZ8yZTXB+B9jEFW/Ub9HhYf2EZdtKvriN DfS37fx6m5iw9sBkbc0oD1Zbxr4TJZn7xSn0baU4pIlA0YOdLIVGQ713gPS3DR8UoVFQeg849tM pTbeJBOLasZraErlMxLtBgmrPDTWZ0QmnmL0oN0JKNQky03bE= X-Received: by 2002:a05:6808:3990:b0:4b2:21e2:82d5 with SMTP id 5614622812f47-4b2bca4ab33mr318740b6e.10.1787097488959; Tue, 18 Aug 2026 16:58:08 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:13 -0600 Subject: [PATCH v4 20/40] bsd-user: Add socket system call dispatch MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-20-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Kyle Evans , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3690; i=imp@bsdimp.com; h=from:subject:message-id; bh=J7YaSfbDYmF4putWqYCInx12O3KyzUuhNh+0vRKoqyo=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPE+BDE/oDtyEwEnOxq1CAvWCMNMMeBXdsBOm tcmUl1AFKOJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxPhsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQBc5BAAxuntb+IJ1y0iOZn7yhxOGlXmrv2lzAp LjaHzF9e/x96v2ds5ymE367KewL7/9TMgeYyHeaqg1CXuCIsbW8pJV3klMH/6nRsWe1ZSVyT/NF ihkaX+y/7jpGhnKZe9mCudABcfatL6zOlnHfNR+3lequ5tUOg1y85m8C6XzeWSdenSGEMlTpaS/ dA0qq0Fg6LPO9VEMPopW1TVGgFAoCIxjZj6ftMniAxMkg1HkFkE9TeqjlBJATIdRlRGZY/058Ai 0HcC4r5mwl76S4IP9CyWr4uasGzL22tpYc2UtbJOx+3YKzoiVNLH8/2L9WwPQssEEkv6KViqcZU kbffK0vjRjJ6OAS3gXXvwpBJhDV1kienbLRxyENmjK1F1JhqYVMvzpbUN/ksPgQ+XuDKJwEa7OT Nvp+vKRqfSctPMCeETb6hck44yXbJ4aztd4s04xapnslaZ8/7fe/KRgf8uNdAYM2Oi7Odaj4tuy CpW6BhN6ZN6dnMf8vbL+ZS5iGfoFFfWYHG/IyeqDQkGI25cuJnIiAfsnU3faUY818Nsf6MC5YkD ZxfgfTIXjxZEpSg3h/UFAm7ZNQ2zb2Y/P0YUmjrHzqu6T6504QfMdTRrc1+HCsz1v+2PUCPQ/hw L6I9H55GUPR5tWNHt2WiQ0+QM/ZhaHNnZls7NkueyqtnKPdmfOCE= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::22d; envelope-from=imp@bsdimp.com; helo=mail-oi1-x22d.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097611773158500 Wire up socket-related system calls in the FreeBSD syscall dispatcher: accept, accept4, bind, bindat, connect, connectat, getpeername, getsockname, getsockopt, setsockopt, listen, recvfrom, recvmsg, sendmsg, sendto, socket, socketpair, shutdown, and setfib. Signed-off-by: Stacey Son Signed-off-by: Kyle Evans Assisted-by: Claude Opus 4.6 (1M context) Reviewed-by: Pierrick Bouvier Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-syscall.c | 79 +++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 79 insertions(+) diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c index 46fee46336..5d3a66e360 100644 --- a/bsd-user/freebsd/os-syscall.c +++ b/bsd-user/freebsd/os-syscall.c @@ -1073,6 +1073,85 @@ static abi_long freebsd_syscall(CPUArchState *env, i= nt num, abi_long arg1, ret =3D do_freebsd_pdkill(arg1, arg2); break; =20 + /* + * socket related system calls + */ + case TARGET_FREEBSD_NR_accept: /* accept(2) */ + ret =3D do_bsd_accept(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_accept4: /* accept4(2) */ + ret =3D do_freebsd_accept4(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_bind: /* bind(2) */ + ret =3D do_bsd_bind(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_bindat: /* bindat(2) */ + ret =3D do_freebsd_bindat(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_connect: /* connect(2) */ + ret =3D do_bsd_connect(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_connectat: /* connectat(2) */ + ret =3D do_freebsd_connectat(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_getpeername: /* getpeername(2) */ + ret =3D do_bsd_getpeername(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_getsockname: /* getsockname(2) */ + ret =3D do_bsd_getsockname(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_getsockopt: /* getsockopt(2) */ + ret =3D do_bsd_getsockopt(arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_setsockopt: /* setsockopt(2) */ + ret =3D do_bsd_setsockopt(arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_listen: /* listen(2) */ + ret =3D get_errno(listen(arg1, arg2)); + break; + + case TARGET_FREEBSD_NR_recvfrom: /* recvfrom(2) */ + ret =3D do_bsd_recvfrom(arg1, arg2, arg3, arg4, arg5, arg6); + break; + + case TARGET_FREEBSD_NR_recvmsg: /* recvmsg(2) */ + ret =3D do_sendrecvmsg(arg1, arg2, arg3, 0); + break; + + case TARGET_FREEBSD_NR_sendmsg: /* sendmsg(2) */ + ret =3D do_sendrecvmsg(arg1, arg2, arg3, 1); + break; + + case TARGET_FREEBSD_NR_sendto: /* sendto(2) */ + ret =3D do_bsd_sendto(arg1, arg2, arg3, arg4, arg5, arg6); + break; + + case TARGET_FREEBSD_NR_socket: /* socket(2) */ + ret =3D do_bsd_socket(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_socketpair: /* socketpair(2) */ + ret =3D do_bsd_socketpair(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_shutdown: /* shutdown(2) */ + ret =3D do_bsd_shutdown(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_setfib: /* setfib(2) */ + ret =3D do_freebsd_setfib(arg1); + break; + /* * sys{ctl, arch, call} */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097547; cv=none; d=zohomail.com; s=zohoarc; b=G8m8gNbI7ZMBU2uIWYdVqtqD2hn7TV2euWUzrI2pPhopN3kkWEkePdp+lVU0+lSJvXMnKYYCjj2bR6mJsN5PbfwMp5atBGzy9XqJNeVof7pQ/KHH5onC8qwwtk0+c3Qw6JfjTrodAYO35HKZ1qzdFwnj5V3PLYkuaaD+Bj1lar4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097547; h=Content-Type: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=c78UEnfYMuPb3ThtXQ1/u6SuURDhXHNgr6oLS7XK4BM=; b=BWeNCrqVpBdLyeaDngeWTPpKhbD/Q9hywut4+hj940EOtWlxosKbROjS5pttyL9ediw6uwa+ipFUaNwHJuVwVY1L7OJbd9pqtt8KXsIyQxf07dVzcXgBO+ehtDER2Q1WTgF31eLcWxbFa34uQG7Aiqc9l7gFjKaxMhtTYEvsetk= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097547379668.0789992776382; Tue, 18 Aug 2026 16:59:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThA-0002FE-IU; Tue, 18 Aug 2026 19:58:16 -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 1wwTh8-0002El-V8 for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:14 -0400 Received: from mail-oi1-x22c.google.com ([2607:f8b0:4864:20::22c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTh7-0005H9-2z for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:14 -0400 Received: by mail-oi1-x22c.google.com with SMTP id 5614622812f47-4ab89cff9c7so224674b6e.2 for ; Tue, 18 Aug 2026 16:58:12 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097492; x=1787702292; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=c78UEnfYMuPb3ThtXQ1/u6SuURDhXHNgr6oLS7XK4BM=; b=hqPg1ebyAN4DNEk2bnzrW3e0+3eQr7tj7DB7afF4/elvJ44dm8uF38SI5IbuYlRvL1 8rfutKeAFWKffpe8WE5m77P0J6zOtk87YXGtqj9Itxq+9IeM2c6CalzsuvXQnK5HCC35 4ClrH6j7DoZu0tXmpFM4/2v4C+iKENh8+DpP7tQW6n41VjPG5OMF7l77jlsWkVyKtM8S RMx3ALlVWf1Prngl1aAEC7geg5YptzmhS6essve+42vra1d9h4Wu+V6FTtFl0Ayehbu1 eXmnM7P3TvYv/qNMvd3OfIqhkuMJ2xVp8zpqKSrEHqZoz1Hcju++a9L7ZzXefa61KM9x 3ceg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097492; x=1787702292; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=c78UEnfYMuPb3ThtXQ1/u6SuURDhXHNgr6oLS7XK4BM=; b=Bs8oepTPALL3WYh5wcpYFXLq+QyklBn52TkgcgiPJeS+GR88wUvQBlCYqWUl9X5vmz rVUPnONMBXNNy+FWmuWCOGhBLO0vWq/2SY9mYpuTDXTvfYWR/yEF9LXT/I0sq/RftFbZ te984Ew50NSo2OEPtOanPrxpTdSCT3XA2n4tP5bgGnNjQ1dc2sePXRA1lUVwgI7NTAdx 2PcRfFPsBBxA0uSE1hKzxIKs/35DuI/+bL3x2sdkYn++AflY529Q+F81ZDmEcczkEiU8 OYy8uAOzjJ5F16mCZR02mp1pSQYmlqctlHqlBY8ZtiiAyNzE0t+jt5cRy906/Rcx8TTV 5oXQ== X-Gm-Message-State: AOJu0Yw+4k79BxlcXVfBacqTbHFcEl7tv7Kwm7rN7d64BbMSoBX19PNk 5McPsN2D9i1IZ2IkkVwayRTxcx9Wox1AVgsrouNPJrKW0XZuopY2LsP5FPyGSIEjnFA= X-Gm-Gg: AR+sD131QS+oSo6MAAo5jnV95/ggI2s0CGXsAlhWNn6E7ueTVJwVlB+mHpy2C8xw1Vn 4hCxwTWIwRG5qI5Cj2cvl2OQaU/JL24zmzaPFSfRHzoq9TSJSnj0qxRoID0KZ6/N3FJ/5sqi1wc IcO0YkbuYcKfhbPeFO+2G4h08qOOLMDSarXAxbWa1FmZ/3mU8yUrRmqlCOyKSjt4/o8KRerb/uh 4uNj7G0hGWy1s+5qTrCOBYHgTXCcMTw0QJmo3ggCEm+Ysh6LbOzBbjG7g/O0/UjCfiPqT97NPcL Hq/QT426DidIQWpsPRnAiu1HCgXs91xHiU3KT/31ft1OaYGoPzYkP8boY5Oo/fQyZcOI4S4c51C 5QXT76syTY/zPPvnraWt+dxcD8yUUZvgfj4A7QTo7U6lxYGVFtWsjMiiSxVOppy7HIaN9yt/R7V IeJuDP+QNZqq7o7ho/SQ2g/DsXf0FA1SNESS83CWYsWc7Devo= X-Received: by 2002:a05:6808:c293:b0:495:da89:c578 with SMTP id 5614622812f47-4b2bc9af497mr334126b6e.9.1787097491785; Tue, 18 Aug 2026 16:58:11 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:14 -0600 Subject: [PATCH v4 21/40] bsd-user: Add os-time.h with clock and time-of-day functions MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-21-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , =?utf-8?q?Mika=C3=ABl_Urankar?= , Sean Bruno , Kyle Evans , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=7008; i=imp@bsdimp.com; h=from:subject:message-id; bh=0gOFrVaT36VrlnuAghVKuW4loVvp8HHzs2zcO+k+ZLU=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFAGI5Afa2e7KacfRyEfBcbM9U/RDEyjOHGN Zq0nyj3GJKJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxQBsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQCtRxAA47YrgckialL/aELxB3zl6XbKDz9dyEH cuAhj7rMFB0AwPPKlUb+5zUJqKC9Hnds6WYR4zuKQrOZkUUjZ2xVL7jBiVfBSEeVmwxYznEUoGi 5b2hvjE1weoWLE44ZyKwEl4/63Cj8z6tqlcrwBfAULHl5/k1hRzZtXXenezV4LKixMZN2W91Rmr /S56a4zSOV136uetXpVGnyu89ETqHs0bjih64ZZqrxsklU3Yax6kSuVHZK2/CGskEDmhqQSsEi4 MvwCAbn3oUyXkSoKkrzSEDWfK7Y1q4roGP64MWlurZpkLnzEoWOuuvEPHSZ2093sa9Ufy9ISWkq tghbWFxIHE624XzQR+P0fSpgVeoWzMHmu4bOjdKkUsIrfbWzpD8/TCjxN9eCZQD50MMCpYuX+KG sFkAO4raFzp2WsUj5Q0clfv5ZO6Ueow+zDb7w2aR15u075tcofmbPP8VeiDQ9cNIPU9MAgRr/nG 78kcGukIBi0AME1+TYMgNqkTPENdVyzTxG37Do0f7hNnS2vNFWjxszTd8GkmZ2g8OjpiFGQVcOU UOG4NlXz7gWFSC7bh8PzNCuIm07DOQ2mboYP62I1AvMm8q9KI4Dqp7ypaEokzzvlizl6fT5DFtv xlS568/f3anESt8+ZeWSq9egIiehRwkidfZBHsN7/KFQ4Gwo0cnw= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::22c; envelope-from=imp@bsdimp.com; helo=mail-oi1-x22c.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097549445158500 Add the first part of FreeBSD time support: nanosleep, clock_nanosleep, clock_gettime, clock_settime, clock_getres, gettimeofday, settimeofday, adjtime, ntp_adjtime, and ntp_gettime. Also add safe_syscall wrappers for nanosleep, clock_nanosleep, and kevent. Signed-off-by: Stacey Son Signed-off-by: Mika=C3=ABl Urankar Signed-off-by: Sean Bruno Signed-off-by: Kyle Evans Assisted-by: Claude Opus 4.6 (1M context) Reviewed-by: Pierrick Bouvier Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-time.h | 225 +++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 225 insertions(+) diff --git a/bsd-user/freebsd/os-time.h b/bsd-user/freebsd/os-time.h new file mode 100644 index 0000000000..e387441d86 --- /dev/null +++ b/bsd-user/freebsd/os-time.h @@ -0,0 +1,225 @@ +/* + * FreeBSD time related system call shims + * + * Copyright (c) 2013-2015 Stacey Son + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#ifndef FREEBSD_OS_TIME_H +#define FREEBSD_OS_TIME_H + +#include +#include +#include +#include +#include +#include +#include + +#include "qemu.h" +#include "qemu-os.h" + +#include "bsd-socket.h" + +int safe_clock_nanosleep(clockid_t clock_id, int flags, + const struct timespec *rqtp, struct timespec *rmtp); +int safe_nanosleep(const struct timespec *rqtp, struct timespec *rmtp); +int safe_kevent(int, const struct kevent *, int, struct kevent *, int, + const struct timespec *); + +int __sys_ktimer_create(clockid_t, struct sigevent *restrict, + int *restrict); +int __sys_ktimer_gettime(int, struct itimerspec *); +int __sys_ktimer_settime(int, int, const struct itimerspec *restrict, + struct itimerspec *restrict); +int __sys_ktimer_delete(int); + +/* nanosleep(2) */ +static inline abi_long do_freebsd_nanosleep(abi_long arg1, abi_long arg2) +{ + abi_long ret; + struct timespec req, rem; + + ret =3D t2h_freebsd_timespec(&req, arg1); + if (!is_error(ret)) { + ret =3D get_errno(safe_nanosleep(&req, &rem)); + if (ret =3D=3D -TARGET_EINTR && arg2) { + if (h2t_freebsd_timespec(arg2, &rem) !=3D 0) { + ret =3D -TARGET_EFAULT; + } + } + } + + return ret; +} + +/* clock_nanosleep(2) */ +static inline abi_long do_freebsd_clock_nanosleep(abi_long arg1, abi_long = arg2, + abi_long arg3, abi_long arg4) +{ + struct timespec req, rem; + abi_long ret; + int clkid, flags; + + clkid =3D arg1; + /* XXX Translate? */ + flags =3D arg2; + ret =3D t2h_freebsd_timespec(&req, arg3); + if (!is_error(ret)) { + ret =3D get_errno(safe_clock_nanosleep(clkid, flags, &req, &rem)); + if (ret =3D=3D -TARGET_EINTR && arg4) { + if (h2t_freebsd_timespec(arg4, &rem) !=3D 0) { + ret =3D -TARGET_EFAULT; + } + } + } + + return ret; +} + +/* clock_gettime(2) */ +static inline abi_long do_freebsd_clock_gettime(abi_long arg1, abi_long ar= g2) +{ + abi_long ret; + struct timespec ts; + + ret =3D get_errno(clock_gettime(arg1, &ts)); + if (!is_error(ret)) { + if (h2t_freebsd_timespec(arg2, &ts) !=3D 0) { + return -TARGET_EFAULT; + } + } + + return ret; +} + +/* clock_settime(2) */ +static inline abi_long do_freebsd_clock_settime(abi_long arg1, abi_long ar= g2) +{ + struct timespec ts; + + if (t2h_freebsd_timespec(&ts, arg2) !=3D 0) { + return -TARGET_EFAULT; + } + + return get_errno(clock_settime(arg1, &ts)); +} + +/* clock_getres(2) */ +static inline abi_long do_freebsd_clock_getres(abi_long arg1, abi_long arg= 2) +{ + abi_long ret; + struct timespec ts; + + ret =3D get_errno(clock_getres(arg1, &ts)); + if (!is_error(ret)) { + if (h2t_freebsd_timespec(arg2, &ts) !=3D 0) { + return -TARGET_EFAULT; + } + } + + return ret; +} + +/* gettimeofday(2) */ +static inline abi_long do_freebsd_gettimeofday(abi_ulong arg1, abi_ulong a= rg2) +{ + abi_long ret; + struct timeval tv; + struct timezone tz, *target_tz; /* XXX */ + + if (arg2 !=3D 0) { + if (!lock_user_struct(VERIFY_READ, target_tz, arg2, 0)) { + return -TARGET_EFAULT; + } + __get_user(tz.tz_minuteswest, &target_tz->tz_minuteswest); + __get_user(tz.tz_dsttime, &target_tz->tz_dsttime); + unlock_user_struct(target_tz, arg2, 1); + } + ret =3D get_errno(gettimeofday(&tv, arg2 !=3D 0 ? &tz : NULL)); + if (!is_error(ret)) { + if (h2t_freebsd_timeval(&tv, arg1)) { + return -TARGET_EFAULT; + } + } + + return ret; +} + +/* settimeofday(2) */ +static inline abi_long do_freebsd_settimeofday(abi_long arg1, abi_long arg= 2) +{ + struct timeval tv; + struct timezone tz, *target_tz; /* XXX */ + + if (arg2 !=3D 0) { + if (!lock_user_struct(VERIFY_READ, target_tz, arg2, 0)) { + return -TARGET_EFAULT; + } + __get_user(tz.tz_minuteswest, &target_tz->tz_minuteswest); + __get_user(tz.tz_dsttime, &target_tz->tz_dsttime); + unlock_user_struct(target_tz, arg2, 1); + } + if (t2h_freebsd_timeval(&tv, arg1)) { + return -TARGET_EFAULT; + } + + return get_errno(settimeofday(&tv, arg2 !=3D 0 ? &tz : NULL)); +} + +/* adjtime(2) */ +static inline abi_long do_freebsd_adjtime(abi_ulong target_delta_addr, + abi_ulong target_old_addr) +{ + abi_long ret; + struct timeval host_delta, host_old; + + ret =3D t2h_freebsd_timeval(&host_delta, target_delta_addr); + if (is_error(ret)) { + return ret; + } + + if (target_old_addr) { + ret =3D get_errno(adjtime(&host_delta, &host_old)); + if (is_error(ret)) { + return ret; + } + ret =3D h2t_freebsd_timeval(&host_old, target_old_addr); + } else { + ret =3D get_errno(adjtime(&host_delta, NULL)); + } + + return ret; +} + +/* ntp_adjtime(2) */ +static inline abi_long do_freebsd_ntp_adjtime(abi_ulong target_tx_addr) +{ + abi_long ret; + struct timex host_tx; + + ret =3D t2h_freebsd_timex(&host_tx, target_tx_addr); + if (ret =3D=3D 0) { + ret =3D get_errno(ntp_adjtime(&host_tx)); + } + + return ret; +} + +/* ntp_gettime(2) */ +static inline abi_long do_freebsd_ntp_gettime(abi_ulong target_ntv_addr) +{ + abi_long ret; + struct ntptimeval host_ntv; + + ret =3D get_errno(ntp_gettime(&host_ntv)); + if (!is_error(ret)) { + ret =3D h2t_freebsd_ntptimeval(target_ntv_addr, &host_ntv); + } + + return ret; +} + + + +#endif /* FREEBSD_OS_TIME_H */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097527; cv=none; d=zohomail.com; s=zohoarc; b=IadGfyS0VSAVucmo5WQGLcQ/AuyPJqsg64cIqzN5acUSjpZojaOzbvP24H9YmQJVGdoAm4hoehBOk2SlBQcVLosEmGN2OICXPLXKoCA0PRJKnr5xVOI+B4j7kF2ShntURNThkA/0NuSYfl+fNvNNYsYYBtbkn/sz22CZzyD8GAQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097527; h=Content-Type: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=dAeV52SVoEvXeU/zWlyl+QmtgiI8noDaAlyiyC4Umjk=; b=WJNcab1sua00Q4ou9R2d9TQ10gUk6tF2G3OICP2SMwV001ybxOA8AFEipx1jFfC+3Omw7UhDg3ii77IbNRLqaLbuKkYbKa4BNStu34q6LsHYJz6pP9uJDHo716WP1DFEPCMv3tfr6RpZjXaVNiIku0SSlP92M61ADwRac8DOXqs= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097527685207.23298145720753; Tue, 18 Aug 2026 16:58:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThB-0002Fe-EE; Tue, 18 Aug 2026 19:58:17 -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 1wwThA-0002FF-Cv for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:16 -0400 Received: from mail-oi1-x230.google.com ([2607:f8b0:4864:20::230]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTh8-0005HG-CL for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:16 -0400 Received: by mail-oi1-x230.google.com with SMTP id 5614622812f47-4a46a53abc9so338548b6e.3 for ; Tue, 18 Aug 2026 16:58:14 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097493; x=1787702293; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=dAeV52SVoEvXeU/zWlyl+QmtgiI8noDaAlyiyC4Umjk=; b=zQL2VgHOZ6i10EdLdsV2rMv43X8wy5JgovYt2jacTkMs29oxpLn3ubUOyQIIAXHas+ KfV1Q0iyngZw8fmADH3O/zg/gVucQZYNJUXGkJW4qDUFwWRvw4s4TmBX6j0IjFt1mD2R Idejrw2qejP9Eiqh4IGSWuOZOYvv9f5pwcQwx3jctnxY04h3r+bEclBlat0O+uwGxekn ydtBcvwoQ3hQ5NMo2MwNQ9lTNUcYoKOxQ2Ns/fhVdiBnzndPO2c5xc4eq02M6wYQUGSf GIFUVTqTFiY37DNAxOVJnaFt4kfh+WVvfUcKM1bfZwcQCWfBe1EyHgJYLVcmCSWIaxQC zcTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097493; x=1787702293; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=dAeV52SVoEvXeU/zWlyl+QmtgiI8noDaAlyiyC4Umjk=; b=roE1Uh6Ps6gJ8i2OAIlisfbR61H8wxm/rMthqxRwdGAf3X2Y9Xvi/EMD7w9hDozye5 h2vyI79IYMnirdXsr50BtBqLZGdCYBS1ErSEJW3gMW8ujCKFfd9NIGW0pdQfNWuTFdTG kV85q+ACunrk8wqXjnx9/YS0+UX4hDDbetU/o9yStzg9G/Bz7eM1vbqYue7D1Afa0Kqk VSvkRAO1oIoS0qIQ95kUlI2eiNrCUHZ3CbJY0+GdnKdIG7xfpbUYH/UQdY6gbzuVxEJ0 eAw3IJTm0DNP/ooS245xdiXpPebtiAdxB8mMdxVMC2nomFs7O2slBmzfrAZ57UB7OYne fQmw== X-Gm-Message-State: AOJu0YxodDU7Tu7/bJW49Ly+hU7sYeH8+2HUpeBW/IMrNXLY6bwsCo6u /U6cnqqPCux//n+nmtHyNq7HKmn1ycn2dJEEYCS0ePd5kd5O6hWbq9ZOpJZZZlBEuxQ= X-Gm-Gg: AR+sD136T1FbFMHHomDGkzRlkAxwZCYSrXnRIcNroK9gNz8ZgdFuJavSAP4ykzHU9O5 1DzQvoIFgyFngJtLKjsIK7YNv82S9h3P3eLgQTn3eOMTIqrgtX70ipGmNdhxzZpY8Edqh9UZPBd 3/9TPv7wvNG90sNQO137XPR5DKeI8K/uTHgyg+RtgZdRs0gkvX7cFU9oTlCNwMvfpUXKAMkrjwu jLMf60BTGi+3rXL8GYGUUy9RNE8pr7Tep7ZmCkRBsl0A9KMzSSR+s+0V07JdR4+6UwYkYz8hn8O H7ZSfRjnq4Fw9p/e1IYQexkV6ciSk/G+VDBsUuTdAP6ug9j6RvG3ujt/zZxnDT80q0d482UlrKY szN/tZqjq90krT8B20j2ZW792kROhsrelyUIU3hNXS3z4tYc+MIrjatm2MG67c+xW1Puu1lKOml c2Gse/ejS/rz3d8RFwXMhKoO0KNhAKv0TQmhqhxjKV5p59OHo= X-Received: by 2002:a05:6808:c1f4:b0:4b2:8dbf:ffc with SMTP id 5614622812f47-4b2bcba3ad2mr370564b6e.17.1787097493375; Tue, 18 Aug 2026 16:58:13 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:15 -0600 Subject: [PATCH v4 22/40] bsd-user: Add utimes, futimes, and ktimer functions to os-time.h MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-22-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , =?utf-8?q?Mika=C3=ABl_Urankar?= , Kyle Evans , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6699; i=imp@bsdimp.com; h=from:subject:message-id; bh=pbhfstJwayLAkXcJxK/Ro3zRSSytO/eRQVia/LZuXAs=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFBkQEP06aHFqVocXPz1bm76b5MQWwDKXq8I WvwuGaWq7WJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxQRsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQBPZA/6AvabogDkSvMs2++MYCi8LI+Xz+5elzD 4G947B/6xY+9z9Qjgxe44DiNs8DMGBtyXCQBpYpnmSJVG3kYodcMEdmiFPtHne0GVhfUSC7x60N +5USrcqlIGJBfbTOIKP/N/ZK96eP+SFZJlq1KdDGIRTFHTExcMiSLNOf4JvR3QNCXXfUte/RTpL ObNE+1kw5RjHC5z4nqNNUiY6mewiI2dOx1zlg49DMRMkvlEDM9/9EMSlD4Dvco2vsJrykE+g81z M6hCmEAhmNibPiAE0i07Es2ISvPZxYYjWR8tHlKLOovY2fwaKDsHL35sN/qA1gvq0lzxRjYOFV2 L1LZLfZD6/b0fJpWk1TtpS3UDRPWSYBQcAPkqoU13qieYd1WApvvRDay2piESy0z0zyODw5eWvo SvxXkWoDs46dLpIAjaSTeP/+PA3PIHsdbjsDu3uLh3YjVnPQtUCfEjBWy8spvhmgVhRAYab6Kj0 KemcPDTBD6OwJ+ZokXkhYEzuycD5JoL0dxQgKci1bqI+r7pA2WSuwOIRkd43VNCPWWEaBNGBqe/ Nece7Dde2F3hrhIl/e/nYTDpasJkG1djsgz1QaxAXmMV5bQkgubSOUtZiV1CHY1Ts0EEUd4SeBL N2DHen7cymV/C4teUEc8/wLwwcePk03jMM5b6tgl6ZSB0lS75tpg= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::230; envelope-from=imp@bsdimp.com; helo=mail-oi1-x230.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097529183158500 Add time-related system call shims: utimes, lutimes, futimes, futimesat, ktimer_create, ktimer_delete, ktimer_settime, and ktimer_gettime. Signed-off-by: Stacey Son Signed-off-by: Mika=C3=ABl Urankar Signed-off-by: Kyle Evans Assisted-by: Claude Opus 4.6 (1M context) Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-time.h | 212 +++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 212 insertions(+) diff --git a/bsd-user/freebsd/os-time.h b/bsd-user/freebsd/os-time.h index e387441d86..06104a5b7d 100644 --- a/bsd-user/freebsd/os-time.h +++ b/bsd-user/freebsd/os-time.h @@ -221,5 +221,217 @@ static inline abi_long do_freebsd_ntp_gettime(abi_ulo= ng target_ntv_addr) } =20 =20 +/* utimes(2) */ +static inline abi_long do_freebsd_utimes(abi_long arg1, abi_long arg2) +{ + abi_long ret; + void *p; + struct timeval *tvp, tv[2]; + + if (arg2 !=3D 0) { + if (t2h_freebsd_timeval(&tv[0], arg2) || + t2h_freebsd_timeval(&tv[1], arg2 + + sizeof(struct target_freebsd_timeval))) { + return -TARGET_EFAULT; + } + tvp =3D tv; + } else { + tvp =3D NULL; + } + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D get_errno(utimes(p, tvp)); + unlock_user(p, arg1, 0); + + return ret; +} + +/* lutimes(2) */ +static inline abi_long do_freebsd_lutimes(abi_long arg1, abi_long arg2) +{ + abi_long ret; + void *p; + struct timeval *tvp, tv[2]; + + if (arg2 !=3D 0) { + if (t2h_freebsd_timeval(&tv[0], arg2) || + t2h_freebsd_timeval(&tv[1], arg2 + + sizeof(struct target_freebsd_timeval))) { + return -TARGET_EFAULT; + } + tvp =3D tv; + } else { + tvp =3D NULL; + } + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D get_errno(lutimes(p, tvp)); + unlock_user(p, arg1, 0); + + return ret; +} + +/* futimes(2) */ +static inline abi_long do_freebsd_futimes(abi_long arg1, abi_long arg2) +{ + struct timeval *tvp, tv[2]; + + if (arg2 !=3D 0) { + if (t2h_freebsd_timeval(&tv[0], arg2) || + t2h_freebsd_timeval(&tv[1], arg2 + + sizeof(struct target_freebsd_timeval))) { + return -TARGET_EFAULT; + } + tvp =3D tv; + } else { + tvp =3D NULL; + } + + return get_errno(futimes(arg1, tvp)); +} + +/* futimesat(2) */ +static inline abi_long do_freebsd_futimesat(abi_long arg1, abi_long arg2, + abi_long arg3) +{ + abi_long ret; + void *p; + struct timeval *tvp, tv[2]; + + if (arg3 !=3D 0) { + if (t2h_freebsd_timeval(&tv[0], arg3) || + t2h_freebsd_timeval(&tv[1], arg3 + + sizeof(struct target_freebsd_timeval))) { + return -TARGET_EFAULT; + } + tvp =3D tv; + } else { + tvp =3D NULL; + } + + p =3D lock_user_string(arg2); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D get_errno(futimesat(arg1, p, tvp)); + unlock_user(p, arg2, 0); + + return ret; +} + +/* timer_create(2) */ +static inline abi_long do_freebsd_ktimer_create(abi_long arg1, abi_long ar= g2, + abi_long arg3) +{ + /* args: clockid_t clockid, struct sigevent *sevp, int *timerid */ + abi_long ret; + + struct sigevent host_sevp =3D { 0 }, *phost_sevp =3D NULL; + + int clkid =3D arg1; + int timer_index =3D next_free_host_timer(); + + if (timer_index < 0) { + ret =3D -TARGET_EAGAIN; + } else { + int *phtimer =3D g_posix_timers + timer_index; + + if (arg2) { + phost_sevp =3D &host_sevp; + ret =3D target_to_host_sigevent(phost_sevp, arg2); + if (ret !=3D 0) { + g_posix_timers[timer_index] =3D 0; + return -TARGET_EFAULT; + } + } + + ret =3D get_errno(__sys_ktimer_create(clkid, phost_sevp, phtimer)); + if (ret) { + phtimer =3D NULL; + } else { + if (put_user(TIMER_MAGIC | timer_index, arg3, int)) { + __sys_ktimer_delete(g_posix_timers[timer_index]); + g_posix_timers[timer_index] =3D 0; + ret =3D -TARGET_EFAULT; + } + } + } + return ret; +} + +/* timer_delete(2) */ +static inline abi_long do_freebsd_ktimer_delete(abi_long arg1) +{ + /* args: int timerid */ + abi_long ret; + int timerid =3D get_timer_id(arg1); + + if (timerid < 0) { + ret =3D timerid; + } else { + int htimer =3D g_posix_timers[timerid]; + ret =3D get_errno(__sys_ktimer_delete(htimer)); + g_posix_timers[timerid] =3D 0; + } + return ret; +} + +/* timer_settime(2) */ +static inline abi_long do_freebsd_ktimer_settime(abi_long arg1, abi_long a= rg2, + abi_long arg3, abi_long arg4) +{ + /* + * args: int timerid, int flags, const struct itimerspec *new_value, + * struct itimerspec * old_value + */ + abi_long ret; + int timerid =3D get_timer_id(arg1); + + if (timerid < 0) { + ret =3D timerid; + } else if (arg3 =3D=3D 0) { + ret =3D -TARGET_EINVAL; + } else { + int htimer =3D g_posix_timers[timerid]; + struct itimerspec hspec_new =3D {{0},}, hspec_old =3D {{0},}; + + if (target_to_host_itimerspec(&hspec_new, arg3)) { + return -TARGET_EFAULT; + } + ret =3D get_errno( + __sys_ktimer_settime(htimer, arg2, &hspec_new, &hspec_old)); + if (arg4 && host_to_target_itimerspec(arg4, &hspec_old)) { + return -TARGET_EFAULT; + } + } + return ret; +} + +/* timer_gettime(2) */ +static inline abi_long do_freebsd_ktimer_gettime(abi_long arg1, abi_long a= rg2) +{ + /* args: int timerid, struct itimerspec *curr_value */ + abi_long ret; + int timerid =3D get_timer_id(arg1); + + if (timerid < 0) { + ret =3D timerid; + } else if (!arg2) { + ret =3D -TARGET_EFAULT; + } else { + int htimer =3D g_posix_timers[timerid]; + struct itimerspec hspec; + ret =3D get_errno(__sys_ktimer_gettime(htimer, &hspec)); + if (!is_error(ret)) { + ret =3D host_to_target_itimerspec(arg2, &hspec); + } + } + return ret; +} + =20 #endif /* FREEBSD_OS_TIME_H */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097507; cv=none; d=zohomail.com; s=zohoarc; b=mM3O608Rjp6zj4Nw1MdKFMjYGQ/FfSNQ2aoiiArI1x1CLpu695WM/OfvOQtphq5fm1KTEgF03DtB0SvmzmYt5OGOfljcadA8Lg+7x/2uWi0/jcVEH3oGnPJX4RJuCDrFhMBpmvfLPRx8+ngMK37evhwKc4cAYH3aHRQ8C9lT8SI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097507; h=Content-Type: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=IhFAjZZMyJohtdthl03q6c5wOua16KMjZuzyVS5+u4k=; b=Nrh2l7vF8rWCREIfG7Qopu2Y7AcCsUIu93D14vfL/52mlay8lv5ePk9mnQABbPP2ViR471AXedotKqmpEsTPrijMQrHZ4iaMuODxyR8ycU2H6H/y+DT2j/K6amHba3K9A2L3kFkCzBmwlEHF7vjqodnX7hBJADbgQlhKWY1mddg= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178709750779318.790058808379854; Tue, 18 Aug 2026 16:58:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThE-0002P0-95; Tue, 18 Aug 2026 19:58:20 -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 1wwThC-0002Fy-No for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:18 -0400 Received: from mail-oi1-x231.google.com ([2607:f8b0:4864:20::231]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwThB-0005HY-0a for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:18 -0400 Received: by mail-oi1-x231.google.com with SMTP id 5614622812f47-4a4cb36ae00so358101b6e.0 for ; Tue, 18 Aug 2026 16:58:16 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097496; x=1787702296; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=IhFAjZZMyJohtdthl03q6c5wOua16KMjZuzyVS5+u4k=; b=N0VmvSYfqW0FBzWmMhDUoXMBjKZMSXlOJrGxb9YVyfEtvkeJyVXimNtC5rYtWk7OXQ 4WO5LFzWecg+SeRaXhD9BrapfOzxrDwwpceV9whQtlpkUs9ltLrI43PyByx1NSSrw04X GFSdK4xALF/VSEfKrjUQYMhXVBZU3Cdi5VVk5LqJT0euQDJpRTVXB1FAaCg8N31m8NlF Ni8dbU49CrfZtUoQovRGsmRW9ZyLp9z9dp6+DYW9UsO99cSG0TVIJQmZu/K7G6Ncvxvc jD4DEnuPD/AodqD4ldwqT9afIYT9xJB/papFA+cfxBXbEkYfZYojFcEMA7E6z3LvEZ+j 37vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097496; x=1787702296; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=IhFAjZZMyJohtdthl03q6c5wOua16KMjZuzyVS5+u4k=; b=EKtGHDAx0qYSiE0RDnomPX2+A9Klz6b7oOb8oGnYMmSKmKvjCB16KS53bJtyo4KJD+ 1Fbai4g4jgsZlQtVqAMRmKuDh4jQFOtxIHvjjm3INcAxXLahUkA5b0r6GWO6JZGxCros itydCVoWG+tMJGcn7WAV2HW5WeQkTJ12KOKth5JLrMngyXZLGNpZ9if6tNvz84FlSBdd uMbUDRpPAU1TJO9gqtc9aRE0DDqpkuIjCBeaRwkM/LH7Q5sLr7ZZX5dFEe4FV3gI/A45 n9OlrjwScyHmb2xEMt1jV3MFy85QcmcYzOfyFCSXfQWkrcnN/MCQuV0Zc8aM47t+67gj M8NQ== X-Gm-Message-State: AOJu0YxcbNXMBxK9AGgrsnql+fsmO6HzgUqSHRJ0WR/RoraW3EiPSSZn o/aEdnLxd93aza4eJIfDT/+cD7LGGq87b2/2+i9+qwD7wI8bW6+q5NZvckFF01BPrKs= X-Gm-Gg: AR+sD120N6KA2xWK6K//1e0EY1sUkrZCnOR84ACXe6m9rzpEEZEUwBNuT95ozrM4TUL aoqWjr4nQrCNuJByexXgGqNdXrw1IkSiAYoOJ23QrN4YMfWxcbyby8Ydy3QsWdBZM5N+zAzedp2 JZVmkFjU3/dZQyjJP0Hifw4ODl4iaLVn+AqKDXnhTNr5Db6SV2RznarUNfecVHt5GinQcXhWJig jZKaWW4BaOowrKhST6OAl4C2GBQNcuSCZ2jnO+qi7/UPPuf8fM3HuCT+pLOZfakjiwtbakvNzsW 8JeFtjRQb1rwexLwolY5pIF0Y+ExGQA8zyWxH9b34u7NFRNiE/KRPYcupKdc+CA+Hbnr92EMKRV eSKLcJfU0/pgmdVdXS1u0+xsuM3kSqLOt5MRsCLfQu7O5G+6JNx3rGc4yn7FkxqlcHFGKIQjDTk Dhe2i/4gunU+yKzim/Sp+mnMsGnzRyAHX3TPF1TSLHGJ87jFQ= X-Received: by 2002:a05:6808:6801:b0:495:d7ec:b6ae with SMTP id 5614622812f47-4b2bcaed728mr344562b6e.16.1787097495720; Tue, 18 Aug 2026 16:58:15 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:16 -0600 Subject: [PATCH v4 23/40] bsd-user: Add select, pselect, and ppoll to os-time.h MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-23-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , =?utf-8?q?Mika=C3=ABl_Urankar?= , Kyle Evans , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6870; i=imp@bsdimp.com; h=from:subject:message-id; bh=HGQ7SwnKbXuAzdRb0W1BS23erbGTC2RfkZIxZ6LrY7A=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFDt9towFUibWZQ6znxbHIdYVEylzM2m7nNW U6Dl6EioVmJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxQxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQDGixAA4+if6pmdbPyTsZ+ovt4MgtwYmXR1iTK joj2llecUvouYxZ41+2iOxDFPFzaY3vJqBjugVmqAnraBiTpy7HM/jLgarIimYiyrQEG+26RVo3 SXd0KKFOo0uODLm1XCPE1IXr/QtxtKX2osJTn9L/x9M92Ou8Xt/ic1K8o81VK7eS5azhmp1SDFk ONTtuaxrArdpybKjbZtk9vpqr2JIbMiu9OUSwtax1oSFcGExPGqZC/LBNclmbYn/fURqI24kxCW 1LLsuoLPMvHkYR2/BUja685trVEgZTVKGpMQXldzPKLTdzrxd2nHGdnSXcDU8iFCnijYX7D0nzJ wP1wFexr2vzAtEbZS+jTqEpV2QuykFkcq5MC3jb+29sXk1Tu527bbj/u12haTHbBCO8P5QM0F50 5XRjeuVXso3wJ3lancZBm3dbs7cSyfBfrOLVvGzbFvInju/RHraMFZ7cqNX9HE+S1gK7WIQfT0S 4iJ0uVOwXOnx2Y1mVIywkMduyXnjvU0Nc/1Jy2PnmGUXkPMvM/tiOCFVcBCje0h+r34gK0tRhls TpzJygcSpWZcno195ykqmcfH9osWM6z346c1qiLYe+1YSKBh2Us+mmNCTtn31IZVE065HwMltEs hTWOvO7U6KAbWSgVj+TmS+bEEPb5N4cw8QukRYtrXlxkVgfHGE0A= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::231; envelope-from=imp@bsdimp.com; helo=mail-oi1-x231.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097509764158500 Add I/O multiplexing system call shims: select, pselect, and ppoll with proper fd_set, timespec/timeval, and signal mask conversion. Signed-off-by: Stacey Son Signed-off-by: Mika=C3=ABl Urankar Signed-off-by: Kyle Evans Assisted-by: Claude Opus 4.6 (1M context) Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-time.h | 202 +++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 202 insertions(+) diff --git a/bsd-user/freebsd/os-time.h b/bsd-user/freebsd/os-time.h index 06104a5b7d..5f537fac40 100644 --- a/bsd-user/freebsd/os-time.h +++ b/bsd-user/freebsd/os-time.h @@ -433,5 +433,207 @@ static inline abi_long do_freebsd_ktimer_gettime(abi_= long arg1, abi_long arg2) return ret; } =20 +/* select(2) */ +static inline abi_long do_freebsd_select(CPUArchState *env, int n, + abi_ulong rfd_addr, abi_ulong wfd_addr, abi_ulong efd_addr, + abi_ulong target_tv_addr) +{ + fd_set rfds, wfds, efds; + fd_set *rfds_ptr, *wfds_ptr, *efds_ptr; + struct timeval tv, *tvp; + abi_long ret, error; + + ret =3D copy_from_user_fdset_ptr(&rfds, &rfds_ptr, rfd_addr, n); + if (ret !=3D 0) { + return ret; + } + ret =3D copy_from_user_fdset_ptr(&wfds, &wfds_ptr, wfd_addr, n); + if (ret !=3D 0) { + return ret; + } + ret =3D copy_from_user_fdset_ptr(&efds, &efds_ptr, efd_addr, n); + if (ret !=3D 0) { + return ret; + } + + if (target_tv_addr !=3D 0) { + if (t2h_freebsd_timeval(&tv, target_tv_addr)) { + return -TARGET_EFAULT; + } + tvp =3D &tv; + } else { + tvp =3D NULL; + } + + ret =3D get_errno(safe_select(n, rfds_ptr, wfds_ptr, efds_ptr, tvp)); + + if (!is_error(ret)) { + if (rfd_addr !=3D 0) { + error =3D copy_to_user_fdset(rfd_addr, &rfds, n); + if (error !=3D 0) { + return error; + } + } + if (wfd_addr !=3D 0) { + error =3D copy_to_user_fdset(wfd_addr, &wfds, n); + if (error !=3D 0) { + return error; + } + } + if (efd_addr !=3D 0) { + error =3D copy_to_user_fdset(efd_addr, &efds, n); + if (error !=3D 0) { + return error; + } + } + if (target_tv_addr !=3D 0) { + error =3D h2t_freebsd_timeval(&tv, target_tv_addr); + if (is_error(error)) { + return error; + } + } + } + return ret; +} + +/* pselect(2) */ +static inline abi_long do_freebsd_pselect(CPUArchState *env, int n, + abi_ulong rfd_addr, abi_ulong wfd_addr, abi_ulong efd_addr, + abi_ulong ts_addr, abi_ulong set_addr) +{ + CPUState *cpu =3D env_cpu(env); + TaskState *tstate =3D cpu->opaque; + fd_set rfds, wfds, efds; + fd_set *rfds_ptr, *wfds_ptr, *efds_ptr; + sigset_t *set_ptr; + struct timespec ts, *ts_ptr; + void *p; + abi_long ret, error; + + ret =3D copy_from_user_fdset_ptr(&rfds, &rfds_ptr, rfd_addr, n); + if (is_error(ret)) { + return ret; + } + ret =3D copy_from_user_fdset_ptr(&wfds, &wfds_ptr, wfd_addr, n); + if (is_error(ret)) { + return ret; + } + ret =3D copy_from_user_fdset_ptr(&efds, &efds_ptr, efd_addr, n); + if (is_error(ret)) { + return ret; + } + + /* Unlike select(), pselect() uses struct timespec instead of timeval = */ + if (ts_addr) { + if (t2h_freebsd_timespec(&ts, ts_addr)) { + return -TARGET_EFAULT; + } + ts_ptr =3D &ts; + } else { + ts_ptr =3D NULL; + } + + if (set_addr !=3D 0) { + p =3D lock_user(VERIFY_READ, set_addr, sizeof(target_sigset_t), 1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + target_to_host_sigset(&tstate->sigsuspend_mask, p); + unlock_user(p, set_addr, 0); + set_ptr =3D &tstate->sigsuspend_mask; + } else { + set_ptr =3D NULL; + } + + ret =3D get_errno(safe_pselect(n, rfds_ptr, wfds_ptr, efds_ptr, ts_ptr, + set_ptr)); + if (ret !=3D -TARGET_ERESTART) { + tstate->in_sigsuspend =3D true; + } + if (!is_error(ret)) { + if (rfd_addr !=3D 0) { + error =3D copy_to_user_fdset(rfd_addr, &rfds, n); + if (is_error(error)) { + return error; + } + } + if (wfd_addr !=3D 0) { + error =3D copy_to_user_fdset(wfd_addr, &wfds, n); + if (is_error(error)) { + return error; + } + } + if (efd_addr !=3D 0) { + error =3D copy_to_user_fdset(efd_addr, &efds, n); + if (is_error(error)) { + return error; + } + } + } + return ret; +} + +/* ppoll(2) */ +static inline abi_long do_freebsd_ppoll(CPUArchState *env, abi_long arg1, + abi_long arg2, abi_ulong arg3, abi_ulong arg4) +{ + CPUState *cpu =3D env_cpu(env); + TaskState *tstate =3D cpu->opaque; + abi_long ret; + nfds_t i, nfds =3D arg2; + struct pollfd *pfd; + struct target_pollfd *target_pfd; + struct timespec ts, *ts_ptr; + sigset_t *set_ptr; + void *p; + + target_pfd =3D lock_user(VERIFY_WRITE, arg1, + sizeof(struct target_pollfd) * nfds, 1); + if (!target_pfd) { + return -TARGET_EFAULT; + } + pfd =3D alloca(sizeof(struct pollfd) * nfds); + for (i =3D 0; i < nfds; i++) { + pfd[i].fd =3D tswap32(target_pfd[i].fd); + pfd[i].events =3D tswap16(target_pfd[i].events); + } + + /* Unlike poll(), ppoll() uses struct timespec. */ + if (arg3) { + if (t2h_freebsd_timespec(&ts, arg3)) { + return -TARGET_EFAULT; + } + ts_ptr =3D &ts; + } else { + ts_ptr =3D NULL; + } + + if (arg4 !=3D 0) { + p =3D lock_user(VERIFY_READ, arg4, sizeof(target_sigset_t), 1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + target_to_host_sigset(&tstate->sigsuspend_mask, p); + unlock_user(p, arg4, 0); + set_ptr =3D &tstate->sigsuspend_mask; + } else { + set_ptr =3D NULL; + } + + ret =3D get_errno(ppoll(pfd, nfds, ts_ptr, set_ptr)); + if (ret !=3D -TARGET_ERESTART) { + tstate->in_sigsuspend =3D true; + } + if (!is_error(ret)) { + for (i =3D 0; i < nfds; i++) { + target_pfd[i].revents =3D tswap16(pfd[i].revents); + } + } + unlock_user(target_pfd, arg1, sizeof(struct target_pollfd) * nfds); + + return ret; +} + +/* kqueue(2) */ =20 #endif /* FREEBSD_OS_TIME_H */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097652; cv=none; d=zohomail.com; s=zohoarc; b=jvcyUbr8sU8pX8ICZwZgWuEwh8OXb82rr/gou4oCv92RSxs+/h/s1bnIwExtvfMYJmtoRpLrUiKGSF9nC32w34AuGz5y5OvaHL4JJtkeqjXBL8gyJgNVC0LseT3AFJR5sGnRWPih7AAZ7wHKO8MMpQK6utYierfC8C1+sXJev+c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097652; h=Content-Type: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=uDG4yCGcdRHP3prcLODrCCoKPU0me91/+MFRsrPpUeU=; b=jnjSeCRt/OCzwQwpFVNQdiA21rNPWBd8T95jh6aBlZGCc2mu/so0woe4F2QQzEuFI/RIziXBV1qMiZljRcNidZXvYdY/1U/Z+uhLEWxKwTMa2HJlR3MglmJEb48qA2Uu6cIDLRzQz1tJ7rQpb9eyZqFfg+Bl+5FK0TaxoLd+lGU= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178709765262977.63854309721705; Tue, 18 Aug 2026 17:00:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThG-0002Wv-GJ; Tue, 18 Aug 2026 19:58:22 -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 1wwThE-0002SY-Uk for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:20 -0400 Received: from mail-oa1-x30.google.com ([2001:4860:4864:20::30]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwThC-0005Hj-V9 for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:20 -0400 Received: by mail-oa1-x30.google.com with SMTP id 586e51a60fabf-448b69cfc6dso391768fac.3 for ; Tue, 18 Aug 2026 16:58:18 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097498; x=1787702298; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=uDG4yCGcdRHP3prcLODrCCoKPU0me91/+MFRsrPpUeU=; b=AwM/27s7DSWsIoi1KoUa5pi2lN8iNJ9vuDTP2LiENNuX+KIE26OEYekwhlhh1wQHgq N1qsctOSipL+uO7eqbPTzq+9H1SlwSnmv0NhAFsqn0Sbwe9MkDeUasBHtB1mXMpE7Nrz L4wS0dBoA/d+eG86mBuZueStJr3H1Rb3lZoc8O+u0E79TfILaDNtp0K21DLTCOiHwUe8 JbSqj2oiVDW3fAm4ZphOsc0CTwSXerQyKijxvR5OI/RRprI7ufch8nyNZZuTpHikgAwr KGrlikrEad7Tc7uvKLt0vmDtY/UO9kkScTP2qB19sviOj/oJmoAVOeLZ9BiFyCBWn2bN V4NA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097498; x=1787702298; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=uDG4yCGcdRHP3prcLODrCCoKPU0me91/+MFRsrPpUeU=; b=JFJdRJ40naN/pEwan4j7xv9+ZvZs9rA/AoxGyeuAfCjUXu4sw7YpegRA9OVJhthifW ng2zZCRmN5TOf8aB/vwGqQN/YpheSppM4cSKPUkvviN4Sc4xEZ875LG/3DLfHQpx3ddj 6r2A2mLV5zRzQQ/dyoRVjBFjOa3Ru40OB9ah1y+1am/rv18JdeDpMnKDZ7FG6ktIqOQY p2Nm8t3yLGuNeI2dah+k4Xpi11KKSatCEle5aJ0Y59JnmzLUtNVa6GKLPl2Q3NlYE/HV XiHlYNDhjchoKcq11fDm00no7OMAxmadk5b54vmNQzSvs/8C6B8f0GoAxK1oLRBWPDsy 2H9A== X-Gm-Message-State: AOJu0Yw4MTQUGaqx76Jf0hGfjPhQrx6R6MMOYBAleRBTNZJodT9aKRLy Ou1i/8m+v30M6wbpnc4NmNTkWOGXC6Q1qh7LhDoqlfIkdnKFbCKoCLK7jIMSRbSTTzw= X-Gm-Gg: AR+sD11pVEsAXC2C+dKcuNtbk/dmsA7RUaW3zTC2QbhqjDhbbNXX0f+0bpP7jqAlQfH 1U0bOEAM3AzpKA9SLecxlwtepvg7UtNojICWs1411ix3Ycroz+YrTunaOgyXBr+a0lHCPpc2zVT WL9TBbIVxAD4vSfuS/hwHQOUPLG1Hbn/96NmBxl3ulH8NlxlR6i5WKzCuPSQ/vzauG1jJLOUKeO cqAN09v8PWPJ/JdhogqS+Zu55YXwOPlJMXEaNbUE3X2RKseRpIbG7BEWvhHXSoxHgoMAx62xutk D1pv+84zYexToTdnKKdAejefq6X/iQ77y4zC7KWbNFsNOAcnQXm3r9/JyCi30ncxtRqpEPxb8iD efHROsmEHLQTmTratf5Tb8N3eldrK7U9vgmsGpfFi90T4HB2IuyKd7TxbTwz8Fv8mO59/JjTt4K tGwnsLgoaPJq/xroTSEFXTwngZwkbt9Tn8j+SJ2bsrru4BKds= X-Received: by 2002:a05:6808:c1aa:b0:4b2:8d77:6da with SMTP id 5614622812f47-4b2bca1ce54mr358800b6e.12.1787097497918; Tue, 18 Aug 2026 16:58:17 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:17 -0600 Subject: [PATCH v4 24/40] bsd-user: Add kqueue and kevent functions to os-time.h MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-24-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , =?utf-8?q?Mika=C3=ABl_Urankar?= , Sean Bruno , Kyle Evans , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=8920; i=imp@bsdimp.com; h=from:subject:message-id; bh=muZxOBZ3S8D8Kb7WE0PTqk9FRzzKO+A1f6tHfX8PgRU=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFFdyqCz1Nut/Uia9yb9XcFxsRVJ40tfWYk7 IoatXzyo9aJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxRRsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQCZJBAAr6ZhONxH20t5x8Lk9FqRpUuiqRatwIY jEwMZy5L6hKzElz4fkXW+84zIJczqYRj6Ey7hFnITXJGsRTUA0/0n2/lrdBC2IhHFeUzBOstsGr 4GvWtWzRJE7IihZcleYWcqSTsKAIOrjwz4rQwICivzO8MJdMJmuS59ZhmkEt4E8Z9HRMU7GbbmF LdrNtafT+9fJ7T8I33HVe1+nk97+E0340LG9wFm4PX7TNqCK6zB4NzjoQ/EuD2sKsOT6+eTf5LJ qJTDaPbjjL/+D26TaSDghMuuIlBer2krvlDFHhZa5qV2DKE5qawvGF38bF4MgRGr9Dv4+SUIWSv uwSOaw5WDInP2/BVu3WH0Bt3/InHlSrPPpIhASAhO3ciMnegttPsiRSjqiB5rDhI8ByTPv6hAHF QXXwmqpa5YkZ9Q3PDuqnqA47p3dBHwzmOEnGsRnab3oyGqVtAfWwxbnbN3f7ds2Q58REqxWqoM1 ypjeuMzbE1R+ibEdFEcDcl5ptGfKlZncbsMjQhKEK3wMmGX+5Ac8Lv/8CIn+T9n2HSLCY5LMJFb ZqYBd33f9exXwn3us+KEXCot07pseUEY6lQSQvQcQUlxcQ+vqiuhiO4lxBWG4XortCVBE3fKBky fd7Z7zT1PnZFY8JdZQkQZq1CQvRDF2KzaHN6DILwMF3PdBP10fzA= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2001:4860:4864:20::30; envelope-from=imp@bsdimp.com; helo=mail-oa1-x30.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097653915158500 Add event notification system call shims: kqueue, freebsd11_kevent (legacy 32-bit data field), and kevent (with 64-bit ext fields). Signed-off-by: Stacey Son Signed-off-by: Mika=C3=ABl Urankar Signed-off-by: Sean Bruno Signed-off-by: Kyle Evans Assisted-by: Claude Opus 4.6 (1M context) Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-time.h | 173 +++++++++++++++++++++++++++++++++++++++++= ++++ bsd-user/syscall_defs.h | 22 ++++++ 2 files changed, 195 insertions(+) diff --git a/bsd-user/freebsd/os-time.h b/bsd-user/freebsd/os-time.h index 5f537fac40..302872dd8e 100644 --- a/bsd-user/freebsd/os-time.h +++ b/bsd-user/freebsd/os-time.h @@ -635,5 +635,178 @@ static inline abi_long do_freebsd_ppoll(CPUArchState = *env, abi_long arg1, } =20 /* kqueue(2) */ +static inline abi_long do_freebsd_kqueue(void) +{ + + return get_errno(kqueue()); +} + +/* kevent(2) */ +/* XXX Maybe some day, consolidate these two... */ +static inline abi_long do_freebsd_freebsd11_kevent(abi_long arg1, + abi_ulong arg2, abi_long arg3, abi_ulong arg4, abi_long arg5, abi_long= arg6) +{ + abi_long ret; + struct kevent *changelist =3D NULL, *eventlist =3D NULL; + struct target_freebsd11_kevent *target_changelist, *target_eventlist; + struct timespec ts; + int i; + + if (arg3 !=3D 0) { + target_changelist =3D lock_user(VERIFY_READ, arg2, + sizeof(*target_changelist) * arg3, 1= ); + if (target_changelist =3D=3D NULL) { + return -TARGET_EFAULT; + } + + changelist =3D alloca(sizeof(struct kevent) * arg3); + memset(changelist, '\0', sizeof(struct kevent) * arg3); + for (i =3D 0; i < arg3; i++) { + __get_user(changelist[i].ident, &target_changelist[i].ident); + __get_user(changelist[i].filter, &target_changelist[i].filter); + __get_user(changelist[i].flags, &target_changelist[i].flags); + __get_user(changelist[i].fflags, &target_changelist[i].fflags); + __get_user(changelist[i].data, &target_changelist[i].data); + /* __get_user(changelist[i].udata, &target_changelist[i].udata= ); */ +#if TARGET_ABI_BITS =3D=3D 32 + changelist[i].udata =3D (void *)(uintptr_t)target_changelist[i= ].udata; + tswap32s((uint32_t *)&changelist[i].udata); +#else + changelist[i].udata =3D (void *)(uintptr_t)target_changelist[i= ].udata; + tswap64s((uint64_t *)&changelist[i].udata); +#endif + } + unlock_user(target_changelist, arg2, 0); + } + + if (arg5 !=3D 0) { + eventlist =3D alloca(sizeof(struct kevent) * arg5); + } + if (arg6 !=3D 0) { + if (t2h_freebsd_timespec(&ts, arg6)) { + return -TARGET_EFAULT; + } + } + ret =3D get_errno(safe_kevent(arg1, changelist, arg3, eventlist, arg5, + arg6 !=3D 0 ? &ts : NULL)); + + if (arg5 =3D=3D 0) { + return ret; + } + + if (!is_error(ret)) { + target_eventlist =3D lock_user(VERIFY_WRITE, arg4, + sizeof(*target_eventlist) * arg5, 0); + if (target_eventlist =3D=3D NULL) { + return -TARGET_EFAULT; + } + for (i =3D 0; i < ret; i++) { + __put_user(eventlist[i].ident, &target_eventlist[i].ident); + __put_user(eventlist[i].filter, &target_eventlist[i].filter); + __put_user(eventlist[i].flags, &target_eventlist[i].flags); + __put_user(eventlist[i].fflags, &target_eventlist[i].fflags); + __put_user(eventlist[i].data, &target_eventlist[i].data); + /* __put_user(eventlist[i].udata, &target_eventlist[i].udata);= */ +#if TARGET_ABI_BITS =3D=3D 32 + tswap32s((uint32_t *)&eventlist[i].udata); + target_eventlist[i].udata =3D (uintptr_t)eventlist[i].udata; +#else + tswap64s((uint64_t *)&eventlist[i].udata); + target_eventlist[i].udata =3D (uintptr_t)eventlist[i].udata; +#endif + } + unlock_user(target_eventlist, arg4, + sizeof(*target_eventlist) * ret); + } + return ret; +} + +/* kevent(2) */ +static inline abi_long do_freebsd_kevent(abi_long arg1, abi_ulong arg2, + abi_long arg3, abi_ulong arg4, abi_long arg5, abi_long arg6) +{ + abi_long ret; + struct kevent *changelist =3D NULL, *eventlist =3D NULL; + struct target_freebsd_kevent *target_changelist, *target_eventlist; + struct timespec ts; + int i; + + if (arg3 !=3D 0) { + target_changelist =3D lock_user(VERIFY_READ, arg2, + sizeof(struct target_freebsd_kevent) * arg3, 1); + if (target_changelist =3D=3D NULL) { + return -TARGET_EFAULT; + } + + changelist =3D alloca(sizeof(struct kevent) * arg3); + for (i =3D 0; i < arg3; i++) { + __get_user(changelist[i].ident, &target_changelist[i].ident); + __get_user(changelist[i].filter, &target_changelist[i].filter); + __get_user(changelist[i].flags, &target_changelist[i].flags); + __get_user(changelist[i].fflags, &target_changelist[i].fflags); + __get_user(changelist[i].data, &target_changelist[i].data); + /* __get_user(changelist[i].udata, &target_changelist[i].udata= ); */ +#if TARGET_ABI_BITS =3D=3D 32 + changelist[i].udata =3D (void *)(uintptr_t)target_changelist[i= ].udata; + tswap32s((uint32_t *)&changelist[i].udata); +#else + changelist[i].udata =3D (void *)(uintptr_t)target_changelist[i= ].udata; + tswap64s((uint64_t *)&changelist[i].udata); +#endif + __get_user(changelist[i].ext[0], &target_changelist[i].ext[0]); + __get_user(changelist[i].ext[1], &target_changelist[i].ext[1]); + __get_user(changelist[i].ext[2], &target_changelist[i].ext[2]); + __get_user(changelist[i].ext[3], &target_changelist[i].ext[3]); + } + unlock_user(target_changelist, arg2, 0); + } + + if (arg5 !=3D 0) { + eventlist =3D alloca(sizeof(struct kevent) * arg5); + } + if (arg6 !=3D 0) { + if (t2h_freebsd_timespec(&ts, arg6)) { + return -TARGET_EFAULT; + } + } + ret =3D get_errno(safe_kevent(arg1, changelist, arg3, eventlist, arg5, + arg6 !=3D 0 ? &ts : NULL)); + + if (arg5 =3D=3D 0) { + return ret; + } + + if (!is_error(ret)) { + target_eventlist =3D lock_user(VERIFY_WRITE, arg4, + sizeof(struct target_freebsd_kevent) * arg5, 0); + if (target_eventlist =3D=3D NULL) { + return -TARGET_EFAULT; + } + for (i =3D 0; i < ret; i++) { + __put_user(eventlist[i].ident, &target_eventlist[i].ident); + __put_user(eventlist[i].filter, &target_eventlist[i].filter); + __put_user(eventlist[i].flags, &target_eventlist[i].flags); + __put_user(eventlist[i].fflags, &target_eventlist[i].fflags); + __put_user(eventlist[i].data, &target_eventlist[i].data); + /* __put_user(eventlist[i].udata, &target_eventlist[i].udata);= */ +#if TARGET_ABI_BITS =3D=3D 32 + tswap32s((uint32_t *)&eventlist[i].udata); + target_eventlist[i].udata =3D (uintptr_t)eventlist[i].udata; +#else + tswap64s((uint64_t *)&eventlist[i].udata); + target_eventlist[i].udata =3D (uintptr_t)eventlist[i].udata; +#endif + __put_user(eventlist[i].ext[0], &target_eventlist[i].ext[0]); + __put_user(eventlist[i].ext[1], &target_eventlist[i].ext[1]); + __put_user(eventlist[i].ext[2], &target_eventlist[i].ext[2]); + __put_user(eventlist[i].ext[3], &target_eventlist[i].ext[3]); + } + unlock_user(target_eventlist, arg4, + sizeof(struct target_freebsd_kevent) * ret); + } + return ret; +} + +/* sigtimedwait(2) */ =20 #endif /* FREEBSD_OS_TIME_H */ diff --git a/bsd-user/syscall_defs.h b/bsd-user/syscall_defs.h index 0d7002312f..f4bb687388 100644 --- a/bsd-user/syscall_defs.h +++ b/bsd-user/syscall_defs.h @@ -155,6 +155,28 @@ struct target_freebsd_timeval { #endif }; =20 +/* + * sys/event.h + */ +struct target_freebsd11_kevent { + abi_ulong ident; + int16_t filter; + uint16_t flags; + uint32_t fflags; + abi_long data; + abi_ulong udata; +}; + +struct target_freebsd_kevent { + abi_ulong ident; + int16_t filter; + uint16_t flags; + uint32_t fflags; + int64_t data; + abi_ulong udata; + uint64_t ext[4]; +}; + /* * sys/resource.h */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097542; cv=none; d=zohomail.com; s=zohoarc; b=gmSZKMXoYFpBL019LGnrAq04q+WrCV+o3l0XNJyKRDkLTnJczYkrl/cDF5l+5QesxIbncpC3AK/0IPeZVUIsrGJ4hEbyK0q9MnC8uCHN+zQ5Yg3H9dx79Pvg54SZbVHf7Pzrt8p0FiIT+uaKGCNqQBiLERioBCRSdacm4VqY59M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097542; h=Content-Type: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=YupH/ytlcUBpqsNoBinnranly+aq2V9hMP2Ck9NOXYY=; b=n4+1SHHLNYqOES1p32DLAXepeW5DXFc8KiRtpBFmuAcYiB80J95WkXTyoNB14h+1HlYViEIGoe7He12iLNTXWzRTjF6D6N8rzv32k0TD2wUhUnD+04+uAQow0/C64MvKS2HvMgNIJc9ZINDYtjTRQYMXTeJoXQdijNisjq50yt8= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097542226854.3903977113773; Tue, 18 Aug 2026 16:59:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThI-0002aV-VV; Tue, 18 Aug 2026 19:58: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 1wwThG-0002Xo-R7 for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:22 -0400 Received: from mail-ot1-x334.google.com ([2607:f8b0:4864:20::334]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwThE-0005Hv-To for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:22 -0400 Received: by mail-ot1-x334.google.com with SMTP id 46e09a7af769-7ee4399c3abso308576a34.2 for ; Tue, 18 Aug 2026 16:58:20 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097500; x=1787702300; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=YupH/ytlcUBpqsNoBinnranly+aq2V9hMP2Ck9NOXYY=; b=ION3+/wCBjJ5Npke+fuVfI+YAIobjR1JwXWb4Fu8OrsEs4JxPasaEvKu5I7Jgfat0P j/X541IntQc8JgTYT8dS9w7IvnG2rVeKKgaWzUIcHRKXk78A8iII0TeZpt3EPMQGzT+w UySwxV4kxFjIZKZrzN7NeNlDp1APJfwpQvbJCRHz71H6P/boILcj/yO7+D4A52J1Wm09 rqm3yMTZzOjZwTAnJZPv50JIjzs1FzpI/5De5KWftZgdX7rFq3wBSLxhg7tuFg87VV7I ok08JMs7Upagg5xYzST217XxBxoEfdHIunIAIxExgS7uZCs97ei/UXlyPBeMyhLiGqLn kV6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097500; x=1787702300; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=YupH/ytlcUBpqsNoBinnranly+aq2V9hMP2Ck9NOXYY=; b=PB6kGK7doJOloFQaMo0Xlrr8qextiUiiY4gdlLm7lLcq6A0cMaqNLRcnso2rZ9TeLB pZJ1+wOMtd4HPJTg1wAxj/wwc5mPDLxmMp18ry/Z1En3RZJZ01T41CsW2nhvcIPX5JwD jXkaXoPFA6e6xW1E0GlZ0Hwv+cjLdN77IM1MgFwAo04p8obSs/U7SXW1qAPgpgDhE1b3 y12Mf0JAP+qZBXeTDPn2cfyGwPUd5SIWiMKVR3z3GqmO6TUBHN3qlzq79VFDs5VkXgnR bqWLyWAm7vyCIxK9AJlnADXHeX5SJreNLTsKVg7lyuVmRwmx/VLek/PLxL7a419JdiRK D1yQ== X-Gm-Message-State: AOJu0Ywk52z6sz5ZYhoT93QjFKEGUBtl4YIeivq5f8TtjJk/fg0nIThV Q7UTYwSMj0o/qW3u9DFc6yOmUTvC7sY+f5+C2mggyIVpejYuOEOAC7i/c9KOhsJzF3A= X-Gm-Gg: AR+sD10imT272jzYfSMJO7Y/KrICXPRr4+BJG+rLCDnwdYJFMUNm90jlBXcRAqMamLI 8FV3vxG7kqrVPMxUAQbzTdQ56AYIGh4LlgiaatvRMPzAfDaox14JlEKipnlwASB1UYWB1Ev7MnK GQ2N4dnX8bIDDpypH0+fAm6aIzQChMlTk8Zn7bm6TF0dTD5tJJ2HsVWpLQxWaH8PkCprcH0Ii76 Es+7YQRqlXu7vZBtePD7hTu9s+ntvmVH5uF7MASonD5H3MSIao190mhK9KQUtK/mPeC9QJ0rzV1 s0SVklCgKi3wTNXyby+jA308NQusf7zEsazgQ/yiFfvgLpO4yIL2bFmbdfgZfrf87sWQDM/UI8J 3/uNb4klAf2QmVRyHpvfsOzfZOK6AvhRmV/0BjJqJavuZOwrTzEU1xIHj1Onw2XblWOzKX87Cjy ll9XdQ52w93Vq71gKPRSNq8Vup/ZgCd69D9NevfH19CaqkpSfgUro7mztKZg== X-Received: by 2002:a05:6808:198d:b0:4b2:5529:ed46 with SMTP id 5614622812f47-4b2bc976ed3mr376725b6e.8.1787097499832; Tue, 18 Aug 2026 16:58:19 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:18 -0600 Subject: [PATCH v4 25/40] bsd-user: Add sigtimedwait, itimer, and futimens to os-time.h MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-25-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , =?utf-8?q?Mika=C3=ABl_Urankar?= , Kyle Evans , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=8262; i=imp@bsdimp.com; h=from:subject:message-id; bh=13N/xwyjFGf8cRVWdwaggroKY8cPa8BwIvJqbfM9xdY=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFG9nfJy/CvMBhdnnkxBcmwaSH5uH8UJFcZx NtNFDaS1UOJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxRhsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQBLgxAAhUI+WAfDLK3kNW5bMTUDimZ3GnL95n8 zP8eoJCPugZYA+bvsg6E13ycE3T6+0s4kdTzX0EOmTr4KLhSM57pDsaT+QJBjZWpDMpwKBMqu8q IUhwCWQl/0toUdOvZ/PUs6NNmwczJXCAzAEdqIhe/CljJMsO9KX8pE9YjMDDmRJhnyebZINAeYK 8BamD0N0k+xpqfJA869ClqqssVBeA5zROzKBDEgYpC63e08go0ClnaF8CgDOku1ejVFViVUn28W /vdCpi6OpTozNm7AQZ9NxuSrQ/dUzhVR6PduYOxaV3WC3sXscd6otGpiAmfmQtdvboWqtBOHEix UEPNLjLe99A9DlhnumOe/lSLQLjbtaLV+xN0XzvdcIi4K8GS3ppOFsLVm+ljYd9T+cQR+9LesL7 q6BV/lynhBHzG4TFv1SobEayGLHjJZEfO6cW7/kpDVMXB6tDCyFuMXUJ1OxgNR5w1EUGo19m5r7 DUOYuYSZWKan05uV9xlk5r6N7V0+nk9/JE3XWQ+6gckj9CoJZNo3Jrzl7A5/msZRYeAxgH/PH9t IQoybi4iWp63R9UkhtasduecaG1v0RPmk0zNOEIU4bzRX87aZUXU+cUJpzF5b4FyPm9yc661yRa IXDOIpUblB76RgpBSjD3f14/RY5wMof/tVXNkQDX+GACvlVRI1M4= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::334; envelope-from=imp@bsdimp.com; helo=mail-ot1-x334.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097543315158500 Complete os-time.h with sigtimedwait, setitimer, getitimer, clock_getcpuclockid2, futimens, and utimensat system call shims. Signed-off-by: Stacey Son Signed-off-by: Mika=C3=ABl Urankar Signed-off-by: Kyle Evans Assisted-by: Claude Opus 4.6 (1M context) Reviewed-by: Pierrick Bouvier Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-time.h | 194 +++++++++++++++++++++++++++++++++++++++++= +--- 1 file changed, 184 insertions(+), 10 deletions(-) diff --git a/bsd-user/freebsd/os-time.h b/bsd-user/freebsd/os-time.h index 302872dd8e..05cb5db7d1 100644 --- a/bsd-user/freebsd/os-time.h +++ b/bsd-user/freebsd/os-time.h @@ -128,19 +128,19 @@ static inline abi_long do_freebsd_gettimeofday(abi_ul= ong arg1, abi_ulong arg2) struct timeval tv; struct timezone tz, *target_tz; /* XXX */ =20 - if (arg2 !=3D 0) { - if (!lock_user_struct(VERIFY_READ, target_tz, arg2, 0)) { - return -TARGET_EFAULT; - } - __get_user(tz.tz_minuteswest, &target_tz->tz_minuteswest); - __get_user(tz.tz_dsttime, &target_tz->tz_dsttime); - unlock_user_struct(target_tz, arg2, 1); - } ret =3D get_errno(gettimeofday(&tv, arg2 !=3D 0 ? &tz : NULL)); if (!is_error(ret)) { if (h2t_freebsd_timeval(&tv, arg1)) { return -TARGET_EFAULT; } + if (arg2 !=3D 0) { + if (!lock_user_struct(VERIFY_WRITE, target_tz, arg2, 0)) { + return -TARGET_EFAULT; + } + __put_user(tz.tz_minuteswest, &target_tz->tz_minuteswest); + __put_user(tz.tz_dsttime, &target_tz->tz_dsttime); + unlock_user_struct(target_tz, arg2, 1); + } } =20 return ret; @@ -153,12 +153,12 @@ static inline abi_long do_freebsd_settimeofday(abi_lo= ng arg1, abi_long arg2) struct timezone tz, *target_tz; /* XXX */ =20 if (arg2 !=3D 0) { - if (!lock_user_struct(VERIFY_READ, target_tz, arg2, 0)) { + if (!lock_user_struct(VERIFY_READ, target_tz, arg2, 1)) { return -TARGET_EFAULT; } __get_user(tz.tz_minuteswest, &target_tz->tz_minuteswest); __get_user(tz.tz_dsttime, &target_tz->tz_dsttime); - unlock_user_struct(target_tz, arg2, 1); + unlock_user_struct(target_tz, arg2, 0); } if (t2h_freebsd_timeval(&tv, arg1)) { return -TARGET_EFAULT; @@ -601,6 +601,7 @@ static inline abi_long do_freebsd_ppoll(CPUArchState *e= nv, abi_long arg1, /* Unlike poll(), ppoll() uses struct timespec. */ if (arg3) { if (t2h_freebsd_timespec(&ts, arg3)) { + unlock_user(target_pfd, arg1, 0); return -TARGET_EFAULT; } ts_ptr =3D &ts; @@ -611,6 +612,7 @@ static inline abi_long do_freebsd_ppoll(CPUArchState *e= nv, abi_long arg1, if (arg4 !=3D 0) { p =3D lock_user(VERIFY_READ, arg4, sizeof(target_sigset_t), 1); if (p =3D=3D NULL) { + unlock_user(target_pfd, arg1, 0); return -TARGET_EFAULT; } target_to_host_sigset(&tstate->sigsuspend_mask, p); @@ -808,5 +810,177 @@ static inline abi_long do_freebsd_kevent(abi_long arg= 1, abi_ulong arg2, } =20 /* sigtimedwait(2) */ +static inline abi_long do_freebsd_sigtimedwait(abi_ulong arg1, abi_ulong a= rg2, + abi_ulong arg3) +{ + abi_long ret; + void *p; + sigset_t set; + struct timespec uts, *puts; + siginfo_t uinfo; + + p =3D lock_user(VERIFY_READ, arg1, sizeof(target_sigset_t), 1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + target_to_host_sigset(&set, p); + unlock_user(p, arg1, 0); + if (arg3) { + puts =3D &uts; + ret =3D t2h_freebsd_timespec(puts, arg3); + if (ret !=3D 0) { + return ret; + } + } else { + puts =3D NULL; + } + ret =3D get_errno(sigtimedwait(&set, &uinfo, puts)); + if (!is_error(ret) && arg2) { + p =3D lock_user(VERIFY_WRITE, arg2, sizeof(target_siginfo_t), 0); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + host_to_target_siginfo(p, &uinfo); + unlock_user(p, arg2, sizeof(target_siginfo_t)); + } + return ret; +} + +/* setitimer(2) */ +static inline abi_long do_freebsd_setitimer(int arg1, abi_ulong arg2, + abi_ulong arg3) +{ + abi_long ret =3D 0; + struct itimerval value, ovalue, *pvalue; + + if (arg2) { + pvalue =3D &value; + if (t2h_freebsd_timeval(&pvalue->it_interval, arg2) || + t2h_freebsd_timeval(&pvalue->it_value, + arg2 + sizeof(struct target_freebsd_timeval))) { + return -TARGET_EFAULT; + } + } else { + pvalue =3D NULL; + } + ret =3D get_errno(setitimer(arg1, pvalue, &ovalue)); + if (!is_error(ret) && arg3) { + if (h2t_freebsd_timeval(&ovalue.it_interval, arg3) || + h2t_freebsd_timeval(&ovalue.it_value, + arg3 + sizeof(struct target_freebsd_timeval))) { + return -TARGET_EFAULT; + } + } + return ret; +} + +/* getitimer(2) */ +static inline abi_long do_freebsd_getitimer(int arg1, abi_ulong arg2) +{ + abi_long ret =3D 0; + struct itimerval value; + + ret =3D get_errno(getitimer(arg1, &value)); + if (!is_error(ret) && arg2) { + if (h2t_freebsd_timeval(&value.it_interval, arg2) || + h2t_freebsd_timeval(&value.it_value, + arg2 + sizeof(struct target_freebsd_timeval))) { + return -TARGET_EFAULT; + } + } + return ret; +} + +/* clock_getcpuclockid2(id_t, int, clockid_t *) Not documented. */ +static inline abi_long do_freebsd_clock_getcpuclockid2(abi_ulong arg1, + abi_ulong arg2, abi_ulong arg3, abi_ulong arg4) +{ + abi_long ret =3D 0; + id_t id; /* 64-bit value */ + int which; + abi_ulong target_clk_id_addr; + clockid_t clk_id; + +#if TARGET_ABI_BITS =3D=3D 32 + id =3D (id_t)target_arg64(arg1, arg2); + which =3D (int)arg3; + target_clk_id_addr =3D arg4; +#else + id =3D (id_t)arg1; + which =3D (int)arg2; + target_clk_id_addr =3D arg3; +#endif + + if (target_clk_id_addr =3D=3D 0) { + return -TARGET_EINVAL; + } + + switch (which) { + case TARGET_CPUCLOCK_WHICH_PID: + ret =3D get_errno(clock_getcpuclockid2(id, CPUCLOCK_WHICH_PID, &cl= k_id)); + break; + + case TARGET_CPUCLOCK_WHICH_TID: + ret =3D get_errno(clock_getcpuclockid2(id, CPUCLOCK_WHICH_TID, &cl= k_id)); + break; + + default: + ret =3D -TARGET_EINVAL; + break; + } + + if (!ret && put_user_s32(clk_id, target_clk_id_addr)) { + ret =3D -TARGET_EFAULT; + } + + return ret; +} + +static inline abi_long do_freebsd_futimens(abi_ulong arg1, + abi_ulong arg2) +{ + struct timespec *tvp, tv[2]; + + if (arg2 !=3D 0) { + if (t2h_freebsd_timespec(&tv[0], arg2) || + t2h_freebsd_timespec(&tv[1], arg2 + + sizeof(struct target_freebsd_timespec))) { + return -TARGET_EFAULT; + } + tvp =3D tv; + } else { + tvp =3D NULL; + } + + return get_errno(futimens(arg1, tvp)); +} + +static inline abi_long do_freebsd_utimensat(abi_ulong arg1, + abi_ulong arg2, abi_ulong arg3, abi_ulong arg4) +{ + abi_long ret =3D 0; + void *p; + struct timespec *tvp, tv[2]; + + if (arg3 !=3D 0) { + if (t2h_freebsd_timespec(&tv[0], arg3) || + t2h_freebsd_timespec(&tv[1], arg3 + + sizeof(struct target_freebsd_timespec))) { + return -TARGET_EFAULT; + } + tvp =3D tv; + } else { + tvp =3D NULL; + } + + p =3D lock_user_string(arg2); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D get_errno(utimensat(arg1, p, tvp, + target_to_host_bitmask(arg4, fcntl_flags_tbl))); + unlock_user(p, arg2, 0); + return ret; +} =20 #endif /* FREEBSD_OS_TIME_H */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097525; cv=none; d=zohomail.com; s=zohoarc; b=D8I5UGTRY/H/CUiBIbmgwH4R5JszycwXUXiUnhoeOorB3qbQeExZtIvEHzIj56a6Mmrx0wzkX2f7CfSZylgIbgMLIQHEPowGbfyG9vMEtkhFPgLUxWMb+bHvY9HYui+J8LNSgPN2EtRUMlWuh9cWtJ0o0SkM7+87P0rw8h6Fxwk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097525; h=Content-Type: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=jZ7YakWiIsUg2x6efJEVNgdvs+SWA6mdkxLH81qX588=; b=eIEHyNt/v4hFfrNqweNNgjMAiwuSeYpllVKM3WRjwWdcfzfCPj+Tv0GSvQ8XwCJos9HQJbAA6XPZmLoJjj4NuQiBm77uE3gj/nJU5kC7YCwlq7Y1RlkY/18FsYbC3X7qX+72A9MH+xjg/K29o+DCtJYwJRfvlJOz6OpHI5AmoO0= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097525716735.1359092810865; Tue, 18 Aug 2026 16:58:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThL-0002fL-80; Tue, 18 Aug 2026 19:58:27 -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 1wwThJ-0002b8-My for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:25 -0400 Received: from mail-oi1-x22e.google.com ([2607:f8b0:4864:20::22e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwThH-0005IB-AS for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:25 -0400 Received: by mail-oi1-x22e.google.com with SMTP id 5614622812f47-4a456e44e01so296356b6e.1 for ; Tue, 18 Aug 2026 16:58:23 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097502; x=1787702302; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=jZ7YakWiIsUg2x6efJEVNgdvs+SWA6mdkxLH81qX588=; b=PBRK/UwRQaABG9fi9BQcw3kdyn3ZveaGyjHsXTnWPei3bhTL5MJ0y+L/jSURep6q3y bhzXiRaoGh0Hq1bWIWNq/ujE2OS8RfpFCEXSrJnjmc9zlSjRm3eRVFRD6rW1GR0hMqDi B1EQHjvNhfXN6U5LPV3wSyS7SAhqUIuVXbRSm7pEBEUnbUfDonNrlsGsON4+3RDZ8DyM lHQve9r9cOnpc+zb5gjpwsL+LpB32DE3FreHhy5OTyK8FSfvTFgTx8oNh2SgtmwEdhib /pmYRn1vysjBmw10CZ9HCm5hYmIul/T2PvwcVxWE49C1+khQckQu/CkylBxbUA4AWPWm wj5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097502; x=1787702302; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=jZ7YakWiIsUg2x6efJEVNgdvs+SWA6mdkxLH81qX588=; b=FVJUXE2IuoPoD7dwVE1WzVZOWcIry/vowRiUYn3SG9aXnDYfZA37ZOStK/UII2HSXL 4y4TUCkCkW37zYLEfXhj6bITgZqOc0m9DukA94W1KngpiuUR09I+uKg2YK4ZQxCJKG3+ +doi44MgoE3lgmY6Ci3/08u0OFU9+2IChP2jtgKwMC3I+2EdXbWg9EPCFMXX3dVSuVuE h4Nx9Fl53hALyc7CO044jbYu84daSanHEBxPs3ayb7eA+JYw30DI8QBzR52HPGp+xJ/7 uppvTF+TN9OsnSEsdTxXFzn0udT+3MhEn2wCuZSe66/EWOFQ4b7DMrF7FzodYAzauTjB m0EQ== X-Gm-Message-State: AOJu0YwbKe/xEOn5PktbNPsM5SSNB6c+3aNqg19paciBTRaIHi9SYT2+ ruAxsGVy7RKH+IT/PZ9gnFtOix66fR8LTKjT/xs+KNabbFA4kghlIld7EnAN3/ZMp1s= X-Gm-Gg: AR+sD127iIary0GvbLZrILfYXnzhErqBqbwRHYUejWdxKzKkm7YBUs9B9Hs6ckxVGVj cPipXFnFOwB4K3ft6u4naiqH9Xsa6sL30zUTKA7AyYy0PXRHy83CccJC4w8Em0pNn8LYjlSNhEp cbCB1Ix6CPso3rvm8nMKO1Pv/cWoNUYml1UWJegmpQSqByDG7w3SRvBHVZdiItbX9NJcPe9YaSf IBHVYdNEP8iDfmutry7FwvOKsqyKlvxCaA4il+U9vOkCjfcvYBy6uM7HUkR5pSplAtj9ic8MUnZ sLLx4vMjHgUeLLxH10pgo6pmudz9EG7/FQ9UU8MbM/PoNLf4F+4vt3ODsup2vWsbA2Clkm+PjRq e417bRY+DTeu0O8fUpX9cCqWWWmbzJrMfANWzVqrtr1YIuxWdlQ2D2RD1C+i87HNQUaCtO1GQSq bjundz+jgRUh6ZyBM5soRCBB8xwxjMOaonmbiSA658N4An1QA= X-Received: by 2002:a05:6808:c1f5:b0:489:352c:5153 with SMTP id 5614622812f47-4b2bcca16camr293243b6e.21.1787097502232; Tue, 18 Aug 2026 16:58:22 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:19 -0600 Subject: [PATCH v4 26/40] bsd-user: Add os-time.c and time-related type definitions MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-26-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , =?utf-8?q?Mika=C3=ABl_Urankar?= , Kyle Evans , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=16770; i=imp@bsdimp.com; h=from:subject:message-id; bh=Zz4TXd9Lm3KHBPMptOk3Zf8LV9g0AYvapwODo1pi2eM=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFImiYS3WnqIx34g8UWtqe/GD1GEtF6wC0le pDGp6fVzJiJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxSBsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQCQUg/9E4Tv6MM6n2fCrwp93Ly9y6Y2iAriIWv dm0YNRLOx7PFOnkeC5Qoo0LDsXDObzXFWFTxmeV4MPFETlRxpwChGmRmL/qb/eYy9WS77PJeluU /pKKGqDA0zj5up7spE07CfujMGA0PI93YXzAPnTNO9TRmMxMlL1/npfNN+iMJoxKPcwOyVNFmpj wuFc4yNf+NoY819ltATbxXynYSkLUvYQZFMoM4acBLA0iqYvPy5/vqo2DAnMNd+gIoPGcHlvB7s 4GEt1N8xp/V+I7hhn7EG4Q7mHqTyT1/NR8E7WZzKw2gVCFurcdd3hMCD8dSs4m3dWO5Cu6nDk6q /gKtCzkqDQyJ9jLo7qvP8ZrqsF8JcthArYSAq/omqPVBVmffBZvxCoAlRIjcYtYnObfzR3XWbXi S+2BsejqaMB7MhOFBYuyIYgJhcHNBTI0FNI9IiwWAse2o6glvBvAFmPOOqQ27mwcgFnSQW30T2+ oMdZCrUbL6dvxo7cioD/dlM5EKQMUefOVCiTuh3pTIe50Hr0VnNerq0Ke6JGmuh1TTA3vAFpUHP /58VaKcZLtDUny0VWLZv6toAe8FRKXOAMRIeKpJKFUXr9od+eAvP/vMJnbG1o7pSvs++VnEzgv+ Xi54z9BN1hKu8Rg13bULcvpMnlWM4Broh3jvFWVOL0KzWdF5ssQ8= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::22e; envelope-from=imp@bsdimp.com; helo=mail-oi1-x22e.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097527218158500 Add os-time.c with time conversion helpers (t2h/h2t functions for timespec, timeval, timex, ntptimeval, itimerspec) and POSIX timer helper functions. Also add target_freebsd_timex, target_freebsd_ntptimeval, target_freebsd_itimerspec, kevent structures, and timer definitions to syscall_defs.h. Signed-off-by: Stacey Son Signed-off-by: Mika=C3=ABl Urankar Signed-off-by: Kyle Evans Assisted-by: Claude Opus 4.6 (1M context) Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/meson.build | 3 +- bsd-user/freebsd/os-syscall.c | 2 + bsd-user/freebsd/os-time.c | 347 ++++++++++++++++++++++++++++++++++++++= ++++ bsd-user/freebsd/os-time.h | 3 + bsd-user/freebsd/qemu-os.h | 30 ++++ bsd-user/syscall_defs.h | 41 +++++ 6 files changed, 425 insertions(+), 1 deletion(-) diff --git a/bsd-user/freebsd/meson.build b/bsd-user/freebsd/meson.build index 83593a1e20..163d5657db 100644 --- a/bsd-user/freebsd/meson.build +++ b/bsd-user/freebsd/meson.build @@ -8,6 +8,7 @@ bsd_user_ss.add(files( 'os-socket.c', 'os-stat.c', 'os-sys.c', - 'os-syscall.c'), + 'os-syscall.c', + 'os-time.c'), bsd_syscall_nr ) diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c index 5d3a66e360..521660e8c8 100644 --- a/bsd-user/freebsd/os-syscall.c +++ b/bsd-user/freebsd/os-syscall.c @@ -89,6 +89,8 @@ safe_syscall6(ssize_t, sendto, int, fd, const void *, buf= , size_t, len, int, safe_syscall3(ssize_t, recvmsg, int, s, struct msghdr *, msg, int, flags); safe_syscall3(ssize_t, sendmsg, int, s, const struct msghdr *, msg, int, f= lags); =20 +int g_posix_timers[32] =3D { 0, } ; + /* used in os-proc */ safe_syscall4(pid_t, wait4, pid_t, wpid, int *, status, int, options, struct rusage *, rusage); diff --git a/bsd-user/freebsd/os-time.c b/bsd-user/freebsd/os-time.c new file mode 100644 index 0000000000..0dae7dc008 --- /dev/null +++ b/bsd-user/freebsd/os-time.c @@ -0,0 +1,347 @@ +/* + * FreeBSD time related system call helpers + * + * Copyright (c) 2013-2015 Stacey D. Son + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#include "qemu/osdep.h" + +#include +#include +#include +#include +#include +#include + +#include "qemu.h" +#include "qemu-os.h" + +/* + * FreeBSD time conversion functions + */ +abi_long t2h_freebsd_timeval(struct timeval *tv, abi_ulong target_tv_addr) +{ + struct target_freebsd_timeval *target_tv; + + if (!lock_user_struct(VERIFY_READ, target_tv, target_tv_addr, 1)) { + return -TARGET_EFAULT; + } + __get_user(tv->tv_sec, &target_tv->tv_sec); + __get_user(tv->tv_usec, &target_tv->tv_usec); + unlock_user_struct(target_tv, target_tv_addr, 0); + + return 0; +} + +abi_long h2t_freebsd_timeval(struct timeval *tv, abi_ulong target_tv_addr) +{ + struct target_freebsd_timeval *target_tv; + + if (!lock_user_struct(VERIFY_WRITE, target_tv, target_tv_addr, 0)) { + return -TARGET_EFAULT; + } + __put_user(tv->tv_sec, &target_tv->tv_sec); + __put_user(tv->tv_usec, &target_tv->tv_usec); + unlock_user_struct(target_tv, target_tv_addr, 1); + + return 0; +} + +abi_long t2h_freebsd_timespec(struct timespec *ts, abi_ulong target_ts_add= r) +{ + struct target_freebsd_timespec *target_ts; + + if (!lock_user_struct(VERIFY_READ, target_ts, target_ts_addr, 1)) { + return -TARGET_EFAULT; + } + __get_user(ts->tv_sec, &target_ts->tv_sec); + __get_user(ts->tv_nsec, &target_ts->tv_nsec); + unlock_user_struct(target_ts, target_ts_addr, 0); + + return 0; +} + +abi_long h2t_freebsd_timespec(abi_ulong target_ts_addr, struct timespec *t= s) +{ + struct target_freebsd_timespec *target_ts; + + if (!lock_user_struct(VERIFY_WRITE, target_ts, target_ts_addr, 0)) { + return -TARGET_EFAULT; + } + __put_user(ts->tv_sec, &target_ts->tv_sec); + __put_user(ts->tv_nsec, &target_ts->tv_nsec); + unlock_user_struct(target_ts, target_ts_addr, 1); + + return 0; +} + +abi_long t2h_freebsd_umtx_time(abi_ulong target_ut_addr, + abi_ulong target_ut_size, void *host_t, size_t *host_tsz) +{ + abi_long ret; + + if (target_ut_size <=3D sizeof(struct target_freebsd_timespec)) { + ret =3D t2h_freebsd_timespec((struct timespec *)host_t, target_ut_= addr); + if (ret =3D=3D 0) { + *host_tsz =3D sizeof(struct timespec); + } + return ret; + } else { + struct target_freebsd__umtx_time *target_ut; + struct _umtx_time *ut =3D (struct _umtx_time *)host_t; + + if (!lock_user_struct(VERIFY_READ, target_ut, target_ut_addr, 1)) { + return -TARGET_EFAULT; + } + if (t2h_freebsd_timespec(&ut->_timeout, h2g(&target_ut->_timeout))= ) { + unlock_user_struct(target_ut, target_ut_addr, 0); + return -TARGET_EFAULT; + } + __get_user(ut->_flags, &target_ut->_flags); + __get_user(ut->_clockid, &target_ut->_clockid); + unlock_user_struct(target_ut, target_ut_addr, 0); + + if (target_ut_size > sizeof(struct target_freebsd__umtx_time)) { + *host_tsz =3D sizeof(struct _umtx_time) + sizeof(struct timesp= ec); + } else { + *host_tsz =3D sizeof(struct _umtx_time); + } + + return 0; + } +} + +abi_long t2h_freebsd_timex(struct timex *host_tx, abi_ulong target_tx_addr) +{ + struct target_freebsd_timex *target_tx; + + if (!lock_user_struct(VERIFY_READ, target_tx, target_tx_addr, 1)) { + return -TARGET_EFAULT; + } + __get_user(host_tx->modes, &target_tx->modes); + __get_user(host_tx->offset, &target_tx->offset); + __get_user(host_tx->freq, &target_tx->freq); + __get_user(host_tx->maxerror, &target_tx->maxerror); + __get_user(host_tx->esterror, &target_tx->esterror); + __get_user(host_tx->status, &target_tx->status); + __get_user(host_tx->constant, &target_tx->constant); + __get_user(host_tx->precision, &target_tx->precision); + __get_user(host_tx->tolerance, &target_tx->tolerance); + __get_user(host_tx->ppsfreq, &target_tx->ppsfreq); + __get_user(host_tx->jitter, &target_tx->jitter); + __get_user(host_tx->shift, &target_tx->shift); + __get_user(host_tx->stabil, &target_tx->stabil); + __get_user(host_tx->jitcnt, &target_tx->jitcnt); + __get_user(host_tx->calcnt, &target_tx->calcnt); + __get_user(host_tx->errcnt, &target_tx->errcnt); + __get_user(host_tx->stbcnt, &target_tx->stbcnt); + unlock_user_struct(target_tx, target_tx_addr, 0); + + return 0; +} + +abi_long h2t_freebsd_timex(abi_ulong target_tx_addr, struct timex *host_tx) +{ + struct target_freebsd_timex *target_tx; + + if (!lock_user_struct(VERIFY_WRITE, target_tx, target_tx_addr, 0)) { + return -TARGET_EFAULT; + } + __put_user(host_tx->modes, &target_tx->modes); + __put_user(host_tx->offset, &target_tx->offset); + __put_user(host_tx->freq, &target_tx->freq); + __put_user(host_tx->maxerror, &target_tx->maxerror); + __put_user(host_tx->esterror, &target_tx->esterror); + __put_user(host_tx->status, &target_tx->status); + __put_user(host_tx->constant, &target_tx->constant); + __put_user(host_tx->precision, &target_tx->precision); + __put_user(host_tx->tolerance, &target_tx->tolerance); + __put_user(host_tx->ppsfreq, &target_tx->ppsfreq); + __put_user(host_tx->jitter, &target_tx->jitter); + __put_user(host_tx->shift, &target_tx->shift); + __put_user(host_tx->stabil, &target_tx->stabil); + __put_user(host_tx->jitcnt, &target_tx->jitcnt); + __put_user(host_tx->calcnt, &target_tx->calcnt); + __put_user(host_tx->errcnt, &target_tx->errcnt); + __put_user(host_tx->stbcnt, &target_tx->stbcnt); + unlock_user_struct(target_tx, target_tx_addr, 1); + + return 0; +} + +abi_long h2t_freebsd_ntptimeval(abi_ulong target_ntv_addr, + struct ntptimeval *ntv) +{ + struct target_freebsd_ntptimeval *target_ntv; + + if (!lock_user_struct(VERIFY_WRITE, target_ntv, target_ntv_addr, 0)) { + return -TARGET_EFAULT; + } + __put_user(ntv->time.tv_sec, &target_ntv->time.tv_sec); + __put_user(ntv->time.tv_nsec, &target_ntv->time.tv_nsec); + __put_user(ntv->maxerror, &target_ntv->maxerror); + __put_user(ntv->esterror, &target_ntv->esterror); + __put_user(ntv->tai, &target_ntv->tai); + __put_user(ntv->time_state, &target_ntv->time_state); + unlock_user_struct(target_ntv, target_ntv_addr, 1); + + return 0; +} + +/* + * select(2) fdset copy functions + */ +abi_ulong copy_from_user_fdset(fd_set *fds, abi_ulong target_fds_addr, int= n) +{ + int i, nw, j, k; + abi_ulong b, *target_fds; + + nw =3D (n + TARGET_ABI_BITS - 1) / TARGET_ABI_BITS; + target_fds =3D lock_user(VERIFY_READ, target_fds_addr, + sizeof(abi_ulong) * nw, 1); + if (target_fds =3D=3D NULL) { + return -TARGET_EFAULT; + } + FD_ZERO(fds); + k =3D 0; + for (i =3D 0; i < nw; i++) { + /* grab the abi_ulong */ + __get_user(b, &target_fds[i]); + for (j =3D 0; j < TARGET_ABI_BITS; j++) { + /* check the bit inside the abi_ulong */ + if ((b >> j) & 1) { + FD_SET(k, fds); + } + k++; + } + } + unlock_user(target_fds, target_fds_addr, 0); + + return 0; +} + +abi_ulong copy_from_user_fdset_ptr(fd_set *fds, fd_set **fds_ptr, + abi_ulong target_fds_addr, int n) +{ + + if (target_fds_addr) { + if (copy_from_user_fdset(fds, target_fds_addr, n)) { + return -TARGET_EFAULT; + } + *fds_ptr =3D fds; + } else { + *fds_ptr =3D NULL; + } + + return 0; +} + +abi_long copy_to_user_fdset(abi_ulong target_fds_addr, const fd_set *fds, = int n) +{ + int i, nw, j, k; + abi_long v; + abi_ulong *target_fds; + + nw =3D (n + TARGET_ABI_BITS - 1) / TARGET_ABI_BITS; + target_fds =3D lock_user(VERIFY_WRITE, target_fds_addr, + sizeof(abi_ulong) * nw, 0); + if (target_fds =3D=3D NULL) { + return -TARGET_EFAULT; + } + k =3D 0; + for (i =3D 0; i < nw; i++) { + v =3D 0; + for (j =3D 0; j < TARGET_ABI_BITS; j++) { + v |=3D ((FD_ISSET(k, fds) !=3D 0) << j); + k++; + } + __put_user(v, &target_fds[i]); + } + unlock_user(target_fds, target_fds_addr, sizeof(abi_ulong) * nw); + + return 0; +} + +abi_int next_free_host_timer(void) +{ + int k ; + /* FIXME: Does finding the next free slot require a lock? */ + for (k =3D 0; k < ARRAY_SIZE(g_posix_timers); k++) { + if (g_posix_timers[k] =3D=3D 0) { + g_posix_timers[k] =3D 1; + return k; + } + } + return -1; +} + +int host_to_target_timerid(int timerid) +{ + int k; + + for (k =3D 0; k < ARRAY_SIZE(g_posix_timers); k++) { + if (g_posix_timers[k] =3D=3D timerid) { + return TIMER_MAGIC | k; + } + } + + return -1; +} + +abi_long target_to_host_itimerspec(struct itimerspec *host_itspec, + abi_ulong target_addr) +{ + struct target_freebsd_itimerspec *target_itspec; + + if (!lock_user_struct(VERIFY_READ, target_itspec, target_addr, 1)) { + return -TARGET_EFAULT; + } + + host_itspec->it_interval.tv_sec =3D + tswapal(target_itspec->it_interval.tv_sec); + host_itspec->it_interval.tv_nsec =3D + tswapal(target_itspec->it_interval.tv_nsec); + host_itspec->it_value.tv_sec =3D tswapal(target_itspec->it_value.tv_se= c); + host_itspec->it_value.tv_nsec =3D tswapal(target_itspec->it_value.tv_n= sec); + + unlock_user_struct(target_itspec, target_addr, 0); + return 0; +} + +abi_long host_to_target_itimerspec(abi_ulong target_addr, + struct itimerspec *host_its) +{ + struct target_freebsd_itimerspec *target_itspec; + + if (!lock_user_struct(VERIFY_WRITE, target_itspec, target_addr, 0)) { + return -TARGET_EFAULT; + } + + target_itspec->it_interval.tv_sec =3D tswapal(host_its->it_interval.tv= _sec); + target_itspec->it_interval.tv_nsec =3D tswapal(host_its->it_interval.t= v_nsec); + + target_itspec->it_value.tv_sec =3D tswapal(host_its->it_value.tv_sec); + target_itspec->it_value.tv_nsec =3D tswapal(host_its->it_value.tv_nsec= ); + + unlock_user_struct(target_itspec, target_addr, 1); + return 0; +} + +/* Convert QEMU provided timer ID back to internal 16bit index format */ +int get_timer_id(abi_long arg) +{ + int timerid =3D arg; + + if ((timerid & TIMER_MAGIC_MASK) !=3D TIMER_MAGIC) { + return -TARGET_EINVAL; + } + + timerid &=3D 0xffff; + + if (timerid >=3D ARRAY_SIZE(g_posix_timers)) { + return -TARGET_EINVAL; + } + + return timerid; +} diff --git a/bsd-user/freebsd/os-time.h b/bsd-user/freebsd/os-time.h index 05cb5db7d1..213bd16850 100644 --- a/bsd-user/freebsd/os-time.h +++ b/bsd-user/freebsd/os-time.h @@ -202,6 +202,9 @@ static inline abi_long do_freebsd_ntp_adjtime(abi_ulong= target_tx_addr) if (ret =3D=3D 0) { ret =3D get_errno(ntp_adjtime(&host_tx)); } + if (!is_error(ret)) { + ret =3D h2t_freebsd_timex(target_tx_addr, &host_tx); + } =20 return ret; } diff --git a/bsd-user/freebsd/qemu-os.h b/bsd-user/freebsd/qemu-os.h index 12adc50928..ee18b23422 100644 --- a/bsd-user/freebsd/qemu-os.h +++ b/bsd-user/freebsd/qemu-os.h @@ -32,6 +32,36 @@ =20 struct freebsd11_stat; =20 +/* os-time.c */ +abi_long t2h_freebsd_timeval(struct timeval *tv, abi_ulong target_tv_addr); +abi_long h2t_freebsd_timeval(struct timeval *tv, abi_ulong target_tv_addr); + +abi_long t2h_freebsd_timespec(struct timespec *ts, abi_ulong target_ts_add= r); +abi_long h2t_freebsd_timespec(abi_ulong target_ts_addr, struct timespec *t= s); + +abi_long t2h_freebsd_umtx_time(abi_ulong target_ut_addr, + abi_ulong target_ut_size, void *host_t, size_t *host_tsz); + +abi_long t2h_freebsd_timex(struct timex *host_tx, abi_ulong target_tx_addr= ); +abi_long h2t_freebsd_timex(abi_ulong target_tx_addr, struct timex *host_tx= ); + +abi_long h2t_freebsd_ntptimeval(abi_ulong target_ntv_addr, + struct ntptimeval *ntv); + +abi_ulong copy_from_user_fdset(fd_set *fds, abi_ulong target_fds_addr, int= n); +abi_ulong copy_from_user_fdset_ptr(fd_set *fds, fd_set **fds_ptr, + abi_ulong target_fds_addr, int n); +abi_long copy_to_user_fdset(abi_ulong target_fds_addr, const fd_set *fds, + int n); + +abi_int next_free_host_timer(void); +int host_to_target_timerid(int timerid); +abi_long target_to_host_itimerspec(struct itimerspec *host_itspec, + abi_ulong target_addr); +abi_long host_to_target_itimerspec(abi_ulong target_addr, + struct itimerspec *host_its); +int get_timer_id(abi_long arg); + /* os-stat.c */ abi_long h2t_freebsd11_stat(abi_ulong target_addr, struct freebsd11_stat *host_st); diff --git a/bsd-user/syscall_defs.h b/bsd-user/syscall_defs.h index f4bb687388..75f2d6fa36 100644 --- a/bsd-user/syscall_defs.h +++ b/bsd-user/syscall_defs.h @@ -155,6 +155,47 @@ struct target_freebsd_timeval { #endif }; =20 +/* compare to sys/timex.h */ +struct target_freebsd_ntptimeval { + struct target_freebsd_timespec time; + abi_long maxerror; + abi_long esterror; + abi_long tai; + int32_t time_state; +}; + +struct target_freebsd_itimerspec { + struct target_freebsd_timespec it_interval; + struct target_freebsd_timespec it_value; +}; + +struct target_freebsd_timex { + uint32_t modes; + abi_long offset; + abi_long freq; + abi_long maxerror; + abi_long esterror; + int32_t status; + abi_long constant; + abi_long precision; + abi_long tolerance; + + abi_long ppsfreq; + abi_long jitter; + int32_t shift; + abi_long stabil; + abi_long jitcnt; + abi_long calcnt; + abi_long errcnt; + abi_long stbcnt; +}; + +/* Maxiumum of 32 active POSIX timers allowed at any one time. */ +extern int g_posix_timers[32]; + +#define TIMER_MAGIC 0x0caf0000 +#define TIMER_MAGIC_MASK 0xffff0000 + /* * sys/event.h */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097729; cv=none; d=zohomail.com; s=zohoarc; b=GSjUCtXPfr2ngZiJmiZSnkevhNLphCn2ulepN83QTLQdlNu5aWul1rkXLwZrq+EnayGJd3HPzVNyGEQyiuTqV+s+FLRqOb2xJQJFLZScOFnF8HvwZ7q6ulNrWqeTmx96jQtiCBBwsiGBPc+EdeZ1S9K1v9tjWt2EBIrlBgk2OrA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097729; h=Content-Type: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=cZ9crdZ+AEICpSsPVx2FsxC4bka5gEoH/Sr0jOMkzMI=; b=HQBW1XUrvQbHpWaru6XEvszFwutHN4L9m4bwr1HLe8vS83yKe2jyhQKEdleb1X4pp6ZOt3Lh7MBkn9KIcR3GfAFG+Pfy2PTcK0fXJN+yrglFiYOu/C2C7RYvr3kQJEd0rJSytOfoPkGlnnCmJbp1qUiIhZigMcLF/zW7PSstlnU= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17870977297001015.1408485729934; Tue, 18 Aug 2026 17:02:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThM-0002hP-N4; Tue, 18 Aug 2026 19:58:28 -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 1wwThL-0002ge-OY for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:27 -0400 Received: from mail-oi1-x234.google.com ([2607:f8b0:4864:20::234]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwThJ-0005IL-GP for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:27 -0400 Received: by mail-oi1-x234.google.com with SMTP id 5614622812f47-4b1bf68b387so302006b6e.2 for ; Tue, 18 Aug 2026 16:58:25 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097504; x=1787702304; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=cZ9crdZ+AEICpSsPVx2FsxC4bka5gEoH/Sr0jOMkzMI=; b=ufsTP1A8YO3i4Wia5pu0OhRd8yww20NFN8z/Yqbcw/0sPxc/0ypS0Ojzzj8aWObo5B Ff5WKiMC2p2hoZL9hCmZU7meDZ70fBfLa5yVA2mzqREzYiBmI8Yw8b1kvpgoQGihPFfz wSzeuw2ltAiJ3sjWBP1tUUMjsCN9nP91j4KNZ2mEwNupz1FrnaDf3VOvednuZFvxH9cP ANVB7UvnytE4qLxWPVEDCg7fixbA9DgkWIEoPXD6LQQRREMVqUjvflW33KkJR/Mx+CLO 3BD8F6YF+1LRHi9IeAF8aeThCzQBQeF6qFjruALAJR0D+qc+zAuAnS9PpK0AI1aQ++bJ /E/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097504; x=1787702304; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=cZ9crdZ+AEICpSsPVx2FsxC4bka5gEoH/Sr0jOMkzMI=; b=Lbr2DGGPe4Pmx9+fUshureI9gaDN9aKKs5+onCHmbH6fSA1jT2exo+Ex5SO5UNLapb 5nkKnVymbt6BxyQPDSXOT/eKwGO5NsNocDlJK/kSFpSKCiESW+5+38gDDmDYi7+oyF2s j2CwV6UKYOfr9ssa3nJ/0PxYEM/tfpTdKhhAYhgm+m2us4XemwCCDi8OIOhSLn6TXYSX Ufy2UHUx3u0AJU/NdIM46fs2kIJdqAeM7KFQElGw6p5wXFMWxP6gIY6VTq/alBQdPPtK tkweeL2TJLBQFoKdxHc3G1zUCtfMhPdiiJy5AZN1J6y4zEFR44w8+5YQeFP01IXnBMKD hd+A== X-Gm-Message-State: AOJu0Yy6z2Gi67vrvOomWf6J/WlOi4WmKGThbkcUw0KPKqs3/bIASt2n +MxvUHGGFdzKts+ORANIgV+LLgQrgOOHEinTkvlV18Ng2SARrHhjj9RSBHaS+5Avus0= X-Gm-Gg: AR+sD13RZtAiBRBnYB5Hey+1mnMsy6L1RtKtsEiQxB+11U9wrD56XfMpb95EO86hgH9 CmmVu+WqtAmBBjohyDJ0d+W4I/wYa0R193XrqaYU+eqyWrt6ka/yDckJhBNfRkz0w/rJclbJ00a Kemhs1eXdqZkh+XLIG8BZzpxvIl36wOoHW0t3k6MtKDvWR2KYTbIg5v2SkPrwcT07aBod2uMWMK ca93TO9mcxBMj8ZEiiMFBVt9iVXVAePMGOKJxPN5RAYXQffMLU/ounFTaUXzIcMPx2kI8z3imKC yk18dd124EXGz8GWJFluOqryREIZ/FR66L/lKCHH9RRX9uJ3s71GNM/9WB6/TAD01BQhZUmKMSj DPzxzHQib9/PAWgblwrisgP/77sMqtrd5mnJv47u/G4YrUQvJhLpRkP+2F/PvDImL/CZtK8br2i DW0WeljUhWD+SjMREY37/j6x7v/s5/bz/3Q5T9K8rXfbpBDgQ= X-Received: by 2002:a05:6808:238b:b0:4a4:25b4:a0be with SMTP id 5614622812f47-4b2bc8b7476mr441569b6e.2.1787097504327; Tue, 18 Aug 2026 16:58:24 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:20 -0600 Subject: [PATCH v4 27/40] bsd-user: Add time system call dispatch MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-27-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Kyle Evans , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=15389; i=imp@bsdimp.com; h=from:subject:message-id; bh=i8z+PoUhC8KCwArCtJ72qorGl2SD1QvYid+LW2z7TYA=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFJP+NYlRIULrFu3xllG/bx5AxJGpxH23SiT aQ0TYqltxuJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxSRsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQAWtxAArXHVf4y9jp0D9dTfGbytbiyQXl9zjPj H4B+b/OmQWbgTACoxFVxvI4mypC6FWd73u5Da2mFCKGEaTLjinG8FSvXnyvbpdL6YYoQJK8b/86 +GO1tM2qpYfpI3ZMFV5zzEHycefsUy9lzTWltv0ucY1pW9SmcPkvPn1I9kPB8a/sit1lZVDKfGK LhP9AigYmX0vTvUgHE553/cZtdeCOM5coo+wsiWbBGHjBMYDQSVP1V+1zMtUxsilq5UiYR1GYNd UMMLUgY5k3UFssy7/tFkmNZKH/vsgiEShxgZkr3tEj35D6NC7C9FgN1iwrTAShSARl3+GSXJYUr dy1MaRa2UmmVFi4lchmEU8cmFfTqbaCU9Eo4lmILsbsEWbeb3xkp16k5rLBf9s8oB7Ky1f/k+J/ AeoiqtPYlDGtIDAYXtQdninN1qBLKRp62qmGeIrbeB7KBQMkg0vmAIsQdwC+T7m1i35NhqepJlq HfJx+fBmW5KUhOmZUvxE/CYYAuy9+6he1AfXgns1OEI9bekHaYQu6TgwBbQbGDGCRJ9HAdbLXqT oNkM9l3dDAbtG8Y81pdF/ED8JKEpdSah5qn3WqTH+Fb3hGWaokEIDIB/lK27t9JM70j2jP4VbOS 4BFxjVPRWimgJNvh6S45/5rkcVDOv3B/PdJEP18dRohVS68Bf+rg= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::234; envelope-from=imp@bsdimp.com; helo=mail-oi1-x234.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097730386158500 Wire up time-related system calls in the FreeBSD syscall dispatcher: nanosleep, clock_nanosleep, clock_gettime, clock_settime, clock_getres, gettimeofday, settimeofday, adjtime, ntp_adjtime, ntp_gettime, clock_getcpuclockid2, utimes, lutimes, futimes, futimesat, ktimer_create, ktimer_delete, ktimer_settime, ktimer_gettime, select, pselect, ppoll, kqueue, freebsd11_kevent, kevent, setitimer, getitimer, futimens, utimensat, and sigtimedwait. Signed-off-by: Stacey Son Signed-off-by: Kyle Evans Assisted-by: Claude Opus 4.6 (1M context) Reviewed-by: Pierrick Bouvier Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-syscall.c | 133 ++++++++++++++++++++++++++++++++++++++= ++++ bsd-user/freebsd/qemu-os.h | 18 ++++++ bsd-user/qemu.h | 41 +++++++++++++ bsd-user/syscall_defs.h | 121 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 313 insertions(+) diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c index 521660e8c8..cc66be3b7c 100644 --- a/bsd-user/freebsd/os-syscall.c +++ b/bsd-user/freebsd/os-syscall.c @@ -48,6 +48,7 @@ #include "os-signal.h" #include "os-file.h" #include "os-socket.h" +#include "os-time.h" #include "os-misc.h" =20 /* I/O */ @@ -89,6 +90,15 @@ safe_syscall6(ssize_t, sendto, int, fd, const void *, bu= f, size_t, len, int, safe_syscall3(ssize_t, recvmsg, int, s, struct msghdr *, msg, int, flags); safe_syscall3(ssize_t, sendmsg, int, s, const struct msghdr *, msg, int, f= lags); =20 +/* used in os-time */ +safe_syscall2(int, nanosleep, const struct timespec *, rqtp, struct timesp= ec *, + rmtp); +safe_syscall4(int, clock_nanosleep, clockid_t, clock_id, int, flags, + const struct timespec *, rqtp, struct timespec *, rmtp); +safe_syscall6(int, kevent, int, kq, const struct kevent *, changelist, + int, nchanges, struct kevent *, eventlist, int, nevents, + const struct timespec *, timeout); + int g_posix_timers[32] =3D { 0, } ; =20 /* used in os-proc */ @@ -1028,9 +1038,132 @@ static abi_long freebsd_syscall(CPUArchState *env, = int num, abi_long arg1, ret =3D do_bsd_getdtablesize(); break; =20 + /* + * time related system calls. + */ + case TARGET_FREEBSD_NR_nanosleep: /* nanosleep(2) */ + ret =3D do_freebsd_nanosleep(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_clock_nanosleep: /* clock_nanosleep(2) */ + ret =3D do_freebsd_clock_nanosleep(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_clock_gettime: /* clock_gettime(2) */ + ret =3D do_freebsd_clock_gettime(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_clock_settime: /* clock_settime(2) */ + ret =3D do_freebsd_clock_settime(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_clock_getres: /* clock_getres(2) */ + ret =3D do_freebsd_clock_getres(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_gettimeofday: /* gettimeofday(2) */ + ret =3D do_freebsd_gettimeofday(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_settimeofday: /* settimeofday(2) */ + ret =3D do_freebsd_settimeofday(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_adjtime: /* adjtime(2) */ + ret =3D do_freebsd_adjtime(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_ntp_adjtime: /* ntp_adjtime(2) */ + ret =3D do_freebsd_ntp_adjtime(arg1); + break; + + case TARGET_FREEBSD_NR_clock_getcpuclockid2: /* Not documented. */ + ret =3D do_freebsd_clock_getcpuclockid2(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_ntp_gettime: /* ntp_gettime(2) */ + ret =3D do_freebsd_ntp_gettime(arg1); + break; + + case TARGET_FREEBSD_NR_utimes: /* utimes(2) */ + ret =3D do_freebsd_utimes(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_lutimes: /* lutimes(2) */ + ret =3D do_freebsd_lutimes(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_futimes: /* futimes(2) */ + ret =3D do_freebsd_futimes(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_futimesat: /* futimesat(2) */ + ret =3D do_freebsd_futimesat(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_ktimer_create: /* timer_create(2) */ + ret =3D do_freebsd_ktimer_create(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_ktimer_delete: /* timer_delete(2) */ + ret =3D do_freebsd_ktimer_delete(arg1); + break; + + case TARGET_FREEBSD_NR_ktimer_settime: /* timer_settime(2) */ + ret =3D do_freebsd_ktimer_settime(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_ktimer_gettime: /* timer_gettime(2) */ + ret =3D do_freebsd_ktimer_gettime(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_select: /* select(2) */ + ret =3D do_freebsd_select(env, arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_pselect: /* pselect(2) */ + ret =3D do_freebsd_pselect(env, arg1, arg2, arg3, arg4, arg5, arg6= ); + break; + + case TARGET_FREEBSD_NR_ppoll: /* ppoll(2) */ + ret =3D do_freebsd_ppoll(env, arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_kqueue: /* kqueue(2) */ + ret =3D do_freebsd_kqueue(); + break; + + case TARGET_FREEBSD_NR_freebsd11_kevent: /* kevent(2) */ + ret =3D do_freebsd_freebsd11_kevent(arg1, arg2, arg3, arg4, arg5, = arg6); + break; + + case TARGET_FREEBSD_NR_kevent: /* kevent(2) */ + ret =3D do_freebsd_kevent(arg1, arg2, arg3, arg4, arg5, arg6); + break; + + case TARGET_FREEBSD_NR_setitimer: /* setitimer(2) */ + ret =3D do_freebsd_setitimer(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_getitimer: /* getitimer(2) */ + ret =3D do_freebsd_getitimer(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_futimens: /* futimens(2) */ + ret =3D do_freebsd_futimens(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_utimensat: /* utimensat(2) */ + ret =3D do_freebsd_utimensat(arg1, arg2, arg3, arg4); + break; + /* * signal system calls */ + case TARGET_FREEBSD_NR_sigtimedwait: /* sigtimedwait(2) */ + ret =3D do_freebsd_sigtimedwait(arg1, arg2, arg3); + break; + case TARGET_FREEBSD_NR_sigaction: /* sigaction(2) */ ret =3D do_bsd_sigaction(arg1, arg2, arg3); break; diff --git a/bsd-user/freebsd/qemu-os.h b/bsd-user/freebsd/qemu-os.h index ee18b23422..b1ff5c0cd5 100644 --- a/bsd-user/freebsd/qemu-os.h +++ b/bsd-user/freebsd/qemu-os.h @@ -62,6 +62,24 @@ abi_long host_to_target_itimerspec(abi_ulong target_addr, struct itimerspec *host_its); int get_timer_id(abi_long arg); =20 +/* os-socket.c */ +abi_long t2h_freebsd_cmsg(struct msghdr *msgh, + struct target_msghdr *target_msgh); +abi_long h2t_freebsd_cmsg(struct target_msghdr *target_msgh, + struct msghdr *msgh); + +/* os-thread.c */ +abi_long t2h_freebsd_rtprio(struct rtprio *host_rtp, abi_ulong target_addr= ); +abi_long h2t_freebsd_rtprio(abi_ulong target_addr, struct rtprio *host_rtp= ); +abi_long do_freebsd_thr_new(CPUArchState *env, abi_ulong target_param_addr, + int32_t param_size); + +/* os-extattr.c */ +struct acl; +abi_long t2h_freebsd_acl(struct acl *host_acl, abi_ulong target_addr); +abi_long h2t_freebsd_acl(abi_ulong target_addr, struct acl *host_acl); +abi_long t2h_freebsd_acl_type(acl_type_t *host_type, abi_long target_type); + /* os-stat.c */ abi_long h2t_freebsd11_stat(abi_ulong target_addr, struct freebsd11_stat *host_st); diff --git a/bsd-user/qemu.h b/bsd-user/qemu.h index 60d1adf560..069baa7011 100644 --- a/bsd-user/qemu.h +++ b/bsd-user/qemu.h @@ -249,6 +249,47 @@ abi_long do_freebsd_sysctlbyname(CPUArchState *env, ab= i_ulong namep, abi_ulong newlen); abi_long do_freebsd_sysarch(CPUArchState *env, abi_long arg1, abi_long arg= 2); =20 +/* os-thread.c */ +extern pthread_mutex_t *new_freebsd_thread_lock_ptr; +extern pthread_mutex_t *freebsd_umtx_wait_lck_ptr; +void *new_freebsd_thread_start(void *arg); +abi_long freebsd_lock_umtx(abi_ulong target_addr, abi_long tid, + size_t tsz, void *t); +abi_long freebsd_unlock_umtx(abi_ulong target_addr, abi_long id); +abi_long freebsd_umtx_wait(abi_ulong targ_addr, abi_ulong id, + size_t tsz, void *t); +abi_long freebsd_umtx_wake(abi_ulong target_addr, uint32_t n_wake); +abi_long freebsd_umtx_wake_unsafe(abi_ulong target_addr, uint32_t n_wake); +abi_long freebsd_umtx_mutex_wake(abi_ulong target_addr, abi_long val); +abi_long freebsd_umtx_wait_uint(abi_ulong obj, uint32_t val, size_t tsz, + void *t); +abi_long freebsd_umtx_wait_uint_private(abi_ulong obj, uint32_t val, + size_t tsz, void *t); +abi_long freebsd_umtx_wake_private(abi_ulong obj, uint32_t val); +abi_long freebsd_umtx_nwake_private(abi_ulong obj, uint32_t val); +abi_long freebsd_umtx_mutex_wake2(abi_ulong obj, uint32_t val); +abi_long freebsd_umtx_sem2_wait(abi_ulong obj, size_t tsz, void *t); +abi_long freebsd_umtx_sem2_wake(abi_ulong obj); +abi_long freebsd_umtx_sem_wait(abi_ulong obj, size_t tsz, void *t); +abi_long freebsd_umtx_sem_wake(abi_ulong obj); +abi_long freebsd_lock_umutex(abi_ulong target_addr, uint32_t id, + void *ts, size_t tsz, int mode, abi_ulong val); +abi_long freebsd_unlock_umutex(abi_ulong target_addr, uint32_t id); +abi_long freebsd_cv_wait(abi_ulong target_ucond_addr, + abi_ulong target_umtx_addr, struct timespec *ts, int wflags); +abi_long freebsd_cv_signal(abi_ulong target_ucond_addr); +abi_long freebsd_cv_broadcast(abi_ulong target_ucond_addr); +abi_long freebsd_rw_rdlock(abi_ulong target_addr, long fflag, + size_t tsz, void *t); +abi_long freebsd_rw_wrlock(abi_ulong target_addr, long fflag, + size_t tsz, void *t); +abi_long freebsd_rw_unlock(abi_ulong target_addr); +abi_long freebsd_umtx_shm(abi_ulong target_addr, long fflag); +abi_long freebsd_umtx_robust_list(abi_ulong target_addr, size_t rbsize); +abi_long freebsd_set_ceiling(abi_ulong target_addr, uint32_t ceiling, + uint32_t *old_ceiling); +CPUArchState *cpu_copy(CPUArchState *env); + /* user access */ =20 #define VERIFY_READ PAGE_READ diff --git a/bsd-user/syscall_defs.h b/bsd-user/syscall_defs.h index 75f2d6fa36..9fa16e0863 100644 --- a/bsd-user/syscall_defs.h +++ b/bsd-user/syscall_defs.h @@ -639,6 +639,127 @@ struct target_specialfd_eventfd { int flags; }; =20 +/* + * FreeBSD thread and user mutex support. + */ + +/* sys/thr.h */ +#define TARGET_THR_SUSPENDED 0x0001 +#define TARGET_THR_SYSTEM_SCOPE 0x0002 + +struct target_freebsd_thr_param { + abi_ulong start_func; /* thread entry function. */ + abi_ulong arg; /* argument for entry function. */ + abi_ulong stack_base; /* stack base address. */ + abi_ulong stack_size; /* stack size. */ + abi_ulong tls_base; /* tls base address. */ + abi_ulong tls_size; /* tls size. */ + abi_ulong child_tid; /* address to store new TID. */ + abi_ulong parent_tid; /* parent access the new TID here. */ + int32_t flags; /* thread flags. */ + abi_ulong rtp; /* Real-time scheduling priority. */ + abi_ulong spare[3]; /* spares. */ +}; + +/* sys/rtprio.h */ +struct target_freebsd_rtprio { + uint16_t type; + uint16_t prio; +}; + +typedef struct { + CPUArchState *env; + long parent_tid; + pthread_mutex_t mutex; + pthread_cond_t cond; + pthread_t thread; + sigset_t sigmask; + struct target_freebsd_thr_param param; +} new_freebsd_thread_info_t; + +/* sys/utmx.h */ +/* op code for _umtx_op */ +#define TARGET_UMTX_OP_LOCK 0 +#define TARGET_UMTX_OP_UNLOCK 1 +#define TARGET_UMTX_OP_WAIT 2 +#define TARGET_UMTX_OP_WAKE 3 +#define TARGET_UMTX_OP_MUTEX_TRYLOCK 4 +#define TARGET_UMTX_OP_MUTEX_LOCK 5 +#define TARGET_UMTX_OP_MUTEX_UNLOCK 6 +#define TARGET_UMTX_OP_SET_CEILING 7 +#define TARGET_UMTX_OP_CV_WAIT 8 +#define TARGET_UMTX_OP_CV_SIGNAL 9 +#define TARGET_UMTX_OP_CV_BROADCAST 10 +#define TARGET_UMTX_OP_WAIT_UINT 11 +#define TARGET_UMTX_OP_RW_RDLOCK 12 +#define TARGET_UMTX_OP_RW_WRLOCK 13 +#define TARGET_UMTX_OP_RW_UNLOCK 14 +#define TARGET_UMTX_OP_WAIT_UINT_PRIVATE 15 +#define TARGET_UMTX_OP_WAKE_PRIVATE 16 +#define TARGET_UMTX_OP_MUTEX_WAIT 17 +#define TARGET_UMTX_OP_MUTEX_WAKE 18 +#define TARGET_UMTX_OP_SEM_WAIT 19 +#define TARGET_UMTX_OP_SEM_WAKE 20 +#define TARGET_UMTX_OP_NWAKE_PRIVATE 21 +#define TARGET_UMTX_OP_MUTEX_WAKE2 22 +#define TARGET_UMTX_OP_SEM2_WAIT 23 +#define TARGET_UMTX_OP_SEM2_WAKE 24 +#define TARGET_UMTX_OP_SHM 25 +#define TARGET_UMTX_OP_ROBUST_LISTS 26 + +/* flags for UMTX_OP_CV_WAIT */ +#define TARGET_CVWAIT_CHECK_UNPARKING 0x01 +#define TARGET_CVWAIT_ABSTIME 0x02 +#define TARGET_CVWAIT_CLOCKID 0x04 + +#define TARGET_UMTX_UNOWNED 0x0 +#define TARGET_UMUTEX_UNOWNED 0x0 +#define TARGET_UMTX_CONTESTED (abi_ulong)(-1) +#define TARGET_UMUTEX_CONTESTED 0x80000000U + +/* flags for umutex */ +#define TARGET_UMUTEX_ERROR_CHECK 0x0002 /* Error-checking mutex */ +#define TARGET_UMUTEX_PRIO_INHERIT 0x0004 /* Priority inherited mutex */ +#define TARGET_UMUTEX_PRIO_PROTECT 0x0008 /* Priority protect mutex */ + +#define TARGET_UMUTEX_TRY 1 +#define TARGET_UMUTEX_WAIT 2 + +/* urwlock flags */ +#define TARGET_URWLOCK_PREFER_READER 0x0002 +#define TARGET_URWLOCK_WRITE_OWNER 0x80000000U +#define TARGET_URWLOCK_WRITE_WAITERS 0x40000000U +#define TARGET_URWLOCK_READ_WAITERS 0x20000000U +#define TARGET_URWLOCK_MAX_READERS 0x1fffffffU +#define TARGET_URWLOCK_READER_COUNT(c) ((c) & TARGET_URWLOCK_MAX_READERS) + +/* + * sys/acl.h + */ +#define TARGET_FREEBSD_ACL_MAX_ENTRIES 254 + +/* vaild acl_type_t arguments */ +#define TARGET_FREEBSD_ACL_TYPE_ACCESS_OLD 0x00000000 +#define TARGET_FREEBSD_ACL_TYPE_DEFAULT_OLD 0x00000001 +#define TARGET_FREEBSD_ACL_TYPE_ACCESS 0x00000002 +#define TARGET_FREEBSD_ACL_TYPE_DEFAULT 0x00000003 +#define TARGET_FREEBSD_ACL_TYPE_NFS4 0x00000004 + +struct target_freebsd_acl_entry { + uint32_t ae_tag; + uint32_t ae_id; + uint32_t ae_perm; + uint16_t ae_entry_type; + uint16_t ae_flags; +}; + +struct target_freebsd_acl { + uint32_t acl_maxcnt; + uint32_t acl_cnt; + int32_t acl_spare[4]; + struct target_freebsd_acl_entry acl_entry[TARGET_FREEBSD_ACL_MAX_ENTR= IES]; +}; + /* * sys/uuid.h */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097752; cv=none; d=zohomail.com; s=zohoarc; b=Z0bFaBpuaBHOwAmksNzxIYi4zEBanmI0KfPgsC0CJ33TPHeCfE3gmR8CB7QGI/NnJsgzn3yP9yi+AMtP4ufnJtOUd/OL0ueGVjkoYHm3rpDQ5oZ+Zb6Fs/90vfLf5bsVWIoB0XqwfP/XyB90bL1lrupykHF91kBXgIX2K+f6n9Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097752; h=Content-Type: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=G3SskvS39Q4usUFP0DLZu/MoIFQuAMk/c5gpx9M89oI=; b=bpQZJhoIGOcP+uMsG6XAm1KEQoVix5m2ernVlAbXzHhaJ5X/ptRX81YS5VRvzrl2X650rZQ0gSDqptQPfoLGZBU/z957OssdddGa+2KtgOXtvR9U5S9m3pl+I8XWnhu8PA/4YJKw6QVkeZ4Vszng/vbb3WjioRBaZwHdFdZ0rqs= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097752444429.6124536363494; Tue, 18 Aug 2026 17:02:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThP-0002yN-9H; Tue, 18 Aug 2026 19:58:31 -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 1wwThN-0002o4-NU for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:29 -0400 Received: from mail-oa1-x2a.google.com ([2001:4860:4864:20::2a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwThL-0005Ic-Vj for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:29 -0400 Received: by mail-oa1-x2a.google.com with SMTP id 586e51a60fabf-459281bc13bso333349fac.2 for ; Tue, 18 Aug 2026 16:58:27 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097507; x=1787702307; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=G3SskvS39Q4usUFP0DLZu/MoIFQuAMk/c5gpx9M89oI=; b=nnfIlo2su0rh6OaquWdLDFtYWEup4uE3iYs7VzYcy1zTWAt5IJ1PYwmUjS2ApJGXN7 /YPHemlj0rSMp1XMla3UlAxJsLoVmAsSw7VifByjZrgo6/JEzOG8fyYZiv5z1CjUyOhi pelkr369Ku7GPBHU7S2jYqmTrNpFTGAICmVtFhNmljaGpqF0Z+6OGxxnADoKF7EVjWue XCWlG/XZhaawSjLStirnVTDH49mkdtjKdJowNQgRhBHoqxz03jxHWfrZnEW0Hv+5FP+n GyRxVat888cvwES6G192eaaTYV3ky+Lku4qfggGCODydrXB60uRX0G1mHqo4M/OaIbg0 6pyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097507; x=1787702307; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=G3SskvS39Q4usUFP0DLZu/MoIFQuAMk/c5gpx9M89oI=; b=d2XKzsuO8V3tHVfEmFrwNEyou65cSmzzwKZhV9XJVrv4zs/nE2OEjCUin2Q+7hfBg5 P0EdsvUAl7xxqq1w0mEykizeHD4O/Wc23ivylDFY+IFYuz55A6sZTVn4+rN+hTJidhw8 JX7w2slHsdZr7HKQA2pJy/8gZXzvXVJM78znogu//kh8prbPe7z+jpsxEmHMx+Oh42ak JHjZp6kz2He0u8PdRa96C8Bkr9omLZvdYt1Tv6IetpirXPSYylemby8x4FMMvtCFwwVU X+POPfHGJPXmhgy/IsIMkCP5ANBmPil23cXZQ4XLe/FCsbi2wBHb2Ex8K0HvYPFmfLoJ vbXA== X-Gm-Message-State: AOJu0YxnfCBw372QcBGmgzbDqHvuNrQKIV3AathQDKHh/ApoAArzqzLX noBkDjz6PWbjsNd1AO6MpCzn6WoC6nuU25J8UbL5m6X2iG8mbiDjO3qRzFoBY7y1vYU= X-Gm-Gg: AR+sD116HkvNqhoyfID7fQ7jBfmH9fXubK7qcs72uJHnBvVgjJjaCh0l4y443GW5pci Fl86zhUe0sH0C2E3G7pcIQLF7hk2KpKyFT4nFFRFUwrcfsluDHElmODroE7mlXFSWDJvXlpaqhx mOI2e/KABgOjF6cKYEAGULxHLZfFli445FL5C8IuJ1EfmdLdm2rDdzO5zhDezbYk0lyzmZExc5P X0KxwXSLTaanFmnlhWdfhmJwSu4hkO6eZyY+/7idbcJnJWjg4FfNr3YHPYUjZiItQnLbcP2QWrH lC8pHIWW8JXVKeg7+QK/DBz3jEtpDDTfH0wE+EoR4KR2tjzTLJ4qtnrvOp/7PZODT8c0mVEWl2g gz2xd/XF3yBiQnn7qVuc4a2oeGDWHeJsHACpL0m3gRoC2aMtBmBBWTCuS7l4/7nJIIPYXmKwjbh kpDIv/0QJEIRtV63j0s9mcUxUwmF18xTqOiVp8g6HPtun4VF1v X-Received: by 2002:a05:6808:198d:b0:4b2:8e2a:295 with SMTP id 5614622812f47-4b2bc46de25mr463983b6e.0.1787097506753; Tue, 18 Aug 2026 16:58:26 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:21 -0600 Subject: [PATCH v4 28/40] bsd-user: Add cpu_copy and make init_task_state non-static MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-28-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2935; i=imp@bsdimp.com; h=from:subject:message-id; bh=C3PdATJBpYfnoQRiXA8L9JVToAfUaoFluIF7aJeCNe8=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFLjLIsvwSWcWoe+DCNgZ2WEFyOkgkt6B1Sv UHApY8+ykqJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxSxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQBAlBAAvr/+j+cwkZBsH/Df4voiZTybgSst4HS m6H0zDcz3sMKzCFcSL585OqyB89ukE69hRiLP6NNzgnxu71jmuc6GziWWpc3So+0JMd53Lfa3X0 24/OZahTNu6UBeUSAp7Tx1Ow0UPPJsxfafYZANTbXc/rz/hRiU1PF+xqyOKXUDYIB57UocVmw7g SXjLFi/7+bYBvPGR6OOZoWE6EcjpT58123s51YZDk7YmKDKEHBD/oWHHS1wB2GSXBSIkL1AK7Ug GEVd0Z/KWTKeN0CSF9CR9GB8soMnHLHbzL4HPFSlZspNruRhtRzRCMuzk+RJEohlWxWf1jJLtKF f1YsAnZ9NVCrEymI8fJ6nwuiRqC/i0D9zgzJVsQ60zFSwneXCS+mjT4sUq5UhN/blhqWys84e4n lwdUSfCDiUJwpviLrpzG4PDhjboEnE6sFc68spBTvWwYFwwAv7ey1a/t+tM9tdra3SuERTkSD8h zAA9bXHxf0Aq26l4oQyKMR/budoAUQwFcL3jnf/A3wfC3ej6kT1n+5yzRh40tlOw3gYYj0Wxjnj qmFjNmEAe4cSiGTFR9oAVhiqgudZagX5zLSMq11VQGU/noSpcsKWQQZj6nB7E7+JYIXiE6TMvAc cn5ice+svdgUwONXUo7k5m/nItwYmjCDOeP8W30EeT7Tu7ulEm3U= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2001:4860:4864:20::2a; envelope-from=imp@bsdimp.com; helo=mail-oa1-x2a.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097754395158500 Add cpu_copy() function for thread creation support and make init_task_state() non-static so it can be called from os-thread.c. Move cpu_type to file scope so cpu_copy() can access it. Signed-off-by: Stacey Son Assisted-by: Claude Opus 4.6 (1M context) Reviewed-by: Pierrick Bouvier Reviewed-by: Richard Henderson Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/main.c | 32 ++++++++++++++++++++++++++++++-- bsd-user/qemu.h | 1 + 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/bsd-user/main.c b/bsd-user/main.c index 694481ae3e..2fbbfc3d86 100644 --- a/bsd-user/main.c +++ b/bsd-user/main.c @@ -50,6 +50,7 @@ #include "qemu/guest-random.h" #include "gdbstub/user.h" #include "exec/page-vary.h" +#include "exec/watchpoint.h" =20 #include "host-os.h" #include "target_arch_cpu.h" @@ -215,7 +216,7 @@ bool qemu_cpu_is_self(CPUState *cpu) } =20 /* Assumes contents are already zeroed. */ -static void init_task_state(TaskState *ts) +void init_task_state(TaskState *ts) { ts->sigaltstack_used =3D (struct target_sigaltstack) { .ss_sp =3D 0, @@ -224,6 +225,34 @@ static void init_task_state(TaskState *ts) }; } =20 +static const char *cpu_type; + +CPUArchState *cpu_copy(CPUArchState *env) +{ + CPUState *cpu =3D env_cpu(env); + CPUState *new_cpu =3D cpu_create(cpu_type); + CPUArchState *new_env =3D cpu_env(new_cpu); + CPUBreakpoint *bp; + + /* Reset non arch specific state */ + cpu_reset(new_cpu); + + new_cpu->tcg_cflags =3D cpu->tcg_cflags; + memcpy(new_env, env, sizeof(CPUArchState)); + + /* + * Clone all break/watchpoints. + * Note: Once we support ptrace with hw-debug register access, make su= re + * BP_CPU break/watchpoints are handled correctly on clone. + */ + QTAILQ_INIT(&new_cpu->breakpoints); + QTAILQ_FOREACH(bp, &cpu->breakpoints, entry) { + cpu_breakpoint_insert(new_cpu, bp->pc, bp->flags, NULL); + } + + return new_env; +} + static QemuPluginList plugins =3D QTAILQ_HEAD_INITIALIZER(plugins); =20 void gemu_log(const char *fmt, ...) @@ -256,7 +285,6 @@ int main(int argc, char **argv) { const char *filename; const char *cpu_model; - const char *cpu_type; const char *log_file =3D NULL; const char *log_mask =3D NULL; const char *seed_optarg =3D NULL; diff --git a/bsd-user/qemu.h b/bsd-user/qemu.h index 069baa7011..d2dd8c2ee8 100644 --- a/bsd-user/qemu.h +++ b/bsd-user/qemu.h @@ -122,6 +122,7 @@ struct TaskState { struct target_sigaltstack sigaltstack_used; } __attribute__((aligned(16))); =20 +void init_task_state(TaskState *ts); void stop_all_tasks(void); extern const char *interp_prefix; extern const char *qemu_uname_release; --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097694; cv=none; d=zohomail.com; s=zohoarc; b=T2Ee9+AHeCHJpIOO3HsbWXh6IbpLZCwSPgadPz+RE99eXnb9uIWEC8RhfQKmZ3CnmNQ8Evba74xcAvmjqVISCVpLUpkzDbh0ScyhP0lsXQa0dR6oJYL+pdw1OHKyhiyLnaUzHJnxgEe0v8vV7BEpjVWmIc/9vMDrF0n/MZ2C3rU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097694; h=Content-Type: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=walM9amJpXt04r73SicP+udgdtfWMlL5B9KhxqbK5fo=; b=GLmddsGNFqVcCORD8XKY8jHnp7frT7uN8xlOMcN3NKYPATUZGYhjNAyji/X+hrlIL4ka+Zc3QcVLlekmeCm1bRbUZto5aDBLyEM9MwjfOsikvCh3d8t0HYQe9r+xw2tYPLSltR1WrbIx57u+nJ+TWubSZ3gIOzXUm5Rwf0c4Qto= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097693943143.52496582008973; Tue, 18 Aug 2026 17:01:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThS-0003UY-FX; Tue, 18 Aug 2026 19:58:34 -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 1wwThQ-0003A8-HV for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:32 -0400 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwThO-0005Iq-7S for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:32 -0400 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-462df62f872so612795fac.0 for ; Tue, 18 Aug 2026 16:58:29 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097509; x=1787702309; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=walM9amJpXt04r73SicP+udgdtfWMlL5B9KhxqbK5fo=; b=k1GZRduQhGtYNcZiedNkdZC2BLFNynoSZnsmQUqjNl5xdIUY9lYnAufKbIYqefEFKs A3J32YMZ6ckujRg8xyKRLW2v7BXm53FPuuTHWBbUNWTqd0l6YX+5o7i0httG0ieWxEvI jKg5K+mrnsEYIYEuu3Fvnpt2w6t9BfRGrbQ7/v3Qj06JMgDOOCAJWL4Bum7lRab3uYA0 OrqiltsuzbAOLz0CuKAuTrzIirYgCAn+HZZMb4pJYuqdkS1e+aQ2ps8tuWp50xACUKOW NxXhbMRWOrSbCzOWzxXFLnYsKqWT8DPm8JSV0kJCGEzBfzgnMoJYwUhqTAZEUT4YfQGn dCuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097509; x=1787702309; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=walM9amJpXt04r73SicP+udgdtfWMlL5B9KhxqbK5fo=; b=Wkw0apdRPkCVziCvSgaRZC1UoTNj08vb9cvNF+xCtjbmqSkiSh26dFueGh7TiCWSb7 vixblsiSl+xTkW0Xg+IcHvjE1AELBVaJMB0kuU0Wry4cp0RewQPhLsEwxTASaqqGgiFK raC4kpfuv5RxXRdrbYLpiOBeJGpgFkATLjontk27/JvsZhwdb7bfguaYX29vnTw9SbFG eYAf0b0g8LQq+IK9Qsk0Xj8p4YTMye87MEeeyMR1U8SgEMnfr+82x+A8ePnbEmZ/j5X2 9SMEzgfvkg3til7sEXjUXMmZnn7tpihZ6fZtbNNK9c9wkX+IIXQgXJntpXHFn3Y3lpOy QnUw== X-Gm-Message-State: AOJu0YzeNEh+6XgBt/GrhbavWqdbp8+WzIHQ2il9n70OA11C7InP0MZD YRHmwtgmnGN800vmMPhJ6PWO+jlUzVG7xT9lnJknfYh/jbSsMBu5OfwS6db8JribGiE= X-Gm-Gg: AR+sD10vYJ9bs8CYZLM0fKYn7Va0cEahzbZ9BkJkT5P7gdBp2B+fB/yy6vcYgTESW8z RioMlKF1xsZ0sd0O6fulexLm+3MvmO+M0goSY+8mSjYQ4caC38yOKCcUN6wnpWY+9txDf3MFbi3 pR4eZ7TN9KpNAKBCG4yn/4rTNswEtF/9x4LS2xLdgNYOxPMxrrfWyOPUrGUVAn+j8JyhskNsjGl zfDs1VaXKNttPSz9V2AAeqO0ms/olkMqnZ/F7d85jfWF/jt5uZIjLTabhFE7SGR1ry/3V74oFLU rfUWGHZL+I6E4y1ANAE3j2k/1+7BRg+jXj7TiKlezFPYQLhGFulB0IGTQPe9XSYf7OioWQfaYez 8DlZmx9+9m35JtaiSotQJ0POeaP5ZbK6RgVaETZSgdsKti8U71YFcGbkNb1fXd6ToD5c97C5REw QHOjf7vl6gj4tCD7VVQGqmF1Wb7mhJBBRQdgqtiFexdQoA7EU= X-Received: by 2002:a05:6808:c2c5:b0:4b2:8d7b:41ac with SMTP id 5614622812f47-4b2ba83cd37mr942497b6e.6.1787097508897; Tue, 18 Aug 2026 16:58:28 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:22 -0600 Subject: [PATCH v4 29/40] bsd-user: Add os-thread.h with thr and context functions MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-29-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Kyle Evans , Jessica Clarke , Michal Meloun , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=8588; i=imp@bsdimp.com; h=from:subject:message-id; bh=A879ZcsiYseaZwooAsMMnN7S3pUGLlKywqzWm9EbWMw=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFNaSyLIV+MoXT6F8pjicS4ODPRPftW2bRBI 3hAT/fN5n2JAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxTRsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQD61g/+P4G6uThZX7ObMr2K6k+gqXsEMx9raVW bnc8221b71X9jc6QMYe54fqPkUOJ0tJ8+2aq/U/uPtwoocstQP88yI8cIV0dMbrU4nDDzGbVQrF C/doSQFDfF/PzmKh6MV+JVY7IJowewJHzph4rLrjsLuhgdauNxHpHenSrXqy2Lt1PxgIzj/5Afy Nu2HnggBZqgxrKgvI6OFlhgjyAu+8nuPFpB4CD+Smhpi1/kx4ht9OyJjOYewY5w3eEUYEtzIm5j qmPwdxG/38cHMV1+YDfeqRMVye9br9UjbqELdoTlujfkRFjmHlGoqyq0nD+WmP1H4/WV3No4Gry beiwt4PBVgPtJx5y3xNZFCQcz8exOWW1+fLLKZfzHJrgO20oqpP4QgVCdkh48jAP+ahzzvw8rub gdAPHiZ+w1WU7ChNReguFtHh58AYDya43XBj4igWGmP2utApkZcCCRSCRipPDL9LVaYibzJg0IG 03X9LtqZhj1LPpi/Dh54BndIjWCN4+ExwRXUQOkZTR4jYNItjxuCrMz+FyixAKawSSOiZL4Oh/b rjDkmT5JmIN/TnN+BgiTTr0W9OYq8K955Ne5b2iLaFwPqPvartvs1aT8wHTR+e6/OcPeE1P5j1c rkNdEDAuvX4+VnG8GbIxxY/V7WFbxRTDM3gOFmVXZsIjqyPcu6NU= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2001:4860:4864:20::2b; envelope-from=imp@bsdimp.com; helo=mail-oa1-x2b.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097696274158500 Add thread management system call shims: thr_self, thr_exit, thr_kill, thr_kill2, thr_suspend, thr_wake, thr_set_name, rtprio_thread, getcontext, setcontext, and swapcontext. Signed-off-by: Stacey Son Signed-off-by: Kyle Evans Signed-off-by: Jessica Clarke Signed-off-by: Michal Meloun Assisted-by: Claude Opus 4.6 (1M context) Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-syscall.c | 6 ++ bsd-user/freebsd/os-thread.h | 244 ++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 250 insertions(+) diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c index cc66be3b7c..f2c3ff25e8 100644 --- a/bsd-user/freebsd/os-syscall.c +++ b/bsd-user/freebsd/os-syscall.c @@ -49,6 +49,7 @@ #include "os-file.h" #include "os-socket.h" #include "os-time.h" +#include "os-thread.h" #include "os-misc.h" =20 /* I/O */ @@ -90,6 +91,11 @@ safe_syscall6(ssize_t, sendto, int, fd, const void *, bu= f, size_t, len, int, safe_syscall3(ssize_t, recvmsg, int, s, struct msghdr *, msg, int, flags); safe_syscall3(ssize_t, sendmsg, int, s, const struct msghdr *, msg, int, f= lags); =20 +/* used in os-thread */ +safe_syscall1(int, thr_suspend, struct timespec *, timeout); +safe_syscall5(int, _umtx_op, void *, obj, int, op, unsigned long, val, voi= d *, + uaddr, void *, uaddr2); + /* used in os-time */ safe_syscall2(int, nanosleep, const struct timespec *, rqtp, struct timesp= ec *, rmtp); diff --git a/bsd-user/freebsd/os-thread.h b/bsd-user/freebsd/os-thread.h new file mode 100644 index 0000000000..d3f1f01b13 --- /dev/null +++ b/bsd-user/freebsd/os-thread.h @@ -0,0 +1,244 @@ +/* + * FreeBSD thread and user mutex related system call shims + * + * Copyright (c) 2013-2015 Stacey D. Son + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#ifndef FREEBSD_OS_THREAD_H +#define FREEBSD_OS_THREAD_H + +#include +#include +#include + +#include "qemu.h" +#include "qemu-os.h" + +int safe_thr_suspend(struct timespec *timeout); +int safe__umtx_op(void *, int, unsigned long, void *, void *); + +#if defined(HOST_BIG_ENDIAN) =3D=3D defined(TARGET_BIG_ENDIAN) && \ + (TARGET_ABI_BITS =3D=3D HOST_LONG_BITS || defined(UMTX_OP__32BIT)) +#define _UMTX_OPTIMIZED +#if defined(TARGET_ABI32) +#define QEMU_UMTX_OP(n) (UMTX_OP__32BIT | (n)) +#else +#define QEMU_UMTX_OP(n) (n) +#endif /* TARGET_ABI32 */ +#else +#define QEMU_UMTX_OP(n) (n) +#endif + +static inline abi_long do_freebsd_thr_self(abi_ulong target_id) +{ + abi_long ret; + long tid; + + ret =3D get_errno(thr_self(&tid)); + if (!is_error(ret)) { + if (put_user_sal(tid, target_id)) { + return -TARGET_EFAULT; + } + } + return ret; +} + +static inline abi_long do_freebsd_thr_exit(CPUArchState *env, + abi_ulong tid_addr) +{ + CPUState *cpu =3D env_cpu(env); + TaskState *ts; + + if (block_signals()) { + return -TARGET_ERESTART; + } + + pthread_mutex_lock(new_freebsd_thread_lock_ptr); + + ts =3D cpu->opaque; + + if (tid_addr) { + /* Signal target userland that it can free the stack. */ + if (!put_user_sal(1, tid_addr)) { + freebsd_umtx_wake_unsafe(tid_addr, INT_MAX); + } + } + + object_unparent(OBJECT(env_cpu(env))); + object_unref(OBJECT(env_cpu(env))); + /* + * At this point the CPU should be unrealized and removed + * from cpu lists. We can clean-up the rest of the thread + * data without the lock held. + */ + + pthread_mutex_unlock(new_freebsd_thread_lock_ptr); + + thread_cpu =3D NULL; + g_free(ts); + rcu_unregister_thread(); + pthread_exit(NULL); + /* Doesn't return */ + return 0; +} + +static inline abi_long do_freebsd_thr_kill(long id, int sig) +{ + + return get_errno(thr_kill(id, target_to_host_signal(sig))); +} + +static inline abi_long do_freebsd_thr_kill2(pid_t pid, long id, int sig) +{ + + return get_errno(thr_kill2(pid, id, target_to_host_signal(sig))); +} + +static inline abi_long do_freebsd_thr_suspend(abi_ulong target_ts) +{ + abi_long ret; + struct timespec ts; + + if (target_ts !=3D 0) { + if (t2h_freebsd_timespec(&ts, target_ts)) { + return -TARGET_EFAULT; + } + ret =3D get_errno(safe_thr_suspend(&ts)); + } else { + ret =3D get_errno(safe_thr_suspend(NULL)); + } + return ret; +} + +static inline abi_long do_freebsd_thr_wake(long tid) +{ + + return get_errno(thr_wake(tid)); +} + +static inline abi_long do_freebsd_thr_set_name(long tid, abi_ulong target_= name) +{ + abi_long ret; + void *p; + + p =3D lock_user_string(target_name); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D get_errno(thr_set_name(tid, p)); + unlock_user(p, target_name, 0); + + return ret; +} + +static inline abi_long do_freebsd_rtprio_thread(int function, lwpid_t lwpi= d, + abi_ulong target_addr) +{ + int ret; + struct rtprio rtp; + + ret =3D t2h_freebsd_rtprio(&rtp, target_addr); + if (!is_error(ret)) { + ret =3D get_errno(rtprio_thread(function, lwpid, &rtp)); + } + if (!is_error(ret)) { + ret =3D h2t_freebsd_rtprio(target_addr, &rtp); + } + return ret; +} + +static inline abi_long do_freebsd_getcontext(CPUArchState *env, abi_ulong = arg1) +{ + abi_long ret; + target_ucontext_t *ucp; + sigset_t sigmask; + + if (arg1 =3D=3D 0) { + return -TARGET_EINVAL; + } + ret =3D do_sigprocmask(0, NULL, &sigmask); + if (!is_error(ret)) { + ucp =3D lock_user(VERIFY_WRITE, arg1, sizeof(target_ucontext_t), 0= ); + if (ucp =3D=3D 0) { + return -TARGET_EFAULT; + } + ret =3D get_mcontext(env, &ucp->uc_mcontext, TARGET_MC_GET_CLEAR_R= ET); + host_to_target_sigset(&ucp->uc_sigmask, &sigmask); + memset(ucp->__spare__, 0, sizeof(ucp->__spare__)); + unlock_user(ucp, arg1, sizeof(target_ucontext_t)); + } + return ret; +} + +static inline abi_long do_freebsd_setcontext(CPUArchState *env, abi_ulong = arg1) +{ + abi_long ret; + target_ucontext_t *ucp; + sigset_t sigmask; + if (arg1 =3D=3D 0) { + return -TARGET_EINVAL; + } + ucp =3D lock_user(VERIFY_READ, arg1, sizeof(target_ucontext_t), 1); + if (ucp =3D=3D 0) { + return -TARGET_EFAULT; + } + ret =3D set_mcontext(env, &ucp->uc_mcontext, 0); + target_to_host_sigset(&sigmask, &ucp->uc_sigmask); + unlock_user(ucp, arg1, 0); + if (!is_error(ret)) { + (void)do_sigprocmask(SIG_SETMASK, &sigmask, NULL); + } + return ret =3D=3D 0 ? -TARGET_EJUSTRETURN : ret; +} + +/* swapcontext(2) */ +static inline abi_long do_freebsd_swapcontext(CPUArchState *env, abi_ulong= arg1, + abi_ulong arg2) +{ + abi_long ret; + target_ucontext_t *ucp; + sigset_t sigmask; + + if (arg1 =3D=3D 0 || arg2 =3D=3D 0) { + return -TARGET_EINVAL; + } + /* Save current context in arg1. */ + ret =3D do_sigprocmask(0, NULL, &sigmask); + if (!is_error(ret)) { + ucp =3D lock_user(VERIFY_WRITE, arg1, sizeof(target_ucontext_t), 0= ); + if (ucp =3D=3D 0) { + return -TARGET_EFAULT; + } + ret =3D get_mcontext(env, &ucp->uc_mcontext, TARGET_MC_GET_CLEAR_R= ET); + host_to_target_sigset(&ucp->uc_sigmask, &sigmask); + memset(ucp->__spare__, 0, sizeof(ucp->__spare__)); + unlock_user(ucp, arg1, sizeof(target_ucontext_t)); + } + if (is_error(ret)) { + return ret; + } + + /* Restore the context in arg2 to the current context. */ + ucp =3D lock_user(VERIFY_READ, arg2, sizeof(target_ucontext_t), 1); + if (ucp =3D=3D 0) { + return -TARGET_EFAULT; + } + ret =3D set_mcontext(env, &ucp->uc_mcontext, 0); + target_to_host_sigset(&sigmask, &ucp->uc_sigmask); + unlock_user(ucp, arg2, 0); + if (!is_error(ret)) { + (void)do_sigprocmask(SIG_SETMASK, &sigmask, NULL); + } + return ret =3D=3D 0 ? -TARGET_EJUSTRETURN : ret; +} + + +#define safe_g2h_untagged(x) ((x) !=3D 0 ? g2h_untagged(x) : NULL) + +/* + * undocumented _umtx_op(void *obj, int op, u_long val, void *uaddr, + * void *target_time); + */ + +#endif /* FREEBSD_OS_THREAD_H */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097665; cv=none; d=zohomail.com; s=zohoarc; b=GxcY4ZDpXeob7DaWzm8JGRHUafc4TJEXFM7qTcKicGnZEFTtCsVVdjjlFrs+TFkKYJxIMKR1ASwth8tIEEaBac7rbYYsnFMeSCqL+h1FXngP0Ev00hN01M9ZQcE4h+DV6VidZv8xNyO/wUihmi67/ZAo5ok6E11g6+fTCr2R+nI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097665; h=Content-Type: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=OavF8C5L8hF0ztGXJpBaBam5rZBitSHKmhVYc7OLXmM=; b=kV8sK74p9X4cSWrPgDPfu/HBati5GCKCSoTycVqGQ3Ng8MQy8kQhGmYAVMMmjPm6MWJb4nLjN36kf7JyyjfyPro95kkeLv+yOsT1schye2CE6JPaZE8iCzCsZv+ear1okhD1WrW63JA4IX8WNl/KCNpG9N+jod/toUaJx0iBYjQ= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097665550163.68601868567896; Tue, 18 Aug 2026 17:01:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThX-0004EA-U1; Tue, 18 Aug 2026 19:58:39 -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 1wwThV-0003uC-WE for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:38 -0400 Received: from mail-oi1-x234.google.com ([2607:f8b0:4864:20::234]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwThQ-0005J0-Eg for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:37 -0400 Received: by mail-oi1-x234.google.com with SMTP id 5614622812f47-49ff971e903so945585b6e.0 for ; Tue, 18 Aug 2026 16:58:32 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097511; x=1787702311; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=OavF8C5L8hF0ztGXJpBaBam5rZBitSHKmhVYc7OLXmM=; b=VeqjKsNUOP0A4XY/qkcGT+8mrjsi3f9lCvinJ0z+1C3en63Q47EIuPyt0Y282F00GS QghXqsiEdIXVA81kaiSnjI+FecfVcen+y1jFpiPuW/IsemtRLffp5FJFhXxXHOCrJ87z DP6iZJ6xFHA0RnBlDTg0PTr7oo0AqVrc2vi+zAsicAAPGeBzxoiYdWwysiTvDclfErNy 72VUEZ1mP8VzIemtAJwXj31HE+dagCJmMYnEQANLnhHNFeBitXPj+y6oc+O3mGrAXoIP nAvDI2K+wEL6YxCSaHaFF7LrFuovVSnAWAWli6YDR6+Id501c0CJRwkNw4PmfTeZNBam 3pPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097511; x=1787702311; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=OavF8C5L8hF0ztGXJpBaBam5rZBitSHKmhVYc7OLXmM=; b=GgJlYcKxRMsFUUoM9LaFHeVMXuKasN/M+KwKBly/3i/y2QmzG4lyhzwr0hIWD/wm4L OJWNKBcdLxsXjZ1AWPX4bPwmFIsh20XkDqWYb+vwAYQ5y/DKu456PSCzuhG8cO8jKhjN eusqo4z1olGv1wJw0qMjItWBz6lspFc8Soneyh6W0RQ517skKfQP+dZjrpDnS5iCbX7X av5Epve+jAwvBozrSqyNqpGh3nXStzQ9V07J1MUT3aVHtYTRhvR88dnEZBuoG/QDVe8r Dd8Hr5zM6mN2/E2XQ+ovmboPZd+cADhntfjHe9d9xsQsS2VHkmoXOUVXwGqaBhJizwO4 mmsw== X-Gm-Message-State: AOJu0YxTZpYZS+YthAs3x293JIVmfpfhQETDIk972S7ZB1aaR0NHIXAs a0QDJV15oqJdUBcxzUXM+VBG2ucN6Na1OhHlDQboVrqPA6H6bhZsXBdIBGXRaexqg7Y= X-Gm-Gg: AR+sD12jrU0VJubXA7ttDzgvH+vYvq96emuV30ro1BiCKxXUtjbCs+8CHCrHWRBoXKt OvkPcjhpHfOnkC/tPfpDY8No5L/qV5IbHoCVUkMOU8VQNPS2cAAfFTH9IVujZKlzErcVLCdDUZx euNnFSw61vOLmQinKddMAR1XsxiAM4brrzVZAZaU3cH6MpsqY//8RjD2QFSHuVvEo5Lc3oU2Hwc ZJFO8YCf2PjBSf10daN7W5Vw7CHAFOtVjeOqyAsU8YfZ8aVAC2YPpxEkqC0u30bgZjGRrecvRkG oBhOOCTJ9TnZoHiGJxPgxae26XUwDl/lGk1DwMbQ7s5SJVnMS5T3EBjAuktHao+S9KIyglw2URT TcCoWbWtRa+3dWZWlJ+h2hElYdZaJX29OKiFPK/T24SYPWGUiOXGxoSc1KN4OVtnJSvMdECubql RMivEaq+EjE7NMjQlFJNb68tksraoFwjESRbZWjb8iM24PUMnUaV5eYF6vjA== X-Received: by 2002:a05:6808:2394:b0:492:7abc:422e with SMTP id 5614622812f47-4b2ba9f4001mr801417b6e.13.1787097510720; Tue, 18 Aug 2026 16:58:30 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:23 -0600 Subject: [PATCH v4 30/40] bsd-user: Add do_freebsd__umtx_op to os-thread.h MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-30-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Kyle Evans , Jessica Clarke , Sean Bruno , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=72606; i=imp@bsdimp.com; h=from:subject:message-id; bh=s3cl8Ena0Ekk/cp0EJGCpCaH91e3AmznnIgl0hI9i9c=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFOzCepqE5YflSqw3uli9M9/W5cEAdV2WQcM MscsFmEE7WJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxThsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQCc6w/+O5x6qIq0e/68jZOooQXoqv5pv2FzCgE uu9oh+C/lxZ94m8Y1+pLz1GxYUJjjUdqU2HHDgD2O21tTV4vp5rSGynBRNLdOkeAXOnUpTX7V6R PWOBgLHLLuQ6tvg3dxm1IJpmV/gUhXoe4esihO0+5Gw1oPhGxKVR1k60oYaRuxkWvuXc6+4pGrz /Vrfbc3RtwcGcxw8UpSosdhWT8vwUGHNDmwggKfkoq8HXtAQGv+ckc8aBeXcMihw4PE0zjd09vQ 64gU0rwNqrniyMTSvkkwTZm0Gq0nR8AS5pW7hp9UuK/9n1YMi7wkJHjILHnvbzVd/uKUYyq3jl4 /bvpxYzZSWxKfIRlOLx/r7P9iAhy0FDemAw0/1Gj1yO0jfgE5n2+NAvJ23kB1u8k8IY8GyIc3qs cClYNUuBWM/Qx7tQPAwSQ/OdWgn58sSlWeEhR//YQSO8Km4dN5w7pXJuP9qv61Jpcq7dWpjShh3 5FF6q+z4X89VJazK/k7fMoLAtsJIj/RjHhofe2lQ8fpaMi3aLx8c9E09m1H4sIIwuhJWOfDJLMb mymLius+syOg6Je9UuLJYCQfk6s/3s5/ubfg+bwGERsSHKSH4PR2NMiD4cjS9Hv1ISsoFQvwWBT fyg8M7CFZ+HWTQuzvOmGjb0x1IEpu13pcJoK+h8ehogcNlc18W3w= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::234; envelope-from=imp@bsdimp.com; helo=mail-oi1-x234.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=0.001, T_FILL_THIS_FORM_SHORT=0.01 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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097666377158500 Add the _umtx_op system call implementation with support for UMTX lock/unlock, mutex operations, condition variables, reader-writer locks, semaphores, shared memory, and robust lists. Signed-off-by: Stacey Son Signed-off-by: Kyle Evans Signed-off-by: Jessica Clarke Signed-off-by: Sean Bruno Assisted-by: Claude Opus 4.6 (1M context) Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/meson.build | 1 + bsd-user/freebsd/os-thread.c | 1682 ++++++++++++++++++++++++++++++++++++++= ++++ bsd-user/freebsd/os-thread.h | 352 +++++++++ 3 files changed, 2035 insertions(+) diff --git a/bsd-user/freebsd/meson.build b/bsd-user/freebsd/meson.build index 163d5657db..db531604ad 100644 --- a/bsd-user/freebsd/meson.build +++ b/bsd-user/freebsd/meson.build @@ -9,6 +9,7 @@ bsd_user_ss.add(files( 'os-stat.c', 'os-sys.c', 'os-syscall.c', + 'os-thread.c', 'os-time.c'), bsd_syscall_nr ) diff --git a/bsd-user/freebsd/os-thread.c b/bsd-user/freebsd/os-thread.c new file mode 100644 index 0000000000..63c17e10d0 --- /dev/null +++ b/bsd-user/freebsd/os-thread.c @@ -0,0 +1,1682 @@ +/* + * FreeBSD thr emulation support code + * + * Copyright (c) 2013-2015 Stacey D. Son + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#include "qemu/osdep.h" + +#include + +#include "qemu.h" +#include "qemu-os.h" +#include "signal-common.h" +#include "target_arch_cpu.h" +#include "target_arch_thread.h" +#include "tcg/startup.h" +#include "exec/tb-flush.h" + +#include "os-thread.h" + +/* #define DEBUG_UMTX(...) fprintf(stderr, __VA_ARGS__) */ +/* #define DEBUG_UMTX(...) qemu_log(__VA_ARGS__) */ +#define DEBUG_UMTX(...) + +#define DETECT_DEADLOCK 0 +#define DEADLOCK_TO 1200 + +#define NEW_STACK_SIZE 0x40000 + +/* sys/_umtx.h */ +struct target_umtx { + abi_ulong u_owner; /* Owner of the mutex. */ +}; + +struct target_umutex { + uint32_t m_owner; /* Owner of the mutex */ + uint32_t m_flags; /* Flags of the mutex */ + uint32_t m_ceiling[2]; /* Priority protect ceiling */ + abi_ulong m_rb_lnk; /* Robust linkage. */ +#if TARGET_ABI_BITS =3D=3D 32 + uint32_t m_pad; +#endif + uint32_t m_spare; + uint32_t m_count; /* QEMU-internal; takes one spare. */ +}; + +struct target_ucond { + uint32_t c_has_waiters; /* Has waiters in kernel */ + uint32_t c_flags; /* Flags of the condition variable */ + uint32_t c_clockid; /* Clock id */ + uint32_t c_spare[1]; +}; + +struct target_urwlock { + uint32_t rw_state; + uint32_t rw_flags; + uint32_t rw_blocked_readers; + uint32_t rw_blocked_writers; + uint32_t rw_spare[4]; +}; + +struct target__usem { + uint32_t _has_waiters; + uint32_t _count; + uint32_t _flags; +}; + +struct target__usem2 { + uint32_t _count; + uint32_t _flags; +}; + +struct target_umtx_robust_lists_params { + abi_ulong robust_list_offset; +#if TARGET_ABI_BITS =3D=3D 32 + uint32_t m_pad1; +#endif + abi_ulong robust_priv_list_offset; +#if TARGET_ABI_BITS =3D=3D 32 + uint32_t m_pad2; +#endif + abi_ulong robust_inact_offset; +#if TARGET_ABI_BITS =3D=3D 32 + uint32_t m_pad3; +#endif +}; + +/* + * !!! These mutexes must be reset in fork_end() (in bsd-user/main.c). + */ +static pthread_mutex_t new_thread_lock =3D PTHREAD_MUTEX_INITIALIZER; +pthread_mutex_t *new_freebsd_thread_lock_ptr =3D &new_thread_lock; +static pthread_mutex_t umtx_wait_lck =3D PTHREAD_MUTEX_INITIALIZER; +pthread_mutex_t *freebsd_umtx_wait_lck_ptr =3D &umtx_wait_lck; + +static void rtp_to_schedparam(const struct rtprio *rtp, int *policy, + struct sched_param *param) +{ + + switch (rtp->type) { + case RTP_PRIO_REALTIME: + *policy =3D SCHED_RR; + param->sched_priority =3D RTP_PRIO_MAX - rtp->prio; + break; + + case RTP_PRIO_FIFO: + *policy =3D SCHED_FIFO; + param->sched_priority =3D RTP_PRIO_MAX - rtp->prio; + break; + + default: + *policy =3D SCHED_OTHER; + param->sched_priority =3D 0; + break; + } +} + +void *new_freebsd_thread_start(void *arg) +{ + new_freebsd_thread_info_t *info =3D arg; + CPUArchState *env; + CPUState *cpu; + long tid; + + rcu_register_thread(); + tcg_register_thread(); + env =3D info->env; + cpu =3D env_cpu(env); + thread_cpu =3D cpu; + (void)thr_self(&tid); + + /* copy out the child TID to both locations */ + if (info->param.child_tid) { + put_user_ual(tid, info->param.child_tid); + } + if (info->param.parent_tid) { + put_user_ual(tid, info->param.parent_tid); + } + + /* Set arch dependent registers to start thread. */ + target_thread_set_upcall(env, info->param.start_func, info->param.arg, + info->param.stack_base, info->param.stack_size); + target_cpu_set_tls(env, info->param.tls_base); + + /* Enable signals */ + sigprocmask(SIG_SETMASK, &info->sigmask, NULL); + /* Signal to the parent that we're ready. */ + pthread_mutex_lock(&info->mutex); + pthread_cond_broadcast(&info->cond); + pthread_mutex_unlock(&info->mutex); + /* Wait until the parent has finished. */ + pthread_mutex_lock(new_freebsd_thread_lock_ptr); + pthread_mutex_unlock(new_freebsd_thread_lock_ptr); + + cpu_loop(env); + /* never exits */ + + return NULL; +} + +/* + * FreeBSD user mutex (_umtx) emulation + */ +static int tcmpset_al(abi_ulong *addr, abi_ulong a, abi_ulong b) +{ + abi_ulong current =3D tswapal(a); + abi_ulong new =3D tswapal(b); + +#ifdef TARGET_ABI32 + return atomic_cmpset_acq_32(addr, current, new); +#else + return atomic_cmpset_acq_64(addr, current, new); +#endif +} + +#ifdef _UMTX_OPTIMIZED +static int optimized_umtx_op(abi_ulong obj, int op, abi_ulong val, + void *uaddr1, void *uaddr2) +{ + + return get_errno(safe__umtx_op(g2h_untagged(obj), QEMU_UMTX_OP(op), va= l, + uaddr1, uaddr2)); +} + +#else /* !_UMTX_OPTIMIZED */ + +/* + * _cv_mutex keeps other threads from doing a signal or broadcast until + * the thread is actually asleep and ready. This is a global mutex for all + * condition vars so I am sure performance may be a problem if there are l= ots + * of CVs. + * + */ +static struct umutex _cv_mutex; + +static int tcmpset_32(uint32_t *addr, uint32_t a, uint32_t b) +{ + uint32_t current =3D tswap32(a); + uint32_t new =3D tswap32(b); + + return atomic_cmpset_acq_32(addr, current, new); +} + +#endif /* _UMTX_OPTIMIZED */ + +static abi_long _umtx_wait_uint(uint32_t *addr, uint32_t target_val, + size_t tsz, void *t, const char *where) +{ +#if DETECT_DEADLOCK + abi_long ret; + long cnt =3D 0; + + /* target_val has already been tswap'ed. */ + if (t =3D=3D NULL) { + struct timespec ts; + + ts.tv_sec =3D 5; + ts.tv_nsec =3D 0; + + do { + if (target_val !=3D *addr) { + return 0; + } + + ret =3D get_errno(safe__umtx_op(addr, QEMU_UMTX_OP(UMTX_OP_WAI= T_UINT), + target_val, NULL, &ts)); + + if (ret !=3D -TARGET_ETIMEDOUT) { + return ret; + } + if (cnt++ > DEADLOCK_TO) { + fprintf(stderr, "QEMU: Deadlock in %s from %s\n", + __func__, where); + abort(); + } + } while (1); + } else +#endif + return get_errno(safe__umtx_op(addr, QEMU_UMTX_OP(UMTX_OP_WAIT_UIN= T), + target_val, (void *)tsz, t)); +} + +abi_long freebsd_umtx_wait_uint(abi_ulong obj, uint32_t target_val, + size_t tsz, void *t) +{ + /* target_val has already been tswap'ed. */ + + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%x, %d, %p)\n", __func__, + g2h_untagged(obj), UMTX_OP_WAIT_UINT, target_val, (int)tsz,= t); + + return _umtx_wait_uint(g2h_untagged(obj), target_val, tsz, t, __func__= ); +} + +static abi_long _umtx_wait_uint_private(uint32_t *addr, uint32_t target_va= l, + size_t tsz, void *t, const char *where) +{ +#if DETECT_DEADLOCK + abi_long ret; + long cnt =3D 0; + + /* target_val has already been tswap'ed. */ + if (t =3D=3D NULL) { + struct timespec ts; + + ts.tv_sec =3D 5; + ts.tv_nsec =3D 0; + + do { + if (target_val !=3D *addr) { + return 0; + } + + ret =3D get_errno(safe__umtx_op(addr, + QEMU_UMTX_OP(UMTX_OP_WAIT_UINT_PRIVATE), target_val, NULL, + &ts)); + + if (ret !=3D -TARGET_ETIMEDOUT) { + return ret; + } + if (cnt++ > DEADLOCK_TO) { + fprintf(stderr, "QEMU: Deadlock in %s from %s\n", __func__, + where); + abort(); + } + } while (1); + } else +#endif /* DETECT_DEADLOCK */ + { + return get_errno(safe__umtx_op(addr, + QEMU_UMTX_OP(UMTX_OP_WAIT_UINT_PRIVATE), target_val, (void *)t= sz, + t)); + } +} + +abi_long freebsd_umtx_wait_uint_private(abi_ulong obj, uint32_t target_val, + size_t tsz, void *t) +{ + DEBUG_UMTX(" %s: _umtx_op(%p (%u), %d, 0x%x, %d, %p= )\n", + __func__, g2h_untagged(obj), tswap32(*(uint32_t *)g2h_untagged(obj= )), + UMTX_OP_WAIT_UINT_PRIVATE, target_val, (int)tsz, t); + + return _umtx_wait_uint_private(g2h_untagged(obj), target_val, tsz, t, + __func__); +} + +static abi_long _umtx_wait(abi_ulong *addr, abi_ulong target_val, size_t t= sz, + void *t, const char *where) +{ +#if DETECT_DEADLOCK + abi_long ret; + long cnt =3D 0; + + /* target_val has already been tswap'ed. */ + + if (t =3D=3D NULL) { + struct timespec ts; + + ts.tv_sec =3D 5; + ts.tv_nsec =3D 0; + + do { + if (target_val !=3D *addr) { + return 0; + } + + ret =3D get_errno(safe__umtx_op(addr, QEMU_UMTX_OP(UMTX_OP_WAI= T), + target_val, NULL, &ts)); + if (ret !=3D -TARGET_ETIMEDOUT) { + return ret; + } + + if (cnt++ > DEADLOCK_TO) { + fprintf(stderr, "QEMU: Deadlock in %s from %s\n", __func__, + where); + abort(); + } + } while (1); + } else +#endif /* DETECT_DEADLOCK */ + { + return get_errno(safe__umtx_op(addr, QEMU_UMTX_OP(UMTX_OP_WAIT), + target_val, (void *)tsz, t)); + } +} + +abi_long freebsd_umtx_wait(abi_ulong targ_addr, abi_ulong target_id, size_= t tsz, + void *t) +{ + + /* target_id has already been tswap'ed. */ + + /* We want to check the user memory but not lock it. We might sleep. = */ + if (!access_ok(VERIFY_READ, targ_addr, sizeof(abi_ulong))) { + return -TARGET_EFAULT; + } + + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%llx, %d, %p)\n", + __func__, g2h_untagged(targ_addr), UMTX_OP_WAIT, (long long)target= _id, + (int)tsz, t); + return _umtx_wait(g2h_untagged(targ_addr), target_id, tsz, t, __func__= ); +} + + +abi_long freebsd_umtx_wake_private(abi_ulong obj, uint32_t val) +{ + + DEBUG_UMTX(" %s: _umtx_op(%p (%d), %d, %u, NULL, NULL)\n= ", + __func__, g2h_untagged(obj), tswap32(*(uint32_t *)g2h_untagged(obj= )), + UMTX_OP_WAKE_PRIVATE, val); + return get_errno(safe__umtx_op(g2h_untagged(obj), + QEMU_UMTX_OP(UMTX_OP_WAKE_PRIVATE), val, NULL, NULL)); +} + +#if defined(UMTX_OP_NWAKE_PRIVATE) +#define BATCH_SIZE 128 +abi_long freebsd_umtx_nwake_private(abi_ulong target_array_addr, uint32_t = num) +{ +#ifdef _UMTX_OPTIMIZED + abi_ulong *tp; + uintptr_t uaddrs[BATCH_SIZE]; + int count, error, i, j; + + if (!access_ok(VERIFY_READ, target_array_addr, num * sizeof(abi_ulong)= )) { + return -TARGET_EFAULT; + } + + /* + * If we haven't relocated the guest, there's a 1:1 mapping so we can = avoid + * having to g2h_untagged() each address and just pass it through as-i= s. + */ + if (!have_guest_base && !reserved_va) { + return optimized_umtx_op(target_array_addr, UMTX_OP_NWAKE_PRIVATE,= num, + NULL, NULL); + } + + tp =3D (abi_ulong *)g2h_untagged(target_array_addr); + for (i =3D 0, count =3D num; i < num; i +=3D BATCH_SIZE, count -=3D BA= TCH_SIZE) { + for (j =3D i; j < i + MIN(BATCH_SIZE, count); j++) { + uaddrs[j % BATCH_SIZE] =3D (uintptr_t)g2h_untagged(tp[j]); + } + + /* + * This one should not be passed as compat32 at this point; we've + * converted them all to host pointers. + */ + error =3D get_errno(safe__umtx_op(uaddrs, UMTX_OP_NWAKE_PRIVATE, + MIN(BATCH_SIZE, count), NULL, NULL)); + if (is_error(error)) { + return error; + } + } + + return 0; +#else + int i; + abi_ulong *uaddr; + abi_long ret =3D 0; + + DEBUG_UMTX(" %s: _umtx_op(%p, %d, %d, NULL, NULL) Wakin= g: ", + __func__, g2h_untagged(target_array_addr), UMTX_OP_NWAKE_PRIVATE, = num); + + if (!access_ok(VERIFY_READ, target_array_addr, num * sizeof(abi_ulong)= )) { + return -TARGET_EFAULT; + } + + uaddr =3D (abi_ulong *)g2h_untagged(target_array_addr); + for (i =3D 0; i < (int32_t)num; i++) { + DEBUG_UMTX("%p (%u) ", g2h_untagged(tswapal(uaddr[i])), + tswap32(*(uint32_t *)g2h_untagged(tswapal(uaddr[i])))); + ret =3D get_errno(safe__umtx_op(g2h_untagged(tswapal(uaddr[i])), + UMTX_OP_WAKE_PRIVATE, INT_MAX, NULL, NULL)); + if (is_error(ret)) { + DEBUG_UMTX("\n"); + return ret; + } + } + DEBUG_UMTX("\n"); + return ret; +#endif /* _UMTX_OPTIMIZED */ +} +#endif /* UMTX_OP_NWAKE_PRIVATE */ + +#if defined(UMTX_OP_MUTEX_WAKE2) +abi_long freebsd_umtx_mutex_wake2(abi_ulong target_addr, uint32_t flags) +{ +#ifdef _UMTX_OPTIMIZED + if (!access_ok(VERIFY_WRITE, target_addr, sizeof(struct target_umutex)= )) { + return -TARGET_EFAULT; + } + + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%x, NULL, NULL)\n", + __func__, g2h_untagged(target_addr), UMTX_OP_MUTEX_WAKE2, flags); + return optimized_umtx_op(target_addr, UMTX_OP_MUTEX_WAKE2, flags, NULL, + NULL); +#else + uint32_t count, owner, *addr; + struct target_umutex *target_umutex; + + if (!lock_user_struct(VERIFY_WRITE, target_umutex, target_addr, 1)) { + return -TARGET_EFAULT; + } + pthread_mutex_lock(&umtx_wait_lck); + __get_user(count, &target_umutex->m_count); + __get_user(owner, &target_umutex->m_owner); + while ((owner & TARGET_UMUTEX_CONTESTED) =3D=3D 0 && (count > 1 || + (count =3D=3D 1 && (owner & ~TARGET_UMUTEX_CONTESTED) !=3D 0))= ) { + if (tcmpset_32(&target_umutex->m_owner, owner, + (owner | TARGET_UMUTEX_CONTESTED))) + break; + + /* owner has changed */ + __get_user(owner, &target_umutex->m_owner); + } + pthread_mutex_unlock(&umtx_wait_lck); + addr =3D &target_umutex->m_owner; + /* tcmpset_32 above writes to guest, and addr is just a key below */ + unlock_user_struct(target_umutex, target_addr, 0); + + return get_errno(safe__umtx_op(addr, UMTX_OP_WAKE_PRIVATE, 1, NULL, + NULL)); +#endif /* _UMTX_OPTIMIZED */ +} +#endif /* UMTX_OP_MUTEX_WAKE2 */ + +abi_long freebsd_umtx_sem2_wait(abi_ulong obj, size_t tsz, void *t) +{ +#ifdef _UMTX_OPTIMIZED + if (!access_ok(VERIFY_WRITE, obj, sizeof(struct target__usem2))) { + return -TARGET_EFAULT; + } + + return optimized_umtx_op(obj, UMTX_OP_SEM2_WAIT, 1, + (void *)(uintptr_t)tsz, t); +#else + struct target__usem2 *t__usem2; + uint32_t count, flags; + uint32_t *addr; + abi_long ret =3D 0; + + if (!lock_user_struct(VERIFY_WRITE, t__usem2, obj, 0)) { + return -TARGET_EFAULT; + } + + /* + * Make sure the count field has the has USEM_HAS_WAITERS flag set + * so userland will always call freebsd_umtx_sem2_wake(). + */ + for (;;) { + __get_user(count, &t__usem2->_count); + if (USEM_COUNT(count) !=3D 0) { + unlock_user_struct(t__usem2, obj, 1); + return 0; + } + if ((count & USEM_HAS_WAITERS) !=3D 0) { + break; + } + if (tcmpset_32(&t__usem2->_count, count, (count | USEM_HAS_WAITERS= ))) { + break; + } + } + + __get_user(flags, &t__usem2->_flags); + addr =3D &t__usem2->_count; + unlock_user_struct(t__usem2, obj, 1); + + if ((flags & USYNC_PROCESS_SHARED) =3D=3D 0) { + DEBUG_UMTX(" %s: _umtx_op(%p, %d, %p)\n", + __func__, addr, UMTX_OP_WAIT_UINT_PRIVATE, (int)tsz, t); + +#if DETECT_DEADLOCK + if (t !=3D NULL) { + ret =3D _umtx_wait_uint_private(addr, tswap32(USEM_HAS_WAITERS= ), tsz, + t, __func__); + } else { + for (;;) { + struct timespec ts; + + ts.tv_sec =3D 120; + ts.tv_nsec =3D 0; + + ret =3D _umtx_wait_uint_private(addr, tswap32(USEM_HAS_WAI= TERS), + 0, (void *)&ts, __func__); + if (ret =3D=3D 0) { + break; + } + if (ret !=3D -ETIMEDOUT) { + break; + } + if (!lock_user_struct(VERIFY_READ, t__usem2, obj, 1)) { + return -TARGET_EFAULT; + } + __get_user(count, &t__usem2->_count); + unlock_user_struct(t__usem2, obj, 0); + if (USEM_COUNT(count) !=3D 0) { + fprintf(stderr, "QEMU:(%s) TIMEOUT (count!=3D0)\n", __= func__); + ret =3D 0; + break; + } + if (ret =3D=3D -ETIMEDOUT) { + fprintf(stderr, "QEMU:(%s) TIMEOUT (exiting)\n", __fun= c__); + exit(-1); + } + } + } +#else + ret =3D _umtx_wait_uint_private(addr, tswap32(USEM_HAS_WAITERS), + tsz, t, __func__); +#endif /* DETECT_DEADLOCK */ + } else { + DEBUG_UMTX(" %s: _umtx_op(%p, %d, %p)\n", + __func__, addr, UMTX_OP_WAIT_UINT, (int)tsz, t); +#if DETECT_DEADLOCK + if (t !=3D NULL) { + ret =3D _umtx_wait_uint(addr, tswap32(USEM_HAS_WAITERS), tsz, = t, + __func__); + } else { + for (;;) { + struct timespec ts; + + ts.tv_sec =3D 120; + ts.tv_nsec =3D 0; + + ret =3D _umtx_wait_uint(addr, tswap32(USEM_HAS_WAITERS), 0, + (void *)&ts, __func__); + if (ret =3D=3D 0) { + break; + } + if (ret !=3D -ETIMEDOUT) { + break; + } + if (!lock_user_struct(VERIFY_READ, t__usem2, obj, 1)) { + return -TARGET_EFAULT; + } + __get_user(count, &t__usem2->_count); + unlock_user_struct(t__usem2, obj, 0); + if (USEM_COUNT(count) !=3D 0) { + fprintf(stderr, "QEMU:(%s) TIMEOUT (count!=3D0)\n", __= func__); + ret =3D 0; + break; + } + if (ret =3D=3D -ETIMEDOUT) { + fprintf(stderr, "QEMU:(%s) TIMEOUT (exiting)\n", __fun= c__); + exit(-1); + } + } + } +#else + ret =3D _umtx_wait_uint(addr, tswap32(USEM_HAS_WAITERS), tsz, t, + __func__); +#endif /* DETECT_DEADLOCK */ + } + return ret; +#endif /* _UMTX_OPTIMIZED */ +} + +abi_long freebsd_umtx_sem2_wake(abi_ulong obj) +{ +#ifdef _UMTX_OPTIMIZED + if (!access_ok(VERIFY_READ, obj, sizeof(struct target__usem2))) { + return -TARGET_EFAULT; + } + + return optimized_umtx_op(obj, UMTX_OP_SEM2_WAKE, 1, NULL, NULL); +#else + struct target__usem2 *t__usem2; + uint32_t *addr, flags; + abi_long ret; + + if (!lock_user_struct(VERIFY_READ, t__usem2, obj, 1)) { + return -TARGET_EFAULT; + } + + __get_user(flags, &t__usem2->_flags); + addr =3D &t__usem2->_count; + unlock_user_struct(t__usem2, obj, 0); + + if ((flags & USYNC_PROCESS_SHARED) =3D=3D 0) { + DEBUG_UMTX(" %s: _umtx_op(%p, %d, %d, NULL, NULL)\n", + __func__, addr, UMTX_OP_WAKE_PRIVATE, INT_MAX); + ret =3D get_errno(safe__umtx_op(addr, UMTX_OP_WAKE_PRIVATE, INT_MA= X, NULL, + NULL)); + } else { + DEBUG_UMTX(" %s: _umtx_op(%p, %d, %d, NULL, NULL)\n", + __func__, addr, UMTX_OP_WAKE, INT_MAX); + ret =3D get_errno(safe__umtx_op(addr, UMTX_OP_WAKE, INT_MAX, NULL,= NULL)); + } + + return ret; +#endif /* _UMTX_OPTIMIZED */ +} + +abi_long freebsd_umtx_sem_wait(abi_ulong obj, size_t tsz, void *t) +{ +#ifdef _UMTX_OPTIMIZED + if (!access_ok(VERIFY_WRITE, obj, sizeof(struct target__usem))) { + return -TARGET_EFAULT; + } + + return optimized_umtx_op(obj, UMTX_OP_SEM_WAIT, 1, + (void *)(uintptr_t)tsz, t); +#else + struct target__usem *t__usem; + uint32_t count, flags, *addr; + abi_long ret; + + if (!lock_user_struct(VERIFY_WRITE, t__usem, obj, 0)) { + return -TARGET_EFAULT; + } + + __get_user(count, &t__usem->_count); + if (count !=3D 0) { + unlock_user_struct(t__usem, obj, 1); + return 0; + } + + /* + * Make sure the _has_waiters field is set so userland will always + * call freebsd_umtx_sem_wake(). + */ + __put_user(1, &t__usem->_has_waiters); + + __get_user(flags, &t__usem->_flags); + addr =3D &t__usem->_count; + unlock_user_struct(t__usem, obj, 1); + + if ((flags & USYNC_PROCESS_SHARED) =3D=3D 0) { + DEBUG_UMTX(" %s: _umtx_op(%p, %d, %d, NULL, NULL)\n", + __func__, &t__usem->_count, UMTX_OP_WAKE_PRIVATE, = 0); + ret =3D _umtx_wait_uint_private(addr, 0, tsz, t, __func__); + } else { + DEBUG_UMTX(" %s: _umtx_op(%p, %d, %d, NULL, NULL)\n", + __func__, &t__usem->_count, UMTX_OP_WAKE, 0); + ret =3D _umtx_wait_uint(addr, 0, tsz, t, __func__); + } + + return ret; +#endif /* _UMTX_OPTIMIZED */ +} + +abi_long freebsd_umtx_sem_wake(abi_ulong obj) +{ +#ifdef _UMTX_OPTIMIZED + if (!access_ok(VERIFY_WRITE, obj, sizeof(struct target__usem))) { + return -TARGET_EFAULT; + } + + return optimized_umtx_op(obj, UMTX_OP_SEM_WAKE, 1, NULL, NULL); +#else + struct target__usem *t__usem; + uint32_t flags, *addr; + abi_long ret; + + if (!lock_user_struct(VERIFY_READ, t__usem, obj, 1)) { + return -TARGET_EFAULT; + } + __get_user(flags, &t__usem->_flags); + addr =3D &t__usem->_count; + unlock_user_struct(t__usem, obj, 0); + + if ((flags & USYNC_PROCESS_SHARED) =3D=3D 0) { + DEBUG_UMTX(" %s: _umtx_op(%p, %d, %d, NULL, NULL)\n", + __func__, &t__usem->_count, UMTX_OP_WAKE_PRIVATE, = 1); + ret =3D get_errno(safe__umtx_op(addr, UMTX_OP_WAKE_PRIVATE, 1,= NULL, + NULL)); + } else { + DEBUG_UMTX(" %s: _umtx_op(%p, %d, %d, NULL, NULL)\n", + __func__, &t__usem->_count, UMTX_OP_WAKE, 1); + ret =3D get_errno(safe__umtx_op(addr, UMTX_OP_WAKE, 1, NULL, N= ULL)); + } + + return ret; +#endif /* _UMTX_OPTIMIZED */ +} + +abi_long t2h_freebsd_rtprio(struct rtprio *host_rtp, abi_ulong target_addr) +{ + struct target_freebsd_rtprio *target_rtp; + + if (!lock_user_struct(VERIFY_READ, target_rtp, target_addr, 1)) { + return -TARGET_EFAULT; + } + __get_user(host_rtp->type, &target_rtp->type); + __get_user(host_rtp->prio, &target_rtp->prio); + unlock_user_struct(target_rtp, target_addr, 0); + return 0; +} + +abi_long h2t_freebsd_rtprio(abi_ulong target_addr, struct rtprio *host_rtp) +{ + struct target_freebsd_rtprio *target_rtp; + + if (!lock_user_struct(VERIFY_WRITE, target_rtp, target_addr, 0)) { + return -TARGET_EFAULT; + } + __put_user(host_rtp->type, &target_rtp->type); + __put_user(host_rtp->prio, &target_rtp->prio); + unlock_user_struct(target_rtp, target_addr, 1); + return 0; +} + +/* XXX We should never see this? OP_LOCK and OP_UNLOCK are now RESERVED{0,= 1} */ +abi_long freebsd_lock_umtx(abi_ulong target_addr, abi_long id, size_t tsz, + void *t) +{ + abi_long ret; + abi_long owner; + + gemu_log("This is unreachable."); + + /* + * XXX Note that memory at umtx_addr can change and so we need to be + * careful and check for faults. + */ + for (;;) { + struct target_umtx *target_umtx; + + if (!lock_user_struct(VERIFY_WRITE, target_umtx, target_addr, 0)) { + return -TARGET_EFAULT; + } + /* Check the simple uncontested case. */ + if (tcmpset_al(&target_umtx->u_owner, + TARGET_UMTX_UNOWNED, id)) { + unlock_user_struct(target_umtx, target_addr, 1); + return 0; + } + /* Check to see if the lock is contested but free. */ + __get_user(owner, &target_umtx->u_owner); + + if (TARGET_UMTX_CONTESTED =3D=3D owner) { + if (tcmpset_al(&target_umtx->u_owner, TARGET_UMTX_CONTESTED, + id | TARGET_UMTX_CONTESTED)) { + unlock_user_struct(target_umtx, target_addr, 1); + return 0; + } + /* We failed because it changed on us, restart. */ + unlock_user_struct(target_umtx, target_addr, 1); + continue; + } + + /* Set the contested bit and sleep. */ + do { + __get_user(owner, &target_umtx->u_owner); + if (owner & TARGET_UMTX_CONTESTED) { + break; + } + } while (!tcmpset_al(&target_umtx->u_owner, owner, + owner | TARGET_UMTX_CONTESTED)); + + __get_user(owner, &target_umtx->u_owner); + unlock_user_struct(target_umtx, target_addr, 1); + + /* Byte swap, if needed, to match what is stored in user mem. */ + owner =3D tswapal(owner); + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%llx, NULL, NULL)\n", + __func__, g2h_untagged(target_addr), UMTX_OP_WAIT, + (long long)owner); + ret =3D _umtx_wait(g2h_untagged(target_addr), owner, tsz, t, __fun= c__); + if (is_error(ret)) { + return ret; + } + } +} + +/* XXX We should never see this? OP_LOCK and OP_UNLOCK are now RESERVED{0,= 1} */ +abi_long freebsd_unlock_umtx(abi_ulong target_addr, abi_long id) +{ + abi_ulong owner; + struct target_umtx *target_umtx; + + gemu_log("This is unreachable."); + if (!lock_user_struct(VERIFY_WRITE, target_umtx, target_addr, 0)) { + return -TARGET_EFAULT; + } + __get_user(owner, &target_umtx->u_owner); + if ((owner & ~TARGET_UMTX_CONTESTED) !=3D id) { + unlock_user_struct(target_umtx, target_addr, 1); + return -TARGET_EPERM; + } + /* Check the simple uncontested case. */ + if ((owner & ~TARGET_UMTX_CONTESTED) =3D=3D 0) { + if (tcmpset_al(&target_umtx->u_owner, owner, + TARGET_UMTX_UNOWNED)) { + unlock_user_struct(target_umtx, target_addr, 1); + return 0; + } + } + /* This is a contested lock. Unlock it. */ + __put_user(TARGET_UMTX_UNOWNED, &target_umtx->u_owner); + unlock_user_struct(target_umtx, target_addr, 1); + + /* Wake up all those contesting it. */ + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%x, NULL, NULL)\n", + __func__, g2h_untagged(target_addr), UMTX_OP_WAKE, 0); + return get_errno(safe__umtx_op(g2h_untagged(target_addr), + QEMU_UMTX_OP(UMTX_OP_WAKE), 0, 0, 0)); +} + +abi_long freebsd_umtx_wake(abi_ulong target_addr, uint32_t n_wake) +{ + + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%x, NULL, NULL)\n", + __func__, g2h_untagged(target_addr), UMTX_OP_WAKE, n_wake); + return get_errno(safe__umtx_op(g2h_untagged(target_addr), + QEMU_UMTX_OP(UMTX_OP_WAKE), n_wake, NULL, 0)); +} + +abi_long freebsd_umtx_wake_unsafe(abi_ulong target_addr, uint32_t n_wake) +{ + + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%x, NULL, NULL)\n", + __func__, g2h_untagged(target_addr), UMTX_OP_WAKE, n_wake); + return get_errno(_umtx_op(g2h_untagged(target_addr), + QEMU_UMTX_OP(UMTX_OP_WAKE), n_wake, NULL, 0)); +} + +abi_long freebsd_umtx_mutex_wake(abi_ulong obj, abi_long val) +{ + + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%llx, NULL, NULL)\n", + __func__, g2h_untagged(obj), UMTX_OP_WAKE, (long long)val); + return get_errno(safe__umtx_op(g2h_untagged(obj), + QEMU_UMTX_OP(UMTX_OP_MUTEX_WAKE), val, NULL, NULL)); +} + +abi_long freebsd_lock_umutex(abi_ulong target_addr, uint32_t id, + void *ts, size_t tsz, int mode, abi_ulong val) +{ +#ifdef _UMTX_OPTIMIZED + int op; + + if (!access_ok(VERIFY_WRITE, target_addr, sizeof(struct target_umutex)= )) { + return -TARGET_EFAULT; + } + + switch (mode) { + case TARGET_UMUTEX_WAIT: + op =3D UMTX_OP_MUTEX_WAIT; + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%llx, %p, %p)\n", + __func__, g2h_untagged(target_addr), op, (long long)val, + (void *)(uintptr_t)tsz, ts); + break; + case TARGET_UMUTEX_TRY: + op =3D UMTX_OP_MUTEX_TRYLOCK; + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%llx, %p, %p)\n= ", + __func__, g2h_untagged(target_addr), op, (long long)val, + (void *)(uintptr_t)tsz, ts); + break; + default: + op =3D UMTX_OP_MUTEX_LOCK; + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%llx, %p, %p)\n", + __func__, g2h_untagged(target_addr), op, (long long)val, + (void *)(uintptr_t)tsz, ts); + break; + } + + return optimized_umtx_op(target_addr, op, val, (void *)(uintptr_t)tsz,= ts); +#else + struct target_umutex *target_umutex; + uint32_t owner, flags, count, *addr; + int ret =3D 0; + + if (!lock_user_struct(VERIFY_WRITE, target_umutex, target_addr, 0)) { + return -TARGET_EFAULT; + } + + for (;;) { + + __get_user(owner, &target_umutex->m_owner); + + if ((owner & ~TARGET_UMUTEX_CONTESTED) =3D=3D 0) { + /* Lock is unowned. */ + if (TARGET_UMUTEX_WAIT =3D=3D mode) { + /* Waiting on an unlocked mutex; bail out. */ + unlock_user_struct(target_umutex, target_addr, 1); + return 0; + } + + /* Attempt to acquire it, preserve the contested bit ("owner")= . */ + while ((owner & ~TARGET_UMUTEX_CONTESTED) =3D=3D 0 && + !tcmpset_32(&target_umutex->m_owner, owner, owner | id= )) { + __get_user(owner, &target_umutex->m_owner); + } + + if ((owner & ~TARGET_UMUTEX_CONTESTED) =3D=3D 0) { + /* + * The acquire succeeded, because we didn't observe owner = with + * a different id. + */ + unlock_user_struct(target_umutex, target_addr, 1); + return 0; + } + + /* Otherwise, someone beat us to it; carry on. */ + } + + __get_user(flags, &target_umutex->m_flags); + if ((flags & TARGET_UMUTEX_ERROR_CHECK) !=3D 0 && + (owner & ~TARGET_UMUTEX_CONTESTED) =3D=3D id) { + unlock_user_struct(target_umutex, target_addr, 1); + return -TARGET_EDEADLK; + } + + if (TARGET_UMUTEX_TRY =3D=3D mode) { + unlock_user_struct(target_umutex, target_addr, 1); + return -TARGET_EBUSY; + } + + /* Set the contested bit and sleep. */ + while ((owner & TARGET_UMUTEX_CONTESTED) =3D=3D 0) { + if (tcmpset_32(&target_umutex->m_owner, owner, + owner | TARGET_UMUTEX_CONTESTED)) { + /* + * Keep our local view of owner consistent with what we th= ink + * we've set it to. We're about to sleep on it, and we do= n't + * really want a spurious return from _umtx_op because of = this. + */ + owner |=3D TARGET_UMUTEX_CONTESTED; + + break; + } else { + __get_user(owner, &target_umutex->m_owner); + } + } + + /* + * If it changed during the above loop, we may be able to acquire = now. + */ + if ((owner & ~TARGET_UMUTEX_CONTESTED) =3D=3D 0) { + continue; + } + + pthread_mutex_lock(&umtx_wait_lck); + __get_user(count, &target_umutex->m_count); + count++; + __put_user(count, &target_umutex->m_count); + pthread_mutex_unlock(&umtx_wait_lck); + + addr =3D &target_umutex->m_owner; + + /* addr used only as key below, not dereferenced */ + unlock_user_struct(target_umutex, target_addr, 1); + + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%x, %d, %jx) " + "count =3D %d\n", __func__, g2h_untagged(target_addr), + UMTX_OP_WAIT_PRIVATE, tswap32(target_umutex->m_owner), tsz, + (uintmax_t)ts, count); + ret =3D _umtx_wait_uint_private(addr, owner, tsz, (void *)ts, __fu= nc__); + + if (!lock_user_struct(VERIFY_WRITE, target_umutex, target_addr, 0)= ) { + return -TARGET_EFAULT; + } + + pthread_mutex_lock(&umtx_wait_lck); + __get_user(count, &target_umutex->m_count); + count--; + __put_user(count, &target_umutex->m_count); + pthread_mutex_unlock(&umtx_wait_lck); + if (ret !=3D 0) { + unlock_user_struct(target_umutex, target_addr, 1); + break; + } + } + return ret; +#endif /* _UMTX_OPTIMIZED */ +} + +abi_long freebsd_unlock_umutex(abi_ulong target_addr, uint32_t id) +{ +#ifdef _UMTX_OPTIMIZED + if (!access_ok(VERIFY_WRITE, target_addr, sizeof(struct target_umutex)= )) { + return -TARGET_EFAULT; + } + + return optimized_umtx_op(target_addr, UMTX_OP_MUTEX_UNLOCK, 0, NULL, N= ULL); +#else + struct target_umutex *target_umutex; + uint32_t count, owner, *addr, flags; + + if (!lock_user_struct(VERIFY_WRITE, target_umutex, target_addr, 0)) { + return -TARGET_EFAULT; + } + /* Make sure we own this mutex. */ + __get_user(owner, &target_umutex->m_owner); + if ((owner & ~TARGET_UMUTEX_CONTESTED) !=3D id) { + unlock_user_struct(target_umutex, target_addr, 1); + return -TARGET_EPERM; + } + pthread_mutex_lock(&umtx_wait_lck); + __get_user(count, &target_umutex->m_count); + + /* Unlock it; set the contested bit as needed. */ + flags =3D TARGET_UMUTEX_UNOWNED; + if (count > 1) { + flags |=3D TARGET_UMUTEX_CONTESTED; + } + __put_user(flags, &target_umutex->m_owner); + pthread_mutex_unlock(&umtx_wait_lck); + + addr =3D &target_umutex->m_owner; + + /* addr is used only as a key, so we can unlock before we use it below= */ + unlock_user_struct(target_umutex, target_addr, 1); + + /* + * And wake up any that may be contested it. We used to only do this = if the + * lock wasn't contested coming in, but that could have changed in the + * interim. Unconditionally issue the wakeup, in conjunction with the + * previous change of owner this should catch all cases. + */ + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%x, NULL, NULL)\n", + __func__, g2h_untagged(target_addr), UMTX_OP_WAKE, 0); + return get_errno(safe__umtx_op(addr, UMTX_OP_WAKE_PRIVATE, 1, NULL, NU= LL)); +#endif /* _UMTX_OPTIMIZED */ +} + +/* + * wflags CVWAIT_CHECK_UNPARKING, CVWAIT_ABSTIME, CVWAIT_CLOCKID + */ +abi_long freebsd_cv_wait(abi_ulong target_ucond_addr, + abi_ulong target_umtx_addr, struct timespec *ts, int wflags) +{ +#ifdef _UMTX_OPTIMIZED + if (!access_ok(VERIFY_WRITE, target_ucond_addr, + sizeof(struct target_ucond))) { + return -TARGET_EFAULT; + } + + return optimized_umtx_op(target_ucond_addr, UMTX_OP_CV_WAIT, wflags, + g2h_untagged(target_umtx_addr), ts); +#else + abi_long ret; + long tid; + struct target_ucond *target_ucond; + + if (!lock_user_struct(VERIFY_WRITE, target_ucond, target_ucond_addr, 0= )) { + return -TARGET_EFAULT; + } + + /* Check the clock ID if needed. */ + if ((wflags & TARGET_CVWAIT_CLOCKID) !=3D 0) { + uint32_t clockid; + + __get_user(clockid, &target_ucond->c_clockid); + if (clockid >=3D CLOCK_THREAD_CPUTIME_ID) { + /* Only HW clock id will work. */ + unlock_user_struct(target_ucond, target_ucond_addr, 1); + return -TARGET_EINVAL; + } + } + + thr_self(&tid); + + /* Lock the _cv_mutex so we can safely unlock the user mutex */ + safe__umtx_op(&_cv_mutex, UMTX_OP_MUTEX_LOCK, 0, NULL, NULL); + + /* Set c_has_waiters before releasing the user mutex! */ + __put_user(1, &target_ucond->c_has_waiters); + + /* unlock the user mutex */ + ret =3D freebsd_unlock_umutex(target_umtx_addr, tid); + if (is_error(ret)) { + safe__umtx_op(&_cv_mutex, UMTX_OP_MUTEX_UNLOCK, 0, NULL, NULL); + unlock_user_struct(target_ucond, target_ucond_addr, 1); + return ret; + } + + /* UMTX_OP_CV_WAIT unlocks _cv_mutex */ + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%x, %p, NULL)\n", + __func__, g2h_untagged(target_ucond_addr), UMTX_OP_CV_WAIT, wflags, + &_cv_mutex); + ret =3D safe__umtx_op(g2h_untagged(target_ucond_addr), UMTX_OP_CV_WAIT, + wflags, &_cv_mutex, ts); + + if (is_error(ret)) { + safe__umtx_op(&_cv_mutex, UMTX_OP_MUTEX_UNLOCK, 0, NULL, NULL); + unlock_user_struct(target_ucond, target_ucond_addr, 1); + return ret; + } + ret =3D freebsd_lock_umutex(target_umtx_addr, tid, NULL, 0, TARGET_UMU= TEX_TRY, + 0); + safe__umtx_op(&_cv_mutex, UMTX_OP_MUTEX_UNLOCK, 0, NULL, NULL); + unlock_user_struct(target_ucond, target_ucond_addr, 1); + + return ret; +#endif /* _UMTX_OPTIMIZED */ +} + +abi_long freebsd_cv_signal(abi_ulong target_ucond_addr) +{ +#ifdef _UMTX_OPTIMIZED + if (!access_ok(VERIFY_WRITE, target_ucond_addr, + sizeof(struct target_ucond))) { + return -TARGET_EFAULT; + } + + return optimized_umtx_op(target_ucond_addr, UMTX_OP_CV_SIGNAL, 0, NULL, + NULL); +#else + abi_long ret; + + if (!access_ok(VERIFY_WRITE, target_ucond_addr, + sizeof(struct target_ucond))) { + return -TARGET_EFAULT; + } + + /* Lock the _cv_mutex to prevent a race in do_cv_wait(). */ + safe__umtx_op(&_cv_mutex, UMTX_OP_MUTEX_LOCK, 0, NULL, NULL); + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%x, NULL, NULL)\n", + __func__, g2h_untagged(target_ucond_addr), UMTX_OP_CV_SIGNAL, = 0); + ret =3D get_errno(safe__umtx_op(g2h_untagged(target_ucond_addr), + UMTX_OP_CV_SIGNAL, 0, NULL, NULL)); + safe__umtx_op(&_cv_mutex, UMTX_OP_MUTEX_UNLOCK, 0, NULL, NULL); + + return ret; +#endif /* _UMTX_OPTIMIZED */ +} + +abi_long freebsd_cv_broadcast(abi_ulong target_ucond_addr) +{ +#ifdef _UMTX_OPTIMIZED + if (!access_ok(VERIFY_WRITE, target_ucond_addr, + sizeof(struct target_ucond))) { + return -TARGET_EFAULT; + } + + return optimized_umtx_op(target_ucond_addr, UMTX_OP_CV_BROADCAST, 0, N= ULL, + NULL); +#else + int ret; + + if (!access_ok(VERIFY_WRITE, target_ucond_addr, + sizeof(struct target_ucond))) { + return -TARGET_EFAULT; + } + + /* Lock the _cv_mutex to prevent a race in do_cv_wait(). */ + safe__umtx_op(&_cv_mutex, UMTX_OP_MUTEX_LOCK, 0, NULL, NULL); + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%x, NULL, NULL)\n", + __func__, g2h_untagged(target_ucond_addr), UMTX_OP_CV_BROADCAST, 0= ); + ret =3D get_errno(safe__umtx_op(g2h_untagged(target_ucond_addr), + UMTX_OP_CV_BROADCAST, 0, NULL, NULL)); + safe__umtx_op(&_cv_mutex, UMTX_OP_MUTEX_UNLOCK, 0, NULL, NULL); + + return ret; +#endif /* _UMTX_OPTIMIZED */ +} + +abi_long freebsd_rw_rdlock(abi_ulong target_addr, long fflag, size_t tsz, + void *t) +{ +#ifdef _UMTX_OPTIMIZED + if (!access_ok(VERIFY_WRITE, target_addr, sizeof(struct target_urwlock= ))) { + return -TARGET_EFAULT; + } + + return optimized_umtx_op(target_addr, UMTX_OP_RW_RDLOCK, fflag, + (void *)(uintptr_t)tsz, t); +#else + struct target_urwlock *target_urwlock; + uint32_t flags, wrflags; + uint32_t state; + uint32_t blocked_readers; + abi_long ret; + + if (!lock_user_struct(VERIFY_WRITE, target_urwlock, target_addr, 0)) { + return -TARGET_EFAULT; + } + + __get_user(flags, &target_urwlock->rw_flags); + wrflags =3D TARGET_URWLOCK_WRITE_OWNER; + if (!(fflag & TARGET_URWLOCK_PREFER_READER) && + !(flags & TARGET_URWLOCK_PREFER_READER)) { + wrflags |=3D TARGET_URWLOCK_WRITE_WAITERS; + } + for (;;) { + __get_user(state, &target_urwlock->rw_state); + /* try to lock it */ + while (!(state & wrflags)) { + if (TARGET_URWLOCK_READER_COUNT(state) =3D=3D + TARGET_URWLOCK_MAX_READERS) { + unlock_user_struct(target_urwlock, + target_addr, 1); + return -TARGET_EAGAIN; + } + if (tcmpset_32(&target_urwlock->rw_state, state, + (state + 1))) { + /* The acquired succeeded. */ + unlock_user_struct(target_urwlock, + target_addr, 1); + return 0; + } + __get_user(state, &target_urwlock->rw_state); + } + /* set read contention bit */ + if (!tcmpset_32(&target_urwlock->rw_state, state, + state | TARGET_URWLOCK_READ_WAITERS)) { + /* The state has changed. Start over. */ + continue; + } + + /* contention bit is set, increase read waiter count */ + __get_user(blocked_readers, &target_urwlock->rw_blocked_readers); + while (!tcmpset_32(&target_urwlock->rw_blocked_readers, + blocked_readers, blocked_readers + 1)) { + __get_user(blocked_readers, &target_urwlock->rw_blocked_reader= s); + } + + ret =3D 0; + while (state & wrflags) { + /* sleep/wait */ + unlock_user_struct(target_urwlock, target_addr, 1); + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%x (0x%x), NULL, NUL= L)\n", + __func__, &target_urwlock->rw_state, + UMTX_OP_WAIT_UINT, tswap32(state), + target_urwlock->rw_state); + ret =3D _umtx_wait_uint(&target_urwlock->rw_state, tswap32(sta= te), + tsz, t, __func__); + if (is_error(ret)) { + if (!lock_user_struct(VERIFY_WRITE, target_urwlock, + target_addr, 0)) { + return ret; + } + goto rdlock_decrement; + } + if (!lock_user_struct(VERIFY_WRITE, target_urwlock, target_add= r, + 0)) { + return -TARGET_EFAULT; + } + __get_user(state, &target_urwlock->rw_state); + } + + /* decrease read waiter count */ +rdlock_decrement: + __get_user(blocked_readers, &target_urwlock->rw_blocked_readers); + while (!tcmpset_32(&target_urwlock->rw_blocked_readers, + blocked_readers, (blocked_readers - 1))) { + __get_user(blocked_readers, &target_urwlock->rw_blocked_reader= s); + } + if (blocked_readers =3D=3D 1) { + /* clear read contention bit */ + __get_user(state, &target_urwlock->rw_state); + while (!tcmpset_32(&target_urwlock->rw_state, state, + state & ~TARGET_URWLOCK_READ_WAITERS)) { + __get_user(state, &target_urwlock->rw_state); + } + } + if (is_error(ret)) { + /* tcmpset_32 operates on the target memory, so don't double c= opy */ + unlock_user_struct(target_urwlock, target_addr, 0); + return ret; + } + } +#endif /* _UMTX_OPTIMIZED */ +} + +abi_long freebsd_rw_wrlock(abi_ulong target_addr, long fflag, size_t tsz, + void *t) +{ +#ifdef _UMTX_OPTIMIZED + if (!access_ok(VERIFY_WRITE, target_addr, sizeof(struct target_urwlock= ))) { + return -TARGET_EFAULT; + } + + return optimized_umtx_op(target_addr, UMTX_OP_RW_WRLOCK, fflag, + (void *)(uintptr_t)tsz, t); +#else + struct target_urwlock *target_urwlock; + uint32_t blocked_readers, blocked_writers; + uint32_t state; + abi_long ret; + + if (!lock_user_struct(VERIFY_WRITE, target_urwlock, target_addr, 0)) { + return -TARGET_EFAULT; + } + blocked_readers =3D 0; + for (;;) { + __get_user(state, &target_urwlock->rw_state); + while (!(state & TARGET_URWLOCK_WRITE_OWNER) && + TARGET_URWLOCK_READER_COUNT(state) =3D=3D 0) { + if (tcmpset_32(&target_urwlock->rw_state, state, + state | TARGET_URWLOCK_WRITE_OWNER)) { + unlock_user_struct(target_urwlock, target_addr, 1); + return 0; + } + __get_user(state, &target_urwlock->rw_state); + } + + if (!(state & (TARGET_URWLOCK_WRITE_OWNER | + TARGET_URWLOCK_WRITE_WAITERS)) && + blocked_readers !=3D 0) { + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%x, NULL, NULL)\n", + __func__, &target_urwlock->rw_state, UMTX_OP_WAKE, + tswap32(state)); + ret =3D get_errno(safe__umtx_op(&target_urwlock->rw_state, + UMTX_OP_WAKE, INT_MAX, NULL, NULL)); + unlock_user_struct(target_urwlock, target_addr, ret =3D=3D 0); + return ret; + } + /* re-read the state */ + __get_user(state, &target_urwlock->rw_state); + + /* and set TARGET_URWLOCK_WRITE_WAITERS */ + while (((state & TARGET_URWLOCK_WRITE_OWNER) || + TARGET_URWLOCK_READER_COUNT(state) !=3D 0) && + (state & TARGET_URWLOCK_WRITE_WAITERS) =3D=3D 0) { + if (tcmpset_32(&target_urwlock->rw_state, state, + state | TARGET_URWLOCK_WRITE_WAITERS)) { + break; + } + __get_user(state, &target_urwlock->rw_state); + } + + /* contention bit is set, increase write waiter count */ + __get_user(blocked_writers, &target_urwlock->rw_blocked_writers); + while (!tcmpset_32(&target_urwlock->rw_blocked_writers, + blocked_writers, blocked_writers + 1)) { + __get_user(blocked_writers, &target_urwlock->rw_blocked_writer= s); + } + + /* sleep */ + ret =3D 0; + while ((state & TARGET_URWLOCK_WRITE_OWNER) || + (TARGET_URWLOCK_READER_COUNT(state) !=3D 0)) { + unlock_user_struct(target_urwlock, target_addr, 1); + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%x(0x%x), NULL, NULL= )\n", + __func__, &target_urwlock->rw_blocked_writers, + UMTX_OP_WAIT_UINT, tswap32(state), + target_urwlock->rw_state); + ret =3D _umtx_wait_uint(&target_urwlock->rw_state, + tswap32(state), tsz, t, __func__); + if (is_error(ret)) { + if (!lock_user_struct(VERIFY_WRITE, target_urwlock, + target_addr, 0)) { + return ret; + } + goto wrlock_decrement; + } + if (!lock_user_struct(VERIFY_WRITE, target_urwlock, target_add= r, + 0)) { + return -TARGET_EFAULT; + } + __get_user(state, &target_urwlock->rw_state); + } + + /* decrease the write waiter count */ +wrlock_decrement: + __get_user(blocked_writers, &target_urwlock->rw_blocked_writers); + while (!tcmpset_32(&target_urwlock->rw_blocked_writers, + blocked_writers, (blocked_writers - 1))) { + __get_user(blocked_writers, &target_urwlock->rw_blocked_writer= s); + } + if (blocked_writers =3D=3D 1) { + /* clear write contention bit */ + __get_user(state, &target_urwlock->rw_state); + while (!tcmpset_32(&target_urwlock->rw_state, state, + state & ~TARGET_URWLOCK_WRITE_WAITERS)) { + __get_user(state, &target_urwlock->rw_state); + } + __get_user(blocked_readers, &target_urwlock->rw_blocked_reader= s); + } else { + blocked_readers =3D 0; + } + if (is_error(ret)) { + /* tcmpset_32 operates on the target memory, so don't double c= opy */ + unlock_user_struct(target_urwlock, target_addr, 0); + return ret; + } + } +#endif /* _UMTX_OPTIMIZED */ +} + +abi_long freebsd_rw_unlock(abi_ulong target_addr) +{ +#ifdef _UMTX_OPTIMIZED + if (!access_ok(VERIFY_WRITE, target_addr, sizeof(struct target_urwlock= ))) { + return -TARGET_EFAULT; + } + + return optimized_umtx_op(target_addr, UMTX_OP_RW_UNLOCK, 0, NULL, NULL= ); +#else + struct target_urwlock *target_urwlock; + uint32_t flags, state, count =3D 0; + + if (!lock_user_struct(VERIFY_WRITE, target_urwlock, target_addr, 0)) { + return -TARGET_EFAULT; + } + + __get_user(flags, &target_urwlock->rw_flags); + __get_user(state, &target_urwlock->rw_state); + + if (state & TARGET_URWLOCK_WRITE_OWNER) { + for (;;) { + if (!tcmpset_32(&target_urwlock->rw_state, state, + state & ~TARGET_URWLOCK_WRITE_OWNER)) { + /* + * Update the state here because we want to make sure that + * another thread didn't unste the flag from underneath us. + * If they did, we throw EPERM as the kernel does. + */ + __get_user(state, &target_urwlock->rw_state); + if (!(state & TARGET_URWLOCK_WRITE_OWNER)) { + unlock_user_struct(target_urwlock, target_addr, 1); + return -TARGET_EPERM; + } + } else { + break; + } + } + } else if (TARGET_URWLOCK_READER_COUNT(state) !=3D 0) { + /* decrement reader count */ + for (;;) { + if (!tcmpset_32(&target_urwlock->rw_state, state, (state - 1)= )) { + /* + * Just as in the branch above; we update the state here b= ecause + * we want to make sure the reader count didn't hit 0 whil= e we + * are still trying to decrement this. The kernel also ret= urns + * EPERM here. + */ + __get_user(state, &target_urwlock->rw_state); + if (TARGET_URWLOCK_READER_COUNT(state) =3D=3D 0) { + unlock_user_struct(target_urwlock, target_addr, 1); + return -TARGET_EPERM; + } + } else { + break; + } + } + } else { + unlock_user_struct(target_urwlock, target_addr, 1); + return -TARGET_EPERM; + } + + if (!(flags & TARGET_URWLOCK_PREFER_READER)) { + if (state & TARGET_URWLOCK_WRITE_WAITERS) { + count =3D 1; + } else if (state & TARGET_URWLOCK_READ_WAITERS) { + count =3D INT_MAX; + } + } else { + if (state & TARGET_URWLOCK_READ_WAITERS) { + count =3D INT_MAX; + } else if (state & TARGET_URWLOCK_WRITE_WAITERS) { + count =3D 1; + } + } + + /* rw_state used below as key only */ + unlock_user_struct(target_urwlock, target_addr, 1); + if (count !=3D 0) { + DEBUG_UMTX(" %s: _umtx_op(%p, %d, 0x%x, NULL, NULL)\n", + __func__, &target_urwlock->rw_state, UMTX_OP_WAKE, count); + return get_errno(safe__umtx_op(&target_urwlock->rw_state, UMTX_OP_= WAKE, + count, NULL, NULL)); + } else { + return 0; + } +#endif /* _UMTX_OPTIMIZED */ +} + +abi_long +freebsd_umtx_shm(abi_ulong target_addr, long fflag) +{ + + return get_errno(safe__umtx_op(NULL, QEMU_UMTX_OP(UMTX_OP_SHM), fflag, + g2h_untagged(target_addr), NULL)); +} + +abi_long +freebsd_umtx_robust_list(abi_ulong target_addr, size_t rbsize) +{ +#ifdef _UMTX_OPTIMIZED + struct target_umtx_robust_lists_params *tparams; + struct umtx_robust_lists_params hparams; + abi_long error; + + if (rbsize < sizeof(*tparams)) { + return -TARGET_EINVAL; + } + + if (!lock_user_struct(VERIFY_READ, tparams, target_addr, 1)) { + return -TARGET_EFAULT; + } + + hparams.robust_list_offset =3D + (uintptr_t)g2h_untagged(tparams->robust_list_offset); + hparams.robust_priv_list_offset =3D + (uintptr_t)g2h_untagged(tparams->robust_priv_list_offset); + hparams.robust_inact_offset =3D + (uintptr_t)g2h_untagged(tparams->robust_inact_offset); + + error =3D optimized_umtx_op(0, UMTX_OP_ROBUST_LISTS, sizeof(hparams), + &hparams, NULL); + unlock_user_struct(tparams, target_addr, 0); + return error; +#else + gemu_log("safe__umtx_op(..., UMTX_OP_ROBUST_LISTS. ...) not supported= \n"); + return -TARGET_EOPNOTSUPP; +#endif +} + +abi_long do_freebsd_thr_new(CPUArchState *env, + abi_ulong target_param_addr, int32_t param_size) +{ + new_freebsd_thread_info_t info; + pthread_attr_t attr; + TaskState *ts; + CPUArchState *new_env; + CPUState *new_cpu; + struct target_freebsd_thr_param *target_param; + abi_ulong target_rtp_addr; + struct target_freebsd_rtprio *target_rtp; + struct rtprio *rtp_ptr, rtp; + CPUState *cpu =3D env_cpu(env); + TaskState *parent_ts =3D (TaskState *)cpu->opaque; + sigset_t sigmask; + struct sched_param sched_param; + int sched_policy; + int ret =3D 0; + + memset(&info, 0, sizeof(info)); + + if (!lock_user_struct(VERIFY_READ, target_param, target_param_addr, 1)= ) { + return -TARGET_EFAULT; + } + info.param.start_func =3D tswapal(target_param->start_func); + info.param.arg =3D tswapal(target_param->arg); + info.param.stack_base =3D tswapal(target_param->stack_base); + info.param.stack_size =3D tswapal(target_param->stack_size); + info.param.tls_base =3D tswapal(target_param->tls_base); + info.param.tls_size =3D tswapal(target_param->tls_size); + info.param.child_tid =3D tswapal(target_param->child_tid); + info.param.parent_tid =3D tswapal(target_param->parent_tid); + info.param.flags =3D tswap32(target_param->flags); + target_rtp_addr =3D info.param.rtp =3D tswapal(target_param->rtp); + unlock_user_struct(target_param, target_param_addr, 0); + + thr_self(&info.parent_tid); + + if (target_rtp_addr) { + if (!lock_user_struct(VERIFY_READ, target_rtp, target_rtp_addr, 1)= ) { + return -TARGET_EFAULT; + } + rtp.type =3D tswap16(target_rtp->type); + rtp.prio =3D tswap16(target_rtp->prio); + unlock_user_struct(target_rtp, target_rtp_addr, 0); + rtp_ptr =3D &rtp; + } else { + rtp_ptr =3D NULL; + } + + /* Create a new CPU instance. */ + ts =3D g_malloc0(sizeof(TaskState)); + init_task_state(ts); + + /* Grab a mutex so that thread setup appears atomic. */ + pthread_mutex_lock(new_freebsd_thread_lock_ptr); + + /* + * If this is our first additional thread, we need to ensure we + * generate code for parallel execution and flush old translations. + * Do this now so that the copy gets CF_PARALLEL too. + */ + if (!(cpu->tcg_cflags & CF_PARALLEL)) { + cpu->tcg_cflags |=3D CF_PARALLEL; + tb_flush__exclusive_or_serial(); + } + + new_env =3D cpu_copy(env); + + new_cpu =3D env_cpu(new_env); + new_cpu->opaque =3D ts; + ts->bprm =3D parent_ts->bprm; + ts->info =3D parent_ts->info; + ts->signal_mask =3D parent_ts->signal_mask; + ts->ts_tid =3D qemu_get_thread_id(); + + pthread_mutex_init(&info.mutex, NULL); + pthread_mutex_lock(&info.mutex); + pthread_cond_init(&info.cond, NULL); + info.env =3D new_env; + + /* XXX check return values... */ + pthread_attr_init(&attr); + pthread_attr_setstacksize(&attr, NEW_STACK_SIZE); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); + + if (rtp_ptr) { + rtp_to_schedparam(&rtp, &sched_policy, &sched_param); + pthread_attr_setschedpolicy(&attr, sched_policy); + pthread_attr_setschedparam(&attr, &sched_param); + } + + /* + * It is not safe to deliver signals until the child has finished + * initializing, so temporarily block all signals. + */ + sigfillset(&sigmask); + sigprocmask(SIG_BLOCK, &sigmask, &info.sigmask); + + ret =3D pthread_create(&info.thread, &attr, new_freebsd_thread_start, = &info); + + sigprocmask(SIG_SETMASK, &info.sigmask, NULL); + pthread_attr_destroy(&attr); + if (ret =3D=3D 0) { + /* Wait for the child to initialize. */ + pthread_cond_wait(&info.cond, &info.mutex); + } else { + /* Creation of new thread failed. */ + object_unparent(OBJECT(new_cpu)); + object_unref(OBJECT(new_cpu)); + g_free(ts); + ret =3D -host_to_target_errno(ret); + } + + pthread_mutex_unlock(&info.mutex); + pthread_cond_destroy(&info.cond); + pthread_mutex_destroy(&info.mutex); + pthread_mutex_unlock(new_freebsd_thread_lock_ptr); + + return ret; +} diff --git a/bsd-user/freebsd/os-thread.h b/bsd-user/freebsd/os-thread.h index d3f1f01b13..4258b24095 100644 --- a/bsd-user/freebsd/os-thread.h +++ b/bsd-user/freebsd/os-thread.h @@ -240,5 +240,357 @@ static inline abi_long do_freebsd_swapcontext(CPUArch= State *env, abi_ulong arg1, * undocumented _umtx_op(void *obj, int op, u_long val, void *uaddr, * void *target_time); */ +static inline abi_long do_freebsd__umtx_op(abi_ulong obj, int op, abi_ulon= g val, + abi_ulong uaddr, abi_ulong target_time) +{ + abi_long ret; +#ifndef _UMTX_OPTIMIZED + struct _umtx_time ut[2]; + struct timespec ts; + size_t utsz; + long tid; +#endif + + switch (op) { + case TARGET_UMTX_OP_WAIT: + /* args: obj *, val, (void *)sizeof(ut), ut * */ +#ifdef _UMTX_OPTIMIZED + if (target_time !=3D 0 && !access_ok(VERIFY_READ, target_time, uad= dr)) { + return -TARGET_EFAULT; + } + ret =3D freebsd_umtx_wait(obj, val, uaddr, + safe_g2h_untagged(target_time)); +#else + if (target_time !=3D 0) { + ret =3D t2h_freebsd_umtx_time(target_time, uaddr, ut, &utsz); + if (is_error(ret)) { + return ret; + } + ret =3D freebsd_umtx_wait(obj, tswapal(val), utsz, &ut); + } else { + ret =3D freebsd_umtx_wait(obj, tswapal(val), 0, NULL); + } +#endif + break; + + case TARGET_UMTX_OP_WAKE: + /* args: obj *, nr_wakeup */ + ret =3D freebsd_umtx_wake(obj, val); + break; + + case TARGET_UMTX_OP_MUTEX_LOCK: +#ifdef _UMTX_OPTIMIZED + if (target_time !=3D 0 && !access_ok(VERIFY_READ, target_time, uad= dr)) { + return -TARGET_EFAULT; + } + ret =3D freebsd_lock_umutex(obj, 0, safe_g2h_untagged(target_time)= , uaddr, + 0, val); +#else + ret =3D get_errno(thr_self(&tid)); + if (is_error(ret)) { + return ret; + } + if (target_time !=3D 0) { + ret =3D t2h_freebsd_umtx_time(target_time, uaddr, ut, &utsz); + if (is_error(ret)) { + return ret; + } + ret =3D freebsd_lock_umutex(obj, tid, ut, utsz, 0, tswapal(val= )); + } else { + ret =3D freebsd_lock_umutex(obj, tid, NULL, 0, 0, tswapal(val)= ); + } +#endif + break; + + case TARGET_UMTX_OP_MUTEX_UNLOCK: +#ifdef _UMTX_OPTIMIZED + ret =3D freebsd_unlock_umutex(obj, 0); +#else + ret =3D get_errno(thr_self(&tid)); + if (is_error(ret)) { + return ret; + } + ret =3D freebsd_unlock_umutex(obj, tid); +#endif + break; + + case TARGET_UMTX_OP_MUTEX_TRYLOCK: +#ifdef _UMTX_OPTIMIZED + ret =3D freebsd_lock_umutex(obj, 0, NULL, 0, TARGET_UMUTEX_TRY, va= l); +#else + ret =3D get_errno(thr_self(&tid)); + if (is_error(ret)) { + return ret; + } + ret =3D freebsd_lock_umutex(obj, tid, NULL, 0, TARGET_UMUTEX_TRY, + tswapal(val)); +#endif + break; + + case TARGET_UMTX_OP_MUTEX_WAIT: +#ifdef _UMTX_OPTIMIZED + if (target_time !=3D 0 && !access_ok(VERIFY_READ, target_time, uad= dr)) { + return -TARGET_EFAULT; + } + ret =3D freebsd_lock_umutex(obj, 0, safe_g2h_untagged(target_time)= , uaddr, + TARGET_UMUTEX_WAIT, val); +#else + ret =3D get_errno(thr_self(&tid)); + if (is_error(ret)) { + return ret; + } + if (target_time !=3D 0) { + ret =3D t2h_freebsd_umtx_time(target_time, uaddr, ut, &utsz); + if (is_error(ret)) { + return ret; + } + ret =3D freebsd_lock_umutex(obj, tid, ut, utsz, TARGET_UMUTEX_= WAIT, + tswapal(val)); + } else { + ret =3D freebsd_lock_umutex(obj, tid, NULL, 0, TARGET_UMUTEX_W= AIT, + tswapal(val)); + } +#endif + break; + + case TARGET_UMTX_OP_MUTEX_WAKE: + /* Don't need to do access_ok(). */ + ret =3D freebsd_umtx_mutex_wake(obj, val); + break; + + case TARGET_UMTX_OP_SET_CEILING: + ret =3D 0; /* XXX quietly ignore these things for now */ + break; + + case TARGET_UMTX_OP_CV_WAIT: +#ifdef _UMTX_OPTIMIZED + if (target_time !=3D 0 && !access_ok(VERIFY_READ, target_time, uad= dr)) { + return -TARGET_EFAULT; + } + ret =3D freebsd_cv_wait(obj, uaddr, safe_g2h_untagged(target_time)= , val); +#else + /* + * Initialization of the struct conv is done by + * bzero'ing everything in userland. + */ + if (target_time !=3D 0) { + if (t2h_freebsd_timespec(&ts, target_time)) { + return -TARGET_EFAULT; + } + ret =3D freebsd_cv_wait(obj, uaddr, &ts, val); + } else { + ret =3D freebsd_cv_wait(obj, uaddr, NULL, val); + } +#endif + break; + + case TARGET_UMTX_OP_CV_SIGNAL: + /* + * XXX + * User code may check if c_has_waiters is zero. Other + * than that it is assume that user code doesn't do + * much with the struct conv fields and is pretty + * much opauque to userland. + */ + ret =3D freebsd_cv_signal(obj); + break; + + case TARGET_UMTX_OP_CV_BROADCAST: + /* + * XXX + * User code may check if c_has_waiters is zero. Other + * than that it is assume that user code doesn't do + * much with the struct conv fields and is pretty + * much opauque to userland. + */ + ret =3D freebsd_cv_broadcast(obj); + break; + + case TARGET_UMTX_OP_WAIT_UINT: +#ifdef _UMTX_OPTIMIZED + if (target_time !=3D 0 && !access_ok(VERIFY_READ, target_time, uad= dr)) { + return -TARGET_EFAULT; + } + ret =3D freebsd_umtx_wait_uint(obj, val, uaddr, + safe_g2h_untagged(target_time)); +#else + if (!access_ok(VERIFY_READ, obj, sizeof(abi_ulong))) { + return -TARGET_EFAULT; + } + /* args: obj *, val, (void *)sizeof(ut), ut * */ + if (target_time !=3D 0) { + ret =3D t2h_freebsd_umtx_time(target_time, uaddr, ut, &utsz); + if (is_error(ret)) { + return ret; + } + ret =3D freebsd_umtx_wait_uint(obj, tswap32((uint32_t)val), + utsz, &ut); + } else { + ret =3D freebsd_umtx_wait_uint(obj, tswap32((uint32_t)val), 0,= NULL); + } +#endif + break; + + case TARGET_UMTX_OP_WAIT_UINT_PRIVATE: +#ifdef _UMTX_OPTIMIZED + if (target_time !=3D 0 && !access_ok(VERIFY_READ, target_time, uad= dr)) { + return -TARGET_EFAULT; + } + ret =3D freebsd_umtx_wait_uint_private(obj, val, uaddr, + safe_g2h_untagged(target_time)); +#else + if (!access_ok(VERIFY_READ, obj, sizeof(abi_ulong))) { + return -TARGET_EFAULT; + } + /* args: obj *, val, (void *)sizeof(ut), ut * */ + if (target_time !=3D 0) { + ret =3D t2h_freebsd_umtx_time(target_time, uaddr, ut, &utsz); + if (is_error(ret)) { + return ret; + } + ret =3D freebsd_umtx_wait_uint_private(obj, tswap32((uint32_t)= val), + utsz, &ut); + } else { + ret =3D freebsd_umtx_wait_uint_private(obj, tswap32((uint32_t)= val), + 0, NULL); + } +#endif + break; + + case TARGET_UMTX_OP_WAKE_PRIVATE: + /* Don't need to do access_ok(). */ + ret =3D freebsd_umtx_wake_private(obj, val); + break; + + case TARGET_UMTX_OP_RW_RDLOCK: +#ifdef _UMTX_OPTIMIZED + if (target_time !=3D 0 && !access_ok(VERIFY_READ, target_time, uad= dr)) { + return -TARGET_EFAULT; + } + ret =3D freebsd_rw_rdlock(obj, val, uaddr, + safe_g2h_untagged(target_time)); +#else + if (target_time !=3D 0) { + ret =3D t2h_freebsd_umtx_time(target_time, uaddr, ut, &utsz); + if (is_error(ret)) { + return ret; + } + ret =3D freebsd_rw_rdlock(obj, val, utsz, &ut); + } else { + ret =3D freebsd_rw_rdlock(obj, val, 0, NULL); + } +#endif + break; + + case TARGET_UMTX_OP_RW_WRLOCK: +#ifdef _UMTX_OPTIMIZED + if (target_time !=3D 0 && !access_ok(VERIFY_READ, target_time, uad= dr)) { + return -TARGET_EFAULT; + } + ret =3D freebsd_rw_wrlock(obj, val, uaddr, + safe_g2h_untagged(target_time)); +#else + if (target_time !=3D 0) { + ret =3D t2h_freebsd_umtx_time(target_time, uaddr, ut, &utsz); + if (is_error(ret)) { + return ret; + } + ret =3D freebsd_rw_wrlock(obj, val, utsz, &ut); + } else { + ret =3D freebsd_rw_wrlock(obj, val, 0, NULL); + } +#endif + break; + + case TARGET_UMTX_OP_RW_UNLOCK: + ret =3D freebsd_rw_unlock(obj); + break; + +#ifdef UMTX_OP_MUTEX_WAKE2 + case TARGET_UMTX_OP_MUTEX_WAKE2: + ret =3D freebsd_umtx_mutex_wake2(obj, val); + break; +#endif /* UMTX_OP_MUTEX_WAKE2 */ + +#ifdef UMTX_OP_NWAKE_PRIVATE + case TARGET_UMTX_OP_NWAKE_PRIVATE: + ret =3D freebsd_umtx_nwake_private(obj, val); + break; +#endif /* UMTX_OP_NWAKE_PRIVATE */ + + case TARGET_UMTX_OP_SEM2_WAIT: + /* args: obj *, val, (void *)sizeof(ut), ut * */ +#ifdef _UMTX_OPTIMIZED + if (target_time !=3D 0 && !access_ok( + (uaddr > sizeof(struct target_freebsd__umtx_time) ? VERIFY_WRI= TE : + VERIFY_READ), target_time, uaddr)) { + return -TARGET_EFAULT; + } + ret =3D freebsd_umtx_sem2_wait(obj, uaddr, + safe_g2h_untagged(target_time)); +#else + if (target_time !=3D 0) { + ret =3D t2h_freebsd_umtx_time(target_time, uaddr, ut, &utsz); + if (is_error(ret)) { + return ret; + } + /* Kernel writes out the ut[1] if utsz >=3D _umtx_time + times= pec. */ + ret =3D freebsd_umtx_sem2_wait(obj, utsz, ut); + if (ret =3D=3D -TARGET_EINTR && (ut[0]._flags & UMTX_ABSTIME) = =3D=3D 0 && + utsz >=3D sizeof(struct target_freebsd__umtx_time) + + sizeof(struct target_freebsd_timespec)) { + abi_ulong cret; + + cret =3D h2t_freebsd_timespec(target_time + + sizeof(struct target_freebsd__umtx_time), &ut[1]._time= out); + if (is_error(cret)) { + ret =3D cret; + } + } + } else { + ret =3D freebsd_umtx_sem2_wait(obj, 0, NULL); + } +#endif + break; + + case TARGET_UMTX_OP_SEM2_WAKE: + /* Don't need to do access_ok(). */ + ret =3D freebsd_umtx_sem2_wake(obj); + break; + case TARGET_UMTX_OP_SEM_WAIT: + /* args: obj *, val, (void *)sizeof(ut), ut * */ +#ifdef _UMTX_OPTIMIZED + if (target_time !=3D 0 && !access_ok(VERIFY_READ, target_time, uad= dr)) { + return -TARGET_EFAULT; + } + ret =3D freebsd_umtx_sem_wait(obj, uaddr, safe_g2h_untagged(target= _time)); +#else + if (target_time !=3D 0) { + ret =3D t2h_freebsd_umtx_time(target_time, uaddr, ut, &utsz); + if (is_error(ret)) { + return ret; + } + ret =3D freebsd_umtx_sem_wait(obj, utsz, ut); + } else { + ret =3D freebsd_umtx_sem_wait(obj, 0, NULL); + } +#endif + break; + + case TARGET_UMTX_OP_SEM_WAKE: + /* Don't need to do access_ok(). */ + ret =3D freebsd_umtx_sem_wake(obj); + break; + case TARGET_UMTX_OP_SHM: + ret =3D freebsd_umtx_shm(uaddr, val); + break; + case TARGET_UMTX_OP_ROBUST_LISTS: + ret =3D freebsd_umtx_robust_list(uaddr, val); + break; + default: + return -TARGET_EINVAL; + } + return ret; +} =20 #endif /* FREEBSD_OS_THREAD_H */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097697; cv=none; d=zohomail.com; s=zohoarc; b=S6JUwNCT7fMQElZF8S621FCuMS5Z+5R3uTj9nnHJzHXXhcE6fcc0qqK6arRYqe06ZzbYa7QAxe4JAbCEwvSWMVjLCzW274zyj83wZ/dNMAudrz3vJRehUp77qrUgB7bQsMHgSUJCc5cmpdMfJbo1iFWl12WIUHeOjEYfaevab4k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097697; h=Content-Type: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=Azsv3qhLbzptctKWbtkhLj4TL+z8AzUXZNo0KfCAEzI=; b=T5RYGfgmiSZkFehV9fJGJYN3m4RhzjVhkDDs7LPrDwsNHRY1Cbg0OgSNVje4/BzUxeU2XHC6NEFp6ft0uUZ/kGJVh/TjW5LMW2xDmZ/Ji5YbHD87JBVmZjdTCAtTvFF1ZK06ADGJW4XTtdOCL5b+oWhcL+JM18h41HxoBf1wkng= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097691966870.8126907641432; Tue, 18 Aug 2026 17:01:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThW-0003y9-ES; Tue, 18 Aug 2026 19:58:38 -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 1wwThT-0003fL-UX for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:36 -0400 Received: from mail-oi1-x229.google.com ([2607:f8b0:4864:20::229]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwThR-0005JB-Tn for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:35 -0400 Received: by mail-oi1-x229.google.com with SMTP id 5614622812f47-4a40bcc8d69so362450b6e.3 for ; Tue, 18 Aug 2026 16:58:33 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097512; x=1787702312; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Azsv3qhLbzptctKWbtkhLj4TL+z8AzUXZNo0KfCAEzI=; b=SHdvO+kFjiKWZhqDM8LbBaFhE+8BnQbRC/DOTQZanEz8ptkJ+wHO4aXOgwO5d1JyDw x301/z1vWpcLjCAuIbI3PTupZH1OZzzPr626F0GMqAuB4IbEZQhvLJY7xDEU9JMwVPhV MwXddgYZyeVU65m0KT5HrbSKIOEhF7UgHf75qZgXTKuGs28o/+b/JqAjq3qQ3spPmaXQ NBdLAWoJzKHQEYrE0WGBTPf7f1aFSmY7vuyMQ7KQqylFLjogxZtTnGfsj2a/jAB0kVUU GXnAr6kBn/uydcBWRrOHozdMXakURzwIgFgf6bnS7/vxdk+BBG9id1+iSBOnGwa+iXBA Uh+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097512; x=1787702312; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Azsv3qhLbzptctKWbtkhLj4TL+z8AzUXZNo0KfCAEzI=; b=TA8y+NAKiz0F3S2S6TDJwFLE8a+HOnd9gYcUEfN4zFpb8rLfXWGQXQj7erDUolLC6M go9MmnlUjoG2u45OUO/HrPpiW5eJdFPHMg0Osn1qt9GmRk3AndPhc/D8Od07wLYDpe3S 4yHSVJP1h7kb+jaiOozi2amw8HGY0lFLaFWHOBPR3xVxx54akHmaoCWzOuRGMPpOD/ae fxL1Ds1sRJGpqSyfpSf+revdSfZEvasRGqOu+0JF063Lhuj1VZOQZe2H+Q6sWSICclEn K49DIP5T3VO3CQwpv7Qa3Y/67Uz1r5NA+MNnbB3Nqg88IgXEg6HMWQZzOxyqoKDOC9P/ izZg== X-Gm-Message-State: AOJu0Yy+Ocm5aTydIRCm/2w5u7bN9nkuiOap1y9j+iHMROvm0KrBRAQe Q2Ftim9hHVVY4miTG0JluCMBvd1gYhL+XOmuTSnqFe5oHeL45MW/0AmQhsHScKHk2BQ= X-Gm-Gg: AR+sD13kuepasCKdWUtBzoThnqXRteWoiq0p/ShKZ16hgwP6ijyyCao9ZqiXj6fwpym ZqH37Hk0Ar8slXj/keOY1cTY3VSJhJpbltleje+WisUaFKMcDBcdyz3Umqp3UiUd5fpdHx/XAEs X9MbgO1ZhgCq/9TX00BUZ5XB7+gxOEYb2NNUEAqjTP3Npjn6qiEQHDDsGGkiAVHS9lJdk5agOOz cbrtfykwxOJBy7zgb/IkKKqwXSApGn2h35FiumYdh/1l8UW/GJ1c3UHl8NCVGEtWjbm1aEkCndu TW30N6y7YVRkDRwGbWv/TWXTpWEnZyroe0tw9VCVc460zixchYlnuD5edwPO/TRhvVPrSJwz9NP l0Fnt+ma9mV6tVsqQQo87o4uhcT1mksSxzKWxNm8AjatPpsH9/mfG6YAdtpODNgYdT5568AFAvr igS2YVoRHMr/ug8EVd4pWEZCGyJCxFUe3eTQzzuV6xb2LR5Q4= X-Received: by 2002:a05:6808:1456:b0:4b2:8e21:622e with SMTP id 5614622812f47-4b2bc93d92amr388716b6e.1.1787097512197; Tue, 18 Aug 2026 16:58:32 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:24 -0600 Subject: [PATCH v4 31/40] bsd-user: Add thread system call dispatch MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-31-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Kyle Evans , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2758; i=imp@bsdimp.com; h=from:subject:message-id; bh=PWFAmfJfGmjr0/aUNssCFME2ZDWecQP0pJwLKNnAxtM=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFQLJ3bpgwtJiCxjb0vkuujAeVkmsFZAMFrx XrAkIfHk1eJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxUBsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQBqaQ/+L6jU/uhhG6V8gKypS5y9/WOGSg1ruUa sXgFHhDxPcwbK1ltJgLJCHP5dgYIbZboAPSU/C9BBNtJpagDa/AO0MHJAhstBqWfPr5lJcG4W5o NcEtOGxauk34oBBkrLn2WRithRviIis8jjwgauG2K8rX7kJZXPP4S1jfJjer3sav/VFRCXRI0rs joZ1P1oCKIxlwh0gq4ejwWbijtQUjVYOO+U0WFIHKsMcboDQHerkfbkxiWC3fXMiWaZJ3RojelR o/1fN1pWsf+bTEMEfdXXwIc8QjqAmo2uVhHOjorxbmnoMYmvHIsiX46nZ8mY1xXitaVn/vq9nIR 54iqYsz4/l4y8tZk504Gy4hbqKuhF6iIs5Uv4PTNEx4POXwOK7oxVbZORwhrd9gnVG+woPoZaXh +NOzmyOqiMjCnBgNprxjqDi4H8i7LlnJWBpNg884Tl5fd6CxpRorE6AXaxUTGLK1X8WQa/9x2vl zWbxHGK9nYhDSFKcr0nqXyo7u+U1w6FZA5801mSs83ceTB3sgygGeXtXKYZVkI3u6qEhcwSiNXj N/gJUZ1nF+D9ZNU/Fwu48IT03E+CqLn631ao/iNAwHpXDsYrpo01pgBNP/r77nryEmS0+xMyjvD cOJGQS3x8Y2zVxMjolMQetphiNd+aAzpyxrU7Zt3kbcTi27GWjoI= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::229; envelope-from=imp@bsdimp.com; helo=mail-oi1-x229.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097698182158500 Wire up thread-related system calls: thr_new, thr_set_name, thr_self, thr_suspend, thr_wake, thr_kill, thr_kill2, thr_exit, rtprio_thread, getcontext, setcontext, swapcontext, and _umtx_op. Signed-off-by: Stacey Son Signed-off-by: Kyle Evans Assisted-by: Claude Opus 4.6 (1M context) Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-syscall.c | 55 +++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 55 insertions(+) diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c index f2c3ff25e8..0c729da0ab 100644 --- a/bsd-user/freebsd/os-syscall.c +++ b/bsd-user/freebsd/os-syscall.c @@ -1293,6 +1293,61 @@ static abi_long freebsd_syscall(CPUArchState *env, i= nt num, abi_long arg1, ret =3D do_freebsd_setfib(arg1); break; =20 + /* + * thread system calls + */ + case TARGET_FREEBSD_NR_thr_new: /* thr_new(2) */ + ret =3D do_freebsd_thr_new(env, arg1, arg2); + break; + + case TARGET_FREEBSD_NR_thr_set_name: /* thr_set_name(2) */ + ret =3D do_freebsd_thr_set_name(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_thr_self: /* thr_self(2) */ + ret =3D do_freebsd_thr_self(arg1); + break; + + case TARGET_FREEBSD_NR_thr_suspend: /* thr_suspend(2) */ + ret =3D do_freebsd_thr_suspend(arg1); + break; + + case TARGET_FREEBSD_NR_thr_wake: /* thr_wake(2) */ + ret =3D do_freebsd_thr_wake(arg1); + break; + + case TARGET_FREEBSD_NR_thr_kill: /* thr_kill(2) */ + ret =3D do_freebsd_thr_kill(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_thr_kill2: /* thr_kill2(2) */ + ret =3D do_freebsd_thr_kill2(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_thr_exit: /* thr_exit(2) */ + ret =3D do_freebsd_thr_exit(env, arg1); + break; + + case TARGET_FREEBSD_NR_rtprio_thread: /* rtprio_thread(2) */ + ret =3D do_freebsd_rtprio_thread(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_getcontext: /* getcontext(2) */ + ret =3D do_freebsd_getcontext(env, arg1); + break; + + case TARGET_FREEBSD_NR_setcontext: /* setcontext(2) */ + ret =3D do_freebsd_setcontext(env, arg1); + break; + + case TARGET_FREEBSD_NR_swapcontext: /* swapcontext(2) */ + ret =3D do_freebsd_swapcontext(env, arg1, arg2); + break; + + case TARGET_FREEBSD_NR__umtx_op: /* undocumented */ + ret =3D do_freebsd__umtx_op(arg1, arg2, arg3, arg4, arg5); + break; + /* * sys{ctl, arch, call} */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097595; cv=none; d=zohomail.com; s=zohoarc; b=KhSrmNMiETLJFi1oH1mUaXZV6Hexsh1I1GLN9C12fCJx7csQIgaNTH36zbAQACMRpeMncXADIS0gXr0dGDUlaH1AgXh092pJpQdXRFnxczd+ZACAnSomUrcki21pPNoIvQh4/4AXL+d76SHZyDIt/oc1tCPgL7dsU/hGDLiKBWw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097595; h=Content-Type: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=+vIRP7vHdDkTJIM07J0XPiTI0WNHgFjIkgYXGcoTOMw=; b=NUEnSgFGBILbEGhQSRZPvg3aNE0hSF9qxffjfb4Y6eclcOvBIAcnHyXUBoL3SdkewmUadUjgOM7anNGGYoLn+kxQjYTafjx6Pgs1tjN19qIC7dcISTzJEkmbxchlVR0GBKGl+DGqDaR6kHAw8e7WFLrNu0ELNutRQnR7chWSt18= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097595751486.58126305829614; Tue, 18 Aug 2026 16:59:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThX-000454-1Q; Tue, 18 Aug 2026 19:58:39 -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 1wwThV-0003rg-J6 for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:37 -0400 Received: from mail-oa1-x2d.google.com ([2001:4860:4864:20::2d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwThT-0005JN-F8 for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:37 -0400 Received: by mail-oa1-x2d.google.com with SMTP id 586e51a60fabf-45171f2f608so360867fac.1 for ; Tue, 18 Aug 2026 16:58:35 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097514; x=1787702314; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=+vIRP7vHdDkTJIM07J0XPiTI0WNHgFjIkgYXGcoTOMw=; b=wSLfRiA1i6eInvkzH2tLmz04zyT3owpiplLQpq9rb3s2RUlWpRNttqAfIOfxEc8h9I L9feMSN2Hu9L+bY7RzWvAduwJ7Xd2vYt/h6J9xdNNuNaqcR74nlpCTG1lqsv+jdBCO6q 1qLMMbBFQuMXx6karn4jXlS2DyQol0uRDNsf9/vZmma50XZMlTWR/eweamIKMXM+A4r4 nHoJ20YJcXghri8FxvoeVkOHUTXnF6jewWkM9CA9FA7BBeX2BtdoZH/H3RoEPqhwC5x5 mJKu880Rfuq7dclOl9+q1kjCXyjkE95TVuv2gF01SuuoZYX14SqjnEi/vLjwpAQQp1tt CSVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097514; x=1787702314; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=+vIRP7vHdDkTJIM07J0XPiTI0WNHgFjIkgYXGcoTOMw=; b=m1z2eydpP/9xALBaRnUlDUOD717ei1RFY4+2NF1JXzlYr2D9cQTei8POgNwzWSxLt4 QhXl0XXih84fKDt2jwdxP4kpPupkWCdhYnwM/JcV/EhtZBOlu3UiNKhmZdrh5feZZhj2 P+4sd972wIlvVuANbthZsiH9U/jhIOUilibr1UZT1wETgMFYax/caosBYakTsODcJxzS TT43ZtvDPHXCuGqL+QPviF6OEiApyuZTZbc1AV4r5pTkSx8/1Zk6QO5XVO4nNx8vqr9x 6hEv9iSkylHslgkiDW848qpTWjmM2yhK+sBXBFGp684amr0tMEK6YdxPnExlVKnjnp6+ bIdw== X-Gm-Message-State: AOJu0YyhsqKJ1rQc+sMyDNViPl59Mv2F1RhDXxjuZagElMLuIpTByhA2 vAPLJgJfIqRt3hrJElelCggJCYMy8gd5BACmBDIbANmjM53xsKCjkPqo3YDOd7fCcx0= X-Gm-Gg: AR+sD13gas+4RkH9IxoUoA8qyrtK/XNH/qI1wW9W94vz0SAktevFgE01djURRB1kM8F Y5PCSnarbF6IoIsst1X8sF2tlJPScjsuALtr2fnSvG23Czi9lIVX1Vb6wpYEuZCQ5Wpa/svhSJW SRJebLJvRLm0ci14NcDUVy2Mz4u+whVUskCVVIscHnqxmR7FFM5qQX+wKyebW12g+HjJc1HfXs0 tosYXH5UhO5vVZnckdhz6aMdTVleAp7ikGIb8VLrsRN/FHURLvRk1i3u6plGmALNdr2P5Dzn7kt 3Azaow8HzDocsdRV868UI3VT8kNx4lA4z8kop+qp8kuPdTTZ5gSLi78LHFHKo/LuxU/phZvxU77 C6xeZJ/uXJYrsORQMJf6Sj/4uUXUMi/ZCoGxvsXX/wGbe3gYE7o9gkkmMdraGltI/2na0nmcA55 dOTGODyrgtYV0mtlyPcMu2KUh/m7yb2T4mgLQKiYXrqPUVk2o= X-Received: by 2002:a05:6808:c29c:b0:4a4:adaf:5570 with SMTP id 5614622812f47-4b2bc88560amr434811b6e.4.1787097514208; Tue, 18 Aug 2026 16:58:34 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:25 -0600 Subject: [PATCH v4 32/40] bsd-user: Add os-extattr.h with file and fd extattr functions MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-32-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=6777; i=imp@bsdimp.com; h=from:subject:message-id; bh=9YkJiVvIXG8lckaWBpyWlUTMGtly8iFSggR0diI9Fbo=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFS8s+PADlMRCHh8/KEdxZUvan+msZdgdIou ZBlclqENMeJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxUhsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQAu6hAAjy3eZf/bwJ92PVYCngrrsrH0p1FgiUT DA+zNt+6GANMO/EPjpBrX5EOGZ/S7DSPHwzoeYzgvzAvrCb4bdxHEUdW4S+BFWhOCK5C5TpC830 LdckOQUI9/Dea/OD59W6ZwJ0A4D+3dITJG6YhEzi+Fwogoa9qiT8z0cVLoaOoR2jHfR2M/nBvTl Odyf9sB+JfHUjVJeddIfv6i+Oyaw1w+gVDPT56H8AXfKGwIpA4OXZ/FXO2mrStePbT4JjlvnDFC fqqrhysyamHY655cF3cZ7q411tZRCWJmhHgKKQSxfvLm7D9Ji1S4R3cKOd0vPj1vCsSedypjjkS LIGn5wPhNu4UWXxposH1tUo0k8hhCcIX2yGgHvjyPZZQedSpAbGnmm4LZ5qyKThdpEb6y1m6w3t l3coBY7MDSnggIOOCr3JCfV89ZCLzCZ9ssCnDqRUBMqpXEfUiQVPNZFEfq8qgyKTK1cjQ2txn0d Eln52dSS5TCP0erS8DK5zzrRDyNtjJ/SzIwqZQQRslpfVrIbOJkSyT+MiPLJfVVvOCpM0hFBsIx /oEIPhLZ/cPTNwY2YUEB1vgYZA70mcf6MuZzAHl2tKomOEWfacHKCQY6+gQgyOjjSVXTQGCrBcN 6NK4hcf1ssHvIvLDil+5sOq3y8afMrV4DBNwWGZSPNzqITzauz6w= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2001:4860:4864:20::2d; envelope-from=imp@bsdimp.com; helo=mail-oa1-x2d.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097597556158501 Add the first part of extended attribute support: extattrctl, extattr_set_file, extattr_get_file, extattr_delete_file, extattr_set_fd, extattr_get_fd, and extattr_delete_fd. Signed-off-by: Stacey Son Assisted-by: Claude Opus 4.6 (1M context) Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-extattr.h | 208 ++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 208 insertions(+) diff --git a/bsd-user/freebsd/os-extattr.h b/bsd-user/freebsd/os-extattr.h new file mode 100644 index 0000000000..fb3ef27346 --- /dev/null +++ b/bsd-user/freebsd/os-extattr.h @@ -0,0 +1,208 @@ +/* + * FreeBSD extended attributes and ACL system call support + * + * Copyright (c) 2013 Stacey D. Son + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#include +#include + +/* extattrctl() */ +static inline abi_long do_freebsd_extattrctl(abi_ulong arg1, abi_ulong arg= 2, + abi_ulong arg3, abi_ulong arg= 4, + abi_ulong arg5) +{ + abi_long ret; + void *p, *a, *f; + + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + f =3D lock_user_string(arg3); + if (f =3D=3D NULL) { + unlock_user(p, arg1, 0); + return -TARGET_EFAULT; + } + a =3D lock_user_string(arg5); + if (a =3D=3D NULL) { + unlock_user(f, arg3, 0); + unlock_user(p, arg1, 0); + return -TARGET_EFAULT; + } + ret =3D get_errno(extattrctl(path(p), arg2, f, arg4, a)); + unlock_user(a, arg5, 0); + unlock_user(f, arg3, 0); + unlock_user(p, arg1, 0); + + return ret; +} + +/* extattr_set_file(2) */ +static inline abi_long do_freebsd_extattr_set_file(abi_long arg1, + abi_long arg2, + abi_long arg3, + abi_long arg4, + abi_long arg5) +{ + abi_long ret; + void *p, *a, *d; + + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + a =3D lock_user_string(arg3); + if (a =3D=3D NULL) { + unlock_user(p, arg1, 0); + return -TARGET_EFAULT; + } + d =3D lock_user(VERIFY_READ, arg4, arg5, 1); + if (d =3D=3D NULL) { + unlock_user(a, arg3, 0); + unlock_user(p, arg1, 0); + return -TARGET_EFAULT; + } + ret =3D get_errno(extattr_set_file(path(p), arg2, a, d, arg5)); + unlock_user(d, arg4, arg5); + unlock_user(a, arg3, 0); + unlock_user(p, arg1, 0); + + return ret; +} + +/* extattr_get_file(2) */ +static inline abi_long do_freebsd_extattr_get_file(abi_long arg1, + abi_long arg2, + abi_long arg3, + abi_long arg4, + abi_long arg5) +{ + abi_long ret; + void *p, *a, *d; + + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + a =3D lock_user_string(arg3); + if (a =3D=3D NULL) { + unlock_user(p, arg1, 0); + return -TARGET_EFAULT; + } + if (arg4 && arg5 > 0) { + d =3D lock_user(VERIFY_WRITE, arg4, arg5, 0); + if (d =3D=3D NULL) { + unlock_user(a, arg3, 0); + unlock_user(p, arg1, 0); + return -TARGET_EFAULT; + } + ret =3D get_errno(extattr_get_file(path(p), arg2, a, d, arg5)); + unlock_user(d, arg4, arg5); + } else { + ret =3D get_errno(extattr_get_file(path(p), arg2, a, NULL, arg5)); + } + unlock_user(a, arg3, 0); + unlock_user(p, arg1, 0); + + return ret; +} + +/* extattr_delete_file(2) */ +static inline abi_long do_freebsd_extattr_delete_file(abi_long arg1, + abi_long arg2, + abi_long arg3) +{ + abi_long ret; + void *p, *a; + + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + a =3D lock_user_string(arg3); + if (a =3D=3D NULL) { + unlock_user(p, arg1, 0); + return -TARGET_EFAULT; + } + ret =3D get_errno(extattr_delete_file(path(p), arg2, a)); + unlock_user(a, arg3, 0); + unlock_user(p, arg1, 0); + + return ret; +} + +/* extattr_set_fd(2) */ +static inline abi_long do_freebsd_extattr_set_fd(abi_long arg1, abi_long a= rg2, + abi_long arg3, abi_long a= rg4, + abi_long arg5) +{ + abi_long ret; + void *a, *d; + + a =3D lock_user_string(arg3); + if (a =3D=3D NULL) { + return -TARGET_EFAULT; + } + d =3D lock_user(VERIFY_READ, arg4, arg5, 1); + if (d =3D=3D NULL) { + unlock_user(a, arg3, 0); + return -TARGET_EFAULT; + } + ret =3D get_errno(extattr_set_fd(arg1, arg2, a, d, arg5)); + unlock_user(d, arg4, arg5); + unlock_user(a, arg3, 0); + + return ret; +} + +/* extattr_get_fd(2) */ +static inline abi_long do_freebsd_extattr_get_fd(abi_long arg1, abi_long a= rg2, + abi_long arg3, abi_long a= rg4, + abi_long arg5) +{ + abi_long ret; + void *a, *d; + + a =3D lock_user_string(arg3); + if (a =3D=3D NULL) { + return -TARGET_EFAULT; + } + + if (arg4 && arg5 > 0) { + d =3D lock_user(VERIFY_WRITE, arg4, arg5, 0); + if (d =3D=3D NULL) { + unlock_user(a, arg3, 0); + return -TARGET_EFAULT; + } + ret =3D get_errno(extattr_get_fd(arg1, arg2, a, d, arg5)); + unlock_user(d, arg4, arg5); + } else { + ret =3D get_errno(extattr_get_fd(arg1, arg2, a, NULL, arg5)); + } + unlock_user(a, arg3, 0); + + return ret; +} + +/* extattr_delete_fd(2) */ +static inline abi_long do_freebsd_extattr_delete_fd(abi_long arg1, + abi_long arg2, + abi_long arg3) +{ + abi_long ret; + void *a; + + a =3D lock_user_string(arg3); + if (a =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D get_errno(extattr_delete_fd(arg1, arg2, a)); + unlock_user(a, arg3, 0); + + return ret; +} + + +#endif /* FREEBSD_OS_EXTATTR_H */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097707; cv=none; d=zohomail.com; s=zohoarc; b=ZVuks0Ryg4WF6STpJnDqCdBSIk2RhI/awqgpyGmtKF3U8rby+Vptt5H1sWS8E0XIwmweG6Jas13q8BFM5NPhvXNWceeW9sP/NWJwGcI84q+Hpprik4lFj053tdTWYTjNwk0mYplEVlCWjdHlvz8k++Pa2cforCt1+y81JTfWPX0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097707; h=Content-Type: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=YEmaFToETsycZ7der5ViiFcTP4pGFJAFcTkNWhCg5/A=; b=h2C+aoAcergsY1xWCj70HKdgw4tF+hOSYJRB2l92lvfzJltzkoWR9NG2RFo9mgN4AU66EcmQRsCwWZzmO9/czIhppFj++vn+he0U9OBrhMMSCYrEmmjL7gkWpP9BnPAGoZUNSmpW/GfOMVGOvGpvMHoq7TSfPXp9n+6RabkvFSU= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097707957983.2629617618725; Tue, 18 Aug 2026 17:01:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThZ-0004WX-Mg; Tue, 18 Aug 2026 19:58:42 -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 1wwThX-00048O-5p for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:39 -0400 Received: from mail-oi1-x234.google.com ([2607:f8b0:4864:20::234]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwThV-0005JZ-BR for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:38 -0400 Received: by mail-oi1-x234.google.com with SMTP id 5614622812f47-4a483a552efso275458b6e.1 for ; Tue, 18 Aug 2026 16:58:36 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097516; x=1787702316; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=YEmaFToETsycZ7der5ViiFcTP4pGFJAFcTkNWhCg5/A=; b=VQD+uZpmSqHMX5F4ADFDp/oSTKfD31mr+QD8nQAYCh6BQWYxKGsKHmS2bwN4Ebfv5K lQgkw3bjSnU1Xv5pfyKVOfyUStWL7uJ6Bcn2HFqcjox3iRRuwjRKVDG6DXcKLE6I3tpQ cBvdHK+V2Zvpohx0G9pezqDFeL6LxK1wSXFSYdQDNYEmCAx1NlHAci/Hrc8XMxYZpN5T 2BE87yt7cmRrssIf975avRlNpeKSKR8kIvMVkukeb0MD1XikXj0VP8xwZ2lHZOqoGfIt F8V4uZPbZ+7W2nvgCEI2q+V26Dcer6A2pTklbspZPWU8+jv31nqWux7pz1A4krJZf+WF V80A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097516; x=1787702316; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=YEmaFToETsycZ7der5ViiFcTP4pGFJAFcTkNWhCg5/A=; b=JUUlaKvFQnsKtZhiY8U2va3w2fSJpYSacRLl0OwU/BMMKdw+dO6ujyBykQvi6k/5PB i0b3sGzCf8IutjIZnMpI8a+qAXMKBxXTZAjiWDPFsUOZf4GrM6TgHJdKzK91yDPSY2d2 GxHdfS4CrdZ4uSaBZIglEcrALqjb1j1uOSZ8pILN9qOu1F4bCLB7XLdYdDrbozLotp8R klcsKxtnIJsbkJbIzmaOtf8TdFPOYIFrEQIuKZHsH/Q7ck8DxDxyturPMmFE3WJeM9Dy TVcKNy/V7XGAGcqzAB54qdhJDl08GYPhR1oyyCfX9TCrA1rNSR+HcZSY1DN9eWaTVnZ2 lm7w== X-Gm-Message-State: AOJu0YzB8uKgyh4i3WRCtXnvONaLdSK7rtWPFux9KlsqVTvakQRr+pxl z1f5LrcmXG3ArEoXyOpT3Z9bSUe84e+AHX13m4kYBZLfQrO+BiY5v+Hln6peXiqTjTq1ewICDi5 vdKCvOgQ= X-Gm-Gg: AR+sD12P1PTYTNQyAKVIhYNWSRD3x65cdRum0zZdMY27xJ0c+T50qs5ngwnzXn11UJV Y2+DCBPJyKhDGGudJyKipvfs5/0Zg9v8uq4CXsrLwCG3I9DN1RTozRwLksRrky7VcFxiv9bZyUJ 1iEFlYuwA1aEOTJnTMO7Me66ADdK0+7s7tlXpz+gOLhSPhIDZw2xPC3mXamdj40E50VzpbD9abP XKrKtcjcWQ/QNR0WUwGoflFBhsmi7P5+KcKQBLct5S1dZOIxTOH/xxw6QKmCDY2f75aKR8z3j54 uwlerlO9i21aGpTZhUMaqn7b/oakyv8AsE6ucOI8hlIHJvx0aAWCPrdumXLA4plJ21LcArshkVu s9Z80OUKFs6g2ZyL4OoEl77d8lzw+hbUVG1uNgjSv6fZBeuYqSGnLB3FqZdogCwgLm+bGSB77Rl Q48+5lM/6pql6vVJwfI7PpGAzerW/BDgQomFwPbbt4KS6qzWQ= X-Received: by 2002:a05:6808:6902:b0:4a4:856a:c622 with SMTP id 5614622812f47-4b2bcc3ddaamr287134b6e.20.1787097516192; Tue, 18 Aug 2026 16:58:36 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:26 -0600 Subject: [PATCH v4 33/40] bsd-user: Add link and list extattr functions to os-extattr.h MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-33-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=5800; i=imp@bsdimp.com; h=from:subject:message-id; bh=C2yjO1Srf50sIJtco5cn2xQKOYDP4oFckYjhyhcblEc=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFTHaK4B+GlE1KnUk6h4bibHuTMqeyYQbX0i mrkuDOm4IyJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxUxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQAM6BAA7PwYATwOW2YS06K0CEl0JSLxcfWHp7u 7qZC9q6dpdeLEXbkJU1Jlf85q3/Q+9eiarDVqgH7EqBsYheHtHS+U+W1dS3GUF+q4gJSXZeLQhU tFRA/Q/ZIi3//VmvAb92+O14N8tv6E8x2r1hR/v0ckw3f3xLNvC491r/viK2VRp0bGT/rt7c9he 93fCjLG5DYi2uiZ++jmTPt0l8cPxTNZ4NTSYux/Da1gEoT5riCidluZxridjlkppsfHV+UZu/v+ eCRKrtFH972CgOnGzCzRYZ2pGHCVSWOlUT59nY+P8n5TghK1Pgn7zLI8h4hHL5sdtzl6zsASktG EyYhIsT046UTah1YeLdrglRJQer/FYBJQRpQQeu2OpZPqsCcAsUj6xleoxl0poIetChnfD7yoz9 7+pYc8beatKo/AbRYRWO0yWQ7Rssw2UJ3Kx+XNE6DCTtaGuoZhUCb4GdA7OU1dVgD2XuEjI/7bZ 5KXPOSjuSKLEE/QPJ9Jw0dvUa0vpb3b8ch5mx4rOHf7gd3mcQqlFuHZK4sL9QhoeTo6oexjESTq 9EdUkyvPjfeW/gFE4P+Mk7agi1K80Hnne0ZdQ/H1NV8FbzwxLNeyRq6ZEcHS79hm+HpteRR7ZEc Ns0OFZFV3D+dQihTZfD+0xjyuZxD3FicRbG5GMRwNhoqKCLYrL4A= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::234; envelope-from=imp@bsdimp.com; helo=mail-oi1-x234.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097708149158500 Add extattr_get_link, extattr_set_link, extattr_delete_link, extattr_list_fd, extattr_list_file, and extattr_list_link. Signed-off-by: Stacey Son Assisted-by: Claude Opus 4.6 (1M context) Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-extattr.h | 172 ++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 172 insertions(+) diff --git a/bsd-user/freebsd/os-extattr.h b/bsd-user/freebsd/os-extattr.h index fb3ef27346..90f0c64c93 100644 --- a/bsd-user/freebsd/os-extattr.h +++ b/bsd-user/freebsd/os-extattr.h @@ -204,5 +204,177 @@ static inline abi_long do_freebsd_extattr_delete_fd(a= bi_long arg1, return ret; } =20 +/* extattr_get_link(2) */ +static inline abi_long do_freebsd_extattr_get_link(abi_long arg1, + abi_long arg2, + abi_long arg3, + abi_long arg4, + abi_long arg5) +{ + abi_long ret; + void *p, *a, *d; + + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + a =3D lock_user_string(arg3); + if (a =3D=3D NULL) { + unlock_user(p, arg1, 0); + return -TARGET_EFAULT; + } + if (arg4 && arg5 > 0) { + d =3D lock_user(VERIFY_WRITE, arg4, arg5, 0); + if (d =3D=3D NULL) { + unlock_user(a, arg3, 0); + unlock_user(p, arg1, 0); + return -TARGET_EFAULT; + } + ret =3D get_errno(extattr_get_link(path(p), arg2, a, d, arg5)); + unlock_user(d, arg4, arg5); + } else { + ret =3D get_errno(extattr_get_link(path(p), arg2, a, NULL, arg5)); + } + unlock_user(a, arg3, 0); + unlock_user(p, arg1, 0); + + return ret; +} + +/* extattr_set_link(2) */ +static inline abi_long do_freebsd_extattr_set_link(abi_long arg1, + abi_long arg2, + abi_long arg3, + abi_long arg4, + abi_long arg5) +{ + abi_long ret; + void *p, *a, *d; + + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + a =3D lock_user_string(arg3); + if (a =3D=3D NULL) { + unlock_user(p, arg1, 0); + return -TARGET_EFAULT; + } + d =3D lock_user(VERIFY_READ, arg4, arg5, 1); + if (d =3D=3D NULL) { + unlock_user(a, arg3, 0); + unlock_user(p, arg1, 0); + return -TARGET_EFAULT; + } + ret =3D get_errno(extattr_set_link(path(p), arg2, a, d, arg5)); + unlock_user(d, arg4, arg5); + unlock_user(a, arg3, 0); + unlock_user(p, arg1, 0); + + return ret; +} + +/* extattr_delete_link(2) */ +static inline abi_long do_freebsd_extattr_delete_link(abi_long arg1, + abi_long arg2, + abi_long arg3) +{ + abi_long ret; + void *p, *a; + + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + a =3D lock_user_string(arg3); + if (a =3D=3D NULL) { + unlock_user(p, arg1, 0); + return -TARGET_EFAULT; + } + ret =3D get_errno(extattr_delete_link(path(p), arg2, a)); + unlock_user(a, arg3, 0); + unlock_user(p, arg1, 0); + + return ret; +} + +/* extattr_list_fd(2) */ +static inline abi_long do_freebsd_extattr_list_fd( + abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg4) +{ + abi_long ret; + void *d; + + if (arg3 && arg4 > 0) { + d =3D lock_user(VERIFY_WRITE, arg3, arg4, 0); + if (d =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D get_errno(extattr_list_fd(arg1, arg2, d, arg4)); + unlock_user(d, arg3, arg4); + } else { + ret =3D get_errno(extattr_list_fd(arg1, arg2, NULL, arg4)); + } + return ret; +} + +/* extattr_list_file(2) */ +static inline abi_long do_freebsd_extattr_list_file( + abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg4) +{ + abi_long ret; + void *p, *d; + + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + if (arg3 && arg4 > 0) { + d =3D lock_user(VERIFY_WRITE, arg3, arg4, 0); + if (d =3D=3D NULL) { + unlock_user(p, arg1, 0); + return -TARGET_EFAULT; + } + ret =3D get_errno(extattr_list_file(path(p), arg2, d, arg4)); + unlock_user(d, arg3, arg4); + } else { + ret =3D get_errno(extattr_list_file(path(p), arg2, NULL, arg4)); + } + unlock_user(p, arg1, 0); + + return ret; +} + +/* extattr_list_link(2) */ +static inline abi_long do_freebsd_extattr_list_link( + abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg4) +{ + abi_long ret; + void *p, *d; + + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + if (arg3 && arg4 > 0) { + d =3D lock_user(VERIFY_WRITE, arg3, arg4, 0); + if (d =3D=3D NULL) { + unlock_user(p, arg1, 0); + return -TARGET_EFAULT; + } + ret =3D get_errno(extattr_list_link(path(p), arg2, d, arg4)); + unlock_user(d, arg3, arg4); + } else { + ret =3D get_errno(extattr_list_link(path(p), arg2, NULL, arg4)); + } + unlock_user(p, arg1, 0); + + return ret; +} + +/* + * Access Control Lists + */ + =20 #endif /* FREEBSD_OS_EXTATTR_H */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097605; cv=none; d=zohomail.com; s=zohoarc; b=INOnZq+TEAB0DUpNXZjewboEXJ7Hs7uJG0uFuE+3XQJ8eXbOb8NaEGCsjwUve8gjWoAt9Vv9n+Mi/FycNwE/zxLKfC+Hcu8wz+nHm3EelP5i6a9jChx4P1o2pzI9c/fGAjN6klceGDcsX2k0duDwqAIuhZo8XYTqVpYB5zNz3xU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097605; h=Content-Type: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=InJhhPKRd86QYmRjr765HrYUh1madqHVtCg9pVUqYg4=; b=LkJFEfVAHQ9V0t9YiwtSDevdMUTQIIjT5VH0n/tBb2uRKAAs47v4jSr/tmNOQB1mEBEOZfwzBcsB4NxTh61GTCunZwb1MS/RYf/uYFgYKXq3kXLkP9S4Ptet8Piavi6EaF8fxTsfmVahBdofZ3/jpm9rH8+pgxG/UVZ2OkKx8fY= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097605540190.78635961018313; Tue, 18 Aug 2026 17:00:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThb-0004os-OX; Tue, 18 Aug 2026 19:58:43 -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 1wwThZ-0004Tf-7e for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:41 -0400 Received: from mail-oi1-x233.google.com ([2607:f8b0:4864:20::233]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwThX-0005Ju-3d for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:40 -0400 Received: by mail-oi1-x233.google.com with SMTP id 5614622812f47-4ab70b882c5so352465b6e.2 for ; Tue, 18 Aug 2026 16:58:38 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097518; x=1787702318; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=InJhhPKRd86QYmRjr765HrYUh1madqHVtCg9pVUqYg4=; b=Kj/r6jQx6uAHc9pmvngkIpB0VeASS1NuLF4cIT65ynURw3RbX9BZNLI8UFYb2ofBee WuugBM7IZZOeIk5BybN/+eETT2SLEXIOVlwf3phfkxEBhMAqqj/Z/Fi9BOwkPiNkFptp qlchhXNsRbO06CnKEyQp5Jle+Fwd0J+j+RmIUbf7n3WCODCrDDig3IoBO9HGznSxQ6hr h0lTOLGubZnqhIV2QY9RabAzoGunFHQbZNhwu1YHji4+cLLcmC49Dog7ctnpP0ppPm7O VbkRAPzMrgVh0PTnx5GTYaNM2rromcH+lv35IWzsHHj0ohrYHTkPGsmxUMoAbbOVtxYn Qviw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097518; x=1787702318; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=InJhhPKRd86QYmRjr765HrYUh1madqHVtCg9pVUqYg4=; b=rKhyQYXdYNgfRtTO8p0MOFyr6SVBFh1ihV6e7qc+LTJFfJUpN2QUvzOmP23+6ZEiOl Ih34E33DGMDXUYizDA3q5lEXAZ0hVuRbTNtgx+It1qaEaL06xgrXudXgLrxqzlptdAmL iz1TmMZlRYU382q0+RTZU1j1X14WKn8w0aubAz15fGz3FUClckhvCfrJW6J4ofkaF+9c oFk0UHzYzFKY5KztqKoR9gWxv1Dr8MgHXhGwUiD63yBujilHNYfNx25snzqeAnQSsmoy V6rDveyaGyznXggDGjPPJo37oGYwVi7Fu6qBuLYWi5zzCmmI0oIICpSQsuPLwkxVkpAb NbRA== X-Gm-Message-State: AOJu0Yylod1wW4D9gVF19nMfYB6Dixy+Tt4Bf1hCSU/jejRknLC9UX4c 45ehrY+Z9yySrUbIDl+uILmW+0ab4ukEsGfvmmHRnbATlf1VSyPOtxe2WmDlw+9eB1I= X-Gm-Gg: AR+sD11g/7EoXzG2qyEmBUf4OItkvMsVuL0v3ZgCyVAJAsIKOLnS7VwQz2z5Rkkgmx1 TCTOP0CuHvgzv9Hpxh1PmUM96nh7r6d+owat2qbk6csR01AHTqxcZbgoiSGl77P1RRbgDRXlOpv M/h9I1YZ/iSBC4DuVTlTM5WW+nLz4V2LFO1MfOoAsVXZJpbTvW5jq3N3cUTmaQ2odV3LbLdB33e nZJVQf3HBluJJwyGqJVG7ztfFae5E21/gGuKLvVbz9oS1wk0gryivqz3O8bQSGnc7ima6s9fY+/ Vp+r/ca0mUEa/an1T3NI4xvO9ZDz2qWcxR/ChwEM/qT9VHPFeGI6uNQPssqpz2hYZNTM4YgD1/n 0HplzyNvOtZsTfroTy5iV+lZB0DbZdgUYhDzGNaos0zI5dw7oXpHxtbc5TTrGprfV4C97xVF7Sy gk2cW2kRqvzWKS/kV6v9Qbjqmx1qrgFo5/5PVzp+8wQlMXdck= X-Received: by 2002:a05:6808:1815:b0:497:da7f:179a with SMTP id 5614622812f47-4b2bcc2a4c0mr339402b6e.21.1787097517875; Tue, 18 Aug 2026 16:58:37 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:27 -0600 Subject: [PATCH v4 34/40] bsd-user: Add ACL system call shims to os-extattr.h MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-34-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=9969; i=imp@bsdimp.com; h=from:subject:message-id; bh=jDPxly0BKBRFVsK0tRf3hzxwK5WcqRGHTVpfHzD4fNw=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFVLvik7BLWp4KxO8U6PqTmytPScs9WkZ1DR iJsbBuDiniJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxVRsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQDFWA//afEu/V6mQ8iyBt0Sg6XtE3DhMWjD+cW fpH/PO6SwVwnLI/USINFj6RXNQVOijvhfEaVjFcAZdHZpB46k68uBHFL1Lxwr+1NCr7tCGjmP9u lVl3Fofc528bj9ZLwGMaMp/UBxDMLK3EPVp6bJRMx99IAxKReQgNye/yTmz8zPnSMCRLZlN9n53 KUGU49h+pwYyEkbbPff0faU5iZL0MDlnRK5uuPurNxxRoDZ3/GjSZ8AfsKXlSV+wmpM1PuC85CC nR1vCFsUfsPfcWIHWFAXYk8GibxXkp9YaGhK8Eqo0tSm/djcr0zHeG19Wb4haueRPbBxo81oD8b MvN4gQnJ5X6F4KnOv6DPNlk93cwxwIYIcSHw16Pmt95kq64oHRHQ4sneq4zgY0VUJPYs4BvM1SU dCNFaZrTEZdD3lzb2cEuVeysdTf9gAwVclGCBP74wtXD9vsqbXnGrB28UMYnAeUxinFrs7CibYo sosW/SCeDWEfy/i42qEZPTGsPCwPoEakfEKbr+l1p7j6tiq875NG332OyDrOAAG7Uh3QAjYKSpd gxiReCzTgQ8TGuiOqgjSogfQ/74+J2+GX+A50YHmX9v+ay8e9IDkmclQ4ctLMlVEnYt4f4vBoqk dLSxMcluEXE7EWc0XbKioxMH2gPAw06Zo/4bQASWGLbj+DF+2VOI= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::233; envelope-from=imp@bsdimp.com; helo=mail-oi1-x233.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097607684158500 Complete os-extattr.h with ACL operations: __acl_aclcheck_fd, __acl_aclcheck_file, __acl_aclcheck_link, __acl_delete_fd, __acl_delete_file, __acl_delete_link, __acl_get_fd, __acl_get_file, __acl_get_link, __acl_set_fd, __acl_set_file, and __acl_set_link. Signed-off-by: Stacey Son Assisted-by: Claude Opus 4.6 (1M context) Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-extattr.h | 289 ++++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 285 insertions(+), 4 deletions(-) diff --git a/bsd-user/freebsd/os-extattr.h b/bsd-user/freebsd/os-extattr.h index 90f0c64c93..b6fe9051f1 100644 --- a/bsd-user/freebsd/os-extattr.h +++ b/bsd-user/freebsd/os-extattr.h @@ -65,7 +65,7 @@ static inline abi_long do_freebsd_extattr_set_file(abi_lo= ng arg1, return -TARGET_EFAULT; } ret =3D get_errno(extattr_set_file(path(p), arg2, a, d, arg5)); - unlock_user(d, arg4, arg5); + unlock_user(d, arg4, 0); unlock_user(a, arg3, 0); unlock_user(p, arg1, 0); =20 @@ -151,7 +151,7 @@ static inline abi_long do_freebsd_extattr_set_fd(abi_lo= ng arg1, abi_long arg2, return -TARGET_EFAULT; } ret =3D get_errno(extattr_set_fd(arg1, arg2, a, d, arg5)); - unlock_user(d, arg4, arg5); + unlock_user(d, arg4, 0); unlock_user(a, arg3, 0); =20 return ret; @@ -267,7 +267,7 @@ static inline abi_long do_freebsd_extattr_set_link(abi_= long arg1, return -TARGET_EFAULT; } ret =3D get_errno(extattr_set_link(path(p), arg2, a, d, arg5)); - unlock_user(d, arg4, arg5); + unlock_user(d, arg4, 0); unlock_user(a, arg3, 0); unlock_user(p, arg1, 0); =20 @@ -376,5 +376,286 @@ static inline abi_long do_freebsd_extattr_list_link( * Access Control Lists */ =20 +/* __acl_aclcheck_fd(int filedes, acl_type_t type, struct acl *aclp); */ +static inline abi_long do_freebsd__acl_aclcheck_fd(abi_long arg1, abi_long= arg2, + abi_long arg3) +{ + abi_long ret; + struct acl host_acl; + acl_type_t type; + + ret =3D t2h_freebsd_acl_type(&type, arg2); + if (is_error(ret)) { + return ret; + } + ret =3D t2h_freebsd_acl(&host_acl, arg3); + if (!is_error(ret)) { + ret =3D get_errno(__acl_aclcheck_fd(arg1, type, &host_acl)); + } + + return ret; +} + +/* __acl_aclcheck_file(const char *path, acl_type_t type, struct acl *aclp= ); */ +static inline abi_long do_freebsd__acl_aclcheck_file(abi_long arg1, + abi_long arg2, + abi_long arg3) +{ + abi_long ret; + void *p; + struct acl host_acl; + acl_type_t type; + + ret =3D t2h_freebsd_acl_type(&type, arg2); + if (is_error(ret)) { + return ret; + } + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D t2h_freebsd_acl(&host_acl, arg3); + if (!is_error(ret)) { + ret =3D get_errno(__acl_aclcheck_file(path(p), type, &host_acl)); + } + unlock_user(p, arg1, 0); + + return ret; +} + +/* __acl_aclcheck_link(const char *path, acl_type_t type, struct acl *aclp= ); */ +static inline abi_long do_freebsd__acl_aclcheck_link(abi_long arg1, + abi_long arg2, + abi_long arg3) +{ + abi_long ret; + void *p; + struct acl host_acl; + acl_type_t type; + + ret =3D t2h_freebsd_acl_type(&type, arg2); + if (is_error(ret)) { + return ret; + } + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D t2h_freebsd_acl(&host_acl, arg3); + if (!is_error(ret)) { + ret =3D get_errno(__acl_aclcheck_link(path(p), type, &host_acl)); + } + unlock_user(p, arg1, 0); + + return ret; +} + +/* int __acl_delete_fd(int filedes, acl_type_t type); */ +static inline abi_long do_freebsd__acl_delete_fd(abi_long arg1, abi_long a= rg2) +{ + abi_long ret; + acl_type_t type; + + ret =3D t2h_freebsd_acl_type(&type, arg2); + if (is_error(ret)) { + return ret; + } + return get_errno(__acl_delete_fd(arg1, type)); +} + +/* int __acl_delete_file(const char *path, acl_type_t type); */ +static inline abi_long do_freebsd__acl_delete_file(abi_long arg1, + abi_long arg2) +{ + abi_long ret; + void *p; + acl_type_t type; + + ret =3D t2h_freebsd_acl_type(&type, arg2); + if (is_error(ret)) { + return ret; + } + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D get_errno(__acl_delete_file(path(p), type)); + unlock_user(p, arg1, 0); + + return ret; +} + +/* int __acl_delete_link(const char *path, acl_type_t type); */ +static inline abi_long do_freebsd__acl_delete_link(abi_long arg1, + abi_long arg2) +{ + abi_long ret; + void *p; + acl_type_t type; + + ret =3D t2h_freebsd_acl_type(&type, arg2); + if (is_error(ret)) { + return ret; + } + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D get_errno(__acl_delete_link(path(p), type)); + unlock_user(p, arg1, 0); + + return ret; +} + +/* int __acl_get_fd(int filedes, acl_type_t type, struct acl *aclp); */ +static inline abi_long do_freebsd__acl_get_fd(abi_long arg1, abi_long arg2, + abi_long arg3) +{ + abi_long ret; + acl_type_t type; + struct acl host_acl; + + memset(&host_acl, 0, sizeof(struct acl)); + host_acl.acl_maxcnt =3D ACL_MAX_ENTRIES; =20 -#endif /* FREEBSD_OS_EXTATTR_H */ + ret =3D t2h_freebsd_acl_type(&type, arg2); + if (is_error(ret)) { + return ret; + } + ret =3D get_errno(__acl_get_fd(arg1, type, &host_acl)); + if (!is_error(ret)) { + ret =3D h2t_freebsd_acl(arg3, &host_acl); + } + + return ret; +} + +/* __acl_get_file(const char *path, acl_type_t type, struct acl *aclp); */ +static inline abi_long do_freebsd__acl_get_file(abi_long arg1, abi_long ar= g2, + abi_long arg3) +{ + abi_long ret; + void *p; + acl_type_t type; + struct acl host_acl; + + memset(&host_acl, 0, sizeof(struct acl)); + host_acl.acl_maxcnt =3D ACL_MAX_ENTRIES; + + ret =3D t2h_freebsd_acl_type(&type, arg2); + if (is_error(ret)) { + return ret; + } + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D get_errno(__acl_get_file(path(p), type, &host_acl)); + if (!is_error(ret)) { + ret =3D h2t_freebsd_acl(arg3, &host_acl); + } + unlock_user(p, arg1, 0); + + return ret; +} + +/* int __acl_get_link(const char *path, acl_type_t type, struct acl *aclp)= ; */ +static inline abi_long do_freebsd__acl_get_link(abi_long arg1, abi_long ar= g2, + abi_long arg3) +{ + abi_long ret; + void *p; + acl_type_t type; + struct acl host_acl; + + memset(&host_acl, 0, sizeof(struct acl)); + host_acl.acl_maxcnt =3D ACL_MAX_ENTRIES; + + ret =3D t2h_freebsd_acl_type(&type, arg2); + if (is_error(ret)) { + return ret; + } + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D get_errno(__acl_get_link(path(p), type, &host_acl)); + if (!is_error(ret)) { + ret =3D h2t_freebsd_acl(arg3, &host_acl); + } + unlock_user(p, arg1, 0); + + return ret; +} + +/* int __acl_set_fd(int filedes, acl_type_t type, struct acl *aclp); */ +static inline abi_long do_freebsd__acl_set_fd(abi_long arg1, abi_long arg2, + abi_long arg3) +{ + abi_long ret; + acl_type_t type; + struct acl host_acl; + + ret =3D t2h_freebsd_acl_type(&type, arg2); + if (is_error(ret)) { + return ret; + } + ret =3D t2h_freebsd_acl(&host_acl, arg3); + if (!is_error(ret)) { + ret =3D get_errno(__acl_set_fd(arg1, type, &host_acl)); + } + + return ret; +} + +/* int __acl_set_file(const char *path, acl_type_t type, struct acl *aclp)= ; */ +static inline abi_long do_freebsd__acl_set_file(abi_long arg1, abi_long ar= g2, + abi_long arg3) +{ + abi_long ret; + void *p; + acl_type_t type; + struct acl host_acl; + + ret =3D t2h_freebsd_acl_type(&type, arg2); + if (is_error(ret)) { + return ret; + } + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D t2h_freebsd_acl(&host_acl, arg3); + if (!is_error(ret)) { + ret =3D get_errno(__acl_set_file(path(p), type, &host_acl)); + } + unlock_user(p, arg1, 0); + + return ret; +} + +/* int __acl_set_link(const char *path, acl_type_t type, struct acl *aclp)= ; */ +static inline abi_long do_freebsd__acl_set_link(abi_long arg1, abi_long ar= g2, + abi_long arg3) +{ + abi_long ret; + void *p; + acl_type_t type; + struct acl host_acl; + + ret =3D t2h_freebsd_acl_type(&type, arg2); + if (is_error(ret)) { + return ret; + } + p =3D lock_user_string(arg1); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D t2h_freebsd_acl(&host_acl, arg3); + if (!is_error(ret)) { + ret =3D get_errno(__acl_set_link(path(p), type, &host_acl)); + } + unlock_user(p, arg1, 0); + + return ret; +} --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097731; cv=none; d=zohomail.com; s=zohoarc; b=mAFnkKa0b4x8jjRBio9v7c8pEC/mRMN1u4EL7j8LHGPIp54OfvqlIBpYGqBi0BwbFBsRx9yOXJDYp0S078AFW1fBC2Qi7mAO/W0wScj6Vw8WTJ79MF6xMZAss5o9RX0VUMNRAFbON/5nTYiUTYBwHMWYrwAv+0k6n0ZMa/FSe8Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097731; h=Content-Type: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=dIz2VXi+F/15e1S0MVPD1bNQL3JNhpxIrt4slg72Msw=; b=g27R0tX4S9cKem+2R2S73rt1tN7zQ38fz9j//heNs3aiGHyU7bh017visR1IEFwCFrmIAlE2q8BKoQ2pOfNfXEQI5phFVwyOKWBLYiJCR/9cw3BaL9fYJ0UZGXvszVXikdoA15QB9HCFBXOAmOYbtnXB0MaF47NwdXYE+Q1H3V0= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 17870977315861014.8309681418929; Tue, 18 Aug 2026 17:02:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThc-0004sr-AE; Tue, 18 Aug 2026 19:58:44 -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 1wwTha-0004gG-Om for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:42 -0400 Received: from mail-oa1-x32.google.com ([2001:4860:4864:20::32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwThY-0005KA-Pj for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:42 -0400 Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-44ae14b4fd6so219436fac.2 for ; Tue, 18 Aug 2026 16:58:40 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097519; x=1787702319; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=dIz2VXi+F/15e1S0MVPD1bNQL3JNhpxIrt4slg72Msw=; b=mpc1EwtEsTOcW6/8bOKzAn2WBCOJC2L/Sc8WeoGshmSIe1/Ol1UtYtOBbEqsebSdmr mYN8esf2vbUM1CussR+WIFV20WG5srMyLGZdxg62nWh9E8QyJDGbZOZElTJmKwFFeJQX IrApszYw5CHJPS3yb2kXRfXgvyG+YwwVDa3vz104MQZGloBDKX+de85IiVYMCkPQQLMc 4R/gnfKcxoTjJjk6IQ47jVBV5FW5Pllov91mNUvOBEDVYbCaNJ15lekd1wrbeiAd+4Qy yDt6N0Cqmn0iO1BJsCHuzcQFznAQISl2/S4BUJJo2+wG8IQJ0ERpd5yWEtBtgh/WDeZT xmPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097519; x=1787702319; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=dIz2VXi+F/15e1S0MVPD1bNQL3JNhpxIrt4slg72Msw=; b=RLFpW592VTaZ0vPu5cLMn+m+ZA7cGFMhOTqQUgcX0IJHrQ7sgHPs7xmhn+jG3/nRwP YWgC1SxsEXLNDvbyw7Pw8DDUIcfE5A8330fNjG/Ch6NM128HUK7LGbkAFFjDoZmu+zcj lqLDZc1hkZN+JaXWoBsibl6Hei8BWZcCKk6T0SADxDjKdmqmsZS/PqeJr30SY0QVqsak T3HEAS+U7FOuXO8VeAgMtKI0fI3svivKgLBKLyZdz88Nc1JvJUHH0kcZp+zv3zoqduO7 RHPP1hFaUR4oZ9AVYdoKrr+oJ+486MQ5KrHAUYbUy8AiaS7kWpwoP8sRAGhELUMFNps0 tDww== X-Gm-Message-State: AOJu0YxtEFjPhfpl8D8x8/7g4sbZiH04bBgt3gk3wUbithMKMl7PK+9r YhCbphCt/bcrE/M7iqpb/eqhw+SF4PdUy889e934JgOsP8ovJqANG+m8kTUs4Wim9jI= X-Gm-Gg: AR+sD11gui4AQKRMlh7bZCpugFpyRxl9hStrvT9qmxoU4VDAh2Hhb1XvIhVZd6ZWNv2 DrU57/UQ+n/p/EgFofeX5mYFCvabiv/ZHZ+soHCp/Nv+cUYrMO83X+LV1kV63H1ZR2K5AITjq2f QYsiHMQaPkupwu54HNf8buzCNINl++6tyDttWjj2ervP4zzdj2qv3PL1w1bm40G6kp98EGEfqWT 0m3L4n6fHBvT8g14zTKnwMBzO4JBcq/3skX24JARl+2Jk2hk4sZJbZYB0NihZpC4OvUcSLtzR/q eqey4oYD2rYVk6JXvLusBIi/kwLTmvo9yyLQ3znNFqerU3ds6i7eJI34TYgShctIBOPKyW3FRC4 +EKLUXYtDTnUOGcUiTD81298pgz3l1IFe6Ly4/2OG0/iAJhGrFNwB3EK7eR2sX7r0jWIKczOhof T9lldssUYvH6Dp17Ml2GtRLFq4sXtqTjIM6MHpbtfT4Xt8l+g= X-Received: by 2002:a05:6808:c293:b0:495:da89:c578 with SMTP id 5614622812f47-4b2bc9af497mr335321b6e.9.1787097519434; Tue, 18 Aug 2026 16:58:39 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:28 -0600 Subject: [PATCH v4 35/40] bsd-user: Add os-extattr.c with ACL conversion functions MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-35-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=5428; i=imp@bsdimp.com; h=from:subject:message-id; bh=8WTKkkmH+/YIqQ+D8OENQR/1fAIivn67BrWNZ/nK3dk=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFXs2ZcCB7hVkB0XlcDsqkjRsHILukvTRXpM m6vH/c7/6qJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxVxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQDzNxAAhkUbKOnt5jpY7reTU4SG4eUiQGzxST9 BZ4RZqqa9Bi6cCFKrZzkm53g4v2KWkceN0XaEu3dIdBGK7AvyPu8CWzGckLTc0Y3AB/X+CWGNro Blo7oYFRccj159H2/4gJNM/vLvX5ToOljmg+FgBvAAmCZ3muEGyaaM0TzdL1Sp7A+NvJ7xzECTh 95ejN9WiNmDxZmEhe+qgKi8nPd6bvxj2EpaPefnNWZMMN+TGftSB+PS2RwdWDjVKokdF5eaThQv NOYmF+CkzoElXsVWZNYVbBbNPu/IGN+k/wyiAzSFs1YMgtRxYzVqj5ruDwT/dsXH33BSCaLPg5g Xuj50c94StT8AMO1iSyTGkcnNn0lV5yub4A1SCVjtjgvGACkFOYhsOrUnqW1dAuc23yVRTQ/KTM XHaZyLmLho4a4M8ijv8+z77gvT7MPGzxe6yQ7j5t092g6xmfHk0OP7aY5MlDcTo0rMxtgRijBN9 WPwv2LREgYfogJmu+0xPmoPpV9f6it0zKFdWZdXYf8sKo8EvrMToLgbdJdm5ppVklvd7R2S8k23 MaAejmZU4KbSlMiOqkIeZEV8AapyLmiCDKbe4y9XxiEz7IfepFinj1BbBkeEypAb74aMPtPsD+0 owKLM/0kHfkR1dZHqPxgeSEUCv7hriZoXzJ26On8UqPeXNqfx5yY= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2001:4860:4864:20::32; envelope-from=imp@bsdimp.com; helo=mail-oa1-x32.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097732356158500 Add os-extattr.c with t2h_freebsd_acl, h2t_freebsd_acl, and t2h_freebsd_acl_type helper functions for ACL operations. Add os-extattr.c to the build and include os-extattr.h in the syscall dispatcher. Signed-off-by: Stacey Son Assisted-by: Claude Opus 4.6 (1M context) Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/meson.build | 1 + bsd-user/freebsd/os-extattr.c | 118 ++++++++++++++++++++++++++++++++++++++= ++++ bsd-user/freebsd/os-syscall.c | 2 + 3 files changed, 121 insertions(+) diff --git a/bsd-user/freebsd/meson.build b/bsd-user/freebsd/meson.build index db531604ad..0fc779749d 100644 --- a/bsd-user/freebsd/meson.build +++ b/bsd-user/freebsd/meson.build @@ -4,6 +4,7 @@ bsd_syscall_nr =3D custom_target('bsd-syscall-h', command: [sh, meson.current_source_dir() / 'scripts/syscallhdr.sh', '@= INPUT@', '@OUTPUT@', 'FREEBSD']) =20 bsd_user_ss.add(files( + 'os-extattr.c', 'os-proc.c', 'os-socket.c', 'os-stat.c', diff --git a/bsd-user/freebsd/os-extattr.c b/bsd-user/freebsd/os-extattr.c new file mode 100644 index 0000000000..3456157b4d --- /dev/null +++ b/bsd-user/freebsd/os-extattr.c @@ -0,0 +1,118 @@ +/* + * FreeBSD extend attributes and ACL conversions + * + * Copyright (c) 2013 Stacey D. Son + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ +#include "qemu/osdep.h" + +#ifndef _ACL_PRIVATE +#define _ACL_PRIVATE +#endif +#include + +#include "qemu.h" +#include "qemu-os.h" + +/* + * FreeBSD ACL conversion. + */ +abi_long t2h_freebsd_acl(struct acl *host_acl, abi_ulong target_addr) +{ + uint32_t i; + struct target_freebsd_acl *target_acl; + + if (!lock_user_struct(VERIFY_READ, target_acl, target_addr, 1)) { + return -TARGET_EFAULT; + } + __get_user(host_acl->acl_maxcnt, &target_acl->acl_maxcnt); + __get_user(host_acl->acl_cnt, &target_acl->acl_cnt); + + if (host_acl->acl_maxcnt > ACL_MAX_ENTRIES || + host_acl->acl_cnt > ACL_MAX_ENTRIES) { + unlock_user_struct(target_acl, target_addr, 0); + return -TARGET_EINVAL; + } + + for (i =3D 0; i < host_acl->acl_cnt; i++) { + __get_user(host_acl->acl_entry[i].ae_tag, + &target_acl->acl_entry[i].ae_tag); + __get_user(host_acl->acl_entry[i].ae_id, + &target_acl->acl_entry[i].ae_id); + __get_user(host_acl->acl_entry[i].ae_perm, + &target_acl->acl_entry[i].ae_perm); + __get_user(host_acl->acl_entry[i].ae_entry_type, + &target_acl->acl_entry[i].ae_entry_type); + __get_user(host_acl->acl_entry[i].ae_flags, + &target_acl->acl_entry[i].ae_flags); + } + + unlock_user_struct(target_acl, target_addr, 0); + return 0; +} + +abi_long h2t_freebsd_acl(abi_ulong target_addr, struct acl *host_acl) +{ + uint32_t i; + struct target_freebsd_acl *target_acl; + + if (host_acl->acl_maxcnt > ACL_MAX_ENTRIES || + host_acl->acl_cnt > ACL_MAX_ENTRIES) { + return -TARGET_EINVAL; + } + + if (!lock_user_struct(VERIFY_WRITE, target_acl, target_addr, 0)) { + return -TARGET_EFAULT; + } + + __put_user(host_acl->acl_maxcnt, &target_acl->acl_maxcnt); + __put_user(host_acl->acl_cnt, &target_acl->acl_cnt); + + for (i =3D 0; i < host_acl->acl_cnt; i++) { + __put_user(host_acl->acl_entry[i].ae_tag, + &target_acl->acl_entry[i].ae_tag); + __put_user(host_acl->acl_entry[i].ae_id, + &target_acl->acl_entry[i].ae_id); + __put_user(host_acl->acl_entry[i].ae_perm, + &target_acl->acl_entry[i].ae_perm); + __put_user(host_acl->acl_entry[i].ae_entry_type, + &target_acl->acl_entry[i].ae_entry_type); + __put_user(host_acl->acl_entry[i].ae_flags, + &target_acl->acl_entry[i].ae_flags); + } + + unlock_user_struct(target_acl, target_addr, 1); + return 0; +} + +abi_long t2h_freebsd_acl_type(acl_type_t *host_type, abi_long target_type) +{ + + switch (target_type) { + case TARGET_FREEBSD_ACL_TYPE_ACCESS_OLD: + *host_type =3D ACL_TYPE_ACCESS_OLD; + break; + + case TARGET_FREEBSD_ACL_TYPE_DEFAULT_OLD: + *host_type =3D ACL_TYPE_DEFAULT_OLD; + break; + + case TARGET_FREEBSD_ACL_TYPE_ACCESS: + *host_type =3D ACL_TYPE_ACCESS; + break; + + case TARGET_FREEBSD_ACL_TYPE_DEFAULT: + *host_type =3D ACL_TYPE_DEFAULT; + break; + + case TARGET_FREEBSD_ACL_TYPE_NFS4: + *host_type =3D ACL_TYPE_NFS4; + break; + + default: + return -TARGET_EINVAL; + } + return 0; +} + diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c index 0c729da0ab..f385034a53 100644 --- a/bsd-user/freebsd/os-syscall.c +++ b/bsd-user/freebsd/os-syscall.c @@ -17,6 +17,7 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ +#define _ACL_PRIVATE #include "qemu/osdep.h" #include "qemu/cutils.h" #include "qemu/path.h" @@ -43,6 +44,7 @@ #include "bsd-socket.h" =20 /* BSD dependent syscall shims */ +#include "os-extattr.h" #include "os-stat.h" #include "os-proc.h" #include "os-signal.h" --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097713; cv=none; d=zohomail.com; s=zohoarc; b=Dpt0a2S2q6W6GTsMaytFlBdRTegXZuhQUL4n6Zbi73SCYm0HR0bEOeOpIxS/uRTkqMmaejR8IFWauiM4h+1XmVZRCWq9G8+n8l4lAgNqCFoPMcejyszHmVXqz814s0v8smDyr3zgFYWHVfNadfojdcV4oStz4vhMqzoZg5JW5i8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097713; h=Content-Type: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=jczbfvic4hw974INPn7FyuHXatH9RwonYfq0gUWlZ5c=; b=Izo3n8YTr/nBfTUL1SnQalDcyJIHeLHpGIm3GkRDULy2/5SqWk3UlPdnuOBwG+RHKALsQHKf87gVbKIRsj4N6+kY8E6HSNylUT+pxETRWfK6c/J62koMPgE/+gI4hnXIBIp4Zbz+Fk4Px3YX+SS0P0V4ZJD5jdMnLzT8JYGUBrM= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097713388463.4350191054607; Tue, 18 Aug 2026 17:01:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThf-0005HH-1R; Tue, 18 Aug 2026 19:58:47 -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 1wwThc-0004v6-Ht for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:44 -0400 Received: from mail-oa1-x29.google.com ([2001:4860:4864:20::29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwTha-0005KM-Qo for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:44 -0400 Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-45171f2f608so360960fac.1 for ; Tue, 18 Aug 2026 16:58:42 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097521; x=1787702321; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=jczbfvic4hw974INPn7FyuHXatH9RwonYfq0gUWlZ5c=; b=TCVx9Z+4jJbvHEiu55/q0Qtd7CotWLyi33mnxVqFE4zBkUxsYcTw9LD/x1sNXNsk7o g2gKvYdQZgrtVZWn1ftQREhk7Oha5din9RPmuRB70FMOn1k7us8IxYADD8lkq8NKFaTk N/iSx4kS2ZpTCZID/xeLK34gWO2zEgKxhtsmNMphOvUpDkObNYZ0XrIliDm9lXsIwsrN 0LoBvxHsnSeUqHG3TNY1zPV95Wkn8bSI11TMu4O5YZ41x4Q7DYlYmPrxc8qDuLuW1g25 H5rJ1c0/t2wqYejwn+Yrq5Fwcys8JKAYb7Od8Cf+z8xPN94VV9+EgWNoOse+KF+3r9HM z4Dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097521; x=1787702321; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=jczbfvic4hw974INPn7FyuHXatH9RwonYfq0gUWlZ5c=; b=EXxq/QD6le1XdWThOwXIStGBlcQv0yni+vsIgM9B5KVx222hmBgfwpGLohUa1qp8v2 JwgaclYvC0c0uFF1qQ/dvIzcRzXr7E2djM5yyj7OUG99Tj21LE5gVyY1bNfcxq0xwFAC euKYxD1Z0P6UGIe+OaBtYcK+v8gtxmyvFrvgWWi9PZ13DQw7OAJ5mYb3pmh6AG/snlG/ zjOcHVu6dL1eOeClCB5qlcqfVftcnwGugfiqFerwuu2gSu+HiioQctAjaIXo3JG1jJIC WkxUaSsOt6lUl/6l9Cwi9kKaYlgcxsH94dO79LTW/QKE0TvMzJGkFZIHL5HqjIN8zMtI vVQA== X-Gm-Message-State: AOJu0YzbD8hOQHD16YGzlBrKKRYZrLQdjrF+T9vrbY6m6XYZd3zHdHLp hWE96NwwATrM1v6kmhHXBbTJsBxs3C2VKIWMb+46r6AR2c23gU/g0Dc2TOllt1FiM9I= X-Gm-Gg: AR+sD109hYVtyHXVp8dAe65qME87349wJy0jeKJGO6jaswqSgs/fFACt6w1mDBYCc2Z OKT1C2Un5CrESYL9rS0AgUm5Amz56BetXCoS/ou0zoH1T4O8keG6A2UOTTrp2nCq9X6HWDA9uVX u7c0DGAkYqn9/tiT6+7czn+IIDoefLbT/jerzn0VMi3ZGQd5L1bnTHD0D6anQMMP8PwzUujMfCu ZSvC0t8Re+1g9B2INg3nuLQyCgiObrPxlPCei5YoGT5KLoXawC9YWGN1Jun3/9Zn393cAvIc7e6 +3dwM4Mhfv7qWwMb/ReZy95NeNAVSY/HVrrhvIsf9Ju3LDVtSVaoamDXV0FIu9yubGmyXMNVYVX KukBxz19cP1mVhicUyDu92T0JQqIXoOHCDzTOHXfI7Qx48h4yWgCQNet1RuJi1+UAFYHsA/P8DC 4tk9J+yDniw2VQnyMXWB2Rslc3F0WtMu4xBCdAv/7eCT+5FC8= X-Received: by 2002:a05:6808:4fe5:b0:495:e997:528d with SMTP id 5614622812f47-4b2bc88425fmr458301b6e.3.1787097521347; Tue, 18 Aug 2026 16:58:41 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:29 -0600 Subject: [PATCH v4 36/40] bsd-user: Add extended attribute and ACL system call dispatch MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-36-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=5060; i=imp@bsdimp.com; h=from:subject:message-id; bh=YzVmLaj2ivnvHTtm9AJ2z0J8N0IZJU1MbhxD5FYtKh4=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFYICqJNCHhPN+3CpnoMmmcCubRdv6Slr9uR RuA1bkh2b6JAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxWBsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQBZpQ/9HLl6Tr/5fmjF1ttbJ/5QtrgmKERhlT0 7axEcEfeVS9HPDf7yx7pdvA4kfEeZ7LtY4CdMc6hMLLYYtWGToE9F43noKANy9c134EJBNmay+V Q/AMhPAZ2LYbuiXZIYsLMv4QINC+N1m6BoH8XKVoH7ckJeccbJt50jjtTPwjqdlaVKm84OzGtl3 LlTEBu55nP4utjvwYX1fZrtcbkMe38Ctw5fb58I4k3gb6b/T0gg38S0FNqeHzZpK0nl+RMcAg61 rtTXDeCLhnsAS3kyx5r6Oz/AQIum2BwhBkiOuyM3F5Z/4R0mH38kekrcFo8jeKfjdIVNplwxFGf 66eDJWeFIsPCm14BsrZTkLl0585B1La3HRYlTO/YxQ/5GpN/Kt9U4igP1cTeFEaTEteV9ATeIS8 Q2y8MF7PCzVylfmF9zD6s1KjkQ1Jm/qS46MUSh3QfQTjbnWoG7LOMZoGtwCJbxvmUmwpYRr4XO6 xzddyEeNWIHG3g6DqXZX9XrBRoYEbvHYLgAdZCBpOhyjFu3hlUicyXRofZ6l13lnuoVrD04Az6e OEVQugWDnonFPbgiS7JAEzDNV/3GZH5mReoAfXdG0roFvKlrkhYNzJaT9R+3lbi9Xms0RBTKZt1 5gmbquwSSbYU9U+qPQOg/S6XywOrqYI11M6HMTDNWnWf45mrhHL4= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2001:4860:4864:20::29; envelope-from=imp@bsdimp.com; helo=mail-oa1-x29.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097714361158500 Wire up extended attribute and ACL system calls: extattrctl, extattr_set/get/delete for file, fd, and link variants, extattr_list for fd, file, and link, and all __acl_* operations (aclcheck, delete, get, set for fd, file, and link). Signed-off-by: Stacey Son Assisted-by: Claude Opus 4.6 (1M context) Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-syscall.c | 103 ++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 103 insertions(+) diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c index f385034a53..a14efd3fd4 100644 --- a/bsd-user/freebsd/os-syscall.c +++ b/bsd-user/freebsd/os-syscall.c @@ -1365,6 +1365,109 @@ static abi_long freebsd_syscall(CPUArchState *env, = int num, abi_long arg1, ret =3D do_freebsd_sysarch(env, arg1, arg2); break; =20 + /* + * extended attributes and ACL system calls + */ + case TARGET_FREEBSD_NR_extattrctl: /* extattrctl() */ + ret =3D do_freebsd_extattrctl(arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_extattr_set_file: /* extattr_set_file(2) */ + ret =3D do_freebsd_extattr_set_file(arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_extattr_get_file: /* extattr_get_file(2) */ + ret =3D do_freebsd_extattr_get_file(arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_extattr_delete_file: /* extattr_delete_file(2) = */ + ret =3D do_freebsd_extattr_delete_file(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_extattr_set_fd: /* extattr_set_fd(2) */ + ret =3D do_freebsd_extattr_set_fd(arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_extattr_get_fd: /* extattr_get_fd(2) */ + ret =3D do_freebsd_extattr_get_fd(arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_extattr_delete_fd: /* extattr_delete_fd(2) */ + ret =3D do_freebsd_extattr_delete_fd(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_extattr_get_link: /* extattr_get_link(2) */ + ret =3D do_freebsd_extattr_get_link(arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_extattr_set_link: /* extattr_set_link(2) */ + ret =3D do_freebsd_extattr_set_link(arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_extattr_delete_link: /* extattr_delete_link(2) = */ + ret =3D do_freebsd_extattr_delete_link(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_extattr_list_fd: /* extattr_list_fd(2) */ + ret =3D do_freebsd_extattr_list_fd(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_extattr_list_file: /* extattr_list_file(2) */ + ret =3D do_freebsd_extattr_list_file(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_extattr_list_link: /* extattr_list_link(2) */ + ret =3D do_freebsd_extattr_list_link(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR___acl_aclcheck_fd: /* __acl_aclcheck_fd() */ + ret =3D do_freebsd__acl_aclcheck_fd(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR___acl_aclcheck_file: /* __acl_aclcheck_file() */ + ret =3D do_freebsd__acl_aclcheck_file(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR___acl_aclcheck_link: /* __acl_aclcheck_link() */ + ret =3D do_freebsd__acl_aclcheck_link(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR___acl_delete_fd: /* __acl_delete_fd() */ + ret =3D do_freebsd__acl_delete_fd(arg1, arg2); + break; + + case TARGET_FREEBSD_NR___acl_delete_file: /* __acl_delete_file() */ + ret =3D do_freebsd__acl_delete_file(arg1, arg2); + break; + + case TARGET_FREEBSD_NR___acl_delete_link: /* __acl_delete_link() */ + ret =3D do_freebsd__acl_delete_link(arg1, arg2); + break; + + case TARGET_FREEBSD_NR___acl_get_fd: /* __acl_get_fd() */ + ret =3D do_freebsd__acl_get_fd(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR___acl_get_file: /* __acl_get_file() */ + ret =3D do_freebsd__acl_get_file(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR___acl_get_link: /* __acl_get_link() */ + ret =3D do_freebsd__acl_get_link(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR___acl_set_fd: /* __acl_set_fd() */ + ret =3D do_freebsd__acl_set_fd(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR___acl_set_file: /* __acl_set_file() */ + ret =3D do_freebsd__acl_set_file(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR___acl_set_link: /* __acl_set_link() */ + ret =3D do_freebsd__acl_set_link(arg1, arg2, arg3); + break; + default: qemu_log_mask(LOG_UNIMP, "Unsupported syscall: %d\n", num); ret =3D -TARGET_ENOSYS; --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097706; cv=none; d=zohomail.com; s=zohoarc; b=gcu2VyuzVuVfmWMvjarQUjs6yxJphXz/HvCNB4b1lVJbXrXuYaF5+hiMaA08KCAPPJEuIz3TJYHB+LagO51G7ZvXG4d8tt2rAejWUKVAjxBOVAoODWnUb9Rn7hlS8ZLyfIsRsLlU9ssFDrSIbLOOFtwBWufJFzrMup4x5OTwtMQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097706; h=Content-Type: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=ckoly8ULlYNGScwbfNq6X6mcaiLluTXRydbAXzqO33c=; b=Scd20Qxm2VSDDABGfUY+ZfmtTsBu3pcjZitLjyhQmghM3Y2p01itAJB2xYkFN6L1TwEWokSsImNkBdSYf6I7cjcxu4ZVi26QCNjulCtCMqtyd5wZA+KeGHqlUWA2ZtvLWpdGZ5xhLE9LeR4mh0/dQ9FcRoGpLZJfqLV9BScMhvg= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097706082317.47715270874176; Tue, 18 Aug 2026 17:01:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThh-0005ZA-8g; Tue, 18 Aug 2026 19:58:49 -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 1wwThf-0005LY-Lh for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:47 -0400 Received: from mail-oi1-x233.google.com ([2607:f8b0:4864:20::233]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwThd-0005Km-0K for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:47 -0400 Received: by mail-oi1-x233.google.com with SMTP id 5614622812f47-4a45b3f0becso382110b6e.1 for ; Tue, 18 Aug 2026 16:58:44 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097524; x=1787702324; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ckoly8ULlYNGScwbfNq6X6mcaiLluTXRydbAXzqO33c=; b=vxZER0g4oxXa+2MfDHKmzR6fNOxr0WCGYmtR/N3oOCP/jTvS2R2zeixjU8MRoDfJiq 7hIMNJxpS9JdXjtlErjkRUKz+F5s6cfti22dQu4MdGwy1aOfXGvYTVQnOQBqshsC4sNk vvHORQXW+MJXWiKlmlCO0Og0JAI2qYsWbr+BPeeileOUZDAlaYdN63uP9E9rkKreIomH oGrxpvl9tLARFNNroPMzUhpizLScQqTeqQtDMq3weMtEe8qm+DRQdwDJIJbOgTDRtYMH 71z50ilyNiT+78bgXRLbhYNZYizjZUr0lPfIgunATMbWNBVD0i63T239ImFuE/O5OSqz qZlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097524; x=1787702324; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ckoly8ULlYNGScwbfNq6X6mcaiLluTXRydbAXzqO33c=; b=XcwgFzzmonoZFkiBBmKfGdNctHqbXVDA3imiVdBQOxbC7gSQrVNKI1aYvFnwbvwDjo 7EE0ZE9pnu37y4dY65mhmSQleLTnWOoVLVZQJqo2Nu6QxwN8IEuLy/G6mR64oeqEk3ql Lj2o00bv9ILhZKT0KPmFWX7WYop/QxufXqIiKMZkvKTZB3QWBKIepjzi4rcDdW/V2+41 AZpGZ7eMRd1NoXcFqNuHSV5oKPWO88mqtezyvhWlY1vEGoVbOnO40lcMAaJbUGK/Yl1T +lvXINkdLKtY8O2hrfZhTgdnr4zTRsqlB+H5q81MCZIbIZl/uJdH8vo0jnTdmjFHB4iD 4dLQ== X-Gm-Message-State: AOJu0YylOyi+/0gMYcCGejsVAsPutwGqlWeV7fW3yzqCgzv17DLvNbDY pdG+4u90PMOpFzcxWSliyjqM+Gh+4R+8dHfRnuOaYw0fA9cd5dpUaHvvvXfxnr1N1EZOs7ikW+V SHtbItL8= X-Gm-Gg: AR+sD10na7/rXN7O/LteXJLwSvM0AlHp/OWMi+8hQHa/gU1U0+CPfbfsVUCtN96e9Vw Cpzx80OsXOS4GGhBdp44F/lJHlAlcxgXuR/heeCq0QAuA9bhuGEBYBi/XenzgTWF6bphBdGFMcM BD5VYwSZQfp6hspKjLWCM2DzjDUEg5o7GUkk377d5F7EsvM/L+xfTExTEwi0qS0ajqsuEdnNhhM 3pKpqP7Mq8cqa+Ktd3AZYm0+BNmP6S9hoXpH+R7lyuMX/UA7qYYy4IEOV7+1Yncm8MK51DhWtrK ZLd3jdzx6nw8OS/813/v+qs0Sq02IA/+eseog2SZa6pFGC6bcZm/m+XXp33uEgCcCWQfa52ow3e ZIsrWCGSKJyqZyZIevo8ZoXvQ5xr87pvRdPnB9RM2ErJ14O2GQq54jb65SqniZ3+ry30hYESsrJ y8WFetdP7fcVdoCB27s3/r5ia8In3tVPwb5Gf5RzpAEPXo4R4= X-Received: by 2002:a05:6808:4fe7:b0:497:8f1:df07 with SMTP id 5614622812f47-4b2bc93646dmr374420b6e.7.1787097523616; Tue, 18 Aug 2026 16:58:43 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:30 -0600 Subject: [PATCH v4 37/40] bsd-user: Add scheduler and cpuset functions to os-misc.h MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-37-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Sean Bruno , =?utf-8?q?Mika=C3=ABl_Urankar?= , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=15258; i=imp@bsdimp.com; h=from:subject:message-id; bh=AxDWOGLGWgC02f8c6t0FDDSv6m8+unyeBX9qhUfmIYk=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFaVWLTt9dfqIj4VuKcFIpMvEQ0IucNJs07F UxI8oeAxeKJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxWhsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQBZ4w//TSPvdJbL1m5Tzs6ui31nv0wVGQiiDdi nVhRYygPre921FpZaR3RzpGL7xc+tfxSZVIDw7BEltGUDKlmPgx7nwvsJBAkwmEjaMvoeXCHTEo LPA+Z3ozt08NWsU6kpLVN6ajiJf6tJeJ63T3UH8CYw9BZKC7HfhQ0a/BBBMP4CVeikcXgVgTilA AvpaLyCQhM3XEnHHn1BaaBgM1Obfz3I2Fvj4JmGcjUJ0anOHdkwQRnFs6o7lGu+oDhQFlRwHbUk 5eXUkTahiIRlEnCnxFTsReITkAqstde2PEgSg0GO/J+W/UvfTsxT+BdI3YdNFgl3Ire3ieIiL0S Ewqr+lbTXMbkzHlZogPhcblgWn3wceZqtVikUfi9sXWMzL+4Snig7weKNbJHQP5L9INmXBRqh/S /2ZSk7q+cenVviKcbceZeCfVULqFt8H7TukclobYX1rbwOZYc9MDLnH+jEFpXvmUDQQbYoPHiz1 I6elIGO5tnz+0YUf/RwyTjhc9kG5Mog6x1w/oxHrzKHLkAGHJbEPuGcoEd4gUi03b6XM1GShiI2 FyETMHfQsIuff9dzQTe4BYeqodroFOenz5rC5T3Nz1Xo0wt0qXrKO02w2k4cv10ehK+WTPI18a/ pZhyGCNudkghln9Lv7cFDCUcVhX1oBbMwtF+rdj0Jgz2TSpfC0lI= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::233; envelope-from=imp@bsdimp.com; helo=mail-oi1-x233.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097708409158500 Expand os-misc.h with scheduler functions (sched_setparam, sched_getparam, sched_setscheduler, sched_getscheduler, sched_rr_get_interval) and CPU affinity functions (cpuset, cpuset_setid, cpuset_getid, cpuset_getaffinity, cpuset_setaffinity). Also add sched_yield, sched_get_priority_min, and sched_get_priority_max to bsd-proc.h. Signed-off-by: Stacey Son Signed-off-by: Sean Bruno Signed-off-by: Mika=C3=ABl Urankar Assisted-by: Claude Opus 4.6 (1M context) Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/bsd-proc.h | 18 ++ bsd-user/freebsd/os-misc.h | 466 +++++++++++++++++++++++++++++++++++++++++= +++- 2 files changed, 480 insertions(+), 4 deletions(-) diff --git a/bsd-user/bsd-proc.h b/bsd-user/bsd-proc.h index 7efc5b4c92..b9973dbedf 100644 --- a/bsd-user/bsd-proc.h +++ b/bsd-user/bsd-proc.h @@ -400,4 +400,22 @@ static inline abi_long do_bsd_setpriority(abi_long whi= ch, abi_long who, return get_errno(setpriority(which, who, prio)); } =20 +/* sched_yield(2) */ +static inline abi_long do_bsd_sched_yield(void) +{ + return get_errno(sched_yield()); +} + +/* sched_get_priority_min(2) */ +static inline abi_long do_bsd_sched_get_priority_min(int policy) +{ + return get_errno(sched_get_priority_min(policy)); +} + +/* sched_get_priority_max(2) */ +static inline abi_long do_bsd_sched_get_priority_max(int policy) +{ + return get_errno(sched_get_priority_max(policy)); +} + #endif /* !BSD_PROC_H */ diff --git a/bsd-user/freebsd/os-misc.h b/bsd-user/freebsd/os-misc.h index d9979b2a8b..0f87b21cc8 100644 --- a/bsd-user/freebsd/os-misc.h +++ b/bsd-user/freebsd/os-misc.h @@ -11,6 +11,363 @@ #include #include #include +#include + +/* sched_setparam(2) */ +static inline abi_long do_freebsd_sched_setparam(pid_t pid, + abi_ulong target_sp_addr) +{ + abi_long ret; + struct sched_param host_sp; + + ret =3D get_user_s32(host_sp.sched_priority, target_sp_addr); + if (!is_error(ret)) { + ret =3D get_errno(sched_setparam(pid, &host_sp)); + } + return ret; +} + +/* sched_get_param(2) */ +static inline abi_long do_freebsd_sched_getparam(pid_t pid, + abi_ulong target_sp_addr) +{ + abi_long ret; + struct sched_param host_sp; + + ret =3D get_errno(sched_getparam(pid, &host_sp)); + if (!is_error(ret)) { + ret =3D put_user_s32(host_sp.sched_priority, target_sp_addr); + } + return ret; +} + +/* sched_setscheduler(2) */ +static inline abi_long do_freebsd_sched_setscheduler(pid_t pid, int policy, + abi_ulong target_sp_addr) +{ + abi_long ret; + struct sched_param host_sp; + + ret =3D get_user_s32(host_sp.sched_priority, target_sp_addr); + if (!is_error(ret)) { + ret =3D get_errno(sched_setscheduler(pid, policy, &host_sp)); + } + return ret; +} + +/* sched_getscheduler(2) */ +static inline abi_long do_freebsd_sched_getscheduler(pid_t pid) +{ + + return get_errno(sched_getscheduler(pid)); +} + +/* sched_rr_get_interval(2) */ +static inline abi_long do_freebsd_sched_rr_get_interval(pid_t pid, + abi_ulong target_ts_addr) +{ + abi_long ret; + struct timespec host_ts; + + ret =3D get_errno(sched_rr_get_interval(pid, &host_ts)); + if (!is_error(ret)) { + ret =3D h2t_freebsd_timespec(target_ts_addr, &host_ts); + } + return ret; +} + +/* cpuset(2) */ +static inline abi_long do_freebsd_cpuset(abi_ulong target_cpuid) +{ + abi_long ret; + cpusetid_t setid; + + ret =3D get_errno(cpuset(&setid)); + if (is_error(ret)) { + return ret; + } + return put_user_s32(setid, target_cpuid); +} + +#define target_to_host_cpuset_which(hp, t) do { \ + (*hp) =3D t; \ +} while (0) + +#define target_to_host_cpuset_level(hp, t) do { \ + (*hp) =3D t; \ +} while (0) + +/* cpuset_setid(2) */ +static inline abi_long do_freebsd_cpuset_setid(CPUArchState *env, abi_long= arg1, + abi_ulong arg2, abi_ulong arg3, abi_ulong arg4, abi_ulong arg5) +{ + id_t id; /* 64-bit value */ + cpusetid_t setid; + cpuwhich_t which; + + target_to_host_cpuset_which(&which, arg1); +#if TARGET_ABI_BITS =3D=3D 32 + /* See if we need to align the register pairs */ + if (regpairs_aligned(env)) { + id =3D target_arg64(arg3, arg4); + setid =3D arg5; + } else { + id =3D target_arg64(arg2, arg3); + setid =3D arg4; + } +#else + id =3D arg2; + setid =3D arg3; +#endif + return get_errno(cpuset_setid(which, id, setid)); +} + +/* cpuset_getid(2) */ +static inline abi_long do_freebsd_cpuset_getid(abi_long arg1, abi_ulong ar= g2, + abi_ulong arg3, abi_ulong arg4, abi_ulong arg5) +{ + abi_long ret; + id_t id; /* 64-bit value */ + cpusetid_t setid; + cpuwhich_t which; + cpulevel_t level; + abi_ulong target_setid; + + target_to_host_cpuset_which(&which, arg1); + target_to_host_cpuset_level(&level, arg2); +#if TARGET_ABI_BITS =3D=3D 32 + id =3D target_arg64(arg3, arg4); + target_setid =3D arg5; +#else + id =3D arg3; + target_setid =3D arg4; +#endif + ret =3D get_errno(cpuset_getid(level, which, id, &setid)); + if (is_error(ret)) { + return ret; + } + return put_user_s32(setid, target_setid); +} + +static abi_long copy_from_user_cpuset_mask(cpuset_t *mask, + abi_ulong target_mask_addr) +{ + int i, j, k; + abi_ulong b, *target_mask; + + target_mask =3D lock_user(VERIFY_READ, target_mask_addr, + CPU_SETSIZE / 8, 1); + if (target_mask =3D=3D NULL) { + return -TARGET_EFAULT; + } + CPU_ZERO(mask); + k =3D 0; + for (i =3D 0; i < ((CPU_SETSIZE / 8) / sizeof(abi_ulong)); i++) { + __get_user(b, &target_mask[i]); + for (j =3D 0; j < TARGET_ABI_BITS; j++) { + if ((b >> j) & 1) { + CPU_SET(k, mask); + } + k++; + } + } + unlock_user(target_mask, target_mask_addr, 0); + + return 0; +} + +static abi_long copy_to_user_cpuset_mask(abi_ulong target_mask_addr, + cpuset_t *mask) +{ + int i, j, k; + abi_ulong b, *target_mask; + + target_mask =3D lock_user(VERIFY_WRITE, target_mask_addr, + CPU_SETSIZE / 8, 0); + if (target_mask =3D=3D NULL) { + return -TARGET_EFAULT; + } + k =3D 0; + for (i =3D 0; i < ((CPU_SETSIZE / 8) / sizeof(abi_ulong)); i++) { + b =3D 0; + for (j =3D 0; j < TARGET_ABI_BITS; j++) { + b |=3D ((CPU_ISSET(k, mask) !=3D 0) << j); + k++; + } + __put_user(b, &target_mask[i]); + } + unlock_user(target_mask, target_mask_addr, (CPU_SETSIZE / 8)); + + return 0; +} + +/* cpuset_getaffinity(2) */ +/* cpuset_getaffinity(cpulevel_t, cpuwhich_t, id_t, size_t, cpuset_t *); */ +static inline abi_long do_freebsd_cpuset_getaffinity(cpulevel_t level, + cpuwhich_t which, abi_ulong arg3, abi_ulong arg4, abi_ulong arg5, + abi_ulong arg6) +{ + cpuset_t mask; + abi_long ret; + id_t id; /* 64-bit */ + abi_ulong setsize, target_mask; + +#if TARGET_ABI_BITS =3D=3D 32 + id =3D (id_t)target_arg64(arg3, arg4); + setsize =3D arg5; + target_mask =3D arg6; +#else + id =3D (id_t)arg3; + setsize =3D arg4; + target_mask =3D arg5; +#endif + + ret =3D get_errno(cpuset_getaffinity(level, which, id, setsize, &mask)= ); + if (ret =3D=3D 0) { + ret =3D copy_to_user_cpuset_mask(target_mask, &mask); + } + + return ret; +} + +/* cpuset_setaffinity(2) */ +/* cpuset_setaffinity(cpulevel_t, cpuwhich_t, id_t, size_t, const cpuset_t= *);*/ +static inline abi_long do_freebsd_cpuset_setaffinity(cpulevel_t level, + cpuwhich_t which, abi_ulong arg3, abi_ulong arg4, abi_ulong arg5, + abi_ulong arg6) +{ + cpuset_t mask; + abi_long ret; + id_t id; /* 64-bit */ + abi_ulong setsize, target_mask; + +#if TARGET_ABI_BITS =3D=3D 32 + id =3D (id_t)target_arg64(arg3, arg4); + setsize =3D arg5; + target_mask =3D arg6; +#else + id =3D (id_t)arg3; + setsize =3D arg4; + target_mask =3D arg5; +#endif + + ret =3D copy_from_user_cpuset_mask(&mask, target_mask); + if (ret =3D=3D 0) { + ret =3D get_errno(cpuset_setaffinity(level, which, id, setsize, + &mask)); + } + + return ret; +} + +/* + * Pretend there are no modules loaded into the kernel. Don't allow loadin= g or + * unloading of modules. This works well for tests, and little else seems = to + * care. Will reevaluate if examples are found that do matter. + */ + +/* modfnext(2) */ +static inline abi_long do_freebsd_modfnext(abi_long modid) +{ + return -TARGET_ENOENT; +} + +/* modfind(2) */ +static inline abi_long do_freebsd_modfind(abi_ulong target_name) +{ + return -TARGET_ENOENT; +} + +/* kldload(2) */ +static inline abi_long do_freebsd_kldload(abi_ulong target_name) +{ + return -TARGET_EPERM; +} + +/* kldunload(2) */ +static inline abi_long do_freebsd_kldunload(abi_long fileid) +{ + return -TARGET_EPERM; +} + +/* kldunloadf(2) */ +static inline abi_long do_freebsd_kldunloadf(abi_long fileid, abi_long fla= gs) +{ + return -TARGET_EPERM; +} + +/* kldfind(2) */ +static inline abi_long do_freebsd_kldfind(abi_ulong target_name) +{ + return -TARGET_ENOENT; +} + +/* kldnext(2) */ +static inline abi_long do_freebsd_kldnext(abi_long fileid) +{ + return -TARGET_ENOENT; +} + + +/* kldstat(2) */ +static inline abi_long do_freebsd_kldstat(abi_long fileid, + abi_ulong target_stat) +{ + return -TARGET_ENOENT; +} + +/* kldfirstmod(2) */ +static inline abi_long do_freebsd_kldfirstmod(abi_long fileid) +{ + return -TARGET_ENOENT; +} + +/* kldsym(2) */ +static inline abi_long do_freebsd_kldsym(abi_long fileid, abi_long cmd, + abi_ulong target_data) +{ + return -TARGET_ENOENT; +} + +/* + * New posix calls + */ + +#if TARGET_ABI_BITS =3D=3D 32 +static inline uint64_t target_offset64(uint32_t word0, uint32_t word1) +{ +#ifdef TARGET_BIG_ENDIAN + return ((uint64_t)word0 << 32) | word1; +#else + return ((uint64_t)word1 << 32) | word0; +#endif +} +#else /* TARGET_ABI_BITS =3D=3D 32 */ +static inline uint64_t target_offset64(uint64_t word0, uint64_t word1) +{ + return word0; +} +#endif /* TARGET_ABI_BITS !=3D 32 */ + +/* posix_fallocate(2) */ +static inline abi_long do_freebsd_posix_fallocate(abi_long arg1, abi_long = arg2, + abi_long arg3, abi_long arg4, abi_long arg5, abi_long arg6) +{ + +#if TARGET_ABI_BITS =3D=3D 32 + return get_errno(posix_fallocate(arg1, target_offset64(arg3, arg4), + target_offset64(arg5, arg6))); +#else + return get_errno(posix_fallocate(arg1, arg2, arg3)); +#endif +} + +/* posix_openpt(2) */ +static inline abi_long do_freebsd_posix_openpt(abi_long flags) +{ + + return get_errno(posix_openpt(flags)); +} =20 /* * shm_open2 isn't exported, but the __sys_ alias is. We can use either fo= r the @@ -19,7 +376,6 @@ int __sys_shm_open2(const char *path, int flags, mode_t mode, int shmflags, const char *); =20 -#if defined(__FreeBSD_version) && __FreeBSD_version >=3D 1300048 /* shm_open2(2) */ static inline abi_long do_freebsd_shm_open2(abi_ulong pathptr, abi_ulong f= lags, abi_long mode, abi_ulong shmflags, abi_ulong nameptr) @@ -56,9 +412,7 @@ static inline abi_long do_freebsd_shm_open2(abi_ulong pa= thptr, abi_ulong flags, } return ret; } -#endif /* __FreeBSD_version >=3D 1300048 */ =20 -#if defined(__FreeBSD_version) && __FreeBSD_version >=3D 1300049 /* shm_rename(2) */ static inline abi_long do_freebsd_shm_rename(abi_ulong fromptr, abi_ulong = toptr, abi_ulong flags) @@ -81,6 +435,110 @@ static inline abi_long do_freebsd_shm_rename(abi_ulong= fromptr, abi_ulong toptr, =20 return ret; } -#endif /* __FreeBSD_version >=3D 1300049 */ + +#if defined(CONFIG_GETRANDOM) +static inline abi_long do_freebsd_getrandom(abi_ulong buf, abi_ulong bufle= n, + abi_ulong flags) +{ + abi_long ret; + void *p; + + p =3D lock_user(VERIFY_WRITE, buf, buflen, 0); + if (p =3D=3D NULL) { + return -TARGET_EFAULT; + } + ret =3D get_errno(getrandom(p, buflen, flags)); + unlock_user(p, buf, ret); + + return ret; +} +#endif + +static inline abi_long do_freebsd_kenv(abi_long action, abi_ulong name, + abi_ulong value, abi_long len) +{ + abi_long ret; + void *gname =3D NULL; /* unlocked in cases where set */ + void *gvalue =3D NULL; /* unlocked in cases where set */ + + ret =3D -TARGET_EINVAL; + switch (action) { + case KENV_GET: + gname =3D lock_user_string(name); + if (gname =3D=3D NULL) { + ret =3D -TARGET_EFAULT; + break; + } + gvalue =3D lock_user(VERIFY_WRITE, value, len, 0); + if (gvalue =3D=3D NULL) { + ret =3D -TARGET_EFAULT; + break; + } + ret =3D get_errno(kenv(action, gname, gvalue, len)); + if (ret > 0) { + len =3D ret; + } else { + len =3D 0; + } + break; + case KENV_SET: + gname =3D lock_user_string(name); + if (gname =3D=3D NULL) { + ret =3D -TARGET_EFAULT; + break; + } + gvalue =3D lock_user(VERIFY_READ, value, len, 1); + if (gvalue =3D=3D NULL) { + ret =3D -TARGET_EFAULT; + break; + } + ret =3D get_errno(kenv(action, gname, gvalue, len)); + unlock_user(gvalue, value, 0); + gvalue =3D NULL; + break; + case KENV_UNSET: + gname =3D lock_user_string(name); + if (gname =3D=3D NULL) { + ret =3D -TARGET_EFAULT; + break; + } + /* value and name ignored, per kenv(2) */ + ret =3D get_errno(kenv(action, gname, NULL, 0)); + break; + /* All three treated the same */ + case KENV_DUMP: + case KENV_DUMP_LOADER: + case KENV_DUMP_STATIC: + /* value =3D=3D NULL -> just return length */ + if (value !=3D 0) { + gvalue =3D lock_user(VERIFY_WRITE, value, len, 0); + if (gvalue =3D=3D NULL) { + ret =3D -TARGET_EFAULT; + break; + } + } + /* name is ignored, per kenv(2) */ + ret =3D get_errno(kenv(action, NULL, gvalue, len)); + if (ret > 0) { + len =3D ret; + } else { + len =3D 0; + } + break; + default: + ret =3D -TARGET_EINVAL; + break; + } + + /* Unmap everything mapped */ + if (gvalue !=3D NULL) { + unlock_user(gvalue, value, len); + } + if (gname !=3D NULL) { + unlock_user(gname, name, 0); + } + + return ret; +} =20 #endif /* OS_MISC_H */ --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097718; cv=none; d=zohomail.com; s=zohoarc; b=emO2pyu+bl4ys1gNt2BwyKYmCows6ETa3bAyNBWAi9zLJSKW5Uk6LlS0VWh3lnzHnt2xm58csUA24LfELsLuSk+vXDEmEVBJeOtm6TajK/RB50niirygEPyoiuSU0X/llUCJZmmXhiYZc9w2OWutqwaP1CYLyWdTuHLwrD/uVH0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097718; h=Content-Type: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=JJ7lZQiWgQ297FIda9/iIZxdLWWnVxz/oXcAsyVeWMU=; b=gVF1SMG4EPycQRTbvM3QMlUVHH1N+1tNwKydJLljH94A6J1yxwUtU6kSZC425yqL5vnhnykoDvHW2hrbQH+9XU1J4AGClCZkJ01LUiiPiDFqcgL93xeaOatsU9QVmDfKgiSbaHzebUEV2uq6yqjNBM0kh/P9hjxYfDenU8qVU8I= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097718850530.3631253000405; Tue, 18 Aug 2026 17:01:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThj-0005ne-Oj; Tue, 18 Aug 2026 19:58:51 -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 1wwThh-0005e7-SX for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:49 -0400 Received: from mail-oi1-x22e.google.com ([2607:f8b0:4864:20::22e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwThe-0005L4-Sq for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:49 -0400 Received: by mail-oi1-x22e.google.com with SMTP id 5614622812f47-495b27007d0so383718b6e.1 for ; Tue, 18 Aug 2026 16:58:46 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097526; x=1787702326; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=JJ7lZQiWgQ297FIda9/iIZxdLWWnVxz/oXcAsyVeWMU=; b=cnYyERBI+2NvSUkQnb9+THvhSvX2uQ4G4CL7iBdsEpq+NS/cktxMI93sdiWj8lKSRK U16tJK4xSTB0MXG9GiAGdF2dX720zEjPYdwLRtA15GUoGQ2SwkPHrgl+Tf0opaMX1Wgx bPoirEguhI+9Cst9BHeZoXO1JbaWCj9lEls3S8WgZxcSLwQg6wLt7CmwebBocMzM3RLM oxPRFo3QYLLtz5figDdmBO3QmdtzgGX29qEoI3DOgJISOphFILxZGpg8yNmCoqFMC8gp 0AqGifhYuV8oFvK+LEK3OUa0kBeVU2iQHSbZmlx74cVFPjGg3KItnC+TLF0vNlfHIW0S gXSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097526; x=1787702326; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=JJ7lZQiWgQ297FIda9/iIZxdLWWnVxz/oXcAsyVeWMU=; b=eWrGE8eVMYGlpNczvfwl5VyTwrmI3vDdBLDiNqRA7aJrXZxT6tig8ADa5Ooz/9C0c9 3Gl3J6SS4wDkbtiRVWDg5Nuby+v3uy26ICU1R4iprXzYS7oN4kB8IDz6F954UK/q7Y9K uP/Xwx9w3cpkUPz3qRCK9EudQ3jprUuDN80Ym9Lh/7KUhCJO3lMJPo0MM7pHlCumHANa UZH2nhPBvxaqZSCouUtfdolKNTZPWswwkv+ddV1gD4x1Cjqz50oylTrwtcvL6V7stcsR CVDLbxauVU4rtjxJfJaBQ5HIuPPPO29EebZF7mc3a1EL3C/HBluwBhMT311M4FyOAFZP fpNA== X-Gm-Message-State: AOJu0YxjfnweGscsxC8bZpEETgOw19puqNvCNBGqimW1R7gWet5nThhg wkLNYDYXBo+oXR3jBSx8aaiGly339iVjYe9SMgJ8iBvJQj/Isx1qMmtEnQfCPPXDw0c= X-Gm-Gg: AR+sD138BWSgsEPAD2nUZYmlIv2/Svh6hx+yBrb00LVOBKDkBiSzMgtdvPyZbvoeBkE jFj/Hm6aYQOMWvlBCTLuz5ssEmte5bKs/kld7ta6b+MUj2YrErmH50gQwaGMjfSeOKHgdtvpUjg e0HUs+wncLy7OAELF+K7WOKyYhp5YwTpF8mPACXjm2bRvYJue6eok0m4txI9Zo/ZpnvVpfec4qv hDeMBk/inax0mQ/K7ngEgpiBh8Ojitl3Vl+GkGDym2utyoF7jeypXFjFtskEfxHm4PbALaOhBCX ERRO/ArtnkNb7knz+24aNDvEy3NAXH4dJqzj4PC20ARxkTlmavgzxFVMWFd6Jnx00jSneGlehlS gX+1PeKLH5JyjbDHQKyHMN83mIlcspawkAP7zbh4DEpVNJ6J8bDJ1/+k/Epq16/ypRUBPO7bP1Z QqVSFzg7cumfkMYuCLrSZHJn2C7zdkaeEId2rUAnr9pHr6LoO2oaR4hnuzEA== X-Received: by 2002:a05:6808:14c3:b0:4a4:88ab:126f with SMTP id 5614622812f47-4b2bcc22492mr316307b6e.21.1787097525578; Tue, 18 Aug 2026 16:58:45 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:31 -0600 Subject: [PATCH v4 38/40] bsd-user: Add scheduler, cpuset, kmod, and misc syscall dispatch MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-38-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Stacey Son , Kyle Evans , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=21220; i=imp@bsdimp.com; h=from:subject:message-id; bh=vkgsrOokvMjouYq9sezU8+xmgEG6sjF6PgIvnbgZANo=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFbY9k+il7pTTQ/458NnZwtBi/WXvJvAQ9jG 84K/AfSsxyJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxWxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQB+9Q/8Cij258IlPbAWz5CO3Y4KuI+jJC/myfS CZkaFZM8gbLXaVJWl3I93VL9xzWnkqBU7I2SJJuR1gHKssa8m7n6rJiDaZzTEfZulkk/kZ91Wuz Iy596o0aB/CttWghXFgOYHt6nEa75pLTCDUVI3Ob855MAcSsOG3gGgS4CNeEPk8ZJ8HyvxBNIdI CP69PpqosCjPU/9mw0vBQ6fL96MdmI7HcsPSayanWS3jNkiNraeZDJa+AK+aq70xIO9TOErMUGM QtbHLHqV0c94Rh3AE6Qy5JYsY455m/wmnh2OjmyCaCnb5cSLJ0O06Oj9/16EB0L3QAkZ+zAGfva t33PRBGUOdPyPy5gKw3u01CEH48rwJQAQPzsMtWDWTm5Gu4MIS63BhYpJXSuq/sCdcoQqySftBS IIp79GsrC+Yv9B9+F4E494nLqIWV6ijaP0j3dndV9PIx7tlkUl7zM8GWg8ufQXPOAL9zT5ggNwp o6w6WddMA2Zh8kViCLjVII3ghjPBmCVO7x2gKTnNFAKw+/2VvGZDemZi2ehiZgf173Nzt7+3Ivg L0utLcQ4o1CG0bwAzOt8NGNIHqvw1jMXlAwNBLveeSm381i0QKdjwrn5KVpZuUFWp+ShE+W91he iTOA1Vqp8r8y9g/fGfB23mE6q2AUF2E/jEtHGC6SZ+xCaUINRgjo= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2607:f8b0:4864:20::22e; envelope-from=imp@bsdimp.com; helo=mail-oi1-x22e.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097720443158500 Wire up remaining system calls: sched_setparam, sched_getparam, sched_setscheduler, sched_getscheduler, sched_get_priority_max, sched_get_priority_min, sched_rr_get_interval, sched_yield, cpuset, cpuset_setid, cpuset_getid, cpuset_getaffinity, cpuset_setaffinity, modfnext, modfind, kldload, kldunload, kldunloadf, kldfind, kldnext, kldstat, kldfirstmod, kldsym, posix_fallocate, posix_openpt, getrandom, kenv, cap_rights_limit, cap_ioctls_limit, cap_fcntls_limit, cap_enter, syscall, and __syscall. We also reshuffle a few system calls here to match the blitz branch which adds some churn, but is the least bad way to deal with the issues. Signed-off-by: Stacey Son Signed-off-by: Kyle Evans Assisted-by: Claude Opus 4.6 (1M context) Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-syscall.c | 512 ++++++++++++++++++++++++++------------= ---- 1 file changed, 323 insertions(+), 189 deletions(-) diff --git a/bsd-user/freebsd/os-syscall.c b/bsd-user/freebsd/os-syscall.c index a14efd3fd4..7e400c89bc 100644 --- a/bsd-user/freebsd/os-syscall.c +++ b/bsd-user/freebsd/os-syscall.c @@ -532,6 +532,10 @@ static abi_long freebsd_syscall(CPUArchState *env, int= num, abi_long arg1, ret =3D do_bsd_closefrom(arg1); break; =20 + case TARGET_FREEBSD_NR_close_range: /* close_range(2) */ + ret =3D do_freebsd_close_range(arg1, arg2, arg3); + break; + case TARGET_FREEBSD_NR_revoke: /* revoke(2) */ ret =3D do_bsd_revoke(arg1); break; @@ -696,6 +700,10 @@ static abi_long freebsd_syscall(CPUArchState *env, int= num, abi_long arg1, ret =3D do_bsd_chflags(arg1, arg2); break; =20 + case TARGET_FREEBSD_NR_chflagsat: /* chflagsat(2) */ + ret =3D do_bsd_chflagsat(arg1, arg2, arg3, arg4); + break; + case TARGET_FREEBSD_NR_lchflags: /* lchflags(2) */ ret =3D do_bsd_lchflags(arg1, arg2); break; @@ -740,6 +748,10 @@ static abi_long freebsd_syscall(CPUArchState *env, int= num, abi_long arg1, ret =3D do_bsd_poll(arg1, arg2, arg3); break; =20 + case TARGET_FREEBSD_NR_ppoll: /* ppoll(2) */ + ret =3D do_freebsd_ppoll(env, arg1, arg2, arg3, arg4); + break; + case TARGET_FREEBSD_NR_lseek: /* lseek(2) */ ret =3D do_bsd_lseek(env, arg1, arg2, arg3, arg4, arg5); break; @@ -766,14 +778,6 @@ static abi_long freebsd_syscall(CPUArchState *env, int= num, abi_long arg1, ret =3D do_bsd_swapoff(arg1, arg2); break; =20 - case TARGET_FREEBSD_NR_chflagsat: /* chflagsat(2) */ - ret =3D do_bsd_chflagsat(arg1, arg2, arg3, arg4); - break; - - case TARGET_FREEBSD_NR_close_range: /* close_range(2) */ - ret =3D do_freebsd_close_range(arg1, arg2, arg3); - break; - case TARGET_FREEBSD_NR___realpathat: /* __realpathat(2) (XXX no realpathat()) */ ret =3D do_freebsd_realpathat(arg1, arg2, arg3, arg4, arg5); @@ -787,125 +791,12 @@ static abi_long freebsd_syscall(CPUArchState *env, i= nt num, abi_long arg1, ret =3D do_freebsd___specialfd(arg1, arg2, arg3); break; =20 - /* - * ioctl(2) - */ - case TARGET_FREEBSD_NR_ioctl: /* ioctl(2) */ - ret =3D do_bsd_ioctl(arg1, arg2, arg3); - break; - - /* - * stat system calls - */ - case TARGET_FREEBSD_NR_freebsd11_stat: /* stat(2) */ - ret =3D do_freebsd11_stat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_lstat: /* lstat(2) */ - ret =3D do_freebsd11_lstat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_fstat: /* fstat(2) */ - ret =3D do_freebsd11_fstat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_fstat: /* fstat(2) */ - ret =3D do_freebsd_fstat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_fstatat: /* fstatat(2) */ - ret =3D do_freebsd11_fstatat(arg1, arg2, arg3, arg4); - break; - - case TARGET_FREEBSD_NR_fstatat: /* fstatat(2) */ - ret =3D do_freebsd_fstatat(arg1, arg2, arg3, arg4); - break; - - case TARGET_FREEBSD_NR_freebsd11_nstat: /* undocumented */ - ret =3D do_freebsd11_nstat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_nfstat: /* undocumented */ - ret =3D do_freebsd11_nfstat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_nlstat: /* undocumented */ - ret =3D do_freebsd11_nlstat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_getfh: /* getfh(2) */ - ret =3D do_freebsd_getfh(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_lgetfh: /* lgetfh(2) */ - ret =3D do_freebsd_lgetfh(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_fhopen: /* fhopen(2) */ - ret =3D do_freebsd_fhopen(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_fhstat: /* fhstat(2) */ - ret =3D do_freebsd11_fhstat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_fhstat: /* fhstat(2) */ - ret =3D do_freebsd_fhstat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_fhstatfs: /* fhstatfs(2) */ - ret =3D do_freebsd11_fhstatfs(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_fhstatfs: /* fhstatfs(2) */ - ret =3D do_freebsd_fhstatfs(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_statfs: /* statfs(2) */ - ret =3D do_freebsd11_statfs(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_statfs: /* statfs(2) */ - ret =3D do_freebsd_statfs(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_fstatfs: /* fstatfs(2) */ - ret =3D do_freebsd11_fstatfs(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_fstatfs: /* fstatfs(2) */ - ret =3D do_freebsd_fstatfs(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_getfsstat: /* getfsstat(2) */ - ret =3D do_freebsd11_getfsstat(arg1, arg2, arg3); - break; - - case TARGET_FREEBSD_NR_getfsstat: /* getfsstat(2) */ - ret =3D do_freebsd_getfsstat(arg1, arg2, arg3); - break; - - case TARGET_FREEBSD_NR_freebsd11_getdents: /* getdents(2) */ - ret =3D do_freebsd11_getdents(arg1, arg2, arg3); - break; - - case TARGET_FREEBSD_NR_getdirentries: /* getdirentries(2) */ - ret =3D do_freebsd_getdirentries(arg1, arg2, arg3, arg4); - break; - - case TARGET_FREEBSD_NR_freebsd11_getdirentries: /* getdirentries(2) */ - ret =3D do_freebsd11_getdirentries(arg1, arg2, arg3, arg4); - break; - case TARGET_FREEBSD_NR_fcntl: /* fcntl(2) */ - ret =3D do_freebsd_fcntl(arg1, arg2, arg3); - break; - /* * Memory management system calls. */ case TARGET_FREEBSD_NR_mmap: /* mmap(2) */ ret =3D do_bsd_mmap(env, arg1, arg2, arg3, arg4, arg5, arg6, arg7, - arg8); + arg8); break; =20 case TARGET_FREEBSD_NR_munmap: /* munmap(2) */ @@ -952,17 +843,13 @@ static abi_long freebsd_syscall(CPUArchState *env, in= t num, abi_long arg1, ret =3D do_bsd_shm_open(arg1, arg2, arg3); break; =20 -#if defined(__FreeBSD_version) && __FreeBSD_version >=3D 1300048 case TARGET_FREEBSD_NR_shm_open2: /* shm_open2(2) */ ret =3D do_freebsd_shm_open2(arg1, arg2, arg3, arg4, arg5); break; -#endif =20 -#if defined(__FreeBSD_version) && __FreeBSD_version >=3D 1300049 case TARGET_FREEBSD_NR_shm_rename: /* shm_rename(2) */ ret =3D do_freebsd_shm_rename(arg1, arg2, arg3); break; -#endif =20 case TARGET_FREEBSD_NR_shm_unlink: /* shm_unlink(2) */ ret =3D do_bsd_shm_unlink(arg1); @@ -984,68 +871,10 @@ static abi_long freebsd_syscall(CPUArchState *env, in= t num, abi_long arg1, ret =3D do_bsd_shmdt(arg1); break; =20 - /* - * System V Semaphores - */ - case TARGET_FREEBSD_NR_semget: /* semget(2) */ - ret =3D do_bsd_semget(arg1, arg2, arg3); - break; - - case TARGET_FREEBSD_NR_semop: /* semop(2) */ - ret =3D do_bsd_semop(arg1, arg2, arg3); - break; - - case TARGET_FREEBSD_NR___semctl: { /* __semctl() undocumented */ - ret =3D do_bsd___semctl(arg1, arg2, arg3, arg4); - break; - } - - /* - * System V Messages - */ - case TARGET_FREEBSD_NR_msgctl: /* msgctl(2) */ - ret =3D do_bsd_msgctl(arg1, arg2, arg3); - break; - - case TARGET_FREEBSD_NR_msgget: /* msgget(2) */ - ret =3D do_bsd_msgget(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_msgsnd: /* msgsnd(2) */ - ret =3D do_bsd_msgsnd(arg1, arg2, arg3, arg4); - break; - - case TARGET_FREEBSD_NR_msgrcv: /* msgrcv(2) */ - ret =3D do_bsd_msgrcv(arg1, arg2, arg3, arg4, arg5); - break; - case TARGET_FREEBSD_NR_freebsd11_vadvise: ret =3D do_bsd_vadvise(); break; =20 - /* - * Misc - */ - case TARGET_FREEBSD_NR_break: - ret =3D do_obreak(arg1); - break; - - case TARGET_FREEBSD_NR_quotactl: /* quotactl(2) */ - ret =3D do_bsd_quotactl(arg1, arg2, arg3); - break; - - case TARGET_FREEBSD_NR_reboot: /* reboot(2) */ - ret =3D do_bsd_reboot(arg1); - break; - - case TARGET_FREEBSD_NR_uuidgen: /* uuidgen(2) */ - ret =3D do_bsd_uuidgen(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_getdtablesize: /* getdtablesize(2) */ - ret =3D do_bsd_getdtablesize(); - break; - /* * time related system calls. */ @@ -1133,10 +962,6 @@ static abi_long freebsd_syscall(CPUArchState *env, in= t num, abi_long arg1, ret =3D do_freebsd_pselect(env, arg1, arg2, arg3, arg4, arg5, arg6= ); break; =20 - case TARGET_FREEBSD_NR_ppoll: /* ppoll(2) */ - ret =3D do_freebsd_ppoll(env, arg1, arg2, arg3, arg4); - break; - case TARGET_FREEBSD_NR_kqueue: /* kqueue(2) */ ret =3D do_freebsd_kqueue(); break; @@ -1350,6 +1175,119 @@ static abi_long freebsd_syscall(CPUArchState *env, = int num, abi_long arg1, ret =3D do_freebsd__umtx_op(arg1, arg2, arg3, arg4, arg5); break; =20 + /* + * ioctl(2) + */ + case TARGET_FREEBSD_NR_ioctl: /* ioctl(2) */ + ret =3D do_bsd_ioctl(arg1, arg2, arg3); + break; + + /* + * stat system calls + */ + case TARGET_FREEBSD_NR_freebsd11_stat: /* stat(2) */ + ret =3D do_freebsd11_stat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_lstat: /* lstat(2) */ + ret =3D do_freebsd11_lstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_fstat: /* fstat(2) */ + ret =3D do_freebsd11_fstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_fstat: /* fstat(2) */ + ret =3D do_freebsd_fstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_fstatat: /* fstatat(2) */ + ret =3D do_freebsd11_fstatat(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_fstatat: /* fstatat(2) */ + ret =3D do_freebsd_fstatat(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_freebsd11_nstat: /* undocumented */ + ret =3D do_freebsd11_nstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_nfstat: /* undocumented */ + ret =3D do_freebsd11_nfstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_nlstat: /* undocumented */ + ret =3D do_freebsd11_nlstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_getfh: /* getfh(2) */ + ret =3D do_freebsd_getfh(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_lgetfh: /* lgetfh(2) */ + ret =3D do_freebsd_lgetfh(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_fhopen: /* fhopen(2) */ + ret =3D do_freebsd_fhopen(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_fhstat: /* fhstat(2) */ + ret =3D do_freebsd11_fhstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_fhstat: /* fhstat(2) */ + ret =3D do_freebsd_fhstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_fhstatfs: /* fhstatfs(2) */ + ret =3D do_freebsd11_fhstatfs(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_fhstatfs: /* fhstatfs(2) */ + ret =3D do_freebsd_fhstatfs(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_statfs: /* statfs(2) */ + ret =3D do_freebsd11_statfs(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_statfs: /* statfs(2) */ + ret =3D do_freebsd_statfs(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_fstatfs: /* fstatfs(2) */ + ret =3D do_freebsd11_fstatfs(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_fstatfs: /* fstatfs(2) */ + ret =3D do_freebsd_fstatfs(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_getfsstat: /* getfsstat(2) */ + ret =3D do_freebsd11_getfsstat(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_getfsstat: /* getfsstat(2) */ + ret =3D do_freebsd_getfsstat(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_freebsd11_getdents: /* getdents(2) */ + ret =3D do_freebsd11_getdents(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_getdirentries: /* getdirentries(2) */ + ret =3D do_freebsd_getdirentries(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_freebsd11_getdirentries: /* getdirentries(2) */ + ret =3D do_freebsd11_getdirentries(arg1, arg2, arg3, arg4); + break; + case TARGET_FREEBSD_NR_fcntl: /* fcntl(2) */ + ret =3D do_freebsd_fcntl(arg1, arg2, arg3); + break; + /* * sys{ctl, arch, call} */ @@ -1365,8 +1303,14 @@ static abi_long freebsd_syscall(CPUArchState *env, i= nt num, abi_long arg1, ret =3D do_freebsd_sysarch(env, arg1, arg2); break; =20 + case TARGET_FREEBSD_NR_syscall: /* syscall(2) */ + case TARGET_FREEBSD_NR___syscall: /* __syscall(2) */ + ret =3D do_freebsd_syscall(env, arg1 & 0xffff, arg2, arg3, arg4, + arg5, arg6, arg7, arg8, 0); + break; + /* - * extended attributes and ACL system calls + * extended attributes system calls */ case TARGET_FREEBSD_NR_extattrctl: /* extattrctl() */ ret =3D do_freebsd_extattrctl(arg1, arg2, arg3, arg4, arg5); @@ -1468,6 +1412,196 @@ static abi_long freebsd_syscall(CPUArchState *env, = int num, abi_long arg1, ret =3D do_freebsd__acl_set_link(arg1, arg2, arg3); break; =20 + /* + * System V Semaphores + */ + case TARGET_FREEBSD_NR_semget: /* semget(2) */ + ret =3D do_bsd_semget(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_semop: /* semop(2) */ + ret =3D do_bsd_semop(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR___semctl: { /* __semctl() undocumented */ + ret =3D do_bsd___semctl(arg1, arg2, arg3, arg4); + break; + } + + /* + * System V Messages + */ + case TARGET_FREEBSD_NR_msgctl: /* msgctl(2) */ + ret =3D do_bsd_msgctl(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_msgget: /* msgget(2) */ + ret =3D do_bsd_msgget(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_msgsnd: /* msgsnd(2) */ + ret =3D do_bsd_msgsnd(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_msgrcv: /* msgrcv(2) */ + ret =3D do_bsd_msgrcv(arg1, arg2, arg3, arg4, arg5); + break; + + /* + * FreeBSD scheduler control + */ + case TARGET_FREEBSD_NR_sched_setparam: /* sched_setparam(2) */ + ret =3D do_freebsd_sched_setparam(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_sched_getparam: /* sched_getparam(2) */ + ret =3D do_freebsd_sched_getparam(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_sched_setscheduler: /* sched_setscheduler(2) */ + ret =3D do_freebsd_sched_setscheduler(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_sched_getscheduler: /* sched_getscheduler(2) */ + ret =3D do_freebsd_sched_getscheduler(arg1); + break; + + case TARGET_FREEBSD_NR_sched_get_priority_max: /* sched_get_priority_m= ax(2)*/ + ret =3D do_bsd_sched_get_priority_max(arg1); + break; + + case TARGET_FREEBSD_NR_sched_get_priority_min: /* sched_get_priority_m= in(2)*/ + ret =3D do_bsd_sched_get_priority_min(arg1); + break; + + case TARGET_FREEBSD_NR_sched_rr_get_interval: /* sched_rr_get_interval= (2) */ + ret =3D do_freebsd_sched_rr_get_interval(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_sched_yield: /* sched_yield(2)*/ + ret =3D do_bsd_sched_yield(); + break; + + + /* + * FreeBSD CPU affinity sets management + */ + case TARGET_FREEBSD_NR_cpuset: /* cpuset(2) */ + ret =3D do_freebsd_cpuset(arg1); + break; + + case TARGET_FREEBSD_NR_cpuset_setid: /* cpuset_setid(2) */ + ret =3D do_freebsd_cpuset_setid(env, arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_cpuset_getid: /* cpuset_getid(2) */ + ret =3D do_freebsd_cpuset_getid(arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_cpuset_getaffinity: /* cpuset_getaffinity(2) */ + ret =3D do_freebsd_cpuset_getaffinity(arg1, arg2, arg3, arg4, arg5= , arg6); + break; + + case TARGET_FREEBSD_NR_cpuset_setaffinity: /* cpuset_setaffinity(2) */ + ret =3D do_freebsd_cpuset_setaffinity(arg1, arg2, arg3, arg4, arg5= , arg6); + break; + + /* + * FreeBSD kernel module + */ + case TARGET_FREEBSD_NR_modfnext: /* modfnext(2) */ + ret =3D do_freebsd_modfnext(arg1); + break; + + case TARGET_FREEBSD_NR_modfind: /* modfind(2) */ + ret =3D do_freebsd_modfind(arg1); + break; + + case TARGET_FREEBSD_NR_kldload: /* kldload(2) */ + ret =3D do_freebsd_kldload(arg1); + break; + + case TARGET_FREEBSD_NR_kldunload: /* kldunload(2) */ + ret =3D do_freebsd_kldunload(arg1); + break; + + case TARGET_FREEBSD_NR_kldunloadf: /* kldunloadf(2) */ + ret =3D do_freebsd_kldunloadf(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_kldfind: /* kldfind(2) */ + ret =3D do_freebsd_kldfind(arg1); + break; + + case TARGET_FREEBSD_NR_kldnext: /* kldnext(2) */ + ret =3D do_freebsd_kldnext(arg1); + break; + + case TARGET_FREEBSD_NR_kldstat: /* kldstat(2) */ + ret =3D do_freebsd_kldstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_kldfirstmod: /* kldfirstmod(2) */ + ret =3D do_freebsd_kldfirstmod(arg1); + break; + + case TARGET_FREEBSD_NR_kldsym: /* kldsym(2) */ + ret =3D do_freebsd_kldsym(arg1, arg2, arg3); + break; + + /* + * FreeBSD additional posix support + */ + case TARGET_FREEBSD_NR_posix_fallocate: /* posix_fallocate(2) */ + ret =3D do_freebsd_posix_fallocate(arg1, arg2, arg3, arg4, arg5, a= rg6); + break; + + case TARGET_FREEBSD_NR_posix_openpt: /* posix_openpt(2) */ + ret =3D do_freebsd_posix_openpt(arg1); + break; + + /* + * Misc + */ + case TARGET_FREEBSD_NR_quotactl: /* quotactl(2) */ + ret =3D do_bsd_quotactl(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_reboot: /* reboot(2) */ + ret =3D do_bsd_reboot(arg1); + break; + + case TARGET_FREEBSD_NR_uuidgen: /* uuidgen(2) */ + ret =3D do_bsd_uuidgen(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_getdtablesize: /* getdtablesize(2) */ + ret =3D do_bsd_getdtablesize(); + break; + + case TARGET_FREEBSD_NR_break: + ret =3D do_obreak(arg1); + break; + +#if defined(CONFIG_GETRANDOM) + case TARGET_FREEBSD_NR_getrandom: + ret =3D do_freebsd_getrandom(arg1, arg2, arg3); + break; +#endif + case TARGET_FREEBSD_NR_kenv: + ret =3D do_freebsd_kenv(arg1, arg2, arg3, arg4); + break; + + /* XXX */ + case TARGET_FREEBSD_NR_cap_rights_limit: + case TARGET_FREEBSD_NR_cap_ioctls_limit: + case TARGET_FREEBSD_NR_cap_fcntls_limit: + ret =3D -TARGET_EINVAL; + break; + case TARGET_FREEBSD_NR_cap_enter: + ret =3D 0; + break; + default: qemu_log_mask(LOG_UNIMP, "Unsupported syscall: %d\n", num); ret =3D -TARGET_ENOSYS; --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097652; cv=none; d=zohomail.com; s=zohoarc; b=EGeqlX4u+hZHKMNAeaOM6cx1JNKh43+38KCxEznQHxs4Ih1sMVG5h4QrH+TsJFo1fk3+dqKHYymo+LaJ7subn4VDlY8YNJ/ylretoVg0+blv4kdVYNQzJYde3nm1jhIXFtJKlX0OB9It63402t+EFniOWKzmGBS8l9SLt9YmKRo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097652; h=Content-Type: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=gJW1pLTwuH0t86bH48YzFfYCkbVwg260DU7bLqkOZXU=; b=Kdcv1LdXrhzMBUbuJx8qUA9aruq+nUpCrzpVMtZd15q5whawW05lD8E4U9brr5gpZlyVxWE/5VE7KHDm4XQow1rInh6GeV9bzkLd07RFEGhoXUyxhAXgwDSk9eNYCqY81tO89SI10DO2z4eERoBo5xzwaEuv7AOpJmp14U9Onjg= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097652608716.3687901147579; Tue, 18 Aug 2026 17:00:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThk-0005qN-CS; Tue, 18 Aug 2026 19:58:52 -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 1wwThi-0005g6-7K for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:50 -0400 Received: from mail-oa1-x2a.google.com ([2001:4860:4864:20::2a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwThg-0005LL-M2 for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:49 -0400 Received: by mail-oa1-x2a.google.com with SMTP id 586e51a60fabf-44cd237446cso394005fac.1 for ; Tue, 18 Aug 2026 16:58:48 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097527; x=1787702327; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=gJW1pLTwuH0t86bH48YzFfYCkbVwg260DU7bLqkOZXU=; b=I1pGz+ZQufrhQxbpr02vRtpRVIfi1b3VfWTWJLzqvDnDyj7Wx4RVXtk4gsXiJCWvU8 O6CbC0MTxBRys7o1GEJxyBWF6DkN382g/eAshRwlziQSqiQYRp7gY0jp/u8RvPv4OZqG Fp5WKm74polqA/GNka7eFgNrE+l404WuzlQKGaUcoI9NFe1pglTYmwO52DteRCVXjBSB JFgsl4OLg0rzg9w9vnruoKSemRUGJLvcGSRiWE95a1npm4SARwAqP5yAGLNFb0fE1QcB 3GeeeZbs9+I876yrUVC9ZAC1FJD0A8wP4e2YoxL4I9Rkm6uPJStHip2FnhREIC2nZZ8B oKJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097527; x=1787702327; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=gJW1pLTwuH0t86bH48YzFfYCkbVwg260DU7bLqkOZXU=; b=qK+/OTC3xMbbo7r7X6+lDW7MzwJi1JK34W6WNmQzUcyxStBSqbWSIP248gqN8EEcHQ V6mOjamx5l+nb6TxKBB+/DaAfhm76xwm5SsgqP7wTdUnsxAr80tkYRfO6Khi8Bokz38L ShAUX0Pd0lJIC1q+JbteRp8fNZ45672p0KceL0HRVQucQjjB31J/ccHNsAaby4owXCYr K8jNb2W20mATTkdBSQPbSg5FVTCYkFU8mDQoQysLMxOCFtazImeDRegh5kZUTKvyKnLb SchVtbS+Vo6H+W95peZeyfcAlVskkLrhp0vF4saLePI676ejGfE8l+1zdQDr5Ay90Ks0 o5Hg== X-Gm-Message-State: AOJu0Yy1smNL/LR2Pe7meky5n/buCPEv0UmAu5Xf9mBXEBbmOe+fZlw9 ltsqHmyV8+mePF4s4YHzxmDqtrD9DbyiT0uen01ZTmdadtfhwcyZ0G124ay/jD0rePk= X-Gm-Gg: AR+sD13ddxWrDz25m8w41sdYfah7uVBnFHkEVaP9kn6XLXXdxCf3DDB8KkM5YdT1yrO F6A7SUvYZhkTusl8fqyU+zYrjWyexglqvQqvpyphbV66wgdIDP1cMAo8+jF+irOaXd128FDMiL/ fHM/hnDA1iuTO0Gw6xHnuSo5iOttFM9EDqDzhvOOoP7vTW1Vljo5X1Do9KIrErHGtSutiiPWRzt nEUbcsc9CmGnysvURnYbzAtIPIUXSXVGOJXHBPzSFZev9j75ClHzuj23vnw7s88jYOesh8urRDY ls+wBCH9j9rSoukLLmAiqumEypul6nt0M4FLPFPOIkse0MNbH/HKS+o121bYJ8i/5WRsKaLdlxd 8RpXefK7mD5MpQhFb+moTm3r795QB/x/FmWmAvG3WVEDynNodQx50W2zgwPGBq2JUQx2SJKGscW CM5Z3pewTSf/GJzob1keG7SmayM4U5Pm0i6OY5z+uojSnqoR0= X-Received: by 2002:a05:6808:4f54:b0:4b2:8ee8:8a38 with SMTP id 5614622812f47-4b2bc475822mr428212b6e.0.1787097527584; Tue, 18 Aug 2026 16:58:47 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:32 -0600 Subject: [PATCH v4 39/40] bsd-user: Move qemu_guest_random_seed_main to same as linux-user MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-39-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1039; i=imp@bsdimp.com; h=from:subject:message-id; bh=WlvRC0WvL6l8+YYkFsDz555g+6PhNOds2e8soTa30oE=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFdqkvpySVN8hfsOA79dwD/z/Z7xfAbmg2Yn T/CTS1Z0OKJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxXRsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQCvcRAAptiGAprgirPS5pSQgc5ScOo/FPZy5zS crVM3OS7NkRlju9NMx8idyHXn9Qo20PgaC97lviaaNfhFFEtojbvcw6yadCLRIMnHgat8OuEWFy xNN6aLNvOYYjlO+p3Ju21bAfeEW6dyht8WCw9TcWdXQ3WcGpu1ivmUSVpYoEjZ/1aK/EFXlkoj1 t0szTjddUykLogACpNaM9Ko4CbaVdB0DEifQ7AEGrbdmw3sNXPiNshyEf+OqzAFleNwWbyfoUL2 Q4tHIRA0UNkGxcXD/Asd64lDkBvmtpNNZlsIsClQJpK0IPnfyjw3vGk+C1T2bQYfofSXwqv0PQ7 xWTJfq3NIjDJi/mgKmDfLfBLUCdnmXs/hZbDgQR603PoFsGf4R/DhzYo+NaCO/1Hl64j7jYzZm3 Egc21RXG/DeOMaW4EocZIMb1kpKy2p1HaLkA+pZaSG9uiTfnhmIcINAjxEDGeNm++vwGBVj8Ky+ a0PPD87dmVErlFq6J6Unrm4kDQ2mPgUSVq4sUAiLT2Stbo0onU7yCncrzAHI9x8QhIPYoSxuNF1 /cJi6lM8eaJ0sF0WkSZwHDbus+w7CrbEorpIxeNI0bGcFWLvHxUm/wV21uy1hvyBLBi+OoSUt9F ZNMeNIMcvGMfCenXA4Fxvp+/VBJTj2aAlalCN4V0meR94ueB8XBk= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2001:4860:4864:20::2a; envelope-from=imp@bsdimp.com; helo=mail-oa1-x2a.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097654028158500 Linux-user initializes this before doing the environment stuff. Go ahead and move it there for consistency, though it doesn't matter since we don't use it until later. Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bsd-user/main.c b/bsd-user/main.c index 2fbbfc3d86..13cd752b99 100644 --- a/bsd-user/main.c +++ b/bsd-user/main.c @@ -541,9 +541,6 @@ int main(int argc, char **argv) do_strace =3D 1; } =20 - target_environ =3D envlist_to_environ(envlist, NULL); - envlist_free(envlist); - { Error *err =3D NULL; if (seed_optarg !=3D NULL) { @@ -557,6 +554,9 @@ int main(int argc, char **argv) } } =20 + target_environ =3D envlist_to_environ(envlist, NULL); + envlist_free(envlist); + /* * Now that page sizes are configured we can do * proper page alignment for guest_base. --=20 2.55.0 From nobody Mon Sep 28 00:55:52 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 ARC-Seal: i=1; a=rsa-sha256; t=1787097675; cv=none; d=zohomail.com; s=zohoarc; b=JgAavefnHCsbM2sHgJuLwm68mOueMhSiDY3GsY0eUu6jJrnfTjut27prcJt1ENcYW4u8TGOCClVPK3ZbIkCMMwYkp3v2O2EW1cFeEgvMDWay6MRY6/Ni8G+r65L2w9H+32cVa7dcVhownn0B7VESf0sUt/dcrNtKXEyZyApqLUs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1787097675; h=Content-Type: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=sGX1jc55xYmO11nLE9YAO+NyXCHPIuF2VOVhWdvByqQ=; b=jmgz103/J9ScPBQ642PlP1KtmS9WcWGZiwGl2E/lRa246ILTpWHaGFFzYM5Vo92XfmjDbg0QgdTxMd2q1t6U65mgpyXhvRIHVNTBKiXwt2hDF7/bfQhJL0DfxOrxQ3m9h4KYgPOy4y9W9G3foQo0OPJ/KLpYSRTYuwOHGilnD2Q= 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 Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1787097675469587.7067585706329; Tue, 18 Aug 2026 17:01:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wwThm-0005xI-8C; Tue, 18 Aug 2026 19:58:54 -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 1wwThk-0005qX-DX for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:52 -0400 Received: from mail-oa1-x29.google.com ([2001:4860:4864:20::29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1wwThi-0005Ll-Od for qemu-devel@nongnu.org; Tue, 18 Aug 2026 19:58:52 -0400 Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-462df62f872so612967fac.0 for ; Tue, 18 Aug 2026 16:58:50 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 5614622812f47-4b2906a3edesm4835341b6e.0.2026.08.18.16.58.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Aug 2026 16:58:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1787097530; x=1787702330; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=sGX1jc55xYmO11nLE9YAO+NyXCHPIuF2VOVhWdvByqQ=; b=WQ4nAsHVT9xaH02/RoDBOu0z6Fp7MsBdxaNgZbFx7JI2D+D9qr7Ig2Cj8E4VzFIfKn H1tqAGaOCnodvHhUtJCBVpvw5vVfJRC06ntgNDFnwOqwlNbSFMaWIwaQbVFBJqXcV+y+ q4fURDcymO85WM5catvI4To7CeCwTcfSABeqheWHFL35+Q6e6XahcWJaWfMeb4rw9BdA O4WGVTP4qdLhIuNf+kNYP7CrBe9kYuERSCyiOPLF6XGFNcViktIqFQ/ssKzm5wgvBjii ilO+AYE3PUAvx8pLdmPOzYl5QdttcXafkMANnEk0nlxtljDDEbd/14kfauYCglLreZR5 jr3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787097530; x=1787702330; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=sGX1jc55xYmO11nLE9YAO+NyXCHPIuF2VOVhWdvByqQ=; b=OKL0IUQx612zXpo85SgytPIWzqYHiyLOm6WpHSmKYOhpayFQQ8TuaDMvotA1pvJGvQ 44/yqZLSYE6yncWdNrG+LC8/P9FXOhICOu7I3kXz7IQcs0r1yEBCEmtFvs84nJXhwPMk II3o/Vo8U7X9ugVqp93WS2/N7q3qcp24QLZAq1GL2X6KFkHwZD3vh/sjXg/mSfHtUt1o +A3cJ9O5hN4CQWBbTxh2wrQC246EGb2Db9uIR3o8dcmcjFi3kEnI/Slo2D8cGnTuvjj+ LHh1j2qNBGshS35KyL+/KLvMt7au1RC0+98jxrLaMVPBf+C9Qh5WjLxuZgqm0hv8R7la FfSg== X-Gm-Message-State: AOJu0Yzqbknt4FS7cNcD9xIb4UmM/6AdPJ7cBKD5On1Z9GC+R33ATtYK Fxb/Zd92LaxM+BbYoHWjluxaxcpZCIPPkkSpCATOleIpxDERw3qowLymEd3oml/TXsw= X-Gm-Gg: AR+sD11YCRBYieMhubgjRfIjgyRNVla0to1qW1oWeFb7wMz36dxbhVh4GHdY5mh1B5L iEv9M9UkcgzmX96rakHN2ELWM5wo30/xuCOgaTcPKy25aur+ovnMRBVoMoUtR2X4sHFN4J6kRS5 24u0ONBlDqSefgTvLe1jsrRB90nYQdh14Q1RMYQRqzIsv3LRhoam5VgTZd/L5E8QVuFEhoj/C1b X/oKFXjJ30qVYfH+fbO4yWk+OOu47/32/gRkkHhyIuFba71dLYClbBX/qndx9ItsMsGS11iYSHy /NcWhaCq4uQis3jzqbzoBiHSsj0hIsVeG/7v27Mbz+vb/c7TK3d+8YISO+zi759kN+CefIj9plM hpvOeDZckBtxpXCFEz6mWKSjp93r0HXeD7ce0+pHEwR/xUYytkdBalF5IyIxkC6Jof+dMGbQYSN KwBZp0luxjEkgMngQfMHSIsvlm2ebE//1QfomXucu2q0nMmwK6cr1VaDPLsw== X-Received: by 2002:a05:6808:23d4:b0:4a4:c95a:38d1 with SMTP id 5614622812f47-4b2ba5e8fe6mr849040b6e.4.1787097529635; Tue, 18 Aug 2026 16:58:49 -0700 (PDT) From: Warner Losh Date: Tue, 18 Aug 2026 17:56:33 -0600 Subject: [PATCH v4 40/40] bsd-user Update random_seed on thread creation MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260818-misc-2026q2-v4-40-09bf5647c98e@bsdimp.com> References: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> In-Reply-To: <20260818-misc-2026q2-v4-0-09bf5647c98e@bsdimp.com> To: qemu-devel@nongnu.org Cc: Kyle Evans , Pierrick Bouvier , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Warner Losh , Richard Henderson X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1665; i=imp@bsdimp.com; h=from:subject:message-id; bh=jel7BUfjuAeI94sDVtPsn23nHuJBSBrlyEnEBbOpMBI=; b=owEBiQJ2/ZANAwAKAWwc0Sh9sBEAAcsmYgBqhPFfB+211hzwCLxoPj1Lgw5ajiXPcEPoTbJfj De0hUOy0GCJAk8EAAEKADkWIQQgNfiUsAqjz3zN4bdsHNEofbARAAUCaoTxXxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDMACgkQbBzRKH2wEQA8cw//WYsBFKwkbLBQeyJFvQSh27gtuySKwHw RZuhUB0xrFT68xDP7iqXSnda+j/7zlWvU/yLPy4/5SnSNnRVc7PM6/wpznmvFWQTzUsjfLwCz5a HW0ns+RGXzBdWDErWc1nL/cs/3cUw5/lr+AnOpAWV3M0jLvubUYDN7ziPyBxwe19wdaxMNsZcB3 gHC3169kGFjns3qFG904sERifScf+N8KrVV0VLH1LPSr3SmiR6zrpYl05jnsDmarIHJuKMFeG3T xlQ1M0+e8dWyuwflFg4kUsXRlw8aCJTHCe0JujgwEXdZklrd1T90iiNkdmwH8wbBs/Rp0gSe6TR 1wB6eTaPkjwfb5QLRs7yWtxeImVUNfp5vHIre6T/uOHUyAiVN/JslRVlcI5mYDWNFhYzPv8TiN0 tr9fZNbzwpxVQILHPl2Mtx0aKyQiwfMSQMgfIEbR86br2t9lCJQWSi6H6NA/4TqbHd3o125rPc7 a4HYFDMXr9Nm9XFu0XRMBetgVGvZoWsI83Oehh3M0ePvby3dv74huvKmNBtaytKQLW4WIU5IkZP sXnnlsm3qD7gUTa8xcHKyzSricJG2tC73bZ03ZW0E4jBMOw4wc2OQuBAr3GC57cWOyescnCYH1U HoRox1iLEp6WoQ6jX/hDm9xWWPIV/EgPI96/RSIqhLnNEpv5cuKg= X-Developer-Key: i=imp@bsdimp.com; a=openpgp; fpr=2035F894B00AA3CF7CCDE1B76C1CD1287DB01100 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: none client-ip=2001:4860:4864:20::29; envelope-from=imp@bsdimp.com; helo=mail-oa1-x29.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_NONE=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 @bsdimp-com.20251104.gappssmtp.com) X-ZM-MESSAGEID: 1787097676109158500 Initialize / update cpu->random_seed in similar locations to the linux-user code. Set it just before we create the thread, and update it in the thread startup code. Reported-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Acked-by: Richard Henderson Signed-off-by: Warner Losh --- bsd-user/freebsd/os-thread.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bsd-user/freebsd/os-thread.c b/bsd-user/freebsd/os-thread.c index 63c17e10d0..15872f03fd 100644 --- a/bsd-user/freebsd/os-thread.c +++ b/bsd-user/freebsd/os-thread.c @@ -14,6 +14,7 @@ #include "signal-common.h" #include "target_arch_cpu.h" #include "target_arch_thread.h" +#include "qemu/guest-random.h" #include "tcg/startup.h" #include "exec/tb-flush.h" =20 @@ -142,7 +143,7 @@ void *new_freebsd_thread_start(void *arg) target_thread_set_upcall(env, info->param.start_func, info->param.arg, info->param.stack_base, info->param.stack_size); target_cpu_set_tls(env, info->param.tls_base); - + qemu_guest_random_seed_thread_part2(cpu->random_seed); /* Enable signals */ sigprocmask(SIG_SETMASK, &info->sigmask, NULL); /* Signal to the parent that we're ready. */ @@ -1657,6 +1658,7 @@ abi_long do_freebsd_thr_new(CPUArchState *env, */ sigfillset(&sigmask); sigprocmask(SIG_BLOCK, &sigmask, &info.sigmask); + cpu->random_seed =3D qemu_guest_random_seed_thread_part1(); =20 ret =3D pthread_create(&info.thread, &attr, new_freebsd_thread_start, = &info); =20 --=20 2.55.0