110d565efSmrg//===-- sanitizer_syscall_generic.inc ---------------------------*- C++ -*-===//
210d565efSmrg//
310d565efSmrg// This file is distributed under the University of Illinois Open Source
410d565efSmrg// License. See LICENSE.TXT for details.
510d565efSmrg//
610d565efSmrg//===----------------------------------------------------------------------===//
710d565efSmrg//
8c7a68eb7Smrg// Generic implementations of internal_syscall* and internal_iserror.
910d565efSmrg//
1010d565efSmrg//===----------------------------------------------------------------------===//
1110d565efSmrg
12*0fc04c29Smrg// NetBSD uses libc calls directly
13*0fc04c29Smrg#if SANITIZER_NETBSD
1410d565efSmrg# define SYS_stat SYS___stat50
1510d565efSmrg# define SYS_lstat SYS___lstat50
1610d565efSmrg# define SYS_fstat SYS___fstat50
1710d565efSmrg# define SYS_gettimeofday SYS___gettimeofday50
1810d565efSmrg# define SYS_wait4 SYS___wait450
1910d565efSmrg# define SYS_getdents SYS___getdents30
2010d565efSmrg# define SYS_sigaltstack SYS___sigaltstack14
2110d565efSmrg# define SYS_sigprocmask SYS___sigprocmask14
2210d565efSmrg# define SYS_nanosleep SYS___nanosleep50
23*0fc04c29Smrg#else
24*0fc04c29Smrg
25*0fc04c29Smrg#if SANITIZER_FREEBSD || SANITIZER_MAC || SANITIZER_OPENBSD || SANITIZER_SOLARIS
2610d565efSmrg# define SYSCALL(name) SYS_ ## name
2710d565efSmrg#else
2810d565efSmrg# define SYSCALL(name) __NR_ ## name
2910d565efSmrg#endif
3010d565efSmrg
31*0fc04c29Smrg#if defined(__x86_64__) && (SANITIZER_FREEBSD || SANITIZER_MAC)
3210d565efSmrg# define internal_syscall __syscall
3310d565efSmrg# else
3410d565efSmrg# define internal_syscall syscall
3510d565efSmrg#endif
3610d565efSmrg
37*0fc04c29Smrg#endif
38*0fc04c29Smrg
3910d565efSmrgbool internal_iserror(uptr retval, int *rverrno) {
4010d565efSmrg  if (retval == (uptr)-1) {
4110d565efSmrg    if (rverrno)
4210d565efSmrg      *rverrno = errno;
4310d565efSmrg    return true;
4410d565efSmrg  } else {
4510d565efSmrg    return false;
4610d565efSmrg  }
4710d565efSmrg}
48