Hi Nico, Hopefully I've sorted this out in r293166/r293167. Please let me know if things are not back to normal.
(I'll keep an eye on your builder too) / Asiri On Wed, Jan 25, 2017 at 8:42 PM, Asiri Rathnayake < asiri.rathnay...@gmail.com> wrote: > Hi Nico, > > Thanks for the links. I may have a clue to what is going on. > > I think in your Mac environment, <pthread.h> does not provide > either pthread_mach_thread_np() function or define the type mach_port_t > (is there a way for you to check this btw? just to make sure). > > This was not a problem before (for your builds) because this function was > only used in libcxxabi sources. In my eagerness to get rid of all pthread > dependencies in libcxx/libcxxabi, I have lifted this out into > __threading_support header in libcxx (which is our new threading API for > both libcxx and libcxxabi). > > @Eric: would it be OK to leave this Mac-specific pthread dependency in > libcxxabi sources as it was? In that way, libcxx builds like Nico's won't > be affected. > > Another option is to try and detect the conditions (on Mac environments) > where pthread_mach_thread_np/mach_port_t is available, and only define > the corresponding libcxx thread-api function (__libcpp_thread_get_port) > when this condition is true. Unfortunately I'm not familiar with Mac enough > to know this. Any thoughts? > > Side note:- Btw, if I'm correct with the above analysis, it won't be > possible to build libcxxabi in Nico's environment (even before my changes). > The dependency on pthread_mach_thread_np() was already there > in __cxa_guard_acquire(). > > Thanks. > > / Asiri > > > On Wed, Jan 25, 2017 at 7:34 PM, Nico Weber <tha...@chromium.org> wrote: > >> Sure! https://build.chromium.org/p/chromium.fyi/builders/Cla >> ngToTMacASan/builds/8565/steps/gclient%20runhooks/logs/stdio has the >> invocations to build llvm/clang/compiler/rt, and >> https://build.chromium.org/p/chromium.fyi/builders/Clang >> ToTMacASan/builds/8565/steps/compile/logs/stdio is the actual build >> using that setup. >> >> On Wed, Jan 25, 2017 at 1:57 PM, Asiri Rathnayake < >> asiri.rathnay...@gmail.com> wrote: >> >>> @Nico: could you let me know your build configuration? (cmake options) >>> >>> I'm surprised this went unnoticed for so long. >>> >>> Thanks. >>> >>> / Asiri >>> >>> On 25 Jan 2017 5:52 p.m., "Asiri Rathnayake" <asiri.rathnay...@gmail.com> >>> wrote: >>> >>>> (including cfe-commits) >>>> >>>> On Wed, Jan 25, 2017 at 5:51 PM, Asiri Rathnayake < >>>> asiri.rathnay...@gmail.com> wrote: >>>> >>>>> Hi Nico, >>>>> >>>>> On Wed, Jan 25, 2017 at 5:32 PM, Nico Weber via cfe-commits < >>>>> cfe-commits@lists.llvm.org> wrote: >>>>> >>>>>> Is it intentional that this change affects >>>>>> non-LIBCXX_HAS_EXTERNAL_THREAD_API builds at all?# >>>>>> >>>>> >>>>> Nope. But I'm not sure how this got broken on Mac. >>>>> >>>>> IIRC, <pthread.h> defines mach_port_t type on Mac, which gets included >>>>> when _LIBCPP_HAS_THREAD_API_PTHREAD is defined (which is what we >>>>> expect to be the case on Mac, normally). >>>>> >>>>> I'll have to build this on a Mac tomorrow. Hopefully that's OK? >>>>> >>>>> Cheers, >>>>> >>>>> / Asiri >>>>> >>>>> >>>>> >>>>>> >>>>>> On Wed, Jan 25, 2017 at 12:31 PM, Nico Weber <tha...@chromium.org> >>>>>> wrote: >>>>>> >>>>>>> This breaks all our mac builds with: >>>>>>> >>>>>>> /b/c/b/ClangToTMac__dbg_/src/third_party/llvm-build/Release+ >>>>>>> Asserts/bin/../include/c++/v1/__threading_support:154:1: error: >>>>>>> unknown type name 'mach_port_t' >>>>>>> mach_port_t __libcpp_thread_get_port(); >>>>>>> >>>>>>> On Tue, Jan 3, 2017 at 7:59 AM, Asiri Rathnayake via cfe-commits < >>>>>>> cfe-commits@lists.llvm.org> wrote: >>>>>>> >>>>>>>> Author: asiri >>>>>>>> Date: Tue Jan 3 06:59:50 2017 >>>>>>>> New Revision: 290889 >>>>>>>> >>>>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=290889&view=rev >>>>>>>> Log: >>>>>>>> [libcxx] Add build/test support for the externally threaded >>>>>>>> libc++abi variant >>>>>>>> >>>>>>>> Differential revision: https://reviews.llvm.org/D27576 >>>>>>>> >>>>>>>> Reviewers: EricWF >>>>>>>> >>>>>>>> Modified: >>>>>>>> libcxx/trunk/CMakeLists.txt >>>>>>>> libcxx/trunk/include/__threading_support >>>>>>>> libcxx/trunk/test/CMakeLists.txt >>>>>>>> libcxx/trunk/test/libcxx/test/config.py >>>>>>>> libcxx/trunk/test/lit.site.cfg.in >>>>>>>> >>>>>>>> Modified: libcxx/trunk/CMakeLists.txt >>>>>>>> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/CMakeLists. >>>>>>>> txt?rev=290889&r1=290888&r2=290889&view=diff >>>>>>>> ============================================================ >>>>>>>> ================== >>>>>>>> --- libcxx/trunk/CMakeLists.txt (original) >>>>>>>> +++ libcxx/trunk/CMakeLists.txt Tue Jan 3 06:59:50 2017 >>>>>>>> @@ -221,14 +221,21 @@ if(LIBCXX_ENABLE_THREADS AND NOT LIBCXX_ >>>>>>>> " when LIBCXX_ENABLE_THREADS is also set to >>>>>>>> OFF.") >>>>>>>> endif() >>>>>>>> >>>>>>>> -if(LIBCXX_HAS_PTHREAD_API AND NOT LIBCXX_ENABLE_THREADS) >>>>>>>> - message(FATAL_ERROR "LIBCXX_HAS_PTHREAD_API can only be set to >>>>>>>> ON" >>>>>>>> - " when LIBCXX_ENABLE_THREADS is also set to >>>>>>>> ON.") >>>>>>>> +if(NOT LIBCXX_ENABLE_THREADS) >>>>>>>> + if(LIBCXX_HAS_PTHREAD_API) >>>>>>>> + message(FATAL_ERROR "LIBCXX_HAS_PTHREAD_API can only be set to >>>>>>>> ON" >>>>>>>> + " when LIBCXX_ENABLE_THREADS is also set >>>>>>>> to ON.") >>>>>>>> + endif() >>>>>>>> + if(LIBCXX_HAS_EXTERNAL_THREAD_API) >>>>>>>> + message(FATAL_ERROR "LIBCXX_HAS_EXTERNAL_THREAD_API can only >>>>>>>> be set to ON" >>>>>>>> + " when LIBCXX_ENABLE_THREADS is also set >>>>>>>> to ON.") >>>>>>>> + endif() >>>>>>>> endif() >>>>>>>> >>>>>>>> -if(LIBCXX_HAS_EXTERNAL_THREAD_API AND NOT LIBCXX_ENABLE_THREADS) >>>>>>>> - message(FATAL_ERROR "LIBCXX_HAS_EXTERNAL_THREAD_API can only be >>>>>>>> set to ON" >>>>>>>> - " when LIBCXX_ENABLE_THREADS is also set to >>>>>>>> ON.") >>>>>>>> +if(LIBCXX_HAS_PTHREAD_API AND LIBCXX_HAS_EXTERNAL_THREAD_API) >>>>>>>> + message(FATAL_ERROR "The options LIBCXX_HAS_EXTERNAL_THREAD_API" >>>>>>>> + "and LIBCXX_HAS_PTHREAD_API cannot be both" >>>>>>>> + "set to ON at the same time.") >>>>>>>> endif() >>>>>>>> >>>>>>>> # Ensure LLVM_USE_SANITIZER is not specified when >>>>>>>> LIBCXX_GENERATE_COVERAGE >>>>>>>> >>>>>>>> Modified: libcxx/trunk/include/__threading_support >>>>>>>> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__t >>>>>>>> hreading_support?rev=290889&r1=290888&r2=290889&view=diff >>>>>>>> ============================================================ >>>>>>>> ================== >>>>>>>> --- libcxx/trunk/include/__threading_support (original) >>>>>>>> +++ libcxx/trunk/include/__threading_support Tue Jan 3 06:59:50 >>>>>>>> 2017 >>>>>>>> @@ -67,7 +67,11 @@ typedef pthread_mutex_t __libcpp_mutex_t >>>>>>>> typedef pthread_cond_t __libcpp_condvar_t; >>>>>>>> #define _LIBCPP_CONDVAR_INITIALIZER PTHREAD_COND_INITIALIZER >>>>>>>> >>>>>>>> -// THread ID >>>>>>>> +// Execute once >>>>>>>> +typedef pthread_once_t __libcpp_exec_once_flag; >>>>>>>> +#define _LIBCPP_EXEC_ONCE_INITIALIZER PTHREAD_ONCE_INIT >>>>>>>> + >>>>>>>> +// Thread id >>>>>>>> typedef pthread_t __libcpp_thread_id; >>>>>>>> >>>>>>>> // Thread >>>>>>>> @@ -110,7 +114,17 @@ int __libcpp_condvar_timedwait(__libcpp_ >>>>>>>> _LIBCPP_THREAD_ABI_VISIBILITY >>>>>>>> int __libcpp_condvar_destroy(__libcpp_condvar_t* __cv); >>>>>>>> >>>>>>>> -// Thread ID >>>>>>>> +// Execute once >>>>>>>> +_LIBCPP_THREAD_ABI_VISIBILITY >>>>>>>> +int __libcpp_execute_once(__libcpp_exec_once_flag *flag, >>>>>>>> + void (*init_routine)(void)); >>>>>>>> + >>>>>>>> +// Thread id >>>>>>>> +#if defined(__APPLE__) && !defined(__arm__) >>>>>>>> +_LIBCPP_THREAD_ABI_VISIBILITY >>>>>>>> +mach_port_t __libcpp_thread_get_port(); >>>>>>>> +#endif >>>>>>>> + >>>>>>>> _LIBCPP_THREAD_ABI_VISIBILITY >>>>>>>> bool __libcpp_thread_id_equal(__libcpp_thread_id t1, >>>>>>>> __libcpp_thread_id t2); >>>>>>>> >>>>>>>> @@ -145,7 +159,7 @@ _LIBCPP_THREAD_ABI_VISIBILITY >>>>>>>> void *__libcpp_tls_get(__libcpp_tls_key __key); >>>>>>>> >>>>>>>> _LIBCPP_THREAD_ABI_VISIBILITY >>>>>>>> -void __libcpp_tls_set(__libcpp_tls_key __key, void *__p); >>>>>>>> +int __libcpp_tls_set(__libcpp_tls_key __key, void *__p); >>>>>>>> >>>>>>>> #if defined(_LIBCPP_HAS_THREAD_API_PTHREAD) || \ >>>>>>>> defined(_LIBCPP_BUILDING_THREAD_API_EXTERNAL_PTHREAD) >>>>>>>> @@ -221,6 +235,19 @@ int __libcpp_condvar_destroy(__libcpp_co >>>>>>>> return pthread_cond_destroy(__cv); >>>>>>>> } >>>>>>>> >>>>>>>> +// Execute once >>>>>>>> +int __libcpp_execute_once(__libcpp_exec_once_flag *flag, >>>>>>>> + void (*init_routine)(void)) { >>>>>>>> + return pthread_once(flag, init_routine); >>>>>>>> +} >>>>>>>> + >>>>>>>> +// Thread id >>>>>>>> +#if defined(__APPLE__) && !defined(__arm__) >>>>>>>> +mach_port_t __libcpp_thread_get_port() { >>>>>>>> + return pthread_mach_thread_np(pthread_self()); >>>>>>>> +} >>>>>>>> +#endif >>>>>>>> + >>>>>>>> // Returns non-zero if the thread ids are equal, otherwise 0 >>>>>>>> bool __libcpp_thread_id_equal(__libcpp_thread_id t1, >>>>>>>> __libcpp_thread_id t2) >>>>>>>> { >>>>>>>> @@ -276,9 +303,9 @@ void *__libcpp_tls_get(__libcpp_tls_key >>>>>>>> return pthread_getspecific(__key); >>>>>>>> } >>>>>>>> >>>>>>>> -void __libcpp_tls_set(__libcpp_tls_key __key, void *__p) >>>>>>>> +int __libcpp_tls_set(__libcpp_tls_key __key, void *__p) >>>>>>>> { >>>>>>>> - pthread_setspecific(__key, __p); >>>>>>>> + return pthread_setspecific(__key, __p); >>>>>>>> } >>>>>>>> >>>>>>>> #endif // _LIBCPP_HAS_THREAD_API_PTHREAD >>>>>>>> >>>>>>>> Modified: libcxx/trunk/test/CMakeLists.txt >>>>>>>> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/CMakeL >>>>>>>> ists.txt?rev=290889&r1=290888&r2=290889&view=diff >>>>>>>> ============================================================ >>>>>>>> ================== >>>>>>>> --- libcxx/trunk/test/CMakeLists.txt (original) >>>>>>>> +++ libcxx/trunk/test/CMakeLists.txt Tue Jan 3 06:59:50 2017 >>>>>>>> @@ -55,18 +55,20 @@ configure_file( >>>>>>>> ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg >>>>>>>> @ONLY) >>>>>>>> >>>>>>>> +set(LIBCXX_TEST_DEPS "") >>>>>>>> + >>>>>>>> if (LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY) >>>>>>>> - set(experimental_dep cxx_experimental) >>>>>>>> + set(LIBCXX_TEST_DEPS cxx_experimental) >>>>>>>> endif() >>>>>>>> >>>>>>>> if (LIBCXX_HAS_EXTERNAL_THREAD_API) >>>>>>>> - set(external_threads_dep cxx_external_threads) >>>>>>>> + list(APPEND LIBCXX_TEST_DEPS cxx_external_threads) >>>>>>>> endif() >>>>>>>> >>>>>>>> add_lit_testsuite(check-cxx >>>>>>>> "Running libcxx tests" >>>>>>>> ${CMAKE_CURRENT_BINARY_DIR} >>>>>>>> - DEPENDS cxx ${experimental_dep} ${external_threads_dep}) >>>>>>>> + DEPENDS cxx ${LIBCXX_TEST_DEPS}) >>>>>>>> >>>>>>>> add_custom_target(check-libcxx DEPENDS check-cxx) >>>>>>>> >>>>>>>> >>>>>>>> Modified: libcxx/trunk/test/libcxx/test/config.py >>>>>>>> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/libcxx >>>>>>>> /test/config.py?rev=290889&r1=290888&r2=290889&view=diff >>>>>>>> ============================================================ >>>>>>>> ================== >>>>>>>> --- libcxx/trunk/test/libcxx/test/config.py (original) >>>>>>>> +++ libcxx/trunk/test/libcxx/test/config.py Tue Jan 3 06:59:50 >>>>>>>> 2017 >>>>>>>> @@ -579,10 +579,6 @@ class Configuration(object): >>>>>>>> self.cxx.link_flags += [abs_path] >>>>>>>> else: >>>>>>>> self.cxx.link_flags += ['-lc++'] >>>>>>>> - # This needs to come after -lc++ as we want its unresolved >>>>>>>> thread-api symbols >>>>>>>> - # to be picked up from this one. >>>>>>>> - if self.get_lit_bool('libcxx_external_thread_api', >>>>>>>> default=False): >>>>>>>> - self.cxx.link_flags += ['-lc++external_threads'] >>>>>>>> >>>>>>>> def configure_link_flags_abi_library(self): >>>>>>>> cxx_abi = self.get_lit_conf('cxx_abi', 'libcxxabi') >>>>>>>> @@ -611,6 +607,8 @@ class Configuration(object): >>>>>>>> 'C++ ABI setting %s unsupported for tests' % >>>>>>>> cxx_abi) >>>>>>>> >>>>>>>> def configure_extra_library_flags(self): >>>>>>>> + if self.get_lit_bool('cxx_ext_threads', default=False): >>>>>>>> + self.cxx.link_flags += ['-lc++external_threads'] >>>>>>>> self.target_info.add_cxx_link_flags(self.cxx.link_flags) >>>>>>>> >>>>>>>> def configure_color_diagnostics(self): >>>>>>>> >>>>>>>> Modified: libcxx/trunk/test/lit.site.cfg.in >>>>>>>> URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/lit.si >>>>>>>> te.cfg.in?rev=290889&r1=290888&r2=290889&view=diff >>>>>>>> ============================================================ >>>>>>>> ================== >>>>>>>> --- libcxx/trunk/test/lit.site.cfg.in (original) >>>>>>>> +++ libcxx/trunk/test/lit.site.cfg.in Tue Jan 3 06:59:50 2017 >>>>>>>> @@ -28,7 +28,7 @@ config.has_libatomic = "@LIBC >>>>>>>> config.use_libatomic = "@LIBCXX_HAVE_CXX_ATOMICS_WITH >>>>>>>> _LIB@" >>>>>>>> >>>>>>>> config.libcxxabi_shared = "@LIBCXXABI_ENABLE_SHARED@" >>>>>>>> -config.libcxx_external_thread_api = >>>>>>>> "@LIBCXX_HAS_EXTERNAL_THREAD_API@" >>>>>>>> +config.cxx_ext_threads = "@LIBCXX_HAS_EXTERNAL_THREAD_A >>>>>>>> PI@" >>>>>>>> >>>>>>>> # Let the main config do the real work. >>>>>>>> config.loaded_site_config = True >>>>>>>> >>>>>>>> >>>>>>>> _______________________________________________ >>>>>>>> cfe-commits mailing list >>>>>>>> cfe-commits@lists.llvm.org >>>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> cfe-commits mailing list >>>>>> cfe-commits@lists.llvm.org >>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>>>>> >>>>>> >>>>> >>>> >> >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits