llvm-project
39 строк · 1.1 Кб
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) {
32if (retval == (uptr)-1) {
33if (rverrno)
34*rverrno = errno;
35return true;
36} else {
37return false;
38}
39}
40