diff --git a/src/lib/libsigs.js b/src/lib/libsigs.js index ae52c8eb1f15d..3159fcf42c9f1 100644 --- a/src/lib/libsigs.js +++ b/src/lib/libsigs.js @@ -269,7 +269,7 @@ sigs = { __syscall_recvmsg__sig: 'iipiiii', __syscall_renameat__sig: 'iipip', __syscall_rmdir__sig: 'ip', - __syscall_sendmsg__sig: 'iipippi', + __syscall_sendmsg__sig: 'iipiiii', __syscall_sendto__sig: 'iippipi', __syscall_shutdown__sig: 'iiiiiii', __syscall_socket__sig: 'iiiiiii', diff --git a/src/lib/libsyscall.js b/src/lib/libsyscall.js index 6f0e5c0467468..afcec470a58f2 100644 --- a/src/lib/libsyscall.js +++ b/src/lib/libsyscall.js @@ -351,7 +351,7 @@ var SyscallsLibrary = { return info; }, __syscall_socket__deps: ['$SOCKFS'], - __syscall_socket: (domain, type, protocol) => { + __syscall_socket: (domain, type, protocol, u1, u2, u3) => { var sock = SOCKFS.createSocket(domain, type, protocol); #if ASSERTIONS assert(sock.stream.fd < 64); // XXX ? select() assumes socket fd values are in 0..63 @@ -359,45 +359,45 @@ var SyscallsLibrary = { return sock.stream.fd; }, __syscall_getsockname__deps: ['$getSocketFromFD', '$writeSockaddr', '$DNS'], - __syscall_getsockname: (fd, addr, addrlen, d1, d2, d3) => { + __syscall_getsockname: (fd, addr, len, u1, u2, u3) => { var sock = getSocketFromFD(fd); // TODO: sock.saddr should never be undefined, see TODO in websocket_sock_ops.getname - var errno = writeSockaddr(addr, sock.family, DNS.lookup_name(sock.saddr || '0.0.0.0'), sock.sport, addrlen); + var errno = writeSockaddr(addr, sock.family, DNS.lookup_name(sock.saddr || '0.0.0.0'), sock.sport, len); #if ASSERTIONS assert(!errno); #endif return 0; }, __syscall_getpeername__deps: ['$getSocketFromFD', '$writeSockaddr', '$DNS'], - __syscall_getpeername: (fd, addr, addrlen, d1, d2, d3) => { + __syscall_getpeername: (fd, addr, len, u1, u2, u3) => { var sock = getSocketFromFD(fd); if (!sock.daddr) { return -{{{ cDefs.ENOTCONN }}}; // The socket is not connected. } - var errno = writeSockaddr(addr, sock.family, DNS.lookup_name(sock.daddr), sock.dport, addrlen); + var errno = writeSockaddr(addr, sock.family, DNS.lookup_name(sock.daddr), sock.dport, len); #if ASSERTIONS assert(!errno); #endif return 0; }, __syscall_connect__deps: ['$getSocketFromFD', '$getSocketAddress'], - __syscall_connect: (fd, addr, addrlen, d1, d2, d3) => { + __syscall_connect: (fd, addr, len, u1, u2, u3) => { var sock = getSocketFromFD(fd); - var info = getSocketAddress(addr, addrlen); + var info = getSocketAddress(addr, len); sock.sock_ops.connect(sock, info.addr, info.port); return 0; }, __syscall_shutdown__deps: ['$getSocketFromFD'], - __syscall_shutdown: (fd, how) => { + __syscall_shutdown: (fd, how, u1, u2, u3, u4) => { getSocketFromFD(fd); return -{{{ cDefs.ENOSYS }}}; // unsupported feature }, __syscall_accept4__deps: ['$getSocketFromFD', '$writeSockaddr', '$DNS'], - __syscall_accept4: (fd, addr, addrlen, flags, d1, d2) => { + __syscall_accept4: (fd, addr, len, flags, u1, u2) => { var sock = getSocketFromFD(fd); var newsock = sock.sock_ops.accept(sock); if (addr) { - var errno = writeSockaddr(addr, newsock.family, DNS.lookup_name(newsock.daddr), newsock.dport, addrlen); + var errno = writeSockaddr(addr, newsock.family, DNS.lookup_name(newsock.daddr), newsock.dport, len); #if ASSERTIONS assert(!errno); #endif @@ -405,25 +405,25 @@ var SyscallsLibrary = { return newsock.stream.fd; }, __syscall_bind__deps: ['$getSocketFromFD', '$getSocketAddress'], - __syscall_bind: (fd, addr, addrlen, d1, d2, d3) => { + __syscall_bind: (fd, addr, len, u1, u2, u3) => { var sock = getSocketFromFD(fd); - var info = getSocketAddress(addr, addrlen); + var info = getSocketAddress(addr, len); sock.sock_ops.bind(sock, info.addr, info.port); return 0; }, __syscall_listen__deps: ['$getSocketFromFD'], - __syscall_listen: (fd, backlog) => { + __syscall_listen: (fd, backlog, u1, u2, u3, u4) => { var sock = getSocketFromFD(fd); sock.sock_ops.listen(sock, backlog); return 0; }, __syscall_recvfrom__deps: ['$getSocketFromFD', '$writeSockaddr', '$DNS'], - __syscall_recvfrom: (fd, buf, len, flags, addr, addrlen) => { + __syscall_recvfrom: (fd, buf, len, flags, addr, alen) => { var sock = getSocketFromFD(fd); var msg = sock.sock_ops.recvmsg(sock, len); if (!msg) return 0; // socket is closed if (addr) { - var errno = writeSockaddr(addr, sock.family, DNS.lookup_name(msg.addr), msg.port, addrlen); + var errno = writeSockaddr(addr, sock.family, DNS.lookup_name(msg.addr), msg.port, alen); #if ASSERTIONS assert(!errno); #endif @@ -432,18 +432,18 @@ var SyscallsLibrary = { return msg.buffer.byteLength; }, __syscall_sendto__deps: ['$getSocketFromFD', '$getSocketAddress'], - __syscall_sendto: (fd, message, length, flags, addr, addr_len) => { + __syscall_sendto: (fd, buf, len, flags, addr, alen) => { var sock = getSocketFromFD(fd); if (!addr) { // send, no address provided - return FS.write(sock.stream, HEAP8, message, length); + return FS.write(sock.stream, HEAP8, buf, len); } - var dest = getSocketAddress(addr, addr_len); + var dest = getSocketAddress(addr, alen); // sendto an address - return sock.sock_ops.sendmsg(sock, HEAP8, message, length, dest.addr, dest.port); + return sock.sock_ops.sendmsg(sock, HEAP8, buf, len, dest.addr, dest.port); }, __syscall_getsockopt__deps: ['$getSocketFromFD'], - __syscall_getsockopt: (fd, level, optname, optval, optlen, d1) => { + __syscall_getsockopt: (fd, level, optname, optval, optlen, unused) => { var sock = getSocketFromFD(fd); // Minimal getsockopt aimed at resolving https://github.com/emscripten-core/emscripten/issues/2211 // so only supports SOL_SOCKET with SO_ERROR. @@ -458,7 +458,7 @@ var SyscallsLibrary = { return -{{{ cDefs.ENOPROTOOPT }}}; // The option is unknown at the level indicated. }, __syscall_sendmsg__deps: ['$getSocketFromFD', '$getSocketAddress'], - __syscall_sendmsg: (fd, message, flags, d1, d2, d3) => { + __syscall_sendmsg: (fd, message, flags, u1, u2, u3) => { var sock = getSocketFromFD(fd); var iov = {{{ makeGetValue('message', C_STRUCTS.msghdr.msg_iov, '*') }}}; var num = {{{ makeGetValue('message', C_STRUCTS.msghdr.msg_iovlen, 'i32') }}}; @@ -489,7 +489,7 @@ var SyscallsLibrary = { return sock.sock_ops.sendmsg(sock, view, 0, total, addr, port); }, __syscall_recvmsg__deps: ['$getSocketFromFD', '$writeSockaddr', '$DNS'], - __syscall_recvmsg: (fd, message, flags, d1, d2, d3) => { + __syscall_recvmsg: (fd, message, flags, u1, u2, u3) => { var sock = getSocketFromFD(fd); var iov = {{{ makeGetValue('message', C_STRUCTS.msghdr.msg_iov, '*') }}}; var num = {{{ makeGetValue('message', C_STRUCTS.msghdr.msg_iovlen, 'i32') }}}; diff --git a/system/include/emscripten/syscalls.h b/system/include/emscripten/syscalls.h index d23bc4e4ab6cb..3cce3d207b406 100644 --- a/system/include/emscripten/syscalls.h +++ b/system/include/emscripten/syscalls.h @@ -98,24 +98,24 @@ int __syscall_utimensat(int dirfd, intptr_t path, intptr_t times, int flags); int __syscall_fallocate(int fd, int mode, off_t offset, off_t len); int __syscall_dup3(int fd, int suggestfd, int flags); int __syscall_pipe2(intptr_t fds, int flags); -int __syscall_recvmmsg(int sockfd, intptr_t msgvec, unsigned int vlen, unsigned int flags, ...); +int __syscall_recvmmsg(int sockfd, intptr_t msgvec, unsigned int vlen, unsigned int flags, intptr_t timeout); int __syscall_prlimit64(pid_t pid, int resource, intptr_t new_limit, intptr_t old_limit); -int __syscall_sendmmsg(int sockfd, intptr_t msgvec, unsigned int vlen, unsigned int flags, ...); -int __syscall_socket(int domain, int type, int protocol, int dummy1, int dummy2, int dummy3); -int __syscall_socketpair(int domain, int type, int protocol, intptr_t fds, int dummy, int dummy2); -int __syscall_bind(int sockfd, intptr_t addr, socklen_t alen, int dummy, int dummy2, int dummy3); -int __syscall_connect(int sockfd, intptr_t addr, socklen_t len, int dummy, int dummy2, int dummy3); -int __syscall_listen(int sockfd, int backlog, int dummy1, int dummy2, int dummy3, int dummy4); -int __syscall_accept4(int sockfd, intptr_t addr, intptr_t addrlen, int flags, int dummy1, int dummy2); -int __syscall_getsockopt(int sockfd, int level, int optname, intptr_t optval, intptr_t optlen, int dummy); -int __syscall_setsockopt(int sockfd, int level, int optname, intptr_t optval, socklen_t optlen, int dummy); -int __syscall_getsockname(int sockfd, intptr_t addr, intptr_t len, int dummy, int dummy2, int dummy3); -int __syscall_getpeername(int sockfd, intptr_t addr, intptr_t len, int dummy, int dummy2, int dummy3); -int __syscall_sendto(int sockfd, intptr_t msg, size_t len, int flags, intptr_t addr, socklen_t alen); -int __syscall_sendmsg(int sockfd, intptr_t msg , int flags, intptr_t addr, size_t alen, int dummy); -int __syscall_recvfrom(int sockfd, intptr_t msg, size_t len, int flags, intptr_t addr, intptr_t alen); -int __syscall_recvmsg(int sockfd, intptr_t msg, int flags, int dummy, int dummy2, int dummy3); -int __syscall_shutdown(int sockfd, int how, int dummy, int dummy2, int dummy3, int dummy4); +int __syscall_sendmmsg(int sockfd, intptr_t msgvec, unsigned int vlen, unsigned int flags); +int __syscall_socket(int domain, int type, int protocol, int unused1, int unused2, int unused3); +int __syscall_socketpair(int domain, int type, int protocol, intptr_t fds, int unused1, int unused2); +int __syscall_bind(int sockfd, intptr_t addr, socklen_t len, int unused1, int unused2, int unused3); +int __syscall_connect(int sockfd, intptr_t addr, socklen_t len, int unused1, int unused2, int unused3); +int __syscall_listen(int sockfd, int backlog, int unused1, int unused2, int unused3, int unused4); +int __syscall_accept4(int sockfd, intptr_t addr, intptr_t len, int flags, int unused1, int unused2); +int __syscall_getsockopt(int sockfd, int level, int optname, intptr_t optval, intptr_t optlen, int unused); +int __syscall_setsockopt(int sockfd, int level, int optname, intptr_t optval, socklen_t optlen, int unused); +int __syscall_getsockname(int sockfd, intptr_t addr, intptr_t len, int unused1, int unused2, int unused3); +int __syscall_getpeername(int sockfd, intptr_t addr, intptr_t len, int unused1, int unused2, int unused3); +int __syscall_sendto(int sockfd, intptr_t buf, size_t len, int flags, intptr_t addr, socklen_t alen); +int __syscall_sendmsg(int sockfd, intptr_t msg, int flags, int unused1, int unused2, int unused3); +int __syscall_recvfrom(int sockfd, intptr_t buf, size_t len, int flags, intptr_t addr, intptr_t alen); +int __syscall_recvmsg(int sockfd, intptr_t msg, int flags, int unused1, int unused2, int unused3); +int __syscall_shutdown(int sockfd, int how, int unused1, int unused2, int unused3, int unused4); #ifdef __cplusplus } diff --git a/system/lib/libc/emscripten_syscall_stubs.c b/system/lib/libc/emscripten_syscall_stubs.c index 7ebc00995e693..cf942294ad927 100644 --- a/system/lib/libc/emscripten_syscall_stubs.c +++ b/system/lib/libc/emscripten_syscall_stubs.c @@ -248,7 +248,7 @@ weak int __syscall_prlimit64(pid_t pid, int resource, intptr_t new_limit, intptr return 0; } -weak int __syscall_setsockopt(int sockfd, int level, int optname, intptr_t optval, socklen_t optlen, int dummy) { +weak int __syscall_setsockopt(int sockfd, int level, int optname, intptr_t optval, socklen_t optlen, int unused) { REPORT(setsockopt); return -ENOPROTOOPT; // The option is unknown at the level indicated. } @@ -260,7 +260,7 @@ weak pid_t __syscall_wait4(pid_t pid, intptr_t wstatus, int options, int rusage) UNIMPLEMENTED(acct, (intptr_t filename)) UNIMPLEMENTED(mincore, (intptr_t addr, size_t length, intptr_t vec)) -UNIMPLEMENTED(recvmmsg, (int sockfd, intptr_t msgvec, unsigned int vlen, unsigned int flags, ...)) -UNIMPLEMENTED(sendmmsg, (int sockfd, intptr_t msgvec, unsigned int vlen, unsigned int flags, ...)) -UNIMPLEMENTED(shutdown, (int sockfd, int how, int dummy, int dummy2, int dummy3, int dummy4)) -UNIMPLEMENTED(socketpair, (int domain, int type, int protocol, intptr_t fds, int dummy, int dummy2)) +UNIMPLEMENTED(recvmmsg, (int sockfd, intptr_t msgvec, unsigned int vlen, unsigned int flags, intptr_t timeout)) +UNIMPLEMENTED(sendmmsg, (int sockfd, intptr_t msgvec, unsigned int vlen, unsigned int flags)) +UNIMPLEMENTED(shutdown, (int sockfd, int how, int unused1, int unused2, int unused3, int unused4)) +UNIMPLEMENTED(socketpair, (int domain, int type, int protocol, intptr_t fds, int unused1, int unused2)) diff --git a/system/lib/wasmfs/syscalls.cpp b/system/lib/wasmfs/syscalls.cpp index 8ab0dc2e4dfb8..373b8ac036c78 100644 --- a/system/lib/wasmfs/syscalls.cpp +++ b/system/lib/wasmfs/syscalls.cpp @@ -1723,30 +1723,38 @@ int _munmap_js( int __syscall_accept4(int sockfd, intptr_t addr, - intptr_t addrlen, + intptr_t len, int flags, - int dummy1, - int dummy2) { + int unused1, + int unused2) { return -ENOSYS; } -int __syscall_bind( - int sockfd, intptr_t addr, socklen_t alen, int dummy, int dummy2, int dummy3) { +int __syscall_bind(int sockfd, + intptr_t addr, + socklen_t alen, + int unused1, + int unused2, + int unused3) { return -ENOSYS; } -int __syscall_connect( - int sockfd, intptr_t addr, socklen_t len, int dummy, int dummy2, int dummy3) { +int __syscall_connect(int sockfd, + intptr_t addr, + socklen_t len, + int unused1, + int unused2, + int unused3) { return -ENOSYS; } int __syscall_socket( - int domain, int type, int protocol, int dummy1, int dummy2, int dummy3) { + int domain, int type, int protocol, int unused1, int unused2, int unused3) { return -ENOSYS; } int __syscall_listen( - int sockfd, int backlog, int dummy1, int dummy2, int dummy3, int dummy4) { + int sockfd, int backlog, int unused1, int unused2, int unused3, int unused4) { return -ENOSYS; } @@ -1755,22 +1763,30 @@ int __syscall_getsockopt(int sockfd, int optname, intptr_t optval, intptr_t optlen, - int dummy) { + int unused) { return -ENOSYS; } -int __syscall_getsockname( - int sockfd, intptr_t addr, intptr_t len, int dummy, int dummy2, int dummy3) { +int __syscall_getsockname(int sockfd, + intptr_t addr, + intptr_t len, + int unused1, + int unused2, + int unused3) { return -ENOSYS; } -int __syscall_getpeername( - int sockfd, intptr_t addr, intptr_t len, int dummy, int dummy2, int dummy3) { +int __syscall_getpeername(int sockfd, + intptr_t addr, + intptr_t len, + int unused1, + int unused2, + int unused3) { return -ENOSYS; } int __syscall_sendto(int sockfd, - intptr_t msg, + intptr_t buf, size_t len, int flags, intptr_t addr, @@ -1779,12 +1795,12 @@ int __syscall_sendto(int sockfd, } int __syscall_sendmsg( - int sockfd, intptr_t msg, int flags, intptr_t addr, size_t alen, int dummy) { + int sockfd, intptr_t msg, int flags, int unused1, int unused2, int unused3) { return -ENOSYS; } int __syscall_recvfrom(int sockfd, - intptr_t msg, + intptr_t buf, size_t len, int flags, intptr_t addr, @@ -1793,7 +1809,7 @@ int __syscall_recvfrom(int sockfd, } int __syscall_recvmsg( - int sockfd, intptr_t msg, int flags, int dummy, int dummy2, int dummy3) { + int sockfd, intptr_t msg, int flags, int unused1, int unused2, int unused3) { return -ENOSYS; } diff --git a/test/codesize/test_codesize_hello_dylink_all.json b/test/codesize/test_codesize_hello_dylink_all.json index 380af5ac7a2db..bce01c35eb544 100644 --- a/test/codesize/test_codesize_hello_dylink_all.json +++ b/test/codesize/test_codesize_hello_dylink_all.json @@ -1,7 +1,7 @@ { "a.out.js": 268255, - "a.out.nodebug.wasm": 587588, - "total": 855843, + "a.out.nodebug.wasm": 587563, + "total": 855818, "sent": [ "IMG_Init", "IMG_Load", @@ -4092,6 +4092,7 @@ "$__syscall_munmap", "$__syscall_prlimit64", "$__syscall_recvmmsg", + "$__syscall_sendmmsg", "$__syscall_setdomainname", "$__syscall_setpgid", "$__syscall_setpriority",