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