Skip to content

Commit 9c394c7

Browse files
committed
Use correct types for syscalls (2)
1 parent db78518 commit 9c394c7

File tree

15 files changed

+407
-406
lines changed

15 files changed

+407
-406
lines changed

src/lib/libsigs.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -229,11 +229,11 @@ sigs = {
229229
__pthread_create_js__sig: 'ipppp',
230230
__resumeException__sig: 'vp',
231231
__syscall__newselect__sig: 'iipppp',
232-
__syscall_accept4__sig: 'iippiii',
233-
__syscall_bind__sig: 'iippiii',
232+
__syscall_accept4__sig: 'iippip',
233+
__syscall_bind__sig: 'iipip',
234234
__syscall_chdir__sig: 'ip',
235235
__syscall_chmod__sig: 'ipi',
236-
__syscall_connect__sig: 'iippiii',
236+
__syscall_connect__sig: 'iipip',
237237
__syscall_dup__sig: 'ii',
238238
__syscall_dup3__sig: 'iiii',
239239
__syscall_faccessat__sig: 'iipii',
@@ -251,27 +251,27 @@ sigs = {
251251
__syscall_ftruncate64__sig: 'iij',
252252
__syscall_getcwd__sig: 'ipp',
253253
__syscall_getdents64__sig: 'iipp',
254-
__syscall_getpeername__sig: 'iippiii',
255-
__syscall_getsockname__sig: 'iippiii',
256-
__syscall_getsockopt__sig: 'iiiippi',
254+
__syscall_getpeername__sig: 'iippp',
255+
__syscall_getsockname__sig: 'iippp',
256+
__syscall_getsockopt__sig: 'iiiippp',
257257
__syscall_ioctl__sig: 'iiip',
258-
__syscall_listen__sig: 'iiiiiii',
258+
__syscall_listen__sig: 'iiip',
259259
__syscall_lstat64__sig: 'ipp',
260260
__syscall_mkdirat__sig: 'iipi',
261261
__syscall_mknodat__sig: 'iipii',
262262
__syscall_newfstatat__sig: 'iippi',
263263
__syscall_openat__sig: 'iipip',
264264
__syscall_pipe__sig: 'ip',
265-
__syscall_poll__sig: 'ipii',
265+
__syscall_poll__sig: 'ippi',
266266
__syscall_readlinkat__sig: 'iippp',
267-
__syscall_recvfrom__sig: 'iippipp',
268-
__syscall_recvmsg__sig: 'iipiiii',
267+
__syscall_recvfrom__sig: 'pippipp',
268+
__syscall_recvmsg__sig: 'pipip',
269269
__syscall_renameat__sig: 'iipip',
270270
__syscall_rmdir__sig: 'ip',
271-
__syscall_sendmsg__sig: 'iipippi',
272-
__syscall_sendto__sig: 'iippipp',
273-
__syscall_shutdown__sig: 'iiiiiii',
274-
__syscall_socket__sig: 'iiiiiii',
271+
__syscall_sendmsg__sig: 'pipip',
272+
__syscall_sendto__sig: 'pippipi',
273+
__syscall_shutdown__sig: 'iiip',
274+
__syscall_socket__sig: 'iiiip',
275275
__syscall_stat64__sig: 'ipp',
276276
__syscall_statfs64__sig: 'ippp',
277277
__syscall_symlinkat__sig: 'ipip',

src/lib/libsyscall.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -340,15 +340,15 @@ var SyscallsLibrary = {
340340
return info;
341341
},
342342
__syscall_socket__deps: ['$SOCKFS'],
343-
__syscall_socket: (domain, type, protocol) => {
343+
__syscall_socket: (domain, type, protocol, varargs) => {
344344
var sock = SOCKFS.createSocket(domain, type, protocol);
345345
#if ASSERTIONS
346346
assert(sock.stream.fd < 64); // XXX ? select() assumes socket fd values are in 0..63
347347
#endif
348348
return sock.stream.fd;
349349
},
350350
__syscall_getsockname__deps: ['$getSocketFromFD', '$writeSockaddr', '$DNS'],
351-
__syscall_getsockname: (fd, addr, addrlen, d1, d2, d3) => {
351+
__syscall_getsockname: (fd, addr, addrlen, varargs) => {
352352
var sock = getSocketFromFD(fd);
353353
// TODO: sock.saddr should never be undefined, see TODO in websocket_sock_ops.getname
354354
var errno = writeSockaddr(addr, sock.family, DNS.lookup_name(sock.saddr || '0.0.0.0'), sock.sport, addrlen);
@@ -358,7 +358,7 @@ var SyscallsLibrary = {
358358
return 0;
359359
},
360360
__syscall_getpeername__deps: ['$getSocketFromFD', '$writeSockaddr', '$DNS'],
361-
__syscall_getpeername: (fd, addr, addrlen, d1, d2, d3) => {
361+
__syscall_getpeername: (fd, addr, addrlen, varargs) => {
362362
var sock = getSocketFromFD(fd);
363363
if (!sock.daddr) {
364364
return -{{{ cDefs.ENOTCONN }}}; // The socket is not connected.
@@ -370,19 +370,19 @@ var SyscallsLibrary = {
370370
return 0;
371371
},
372372
__syscall_connect__deps: ['$getSocketFromFD', '$getSocketAddress'],
373-
__syscall_connect: (fd, addr, addrlen, d1, d2, d3) => {
373+
__syscall_connect: (fd, addr, addrlen, varargs) => {
374374
var sock = getSocketFromFD(fd);
375375
var info = getSocketAddress(addr, addrlen);
376376
sock.sock_ops.connect(sock, info.addr, info.port);
377377
return 0;
378378
},
379379
__syscall_shutdown__deps: ['$getSocketFromFD'],
380-
__syscall_shutdown: (fd, how) => {
380+
__syscall_shutdown: (fd, how, varargs) => {
381381
getSocketFromFD(fd);
382382
return -{{{ cDefs.ENOSYS }}}; // unsupported feature
383383
},
384384
__syscall_accept4__deps: ['$getSocketFromFD', '$writeSockaddr', '$DNS'],
385-
__syscall_accept4: (fd, addr, addrlen, flags, d1, d2) => {
385+
__syscall_accept4: (fd, addr, addrlen, flags, varargs) => {
386386
var sock = getSocketFromFD(fd);
387387
var newsock = sock.sock_ops.accept(sock);
388388
if (addr) {
@@ -394,14 +394,14 @@ var SyscallsLibrary = {
394394
return newsock.stream.fd;
395395
},
396396
__syscall_bind__deps: ['$getSocketFromFD', '$getSocketAddress'],
397-
__syscall_bind: (fd, addr, addrlen, d1, d2, d3) => {
397+
__syscall_bind: (fd, addr, addrlen, varargs) => {
398398
var sock = getSocketFromFD(fd);
399399
var info = getSocketAddress(addr, addrlen);
400400
sock.sock_ops.bind(sock, info.addr, info.port);
401401
return 0;
402402
},
403403
__syscall_listen__deps: ['$getSocketFromFD'],
404-
__syscall_listen: (fd, backlog) => {
404+
__syscall_listen: (fd, backlog, varargs) => {
405405
var sock = getSocketFromFD(fd);
406406
sock.sock_ops.listen(sock, backlog);
407407
return 0;
@@ -432,7 +432,7 @@ var SyscallsLibrary = {
432432
return sock.sock_ops.sendmsg(sock, HEAP8, message, length, dest.addr, dest.port);
433433
},
434434
__syscall_getsockopt__deps: ['$getSocketFromFD'],
435-
__syscall_getsockopt: (fd, level, optname, optval, optlen, d1) => {
435+
__syscall_getsockopt: (fd, level, optname, optval, optlen, varargs) => {
436436
var sock = getSocketFromFD(fd);
437437
// Minimal getsockopt aimed at resolving https://github.com/emscripten-core/emscripten/issues/2211
438438
// so only supports SOL_SOCKET with SO_ERROR.
@@ -447,7 +447,7 @@ var SyscallsLibrary = {
447447
return -{{{ cDefs.ENOPROTOOPT }}}; // The option is unknown at the level indicated.
448448
},
449449
__syscall_sendmsg__deps: ['$getSocketFromFD', '$getSocketAddress', '$DNS'],
450-
__syscall_sendmsg: (fd, message, flags, d1, d2, d3) => {
450+
__syscall_sendmsg: (fd, message, flags, varargs) => {
451451
var sock = getSocketFromFD(fd);
452452
var iov = {{{ makeGetValue('message', C_STRUCTS.msghdr.msg_iov, '*') }}};
453453
var num = {{{ makeGetValue('message', C_STRUCTS.msghdr.msg_iovlen, 'i32') }}};
@@ -478,7 +478,7 @@ var SyscallsLibrary = {
478478
return sock.sock_ops.sendmsg(sock, view, 0, total, addr, port);
479479
},
480480
__syscall_recvmsg__deps: ['$getSocketFromFD', '$writeSockaddr', '$DNS'],
481-
__syscall_recvmsg: (fd, message, flags, d1, d2, d3) => {
481+
__syscall_recvmsg: (fd, message, flags, varargs) => {
482482
var sock = getSocketFromFD(fd);
483483
var iov = {{{ makeGetValue('message', C_STRUCTS.msghdr.msg_iov, POINTER_TYPE) }}};
484484
var num = {{{ makeGetValue('message', C_STRUCTS.msghdr.msg_iovlen, 'i32') }}};

system/lib/compiler-rt/lib/sanitizer_common/sanitizer_emscripten.cpp

Lines changed: 95 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,25 @@
1414
//===----------------------------------------------------------------------===//
1515

1616
#include "sanitizer_platform.h"
17+
#include "sanitizer_platform_limits_posix.h"
1718
#include "sanitizer_common.h"
1819
#include "sanitizer_stoptheworld.h"
1920

21+
#include <fcntl.h>
2022
#include <signal.h>
2123
#include <time.h>
24+
#include <unistd.h>
25+
#include <math.h>
2226

2327
#if SANITIZER_EMSCRIPTEN
2428

29+
#include <sys/stat.h>
30+
#include <sys/types.h>
31+
2532
#include <emscripten.h>
2633
#include <emscripten/stack.h>
27-
#include <sys/types.h>
34+
#include <wasi/api.h>
35+
#include <wasi/wasi-helpers.h>
2836

2937
#include "emscripten_internal.h"
3038

@@ -129,6 +137,92 @@ u64 MonotonicNanoTime() {
129137

130138
void GetMemoryProfile(fill_profile_f cb, uptr *stats) {}
131139

140+
int internal_madvise(uptr addr, uptr length, int advice) {
141+
return 0; // madvise is currently ignored
142+
}
143+
144+
uptr internal_close(fd_t fd) {
145+
return __wasi_fd_close(fd);
146+
}
147+
148+
uptr internal_open(const char *filename, int flags) {
149+
return open(filename, flags);
150+
}
151+
152+
uptr internal_open(const char *filename, int flags, u32 mode) {
153+
return open(filename, flags, mode);
154+
}
155+
156+
uptr internal_read(fd_t fd, void *buf, uptr count) {
157+
__wasi_iovec_t iov = { (uint8_t*)buf, count };
158+
size_t num;
159+
if (__wasi_syscall_ret(__wasi_fd_read(fd, &iov, 1, &num))) {
160+
return -1;
161+
}
162+
return num;
163+
}
164+
165+
uptr internal_write(fd_t fd, const void *buf, uptr count) {
166+
__wasi_ciovec_t iov = { (const uint8_t*)buf, count };
167+
size_t num;
168+
if (__wasi_syscall_ret(__wasi_fd_write(fd, &iov, 1, &num))) {
169+
return -1;
170+
}
171+
return num;
172+
}
173+
174+
uptr internal_stat(const char *path, void *buf) {
175+
return stat(path, (struct stat *)buf);
176+
}
177+
178+
uptr internal_fstat(fd_t fd, void *buf) {
179+
return fstat(fd, (struct stat *)buf);
180+
}
181+
182+
uptr internal_filesize(fd_t fd) {
183+
struct stat st;
184+
if (internal_fstat(fd, &st))
185+
return -1;
186+
return (uptr)st.st_size;
187+
}
188+
189+
uptr internal_dup(int oldfd) {
190+
return dup(oldfd);
191+
}
192+
193+
uptr internal_getpid() {
194+
return 42;
195+
}
196+
197+
uptr internal_sched_yield() {
198+
return sched_yield();
199+
}
200+
201+
void internal_sigfillset(__sanitizer_sigset_t *set) {
202+
sigfillset(set);
203+
}
204+
205+
uptr internal_sigprocmask(int how, __sanitizer_sigset_t *set,
206+
__sanitizer_sigset_t *oldset) {
207+
return sigprocmask(how, set, oldset);
208+
}
209+
210+
void internal_usleep(u64 useconds) {
211+
usleep(useconds);
212+
}
213+
214+
void internal__exit(int exitcode) {
215+
__wasi_proc_exit(exitcode);
216+
}
217+
218+
tid_t GetTid() {
219+
return gettid();
220+
}
221+
222+
uptr internal_clock_gettime(__sanitizer_clockid_t clk_id, void *tp) {
223+
return clock_gettime(clk_id, (struct timespec *)tp);
224+
}
225+
132226
} // namespace __sanitizer
133227

134228
#endif

0 commit comments

Comments
 (0)