1//===-- sanitizer_syscall_generic.inc ---------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// Generic implementations of internal_syscall* and internal_iserror.
10//
11//===----------------------------------------------------------------------===//
12
13// NetBSD uses libc calls directly
14#if !SANITIZER_NETBSD
15
16#if SANITIZER_FREEBSD || SANITIZER_APPLE || SANITIZER_SOLARIS
17# define SYSCALL(name) SYS_ ## name
18#else
19# define SYSCALL(name) __NR_ ## name
20#endif
21
22#if (defined(__x86_64__) && (SANITIZER_FREEBSD || SANITIZER_APPLE)) || \
23    (defined(__aarch64__) && SANITIZER_FREEBSD)
24# define internal_syscall __syscall
25# else
26# define internal_syscall syscall
27#endif
28
29#endif
30
31bool internal_iserror(uptr retval, int *rverrno) {
32  if (retval == (uptr)-1) {
33    if (rverrno)
34      *rverrno = errno;
35    return true;
36  } else {
37    return false;
38  }
39}
40