diff --git a/libcxx/include/CMakeLists.txt b/libcxx/include/CMakeLists.txt index 37259a7e6e7ddc..95ba3ed5d40bb0 100644 --- a/libcxx/include/CMakeLists.txt +++ b/libcxx/include/CMakeLists.txt @@ -752,7 +752,6 @@ set(files __string/char_traits.h __string/constexpr_c_functions.h __string/extern_template_lists.h - __support/ibm/gettod_zos.h __support/ibm/locale_mgmt_zos.h __support/ibm/nanosleep.h __support/xlocale/__nop_locale_mgmt.h @@ -1300,7 +1299,6 @@ set(files __cxx03/__locale_dir/locale_base_api/bsd_locale_defaults.h __cxx03/__locale_dir/locale_base_api/bsd_locale_fallbacks.h __cxx03/__locale_dir/locale_base_api/fuchsia.h - __cxx03/__locale_dir/locale_base_api/ibm.h __cxx03/__locale_dir/locale_base_api/locale_guard.h __cxx03/__locale_dir/locale_base_api/musl.h __cxx03/__locale_dir/locale_base_api/newlib.h @@ -1404,9 +1402,6 @@ set(files __cxx03/__string/char_traits.h __cxx03/__string/constexpr_c_functions.h __cxx03/__string/extern_template_lists.h - __cxx03/__support/ibm/gettod_zos.h - __cxx03/__support/ibm/locale_mgmt_zos.h - __cxx03/__support/ibm/nanosleep.h __cxx03/__support/xlocale/__nop_locale_mgmt.h __cxx03/__support/xlocale/__posix_l_fallback.h __cxx03/__support/xlocale/__strtonum_fallback.h diff --git a/libcxx/include/__cxx03/__locale_dir/locale_base_api.h b/libcxx/include/__cxx03/__locale_dir/locale_base_api.h index a20f0952f52c3b..03f24630af6ca7 100644 --- a/libcxx/include/__cxx03/__locale_dir/locale_base_api.h +++ b/libcxx/include/__cxx03/__locale_dir/locale_base_api.h @@ -12,7 +12,7 @@ #if defined(_LIBCPP_MSVCRT_LIKE) # include <__cxx03/__locale_dir/locale_base_api/win32.h> #elif defined(_AIX) || defined(__MVS__) -# include <__cxx03/__locale_dir/locale_base_api/ibm.h> +# include <__locale_dir/locale_base_api/ibm.h> #elif defined(__ANDROID__) # include <__cxx03/__locale_dir/locale_base_api/android.h> #elif defined(__sun__) diff --git a/libcxx/include/__cxx03/__locale_dir/locale_base_api/ibm.h b/libcxx/include/__cxx03/__locale_dir/locale_base_api/ibm.h deleted file mode 100644 index a24d994e8ea214..00000000000000 --- a/libcxx/include/__cxx03/__locale_dir/locale_base_api/ibm.h +++ /dev/null @@ -1,108 +0,0 @@ -// -*- 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 _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_IBM_H -#define _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_IBM_H - -#if defined(__MVS__) -# include <__cxx03/__support/ibm/locale_mgmt_zos.h> -#endif // defined(__MVS__) - -#include <__cxx03/locale.h> -#include <__cxx03/stdarg.h> -#include <__cxx03/stdio.h> - -#include "cstdlib" - -#if defined(__MVS__) -# include <__cxx03/wctype.h> -// POSIX routines -# include <__cxx03/__support/xlocale/__posix_l_fallback.h> -#endif // defined(__MVS__) - -namespace { - -struct __setAndRestore { - explicit __setAndRestore(locale_t locale) { - if (locale == (locale_t)0) { - __cloc = newlocale(LC_ALL_MASK, "C", /* base */ (locale_t)0); - __stored = uselocale(__cloc); - } else { - __stored = uselocale(locale); - } - } - - ~__setAndRestore() { - uselocale(__stored); - if (__cloc) - freelocale(__cloc); - } - -private: - locale_t __stored = (locale_t)0; - locale_t __cloc = (locale_t)0; -}; - -} // namespace - -// The following are not POSIX routines. These are quick-and-dirty hacks -// to make things pretend to work -inline _LIBCPP_HIDE_FROM_ABI long long strtoll_l(const char* __nptr, char** __endptr, int __base, locale_t locale) { - __setAndRestore __newloc(locale); - return ::strtoll(__nptr, __endptr, __base); -} - -inline _LIBCPP_HIDE_FROM_ABI double strtod_l(const char* __nptr, char** __endptr, locale_t locale) { - __setAndRestore __newloc(locale); - return ::strtod(__nptr, __endptr); -} - -inline _LIBCPP_HIDE_FROM_ABI float strtof_l(const char* __nptr, char** __endptr, locale_t locale) { - __setAndRestore __newloc(locale); - return ::strtof(__nptr, __endptr); -} - -inline _LIBCPP_HIDE_FROM_ABI long double strtold_l(const char* __nptr, char** __endptr, locale_t locale) { - __setAndRestore __newloc(locale); - return ::strtold(__nptr, __endptr); -} - -inline _LIBCPP_HIDE_FROM_ABI unsigned long long -strtoull_l(const char* __nptr, char** __endptr, int __base, locale_t locale) { - __setAndRestore __newloc(locale); - return ::strtoull(__nptr, __endptr, __base); -} - -inline _LIBCPP_HIDE_FROM_ABI -_LIBCPP_ATTRIBUTE_FORMAT(__printf__, 2, 0) int vasprintf(char** strp, const char* fmt, va_list ap) { - const size_t buff_size = 256; - if ((*strp = (char*)malloc(buff_size)) == NULL) { - return -1; - } - - va_list ap_copy; - // va_copy may not be provided by the C library in C++03 mode. -#if __has_builtin(__builtin_va_copy) - __builtin_va_copy(ap_copy, ap); -#else - va_copy(ap_copy, ap); -#endif - int str_size = vsnprintf(*strp, buff_size, fmt, ap_copy); - va_end(ap_copy); - - if ((size_t)str_size >= buff_size) { - if ((*strp = (char*)realloc(*strp, str_size + 1)) == NULL) { - return -1; - } - str_size = vsnprintf(*strp, str_size + 1, fmt, ap); - } - return str_size; -} - -#endif // _LIBCPP___CXX03___LOCALE_LOCALE_BASE_API_IBM_H diff --git a/libcxx/include/__cxx03/__support/ibm/gettod_zos.h b/libcxx/include/__cxx03/__support/ibm/gettod_zos.h deleted file mode 100644 index 3bb9b942a3903f..00000000000000 --- a/libcxx/include/__cxx03/__support/ibm/gettod_zos.h +++ /dev/null @@ -1,52 +0,0 @@ -// -*- 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 _LIBCPP___CXX03___SUPPORT_IBM_GETTOD_ZOS_H -#define _LIBCPP___CXX03___SUPPORT_IBM_GETTOD_ZOS_H - -#include <__cxx03/time.h> - -inline _LIBCPP_HIDE_FROM_ABI int gettimeofdayMonotonic(struct timespec64* Output) { - // The POSIX gettimeofday() function is not available on z/OS. Therefore, - // we will call stcke and other hardware instructions in implement equivalent. - // Note that nanoseconds alone will overflow when reaching new epoch in 2042. - - struct _t { - uint64_t Hi; - uint64_t Lo; - }; - struct _t Value = {0, 0}; - uint64_t CC = 0; - asm(" stcke %0\n" - " ipm %1\n" - " srlg %1,%1,28\n" - : "=m"(Value), "+r"(CC)::); - - if (CC != 0) { - errno = EMVSTODNOTSET; - return CC; - } - uint64_t us = (Value.Hi >> 4); - uint64_t ns = ((Value.Hi & 0x0F) << 8) + (Value.Lo >> 56); - ns = (ns * 1000) >> 12; - us = us - 2208988800000000; - - register uint64_t DivPair0 asm("r0"); // dividend (upper half), remainder - DivPair0 = 0; - register uint64_t DivPair1 asm("r1"); // dividend (lower half), quotient - DivPair1 = us; - uint64_t Divisor = 1000000; - asm(" dlgr %0,%2" : "+r"(DivPair0), "+r"(DivPair1) : "r"(Divisor) :); - - Output->tv_sec = DivPair1; - Output->tv_nsec = DivPair0 * 1000 + ns; - return 0; -} - -#endif // _LIBCPP___CXX03___SUPPORT_IBM_GETTOD_ZOS_H diff --git a/libcxx/include/__cxx03/__support/ibm/locale_mgmt_zos.h b/libcxx/include/__cxx03/__support/ibm/locale_mgmt_zos.h deleted file mode 100644 index 9fa8f8c9088e1f..00000000000000 --- a/libcxx/include/__cxx03/__support/ibm/locale_mgmt_zos.h +++ /dev/null @@ -1,53 +0,0 @@ -// -*- 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 _LIBCPP___CXX03___SUPPORT_IBM_LOCALE_MGMT_ZOS_H -#define _LIBCPP___CXX03___SUPPORT_IBM_LOCALE_MGMT_ZOS_H - -#if defined(__MVS__) -# include <__cxx03/locale.h> -# include <__cxx03/string> - -# ifdef __cplusplus -extern "C" { -# endif - -# define _LC_MAX LC_MESSAGES /* highest real category */ -# define _NCAT (_LC_MAX + 1) /* maximum + 1 */ - -# define _CATMASK(n) (1 << (n)) -# define LC_COLLATE_MASK _CATMASK(LC_COLLATE) -# define LC_CTYPE_MASK _CATMASK(LC_CTYPE) -# define LC_MONETARY_MASK _CATMASK(LC_MONETARY) -# define LC_NUMERIC_MASK _CATMASK(LC_NUMERIC) -# define LC_TIME_MASK _CATMASK(LC_TIME) -# define LC_MESSAGES_MASK _CATMASK(LC_MESSAGES) -# define LC_ALL_MASK (_CATMASK(_NCAT) - 1) - -typedef struct locale_struct { - int category_mask; - std::string lc_collate; - std::string lc_ctype; - std::string lc_monetary; - std::string lc_numeric; - std::string lc_time; - std::string lc_messages; -}* locale_t; - -// z/OS does not have newlocale, freelocale and uselocale. -// The functions below are workarounds in single thread mode. -locale_t newlocale(int category_mask, const char* locale, locale_t base); -void freelocale(locale_t locobj); -locale_t uselocale(locale_t newloc); - -# ifdef __cplusplus -} -# endif -#endif // defined(__MVS__) -#endif // _LIBCPP___CXX03___SUPPORT_IBM_LOCALE_MGMT_ZOS_H diff --git a/libcxx/include/__cxx03/__support/ibm/nanosleep.h b/libcxx/include/__cxx03/__support/ibm/nanosleep.h deleted file mode 100644 index 1b6883bbcc1118..00000000000000 --- a/libcxx/include/__cxx03/__support/ibm/nanosleep.h +++ /dev/null @@ -1,55 +0,0 @@ -// -*- 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 _LIBCPP___CXX03___SUPPORT_IBM_NANOSLEEP_H -#define _LIBCPP___CXX03___SUPPORT_IBM_NANOSLEEP_H - -#include <__cxx03/unistd.h> - -inline int nanosleep(const struct timespec* __req, struct timespec* __rem) { - // The nanosleep() function is not available on z/OS. Therefore, we will call - // sleep() to sleep for whole seconds and usleep() to sleep for any remaining - // fraction of a second. Any remaining nanoseconds will round up to the next - // microsecond. - if (__req->tv_sec < 0 || __req->tv_nsec < 0 || __req->tv_nsec > 999999999) { - errno = EINVAL; - return -1; - } - long __micro_sec = (__req->tv_nsec + 999) / 1000; - time_t __sec = __req->tv_sec; - if (__micro_sec > 999999) { - ++__sec; - __micro_sec -= 1000000; - } - __sec = static_cast(sleep(static_cast(__sec))); - if (__sec) { - if (__rem) { - // Updating the remaining time to sleep in case of unsuccessful call to sleep(). - __rem->tv_sec = __sec; - __rem->tv_nsec = __micro_sec * 1000; - } - errno = EINTR; - return -1; - } - if (__micro_sec) { - int __rt = usleep(static_cast(__micro_sec)); - if (__rt != 0 && __rem) { - // The usleep() does not provide the amount of remaining time upon its failure, - // so the time slept will be ignored. - __rem->tv_sec = 0; - __rem->tv_nsec = __micro_sec * 1000; - // The errno is already set. - return -1; - } - return __rt; - } - return 0; -} - -#endif // _LIBCPP___CXX03___SUPPORT_IBM_NANOSLEEP_H diff --git a/libcxx/include/__cxx03/__thread/support/pthread.h b/libcxx/include/__cxx03/__thread/support/pthread.h index 4ec5531003e02e..8ae49833dda849 100644 --- a/libcxx/include/__cxx03/__thread/support/pthread.h +++ b/libcxx/include/__cxx03/__thread/support/pthread.h @@ -19,7 +19,7 @@ #include #ifdef __MVS__ -# include <__cxx03/__support/ibm/nanosleep.h> +# include <__support/ibm/nanosleep.h> #endif // Some platforms require in order for diff --git a/libcxx/src/chrono.cpp b/libcxx/src/chrono.cpp index 20387ea76124bb..c85a0162dc2b2e 100644 --- a/libcxx/src/chrono.cpp +++ b/libcxx/src/chrono.cpp @@ -17,7 +17,7 @@ #include #if defined(__MVS__) -# include <__support/ibm/gettod_zos.h> // gettimeofdayMonotonic +# include // gettimeofdayMonotonic #endif #include "include/apple_availability.h" diff --git a/libcxx/include/__support/ibm/gettod_zos.h b/libcxx/src/support/ibm/gettod_zos.h similarity index 100% rename from libcxx/include/__support/ibm/gettod_zos.h rename to libcxx/src/support/ibm/gettod_zos.h