Reland "[libc][NFC] adjust time related implementations"" by SchrodingerZhu · Pull Request #91687 · llvm/llvm-project (original) (raw)
@llvm/pr-subscribers-libc
Author: Schrodinger ZHU Yifan (SchrodingerZhu)
Changes
Reverts llvm/llvm-project#91657 and Relands #91485
Patch is 24.06 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/91687.diff
28 Files Affected:
- (modified) libc/hdr/CMakeLists.txt (+9)
- (added) libc/hdr/time_macros.h (+22)
- (modified) libc/hdr/types/CMakeLists.txt (+45)
- (added) libc/hdr/types/clock_t.h (+22)
- (added) libc/hdr/types/clockid_t.h (+22)
- (added) libc/hdr/types/struct_timeval.h (+21)
- (added) libc/hdr/types/suseconds_t.h (+22)
- (added) libc/hdr/types/time_t.h (+22)
- (modified) libc/src/__support/CMakeLists.txt (+2)
- (added) libc/src/__support/time/CMakeLists.txt (+20)
- (added) libc/src/__support/time/clock_gettime.h (+18)
- (added) libc/src/__support/time/linux/CMakeLists.txt (+14)
- (renamed) libc/src/__support/time/linux/clock_gettime.cpp (+5-18)
- (added) libc/src/__support/time/linux/clock_gettime.h (+23)
- (added) libc/src/__support/time/units.h (+38)
- (modified) libc/src/time/clock.h (+1-1)
- (modified) libc/src/time/clock_gettime.h (+3-2)
- (modified) libc/src/time/gettimeofday.h (+1-1)
- (modified) libc/src/time/gpu/CMakeLists.txt (+2)
- (modified) libc/src/time/gpu/clock.cpp (+1-2)
- (modified) libc/src/time/gpu/time_utils.h (+2-1)
- (modified) libc/src/time/linux/CMakeLists.txt (+16-14)
- (modified) libc/src/time/linux/clock.cpp (+9-11)
- (modified) libc/src/time/linux/clock_gettime.cpp (+2-7)
- (modified) libc/src/time/linux/gettimeofday.cpp (+7-7)
- (modified) libc/src/time/linux/time.cpp (+4-8)
- (modified) libc/src/time/nanosleep.h (+2-2)
- (modified) libc/src/time/time_func.h (+1-1)
diff --git a/libc/hdr/CMakeLists.txt b/libc/hdr/CMakeLists.txt index 179b05e6ee966..7549342514304 100644 --- a/libc/hdr/CMakeLists.txt +++ b/libc/hdr/CMakeLists.txt @@ -68,4 +68,13 @@ add_proxy_header_library( 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) diff --git a/libc/hdr/time_macros.h b/libc/hdr/time_macros.h new file mode 100644 index 0000000000000..dc36fe66f7a80 --- /dev/null +++ b/libc/hdr/time_macros.h @@ -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 diff --git a/libc/hdr/types/CMakeLists.txt b/libc/hdr/types/CMakeLists.txt index 46a66ec590202..3a1bb2f3c340f 100644 --- a/libc/hdr/types/CMakeLists.txt +++ b/libc/hdr/types/CMakeLists.txt @@ -63,3 +63,48 @@ add_proxy_header_library( libc.include.llvm-libc-types.fexcept_t 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 +) diff --git a/libc/hdr/types/clock_t.h b/libc/hdr/types/clock_t.h new file mode 100644 index 0000000000000..b0b658e96c3db --- /dev/null +++ b/libc/hdr/types/clock_t.h @@ -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 diff --git a/libc/hdr/types/clockid_t.h b/libc/hdr/types/clockid_t.h new file mode 100644 index 0000000000000..333342072a2ff --- /dev/null +++ b/libc/hdr/types/clockid_t.h @@ -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 diff --git a/libc/hdr/types/struct_timeval.h b/libc/hdr/types/struct_timeval.h new file mode 100644 index 0000000000000..8fc321a52d711 --- /dev/null +++ b/libc/hdr/types/struct_timeval.h @@ -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 diff --git a/libc/hdr/types/suseconds_t.h b/libc/hdr/types/suseconds_t.h new file mode 100644 index 0000000000000..72e54a965f750 --- /dev/null +++ b/libc/hdr/types/suseconds_t.h @@ -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 diff --git a/libc/hdr/types/time_t.h b/libc/hdr/types/time_t.h new file mode 100644 index 0000000000000..fc9a1506a2cda --- /dev/null +++ b/libc/hdr/types/time_t.h @@ -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 diff --git a/libc/src/__support/CMakeLists.txt b/libc/src/__support/CMakeLists.txt index dcae55e050bf1..32d693ec6a268 100644 --- a/libc/src/__support/CMakeLists.txt +++ b/libc/src/__support/CMakeLists.txt @@ -281,3 +281,5 @@ add_subdirectory(File) add_subdirectory(HashTable) add_subdirectory(fixed_point) + +add_subdirectory(time) diff --git a/libc/src/__support/time/CMakeLists.txt b/libc/src/__support/time/CMakeLists.txt new file mode 100644 index 0000000000000..e934ef7b9224a --- /dev/null +++ b/libc/src/__support/time/CMakeLists.txt @@ -0,0 +1,20 @@ +if(EXISTS CMAKECURRENTSOURCEDIR/{CMAKE_CURRENT_SOURCE_DIR}/CMAKECURRENTSOURCEDIR/{LIBC_TARGET_OS}) + add_subdirectory(${LIBC_TARGET_OS}) +endif() + +add_header_library( + clock_gettime + HDRS + clock_gettime.h + DEPENDS + .${LIBC_TARGET_OS}.clock_gettime +) + +add_header_library( + units + HDRS + units.h + DEPENDS + libc.src.__support.common + libc.hdr.types.time_t +) diff --git a/libc/src/__support/time/clock_gettime.h b/libc/src/__support/time/clock_gettime.h new file mode 100644 index 0000000000000..ef99339a4805e --- /dev/null +++ b/libc/src/__support/time/clock_gettime.h @@ -0,0 +1,18 @@ +//===--- clock_gettime internal 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_CLOCK_GETTIME_H +#define LLVM_LIBC_SRC___SUPPORT_TIME_CLOCK_GETTIME_H + +#ifdef linux +#include "src/__support/time/linux/clock_gettime.h" +#else +#error "clock_gettime is not supported on this platform" +#endif + +#endif // LLVM_LIBC_SRC___SUPPORT_TIME_CLOCK_GETTIME_H diff --git a/libc/src/__support/time/linux/CMakeLists.txt b/libc/src/__support/time/linux/CMakeLists.txt new file mode 100644 index 0000000000000..f04d550555e19 --- /dev/null +++ b/libc/src/__support/time/linux/CMakeLists.txt @@ -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 +) diff --git a/libc/src/time/linux/clockGetTimeImpl.h b/libc/src/__support/time/linux/clock_gettime.cpp similarity index 64% rename from libc/src/time/linux/clockGetTimeImpl.h rename to libc/src/__support/time/linux/clock_gettime.cpp index 8c8c9fcf845cc..7f266b282a391 100644 --- a/libc/src/time/linux/clockGetTimeImpl.h +++ b/libc/src/__support/time/linux/clock_gettime.cpp @@ -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. // See https://llvm.org/LICENSE.txt for license information. @@ -6,23 +6,12 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_LIBC_SRC_TIME_LINUX_CLOCKGETTIMEIMPL_H -#define LLVM_LIBC_SRC_TIME_LINUX_CLOCKGETTIMEIMPL_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>
+#include "src/__support/time/linux/clock_gettime.h" +#include "src/__support/OSUtil/syscall.h" +#include <sys/syscall.h> namespace LIBC_NAMESPACE { namespace internal {
-LIBC_INLINE ErrorOr clock_gettimeimpl(clockid_t clockid, - struct timespec *ts) { +ErrorOr clock_gettime(clockid_t clockid, timespec *ts) { #if SYS_clock_gettime int ret = LIBC_NAMESPACE::syscall_impl(SYS_clock_gettime, static_cast(clockid), @@ -44,5 +33,3 @@ LIBC_INLINE ErrorOr clock_gettimeimpl(clockid_t clockid, } // namespace internal } // namespace LIBC_NAMESPACE
-#endif // LLVM_LIBC_SRC_TIME_LINUX_CLOCKGETTIMEIMPL_H diff --git a/libc/src/__support/time/linux/clock_gettime.h b/libc/src/__support/time/linux/clock_gettime.h new file mode 100644 index 0000000000000..b1572726f6301 --- /dev/null +++ b/libc/src/__support/time/linux/clock_gettime.h @@ -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 clock_gettime(clockid_t clockid, timespec ts); +} +} // namespace LIBC_NAMESPACE + +#endif // LLVM_LIBC_SRC___SUPPORT_TIME_LINUX_CLOCK_GETTIME_H diff --git a/libc/src/__support/time/units.h b/libc/src/__support/time/units.h new file mode 100644 index 0000000000000..f6bd19f9b1396 --- /dev/null +++ b/libc/src/__support/time/units.h @@ -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 diff --git a/libc/src/time/clock.h b/libc/src/time/clock.h index d4af7656644a0..f5d14d036e138 100644 --- a/libc/src/time/clock.h +++ b/libc/src/time/clock.h @@ -9,7 +9,7 @@ #ifndef 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 { diff --git a/libc/src/time/clock_gettime.h b/libc/src/time/clock_gettime.h index 72e2e1949feb6..48e81a3554291 100644 --- a/libc/src/time/clock_gettime.h +++ b/libc/src/time/clock_gettime.h @@ -9,11 +9,12 @@ #ifndef 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 { -int clock_gettime(clockid_t clockid, struct timespec *tp); +int clock_gettime(clockid_t clockid, timespec *tp); } // namespace LIBC_NAMESPACE diff --git a/libc/src/time/gettimeofday.h b/libc/src/time/gettimeofday.h index 880b94cee7311..62ee31edcad67 100644 --- a/libc/src/time/gettimeofday.h +++ b/libc/src/time/gettimeofday.h @@ -9,7 +9,7 @@ #ifndef 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 { diff --git a/libc/src/time/gpu/CMakeLists.txt b/libc/src/time/gpu/CMakeLists.txt index bb79d92399b37..beaf3427504a5 100644 --- a/libc/src/time/gpu/CMakeLists.txt +++ b/libc/src/time/gpu/CMakeLists.txt @@ -4,6 +4,8 @@ add_object_library( time_utils.cpp HDRS time_utils.h + DEPENDS + libc.hdr.types.clock_t ) add_entrypoint_object( diff --git a/libc/src/time/gpu/clock.cpp b/libc/src/time/gpu/clock.cpp index 86cc97e2a3bfb..8ddfc27975bba 100644 --- a/libc/src/time/gpu/clock.cpp +++ b/libc/src/time/gpu/clock.cpp @@ -6,9 +6,8 @@ // //===----------------------------------------------------------------------===// -#include "time_utils.h"
#include "src/time/clock.h" +#include "src/time/gpu/time_utils.h" namespace LIBC_NAMESPACE { diff --git a/libc/src/time/gpu/time_utils.h b/libc/src/time/gpu/time_utils.h index 8a9a5f0f65b89..3f1fd11c1791c 100644 --- a/libc/src/time/gpu/time_utils.h +++ b/libc/src/time/gpu/time_utils.h @@ -9,8 +9,9 @@ #ifndef 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"
namespace LIBC_NAMESPACE { #if defined(LIBC_TARGET_ARCH_IS_AMDGPU) diff --git a/libc/src/time/linux/CMakeLists.txt b/libc/src/time/linux/CMakeLists.txt index df79bf5986261..8a0e6b04b66e6 100644 --- a/libc/src/time/linux/CMakeLists.txt +++ b/libc/src/time/linux/CMakeLists.txt @@ -5,9 +5,9 @@ add_entrypoint_object( HDRS ../time_func.h DEPENDS - libc.include.time - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil + libc.hdr.time_macros + libc.hdr.types.time_t + libc.src.__support.time.clock_gettime libc.src.errno.errno ) @@ -18,10 +18,11 @@ add_entrypoint_object( HDRS ../clock.h DEPENDS - libc.include.time - libc.include.sys_syscall + libc.hdr.time_macros + libc.hdr.types.clock_t + libc.src.__support.time.units + libc.src.__support.time.clock_gettime libc.src.__support.CPP.limits - libc.src.__support.OSUtil.osutil libc.src.errno.errno ) @@ -32,10 +33,10 @@ add_entrypoint_object( HDRS ../nanosleep.h DEPENDS - libc.include.time + libc.hdr.types.struct_timespec libc.include.sys_syscall - libc.src.__support.CPP.limits libc.src.__support.OSUtil.osutil + libc.src.__support.CPP.limits libc.src.errno.errno ) @@ -46,9 +47,9 @@ add_entrypoint_object( HDRS ../clock_gettime.h DEPENDS - libc.include.time - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil + libc.hdr.types.clockid_t + libc.hdr.types.struct_timespec + libc.src.__support.time.clock_gettime libc.src.errno.errno ) @@ -59,8 +60,9 @@ add_entrypoint_object( HDRS ../gettimeofday.h DEPENDS - libc.include.time - libc.include.sys_syscall - libc.src.__support.OSUtil.osutil + libc.hdr.time_macros + libc.hdr.types.suseconds_t + libc.src.__support.time.clock_gettime + libc.src.__support.time.units libc.src.errno.errno ) diff --git a/libc/src/time/linux/clock.cpp b/libc/src/time/linux/clock.cpp index 1e95f0526bc9c..fc48e2792747d 100644 --- a/libc/src/time/linux/clock.cpp +++ b/libc/src/time/linux/clock.cpp @@ -7,21 +7,19 @@ //===----------------------------------------------------------------------===// #include "src/time/clock.h"
+#include "hdr/time_macros.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/time/clock_gettime.h" +#include "src/__support/time/units.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 { LLVM_LIBC_FUNCTION(clock_t, clock, ()) { + using namespace time_units; 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()) { libc_errno = result.error(); return -1; @@ -34,15 +32,15 @@ LLVM_LIBC_FUNCTION(clock_t, clock, ()) { cpp::numeric_limits::max() / CLOCKS_PER_SEC; if (ts.tv_sec > CLOCK_SECS_MAX) 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); // For the integer computation converting tv_nsec to clocks to work // correctly, we want CLOCKS_PER_SEC to be less than 1000000000. - static_assert(1000000000 > CLOCKS_PER_SEC, - "Expected CLOCKS_PER_SEC to be less than 1000000000."); + static_assert(1_s_ns > CLOCKS_PER_SEC, + "Expected CLOCKS_PER_SEC to be less than 1'000'000'000."); 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 diff --git a/libc/src/time/linux/clock_gettime.cpp b/libc/src/time/linux/clock_gettime.cpp index 47e974a866c83..920363e85e06c 100644 --- a/libc/src/time/linux/clock_gettime.cpp +++ b/libc/src/time/linux/clock_gettime.cpp @@ -7,21 +7,16 @@ //===----------------------------------------------------------------------===// #include "src/time/clock_gettime.h"
-#include "src/__support/OSUtil/syscall.h" // For internal syscall function. #include "src/__support/common.h" +#include "src/__support/time/clock_gettime.h" #includ... [truncated]