Skip to content

Commit 90afcd3

Browse files
committed
[WiP] Use correct types for syscalls (2)
1 parent 979fab7 commit 90afcd3

File tree

11 files changed

+287
-324
lines changed

11 files changed

+287
-324
lines changed

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

Lines changed: 15 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,6 @@ extern struct ps_strings *__ps_strings;
109109
#endif
110110

111111
#if SANITIZER_EMSCRIPTEN
112-
#define weak __attribute__(__weak__)
113-
#define hidden __attribute__((__visibility__("hidden")))
114-
#include <syscall.h>
115-
#undef weak
116-
#undef hidden
117112
#include <emscripten/threading.h>
118113
#include <math.h>
119114
#include <wasi/api.h>
@@ -211,8 +206,8 @@ ScopedBlockSignals::~ScopedBlockSignals() { SetSigProcMask(&saved_, nullptr); }
211206
# endif
212207

213208
// --------------- sanitizer_libc.h
214-
#if !SANITIZER_SOLARIS && !SANITIZER_NETBSD
215-
#if !SANITIZER_S390 && !SANITIZER_EMSCRIPTEN
209+
#if !SANITIZER_SOLARIS && !SANITIZER_NETBSD && !SANITIZER_EMSCRIPTEN
210+
#if !SANITIZER_S390
216211
uptr internal_mmap(void *addr, uptr length, int prot, int flags, int fd,
217212
u64 offset) {
218213
#if SANITIZER_FREEBSD || SANITIZER_LINUX_USES_64BIT_SYSCALLS
@@ -225,9 +220,8 @@ uptr internal_mmap(void *addr, uptr length, int prot, int flags, int fd,
225220
offset / 4096);
226221
#endif
227222
}
228-
#endif // !SANITIZER_S390 && !SANITIZER_NETBSD
223+
#endif // !SANITIZER_S390
229224

