| Summary: | lang/beignet: crashes with some OpenCL apps | ||
|---|---|---|---|
| Product: | Ports & Packages | Reporter: | Jan Beich <jbeich> |
| Component: | Individual Port(s) | Assignee: | freebsd-x11 (Nobody) <x11> |
| Status: | Closed FIXED | ||
| Severity: | Affects Only Me | CC: | dim, jbeich, toolchain, xiuli.pan |
| Priority: | --- | Keywords: | needs-qa |
| Version: | Latest | Flags: | bugzilla:
maintainer-feedback?
(x11) |
| Hardware: | Any | ||
| OS: | Any | ||
|
Description
Jan Beich
2016-10-23 16:12:46 UTC
One of graphics/piglit tests fails the same way as multimedia/libx264: $ /usr/local/lib/piglit/bin/cl-api-enqueue-fill-image ## Test: clEnqueueFillImage (/usr/ports/graphics/piglit/work/piglit-ca5350b4056ae63a93c4c207087b7634873b2ce2/tests/cl/api/enqueue-fill-image.c) ## # Running on: # Platform: Intel Gen OCL Driver # Device: Intel(R) HD Graphics Skylake Desktop GT2 # OpenCL version: 1.2 Unresolved symbol: _Z22__gen_ocl_write_imagef11ocl_image2dDv2_iDv4_f Aborting... While deleting: <2 x i32> % Use still stuck around after Def is destroyed: tail call void @_Z22__gen_ocl_write_imagef11ocl_image2dDv2_iDv4_f(%opencl.image2d_t.0 addrspace(1)* %image, <2 x i32> <badref>, <4 x float> %pattern) #6 Assertion failed: (use_empty() && "Uses remain when a value is destroyed!"), function ~Value, file /usr/ports/devel/llvm37/work/llvm-3.7.1.src/lib/IR/Value.cpp, line 82. I can still reproduce on drm-next from 2017-03-07 (be99d136554) and beignet-1.3.0.
$ /usr/local/lib/piglit/bin/cl-api-enqueue-fill-image
## Test: clEnqueueFillImage (/wrkdirs/usr/ports/graphics/piglit/work/piglit-ca5350b4056ae63a93c4c207087b7634873b2ce2/tests/cl/api/enqueue-fill-image.c) ##
# Running on:
# Platform: Intel Gen OCL Driver
# Device: Intel(R) HD Graphics Skylake Desktop GT2
# OpenCL version: 1.2
Unresolved symbol: _Z22__gen_ocl_write_imagef14ocl_image2d_woDv2_iDv4_f
Aborting...
While deleting: <2 x i32> %
Use still stuck around after Def is destroyed: tail call void @_Z22__gen_ocl_write_imagef14ocl_image2d_woDv2_iDv4_f(%opencl.image2d_wo_t.0 addrspace(1)* %image, <2 x i32> <badref>, <4 x float> %pattern) #4
Assertion failed: (use_empty() && "Uses remain when a value is destroyed!"), function ~Value, file /tmp/a/overlay/ports/devel/llvm39/work/llvm-3.9.1.src/lib/IR/Value.cpp, line 85.
$ waifu2x-converter-cpp --processor 1 -i miku_CC_BY-NC_noisy.jpg
Unresolved symbol: _Z14__gen_ocl_fmaxff
Aborting...
[...]
Segmentation fault
* thread #1, stop reason = signal SIGSEGV: invalid address (fault address: 0xae40003)
frame #0: 0x000000080dab7084 libgbe.so`llvm::LLVMContext::removeModule(llvm::Module*) + 4
libgbe.so`llvm::LLVMContext::removeModule:
-> 0x80dab7084 <+4>: movq (%rdi), %rdi
0x80dab7087 <+7>: popq %rbp
0x80dab7088 <+8>: jmp 0x80db6a460 ; llvm::SmallPtrSetImplBase::erase_imp(void const*)
0x80dab708d: nop
(lldb) bt
* thread #1, stop reason = signal SIGSEGV: invalid address (fault address: 0xae40003)
* frame #0: 0x000000080dab7084 libgbe.so`llvm::LLVMContext::removeModule(llvm::Module*) + 4
frame #1: 0x000000080dae8cbf libgbe.so`llvm::Module::~Module(void) + 31
frame #2: libgbe.so`gbe::Program::buildFromLLVMFile(this=0x000000080ae1fcb0, fileName=0x0000000000000000, module=0x000000080af42c00, error=0x00007fffffff4b48, optLevel=1) at program.cpp:177
frame #3: libgbe.so`gbe::genProgramNewFromLLVM(deviceID=6418, fileName=0x0000000000000000, module=0x000000080af42c00, llvm_ctx=0x000000080ae4c460, asm_file_name=0x0000000000000000, stringSize=1048576, err="", errSize=0x000000080ae57368, optLevel=1, options="") at gen_program.cpp:459
frame #4: libgbe.so`gbe::programNewFromSource(deviceID=6418, source="https://github.com/tanakamura/waifu2x-converter-cpp/blob/master/src/modelHandler_OpenCL.cl", stringSize=1048576, options="", err="", errSize=0x000000080ae57368) at program.cpp:1111
frame #5: libcl.so`cl_program_build(p=0x000000080ae572a0, options="") at cl_program.c:625
frame #6: libcl.so`clBuildProgram(program=0x000000080ae572a0, num_devices=1, device_list=0x00007fffffff5648, options="", pfn_notify=0x0000000000000000, user_data=0x0000000000000000) at cl_api.c:835
frame #7: libOpenCL.so.1`clBuildProgram(program=0x000000080ae572a0, num_devices=1, device_list=0x00007fffffff5648, options="", pfn_notify=0x0000000000000000, user_data=0x0000000000000000) at ocl_icd_loader_gen.c:387
frame #8: libw2xc.so`w2xc::initOpenCL(c=0x000000080ae5f0a0, env=0x000000080ae462f8, proc=0x000000080af29908) at modelHandler_OpenCL.cpp:361
frame #9: libw2xc.so`::w2xconv_init_with_processor(processor_idx=1, nJob=8, enable_log=1) at w2xconv.cpp:379
frame #10: waifu2x-converter-cpp`main(argc=5, argv=0x00007fffffffe3e0) at main.cpp:185
frame #11: waifu2x-converter-cpp`_start(ap=<unavailable>, cleanup=<unavailable>) at crt1.c:72
$ ffmpeg -hide_banner -i Samsung_UHD_7Wonders_of_the_World_Italy.ts -x264opts opencl:opencl-device=0 -codec:v libx264 -y /tmp/a.mp4
[mpegts @ 0x80ac54000] start time for stream 1 is not set in estimate_timings_from_pts
[mpegts @ 0x80ac54000] Could not find codec parameters for stream 1 (Audio: aac ([15][0][0][0] / 0x000F), 0 channels, fltp): unspecified sample rate
Consider increasing the value for the 'analyzeduration' and 'probesize' options
Input #0, mpegts, from '/p/Samsung_UHD_7Wonders_of_the_World_Italy.ts':
Duration: 00:02:12.28, start: 1.050044, bitrate: 51922 kb/s
Program 1
Stream #0:0[0x101]: Video: hevc (Main 10) ([36][0][0][0] / 0x0024), yuv420p10le(tv), 3840x2160 [SAR 1:1 DAR 16:9], 59.94 fps, 59.94 tbr, 90k tbn, 59.94 tbc
Stream #0:1[0x102](und): Audio: aac ([15][0][0][0] / 0x000F), 0 channels, fltp
[libx264 @ 0x80ac18d00] using SAR=1/1
[libx264 @ 0x80ac18d00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0x80ac18d00] OpenCL acceleration enabled with Intel Intel(R) HD Graphics Skylake Desktop GT2
[libx264 @ 0x80ac18d00] Compiling OpenCL kernels...
Unresolved symbol: _Z23__gen_ocl_write_imageui14ocl_image2d_woDv2_iDv4_j
Aborting...
Unresolved symbol: _Z22__gen_ocl_read_imageui14ocl_image2d_ro11ocl_samplerDv2_fj
Aborting...
[...]
Segmentation fault
* thread #1, stop reason = signal SIGSEGV: invalid address (fault address: 0x18)
frame #0: libgbe.so`llvm::Value::getValueID(this=0x0000000000000000) const at Value.h:425
422 /// # the InstructionVal enumerator must be the highest valued enumerator in
423 /// the ValueTy enum.
424 unsigned getValueID() const {
-> 425 return SubclassID;
426 }
427
428 /// \brief Return the raw optional flags value contained in this value.
(lldb) bt
* thread #1, stop reason = signal SIGSEGV: invalid address (fault address: 0x18)
* frame #0: libgbe.so`llvm::Value::getValueID(this=0x0000000000000000) const at Value.h:425
frame #1: libgbe.so`llvm::isa_impl<llvm::Instruction, llvm::Value, void>::doit(Val=0x0000000000000000) at Value.h:734
frame #2: libgbe.so`llvm::isa_impl_cl<llvm::Instruction, llvm::Value const*>::doit(Val=0x0000000000000000) at Casting.h:96
frame #3: libgbe.so`llvm::isa_impl_wrap<llvm::Instruction, llvm::Value const*, llvm::Value const*>::doit(Val=0x00007fffffff6db0) at Casting.h:122
frame #4: libgbe.so`llvm::isa_impl_wrap<llvm::Instruction, llvm::Value* const, llvm::Value const*>::doit(Val=0x00007fffffff6df8) at Casting.h:112
frame #5: libgbe.so`bool llvm::isa<llvm::Instruction, llvm::Value*>(Val=0x00007fffffff6df8) at Casting.h:133
frame #6: libgbe.so`llvm::cast_retty<llvm::Instruction, llvm::Value*>::ret_type llvm::dyn_cast<llvm::Instruction, llvm::Value>(Val=0x0000000000000000) at Casting.h:298
frame #7: libgbe.so`gbe::Scalarize::scalarizeExtract(this=0x000000080ac5c7c0, extr=0x000000080b3517e0) at llvm_scalarize.cpp:824
frame #8: libgbe.so`gbe::Scalarize::scalarize(this=0x000000080ac5c7c0, inst=0x000000080b3517e0) at llvm_scalarize.cpp:517
frame #9: libgbe.so`gbe::Scalarize::runOnFunction(this=0x000000080ac5c7c0, F=0x000000080ba39848)at llvm_scalarize.cpp:905
frame #10: 0x0000000850ec799c libgbe.so`llvm::FPPassManager::runOnFunction(llvm::Function&) + 540
frame #11: 0x0000000850cb06b4 libgbe.so`(anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) + 1412
frame #12: 0x0000000850ec815c libgbe.so`llvm::legacy::PassManagerImpl::run(llvm::Module&) + 988
frame #13: libgbe.so`gbe::llvmToGen(unit=0x000000080dba6780, fileName=0x0000000000000000, module=0x000000080aff5300, optLevel=1, strictMath=true, profiling=0, errors=0x00007fffffff9748) at llvm_to_gen.cpp:409
frame #14: libgbe.so`gbe::Program::buildFromLLVMFile(this=0x000000080adeb150, fileName=0x0000000000000000, module=0x000000080aff5f00, error=0x00007fffffff9748, optLevel=1) at program.cpp:146
frame #15: libgbe.so`gbe::genProgramNewFromLLVM(deviceID=6418, fileName=0x0000000000000000, module=0x000000080aff5f00, llvm_ctx=0x000000080ac44568, asm_file_name=0x0000000000000000, stringSize=1048576, err="", errSize=0x000000080acd7fa8, optLevel=1, options="") at gen_program.cpp:459
frame #16: libgbe.so`gbe::programNewFromSource(deviceID=6418, source="http://sprunge.us/iSib", stringSize=1048576, options="", err="", errSize=0x000000080acd7fa8)at program.cpp:1111
frame #17: libcl.so`cl_program_build(p=0x000000080acd7ee0, options="") at cl_program.c:625
frame #18: libcl.so`clBuildProgram(program=0x000000080acd7ee0, num_devices=1, device_list=0x000000080dbbd6b8, options="", pfn_notify=0x0000000000000000, user_data=0x0000000000000000) at cl_api.c:835
frame #19: libOpenCL.so.1`clBuildProgram(program=0x000000080acd7ee0, num_devices=1, device_list=0x000000080dbbd6b8, options="", pfn_notify=0x0000000000000000, user_data=0x0000000000000000) at ocl_icd_loader_gen.c:387
frame #20: libx264.so.148`x264_opencl_compile(h=0x000000080dbb1720) at opencl.c:277
frame #21: libx264.so.148`x264_opencl_lookahead_alloc(h=0x000000080dbb1720) at opencl.c:363
frame #22: libx264.so.148`x264_opencl_lookahead_init(h=0x000000080dbb1720) at opencl.c:543
frame #23: libx264.so.148`x264_encoder_open_148(param=0x000000080ac55208) at encoder.c:1674
frame #24: 0x000000080121e5ee libavcodec.so.57`X264_init + 4190
frame #25: 0x00000008014b75d0 libavcodec.so.57`avcodec_open2 + 5072
frame #26: 0x000000000022a498 ffmpeg`transcode + 4440
frame #27: 0x0000000000228ac1 ffmpeg`main + 3169
frame #28: ffmpeg`_start(ap=<unavailable>, cleanup=<unavailable>) at crt1.c:72
Hi, I am Xiuli form the Beignet team and I have seen some patch to our mail-list and found there are some bugs here. These bugs seems to be some conflict about the llvm version. LLVM has a mangle change in LLVM39, if you get some binary build with LLVM39 and have some lower verison CLANG when runing. There maybe some bugs like this. So could you provide the clang -v output to check the LLVM version. Thanks Xiuli (In reply to Xiuli Pan from comment #3) > These bugs seems to be some conflict about the llvm version. LLVM has a mangle > change in LLVM39, if you get some binary build with LLVM39 and have some lower > verison CLANG when runing. There maybe some bugs like this. Thank you for the hint. Beignet works fine after a small fix[1] but I haven't tested much. [1] https://lists.freedesktop.org/archives/beignet/2017-March/008702.html > So could you provide the clang -v output to check the LLVM version. FreeBSD has one Clang version in base and many more suffixed in ports/packages. lang/beignet port passes -DLLVM_CONFIG_EXECUTABLE=/usr/local/bin/llvm-config39 which ends up building some (but not all) files with clang39. However, even forcing to build everything with clang39 doesn't help. $ clang -v FreeBSD clang version 4.0.0 (tags/RELEASE_400/final 297347) (based on LLVM 4.0.0) Target: x86_64-unknown-freebsd12.0 Thread model: posix InstalledDir: /usr/bin $ clang39 -v clang version 3.9.1 (tags/RELEASE_391/final) Target: x86_64-unknown-freebsd12.0 Thread model: posix InstalledDir: /usr/local/llvm39/bin (In reply to Jan Beich (mail not working) from comment #4) OK, it seems you have already root cause it, I will review you patch then. Thanks Xiuli libcxxrt behavior doesn't even match libcxxabi (from LLVM). I've filed a bug: https://github.com/pathscale/libcxxrt/issues/46 A commit references this bug: Author: dim Date: Wed Mar 22 21:45:42 UTC 2017 New revision: 315745 URL: https://svnweb.freebsd.org/changeset/base/315745 Log: Cherry-pick libcxxrt commit 8a853717e61d5d55cbdf74d9d0a7545da5d5ff92: Author: David Chisnall <theraven@FreeBSD.org> Date: Wed Mar 22 12:27:08 2017 +0000 Simplify some code. realloc() with a null pointer is equivalent to malloc, so we don't need to handle the two cases independently. Fixes #46 This should help with lang/beignet and other programs, which expect __cxa_demangle(name, NULL, NULL, &status) to return zero in status. PR: 213732 MFC after: 3 days Changes: head/contrib/libcxxrt/typeinfo.cc I will close this after r315745 has been MFCd. A commit references this bug: Author: dim Date: Sat Mar 25 12:29:15 UTC 2017 New revision: 315943 URL: https://svnweb.freebsd.org/changeset/base/315943 Log: MFC r315745: Cherry-pick libcxxrt commit 8a853717e61d5d55cbdf74d9d0a7545da5d5ff92: Author: David Chisnall <theraven@FreeBSD.org> Date: Wed Mar 22 12:27:08 2017 +0000 Simplify some code. realloc() with a null pointer is equivalent to malloc, so we don't need to handle the two cases independently. Fixes #46 This should help with lang/beignet and other programs, which expect __cxa_demangle(name, NULL, NULL, &status) to return zero in status. PR: 213732 Changes: _U stable/10/ stable/10/contrib/libcxxrt/typeinfo.cc _U stable/11/ stable/11/contrib/libcxxrt/typeinfo.cc _U stable/9/ _U stable/9/contrib/ _U stable/9/contrib/libcxxrt/ stable/9/contrib/libcxxrt/typeinfo.cc |