Skip to content
Draft
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
28 changes: 14 additions & 14 deletions src/lib/libsigs.js
Original file line number Diff line number Diff line change
Expand Up @@ -229,11 +229,11 @@ sigs = {
__handle_stack_overflow__sig: 'vp',
__pthread_create_js__sig: 'ipppp',
__resumeException__sig: 'vp',
__syscall_accept4__sig: 'iippiii',
__syscall_bind__sig: 'iippiii',
__syscall_accept4__sig: 'iippip',
__syscall_bind__sig: 'iipip',
__syscall_chdir__sig: 'ip',
__syscall_chmod__sig: 'ipi',
__syscall_connect__sig: 'iippiii',
__syscall_connect__sig: 'iipip',
__syscall_dup__sig: 'ii',
__syscall_dup3__sig: 'iiii',
__syscall_faccessat__sig: 'iipii',
Expand All @@ -251,27 +251,27 @@ sigs = {
__syscall_ftruncate64__sig: 'iij',
__syscall_getcwd__sig: 'ipp',
__syscall_getdents64__sig: 'iipp',
__syscall_getpeername__sig: 'iippiii',
__syscall_getsockname__sig: 'iippiii',
__syscall_getsockopt__sig: 'iiiippi',
__syscall_getpeername__sig: 'iippp',
__syscall_getsockname__sig: 'iippp',
__syscall_getsockopt__sig: 'iiiippp',
__syscall_ioctl__sig: 'iiip',
__syscall_listen__sig: 'iiiiiii',
__syscall_listen__sig: 'iiip',
__syscall_lstat64__sig: 'ipp',
__syscall_mkdirat__sig: 'iipi',
__syscall_mknodat__sig: 'iipii',
__syscall_newfstatat__sig: 'iippi',
__syscall_openat__sig: 'iipip',
__syscall_pipe2__sig: 'ipi',
__syscall_poll__sig: 'ipii',
__syscall_poll__sig: 'ippi',
__syscall_readlinkat__sig: 'iippp',
__syscall_recvfrom__sig: 'iippipp',
__syscall_recvmsg__sig: 'iipiiii',
__syscall_recvfrom__sig: 'pippipp',
__syscall_recvmsg__sig: 'pipip',
__syscall_renameat__sig: 'iipip',
__syscall_rmdir__sig: 'ip',
__syscall_sendmsg__sig: 'iipippi',
__syscall_sendto__sig: 'iippipp',
__syscall_shutdown__sig: 'iiiiiii',
__syscall_socket__sig: 'iiiiiii',
__syscall_sendmsg__sig: 'pipip',
__syscall_sendto__sig: 'pippipi',
__syscall_shutdown__sig: 'iiip',
__syscall_socket__sig: 'iiiip',
__syscall_stat64__sig: 'ipp',
__syscall_statfs64__sig: 'ippp',
__syscall_symlinkat__sig: 'ipip',
Expand Down
22 changes: 11 additions & 11 deletions src/lib/libsyscall.js
Original file line number Diff line number Diff line change
Expand Up @@ -350,15 +350,15 @@ var SyscallsLibrary = {
return info;
},
__syscall_socket__deps: ['$SOCKFS'],
__syscall_socket: (domain, type, protocol) => {
__syscall_socket: (domain, type, protocol, varargs) => {
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, addrlen, varargs) => {
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);
Expand All @@ -368,7 +368,7 @@ var SyscallsLibrary = {
return 0;
},
__syscall_getpeername__deps: ['$getSocketFromFD', '$writeSockaddr', '$DNS'],
__syscall_getpeername: (fd, addr, addrlen, d1, d2, d3) => {
__syscall_getpeername: (fd, addr, addrlen, varargs) => {
var sock = getSocketFromFD(fd);
if (!sock.daddr) {
return -{{{ cDefs.ENOTCONN }}}; // The socket is not connected.
Expand All @@ -380,19 +380,19 @@ var SyscallsLibrary = {
return 0;
},
__syscall_connect__deps: ['$getSocketFromFD', '$getSocketAddress'],
__syscall_connect: (fd, addr, addrlen, d1, d2, d3) => {
__syscall_connect: (fd, addr, addrlen, varargs) => {
var sock = getSocketFromFD(fd);
var info = getSocketAddress(addr, addrlen);
sock.sock_ops.connect(sock, info.addr, info.port);
return 0;
},
__syscall_shutdown__deps: ['$getSocketFromFD'],
__syscall_shutdown: (fd, how) => {
__syscall_shutdown: (fd, how, varargs) => {
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, addrlen, flags, varargs) => {
var sock = getSocketFromFD(fd);
var newsock = sock.sock_ops.accept(sock);
if (addr) {
Expand All @@ -404,14 +404,14 @@ var SyscallsLibrary = {
return newsock.stream.fd;
},
__syscall_bind__deps: ['$getSocketFromFD', '$getSocketAddress'],
__syscall_bind: (fd, addr, addrlen, d1, d2, d3) => {
__syscall_bind: (fd, addr, addrlen, varargs) => {
var sock = getSocketFromFD(fd);
var info = getSocketAddress(addr, addrlen);
sock.sock_ops.bind(sock, info.addr, info.port);
return 0;
},
__syscall_listen__deps: ['$getSocketFromFD'],
__syscall_listen: (fd, backlog) => {
__syscall_listen: (fd, backlog, varargs) => {
var sock = getSocketFromFD(fd);
sock.sock_ops.listen(sock, backlog);
return 0;
Expand Down Expand Up @@ -442,7 +442,7 @@ var SyscallsLibrary = {
return sock.sock_ops.sendmsg(sock, HEAP8, message, length, dest.addr, dest.port);
},
__syscall_getsockopt__deps: ['$getSocketFromFD'],
__syscall_getsockopt: (fd, level, optname, optval, optlen, d1) => {
__syscall_getsockopt: (fd, level, optname, optval, optlen, varargs) => {
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 @@ -457,7 +457,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, varargs) => {
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 @@ -488,7 +488,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, varargs) => {
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
184 changes: 95 additions & 89 deletions system/include/emscripten/syscalls.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,113 +7,119 @@

#pragma once

#include <stddef.h>
#include <poll.h>
#include <stdint.h>
#include <sys/resource.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/statfs.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/utsname.h>

#ifdef __cplusplus
extern "C" {
#endif

int __syscall_chdir(intptr_t path);
int __syscall_mknod(intptr_t path, int mode, int dev);
int __syscall_chmod(intptr_t path, int mode);
int __syscall_getpid(void);
int __syscall_chdir(const char *path);
int __syscall_mknod(const char *path, mode_t mode, dev_t dev);
int __syscall_chmod(const char *path, mode_t mode);
pid_t __syscall_getpid(void);
int __syscall_pause(void);
int __syscall_access(intptr_t path, int amode);
int __syscall_access(const char *path, int amode);
int __syscall_sync(void);
int __syscall_rmdir(intptr_t path);
int __syscall_rmdir(const char *path);
int __syscall_dup(int fd);
int __syscall_acct(intptr_t filename);
int __syscall_acct(const char *filename);
int __syscall_ioctl(int fd, int request, ...);
int __syscall_setpgid(int pid, int gpid);
int __syscall_umask(int mask);
int __syscall_getppid(void);
int __syscall_getpgrp(void);
int __syscall_setsid(void);
int __syscall_getrusage(int who, intptr_t usage);
int __syscall_munmap(intptr_t addr, size_t len);
int __syscall_fchmod(int fd, int mode);
int __syscall_getpriority(int which, int who);
int __syscall_setpriority(int which, int who, int prio);
int __syscall_socketcall(int call, intptr_t args);
int __syscall_wait4(int pid, intptr_t wstatus, int options, int rusage);
int __syscall_setdomainname(intptr_t name, size_t size);
int __syscall_uname(intptr_t buf);
int __syscall_mprotect(size_t addr, size_t len, int prot);
int __syscall_getpgid(int pid);
int __syscall_setpgid(pid_t pid, pid_t gpid);
mode_t __syscall_umask(mode_t mask);
pid_t __syscall_getppid(void);
pid_t __syscall_getpgrp(void);
pid_t __syscall_setsid(void);
int __syscall_getrusage(int who, struct rusage *usage);
int __syscall_munmap(void *addr, size_t len);
int __syscall_fchmod(int fd, mode_t mode);
int __syscall_getpriority(int which, id_t who);
int __syscall_setpriority(int which, id_t who, int prio);
int __syscall_socketcall(int call, long args[6]);
pid_t __syscall_wait4(pid_t pid, int *wstatus, int options, struct rusage *rusage);
int __syscall_setdomainname(const char *name, size_t len);
int __syscall_uname(struct utsname *buf);
int __syscall_mprotect(size_t start, size_t len, int prot);
pid_t __syscall_getpgid(pid_t pid);
int __syscall_fchdir(int fd);
int __syscall_msync(intptr_t addr, size_t len, int flags);
int __syscall_getsid(int pid);
int __syscall_msync(void *addr, size_t len, int flags);
pid_t __syscall_getsid(pid_t pid);
int __syscall_fdatasync(int fd);
int __syscall_mlock(intptr_t addr, size_t len);
int __syscall_munlock(intptr_t addr, size_t len);
int __syscall_mlock(const void *addr, size_t len);
int __syscall_munlock(const void *addr, size_t len);
int __syscall_mlockall(int flags);
int __syscall_munlockall(void);
int __syscall_mremap(intptr_t old_addr, size_t old_size, size_t new_size, int flags, intptr_t new_addr);
int __syscall_poll(intptr_t fds, int nfds, int timeout);
int __syscall_getcwd(intptr_t buf, size_t size);
intptr_t __syscall_mmap2(intptr_t addr, size_t len, int prot, int flags, int fd, off_t offset);
int __syscall_truncate64(intptr_t path, off_t length);
int __syscall_mremap(void *old_addr, size_t old_size, size_t new_size, int flags, void *new_addr);
int __syscall_poll(struct pollfd *fds, nfds_t nfds, int timeout);
int __syscall_getcwd(char *buf, size_t size);
intptr_t __syscall_mmap2(void *addr, size_t len, int prot, int flags, int fd, off_t offset);
int __syscall_truncate64(const char *path, off_t length);
int __syscall_ftruncate64(int fd, off_t length);
int __syscall_stat64(intptr_t path, intptr_t buf);
int __syscall_lstat64(intptr_t path, intptr_t buf);
int __syscall_fstat64(int fd, intptr_t buf);
int __syscall_getuid32(void);
int __syscall_getgid32(void);
int __syscall_geteuid32(void);
int __syscall_getegid32(void);
int __syscall_setreuid32(int ruid, int euid);
int __syscall_setregid32(int rgid, int egid);
int __syscall_getgroups32(int size, intptr_t list);
int __syscall_fchown32(int fd, int owner, int group);
int __syscall_setresuid32(int ruid, int euid, int suid);
int __syscall_getresuid32(intptr_t ruid, intptr_t euid, intptr_t suid);
int __syscall_setresgid32(int rgid, int egid, int sgid);
int __syscall_getresgid32(intptr_t rgid, intptr_t egid, intptr_t sgid);
int __syscall_setuid32(int uid);
int __syscall_setgid32(int uid);
int __syscall_mincore(intptr_t addr, size_t length, intptr_t vec);
int __syscall_madvise(intptr_t addr, size_t length, int advice);
int __syscall_getdents64(int fd, intptr_t dirp, size_t count);
int __syscall_stat64(const char *path, struct stat *buf);
int __syscall_lstat64(const char *path, struct stat *buf);
int __syscall_fstat64(int fd, struct stat *buf);
uid_t __syscall_getuid32(void);
gid_t __syscall_getgid32(void);
uid_t __syscall_geteuid32(void);
gid_t __syscall_getegid32(void);
int __syscall_setreuid32(uid_t ruid, uid_t euid);
int __syscall_setregid32(gid_t rgid, gid_t egid);
int __syscall_getgroups32(int count, gid_t list[]);
int __syscall_fchown32(int fd, uid_t owner, gid_t group);
int __syscall_setresuid32(uid_t ruid, uid_t euid, uid_t suid);
int __syscall_getresuid32(uid_t *ruid, uid_t *euid, uid_t *suid);
int __syscall_setresgid32(gid_t rgid, gid_t egid, gid_t sgid);
int __syscall_getresgid32(gid_t *rgid, gid_t *egid, gid_t *sgid);
int __syscall_setuid32(uid_t uid);
int __syscall_setgid32(gid_t gid);
int __syscall_mincore(void *addr, size_t length, unsigned char *vec);
int __syscall_madvise(void *addr, size_t length, int advice);
int __syscall_getdents64(int fd, void *dirp, size_t count);
int __syscall_fcntl64(int fd, int cmd, ...);
int __syscall_statfs64(intptr_t path, size_t size, intptr_t buf);
int __syscall_fstatfs64(int fd, size_t size, intptr_t buf);
int __syscall_fadvise64(int fd, off_t offset, off_t length, int advice);
int __syscall_openat(int dirfd, intptr_t path, int flags, ...); // mode is optional
int __syscall_mkdirat(int dirfd, intptr_t path, int mode);
int __syscall_mknodat(int dirfd, intptr_t path, int mode, int dev);
int __syscall_fchownat(int dirfd, intptr_t path, int owner, int group, int flags);
int __syscall_newfstatat(int dirfd, intptr_t path, intptr_t buf, int flags);
int __syscall_unlinkat(int dirfd, intptr_t path, int flags);
int __syscall_renameat(int olddirfd, intptr_t oldpath, int newdirfd, intptr_t newpath);
int __syscall_linkat(int olddirfd, intptr_t oldpath, int newdirfd, intptr_t newpath, int flags);
int __syscall_symlinkat(intptr_t target, int newdirfd, intptr_t linkpath);
int __syscall_readlinkat(int dirfd, intptr_t path, intptr_t buf, size_t bufsize);
int __syscall_fchmodat2(int dirfd, intptr_t path, int mode, int flags);
int __syscall_faccessat(int dirfd, intptr_t path, int amode, int flags);
int __syscall_utimensat(int dirfd, intptr_t path, intptr_t times, int flags);
int __syscall_statfs64(const char *path, size_t size, struct statfs *buf);
int __syscall_fstatfs64(int fd, size_t size, struct statfs *buf);
int __syscall_fadvise64(int fd, off_t offset, off_t len, int advice);
int __syscall_openat(int dirfd, const char *path, int flags, ...); // mode is optional
int __syscall_mkdirat(int dirfd, const char *path, mode_t mode);
int __syscall_mknodat(int dirfd, const char *path, mode_t mode, dev_t dev);
int __syscall_fchownat(int dirfd, const char *path, uid_t owner, gid_t group, int flags);
int __syscall_newfstatat(int dirfd, const char *path, struct stat *buf, int flags);
int __syscall_unlinkat(int dirfd, const char *path, int flags);
int __syscall_renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath);
int __syscall_linkat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath, int flags);
int __syscall_symlinkat(const char *target, int newdirfd, const char *linkpath);
int __syscall_readlinkat(int dirfd, const char *path, char *buf, size_t bufsize);
int __syscall_fchmodat2(int dirfd, const char *path, mode_t mode, int flags);
int __syscall_faccessat(int dirfd, const char *path, int amode, int flags);
int __syscall_utimensat(int dirfd, const char *path, const struct timespec times[2], 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, size_t vlen, int flags, ...);
int __syscall_prlimit64(int pid, int resource, intptr_t new_limit, intptr_t old_limit);
int __syscall_sendmmsg(int sockfd, intptr_t msgvec, size_t vlen, 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, size_t alen, int dummy, int dummy2, int dummy3);
int __syscall_connect(int sockfd, intptr_t addr, size_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, size_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, size_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_dup3(int oldfd, int newfd, int flags);
int __syscall_pipe2(int fd[2], int flags);
int __syscall_recvmmsg(int sockfd, struct mmsghdr *msgvec, unsigned int vlen, unsigned int flags, struct timespec *timeout);
int __syscall_prlimit64(pid_t pid, int resource, const struct rlimit *new_limit, struct rlimit *old_limit);
int __syscall_sendmmsg(int sockfd, struct mmsghdr *msgvec, unsigned int vlen, unsigned int flags);
int __syscall_socket(int domain, int type, int protocol, ...);
int __syscall_socketpair(int domain, int type, int protocol, int fd[2], ...);
int __syscall_bind(int sockfd, const struct sockaddr *addr, socklen_t len, ...);
int __syscall_connect(int sockfd, const struct sockaddr *addr, socklen_t len, ...);
int __syscall_listen(int sockfd, int backlog, ...);
int __syscall_accept4(int sockfd, struct sockaddr *addr, socklen_t *len, int flags, ...);
int __syscall_getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen, ...);
int __syscall_setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen, ...);
int __syscall_getsockname(int sockfd, struct sockaddr *addr, socklen_t *len, ...);
int __syscall_getpeername(int sockfd, struct sockaddr *addr, socklen_t *len, ...);
ssize_t __syscall_sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *addr, socklen_t alen);
ssize_t __syscall_sendmsg(int sockfd, const struct msghdr *msg, int flags, ...);
ssize_t __syscall_recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *addr, socklen_t *alen);
ssize_t __syscall_recvmsg(int sockfd, struct msghdr *msg, int flags, ...);
int __syscall_shutdown(int sockfd, int how, ...);

#ifdef __cplusplus
}
Expand Down
4 changes: 2 additions & 2 deletions system/lib/libc/emscripten_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,9 @@ int _mmap_js(size_t length,
int* allocated,
void** addr);
int _munmap_js(
intptr_t addr, size_t length, int prot, int flags, int fd, off_t offset);
void *addr, size_t length, int prot, int flags, int fd, off_t offset);
int _msync_js(
intptr_t addr, size_t length, int prot, int flags, int fd, off_t offset);
void *addr, size_t length, int prot, int flags, int fd, off_t offset);

struct dso;

Expand Down
Loading
Loading