Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/lib/libsigs.js
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down
44 changes: 22 additions & 22 deletions src/lib/libsyscall.js
Original file line number Diff line number Diff line change
Expand Up @@ -351,79 +351,79 @@ 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
#endif
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) => {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The man page calls this addrlen. Is there some reason to change it?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was trying to sync these syscalls argument names with their corresponding callers:

int getpeername(int fd, struct sockaddr *restrict addr, socklen_t *restrict len)
{
return socketcall(getpeername, fd, addr, len, 0, 0, 0);
}

__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
}
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
Expand All @@ -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.
Expand All @@ -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') }}};
Expand Down Expand Up @@ -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') }}};
Expand Down
34 changes: 17 additions & 17 deletions system/include/emscripten/syscalls.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
10 changes: 5 additions & 5 deletions system/lib/libc/emscripten_syscall_stubs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
}
Expand All @@ -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))
52 changes: 34 additions & 18 deletions system/lib/wasmfs/syscalls.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand All @@ -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,
Expand All @@ -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,
Expand All @@ -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;
}

Expand Down
5 changes: 3 additions & 2 deletions test/codesize/test_codesize_hello_dylink_all.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down Expand Up @@ -4092,6 +4092,7 @@
"$__syscall_munmap",
"$__syscall_prlimit64",
"$__syscall_recvmmsg",
"$__syscall_sendmmsg",

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder why this change effects this list?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably due to identical code folding (ICF). At least it saves 25 bytes. :)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh I think maybe some optimization phase was doing duplicate function merging before on this stub, but its no longer identical maybe.

"$__syscall_setdomainname",
"$__syscall_setpgid",
"$__syscall_setpriority",
Expand Down
Loading