xref: /freebsd/contrib/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_syscall_generic.inc (revision 81ad626541db97eb356e2c1d4a20eb2a26a766ab)
10b57cec5SDimitry Andric//===-- sanitizer_syscall_generic.inc ---------------------------*- C++ -*-===//
20b57cec5SDimitry Andric//
30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric//
70b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric//
90b57cec5SDimitry Andric// Generic implementations of internal_syscall* and internal_iserror.
100b57cec5SDimitry Andric//
110b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
120b57cec5SDimitry Andric
130b57cec5SDimitry Andric// NetBSD uses libc calls directly
140b57cec5SDimitry Andric#if !SANITIZER_NETBSD
150b57cec5SDimitry Andric
16*81ad6265SDimitry Andric#if SANITIZER_FREEBSD || SANITIZER_APPLE || SANITIZER_SOLARIS
170b57cec5SDimitry Andric# define SYSCALL(name) SYS_ ## name
180b57cec5SDimitry Andric#else
190b57cec5SDimitry Andric# define SYSCALL(name) __NR_ ## name
200b57cec5SDimitry Andric#endif
210b57cec5SDimitry Andric
22*81ad6265SDimitry Andric#if (defined(__x86_64__) && (SANITIZER_FREEBSD || SANITIZER_APPLE)) || \
23*81ad6265SDimitry Andric    (defined(__aarch64__) && SANITIZER_FREEBSD)
240b57cec5SDimitry Andric# define internal_syscall __syscall
250b57cec5SDimitry Andric# else
260b57cec5SDimitry Andric# define internal_syscall syscall
270b57cec5SDimitry Andric#endif
280b57cec5SDimitry Andric
290b57cec5SDimitry Andric#endif
300b57cec5SDimitry Andric
310b57cec5SDimitry Andricbool internal_iserror(uptr retval, int *rverrno) {
320b57cec5SDimitry Andric  if (retval == (uptr)-1) {
330b57cec5SDimitry Andric    if (rverrno)
340b57cec5SDimitry Andric      *rverrno = errno;
350b57cec5SDimitry Andric    return true;
360b57cec5SDimitry Andric  } else {
370b57cec5SDimitry Andric    return false;
380b57cec5SDimitry Andric  }
390b57cec5SDimitry Andric}
40