xref: /llvm-project/libc/src/__support/OSUtil/linux/syscall.h (revision 8413599b59b209312f9662dcad3e7bb4e9d4a4d4)
13cc2161cSSiva Chandra Reddy //===----------------------- Linux syscalls ---------------------*- C++ -*-===//
23cc2161cSSiva Chandra Reddy //
33cc2161cSSiva Chandra Reddy // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
43cc2161cSSiva Chandra Reddy // See https://llvm.org/LICENSE.txt for license information.
53cc2161cSSiva Chandra Reddy // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
63cc2161cSSiva Chandra Reddy //
73cc2161cSSiva Chandra Reddy //===----------------------------------------------------------------------===//
83cc2161cSSiva Chandra Reddy 
9270547f3SGuillaume Chatelet #ifndef LLVM_LIBC_SRC___SUPPORT_OSUTIL_LINUX_SYSCALL_H
10270547f3SGuillaume Chatelet #define LLVM_LIBC_SRC___SUPPORT_OSUTIL_LINUX_SYSCALL_H
113cc2161cSSiva Chandra Reddy 
12f0a3954eSMichael Jones #include "src/__support/CPP/bit.h"
13494734b0SSiva Chandra Reddy #include "src/__support/common.h"
145ff3ff33SPetr Hosek #include "src/__support/macros/config.h"
15f100ec25SGuillaume Chatelet #include "src/__support/macros/properties/architectures.h"
163cc2161cSSiva Chandra Reddy 
17*8413599bSNick Desaulniers #ifdef LIBC_TARGET_ARCH_IS_X86_32
18*8413599bSNick Desaulniers #include "i386/syscall.h"
19*8413599bSNick Desaulniers #elif defined(LIBC_TARGET_ARCH_IS_X86_64)
203cc2161cSSiva Chandra Reddy #include "x86_64/syscall.h"
21a2569a76SGuillaume Chatelet #elif defined(LIBC_TARGET_ARCH_IS_AARCH64)
22371779faSSiva Chandra #include "aarch64/syscall.h"
23a2569a76SGuillaume Chatelet #elif defined(LIBC_TARGET_ARCH_IS_ARM)
244c810ecbSSiva Chandra Reddy #include "arm/syscall.h"
25e3087c4bSMikhail R. Gadelha #elif defined(LIBC_TARGET_ARCH_IS_ANY_RISCV)
26e3087c4bSMikhail R. Gadelha #include "riscv/syscall.h"
273cc2161cSSiva Chandra Reddy #endif
283cc2161cSSiva Chandra Reddy 
295ff3ff33SPetr Hosek namespace LIBC_NAMESPACE_DECL {
30371779faSSiva Chandra 
31f0a3954eSMichael Jones template <typename R, typename... Ts>
32f0a3954eSMichael Jones LIBC_INLINE R syscall_impl(long __number, Ts... ts) {
33371779faSSiva Chandra   static_assert(sizeof...(Ts) <= 6, "Too many arguments for syscall");
34f0a3954eSMichael Jones   return cpp::bit_or_static_cast<R>(syscall_impl(__number, (long)ts...));
35371779faSSiva Chandra }
36371779faSSiva Chandra 
375ff3ff33SPetr Hosek } // namespace LIBC_NAMESPACE_DECL
38371779faSSiva Chandra 
39270547f3SGuillaume Chatelet #endif // LLVM_LIBC_SRC___SUPPORT_OSUTIL_LINUX_SYSCALL_H
40