forked from OSchip/llvm-project
[libc] Add implementations of POSIX getpid, getppid, getuid, geteuid functions.
Reviewed By: lntue Differential Revision: https://reviews.llvm.org/D134338
This commit is contained in:
parent
e310f8bddf
commit
4f1474daec
|
@ -269,7 +269,7 @@ def DirentAPI : PublicAPI<"dirent.h"> {
|
|||
}
|
||||
|
||||
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"> {
|
||||
|
|
|
@ -132,6 +132,10 @@ set(TARGET_LIBC_ENTRYPOINTS
|
|||
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
|
||||
|
|
|
@ -169,8 +169,10 @@ add_gen_header(
|
|||
.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(
|
||||
|
|
|
@ -32,6 +32,7 @@ add_header(mtx_t HDR mtx_t.h DEPENDS .__futex_word .__mutex_type)
|
|||
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)
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
//===-- 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__
|
|
@ -23,6 +23,7 @@ def BlkSizeT : NamedType<"blksize_t">;
|
|||
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>;
|
||||
|
@ -270,6 +271,8 @@ def POSIX : StandardSpec<"POSIX"> {
|
|||
OffTType,
|
||||
SSizeTType,
|
||||
SizeTType,
|
||||
PidT,
|
||||
UidT,
|
||||
],
|
||||
[], // Enumerations
|
||||
[
|
||||
|
@ -318,6 +321,81 @@ def POSIX : StandardSpec<"POSIX"> {
|
|||
RetValSpec<IntType>,
|
||||
[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>,
|
||||
|
|
|
@ -65,6 +65,34 @@ add_entrypoint_object(
|
|||
.${LIBC_TARGET_OS}.ftruncate
|
||||
)
|
||||
|
||||
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
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
//===-- 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
|
|
@ -0,0 +1,20 @@
|
|||
//===-- 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
|
|
@ -0,0 +1,20 @@
|
|||
//===-- 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
|
|
@ -0,0 +1,20 @@
|
|||
//===-- 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
|
|
@ -116,6 +116,54 @@ add_entrypoint_object(
|
|||
libc.src.errno.errno
|
||||
)
|
||||
|
||||
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
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
//===-- 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
|
|
@ -0,0 +1,22 @@
|
|||
//===-- 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
|
|
@ -0,0 +1,22 @@
|
|||
//===-- 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
|
|
@ -0,0 +1,22 @@
|
|||
//===-- 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
|
|
@ -321,3 +321,43 @@ add_libc_unittest(
|
|||
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
|
||||
)
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
//===-- 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();
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
//===-- 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();
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
//===-- 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();
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
//===-- 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();
|
||||
}
|
Loading…
Reference in New Issue