summaryrefslogtreecommitdiffstats
path: root/libcxx/include
diff options
context:
space:
mode:
authorEd Schouten <ed@nuxi.nl>2015-06-24 08:44:38 +0000
committerEd Schouten <ed@nuxi.nl>2015-06-24 08:44:38 +0000
commite0cf3b9a3ca8d80d313d1e2e5b8c70d73d10e933 (patch)
tree9141a10ef3fbd7899b821275956fda61b01da73d /libcxx/include
parentaa315fbb4c18b0bfcd54658f3f5b67600f097f8c (diff)
downloadbcm5719-llvm-e0cf3b9a3ca8d80d313d1e2e5b8c70d73d10e933.tar.gz
bcm5719-llvm-e0cf3b9a3ca8d80d313d1e2e5b8c70d73d10e933.zip
Make support for thread-unsafe C functions optional.
One of the aspects of CloudABI is that it aims to help you write code that is thread-safe out of the box. This is very important if you want to write libraries that are easy to reuse. For CloudABI we decided to not provide the thread-unsafe functions. So far this is working out pretty well, as thread-unsafety issues are detected really early on. The following patch adds a knob to libc++, _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS, that can be set to disable thread-unsafe functions that can easily be avoided in practice. The following functions are not thread-safe: - <clocale>: locale handles should be preferred over setlocale(). - <cstdlib>: mbrlen(), mbrtowc() and wcrtomb() should be preferred over their non-restartable counterparts. - <ctime>: asctime(), ctime(), gmtime() and localtime() are not thread-safe. The first two are also deprecated by POSIX. Differential Revision: http://reviews.llvm.org/D8703 Reviewed by: marshall llvm-svn: 240527
Diffstat (limited to 'libcxx/include')
-rw-r--r--libcxx/include/__config6
-rw-r--r--libcxx/include/clocale2
-rw-r--r--libcxx/include/cstdlib2
-rw-r--r--libcxx/include/cstring2
-rw-r--r--libcxx/include/ctime2
5 files changed, 14 insertions, 0 deletions
diff --git a/libcxx/include/__config b/libcxx/include/__config
index adf11d3cc4a..62efbf80aa1 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -766,4 +766,10 @@ extern "C" void __sanitizer_annotate_contiguous_container(
#define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE
#endif
+// Thread-unsafe functions such as strtok(), mbtowc() and localtime()
+// are not available.
+#ifdef __CloudABI__
+#define _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS
+#endif
+
#endif // _LIBCPP_CONFIG
diff --git a/libcxx/include/clocale b/libcxx/include/clocale
index f8b8f0dd34b..05fa9c6edda 100644
--- a/libcxx/include/clocale
+++ b/libcxx/include/clocale
@@ -45,7 +45,9 @@ lconv* localeconv();
_LIBCPP_BEGIN_NAMESPACE_STD
using ::lconv;
+#ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS
using ::setlocale;
+#endif
using ::localeconv;
_LIBCPP_END_NAMESPACE_STD
diff --git a/libcxx/include/cstdlib b/libcxx/include/cstdlib
index 298040e3f49..55e15c82192 100644
--- a/libcxx/include/cstdlib
+++ b/libcxx/include/cstdlib
@@ -147,9 +147,11 @@ using ::ldiv;
#undef lldiv
using ::lldiv;
#endif // _LIBCPP_HAS_NO_LONG_LONG
+#ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS
using ::mblen;
using ::mbtowc;
using ::wctomb;
+#endif
using ::mbstowcs;
using ::wcstombs;
#ifdef _LIBCPP_HAS_QUICK_EXIT
diff --git a/libcxx/include/cstring b/libcxx/include/cstring
index 21c9155cd4d..d60b9923c6c 100644
--- a/libcxx/include/cstring
+++ b/libcxx/include/cstring
@@ -102,7 +102,9 @@ inline _LIBCPP_INLINE_VISIBILITY void* memchr( void* __s, int __c, si
inline _LIBCPP_INLINE_VISIBILITY char* strstr( char* __s1, const char* __s2) {return ::strstr(__s1, __s2);}
#endif
+#ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS
using ::strtok;
+#endif
using ::memset;
using ::strerror;
using ::strlen;
diff --git a/libcxx/include/ctime b/libcxx/include/ctime
index fc4eb26f543..da9e3290bbb 100644
--- a/libcxx/include/ctime
+++ b/libcxx/include/ctime
@@ -61,10 +61,12 @@ using ::clock;
using ::difftime;
using ::mktime;
using ::time;
+#ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS
using ::asctime;
using ::ctime;
using ::gmtime;
using ::localtime;
+#endif
using ::strftime;
_LIBCPP_END_NAMESPACE_STD
OpenPOWER on IntegriCloud