@@ -115,15 +115,8 @@ extern struct ps_strings *__ps_strings;
115115# endif
116116
117117# if SANITIZER_EMSCRIPTEN
118- # define weak __attribute__ (__weak__)
119- # define hidden __attribute__ ((__visibility__(" hidden" )))
120- # include < syscall.h>
121- # undef weak
122- # undef hidden
123- # include < emscripten/threading.h>
124- # include < math.h>
125- # include < wasi/api.h>
126- # include < wasi/wasi-helpers.h>
118+ # include < math.h> // For INFINITY
119+ # include < emscripten/threading.h> // For emscripten_futex_wait
127120# endif
128121
129122extern char **environ;
@@ -254,8 +247,8 @@ ScopedBlockSignals::~ScopedBlockSignals() { SetSigProcMask(&saved_, nullptr); }
254247# endif
255248
256249// --------------- sanitizer_libc.h
257- # if !SANITIZER_SOLARIS && !SANITIZER_NETBSD
258- # if !SANITIZER_S390 && !SANITIZER_EMSCRIPTEN
250+ # if !SANITIZER_SOLARIS && !SANITIZER_NETBSD && !SANITIZER_EMSCRIPTEN
251+ # if !SANITIZER_S390
259252uptr internal_mmap (void *addr, uptr length, int prot, int flags, int fd,
260253 u64 offset) {
261254# if SANITIZER_FREEBSD
@@ -270,25 +263,23 @@ uptr internal_mmap(void *addr, uptr length, int prot, int flags, int fd,
270263 (OFF_T)(offset / 4096 ));
271264# endif
272265}
273- # endif // !SANITIZER_S390 && !SANITIZER_EMSCRIPTEN
266+ # endif // !SANITIZER_S390
274267
275- # if !SANITIZER_EMSCRIPTEN
276268uptr internal_munmap (void *addr, uptr length) {
277269 return internal_syscall (SYSCALL (munmap), (uptr)addr, length);
278270}
279271
280- # if SANITIZER_LINUX
272+ # if SANITIZER_LINUX
281273uptr internal_mremap (void *old_address, uptr old_size, uptr new_size, int flags,
282274 void *new_address) {
283275 return internal_syscall (SYSCALL (mremap), (uptr)old_address, old_size,
284276 new_size, flags, (uptr)new_address);
285277}
286- # endif
278+ # endif
287279
288280int internal_mprotect (void *addr, uptr length, int prot) {
289281 return internal_syscall (SYSCALL (mprotect), (uptr)addr, length, prot);
290282}
291- # endif
292283
293284int internal_madvise (uptr addr, uptr length, int advice) {
294285 return internal_syscall (SYSCALL (madvise), addr, length, advice);
@@ -299,25 +290,18 @@ uptr internal_close_range(fd_t lowfd, fd_t highfd, int flags) {
299290 return internal_syscall (SYSCALL (close_range), lowfd, highfd, flags);
300291}
301292# endif
302-
303- uptr internal_close (fd_t fd) {
304- # if SANITIZER_EMSCRIPTEN
305- return __wasi_fd_close (fd);
306- # else
307- return internal_syscall (SYSCALL (close), fd);
308- # endif
309- }
293+ uptr internal_close (fd_t fd) { return internal_syscall (SYSCALL (close), fd); }
310294
311295uptr internal_open (const char *filename, int flags) {
312- # if SANITIZER_LINUX || SANITIZER_EMSCRIPTEN
296+ # if SANITIZER_LINUX
313297 return internal_syscall (SYSCALL (openat), AT_FDCWD, (uptr)filename, flags);
314298# else
315299 return internal_syscall (SYSCALL (open), (uptr)filename, flags);
316300# endif
317301}
318302
319303uptr internal_open (const char *filename, int flags, u32 mode) {
320- # if SANITIZER_LINUX || SANITIZER_EMSCRIPTEN
304+ # if SANITIZER_LINUX
321305 return internal_syscall (SYSCALL (openat), AT_FDCWD, (uptr)filename, flags,
322306 mode);
323307# else
@@ -326,35 +310,17 @@ uptr internal_open(const char *filename, int flags, u32 mode) {
326310}
327311
328312uptr internal_read (fd_t fd, void *buf, uptr count) {
329- # if SANITIZER_EMSCRIPTEN
330- __wasi_iovec_t iov = {(uint8_t *)buf, count};
331- size_t num;
332- if (__wasi_syscall_ret (__wasi_fd_read (fd, &iov, 1 , &num))) {
333- return -1 ;
334- }
335- return num;
336- # else
337313 sptr res;
338314 HANDLE_EINTR (res,
339315 (sptr)internal_syscall (SYSCALL (read), fd, (uptr)buf, count));
340316 return res;
341- # endif
342317}
343318
344319uptr internal_write (fd_t fd, const void *buf, uptr count) {
345- # if SANITIZER_EMSCRIPTEN
346- __wasi_ciovec_t iov = {(const uint8_t *)buf, count};
347- size_t num;
348- if (__wasi_syscall_ret (__wasi_fd_write (fd, &iov, 1 , &num))) {
349- return -1 ;
350- }
351- return num;
352- # else
353320 sptr res;
354321 HANDLE_EINTR (res,
355322 (sptr)internal_syscall (SYSCALL (write), fd, (uptr)buf, count));
356323 return res;
357- # endif
358324}
359325
360326uptr internal_ftruncate (fd_t fd, uptr size) {
@@ -577,15 +543,15 @@ uptr internal_filesize(fd_t fd) {
577543uptr internal_dup (int oldfd) { return internal_syscall (SYSCALL (dup), oldfd); }
578544
579545uptr internal_dup2 (int oldfd, int newfd) {
580- # if SANITIZER_LINUX || SANITIZER_EMSCRIPTEN
546+ # if SANITIZER_LINUX
581547 return internal_syscall (SYSCALL (dup3), oldfd, newfd, 0 );
582548# else
583549 return internal_syscall (SYSCALL (dup2), oldfd, newfd);
584550# endif
585551}
586552
587553uptr internal_readlink (const char *path, char *buf, uptr bufsize) {
588- # if SANITIZER_LINUX || SANITIZER_EMSCRIPTEN
554+ # if SANITIZER_LINUX
589555 return internal_syscall (SYSCALL (readlinkat), AT_FDCWD, (uptr)path, (uptr)buf,
590556 bufsize);
591557# else
@@ -594,7 +560,7 @@ uptr internal_readlink(const char *path, char *buf, uptr bufsize) {
594560}
595561
596562uptr internal_unlink (const char *path) {
597- # if SANITIZER_LINUX || SANITIZER_EMSCRIPTEN
563+ # if SANITIZER_LINUX
598564 return internal_syscall (SYSCALL (unlinkat), AT_FDCWD, (uptr)path, 0 );
599565# else
600566 return internal_syscall (SYSCALL (unlink), (uptr)path);
@@ -605,54 +571,40 @@ uptr internal_rename(const char *oldpath, const char *newpath) {
605571# if (defined(__riscv) || defined(__loongarch__)) && defined(__linux__)
606572 return internal_syscall (SYSCALL (renameat2), AT_FDCWD, (uptr)oldpath, AT_FDCWD,
607573 (uptr)newpath, 0 );
608- # elif SANITIZER_LINUX || SANITIZER_EMSCRIPTEN
574+ # elif SANITIZER_LINUX
609575 return internal_syscall (SYSCALL (renameat), AT_FDCWD, (uptr)oldpath, AT_FDCWD,
610576 (uptr)newpath);
611577# else
612578 return internal_syscall (SYSCALL (rename), (uptr)oldpath, (uptr)newpath);
613579# endif
614580}
615581
616- uptr internal_sched_yield () {
617- # if SANITIZER_EMSCRIPTEN
618- return 0 ;
619- # else
620- return internal_syscall (SYSCALL (sched_yield));
621- # endif
622- }
582+ uptr internal_sched_yield () { return internal_syscall (SYSCALL (sched_yield)); }
623583
624584void internal_usleep (u64 useconds) {
625- # if SANITIZER_EMSCRIPTEN
626- usleep (useconds);
627- # else
628585 struct timespec ts;
629586 ts.tv_sec = useconds / 1000000 ;
630587 ts.tv_nsec = (useconds % 1000000 ) * 1000 ;
631588 internal_syscall (SYSCALL (nanosleep), &ts, &ts);
632- # endif
633589}
634590
635- # if !SANITIZER_EMSCRIPTEN
636591uptr internal_execve (const char *filename, char *const argv[],
637592 char *const envp[]) {
638593 return internal_syscall (SYSCALL (execve), (uptr)filename, (uptr)argv,
639594 (uptr)envp);
640595}
641- # endif // !SANITIZER_EMSCRIPTEN
642- # endif // !SANITIZER_SOLARIS && !SANITIZER_NETBSD
596+ # endif // !SANITIZER_SOLARIS && !SANITIZER_NETBSD && !SANITIZER_EMSCRIPTEN
643597
644- # if !SANITIZER_NETBSD
598+ # if !SANITIZER_NETBSD && !SANITIZER_EMSCRIPTEN
645599void internal__exit (int exitcode) {
646- # if SANITIZER_EMSCRIPTEN
647- __wasi_proc_exit (exitcode);
648- # elif SANITIZER_FREEBSD || SANITIZER_SOLARIS
600+ # if SANITIZER_FREEBSD || SANITIZER_SOLARIS
649601 internal_syscall (SYSCALL (exit), exitcode);
650602# else
651603 internal_syscall (SYSCALL (exit_group), exitcode);
652604# endif
653605 Die (); // Unreachable.
654606}
655- # endif // !SANITIZER_NETBSD
607+ # endif // !SANITIZER_NETBSD && !SANITIZER_EMSCRIPTEN
656608
657609// ----------------- sanitizer_common.h
658610bool FileExists (const char *filename) {
@@ -672,16 +624,14 @@ bool DirExists(const char *path) {
672624 return S_ISDIR (st.st_mode );
673625}
674626
675- # if !SANITIZER_NETBSD
627+ # if !SANITIZER_NETBSD && !SANITIZER_EMSCRIPTEN
676628tid_t GetTid () {
677629# if SANITIZER_FREEBSD
678630 long Tid;
679631 thr_self (&Tid);
680632 return Tid;
681633# elif SANITIZER_SOLARIS
682634 return thr_self ();
683- # elif SANITIZER_EMSCRIPTEN
684- return (tid_t )pthread_self ();
685635# else
686636 return internal_syscall (SYSCALL (gettid));
687637# endif
@@ -722,16 +672,6 @@ u64 NanoTime() {
722672}
723673# endif
724674
725- # if SANITIZER_EMSCRIPTEN
726- extern " C" {
727- int __clock_gettime (__sanitizer_clockid_t clk_id, void *tp);
728- }
729-
730- uptr internal_clock_gettime (__sanitizer_clockid_t clk_id, void *tp) {
731- return __clock_gettime (clk_id, tp);
732- }
733- # endif
734-
735675// Like getenv, but reads env directly from /proc (on Linux) or parses the
736676// 'environ' array (on some others) and does not use libc. This function
737677// should be called first inside __asan_init.
@@ -916,14 +856,12 @@ struct linux_dirent {
916856};
917857# endif
918858
919- # if !SANITIZER_SOLARIS && !SANITIZER_NETBSD
920- # if !SANITIZER_EMSCRIPTEN
859+ # if !SANITIZER_SOLARIS && !SANITIZER_NETBSD && !SANITIZER_EMSCRIPTEN
921860// Syscall wrappers.
922861uptr internal_ptrace (int request, int pid, void *addr, void *data) {
923862 return internal_syscall (SYSCALL (ptrace), request, pid, (uptr)addr,
924863 (uptr)data);
925864}
926- # endif
927865
928866uptr internal_waitpid (int pid, int *status, int options) {
929867 return internal_syscall (SYSCALL (wait4), pid, (uptr)status, options,
@@ -953,14 +891,7 @@ uptr internal_getdents(fd_t fd, struct linux_dirent *dirp, unsigned int count) {
953891}
954892
955893uptr internal_lseek (fd_t fd, OFF_T offset, int whence) {
956- # if SANITIZER_EMSCRIPTEN
957- __wasi_filesize_t result;
958- return __wasi_syscall_ret (__wasi_fd_seek (fd, offset, whence, &result))
959- ? -1
960- : result;
961- # else
962894 return internal_syscall (SYSCALL (lseek), fd, offset, whence);
963- # endif
964895}
965896
966897# if SANITIZER_LINUX
@@ -976,32 +907,25 @@ uptr internal_arch_prctl(int option, uptr arg2) {
976907# endif
977908# endif
978909
979- # if !SANITIZER_EMSCRIPTEN
980910uptr internal_sigaltstack (const void *ss, void *oss) {
981911 return internal_syscall (SYSCALL (sigaltstack), (uptr)ss, (uptr)oss);
982912}
983- # endif
984913
985914extern " C" pid_t __fork (void );
986915
987916int internal_fork () {
988- # if SANITIZER_EMSCRIPTEN
989- Report (" fork not supported on emscripten\n " );
990- return -1 ;
991- # else
992- # if SANITIZER_LINUX
993- # if SANITIZER_S390
917+ # if SANITIZER_LINUX
918+ # if SANITIZER_S390
994919 return internal_syscall (SYSCALL (clone), 0 , SIGCHLD);
995- # elif SANITIZER_SPARC
920+ # elif SANITIZER_SPARC
996921 // The clone syscall interface on SPARC differs massively from the rest,
997922 // so fall back to __fork.
998923 return __fork ();
999- # else
1000- return internal_syscall (SYSCALL (clone), SIGCHLD, 0 );
1001- # endif
1002924# else
1003- return internal_syscall (SYSCALL (fork) );
925+ return internal_syscall (SYSCALL (clone), SIGCHLD, 0 );
1004926# endif
927+ # else
928+ return internal_syscall (SYSCALL (fork));
1005929# endif
1006930}
1007931
@@ -1093,8 +1017,6 @@ uptr internal_sigprocmask(int how, __sanitizer_sigset_t *set,
10931017 __sanitizer_sigset_t *oldset) {
10941018# if SANITIZER_FREEBSD
10951019 return internal_syscall (SYSCALL (sigprocmask), how, set, oldset);
1096- # elif SANITIZER_EMSCRIPTEN
1097- return 0 ;
10981020# else
10991021 __sanitizer_kernel_sigset_t *k_set = (__sanitizer_kernel_sigset_t *)set;
11001022 __sanitizer_kernel_sigset_t *k_oldset = (__sanitizer_kernel_sigset_t *)oldset;
@@ -1146,7 +1068,7 @@ bool internal_sigismember(__sanitizer_sigset_t *set, int signum) {
11461068 return sigismember (rset, signum);
11471069}
11481070# endif
1149- # endif // !SANITIZER_SOLARIS
1071+ # endif // !SANITIZER_SOLARIS && !SANITIZER_NETBSD && !SANITIZER_EMSCRIPTEN
11501072
11511073# if !SANITIZER_NETBSD && !SANITIZER_EMSCRIPTEN
11521074// ThreadLister implementation.
0 commit comments