Add target_freebsd_thr_param, target_freebsd_rtprio, new_freebsd_thread_info_t, TARGET_UMTX_OP_* opcodes, umutex/urwlock flags, and target_freebsd_acl structures to syscall_defs.h. Add forward declarations for os-time.c, os-socket.c, os-thread.c, and os-extattr.c functions to qemu-os.h. Add thread and umtx function declarations to qemu.h.
Signed-off-by: Stacey Son <[email protected]> Signed-off-by: Kyle Evans <[email protected]> Signed-off-by: Warner Losh <[email protected]> Assisted-by: Claude Opus 4.6 (1M context) --- bsd-user/freebsd/qemu-os.h | 47 ++++++++++++++++++++++++++++++++++++++++++++++ bsd-user/qemu.h | 41 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/bsd-user/freebsd/qemu-os.h b/bsd-user/freebsd/qemu-os.h index 12adc50928..bdd28f27a0 100644 --- a/bsd-user/freebsd/qemu-os.h +++ b/bsd-user/freebsd/qemu-os.h @@ -32,6 +32,53 @@ struct freebsd11_stat; +/* 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_addr); +abi_long h2t_freebsd_timespec(abi_ulong target_ts_addr, struct timespec *ts); + +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_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-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, abi_ulong namep, abi_ulong newlen); abi_long do_freebsd_sysarch(CPUArchState *env, abi_long arg1, abi_long arg2); +/* 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 */ #define VERIFY_READ PAGE_READ -- 2.52.0
