From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 5BD5BC982D9 for ; Fri, 18 Sep 2026 04:28:26 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1x7QAk-0005pc-Rb; Fri, 18 Sep 2026 00:26:02 -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 1x7QAk-0005np-0J for qemu-devel@nongnu.org; Fri, 18 Sep 2026 00:26:02 -0400 Received: from mail-oi2-x27.google.com ([2607:f8b0:4864:32::27]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1x7QAh-0004QD-AQ for qemu-devel@nongnu.org; Fri, 18 Sep 2026 00:26:01 -0400 Received: by mail-oi2-x27.google.com with SMTP id 46e09a7af769-8055dcba0a5so51746a34.1 for ; Thu, 17 Sep 2026 21:25:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20251104.gappssmtp.com; s=20251104; t=1789705558; x=1790310358; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=PeXmulczeEFfRnnsswIIkQUohVaNMNkAYTGURuthEZk=; b=UwT/odQ4Ah9pSBM/39pYCwUA3ZA7QWWFwB6Y+IIUcnt7jbizTsdixFM9S4ggbUYxpm cS6HYdBX2fRHXWr/gRPIwPtSYkpaIJPM4xL/eD3sLDQYV2PFzH1gbd1BXi/XiWPUt1+w 06LL9lMz38kskTz/Ce3eOS4q7U58j/C3zSXqpF6/YS0O0B4vlVHe7YXvqdhcHh3etSH5 xbuQlwzbN1PDHj2oe41yo2PYZ0Bie1UM69fenoC+1ujU0vZu3j476j34m02CSDbvwlQu wOCTXHGE8ve3HWZCPTAjvMiGkKHw3ZwmO8bNroGyCmaNzYeXrblNLjJyf3LvMUJZ5b2u k/jQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789705558; x=1790310358; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=PeXmulczeEFfRnnsswIIkQUohVaNMNkAYTGURuthEZk=; b=P1ZIFC6awaYbcbEtZDhkQZqmvVxfPfXAnWXpFQAGteyY2f7B/w2wd5PlDxaUNpYieJ vC9ZOJDjo3UJH4ATF7cnIpDhTLJYOW/dla6yhEYumRa6O1Qkiumy/50CoH9U2D2EtExt PxFxI7dfHAMB+TbJ0xFvYxYXOdBcydre3EGzaa7VHlCaFVm+aa+p4OQzdhOun27WYIJz T/hYCDf2qRWi6STjOq2AKtvfIOy378w5Kt+/GPd2MjJVRru9lHQyp5diA3ZtvTDoerlp gzAr0+Z71+Ou5Gx8Rl0wUyoIdIkrdt4/GUddsfDWAhGZTQ2WiyI2Ur+BvBUMgtK4LN1v sV2Q== X-Gm-Message-State: AFuF++kPAkywx4MmMS/zA94qV49ZqSc5+4IfrLk7ckjqySru6Hg00wVF diwZvUFxDitPGJAx1kDD9dFL5CJQ5/uPGdvqBT4vMmj3zMAjkL/lttxtB16ieaTvFy+Vi1lmIEJ vHDiVGRw= X-Gm-Gg: AYBFou0kyFoY0IKQKD9Qf+LBMepfD+FeaLTOr6nyFTb0wXSGoG2Rn/AJGbVylv6lf8h VrLVrS7hRq/jvH0W9lqe1gg2hkTgZD9xgIxyZjSk31P7KE+PvleiGtInN11Kr3rzzugmGuaPou1 J3ZdNf0Xy2k7+Mt9hyRv+gFxdzagvktcXSQnYES0bnUQQvSSJD57n9QfkH4yUGu0XvPYizSuWMY wWCh6xl8BssC8sc/0C9zs2vpArSEorCkmeKZb1OiG9V/F3JPUSahFiEdBGOLiQ4EXfvVfTnIrB7 uWxhzy4LR9mQ2lUMI0dFVGo4OIibMmTWiEvW4ttdeSHgt6nbZDkW2Mf9KVDGJuMl5iee3tURJGb ee1YoXA4A3yhj0dxDzRR4uchPM0k7o1uAhC9iISuyhUSrsD/Hhsv7P+NNmjrH+wpTtA+hi+rW4a zZNUFoXe6D/ujC3jDo+Dg8AFo35Eu7HuvXaafYXB3i1nisCDuL5IWo/y9lzA== X-Received: by 2002:a05:6830:2810:b0:7f9:555:1df2 with SMTP id 46e09a7af769-80de126ce81mr1341580a34.14.1789705557969; Thu, 17 Sep 2026 21:25:57 -0700 (PDT) Received: from rebo.bsdimp.com ([50.253.99.174]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-80e51d627b5sm489718a34.20.2026.09.17.21.25.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Sep 2026 21:25:57 -0700 (PDT) From: Warner Losh To: qemu-devel@nongnu.org Cc: Kyle Evans , Warner Losh , Stacey Son , Kyle Evans , Richard Henderson Subject: [PULL 39/41] bsd-user: Add scheduler, cpuset, kmod, and misc syscall dispatch Date: Thu, 17 Sep 2026 22:24:20 -0600 Message-ID: <20260918042422.38713-40-imp@bsdimp.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260918042422.38713-1-imp@bsdimp.com> References: <20260918042422.38713-1-imp@bsdimp.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: none client-ip=2607:f8b0:4864:32::27; envelope-from=imp@bsdimp.com; helo=mail-oi2-x27.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, 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+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org 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 = do_bsd_closefrom(arg1); break; + case TARGET_FREEBSD_NR_close_range: /* close_range(2) */ + ret = do_freebsd_close_range(arg1, arg2, arg3); + break; + case TARGET_FREEBSD_NR_revoke: /* revoke(2) */ ret = do_bsd_revoke(arg1); break; @@ -696,6 +700,10 @@ static abi_long freebsd_syscall(CPUArchState *env, int num, abi_long arg1, ret = do_bsd_chflags(arg1, arg2); break; + case TARGET_FREEBSD_NR_chflagsat: /* chflagsat(2) */ + ret = do_bsd_chflagsat(arg1, arg2, arg3, arg4); + break; + case TARGET_FREEBSD_NR_lchflags: /* lchflags(2) */ ret = do_bsd_lchflags(arg1, arg2); break; @@ -740,6 +748,10 @@ static abi_long freebsd_syscall(CPUArchState *env, int num, abi_long arg1, ret = do_bsd_poll(arg1, arg2, arg3); break; + case TARGET_FREEBSD_NR_ppoll: /* ppoll(2) */ + ret = do_freebsd_ppoll(env, arg1, arg2, arg3, arg4); + break; + case TARGET_FREEBSD_NR_lseek: /* lseek(2) */ ret = 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 = do_bsd_swapoff(arg1, arg2); break; - case TARGET_FREEBSD_NR_chflagsat: /* chflagsat(2) */ - ret = do_bsd_chflagsat(arg1, arg2, arg3, arg4); - break; - - case TARGET_FREEBSD_NR_close_range: /* close_range(2) */ - ret = do_freebsd_close_range(arg1, arg2, arg3); - break; - case TARGET_FREEBSD_NR___realpathat: /* __realpathat(2) (XXX no realpathat()) */ ret = do_freebsd_realpathat(arg1, arg2, arg3, arg4, arg5); @@ -787,125 +791,12 @@ static abi_long freebsd_syscall(CPUArchState *env, int num, abi_long arg1, ret = do_freebsd___specialfd(arg1, arg2, arg3); break; - /* - * ioctl(2) - */ - case TARGET_FREEBSD_NR_ioctl: /* ioctl(2) */ - ret = do_bsd_ioctl(arg1, arg2, arg3); - break; - - /* - * stat system calls - */ - case TARGET_FREEBSD_NR_freebsd11_stat: /* stat(2) */ - ret = do_freebsd11_stat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_lstat: /* lstat(2) */ - ret = do_freebsd11_lstat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_fstat: /* fstat(2) */ - ret = do_freebsd11_fstat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_fstat: /* fstat(2) */ - ret = do_freebsd_fstat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_fstatat: /* fstatat(2) */ - ret = do_freebsd11_fstatat(arg1, arg2, arg3, arg4); - break; - - case TARGET_FREEBSD_NR_fstatat: /* fstatat(2) */ - ret = do_freebsd_fstatat(arg1, arg2, arg3, arg4); - break; - - case TARGET_FREEBSD_NR_freebsd11_nstat: /* undocumented */ - ret = do_freebsd11_nstat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_nfstat: /* undocumented */ - ret = do_freebsd11_nfstat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_nlstat: /* undocumented */ - ret = do_freebsd11_nlstat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_getfh: /* getfh(2) */ - ret = do_freebsd_getfh(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_lgetfh: /* lgetfh(2) */ - ret = do_freebsd_lgetfh(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_fhopen: /* fhopen(2) */ - ret = do_freebsd_fhopen(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_fhstat: /* fhstat(2) */ - ret = do_freebsd11_fhstat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_fhstat: /* fhstat(2) */ - ret = do_freebsd_fhstat(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_fhstatfs: /* fhstatfs(2) */ - ret = do_freebsd11_fhstatfs(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_fhstatfs: /* fhstatfs(2) */ - ret = do_freebsd_fhstatfs(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_statfs: /* statfs(2) */ - ret = do_freebsd11_statfs(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_statfs: /* statfs(2) */ - ret = do_freebsd_statfs(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_fstatfs: /* fstatfs(2) */ - ret = do_freebsd11_fstatfs(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_fstatfs: /* fstatfs(2) */ - ret = do_freebsd_fstatfs(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_freebsd11_getfsstat: /* getfsstat(2) */ - ret = do_freebsd11_getfsstat(arg1, arg2, arg3); - break; - - case TARGET_FREEBSD_NR_getfsstat: /* getfsstat(2) */ - ret = do_freebsd_getfsstat(arg1, arg2, arg3); - break; - - case TARGET_FREEBSD_NR_freebsd11_getdents: /* getdents(2) */ - ret = do_freebsd11_getdents(arg1, arg2, arg3); - break; - - case TARGET_FREEBSD_NR_getdirentries: /* getdirentries(2) */ - ret = do_freebsd_getdirentries(arg1, arg2, arg3, arg4); - break; - - case TARGET_FREEBSD_NR_freebsd11_getdirentries: /* getdirentries(2) */ - ret = do_freebsd11_getdirentries(arg1, arg2, arg3, arg4); - break; - case TARGET_FREEBSD_NR_fcntl: /* fcntl(2) */ - ret = do_freebsd_fcntl(arg1, arg2, arg3); - break; - /* * Memory management system calls. */ case TARGET_FREEBSD_NR_mmap: /* mmap(2) */ ret = do_bsd_mmap(env, arg1, arg2, arg3, arg4, arg5, arg6, arg7, - arg8); + arg8); break; case TARGET_FREEBSD_NR_munmap: /* munmap(2) */ @@ -952,17 +843,13 @@ static abi_long freebsd_syscall(CPUArchState *env, int num, abi_long arg1, ret = do_bsd_shm_open(arg1, arg2, arg3); break; -#if defined(__FreeBSD_version) && __FreeBSD_version >= 1300048 case TARGET_FREEBSD_NR_shm_open2: /* shm_open2(2) */ ret = do_freebsd_shm_open2(arg1, arg2, arg3, arg4, arg5); break; -#endif -#if defined(__FreeBSD_version) && __FreeBSD_version >= 1300049 case TARGET_FREEBSD_NR_shm_rename: /* shm_rename(2) */ ret = do_freebsd_shm_rename(arg1, arg2, arg3); break; -#endif case TARGET_FREEBSD_NR_shm_unlink: /* shm_unlink(2) */ ret = do_bsd_shm_unlink(arg1); @@ -984,68 +871,10 @@ static abi_long freebsd_syscall(CPUArchState *env, int num, abi_long arg1, ret = do_bsd_shmdt(arg1); break; - /* - * System V Semaphores - */ - case TARGET_FREEBSD_NR_semget: /* semget(2) */ - ret = do_bsd_semget(arg1, arg2, arg3); - break; - - case TARGET_FREEBSD_NR_semop: /* semop(2) */ - ret = do_bsd_semop(arg1, arg2, arg3); - break; - - case TARGET_FREEBSD_NR___semctl: { /* __semctl() undocumented */ - ret = do_bsd___semctl(arg1, arg2, arg3, arg4); - break; - } - - /* - * System V Messages - */ - case TARGET_FREEBSD_NR_msgctl: /* msgctl(2) */ - ret = do_bsd_msgctl(arg1, arg2, arg3); - break; - - case TARGET_FREEBSD_NR_msgget: /* msgget(2) */ - ret = do_bsd_msgget(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_msgsnd: /* msgsnd(2) */ - ret = do_bsd_msgsnd(arg1, arg2, arg3, arg4); - break; - - case TARGET_FREEBSD_NR_msgrcv: /* msgrcv(2) */ - ret = do_bsd_msgrcv(arg1, arg2, arg3, arg4, arg5); - break; - case TARGET_FREEBSD_NR_freebsd11_vadvise: ret = do_bsd_vadvise(); break; - /* - * Misc - */ - case TARGET_FREEBSD_NR_break: - ret = do_obreak(arg1); - break; - - case TARGET_FREEBSD_NR_quotactl: /* quotactl(2) */ - ret = do_bsd_quotactl(arg1, arg2, arg3); - break; - - case TARGET_FREEBSD_NR_reboot: /* reboot(2) */ - ret = do_bsd_reboot(arg1); - break; - - case TARGET_FREEBSD_NR_uuidgen: /* uuidgen(2) */ - ret = do_bsd_uuidgen(arg1, arg2); - break; - - case TARGET_FREEBSD_NR_getdtablesize: /* getdtablesize(2) */ - ret = do_bsd_getdtablesize(); - break; - /* * time related system calls. */ @@ -1133,10 +962,6 @@ static abi_long freebsd_syscall(CPUArchState *env, int num, abi_long arg1, ret = do_freebsd_pselect(env, arg1, arg2, arg3, arg4, arg5, arg6); break; - case TARGET_FREEBSD_NR_ppoll: /* ppoll(2) */ - ret = do_freebsd_ppoll(env, arg1, arg2, arg3, arg4); - break; - case TARGET_FREEBSD_NR_kqueue: /* kqueue(2) */ ret = do_freebsd_kqueue(); break; @@ -1350,6 +1175,119 @@ static abi_long freebsd_syscall(CPUArchState *env, int num, abi_long arg1, ret = do_freebsd__umtx_op(arg1, arg2, arg3, arg4, arg5); break; + /* + * ioctl(2) + */ + case TARGET_FREEBSD_NR_ioctl: /* ioctl(2) */ + ret = do_bsd_ioctl(arg1, arg2, arg3); + break; + + /* + * stat system calls + */ + case TARGET_FREEBSD_NR_freebsd11_stat: /* stat(2) */ + ret = do_freebsd11_stat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_lstat: /* lstat(2) */ + ret = do_freebsd11_lstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_fstat: /* fstat(2) */ + ret = do_freebsd11_fstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_fstat: /* fstat(2) */ + ret = do_freebsd_fstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_fstatat: /* fstatat(2) */ + ret = do_freebsd11_fstatat(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_fstatat: /* fstatat(2) */ + ret = do_freebsd_fstatat(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_freebsd11_nstat: /* undocumented */ + ret = do_freebsd11_nstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_nfstat: /* undocumented */ + ret = do_freebsd11_nfstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_nlstat: /* undocumented */ + ret = do_freebsd11_nlstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_getfh: /* getfh(2) */ + ret = do_freebsd_getfh(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_lgetfh: /* lgetfh(2) */ + ret = do_freebsd_lgetfh(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_fhopen: /* fhopen(2) */ + ret = do_freebsd_fhopen(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_fhstat: /* fhstat(2) */ + ret = do_freebsd11_fhstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_fhstat: /* fhstat(2) */ + ret = do_freebsd_fhstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_fhstatfs: /* fhstatfs(2) */ + ret = do_freebsd11_fhstatfs(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_fhstatfs: /* fhstatfs(2) */ + ret = do_freebsd_fhstatfs(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_statfs: /* statfs(2) */ + ret = do_freebsd11_statfs(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_statfs: /* statfs(2) */ + ret = do_freebsd_statfs(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_fstatfs: /* fstatfs(2) */ + ret = do_freebsd11_fstatfs(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_fstatfs: /* fstatfs(2) */ + ret = do_freebsd_fstatfs(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_freebsd11_getfsstat: /* getfsstat(2) */ + ret = do_freebsd11_getfsstat(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_getfsstat: /* getfsstat(2) */ + ret = do_freebsd_getfsstat(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_freebsd11_getdents: /* getdents(2) */ + ret = do_freebsd11_getdents(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_getdirentries: /* getdirentries(2) */ + ret = do_freebsd_getdirentries(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_freebsd11_getdirentries: /* getdirentries(2) */ + ret = do_freebsd11_getdirentries(arg1, arg2, arg3, arg4); + break; + case TARGET_FREEBSD_NR_fcntl: /* fcntl(2) */ + ret = do_freebsd_fcntl(arg1, arg2, arg3); + break; + /* * sys{ctl, arch, call} */ @@ -1365,8 +1303,14 @@ static abi_long freebsd_syscall(CPUArchState *env, int num, abi_long arg1, ret = do_freebsd_sysarch(env, arg1, arg2); break; + case TARGET_FREEBSD_NR_syscall: /* syscall(2) */ + case TARGET_FREEBSD_NR___syscall: /* __syscall(2) */ + ret = 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 = 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 = do_freebsd__acl_set_link(arg1, arg2, arg3); break; + /* + * System V Semaphores + */ + case TARGET_FREEBSD_NR_semget: /* semget(2) */ + ret = do_bsd_semget(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_semop: /* semop(2) */ + ret = do_bsd_semop(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR___semctl: { /* __semctl() undocumented */ + ret = do_bsd___semctl(arg1, arg2, arg3, arg4); + break; + } + + /* + * System V Messages + */ + case TARGET_FREEBSD_NR_msgctl: /* msgctl(2) */ + ret = do_bsd_msgctl(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_msgget: /* msgget(2) */ + ret = do_bsd_msgget(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_msgsnd: /* msgsnd(2) */ + ret = do_bsd_msgsnd(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_msgrcv: /* msgrcv(2) */ + ret = do_bsd_msgrcv(arg1, arg2, arg3, arg4, arg5); + break; + + /* + * FreeBSD scheduler control + */ + case TARGET_FREEBSD_NR_sched_setparam: /* sched_setparam(2) */ + ret = do_freebsd_sched_setparam(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_sched_getparam: /* sched_getparam(2) */ + ret = do_freebsd_sched_getparam(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_sched_setscheduler: /* sched_setscheduler(2) */ + ret = do_freebsd_sched_setscheduler(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_sched_getscheduler: /* sched_getscheduler(2) */ + ret = do_freebsd_sched_getscheduler(arg1); + break; + + case TARGET_FREEBSD_NR_sched_get_priority_max: /* sched_get_priority_max(2)*/ + ret = do_bsd_sched_get_priority_max(arg1); + break; + + case TARGET_FREEBSD_NR_sched_get_priority_min: /* sched_get_priority_min(2)*/ + ret = do_bsd_sched_get_priority_min(arg1); + break; + + case TARGET_FREEBSD_NR_sched_rr_get_interval: /* sched_rr_get_interval(2) */ + ret = do_freebsd_sched_rr_get_interval(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_sched_yield: /* sched_yield(2)*/ + ret = do_bsd_sched_yield(); + break; + + + /* + * FreeBSD CPU affinity sets management + */ + case TARGET_FREEBSD_NR_cpuset: /* cpuset(2) */ + ret = do_freebsd_cpuset(arg1); + break; + + case TARGET_FREEBSD_NR_cpuset_setid: /* cpuset_setid(2) */ + ret = do_freebsd_cpuset_setid(env, arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_cpuset_getid: /* cpuset_getid(2) */ + ret = do_freebsd_cpuset_getid(arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_cpuset_getaffinity: /* cpuset_getaffinity(2) */ + ret = do_freebsd_cpuset_getaffinity(arg1, arg2, arg3, arg4, arg5, arg6); + break; + + case TARGET_FREEBSD_NR_cpuset_setaffinity: /* cpuset_setaffinity(2) */ + ret = do_freebsd_cpuset_setaffinity(arg1, arg2, arg3, arg4, arg5, arg6); + break; + + /* + * FreeBSD kernel module + */ + case TARGET_FREEBSD_NR_modfnext: /* modfnext(2) */ + ret = do_freebsd_modfnext(arg1); + break; + + case TARGET_FREEBSD_NR_modfind: /* modfind(2) */ + ret = do_freebsd_modfind(arg1); + break; + + case TARGET_FREEBSD_NR_kldload: /* kldload(2) */ + ret = do_freebsd_kldload(arg1); + break; + + case TARGET_FREEBSD_NR_kldunload: /* kldunload(2) */ + ret = do_freebsd_kldunload(arg1); + break; + + case TARGET_FREEBSD_NR_kldunloadf: /* kldunloadf(2) */ + ret = do_freebsd_kldunloadf(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_kldfind: /* kldfind(2) */ + ret = do_freebsd_kldfind(arg1); + break; + + case TARGET_FREEBSD_NR_kldnext: /* kldnext(2) */ + ret = do_freebsd_kldnext(arg1); + break; + + case TARGET_FREEBSD_NR_kldstat: /* kldstat(2) */ + ret = do_freebsd_kldstat(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_kldfirstmod: /* kldfirstmod(2) */ + ret = do_freebsd_kldfirstmod(arg1); + break; + + case TARGET_FREEBSD_NR_kldsym: /* kldsym(2) */ + ret = do_freebsd_kldsym(arg1, arg2, arg3); + break; + + /* + * FreeBSD additional posix support + */ + case TARGET_FREEBSD_NR_posix_fallocate: /* posix_fallocate(2) */ + ret = do_freebsd_posix_fallocate(arg1, arg2, arg3, arg4, arg5, arg6); + break; + + case TARGET_FREEBSD_NR_posix_openpt: /* posix_openpt(2) */ + ret = do_freebsd_posix_openpt(arg1); + break; + + /* + * Misc + */ + case TARGET_FREEBSD_NR_quotactl: /* quotactl(2) */ + ret = do_bsd_quotactl(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_reboot: /* reboot(2) */ + ret = do_bsd_reboot(arg1); + break; + + case TARGET_FREEBSD_NR_uuidgen: /* uuidgen(2) */ + ret = do_bsd_uuidgen(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_getdtablesize: /* getdtablesize(2) */ + ret = do_bsd_getdtablesize(); + break; + + case TARGET_FREEBSD_NR_break: + ret = do_obreak(arg1); + break; + +#if defined(CONFIG_GETRANDOM) + case TARGET_FREEBSD_NR_getrandom: + ret = do_freebsd_getrandom(arg1, arg2, arg3); + break; +#endif + case TARGET_FREEBSD_NR_kenv: + ret = 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 = -TARGET_EINVAL; + break; + case TARGET_FREEBSD_NR_cap_enter: + ret = 0; + break; + default: qemu_log_mask(LOG_UNIMP, "Unsupported syscall: %d\n", num); ret = -TARGET_ENOSYS; -- 2.55.0