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 <[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/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, int num, abi_long arg1, ret = do_freebsd_pdkill(arg1, arg2); break; + /* + * socket related system calls + */ + case TARGET_FREEBSD_NR_accept: /* accept(2) */ + ret = do_bsd_accept(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_accept4: /* accept4(2) */ + ret = do_freebsd_accept4(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_bind: /* bind(2) */ + ret = do_bsd_bind(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_bindat: /* bindat(2) */ + ret = do_freebsd_bindat(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_connect: /* connect(2) */ + ret = do_bsd_connect(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_connectat: /* connectat(2) */ + ret = do_freebsd_connectat(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_getpeername: /* getpeername(2) */ + ret = do_bsd_getpeername(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_getsockname: /* getsockname(2) */ + ret = do_bsd_getsockname(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_getsockopt: /* getsockopt(2) */ + ret = do_bsd_getsockopt(arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_setsockopt: /* setsockopt(2) */ + ret = do_bsd_setsockopt(arg1, arg2, arg3, arg4, arg5); + break; + + case TARGET_FREEBSD_NR_listen: /* listen(2) */ + ret = get_errno(listen(arg1, arg2)); + break; + + case TARGET_FREEBSD_NR_recvfrom: /* recvfrom(2) */ + ret = do_bsd_recvfrom(arg1, arg2, arg3, arg4, arg5, arg6); + break; + + case TARGET_FREEBSD_NR_recvmsg: /* recvmsg(2) */ + ret = do_sendrecvmsg(arg1, arg2, arg3, 0); + break; + + case TARGET_FREEBSD_NR_sendmsg: /* sendmsg(2) */ + ret = do_sendrecvmsg(arg1, arg2, arg3, 1); + break; + + case TARGET_FREEBSD_NR_sendto: /* sendto(2) */ + ret = do_bsd_sendto(arg1, arg2, arg3, arg4, arg5, arg6); + break; + + case TARGET_FREEBSD_NR_socket: /* socket(2) */ + ret = do_bsd_socket(arg1, arg2, arg3); + break; + + case TARGET_FREEBSD_NR_socketpair: /* socketpair(2) */ + ret = do_bsd_socketpair(arg1, arg2, arg3, arg4); + break; + + case TARGET_FREEBSD_NR_shutdown: /* shutdown(2) */ + ret = do_bsd_shutdown(arg1, arg2); + break; + + case TARGET_FREEBSD_NR_setfib: /* setfib(2) */ + ret = do_freebsd_setfib(arg1); + break; + /* * sys{ctl, arch, call} */ -- 2.52.0