230-
#if !SANITIZER_EMSCRIPTEN
231225
uptr internal_munmap(void *addr, uptr length) {
232226
return internal_syscall(SYSCALL(munmap), (uptr)addr, length);
233227
}
@@ -243,30 +237,25 @@ uptr internal_mremap(void *old_address, uptr old_size, uptr new_size, int flags,
243237
int internal_mprotect(void *addr, uptr length, int prot) {
244238
return internal_syscall(SYSCALL(mprotect), (uptr)addr, length, prot);
245239
}
246-
#endif
247240

248241
int internal_madvise(uptr addr, uptr length, int advice) {
249242
return internal_syscall(SYSCALL(madvise), addr, length, advice);
250-
}
243+
251244

252245
uptr internal_close(fd_t fd) {
253-
#if SANITIZER_EMSCRIPTEN
254-
return __wasi_fd_close(fd);
255-
#else
256246
return internal_syscall(SYSCALL(close), fd);
257-
#endif
258247
}
259248

260249
uptr internal_open(const char *filename, int flags) {
261-
# if SANITIZER_LINUX || SANITIZER_EMSCRIPTEN
250+
# if SANITIZER_LINUX
262251
return internal_syscall(SYSCALL(openat), AT_FDCWD, (uptr)filename, flags);
263252
#else
264253
return internal_syscall(SYSCALL(open), (uptr)filename, flags);
265254
#endif
266255
}
267256

268257
uptr internal_open(const char *filename, int flags, u32 mode) {
269-
# if SANITIZER_LINUX || SANITIZER_EMSCRIPTEN
258+
# if SANITIZER_LINUX
270259
return internal_syscall(SYSCALL(openat), AT_FDCWD, (uptr)filename, flags,
271260
mode);
272261
#else
@@ -275,19 +264,10 @@ uptr internal_open(const char *filename, int flags, u32 mode) {
275264
}
276265

277266
uptr internal_read(fd_t fd, void *buf, uptr count) {
278-
#if SANITIZER_EMSCRIPTEN
279-
__wasi_iovec_t iov = { (uint8_t *)buf, count };
280-
size_t num;
281-
if (__wasi_syscall_ret(__wasi_fd_read(fd, &iov, 1, &num))) {
282-
return -1;
283-
}
284-
return num;
285-
#else
286267
sptr res;
287268
HANDLE_EINTR(res,
288269
(sptr)internal_syscall(SYSCALL(read), fd, (uptr)buf, count));
289270
return res;
290-
#endif
291271
}
292272

293273
uptr internal_write(fd_t fd, const void *buf, uptr count) {
@@ -503,15 +483,15 @@ uptr internal_dup(int oldfd) {
503483
}
504484

505485
uptr internal_dup2(int oldfd, int newfd) {
506-
# if SANITIZER_LINUX || SANITIZER_EMSCRIPTEN
486+
# if SANITIZER_LINUX
507487
return internal_syscall(SYSCALL(dup3), oldfd, newfd, 0);
508488
#else
509489
return internal_syscall(SYSCALL(dup2), oldfd, newfd);
510490
#endif
511491
}
512492

513493
uptr internal_readlink(const char *path, char *buf, uptr bufsize) {
514-
# if SANITIZER_LINUX || SANITIZER_EMSCRIPTEN
494+
# if SANITIZER_LINUX
515495
return internal_syscall(SYSCALL(readlinkat), AT_FDCWD, (uptr)path, (uptr)buf,
516496
bufsize);
517497
#else
@@ -520,7 +500,7 @@ uptr internal_readlink(const char *path, char *buf, uptr bufsize) {
520500
}
521501

522502
uptr internal_unlink(const char *path) {
523-
# if SANITIZER_LINUX || SANITIZER_EMSCRIPTEN
503+
# if SANITIZER_LINUX
524504
return internal_syscall(SYSCALL(unlinkat), AT_FDCWD, (uptr)path, 0);
525505
#else
526506
return internal_syscall(SYSCALL(unlink), (uptr)path);
@@ -531,7 +511,7 @@ uptr internal_rename(const char *oldpath, const char *newpath) {
531511
# if (defined(__riscv) || defined(__loongarch__)) && defined(__linux__)
532512
return internal_syscall(SYSCALL(renameat2), AT_FDCWD, (uptr)oldpath, AT_FDCWD,
533513
(uptr)newpath, 0);
534-
# elif SANITIZER_LINUX || SANITIZER_EMSCRIPTEN
514+
# elif SANITIZER_LINUX
535515
return internal_syscall(SYSCALL(renameat), AT_FDCWD, (uptr)oldpath, AT_FDCWD,
536516
(uptr)newpath);
537517
# else
@@ -540,32 +520,21 @@ uptr internal_rename(const char *oldpath, const char *newpath) {
540520
}
541521

542522
uptr internal_sched_yield() {
543-
#if SANITIZER_EMSCRIPTEN
544-
return 0;
545-
#else
546-
return internal_syscall(SYSCALL(sched_yield));
547-
#endif
523+
return internal_syscall(SYSCALL(sched_yield))
548524
}
549525

550526
void internal_usleep(u64 useconds) {
551-
#if SANITIZER_EMSCRIPTEN
552-
usleep(useconds);
553-
#else
554527
struct timespec ts;
555528
ts.tv_sec = useconds / 1000000;
556529
ts.tv_nsec = (useconds % 1000000) * 1000;
557530
internal_syscall(SYSCALL(nanosleep), &ts, &ts);
558-
#endif
559531
}
560-
561-
#if !SANITIZER_EMSCRIPTEN
562532
uptr internal_execve(const char *filename, char *const argv[],
563533
char *const envp[]) {
564534
return internal_syscall(SYSCALL(execve), (uptr)filename, (uptr)argv,
565535
(uptr)envp);
566536
}
567-
#endif // !SANITIZER_EMSCRIPTEN
568-
#endif // !SANITIZER_SOLARIS && !SANITIZER_NETBSD
537+
#endif // !SANITIZER_SOLARIS && !SANITIZER_NETBSD && !SANITIZER_EMSCRIPTEN
569538

570539
#if !SANITIZER_NETBSD
571540
void internal__exit(int exitcode) {
@@ -607,7 +576,7 @@ tid_t GetTid() {
607576
#elif SANITIZER_SOLARIS
608577
return thr_self();
609578
#elif SANITIZER_EMSCRIPTEN
610-
return (tid_t) pthread_self();
579+
return gettid();
611580
#else
612581
return internal_syscall(SYSCALL(gettid));
613582
#endif
@@ -833,14 +802,12 @@ struct linux_dirent {
833802
};
834803
#endif
835804

836-
#if !SANITIZER_SOLARIS && !SANITIZER_NETBSD
837-
#if !SANITIZER_EMSCRIPTEN
805+
#if !SANITIZER_SOLARIS && !SANITIZER_NETBS && !SANITIZER_EMSCRIPTEN
838806
// Syscall wrappers.
839807
uptr internal_ptrace(int request, int pid, void *addr, void *data) {
840808
return internal_syscall(SYSCALL(ptrace), request, pid, (uptr)addr,
841809
(uptr)data);
842810
}
843-
#endif
844811

845812
uptr internal_waitpid(int pid, int *status, int options) {
846813
return internal_syscall(SYSCALL(wait4), pid, (uptr)status, options,
@@ -874,12 +841,7 @@ uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count) {
874841
}
875842

876843
uptr internal_lseek(fd_t fd, OFF_T offset, int whence) {
877-
#if SANITIZER_EMSCRIPTEN
878-
__wasi_filesize_t result;
879-
return __wasi_syscall_ret(__wasi_fd_seek(fd, offset, whence, &result)) ? -1 : result;
880-
#else
881844
return internal_syscall(SYSCALL(lseek), fd, offset, whence);
882-
#endif
883845
}
884846

885847
#if SANITIZER_LINUX
@@ -895,17 +857,11 @@ uptr internal_arch_prctl(int option, uptr arg2) {
895857
# endif
896858
# endif
897859

898-
#if !SANITIZER_EMSCRIPTEN
899860
uptr internal_sigaltstack(const void *ss, void *oss) {
900861
return internal_syscall(SYSCALL(sigaltstack), (uptr)ss, (uptr)oss);
901862
}
902-
#endif
903863

904864
int internal_fork() {
905-
#if SANITIZER_EMSCRIPTEN
906-
Report("fork not supported on emscripten\n");
907-
return -1;
908-
#else
909865
# if SANITIZER_LINUX
910866
# if SANITIZER_S390
911867
return internal_syscall(SYSCALL(clone), 0, SIGCHLD);
@@ -915,7 +871,6 @@ int internal_fork() {
915871
# else
916872
return internal_syscall(SYSCALL(fork));
917873
# endif
918-
#endif
919874
}
920875

921876
#if SANITIZER_FREEBSD
@@ -1006,8 +961,6 @@ uptr internal_sigprocmask(int how, __sanitizer_sigset_t *set,
1006961
__sanitizer_sigset_t *oldset) {
1007962
#if SANITIZER_FREEBSD
1008963
return internal_syscall(SYSCALL(sigprocmask), how, set, oldset);
1009-
#elif SANITIZER_EMSCRIPTEN
1010-
return 0;
1011964
#else
1012965
__sanitizer_kernel_sigset_t *k_set = (__sanitizer_kernel_sigset_t *)set;
1013966
__sanitizer_kernel_sigset_t *k_oldset = (__sanitizer_kernel_sigset_t *)oldset;
@@ -1059,7 +1012,7 @@ bool internal_sigismember(__sanitizer_sigset_t *set, int signum) {
10591012
return sigismember(rset, signum);
10601013
}
10611014
#endif
1062-
#endif // !SANITIZER_SOLARIS
1015+
#endif // !SANITIZER_SOLARIS && !SANITIZER_NETBS && !SANITIZER_EMSCRIPTEN
10631016

10641017
#if !SANITIZER_NETBSD && !SANITIZER_EMSCRIPTEN
10651018
// ThreadLister implementation.

system/lib/compiler-rt/lib/sanitizer_common/sanitizer_syscall_generic.inc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13-
// NetBSD uses libc calls directly
14-
#if !SANITIZER_NETBSD
13+
// NetBSD and Emscripten uses libc calls directly
14+
#if !SANITIZER_NETBSD || !SANITIZER_EMSCRIPTEN
1515

16-
#if SANITIZER_FREEBSD || SANITIZER_APPLE || SANITIZER_SOLARIS || SANITIZER_EMSCRIPTEN
16+
#if SANITIZER_FREEBSD || SANITIZER_APPLE || SANITIZER_SOLARIS
1717
# define SYSCALL(name) SYS_ ## name
1818
#else
1919
# define SYSCALL(name) __NR_ ## name

system/lib/libc/emscripten_internal.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,9 @@ int _mmap_js(size_t length,
7979
int* allocated,
8080
void** addr);
8181
int _munmap_js(
82-
intptr_t addr, size_t length, int prot, int flags, int fd, size_t offset);
82+
void *addr, size_t length, int prot, int flags, int fd, size_t offset);
8383
int _msync_js(
84-
intptr_t addr, size_t length, int prot, int flags, int fd, size_t offset);
84+
void *addr, size_t length, int prot, int flags, int fd, size_t offset);
8585

8686
struct dso;
8787

system/lib/libc/emscripten_mmap.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ struct map {
3535
static volatile int lock[1];
3636
static struct map* mappings;
3737

38-
static struct map* find_mapping(intptr_t addr, struct map** prev) {
38+
static struct map* find_mapping(void *addr, struct map** prev) {
3939
struct map* map = mappings;
4040
while (map) {
41-
if (map->addr == (void*)addr) {
41+
if (map->addr == addr) {
4242
return map;
4343
}
4444
if (prev) {
@@ -49,7 +49,7 @@ static struct map* find_mapping(intptr_t addr, struct map** prev) {
4949
return map;
5050
}
5151

52-
int __syscall_munmap(intptr_t addr, size_t length) {
52+
int __syscall_munmap(void *addr, size_t length) {
5353
LOCK(lock);
5454
struct map* prev = NULL;
5555
struct map* map = find_mapping(addr, &prev);
@@ -92,7 +92,7 @@ int __syscall_munmap(intptr_t addr, size_t length) {
9292
return 0;
9393
}
9494

95-
int __syscall_msync(intptr_t addr, size_t len, int flags) {
95+
int __syscall_msync(void *addr, size_t len, int flags) {
9696
LOCK(lock);
9797
struct map* map = find_mapping(addr, NULL);
9898
UNLOCK(lock);
@@ -105,7 +105,7 @@ int __syscall_msync(intptr_t addr, size_t len, int flags) {
105105
return _msync_js(addr, len, map->prot, map->flags, map->fd, map->offset);
106106
}
107107

108-
intptr_t __syscall_mmap2(intptr_t addr, size_t len, int prot, int flags, int fd, size_t off) {
108+
intptr_t __syscall_mmap2(void *addr, size_t len, int prot, int flags, int fd, off_t off) {
109109
if (addr != 0) {
110110
// We don't currently support location hints for the address of the mapping
111111
return -EINVAL;

0 commit comments

Comments
 (0)