forked from OSchip/llvm-project
Solaris port. Currently sees around 200 test failures, mostly related to
Solaris not providing some of the locales that the test suite uses. Note: This depends on an xlocale (partial) implementation for Solaris and a couple of fixed standard headers. These will be committed to a branch later today. llvm-svn: 151720
This commit is contained in:
parent
66d4573786
commit
14c25b80e9
|
@ -23,7 +23,7 @@ D: Initial regex prototype
|
||||||
|
|
||||||
N: David Chisnall
|
N: David Chisnall
|
||||||
E: theraven at theravensnest dot org
|
E: theraven at theravensnest dot org
|
||||||
D: FreeBSD port and libcxxrt support.
|
D: FreeBSD and Solaris ports, libcxxrt support, some atomics work.
|
||||||
|
|
||||||
N: Ruben Van Boxem
|
N: Ruben Van Boxem
|
||||||
E: vanboxem dot ruben at gmail dot com
|
E: vanboxem dot ruben at gmail dot com
|
||||||
|
|
|
@ -58,6 +58,17 @@
|
||||||
# endif
|
# endif
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
|
#ifdef __sun__
|
||||||
|
# include <sys/isa_defs.h>
|
||||||
|
# ifdef _LITTLE_ENDIAN
|
||||||
|
# define _LIBCPP_LITTLE_ENDIAN 1
|
||||||
|
# define _LIBCPP_BIG_ENDIAN 0
|
||||||
|
# else
|
||||||
|
# define _LIBCPP_LITTLE_ENDIAN 0
|
||||||
|
# define _LIBCPP_BIG_ENDIAN 1
|
||||||
|
# endif
|
||||||
|
#endif // __sun__
|
||||||
|
|
||||||
#if !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN)
|
#if !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN)
|
||||||
# include <endian.h>
|
# include <endian.h>
|
||||||
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||||
|
@ -394,7 +405,7 @@ template <unsigned> struct __static_assert_check {};
|
||||||
#define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x)
|
#define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x)
|
||||||
#endif // _LIBCPP_HAS_NO_STRONG_ENUMS
|
#endif // _LIBCPP_HAS_NO_STRONG_ENUMS
|
||||||
|
|
||||||
#if __APPLE__ || __FreeBSD__ || _WIN32
|
#if __APPLE__ || __FreeBSD__ || _WIN32 || __sun__
|
||||||
#define _LIBCPP_LOCALE__L_EXTENSIONS 1
|
#define _LIBCPP_LOCALE__L_EXTENSIONS 1
|
||||||
#endif
|
#endif
|
||||||
#if __FreeBSD__
|
#if __FreeBSD__
|
||||||
|
@ -405,7 +416,7 @@ template <unsigned> struct __static_assert_check {};
|
||||||
#define _LIBCPP_HAS_DEFAULTRUNELOCALE
|
#define _LIBCPP_HAS_DEFAULTRUNELOCALE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if __APPLE__ || __FreeBSD__
|
#if __APPLE__ || __FreeBSD__ || __sun__
|
||||||
#define _LIBCPP_WCTYPE_IS_MASK
|
#define _LIBCPP_WCTYPE_IS_MASK
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#if _WIN32
|
#if _WIN32
|
||||||
# include <support/win32/locale_win32.h>
|
# include <support/win32/locale_win32.h>
|
||||||
#elif (__GLIBC__ || __APPLE__ || __FreeBSD__)
|
#elif (__GLIBC__ || __APPLE__ || __FreeBSD__ || __sun__)
|
||||||
# include <xlocale.h>
|
# include <xlocale.h>
|
||||||
#endif // _WIN32 || __GLIBC__ || __APPLE__ || __FreeBSD_
|
#endif // _WIN32 || __GLIBC__ || __APPLE__ || __FreeBSD_
|
||||||
|
|
||||||
|
@ -348,7 +348,19 @@ public:
|
||||||
static const mask punct = _CTYPE_P;
|
static const mask punct = _CTYPE_P;
|
||||||
static const mask xdigit = _CTYPE_X;
|
static const mask xdigit = _CTYPE_X;
|
||||||
static const mask blank = _CTYPE_B;
|
static const mask blank = _CTYPE_B;
|
||||||
#else // __GLIBC__ || _WIN32 || __APPLE__ || __FreeBSD__
|
#elif __sun__
|
||||||
|
typedef unsigned int mask;
|
||||||
|
static const mask space = _ISSPACE;
|
||||||
|
static const mask print = _ISPRINT;
|
||||||
|
static const mask cntrl = _ISCNTRL;
|
||||||
|
static const mask upper = _ISUPPER;
|
||||||
|
static const mask lower = _ISLOWER;
|
||||||
|
static const mask alpha = _ISALPHA;
|
||||||
|
static const mask digit = _ISDIGIT;
|
||||||
|
static const mask punct = _ISPUNCT;
|
||||||
|
static const mask xdigit = _ISXDIGIT;
|
||||||
|
static const mask blank = _ISBLANK;
|
||||||
|
#else // __GLIBC__ || _WIN32 || __APPLE__ || __FreeBSD__ || __sun__
|
||||||
typedef unsigned long mask;
|
typedef unsigned long mask;
|
||||||
static const mask space = 1<<0;
|
static const mask space = 1<<0;
|
||||||
static const mask print = 1<<1;
|
static const mask print = 1<<1;
|
||||||
|
|
|
@ -646,13 +646,17 @@ using ::isunordered;
|
||||||
using ::float_t;
|
using ::float_t;
|
||||||
using ::double_t;
|
using ::double_t;
|
||||||
|
|
||||||
|
#ifndef __sun__
|
||||||
// abs
|
// abs
|
||||||
|
|
||||||
|
#endif // __sun__
|
||||||
template <class _A1>
|
template <class _A1>
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
typename enable_if<is_floating_point<_A1>::value, _A1>::type
|
typename enable_if<is_floating_point<_A1>::value, _A1>::type
|
||||||
abs(_A1 __x) {return fabs(__x);}
|
abs(_A1 __x) {return fabs(__x);}
|
||||||
|
|
||||||
|
#ifndef __sun__
|
||||||
|
|
||||||
// acos
|
// acos
|
||||||
|
|
||||||
using ::acos;
|
using ::acos;
|
||||||
|
@ -769,16 +773,20 @@ inline _LIBCPP_INLINE_VISIBILITY
|
||||||
typename enable_if<is_integral<_A1>::value, double>::type
|
typename enable_if<is_integral<_A1>::value, double>::type
|
||||||
cosh(_A1 __x) {return cosh((double)__x);}
|
cosh(_A1 __x) {return cosh((double)__x);}
|
||||||
|
|
||||||
|
#endif // __sun__
|
||||||
// exp
|
// exp
|
||||||
|
|
||||||
using ::exp;
|
using ::exp;
|
||||||
using ::expf;
|
using ::expf;
|
||||||
|
|
||||||
|
#ifndef __sun__
|
||||||
|
|
||||||
#ifndef _MSC_VER
|
#ifndef _MSC_VER
|
||||||
inline _LIBCPP_INLINE_VISIBILITY float exp(float __x) {return expf(__x);}
|
inline _LIBCPP_INLINE_VISIBILITY float exp(float __x) {return expf(__x);}
|
||||||
inline _LIBCPP_INLINE_VISIBILITY long double exp(long double __x) {return expl(__x);}
|
inline _LIBCPP_INLINE_VISIBILITY long double exp(long double __x) {return expl(__x);}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
template <class _A1>
|
template <class _A1>
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
typename enable_if<is_integral<_A1>::value, double>::type
|
typename enable_if<is_integral<_A1>::value, double>::type
|
||||||
|
@ -816,8 +824,10 @@ floor(_A1 __x) {return floor((double)__x);}
|
||||||
|
|
||||||
// fmod
|
// fmod
|
||||||
|
|
||||||
|
#endif //__sun__
|
||||||
using ::fmod;
|
using ::fmod;
|
||||||
using ::fmodf;
|
using ::fmodf;
|
||||||
|
#ifndef __sun__
|
||||||
|
|
||||||
#ifndef _MSC_VER
|
#ifndef _MSC_VER
|
||||||
inline _LIBCPP_INLINE_VISIBILITY float fmod(float __x, float __y) {return fmodf(__x, __y);}
|
inline _LIBCPP_INLINE_VISIBILITY float fmod(float __x, float __y) {return fmodf(__x, __y);}
|
||||||
|
@ -840,6 +850,7 @@ fmod(_A1 __x, _A2 __y)
|
||||||
return fmod((__result_type)__x, (__result_type)__y);
|
return fmod((__result_type)__x, (__result_type)__y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// frexp
|
// frexp
|
||||||
|
|
||||||
using ::frexp;
|
using ::frexp;
|
||||||
|
@ -872,8 +883,10 @@ ldexp(_A1 __x, int __e) {return ldexp((double)__x, __e);}
|
||||||
|
|
||||||
// log
|
// log
|
||||||
|
|
||||||
|
#endif // __sun__
|
||||||
using ::log;
|
using ::log;
|
||||||
using ::logf;
|
using ::logf;
|
||||||
|
#ifndef __sun__
|
||||||
|
|
||||||
#ifndef _MSC_VER
|
#ifndef _MSC_VER
|
||||||
inline _LIBCPP_INLINE_VISIBILITY float log(float __x) {return logf(__x);}
|
inline _LIBCPP_INLINE_VISIBILITY float log(float __x) {return logf(__x);}
|
||||||
|
@ -885,6 +898,7 @@ inline _LIBCPP_INLINE_VISIBILITY
|
||||||
typename enable_if<is_integral<_A1>::value, double>::type
|
typename enable_if<is_integral<_A1>::value, double>::type
|
||||||
log(_A1 __x) {return log((double)__x);}
|
log(_A1 __x) {return log((double)__x);}
|
||||||
|
|
||||||
|
|
||||||
// log10
|
// log10
|
||||||
|
|
||||||
using ::log10;
|
using ::log10;
|
||||||
|
@ -912,9 +926,12 @@ inline _LIBCPP_INLINE_VISIBILITY long double modf(long double __x, long double*
|
||||||
|
|
||||||
// pow
|
// pow
|
||||||
|
|
||||||
|
#endif // __sun__
|
||||||
using ::pow;
|
using ::pow;
|
||||||
using ::powf;
|
using ::powf;
|
||||||
|
|
||||||
|
#ifndef __sun__
|
||||||
|
|
||||||
#ifndef _MSC_VER
|
#ifndef _MSC_VER
|
||||||
inline _LIBCPP_INLINE_VISIBILITY float pow(float __x, float __y) {return powf(__x, __y);}
|
inline _LIBCPP_INLINE_VISIBILITY float pow(float __x, float __y) {return powf(__x, __y);}
|
||||||
inline _LIBCPP_INLINE_VISIBILITY long double pow(long double __x, long double __y) {return powl(__x, __y);}
|
inline _LIBCPP_INLINE_VISIBILITY long double pow(long double __x, long double __y) {return powl(__x, __y);}
|
||||||
|
@ -936,6 +953,7 @@ pow(_A1 __x, _A2 __y)
|
||||||
return pow((__result_type)__x, (__result_type)__y);
|
return pow((__result_type)__x, (__result_type)__y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// sin
|
// sin
|
||||||
|
|
||||||
using ::sin;
|
using ::sin;
|
||||||
|
@ -968,10 +986,12 @@ sinh(_A1 __x) {return sinh((double)__x);}
|
||||||
|
|
||||||
// sqrt
|
// sqrt
|
||||||
|
|
||||||
|
#endif // __sun__
|
||||||
using ::sqrt;
|
using ::sqrt;
|
||||||
using ::sqrtf;
|
using ::sqrtf;
|
||||||
|
|
||||||
#ifndef _MSC_VER
|
|
||||||
|
#if !(defined(_MSC_VER) || defined(__sun__))
|
||||||
inline _LIBCPP_INLINE_VISIBILITY float sqrt(float __x) {return sqrtf(__x);}
|
inline _LIBCPP_INLINE_VISIBILITY float sqrt(float __x) {return sqrtf(__x);}
|
||||||
inline _LIBCPP_INLINE_VISIBILITY long double sqrt(long double __x) {return sqrtl(__x);}
|
inline _LIBCPP_INLINE_VISIBILITY long double sqrt(long double __x) {return sqrtl(__x);}
|
||||||
#endif
|
#endif
|
||||||
|
@ -981,10 +1001,14 @@ inline _LIBCPP_INLINE_VISIBILITY
|
||||||
typename enable_if<is_integral<_A1>::value, double>::type
|
typename enable_if<is_integral<_A1>::value, double>::type
|
||||||
sqrt(_A1 __x) {return sqrt((double)__x);}
|
sqrt(_A1 __x) {return sqrt((double)__x);}
|
||||||
|
|
||||||
|
#ifndef __sun__
|
||||||
|
|
||||||
// tan
|
// tan
|
||||||
|
|
||||||
|
#endif // __sun__
|
||||||
using ::tan;
|
using ::tan;
|
||||||
using ::tanf;
|
using ::tanf;
|
||||||
|
#ifndef __sun__
|
||||||
|
|
||||||
#ifndef _MSC_VER
|
#ifndef _MSC_VER
|
||||||
inline _LIBCPP_INLINE_VISIBILITY float tan(float __x) {return tanf(__x);}
|
inline _LIBCPP_INLINE_VISIBILITY float tan(float __x) {return tanf(__x);}
|
||||||
|
@ -1294,11 +1318,13 @@ using ::lgammaf;
|
||||||
inline _LIBCPP_INLINE_VISIBILITY float lgamma(float __x) {return lgammaf(__x);}
|
inline _LIBCPP_INLINE_VISIBILITY float lgamma(float __x) {return lgammaf(__x);}
|
||||||
inline _LIBCPP_INLINE_VISIBILITY long double lgamma(long double __x) {return lgammal(__x);}
|
inline _LIBCPP_INLINE_VISIBILITY long double lgamma(long double __x) {return lgammal(__x);}
|
||||||
|
|
||||||
|
|
||||||
template <class _A1>
|
template <class _A1>
|
||||||
inline _LIBCPP_INLINE_VISIBILITY
|
inline _LIBCPP_INLINE_VISIBILITY
|
||||||
typename enable_if<is_integral<_A1>::value, double>::type
|
typename enable_if<is_integral<_A1>::value, double>::type
|
||||||
lgamma(_A1 __x) {return lgamma((double)__x);}
|
lgamma(_A1 __x) {return lgamma((double)__x);}
|
||||||
|
|
||||||
|
|
||||||
// llrint
|
// llrint
|
||||||
|
|
||||||
using ::llrint;
|
using ::llrint;
|
||||||
|
@ -1392,8 +1418,10 @@ lround(_A1 __x) {return lround((double)__x);}
|
||||||
|
|
||||||
// nan
|
// nan
|
||||||
|
|
||||||
|
#endif // __sun__
|
||||||
using ::nan;
|
using ::nan;
|
||||||
using ::nanf;
|
using ::nanf;
|
||||||
|
#ifndef __sun__
|
||||||
|
|
||||||
// nearbyint
|
// nearbyint
|
||||||
|
|
||||||
|
@ -1635,6 +1663,10 @@ using ::tgammal;
|
||||||
using ::truncl;
|
using ::truncl;
|
||||||
#endif // !_MSC_VER
|
#endif // !_MSC_VER
|
||||||
|
|
||||||
|
#else
|
||||||
|
using ::lgamma;
|
||||||
|
using ::lgammaf;
|
||||||
|
#endif // __sun__
|
||||||
_LIBCPP_END_NAMESPACE_STD
|
_LIBCPP_END_NAMESPACE_STD
|
||||||
|
|
||||||
#endif // _LIBCPP_CMATH
|
#endif // _LIBCPP_CMATH
|
||||||
|
|
|
@ -132,7 +132,8 @@ using ::wctomb;
|
||||||
using ::mbstowcs;
|
using ::mbstowcs;
|
||||||
using ::wcstombs;
|
using ::wcstombs;
|
||||||
|
|
||||||
#ifndef _MSC_VER // MSVC already has the correct prototype in <stdlib.h.h> #ifdef __cplusplus
|
// MSVC already has the correct prototype in <stdlib.h.h> #ifdef __cplusplus
|
||||||
|
#if !defined(_MSC_VER) && !defined(__sun__)
|
||||||
inline _LIBCPP_INLINE_VISIBILITY long abs( long __x) {return labs(__x);}
|
inline _LIBCPP_INLINE_VISIBILITY long abs( long __x) {return labs(__x);}
|
||||||
inline _LIBCPP_INLINE_VISIBILITY long long abs(long long __x) {return llabs(__x);}
|
inline _LIBCPP_INLINE_VISIBILITY long long abs(long long __x) {return llabs(__x);}
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,7 @@ using ::strspn;
|
||||||
using ::strstr;
|
using ::strstr;
|
||||||
|
|
||||||
// MSVC, GNU libc and its derivates already have the correct prototype in <string.h> #ifdef __cplusplus
|
// MSVC, GNU libc and its derivates already have the correct prototype in <string.h> #ifdef __cplusplus
|
||||||
#if !defined(__GLIBC__) && !defined(_MSC_VER)
|
#if !defined(__GLIBC__) && !defined(_MSC_VER) && !defined(__sun__)
|
||||||
inline _LIBCPP_INLINE_VISIBILITY char* strchr( char* __s, int __c) {return ::strchr(__s, __c);}
|
inline _LIBCPP_INLINE_VISIBILITY char* strchr( char* __s, int __c) {return ::strchr(__s, __c);}
|
||||||
inline _LIBCPP_INLINE_VISIBILITY char* strpbrk( char* __s1, const char* __s2) {return ::strpbrk(__s1, __s2);}
|
inline _LIBCPP_INLINE_VISIBILITY char* strpbrk( char* __s1, const char* __s2) {return ::strpbrk(__s1, __s2);}
|
||||||
inline _LIBCPP_INLINE_VISIBILITY char* strrchr( char* __s, int __c) {return ::strrchr(__s, __c);}
|
inline _LIBCPP_INLINE_VISIBILITY char* strrchr( char* __s, int __c) {return ::strrchr(__s, __c);}
|
||||||
|
|
|
@ -7,6 +7,12 @@
|
||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
// On Solaris, we need to define something to make the C99 parts of localeconv
|
||||||
|
// visible.
|
||||||
|
#ifdef __sun__
|
||||||
|
#define _LCONV_C99
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "string"
|
#include "string"
|
||||||
#include "locale"
|
#include "locale"
|
||||||
#include "codecvt"
|
#include "codecvt"
|
||||||
|
@ -925,11 +931,16 @@ ctype<char>::classic_table() _NOEXCEPT
|
||||||
return _DefaultRuneLocale.__runetype;
|
return _DefaultRuneLocale.__runetype;
|
||||||
#elif defined(__GLIBC__)
|
#elif defined(__GLIBC__)
|
||||||
return __cloc()->__ctype_b;
|
return __cloc()->__ctype_b;
|
||||||
|
#elif __sun__
|
||||||
|
return __ctype_mask;
|
||||||
#elif _WIN32
|
#elif _WIN32
|
||||||
return _ctype+1; // internal ctype mask table defined in msvcrt.dll
|
return _ctype+1; // internal ctype mask table defined in msvcrt.dll
|
||||||
// This is assumed to be safe, which is a nonsense assumption because we're
|
// This is assumed to be safe, which is a nonsense assumption because we're
|
||||||
// going to end up dereferencing it later...
|
// going to end up dereferencing it later...
|
||||||
#else
|
#else
|
||||||
|
// Platform not supported: abort so the person doing the port knows what to
|
||||||
|
// fix
|
||||||
|
abort();
|
||||||
return NULL;
|
return NULL;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,9 @@
|
||||||
#include "random"
|
#include "random"
|
||||||
#include "system_error"
|
#include "system_error"
|
||||||
|
|
||||||
|
#ifdef __sun__
|
||||||
|
#define rename solaris_headers_are_broken
|
||||||
|
#endif
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
#include "vector"
|
#include "vector"
|
||||||
#include "future"
|
#include "future"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#if !_WIN32
|
#if !_WIN32 && !__sun__
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue