Reland "[libc][NFC] adjust time related implementations"" (#91687)
Reverts llvm/llvm-project#91657 and Relands #91485
This commit is contained in:
parent
7237bef5da
commit
d8e73752a5
@ -68,4 +68,13 @@ add_proxy_header_library(
|
|||||||
libc.include.llvm-libc-macros.sys_epoll_macros
|
libc.include.llvm-libc-macros.sys_epoll_macros
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_proxy_header_library(
|
||||||
|
time_macros
|
||||||
|
HDRS
|
||||||
|
time_macros.h
|
||||||
|
FULL_BUILD_DEPENDS
|
||||||
|
libc.include.time
|
||||||
|
libc.include.llvm-libc-macros.time_macros
|
||||||
|
)
|
||||||
|
|
||||||
add_subdirectory(types)
|
add_subdirectory(types)
|
||||||
|
22
libc/hdr/time_macros.h
Normal file
22
libc/hdr/time_macros.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
//===-- Definition of macros from time.h ----------------------------------===//
|
||||||
|
//
|
||||||
|
// 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_HDR_TIME_MACROS_H
|
||||||
|
#define LLVM_LIBC_HDR_TIME_MACROS_H
|
||||||
|
|
||||||
|
#ifdef LIBC_FULL_BUILD
|
||||||
|
|
||||||
|
#include "include/llvm-libc-macros/time-macros.h"
|
||||||
|
|
||||||
|
#else // Overlay mode
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#endif // LLVM_LIBC_FULL_BUILD
|
||||||
|
|
||||||
|
#endif // LLVM_LIBC_HDR_TIME_MACROS_H
|
@ -63,3 +63,48 @@ add_proxy_header_library(
|
|||||||
libc.include.llvm-libc-types.fexcept_t
|
libc.include.llvm-libc-types.fexcept_t
|
||||||
libc.include.fenv
|
libc.include.fenv
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_proxy_header_library(
|
||||||
|
time_t
|
||||||
|
HDRS
|
||||||
|
time_t.h
|
||||||
|
FULL_BUILD_DEPENDS
|
||||||
|
libc.include.llvm-libc-types.time_t
|
||||||
|
libc.include.time
|
||||||
|
)
|
||||||
|
|
||||||
|
add_proxy_header_library(
|
||||||
|
clockid_t
|
||||||
|
HDRS
|
||||||
|
clockid_t.h
|
||||||
|
FULL_BUILD_DEPENDS
|
||||||
|
libc.include.llvm-libc-types.clockid_t
|
||||||
|
libc.include.sys_types
|
||||||
|
)
|
||||||
|
|
||||||
|
add_proxy_header_library(
|
||||||
|
clock_t
|
||||||
|
HDRS
|
||||||
|
clock_t.h
|
||||||
|
FULL_BUILD_DEPENDS
|
||||||
|
libc.include.llvm-libc-types.clock_t
|
||||||
|
libc.include.time
|
||||||
|
)
|
||||||
|
|
||||||
|
add_proxy_header_library(
|
||||||
|
suseconds_t
|
||||||
|
HDRS
|
||||||
|
suseconds_t.h
|
||||||
|
FULL_BUILD_DEPENDS
|
||||||
|
libc.include.llvm-libc-types.suseconds_t
|
||||||
|
libc.include.sys_time
|
||||||
|
)
|
||||||
|
|
||||||
|
add_proxy_header_library(
|
||||||
|
struct_timeval
|
||||||
|
HDRS
|
||||||
|
struct_timeval.h
|
||||||
|
FULL_BUILD_DEPENDS
|
||||||
|
libc.include.llvm-libc-types.struct_timeval
|
||||||
|
libc.include.sys_time
|
||||||
|
)
|
||||||
|
22
libc/hdr/types/clock_t.h
Normal file
22
libc/hdr/types/clock_t.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
//===-- Proxy for clock_t -------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// 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_HDR_TYPES_CLOCK_T_H
|
||||||
|
#define LLVM_LIBC_HDR_TYPES_CLOCK_T_H
|
||||||
|
|
||||||
|
#ifdef LIBC_FULL_BUILD
|
||||||
|
|
||||||
|
#include "include/llvm-libc-types/clock_t.h"
|
||||||
|
|
||||||
|
#else // Overlay mode
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#endif // LLVM_LIBC_FULL_BUILD
|
||||||
|
|
||||||
|
#endif // LLVM_LIBC_HDR_TYPES_CLOCK_T_H
|
22
libc/hdr/types/clockid_t.h
Normal file
22
libc/hdr/types/clockid_t.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
//===-- Proxy for clockid_t -----------------------------------------------===//
|
||||||
|
//
|
||||||
|
// 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_HDR_TYPES_CLOCKID_T_H
|
||||||
|
#define LLVM_LIBC_HDR_TYPES_CLOCKID_T_H
|
||||||
|
|
||||||
|
#ifdef LIBC_FULL_BUILD
|
||||||
|
|
||||||
|
#include "include/llvm-libc-types/clockid_t.h"
|
||||||
|
|
||||||
|
#else // Overlay mode
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#endif // LLVM_LIBC_FULL_BUILD
|
||||||
|
|
||||||
|
#endif // LLVM_LIBC_HDR_TYPES_CLOCKID_T_H
|
21
libc/hdr/types/struct_timeval.h
Normal file
21
libc/hdr/types/struct_timeval.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
//===-- Proxy for struct timeval ----------------------------------------===//
|
||||||
|
//
|
||||||
|
// 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_HDR_TYPES_STRUCT_TIMEVAL_H
|
||||||
|
#define LLVM_LIBC_HDR_TYPES_STRUCT_TIMEVAL_H
|
||||||
|
|
||||||
|
#ifdef LIBC_FULL_BUILD
|
||||||
|
|
||||||
|
#include "include/llvm-libc-types/struct_timeval.h"
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
#endif // LIBC_FULL_BUILD
|
||||||
|
|
||||||
|
#endif // LLVM_LIBC_HDR_TYPES_STRUCT_TIMEVAL_H
|
22
libc/hdr/types/suseconds_t.h
Normal file
22
libc/hdr/types/suseconds_t.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
//===-- Proxy for suseconds_t ---------------------------------------------===//
|
||||||
|
//
|
||||||
|
// 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_HDR_TIMES_SUSECONDS_T_H
|
||||||
|
#define LLVM_LIBC_HDR_TIMES_SUSECONDS_T_H
|
||||||
|
|
||||||
|
#ifdef LIBC_FULL_BUILD
|
||||||
|
|
||||||
|
#include "include/llvm-libc-types/suseconds_t.h"
|
||||||
|
|
||||||
|
#else // Overlay mode
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#endif // LLVM_LIBC_FULL_BUILD
|
||||||
|
|
||||||
|
#endif // #ifndef LLVM_LIBC_HDR_TIMES_SUSECONDS_T_H
|
22
libc/hdr/types/time_t.h
Normal file
22
libc/hdr/types/time_t.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
//===-- Proxy for time_t --------------------------------------------------===//
|
||||||
|
//
|
||||||
|
// 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_HDR_TYPES_TIME_T_H
|
||||||
|
#define LLVM_LIBC_HDR_TYPES_TIME_T_H
|
||||||
|
|
||||||
|
#ifdef LIBC_FULL_BUILD
|
||||||
|
|
||||||
|
#include "include/llvm-libc-types/time_t.h"
|
||||||
|
|
||||||
|
#else // Overlay mode
|
||||||
|
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#endif // LLVM_LIBC_FULL_BUILD
|
||||||
|
|
||||||
|
#endif // LLVM_LIBC_HDR_TYPES_TIME_T_H
|
@ -281,3 +281,5 @@ add_subdirectory(File)
|
|||||||
add_subdirectory(HashTable)
|
add_subdirectory(HashTable)
|
||||||
|
|
||||||
add_subdirectory(fixed_point)
|
add_subdirectory(fixed_point)
|
||||||
|
|
||||||
|
add_subdirectory(time)
|
||||||
|
12
libc/src/__support/time/CMakeLists.txt
Normal file
12
libc/src/__support/time/CMakeLists.txt
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${LIBC_TARGET_OS})
|
||||||
|
add_subdirectory(${LIBC_TARGET_OS})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_header_library(
|
||||||
|
units
|
||||||
|
HDRS
|
||||||
|
units.h
|
||||||
|
DEPENDS
|
||||||
|
libc.src.__support.common
|
||||||
|
libc.hdr.types.time_t
|
||||||
|
)
|
14
libc/src/__support/time/linux/CMakeLists.txt
Normal file
14
libc/src/__support/time/linux/CMakeLists.txt
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
add_object_library(
|
||||||
|
clock_gettime
|
||||||
|
HDRS
|
||||||
|
clock_gettime.h
|
||||||
|
SRCS
|
||||||
|
clock_gettime.cpp
|
||||||
|
DEPENDS
|
||||||
|
libc.include.sys_syscall
|
||||||
|
libc.hdr.types.struct_timespec
|
||||||
|
libc.hdr.types.clockid_t
|
||||||
|
libc.src.__support.common
|
||||||
|
libc.src.__support.error_or
|
||||||
|
libc.src.__support.OSUtil.osutil
|
||||||
|
)
|
@ -1,4 +1,4 @@
|
|||||||
//===- Linux implementation of the POSIX clock_gettime function -*- C++ -*-===//
|
//===--- clock_gettime linux implementation ---------------------*- C++ -*-===//
|
||||||
//
|
//
|
||||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||||
// See https://llvm.org/LICENSE.txt for license information.
|
// See https://llvm.org/LICENSE.txt for license information.
|
||||||
@ -6,23 +6,12 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#ifndef LLVM_LIBC_SRC_TIME_LINUX_CLOCKGETTIMEIMPL_H
|
#include "src/__support/time/linux/clock_gettime.h"
|
||||||
#define LLVM_LIBC_SRC_TIME_LINUX_CLOCKGETTIMEIMPL_H
|
#include "src/__support/OSUtil/syscall.h"
|
||||||
|
#include <sys/syscall.h>
|
||||||
#include "src/__support/OSUtil/syscall.h" // For internal syscall function.
|
|
||||||
#include "src/__support/common.h"
|
|
||||||
#include "src/__support/error_or.h"
|
|
||||||
#include "src/errno/libc_errno.h"
|
|
||||||
|
|
||||||
#include <stdint.h> // For int64_t.
|
|
||||||
#include <sys/syscall.h> // For syscall numbers.
|
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
namespace LIBC_NAMESPACE {
|
namespace LIBC_NAMESPACE {
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
ErrorOr<int> clock_gettime(clockid_t clockid, timespec *ts) {
|
||||||
LIBC_INLINE ErrorOr<int> clock_gettimeimpl(clockid_t clockid,
|
|
||||||
struct timespec *ts) {
|
|
||||||
#if SYS_clock_gettime
|
#if SYS_clock_gettime
|
||||||
int ret = LIBC_NAMESPACE::syscall_impl<int>(SYS_clock_gettime,
|
int ret = LIBC_NAMESPACE::syscall_impl<int>(SYS_clock_gettime,
|
||||||
static_cast<long>(clockid),
|
static_cast<long>(clockid),
|
||||||
@ -44,5 +33,3 @@ LIBC_INLINE ErrorOr<int> clock_gettimeimpl(clockid_t clockid,
|
|||||||
|
|
||||||
} // namespace internal
|
} // namespace internal
|
||||||
} // namespace LIBC_NAMESPACE
|
} // namespace LIBC_NAMESPACE
|
||||||
|
|
||||||
#endif // LLVM_LIBC_SRC_TIME_LINUX_CLOCKGETTIMEIMPL_H
|
|
23
libc/src/__support/time/linux/clock_gettime.h
Normal file
23
libc/src/__support/time/linux/clock_gettime.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
//===--- clock_gettime linux implementation ---------------------*- 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___SUPPORT_TIME_LINUX_CLOCK_GETTIME_H
|
||||||
|
#define LLVM_LIBC_SRC___SUPPORT_TIME_LINUX_CLOCK_GETTIME_H
|
||||||
|
#include "hdr/types/clockid_t.h"
|
||||||
|
#include "hdr/types/struct_timespec.h"
|
||||||
|
#include "src/__support/common.h"
|
||||||
|
|
||||||
|
#include "src/__support/error_or.h"
|
||||||
|
|
||||||
|
namespace LIBC_NAMESPACE {
|
||||||
|
namespace internal {
|
||||||
|
ErrorOr<int> clock_gettime(clockid_t clockid, timespec *ts);
|
||||||
|
}
|
||||||
|
} // namespace LIBC_NAMESPACE
|
||||||
|
|
||||||
|
#endif // LLVM_LIBC_SRC___SUPPORT_TIME_LINUX_CLOCK_GETTIME_H
|
38
libc/src/__support/time/units.h
Normal file
38
libc/src/__support/time/units.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
//===--- Time units conversion ----------------------------------*- 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___SUPPORT_TIME_UNITS_H
|
||||||
|
#define LLVM_LIBC_SRC___SUPPORT_TIME_UNITS_H
|
||||||
|
|
||||||
|
#include "hdr/types/time_t.h"
|
||||||
|
#include "src/__support/common.h"
|
||||||
|
|
||||||
|
namespace LIBC_NAMESPACE {
|
||||||
|
namespace time_units {
|
||||||
|
LIBC_INLINE constexpr time_t operator""_s_ns(unsigned long long s) {
|
||||||
|
return s * 1'000'000'000;
|
||||||
|
}
|
||||||
|
LIBC_INLINE constexpr time_t operator""_s_us(unsigned long long s) {
|
||||||
|
return s * 1'000'000;
|
||||||
|
}
|
||||||
|
LIBC_INLINE constexpr time_t operator""_s_ms(unsigned long long s) {
|
||||||
|
return s * 1'000;
|
||||||
|
}
|
||||||
|
LIBC_INLINE constexpr time_t operator""_ms_ns(unsigned long long ms) {
|
||||||
|
return ms * 1'000'000;
|
||||||
|
}
|
||||||
|
LIBC_INLINE constexpr time_t operator""_ms_us(unsigned long long ms) {
|
||||||
|
return ms * 1'000;
|
||||||
|
}
|
||||||
|
LIBC_INLINE constexpr time_t operator""_us_ns(unsigned long long us) {
|
||||||
|
return us * 1'000;
|
||||||
|
}
|
||||||
|
} // namespace time_units
|
||||||
|
} // namespace LIBC_NAMESPACE
|
||||||
|
|
||||||
|
#endif // LLVM_LIBC_SRC___SUPPORT_TIME_UNITS_H
|
@ -9,7 +9,7 @@
|
|||||||
#ifndef LLVM_LIBC_SRC_TIME_CLOCK_H
|
#ifndef LLVM_LIBC_SRC_TIME_CLOCK_H
|
||||||
#define LLVM_LIBC_SRC_TIME_CLOCK_H
|
#define LLVM_LIBC_SRC_TIME_CLOCK_H
|
||||||
|
|
||||||
#include <time.h>
|
#include "hdr/types/clock_t.h"
|
||||||
|
|
||||||
namespace LIBC_NAMESPACE {
|
namespace LIBC_NAMESPACE {
|
||||||
|
|
||||||
|
@ -9,11 +9,12 @@
|
|||||||
#ifndef LLVM_LIBC_SRC_TIME_CLOCK_GETTIME_H
|
#ifndef LLVM_LIBC_SRC_TIME_CLOCK_GETTIME_H
|
||||||
#define LLVM_LIBC_SRC_TIME_CLOCK_GETTIME_H
|
#define LLVM_LIBC_SRC_TIME_CLOCK_GETTIME_H
|
||||||
|
|
||||||
#include <time.h>
|
#include "hdr/types/clockid_t.h"
|
||||||
|
#include "hdr/types/struct_timespec.h"
|
||||||
|
|
||||||
namespace LIBC_NAMESPACE {
|
namespace LIBC_NAMESPACE {
|
||||||
|
|
||||||
int clock_gettime(clockid_t clockid, struct timespec *tp);
|
int clock_gettime(clockid_t clockid, timespec *tp);
|
||||||
|
|
||||||
} // namespace LIBC_NAMESPACE
|
} // namespace LIBC_NAMESPACE
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
#ifndef LLVM_LIBC_SRC_TIME_GETTIMEOFDAY_H
|
#ifndef LLVM_LIBC_SRC_TIME_GETTIMEOFDAY_H
|
||||||
#define LLVM_LIBC_SRC_TIME_GETTIMEOFDAY_H
|
#define LLVM_LIBC_SRC_TIME_GETTIMEOFDAY_H
|
||||||
|
|
||||||
#include <time.h>
|
#include "hdr/types/struct_timeval.h"
|
||||||
|
|
||||||
namespace LIBC_NAMESPACE {
|
namespace LIBC_NAMESPACE {
|
||||||
|
|
||||||
|
@ -4,6 +4,9 @@ add_object_library(
|
|||||||
time_utils.cpp
|
time_utils.cpp
|
||||||
HDRS
|
HDRS
|
||||||
time_utils.h
|
time_utils.h
|
||||||
|
DEPENDS
|
||||||
|
libc.hdr.types.clock_t
|
||||||
|
libc.hdr.time_macros
|
||||||
)
|
)
|
||||||
|
|
||||||
add_entrypoint_object(
|
add_entrypoint_object(
|
||||||
|
@ -6,9 +6,8 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "time_utils.h"
|
|
||||||
|
|
||||||
#include "src/time/clock.h"
|
#include "src/time/clock.h"
|
||||||
|
#include "src/time/gpu/time_utils.h"
|
||||||
|
|
||||||
namespace LIBC_NAMESPACE {
|
namespace LIBC_NAMESPACE {
|
||||||
|
|
||||||
|
@ -9,8 +9,9 @@
|
|||||||
#ifndef LLVM_LIBC_SRC_TIME_GPU_TIME_UTILS_H
|
#ifndef LLVM_LIBC_SRC_TIME_GPU_TIME_UTILS_H
|
||||||
#define LLVM_LIBC_SRC_TIME_GPU_TIME_UTILS_H
|
#define LLVM_LIBC_SRC_TIME_GPU_TIME_UTILS_H
|
||||||
|
|
||||||
|
#include "hdr/time_macros.h"
|
||||||
|
#include "hdr/types/clock_t.h"
|
||||||
#include "src/__support/GPU/utils.h"
|
#include "src/__support/GPU/utils.h"
|
||||||
|
|
||||||
namespace LIBC_NAMESPACE {
|
namespace LIBC_NAMESPACE {
|
||||||
|
|
||||||
#if defined(LIBC_TARGET_ARCH_IS_AMDGPU)
|
#if defined(LIBC_TARGET_ARCH_IS_AMDGPU)
|
||||||
|
@ -5,9 +5,9 @@ add_entrypoint_object(
|
|||||||
HDRS
|
HDRS
|
||||||
../time_func.h
|
../time_func.h
|
||||||
DEPENDS
|
DEPENDS
|
||||||
libc.include.time
|
libc.hdr.time_macros
|
||||||
libc.include.sys_syscall
|
libc.hdr.types.time_t
|
||||||
libc.src.__support.OSUtil.osutil
|
libc.src.__support.time.linux.clock_gettime
|
||||||
libc.src.errno.errno
|
libc.src.errno.errno
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -18,10 +18,11 @@ add_entrypoint_object(
|
|||||||
HDRS
|
HDRS
|
||||||
../clock.h
|
../clock.h
|
||||||
DEPENDS
|
DEPENDS
|
||||||
libc.include.time
|
libc.hdr.time_macros
|
||||||
libc.include.sys_syscall
|
libc.hdr.types.clock_t
|
||||||
|
libc.src.__support.time.units
|
||||||
|
libc.src.__support.time.linux.clock_gettime
|
||||||
libc.src.__support.CPP.limits
|
libc.src.__support.CPP.limits
|
||||||
libc.src.__support.OSUtil.osutil
|
|
||||||
libc.src.errno.errno
|
libc.src.errno.errno
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -32,10 +33,10 @@ add_entrypoint_object(
|
|||||||
HDRS
|
HDRS
|
||||||
../nanosleep.h
|
../nanosleep.h
|
||||||
DEPENDS
|
DEPENDS
|
||||||
libc.include.time
|
libc.hdr.types.struct_timespec
|
||||||
libc.include.sys_syscall
|
libc.include.sys_syscall
|
||||||
libc.src.__support.CPP.limits
|
|
||||||
libc.src.__support.OSUtil.osutil
|
libc.src.__support.OSUtil.osutil
|
||||||
|
libc.src.__support.CPP.limits
|
||||||
libc.src.errno.errno
|
libc.src.errno.errno
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -46,9 +47,9 @@ add_entrypoint_object(
|
|||||||
HDRS
|
HDRS
|
||||||
../clock_gettime.h
|
../clock_gettime.h
|
||||||
DEPENDS
|
DEPENDS
|
||||||
libc.include.time
|
libc.hdr.types.clockid_t
|
||||||
libc.include.sys_syscall
|
libc.hdr.types.struct_timespec
|
||||||
libc.src.__support.OSUtil.osutil
|
libc.src.__support.time.linux.clock_gettime
|
||||||
libc.src.errno.errno
|
libc.src.errno.errno
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -59,8 +60,9 @@ add_entrypoint_object(
|
|||||||
HDRS
|
HDRS
|
||||||
../gettimeofday.h
|
../gettimeofday.h
|
||||||
DEPENDS
|
DEPENDS
|
||||||
libc.include.time
|
libc.hdr.time_macros
|
||||||
libc.include.sys_syscall
|
libc.hdr.types.suseconds_t
|
||||||
libc.src.__support.OSUtil.osutil
|
libc.src.__support.time.linux.clock_gettime
|
||||||
|
libc.src.__support.time.units
|
||||||
libc.src.errno.errno
|
libc.src.errno.errno
|
||||||
)
|
)
|
||||||
|
@ -7,21 +7,19 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "src/time/clock.h"
|
#include "src/time/clock.h"
|
||||||
|
#include "hdr/time_macros.h"
|
||||||
#include "src/__support/CPP/limits.h"
|
#include "src/__support/CPP/limits.h"
|
||||||
#include "src/__support/OSUtil/syscall.h" // For internal syscall function.
|
|
||||||
#include "src/__support/common.h"
|
#include "src/__support/common.h"
|
||||||
|
#include "src/__support/time/linux/clock_gettime.h"
|
||||||
|
#include "src/__support/time/units.h"
|
||||||
#include "src/errno/libc_errno.h"
|
#include "src/errno/libc_errno.h"
|
||||||
#include "src/time/linux/clockGetTimeImpl.h"
|
|
||||||
|
|
||||||
#include <sys/syscall.h> // For syscall numbers.
|
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
namespace LIBC_NAMESPACE {
|
namespace LIBC_NAMESPACE {
|
||||||
|
|
||||||
LLVM_LIBC_FUNCTION(clock_t, clock, ()) {
|
LLVM_LIBC_FUNCTION(clock_t, clock, ()) {
|
||||||
|
using namespace time_units;
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
auto result = internal::clock_gettimeimpl(CLOCK_PROCESS_CPUTIME_ID, &ts);
|
auto result = internal::clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts);
|
||||||
if (!result.has_value()) {
|
if (!result.has_value()) {
|
||||||
libc_errno = result.error();
|
libc_errno = result.error();
|
||||||
return -1;
|
return -1;
|
||||||
@ -34,15 +32,15 @@ LLVM_LIBC_FUNCTION(clock_t, clock, ()) {
|
|||||||
cpp::numeric_limits<clock_t>::max() / CLOCKS_PER_SEC;
|
cpp::numeric_limits<clock_t>::max() / CLOCKS_PER_SEC;
|
||||||
if (ts.tv_sec > CLOCK_SECS_MAX)
|
if (ts.tv_sec > CLOCK_SECS_MAX)
|
||||||
return clock_t(-1);
|
return clock_t(-1);
|
||||||
if (ts.tv_nsec / 1000000000 > CLOCK_SECS_MAX - ts.tv_sec)
|
if (ts.tv_nsec / 1_s_ns > CLOCK_SECS_MAX - ts.tv_sec)
|
||||||
return clock_t(-1);
|
return clock_t(-1);
|
||||||
|
|
||||||
// For the integer computation converting tv_nsec to clocks to work
|
// For the integer computation converting tv_nsec to clocks to work
|
||||||
// correctly, we want CLOCKS_PER_SEC to be less than 1000000000.
|
// correctly, we want CLOCKS_PER_SEC to be less than 1000000000.
|
||||||
static_assert(1000000000 > CLOCKS_PER_SEC,
|
static_assert(1_s_ns > CLOCKS_PER_SEC,
|
||||||
"Expected CLOCKS_PER_SEC to be less than 1000000000.");
|
"Expected CLOCKS_PER_SEC to be less than 1'000'000'000.");
|
||||||
return clock_t(ts.tv_sec * CLOCKS_PER_SEC +
|
return clock_t(ts.tv_sec * CLOCKS_PER_SEC +
|
||||||
ts.tv_nsec / (1000000000 / CLOCKS_PER_SEC));
|
ts.tv_nsec / (1_s_ns / CLOCKS_PER_SEC));
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace LIBC_NAMESPACE
|
} // namespace LIBC_NAMESPACE
|
||||||
|
@ -7,21 +7,16 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "src/time/clock_gettime.h"
|
#include "src/time/clock_gettime.h"
|
||||||
|
|
||||||
#include "src/__support/OSUtil/syscall.h" // For internal syscall function.
|
|
||||||
#include "src/__support/common.h"
|
#include "src/__support/common.h"
|
||||||
|
#include "src/__support/time/linux/clock_gettime.h"
|
||||||
#include "src/errno/libc_errno.h"
|
#include "src/errno/libc_errno.h"
|
||||||
#include "src/time/linux/clockGetTimeImpl.h"
|
|
||||||
|
|
||||||
#include <sys/syscall.h> // For syscall numbers.
|
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
namespace LIBC_NAMESPACE {
|
namespace LIBC_NAMESPACE {
|
||||||
|
|
||||||
// TODO(michaelrj): Move this into time/linux with the other syscalls.
|
// TODO(michaelrj): Move this into time/linux with the other syscalls.
|
||||||
LLVM_LIBC_FUNCTION(int, clock_gettime,
|
LLVM_LIBC_FUNCTION(int, clock_gettime,
|
||||||
(clockid_t clockid, struct timespec *ts)) {
|
(clockid_t clockid, struct timespec *ts)) {
|
||||||
auto result = internal::clock_gettimeimpl(clockid, ts);
|
auto result = internal::clock_gettime(clockid, ts);
|
||||||
|
|
||||||
// A negative return value indicates an error with the magnitude of the
|
// A negative return value indicates an error with the magnitude of the
|
||||||
// value being the error code.
|
// value being the error code.
|
||||||
|
@ -7,24 +7,24 @@
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "src/time/gettimeofday.h"
|
#include "src/time/gettimeofday.h"
|
||||||
|
#include "hdr/time_macros.h"
|
||||||
#include "src/__support/OSUtil/syscall.h" // For internal syscall function.
|
#include "hdr/types/suseconds_t.h"
|
||||||
#include "src/__support/common.h"
|
#include "src/__support/common.h"
|
||||||
|
#include "src/__support/time/linux/clock_gettime.h"
|
||||||
|
#include "src/__support/time/units.h"
|
||||||
#include "src/errno/libc_errno.h"
|
#include "src/errno/libc_errno.h"
|
||||||
#include "src/time/linux/clockGetTimeImpl.h"
|
|
||||||
|
|
||||||
#include <sys/syscall.h> // For syscall numbers.
|
|
||||||
|
|
||||||
namespace LIBC_NAMESPACE {
|
namespace LIBC_NAMESPACE {
|
||||||
|
|
||||||
// TODO(michaelrj): Move this into time/linux with the other syscalls.
|
// TODO(michaelrj): Move this into time/linux with the other syscalls.
|
||||||
LLVM_LIBC_FUNCTION(int, gettimeofday,
|
LLVM_LIBC_FUNCTION(int, gettimeofday,
|
||||||
(struct timeval * tv, [[maybe_unused]] void *unused)) {
|
(struct timeval * tv, [[maybe_unused]] void *unused)) {
|
||||||
|
using namespace time_units;
|
||||||
if (tv == nullptr)
|
if (tv == nullptr)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
auto result = internal::clock_gettimeimpl(CLOCK_REALTIME, &ts);
|
auto result = internal::clock_gettime(CLOCK_REALTIME, &ts);
|
||||||
|
|
||||||
// A negative return value indicates an error with the magnitude of the
|
// A negative return value indicates an error with the magnitude of the
|
||||||
// value being the error code.
|
// value being the error code.
|
||||||
@ -34,7 +34,7 @@ LLVM_LIBC_FUNCTION(int, gettimeofday,
|
|||||||
}
|
}
|
||||||
|
|
||||||
tv->tv_sec = ts.tv_sec;
|
tv->tv_sec = ts.tv_sec;
|
||||||
tv->tv_usec = static_cast<suseconds_t>(ts.tv_nsec / 1000);
|
tv->tv_usec = static_cast<suseconds_t>(ts.tv_nsec / 1_us_ns);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,22 +6,18 @@
|
|||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#include "src/time/time_func.h"
|
#include "hdr/time_macros.h"
|
||||||
|
|
||||||
#include "src/__support/OSUtil/syscall.h" // For internal syscall function.
|
|
||||||
#include "src/__support/common.h"
|
#include "src/__support/common.h"
|
||||||
|
#include "src/__support/time/linux/clock_gettime.h"
|
||||||
#include "src/errno/libc_errno.h"
|
#include "src/errno/libc_errno.h"
|
||||||
#include "src/time/linux/clockGetTimeImpl.h"
|
#include "src/time/time_func.h"
|
||||||
|
|
||||||
#include <sys/syscall.h> // For syscall numbers.
|
|
||||||
#include <time.h>
|
|
||||||
|
|
||||||
namespace LIBC_NAMESPACE {
|
namespace LIBC_NAMESPACE {
|
||||||
|
|
||||||
LLVM_LIBC_FUNCTION(time_t, time, (time_t * tp)) {
|
LLVM_LIBC_FUNCTION(time_t, time, (time_t * tp)) {
|
||||||
// TODO: Use the Linux VDSO to fetch the time and avoid the syscall.
|
// TODO: Use the Linux VDSO to fetch the time and avoid the syscall.
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
auto result = internal::clock_gettimeimpl(CLOCK_REALTIME, &ts);
|
auto result = internal::clock_gettime(CLOCK_REALTIME, &ts);
|
||||||
if (!result.has_value()) {
|
if (!result.has_value()) {
|
||||||
libc_errno = result.error();
|
libc_errno = result.error();
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -9,11 +9,11 @@
|
|||||||
#ifndef LLVM_LIBC_SRC_TIME_NANOSLEEP_H
|
#ifndef LLVM_LIBC_SRC_TIME_NANOSLEEP_H
|
||||||
#define LLVM_LIBC_SRC_TIME_NANOSLEEP_H
|
#define LLVM_LIBC_SRC_TIME_NANOSLEEP_H
|
||||||
|
|
||||||
#include <time.h>
|
#include "hdr/types/struct_timespec.h"
|
||||||
|
|
||||||
namespace LIBC_NAMESPACE {
|
namespace LIBC_NAMESPACE {
|
||||||
|
|
||||||
int nanosleep(const struct timespec *req, struct timespec *rem);
|
int nanosleep(const timespec *req, timespec *rem);
|
||||||
|
|
||||||
} // namespace LIBC_NAMESPACE
|
} // namespace LIBC_NAMESPACE
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
#ifndef LLVM_LIBC_SRC_TIME_TIME_FUNC_H
|
#ifndef LLVM_LIBC_SRC_TIME_TIME_FUNC_H
|
||||||
#define LLVM_LIBC_SRC_TIME_TIME_FUNC_H
|
#define LLVM_LIBC_SRC_TIME_TIME_FUNC_H
|
||||||
|
|
||||||
#include <time.h>
|
#include "hdr/types/time_t.h"
|
||||||
|
|
||||||
// Note this header file is named time_func.h to avoid conflicts with the
|
// Note this header file is named time_func.h to avoid conflicts with the
|
||||||
// public header file time.h.
|
// public header file time.h.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user