After base r319971 some applications not already linked against threading library started to hang in [umtxn] state. It affects at least Beignet. However, bisecting jemalloc as part of libc requires 8 steps of rebasing FreeBSD-specific changes. Maybe someone can suggest more apps to try that can trigger the issue. $ pkg install clinfo beignet # requires bug 217635 $ LD_PRELOAD=/lib/libthr.so.3 clinfo # works fine $ gdb clinfo (gdb) r Starting program: /usr/local/bin/clinfo Number of platforms 1 Platform Name Intel Gen OCL Driver Platform Vendor Intel Platform Version OpenCL 2.0 beignet 1.3 Platform Profile FULL_PROFILE Platform Extensions cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_byte_addressable_store cl_khr_3d_image_writes cl_khr_image2d_from_buffer cl_khr_depth_images cl_khr_spir cl_khr_icd cl_intel_accelerator cl_intel_subgroups cl_intel_subgroups_short cl_khr_gl_sharing Platform Extensions function suffix Intel [New LWP 102018 of process 60317] ^C Thread 1 received signal SIGINT, Interrupt. _umtx_op_err () at /usr/src/lib/libthr/arch/amd64/amd64/_umtx_op_err.S:37 37 RSYSCALL_ERR(_umtx_op) (gdb) bt #0 _umtx_op_err () at /usr/src/lib/libthr/arch/amd64/amd64/_umtx_op_err.S:37 #1 0x0000000803c579e4 in __thr_umutex_lock (mtx=0x803e7dc78 <_mutex_static_lock>, id=101914) at /usr/src/lib/libthr/thread/thr_umtx.c:80 #2 0x0000000803c61acc in _thr_umutex_lock (mtx=0x803e7dc78 <_mutex_static_lock>, id=101914) at /usr/src/lib/libthr/thread/thr_umtx.h:123 #3 0x0000000803c619b4 in init_static (thread=0x80068b000, mutex=0x801348e50) at /usr/src/lib/libthr/thread/thr_mutex.c:304 #4 0x0000000803c602f8 in check_and_init_mutex (mutex=0x801348e50, m=0x7fffffff2de0) at /usr/src/lib/libthr/thread/thr_mutex.c:598 #5 0x0000000803c5f689 in __pthread_mutex_trylock (mutex=0x801348e50) at /usr/src/lib/libthr/thread/thr_mutex.c:614 #6 0x0000000800d656b9 in malloc_mutex_trylock_final (mutex=0x801348e10) at /usr/src/contrib/jemalloc/include/jemalloc/internal/mutex.h:144 #7 0x0000000800d59602 in malloc_mutex_lock (tsdn=0x80063c088, mutex=0x801348e10) at /usr/src/contrib/jemalloc/include/jemalloc/internal/mutex.h:202 #8 0x0000000800d5b6b8 in __je_arena_tcache_fill_small (tsdn=0x80063c088, arena=0x801344980, tcache=0x80063c240, tbin=0x80063c2e0, binind=6, prof_accumbytes=0) at jemalloc_arena.c:1433 #9 0x0000000800cd7013 in __je_tcache_alloc_small_hard (tsdn=0x80063c088, arena=0x801344980, tcache=0x80063c240, tbin=0x80063c2e0, binind=6, tcache_success=0x7fffffff53f6) at jemalloc_tcache.c:93 #10 0x0000000800d8ea3e in tcache_alloc_small (tsd=0x80063c088, arena=0x801344980, tcache=0x80063c240, size=96, binind=6, zero=true, slow_path=false) at /usr/src/contrib/jemalloc/include/jemalloc/internal/tcache_inlines.h:86 #11 arena_malloc (tsdn=0x80063c088, arena=0x0, size=96, ind=6, zero=true, tcache=0x80063c240, slow_path=false) at /usr/src/contrib/jemalloc/include/jemalloc/internal/arena_inlines_b.h:101 #12 iallocztm (tsdn=0x80063c088, size=96, ind=6, zero=true, tcache=0x80063c240, is_internal=false, arena=0x0, slow_path=false) at /usr/src/contrib/jemalloc/include/jemalloc/internal/jemalloc_internal_inlines_c.h:33 #13 imalloc_no_sample (sopts=0x7fffffff5300, dopts=0x7fffffff52d0, tsd=0x80063c088, size=96, usize=96, ind=6) at jemalloc_jemalloc.c:1654 #14 imalloc_body (sopts=0x7fffffff5300, dopts=0x7fffffff52d0, tsd=0x80063c088) at jemalloc_jemalloc.c:1850 #15 imalloc (sopts=0x7fffffff5300, dopts=0x7fffffff52d0) at jemalloc_jemalloc.c:1950 #16 __calloc (num=1, size=96) at jemalloc_jemalloc.c:2064 #17 0x0000000803c5fc0e in mutex_init (mutex=0x801348e50, mutex_attr=0x803e72758 <_pthread_mutexattr_default>, calloc_cb=0x800d8bea0 <__calloc>) at /usr/src/lib/libthr/thread/thr_mutex.c:292 #18 0x0000000803c619dc in init_static (thread=0x80068b000, mutex=0x801348e50) at /usr/src/lib/libthr/thread/thr_mutex.c:307 #19 0x0000000803c602f8 in check_and_init_mutex (mutex=0x801348e50, m=0x7fffffff60d0) at /usr/src/lib/libthr/thread/thr_mutex.c:598 #20 0x0000000803c5f689 in __pthread_mutex_trylock (mutex=0x801348e50) at /usr/src/lib/libthr/thread/thr_mutex.c:614 #21 0x0000000800d656b9 in malloc_mutex_trylock_final (mutex=0x801348e10) at /usr/src/contrib/jemalloc/include/jemalloc/internal/mutex.h:144 #22 0x0000000800d59602 in malloc_mutex_lock (tsdn=0x80063c088, mutex=0x801348e10) at /usr/src/contrib/jemalloc/include/jemalloc/internal/mutex.h:202 #23 0x0000000800d5b6b8 in __je_arena_tcache_fill_small (tsdn=0x80063c088, arena=0x801344980, tcache=0x80063c240, tbin=0x80063c2e0, binind=6, prof_accumbytes=0) at jemalloc_arena.c:1433 #24 0x0000000800cd7013 in __je_tcache_alloc_small_hard (tsdn=0x80063c088, arena=0x801344980, tcache=0x80063c240, tbin=0x80063c2e0, binind=6, tcache_success=0x7fffffff86d6) at jemalloc_tcache.c:93 #25 0x0000000800d72886 in tcache_alloc_small (tsd=0x80063c088, arena=0x801344980, tcache=0x80063c240, size=88, binind=6, zero=false, slow_path=false) at /usr/src/contrib/jemalloc/include/jemalloc/internal/tcache_inlines.h:86 #26 arena_malloc (tsdn=0x80063c088, arena=0x0, size=88, ind=6, zero=false, tcache=0x80063c240, slow_path=false) at /usr/src/contrib/jemalloc/include/jemalloc/internal/arena_inlines_b.h:101 #27 iallocztm (tsdn=0x80063c088, size=88, ind=6, zero=false, tcache=0x80063c240, is_internal=false, arena=0x0, slow_path=false) at /usr/src/contrib/jemalloc/include/jemalloc/internal/jemalloc_internal_inlines_c.h:33 #28 imalloc_no_sample (sopts=0x7fffffff85e0, dopts=0x7fffffff85b0, tsd=0x80063c088, size=88, usize=96, ind=6) at jemalloc_jemalloc.c:1654 #29 imalloc_body (sopts=0x7fffffff85e0, dopts=0x7fffffff85b0, tsd=0x80063c088) at jemalloc_jemalloc.c:1850 #30 imalloc (sopts=0x7fffffff85e0, dopts=0x7fffffff85b0) at jemalloc_jemalloc.c:1950 #31 __malloc (size=88) at jemalloc_jemalloc.c:1981 #32 0x00000008033b81a8 in operator new (size=88) at /usr/src/contrib/libc++/src/new.cpp:70 #33 0x000000080803aa89 in llvm::User::operator new(unsigned long, unsigned int) () from /usr/local/lib/beignet//libgbe.so #34 0x0000000806ea6b34 in clang::CodeGen::CodeGenFunction::StartFunction(clang::GlobalDecl, clang::QualType, llvm::Function*, clang::CodeGen::CGFunctionInfo const&, clang::CodeGen::FunctionArgList const&, clang::SourceLocation, clang::SourceLocation) () from /usr/local/lib/beignet//libgbe.so #35 0x0000000806ea8551 in clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) () from /usr/local/lib/beignet//libgbe.so #36 0x0000000806eba8d9 in clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) () from /usr/local/lib/beignet//libgbe.so #37 0x0000000806eb6774 in clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) () from /usr/local/lib/beignet//libgbe.so #38 0x0000000806ebc322 in clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) () from /usr/local/lib/beignet//libgbe.so #39 0x0000000806e3c82f in (anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef) () from /usr/local/lib/beignet//libgbe.so #40 0x0000000806e2fb85 in clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef) () from /usr/local/lib/beignet//libgbe.so #41 0x00000008077d0462 in clang::ParseAST(clang::Sema&, bool, bool) () from /usr/local/lib/beignet//libgbe.so #42 0x0000000806bdc2b9 in clang::FrontendAction::Execute() () from /usr/local/lib/beignet//libgbe.so #43 0x0000000806ba2cf1 in clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) () from /usr/local/lib/beignet//libgbe.so std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >&, unsigned long, char*, unsigned long*, unsigned int) () from /usr/local/lib/beignet//libgbe.so #45 0x00000008067848b3 in gbe::programNewFromSource(unsigned int, char const*, unsigned long, char const*, char*, unsigned long*) () from /usr/local/lib/beignet//libgbe.so #46 0x00000008019617c7 in cl_program_build (p=0x8006cd1c0, options=0x801992f4d "") at src/cl_program.c:626 #47 0x0000000801952782 in clBuildProgram (program=0x8006cd1c0, num_devices=1, device_list=0x7fffffffe050, options=0x801992f4d "", pfn_notify=0x0, user_data=0x0) at src/cl_api.c:835 #48 0x00000008019757b4 in cl_self_test (device=0x801bcf2a0 <intel_skl_gt2_device>, atomic_in_l3_flag=SELF_TEST_PASS) at src/cl_device_id.c:856 #49 0x0000000801975a3e in cl_get_device_ids (platform=0x801bcb3d8 <intel_platform_data>, device_type=4294967295, num_entries=0, devices=0x0, num_devices=0x8007e8cf0) at src/cl_device_id.c:911 #50 0x00000008019554b3 in clGetDeviceIDs (platform=0x801bcb3d8 <intel_platform_data>, device_type=4294967295, num_entries=0, devices=0x0, num_devices=0x8007e8cf0) at src/cl_api_device_id.c:43 #51 0x000000080083e065 in clGetDeviceIDs (platform=0x801bcb3d8 <intel_platform_data>, device_type=4294967295, num_entries=0, devices=0x0, num_devices=0x8007e8cf0) at ocl_icd_loader_gen.c:58 #52 0x0000000000402341 in printPlatformInfo (p=0) at src/clinfo.c:459 #53 0x000000000040a3bd in main (argc=1, argv=0x7fffffffe2b8) at src/clinfo.c:2676
Created attachment 184402 [details] "bt full" output
The same thing happens with `games/quake2lnx'. Similarly, if I link it explicitly against libpthread or run it as ``env LD_PRELOAD=/lib/libthr.so.3 quake2 ...'' it starts normally. I'm reluctant to make changes to the port though before we know what particular change in jemalloc is breaking previously working code (ports), and if that code just worked by accident, or the bug had sneaked into jemalloc 5.0.0.
Last two comments in https://github.com/jemalloc/jemalloc/issues/907 (October 10th-ish) might or might not be related.
Do we have tests for base r276630? For one, jemalloc 5.0.0 changed bool malloc_mutex_first_thread(void) { #ifdef JEMALLOC_MUTEX_INIT_CB postpone_init = false; while (postponed_mutexes != NULL) { if (_pthread_mutex_init_calloc_cb(&postponed_mutexes->lock, bootstrap_calloc) != 0) return (true); postponed_mutexes = postponed_mutexes->postponed_next; } #endif return (false); } into bool malloc_mutex_first_thread(void) { #ifndef JEMALLOC_MUTEX_INIT_CB return (malloc_mutex_first_thread()); #else return (false); #endif }
(In reply to Jan Beich from comment #4) FWIW, I've tried to play with malloc_mutex_first_thread() implementation, JEMALLOC_MUTEX_INIT_CB (+ some related macros), using different atomics implementation in jemalloc 5.0.0, all without any luck. For the record, I'm including this advice from John Baldwin: > I wonder if it is tripping over pthread_once not working in libc. The stub > for pthread_once in libc is a nop and has been for a long time. I added > a functioning stub (called _libc_once) to libc for it's internal use (there > is a _once() wrapper that will call _pthread_once when using libpthread and > _libc_once otherwise). It might be interesting to build jemalloc with > '-Dpthread_once=_once' to see if that makes a difference? I've tried this as well and it did not help.
I don't have any specific ideas as to why this is happening. Bootstrapping jemalloc on FreeBSD is really tricky, because pthreads mutexes use malloc, and jemalloc has to jump through hoops to initialize its mutexes in multiple phases. It looks like beignet depends on the libpthread-stubs package. Is it possible that the stubs don't sufficiently stub out the libc-internal hooks that jemalloc uses to bootstrap? Here's a list of pthreads-related symbols jemalloc depends on (generated by building stand-alone jemalloc): _pthread_mutex_init_calloc_cb je_pthread_create_wrapper pthread_cond_init pthread_cond_signal pthread_cond_timedwait pthread_cond_wait pthread_create pthread_create_fptr pthread_join pthread_mutex_lock pthread_mutex_trylock pthread_mutex_unlock pthread_sigmask
(In reply to Jason Evans from comment #6) Some facts: - libpthread-stubs is an alias to -pthread since ports r437182 - beignet doesn't use libpthread-stubs - mesa-libs uses libpthread-stubs - beignet optionally uses mesa-libs for cl_khr_gl_sharing - libcl (from beignet) is already linked against libpthread - ocl-icd uses dlopen() to pull libcl - clinfo isn't linked against libpthread After disabling beignet -> mesa-libs dependency clinfo crashes if not passed LD_PRELOAD=/lib/libthr.so.3: $ clinfo Number of platforms 1 Platform Name Intel Gen OCL Driver Platform Vendor Intel Platform Version OpenCL 2.0 beignet 1.3 Platform Profile FULL_PROFILE Platform Extensions cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_byte_addressable_store cl_khr_3d_image_writes cl_khr_image2d_from_buffer cl_khr_depth_images cl_khr_spir cl_khr_icd cl_intel_accelerator cl_intel_subgroups cl_intel_subgroups_short Platform Extensions function suffix Intel [New LWP 101911 of process 86314] Thread 1 received signal SIGSEGV, Segmentation fault. 0x0000000802463650 in clang::CodeGen::LValue::MakeAddr(clang::CodeGen::Address, clang::QualType, clang::ASTContext&, clang::CodeGen::LValueBaseInfo, clang::CodeGen::TBAAAccessInfo) () from /usr/local/lib/beignet//libgbe.so (gdb) backtrace #0 0x0000000802463650 in clang::CodeGen::LValue::MakeAddr(clang::CodeGen::Address, clang::QualType, clang::ASTContext&, clang::CodeGen::LValueBaseInfo, clang::CodeGen::TBAAAccessInfo) () from /usr/local/lib/beignet//libgbe.so #1 0x0000000802482287 in clang::CodeGen::CodeGenFunction::EmitDeclRefLValue(clang::DeclRefExpr const*) () from /usr/local/lib/beignet//libgbe.so #2 0x0000000802477b79 in clang::CodeGen::CodeGenFunction::EmitLValue(clang::Expr const*) () from /usr/local/lib/beignet//libgbe.so #3 0x000000080247fc13 in clang::CodeGen::CodeGenFunction::EmitCheckedLValue(clang::Expr const*, clang::CodeGen::CodeGenFunction::TypeCheckKind) () from /usr/local/lib/beignet//libgbe.so #4 0x0000000802519c36 in clang::StmtVisitorBase<clang::make_ptr, (anonymous namespace)::ScalarExprEmitter, llvm::Value*>::Visit(clang::Stmt*) () from /usr/local/lib/beignet//libgbe.so #5 0x00000008025205fa in (anonymous namespace)::ScalarExprEmitter::VisitCastExpr(clang::CastExpr*) () from /usr/local/lib/beignet//libgbe.so #6 0x0000000802510258 in clang::CodeGen::CodeGenFunction::EmitScalarExpr(clang::Expr const*, bool) () from /usr/local/lib/beignet//libgbe.so #7 0x000000080247f015 in clang::CodeGen::CodeGenFunction::EmitPointerWithAlignment(clang::Expr const*, clang::CodeGen::LValueBaseInfo*, clang::CodeGen::TBAAAccessInfo*) () from /usr/local/lib/beignet//libgbe.so #8 0x0000000802480352 in clang::CodeGen::CodeGenFunction::EmitArraySubscriptExpr(clang::ArraySubscriptExpr const*, bool) () from /usr/local/lib/beignet//libgbe.so #9 0x0000000802477c51 in clang::CodeGen::CodeGenFunction::EmitLValue(clang::Expr const*) () from /usr/local/lib/beignet//libgbe.so #10 0x000000080247fc13 in clang::CodeGen::CodeGenFunction::EmitCheckedLValue(clang::Expr const*, clang::CodeGen::CodeGenFunction::TypeCheckKind) () from /usr/local/lib/beignet//libgbe.so #11 0x0000000802519c36 in clang::StmtVisitorBase<clang::make_ptr, (anonymous namespace)::ScalarExprEmitter, llvm::Value*>::Visit(clang::Stmt*) () from /usr/local/lib/beignet//libgbe.so #12 0x00000008025205fa in (anonymous namespace)::ScalarExprEmitter::VisitCastExpr(clang::CastExpr*) () from /usr/local/lib/beignet//libgbe.so #13 0x0000000802515f57 in clang::StmtVisitorBase<clang::make_ptr, (anonymous namespace)::ScalarExprEmitter, llvm::Value*>::Visit(clang::Stmt*) () from /usr/local/lib/beignet//libgbe.so #14 0x0000000802510258 in clang::CodeGen::CodeGenFunction::EmitScalarExpr(clang::Expr const*, bool) () from /usr/local/lib/beignet//libgbe.so #15 0x0000000802477572 in clang::CodeGen::CodeGenFunction::EmitAnyExpr(clang::Expr const*, clang::CodeGen::AggValueSlot, bool) () from /usr/local/lib/beignet//libgbe.so #16 0x0000000802477524 in clang::CodeGen::CodeGenFunction::EmitIgnoredExpr(clang::Expr const*) () from /usr/local/lib/beignet//libgbe.so #17 0x00000008024c07b1 in clang::CodeGen::CodeGenFunction::EmitStmt(clang::Stmt const*, llvm::ArrayRef<clang::Attr const*>) () from /usr/local/lib/beignet//libgbe.so #18 0x00000008024c933f in clang::CodeGen::CodeGenFunction::EmitCompoundStmtWithoutScope(clang::CompoundStmt const&, bool, clang::CodeGen::AggValueSlot) () from /usr/local/lib/beignet//libgbe.so #19 0x00000008026085d5 in clang::CodeGen::CodeGenFunction::GenerateCode(clang::GlobalDecl, llvm::Function*, clang::CodeGen::CGFunctionInfo const&) () from /usr/local/lib/beignet//libgbe.so #20 0x000000080261db9c in clang::CodeGen::CodeGenModule::EmitGlobalFunctionDefinition(clang::GlobalDecl, llvm::GlobalValue*) () from /usr/local/lib/beignet//libgbe.so #21 0x0000000802617c64 in clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) () from /usr/local/lib/beignet//libgbe.so #22 0x0000000802620852 in clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) () from /usr/local/lib/beignet//libgbe.so #23 0x00000008026f1d3f in (anonymous namespace)::CodeGeneratorImpl::HandleTopLevelDecl(clang::DeclGroupRef) () from /usr/local/lib/beignet//libgbe.so #24 0x000000080243956a in clang::BackendConsumer::HandleTopLevelDecl(clang::DeclGroupRef) () from /usr/local/lib/beignet//libgbe.so #25 0x000000080303ac22 in clang::ParseAST(clang::Sema&, bool, bool) () from /usr/local/lib/beignet//libgbe.so #26 0x000000080212f969 in clang::FrontendAction::Execute() () from /usr/local/lib/beignet//libgbe.so #27 0x00000008020e6ec1 in clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) () from /usr/local/lib/beignet//libgbe.so #28 0x0000000801c84381 in gbe::buildModuleFromSource ( source=0x8013392a0 "__kernel void self_test(__global int *buf) { __local int tmp[3]; tmp[get_local_id(0)] = buf[get_local_id(0)]; barrier(CLK_LOCAL_MEM_FENCE); buf[get_global_id(0)] = tmp[2 - get_local_id(0)] + buf[g"..., out_module=0x7fffffffda70, llvm_ctx=0x800257440, dumpLLVMFileName=..., dumpSPIRBinaryName=..., options=..., stringSize=1048576, err=0x8078435c0 "", errSize=0x801339288, oclVersion=120) at backend/src/backend/program.cpp:735 #29 0x0000000801c7035d in gbe::programNewFromSource (deviceID=6418, source=0x8013392a0 "__kernel void self_test(__global int *buf) { __local int tmp[3]; tmp[get_local_id(0)] = buf[get_local_id(0)]; barrier(CLK_LOCAL_MEM_FENCE); buf[get_global_id(0)] = tmp[2 - get_local_id(0)] + buf[g"..., stringSize=1048576, options=0x8008addaa "", err=0x8078435c0 "", errSize=0x801339288) at backend/src/backend/program.cpp:1058 #30 0x00000008008d2b77 in cl_program_build (p=0x8013391c0, options=0x8008addaa "") at src/cl_program.c:597 #31 0x00000008008c2cdd in clBuildProgram (program=0x8013391c0, num_devices=1, device_list=0x7fffffffe040, options=0x8008addaa "", pfn_notify=0x0, user_data=0x0) at src/cl_api.c:835 #32 0x00000008008e85d4 in cl_self_test (device=0x800945218 <intel_skl_gt2_device>, atomic_in_l3_flag=SELF_TEST_PASS) at src/cl_device_id.c:900 #33 0x00000008008e885e in cl_get_device_ids (platform=0x800941238 <intel_platform_data>, device_type=4294967295, num_entries=0, devices=0x0, num_devices=0x8033dbeb0) at src/cl_device_id.c:955 #34 0x00000008008c6093 in clGetDeviceIDs (platform=0x800941238 <intel_platform_data>, device_type=4294967295, num_entries=0, devices=0x0, num_devices=0x8033dbeb0) at src/cl_api_device_id.c:43 #35 0x000000080025fada in clGetDeviceIDs_hid () from /usr/local/lib/libOpenCL.so.1 #36 0x0000000000207071 in printPlatformInfo (p=0) at src/clinfo.c:459 #37 0x000000000020f0ed in main (argc=1, argv=0x7fffffffe278) at src/clinfo.c:2676 Sorry, I didn't build devel/llvm* with debug symbols this time.
dlopen'ing libpthread should be supported since base r276630.
I've just tested Quake 2 again after jemalloc update to version 5.1.0 as per base r333477, it is still broken. :-(
(In reply to Jason Evans from comment #6) > I don't have any specific ideas as to why this is happening. Bootstrapping > jemalloc on FreeBSD is really tricky, because pthreads mutexes use malloc, > and jemalloc has to jump through hoops to initialize its mutexes in multiple > phases [...] OK, but can you think of anything that had *changed* between 5.0.0 vs 4.5.0 in that area that could've caused this regression? Looks like some software was working fine for years (that is the case at least for Quake2) until 5.0.0 hit the tree, so I want to know if 5.0.0 had revealed a bug in those programs, or rather introduced a bug into itself?
It very much looks like base r343566 might finally fix this. On the latest -CURRENT, Quake II starts normally again.
I confirm. beignet issue is masked (see below) after ports r473868, so I had to downgrade the port before testing base r343566. $ ldd -a =clinfo /usr/local/bin/clinfo: libOpenCL.so.1 => /usr/local/lib/libOpenCL.so.1 (0x800259000) libc.so.7 => /lib/libc.so.7 (0x800276000) /usr/local/lib/libOpenCL.so.1: libdl.so.1 => /usr/lib/libdl.so.1 (0x800697000) libthr.so.3 => /lib/libthr.so.3 (0x80069b000) <--- LOOK HERE libc.so.7 => /lib/libc.so.7 (0x800276000) /usr/lib/libdl.so.1: libc.so.7 => /lib/libc.so.7 (0x800276000) /lib/libthr.so.3: libc.so.7 => /lib/libc.so.7 (0x800276000)
lang/beignet expired today and has been removed.