Skip to content

Commit d2e1691

Browse files
committed
Use correct types for syscalls (3)
1 parent e7091fb commit d2e1691

File tree

15 files changed

+405
-391
lines changed

15 files changed

+405
-391
lines changed

src/library_sigs.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -217,11 +217,11 @@ sigs = {
217217
__pthread_create_js__sig: 'ipppp',
218218
__pthread_kill_js__sig: 'ipi',
219219
__syscall__newselect__sig: 'iipppp',
220-
__syscall_accept4__sig: 'iippiii',
221-
__syscall_bind__sig: 'iippiii',
220+
__syscall_accept4__sig: 'iippip',
221+
__syscall_bind__sig: 'iipip',
222222
__syscall_chdir__sig: 'ip',
223223
__syscall_chmod__sig: 'ipi',
224-
__syscall_connect__sig: 'iippiii',
224+
__syscall_connect__sig: 'iipip',
225225
__syscall_dup__sig: 'ii',
226226
__syscall_dup3__sig: 'iiii',
227227
__syscall_faccessat__sig: 'iipii',
@@ -239,27 +239,27 @@ sigs = {
239239
__syscall_ftruncate64__sig: 'iij',
240240
__syscall_getcwd__sig: 'ipp',
241241
__syscall_getdents64__sig: 'iipp',
242-
__syscall_getpeername__sig: 'iippiii',
243-
__syscall_getsockname__sig: 'iippiii',
244-
__syscall_getsockopt__sig: 'iiiippi',
242+
__syscall_getpeername__sig: 'iippp',
243+
__syscall_getsockname__sig: 'iippp',
244+
__syscall_getsockopt__sig: 'iiiippp',
245245
__syscall_ioctl__sig: 'iiip',
246-
__syscall_listen__sig: 'iiiiiii',
246+
__syscall_listen__sig: 'iiip',
247247
__syscall_lstat64__sig: 'ipp',
248248
__syscall_mkdirat__sig: 'iipi',
249249
__syscall_mknodat__sig: 'iipii',
250250
__syscall_newfstatat__sig: 'iippi',
251251
__syscall_openat__sig: 'iipip',
252252
__syscall_pipe__sig: 'ip',
253-
__syscall_poll__sig: 'ipii',
253+
__syscall_poll__sig: 'ippi',
254254
__syscall_readlinkat__sig: 'iippp',
255-
__syscall_recvfrom__sig: 'iippipp',
256-
__syscall_recvmsg__sig: 'iipiiii',
255+
__syscall_recvfrom__sig: 'pippipp',
256+
__syscall_recvmsg__sig: 'pipip',
257257
__syscall_renameat__sig: 'iipip',
258258
__syscall_rmdir__sig: 'ip',
259-
__syscall_sendmsg__sig: 'iipippi',
260-
__syscall_sendto__sig: 'iippipp',
261-
__syscall_shutdown__sig: 'iiiiiii',
262-
__syscall_socket__sig: 'iiiiiii',
259+
__syscall_sendmsg__sig: 'pipip',
260+
__syscall_sendto__sig: 'pippipi',
261+
__syscall_shutdown__sig: 'iiip',
262+
__syscall_socket__sig: 'iiiip',
263263
__syscall_stat64__sig: 'ipp',
264264
__syscall_statfs64__sig: 'ippp',
265265
__syscall_symlink__sig: 'ipp',

src/library_syscall.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -295,15 +295,15 @@ var SyscallsLibrary = {
295295
return info;
296296
},
297297
__syscall_socket__deps: ['$SOCKFS'],
298-
__syscall_socket: function(domain, type, protocol) {
298+
__syscall_socket: function(domain, type, protocol, varargs) {
299299
var sock = SOCKFS.createSocket(domain, type, protocol);
300300
#if ASSERTIONS
301301
assert(sock.stream.fd < 64); // XXX ? select() assumes socket fd values are in 0..63
302302
#endif
303303
return sock.stream.fd;
304304
},
305305
__syscall_getsockname__deps: ['$getSocketFromFD', '$writeSockaddr', '$DNS'],
306-
__syscall_getsockname: function(fd, addr, addrlen, d1, d2, d3) {
306+
__syscall_getsockname: function(fd, addr, addrlen, varargs) {
307307
var sock = getSocketFromFD(fd);
308308
// TODO: sock.saddr should never be undefined, see TODO in websocket_sock_ops.getname
309309
var errno = writeSockaddr(addr, sock.family, DNS.lookup_name(sock.saddr || '0.0.0.0'), sock.sport, addrlen);
@@ -313,7 +313,7 @@ var SyscallsLibrary = {
313313
return 0;
314314
},
315315
__syscall_getpeername__deps: ['$getSocketFromFD', '$writeSockaddr', '$DNS'],
316-
__syscall_getpeername: function(fd, addr, addrlen, d1, d2, d3) {
316+
__syscall_getpeername: function(fd, addr, addrlen, varargs) {
317317
var sock = getSocketFromFD(fd);
318318
if (!sock.daddr) {
319319
return -{{{ cDefs.ENOTCONN }}}; // The socket is not connected.
@@ -325,19 +325,19 @@ var SyscallsLibrary = {
325325
return 0;
326326
},
327327
__syscall_connect__deps: ['$getSocketFromFD', '$getSocketAddress'],
328-
__syscall_connect: function(fd, addr, addrlen, d1, d2, d3) {
328+
__syscall_connect: function(fd, addr, addrlen, varargs) {
329329
var sock = getSocketFromFD(fd);
330330
var info = getSocketAddress(addr, addrlen);
331331
sock.sock_ops.connect(sock, info.addr, info.port);
332332
return 0;
333333
},
334334
__syscall_shutdown__deps: ['$getSocketFromFD'],
335-
__syscall_shutdown: function(fd, how) {
335+
__syscall_shutdown: function(fd, how, varargs) {
336336
getSocketFromFD(fd);
337337
return -{{{ cDefs.ENOSYS }}}; // unsupported feature
338338
},
339339
__syscall_accept4__deps: ['$getSocketFromFD', '$writeSockaddr', '$DNS'],
340-
__syscall_accept4: function(fd, addr, addrlen, flags, d1, d2) {
340+
__syscall_accept4: function(fd, addr, addrlen, flags, varargs) {
341341
var sock = getSocketFromFD(fd);
342342
var newsock = sock.sock_ops.accept(sock);
343343
if (addr) {
@@ -349,14 +349,14 @@ var SyscallsLibrary = {
349349
return newsock.stream.fd;
350350
},
351351
__syscall_bind__deps: ['$getSocketFromFD', '$getSocketAddress'],
352-
__syscall_bind: function(fd, addr, addrlen, d1, d2, d3) {
352+
__syscall_bind: function(fd, addr, addrlen, varargs) {
353353
var sock = getSocketFromFD(fd);
354354
var info = getSocketAddress(addr, addrlen);
355355
sock.sock_ops.bind(sock, info.addr, info.port);
356356
return 0;
357357
},
358358
__syscall_listen__deps: ['$getSocketFromFD'],
359-
__syscall_listen: function(fd, backlog) {
359+
__syscall_listen: function(fd, backlog, varargs) {
360360
var sock = getSocketFromFD(fd);
361361
sock.sock_ops.listen(sock, backlog);
362362
return 0;
@@ -387,7 +387,7 @@ var SyscallsLibrary = {
387387
return sock.sock_ops.sendmsg(sock, {{{ heapAndOffset('HEAP8', 'message') }}}, length, dest.addr, dest.port);
388388
},
389389
__syscall_getsockopt__deps: ['$getSocketFromFD'],
390-
__syscall_getsockopt: function(fd, level, optname, optval, optlen, d1) {
390+
__syscall_getsockopt: function(fd, level, optname, optval, optlen, varargs) {
391391
var sock = getSocketFromFD(fd);
392392
// Minimal getsockopt aimed at resolving https://github.com/emscripten-core/emscripten/issues/2211
393393
// so only supports SOL_SOCKET with SO_ERROR.
@@ -402,7 +402,7 @@ var SyscallsLibrary = {
402402
return -{{{ cDefs.ENOPROTOOPT }}}; // The option is unknown at the level indicated.
403403
},
404404
__syscall_sendmsg__deps: ['$getSocketFromFD', '$readSockaddr', '$DNS'],
405-
__syscall_sendmsg: function(fd, message, flags, d1, d2, d3) {
405+
__syscall_sendmsg: function(fd, message, flags, varargs) {
406406
var sock = getSocketFromFD(fd);
407407
var iov = {{{ makeGetValue('message', C_STRUCTS.msghdr.msg_iov, '*') }}};
408408
var num = {{{ makeGetValue('message', C_STRUCTS.msghdr.msg_iovlen, 'i32') }}};
@@ -434,7 +434,7 @@ var SyscallsLibrary = {
434434
return sock.sock_ops.sendmsg(sock, view, 0, total, addr, port);
435435
},
436436
__syscall_recvmsg__deps: ['$getSocketFromFD', '$writeSockaddr', '$DNS'],
437-
__syscall_recvmsg: function(fd, message, flags, d1, d2, d3) {
437+
__syscall_recvmsg: function(fd, message, flags, varargs) {
438438
var sock = getSocketFromFD(fd);
439439
var iov = {{{ makeGetValue('message', C_STRUCTS.msghdr.msg_iov, POINTER_TYPE) }}};
440440
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

@@ -127,6 +135,92 @@ u64 MonotonicNanoTime() {
127135
return (u64)ts.tv_sec * (1000ULL * 1000 * 1000) + ts.tv_nsec;
128136
}
129137

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

132226
#endif

0 commit comments

Comments
 (0)