}
def UniStdAPI : PublicAPI<"unistd.h"> {
- let Types = ["off_t", "size_t", "ssize_t"];
+ let Types = ["off_t", "pid_t", "size_t", "ssize_t", "uid_t"];
}
def SysResourceAPI : PublicAPI<"sys/resource.h"> {
libc.src.unistd.fchdir
libc.src.unistd.fsync
libc.src.unistd.ftruncate
+ libc.src.unistd.geteuid
+ libc.src.unistd.getpid
+ libc.src.unistd.getppid
+ libc.src.unistd.getuid
libc.src.unistd.link
libc.src.unistd.linkat
libc.src.unistd.lseek
.llvm_libc_common_h
.llvm-libc-macros.file_seek_macros
.llvm-libc-macros.unistd_macros
+ .llvm-libc-types.pid_t
.llvm-libc-types.size_t
.llvm-libc-types.ssize_t
+ .llvm-libc-types.uid_t
)
add_gen_header(
add_header(nlink_t HDR nlink_t.h)
add_header(off_t HDR off_t.h)
add_header(once_flag HDR once_flag.h DEPENDS .__futex_word)
+add_header(pid_t HDR pid_t.h)
add_header(pthread_attr_t HDR pthread_attr_t.h DEPENDS .size_t)
add_header(pthread_key_t HDR pthread_key_t.h)
add_header(pthread_mutex_t HDR pthread_mutex_t.h DEPENDS .__futex_word .__mutex_type)
--- /dev/null
+//===-- Definition of pid_t type ------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef __LLVM_LIBC_TYPES_PID_t_H__
+#define __LLVM_LIBC_TYPES_PID_t_H__
+
+typedef __INT32_TYPE__ pid_t;
+
+#endif // __LLVM_LIBC_TYPES_PID_t_H__
def BlkCntT : NamedType<"blkcnt_t">;
def NLinkT : NamedType<"nlink_t">;
def TimeSpec : NamedType<"struct timespec">;
+def PidT : NamedType<"pid_t">;
def StatType : NamedType<"struct stat">;
def StatTypePtr : PtrType<StatType>;
OffTType,
SSizeTType,
SizeTType,
+ PidT,
+ UidT,
],
[], // Enumerations
[
[ArgSpec<ConstCharPtr>, ArgSpec<OffTType>]
>,
FunctionSpec<
+ "geteuid",
+ RetValSpec<UidT>,
+ [ArgSpec<VoidType>]
+ >,
+ FunctionSpec<
+ "getpid",
+ RetValSpec<PidT>,
+ [ArgSpec<VoidType>]
+ >,
+ FunctionSpec<
+ "getppid",
+ RetValSpec<PidT>,
+ [ArgSpec<VoidType>]
+ >,
+ FunctionSpec<
+ "getuid",
+ RetValSpec<UidT>,
+ [ArgSpec<VoidType>]
+ >,
+ FunctionSpec<
+ "link",
+ RetValSpec<IntType>,
+ [ArgSpec<ConstCharPtr>, ArgSpec<ConstCharPtr>]
+ >,
+ FunctionSpec<
+ "linkat",
+ RetValSpec<IntType>,
+ [ArgSpec<IntType>, ArgSpec<ConstCharPtr>, ArgSpec<IntType>, ArgSpec<ConstCharPtr>, ArgSpec<IntType>]
+ >,
+ FunctionSpec<
+ "lseek",
+ RetValSpec<OffTType>,
+ [ArgSpec<IntType>, ArgSpec<OffTType>, ArgSpec<IntType>]
+ >,
+ FunctionSpec<
+ "pread",
+ RetValSpec<SSizeTType>,
+ [ArgSpec<IntType>, ArgSpec<VoidPtr>, ArgSpec<SizeTType>, ArgSpec<OffTType>]
+ >,
+ FunctionSpec<
+ "pwrite",
+ RetValSpec<SSizeTType>,
+ [ArgSpec<IntType>, ArgSpec<ConstVoidPtr>, ArgSpec<SizeTType>, ArgSpec<OffTType>]
+ >,
+ FunctionSpec<
+ "read",
+ RetValSpec<SSizeTType>,
+ [ArgSpec<IntType>, ArgSpec<VoidPtr>, ArgSpec<SizeTType>]
+ >,
+ FunctionSpec<
+ "readlink",
+ RetValSpec<SSizeTType>,
+ [ArgSpec<ConstCharRestrictedPtr>, ArgSpec<CharRestrictedPtr>, ArgSpec<SizeTType>]
+ >,
+ FunctionSpec<
+ "readlinkat",
+ RetValSpec<SSizeTType>,
+ [ArgSpec<ConstCharRestrictedPtr>, ArgSpec<CharRestrictedPtr>, ArgSpec<SizeTType>]
+ >,
+ FunctionSpec<
+ "rmdir",
+ RetValSpec<IntType>,
+ [ArgSpec<ConstCharPtr>]
+ >,
+ FunctionSpec<
+ "getpid",
+ RetValSpec<IntType>,
+ [ArgSpec<VoidType>]
+ >,
+ FunctionSpec<
+ "getppid",
+ RetValSpec<IntType>,
+ [ArgSpec<VoidType>]
+ >,
+ FunctionSpec<
"link",
RetValSpec<IntType>,
[ArgSpec<ConstCharPtr>, ArgSpec<ConstCharPtr>]
)
add_entrypoint_object(
+ getpid
+ ALIAS
+ DEPENDS
+ .${LIBC_TARGET_OS}.getpid
+)
+
+add_entrypoint_object(
+ getppid
+ ALIAS
+ DEPENDS
+ .${LIBC_TARGET_OS}.getppid
+)
+
+add_entrypoint_object(
+ geteuid
+ ALIAS
+ DEPENDS
+ .${LIBC_TARGET_OS}.geteuid
+)
+
+add_entrypoint_object(
+ getuid
+ ALIAS
+ DEPENDS
+ .${LIBC_TARGET_OS}.getuid
+)
+
+add_entrypoint_object(
link
ALIAS
DEPENDS
--- /dev/null
+//===-- Implementation header for geteuid -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_UNISTD_GETEUID_H
+#define LLVM_LIBC_SRC_UNISTD_GETEUID_H
+
+#include <unistd.h>
+
+namespace __llvm_libc {
+
+uid_t geteuid();
+
+} // namespace __llvm_libc
+
+#endif // LLVM_LIBC_SRC_UNISTD_GETEUID_H
--- /dev/null
+//===-- Implementation header for getpid ------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_UNISTD_GETPID_H
+#define LLVM_LIBC_SRC_UNISTD_GETPID_H
+
+#include <unistd.h>
+
+namespace __llvm_libc {
+
+pid_t getpid();
+
+} // namespace __llvm_libc
+
+#endif // LLVM_LIBC_SRC_UNISTD_GETPID_H
--- /dev/null
+//===-- Implementation header for getppid -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_UNISTD_GETPPID_H
+#define LLVM_LIBC_SRC_UNISTD_GETPPID_H
+
+#include <unistd.h>
+
+namespace __llvm_libc {
+
+pid_t getppid();
+
+} // namespace __llvm_libc
+
+#endif // LLVM_LIBC_SRC_UNISTD_GETPPID_H
--- /dev/null
+//===-- Implementation header for getuid ------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_UNISTD_GETUID_H
+#define LLVM_LIBC_SRC_UNISTD_GETUID_H
+
+#include <unistd.h>
+
+namespace __llvm_libc {
+
+uid_t getuid();
+
+} // namespace __llvm_libc
+
+#endif // LLVM_LIBC_SRC_UNISTD_GETUID_H
)
add_entrypoint_object(
+ geteuid
+ SRCS
+ geteuid.cpp
+ HDRS
+ ../geteuid.h
+ DEPENDS
+ libc.include.unistd
+ libc.include.sys_syscall
+ libc.src.__support.OSUtil.osutil
+)
+
+add_entrypoint_object(
+ getpid
+ SRCS
+ getpid.cpp
+ HDRS
+ ../getpid.h
+ DEPENDS
+ libc.include.unistd
+ libc.include.sys_syscall
+ libc.src.__support.OSUtil.osutil
+)
+
+add_entrypoint_object(
+ getppid
+ SRCS
+ getppid.cpp
+ HDRS
+ ../getppid.h
+ DEPENDS
+ libc.include.unistd
+ libc.include.sys_syscall
+ libc.src.__support.OSUtil.osutil
+)
+
+add_entrypoint_object(
+ getuid
+ SRCS
+ getuid.cpp
+ HDRS
+ ../getuid.h
+ DEPENDS
+ libc.include.unistd
+ libc.include.sys_syscall
+ libc.src.__support.OSUtil.osutil
+)
+
+add_entrypoint_object(
link
SRCS
link.cpp
--- /dev/null
+//===-- Linux implementation of geteuid -----------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/unistd/geteuid.h"
+
+#include "src/__support/OSUtil/syscall.h" // For internal syscall function.
+#include "src/__support/common.h"
+
+#include <sys/syscall.h> // For syscall numbers.
+
+namespace __llvm_libc {
+
+LLVM_LIBC_FUNCTION(uid_t, geteuid, ()) {
+ return __llvm_libc::syscall(SYS_geteuid);
+}
+
+} // namespace __llvm_libc
--- /dev/null
+//===-- Linux implementation of getpid ------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/unistd/getpid.h"
+
+#include "src/__support/OSUtil/syscall.h" // For internal syscall function.
+#include "src/__support/common.h"
+
+#include <sys/syscall.h> // For syscall numbers.
+
+namespace __llvm_libc {
+
+LLVM_LIBC_FUNCTION(pid_t, getpid, ()) {
+ return __llvm_libc::syscall(SYS_getpid);
+}
+
+} // namespace __llvm_libc
--- /dev/null
+//===-- Linux implementation of getppid -----------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/unistd/getppid.h"
+
+#include "src/__support/OSUtil/syscall.h" // For internal syscall function.
+#include "src/__support/common.h"
+
+#include <sys/syscall.h> // For syscall numbers.
+
+namespace __llvm_libc {
+
+LLVM_LIBC_FUNCTION(pid_t, getppid, ()) {
+ return __llvm_libc::syscall(SYS_getppid);
+}
+
+} // namespace __llvm_libc
--- /dev/null
+//===-- Linux implementation of getuid ------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/unistd/getuid.h"
+
+#include "src/__support/OSUtil/syscall.h" // For internal syscall function.
+#include "src/__support/common.h"
+
+#include <sys/syscall.h> // For syscall numbers.
+
+namespace __llvm_libc {
+
+LLVM_LIBC_FUNCTION(uid_t, getuid, ()) {
+ return __llvm_libc::syscall(SYS_getuid);
+}
+
+} // namespace __llvm_libc
libc.src.unistd.close
libc.src.unistd.unlinkat
)
+
+add_libc_unittest(
+ getpid_test
+ SUITE
+ libc_unistd_unittests
+ SRCS
+ getpid_test.cpp
+ DEPENDS
+ libc.src.unistd.getpid
+)
+
+add_libc_unittest(
+ getppid_test
+ SUITE
+ libc_unistd_unittests
+ SRCS
+ getppid_test.cpp
+ DEPENDS
+ libc.src.unistd.getppid
+)
+
+add_libc_unittest(
+ getuid_test
+ SUITE
+ libc_unistd_unittests
+ SRCS
+ getuid_test.cpp
+ DEPENDS
+ libc.src.unistd.getuid
+)
+
+add_libc_unittest(
+ geteuid_test
+ SUITE
+ libc_unistd_unittests
+ SRCS
+ geteuid_test.cpp
+ DEPENDS
+ libc.src.unistd.geteuid
+)
--- /dev/null
+//===-- Unittests for geteuid ---------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/unistd/geteuid.h"
+#include "utils/UnitTest/Test.h"
+
+TEST(LlvmLibcGetEuidTest, SmokeTest) {
+ // geteuid always succeeds. So, we just call it as a smoke test.
+ __llvm_libc::geteuid();
+}
--- /dev/null
+//===-- Unittests for getpid ----------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/unistd/getpid.h"
+#include "utils/UnitTest/Test.h"
+
+TEST(LlvmLibcGetPidTest, SmokeTest) {
+ // getpid always succeeds. So, we just call it as a smoke test.
+ __llvm_libc::getpid();
+}
--- /dev/null
+//===-- Unittests for getppid ---------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/unistd/getppid.h"
+#include "utils/UnitTest/Test.h"
+
+TEST(LlvmLibcGetPpidTest, SmokeTest) {
+ // getppid always succeeds. So, we just call it as a smoke test.
+ __llvm_libc::getppid();
+}
--- /dev/null
+//===-- Unittests for getuid ----------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/unistd/getuid.h"
+#include "utils/UnitTest/Test.h"
+
+TEST(LlvmLibcGetUidTest, SmokeTest) {
+ // getuid always succeeds. So, we just call it as a smoke test.
+ __llvm_libc::getuid();
+}