[Mesa-dev] [llvm-dev] issues with split llvm libraries and llvmpipe and failing to load library
Mehdi Amini
mehdi.amini at apple.com
Thu Feb 11 15:59:04 UTC 2016
> On Feb 10, 2016, at 7:59 PM, Dave Airlie via llvm-dev <llvm-dev at lists.llvm.org> wrote:
>
> Hey,
>
> So in Fedora rawhide we are now building llvm 3.7.1 into the lots of
> little shared libraries format.
>
> However I'm running into a major problem with the fact that sometimes
> dlclose isn't dropping all the LLVM libraries from the address space
> of the process.
>
> We have a sequence like this:
>
> a) X server asks mesa gbm library to init, it loads the
> kms_swrast_dri.so with dlopen(LAZY|GLOBAL). kms_swrast_dri.so is
> linked against a large bunch of LLVM libraries (see below).
>
> b) gbm discovers it can't do what it wants and dlcloses the library.
> At this point a bunch of the LLVM libraries drop out of the map,
> pretty much everything down to LLVMTarget. Everything from
> LLVMTarget onwards remains loaded and I've no idea how to discover why.
Did you call dlsym at some point? I think this can also increase the refcount, but my memory is fuzzy about the subtleties of dlopen/dlclose.
--
Mehdi
>
> c) later X tries to load kms_swrast_dri.so for GLX usage, and it
> brings back in all the LLVM libraries that got dropped out, however as
> LLVMObject has never been cleaned up, it has all the command line
> options in it, so we get
> : CommandLine Error: Option 'x86-asm-syntax' registered more than once!
> LLVM ERROR: inconsistency in registered CommandLine options
> and things crash.
>
> So anyone any ideas why we the linker isn't dropping all the other
> LLVM libraries, or any workaround for this, apart from just going back
> to the single libLLVM?
>
> Dave.
>
> [airlied at f21vm ~]$ ldd /usr/lib64/dri/kms_swrast_dri.so
> linux-vdso.so.1 (0x00007ffec17fe000)
> libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007f8a68ac5000)
> libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f8a688a3000)
> libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f8a68685000)
> libdl.so.2 => /lib64/libdl.so.2 (0x00007f8a68481000)
> libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f8a68255000)
> libdrm_intel.so.1 => /lib64/libdrm_intel.so.1 (0x00007f8a68033000)
> libdrm_nouveau.so.2 => /lib64/libdrm_nouveau.so.2 (0x00007f8a67e2b000)
> libdrm_radeon.so.1 => /lib64/libdrm_radeon.so.1 (0x00007f8a67c1f000)
> libdrm_amdgpu.so.1 => /lib64/libdrm_amdgpu.so.1 (0x00007f8a67a16000)
> libdrm.so.2 => /lib64/libdrm.so.2 (0x00007f8a67807000)
> libelf.so.1 => /lib64/libelf.so.1 (0x00007f8a675ef000)
> libLLVMAMDGPUCodeGen.so.3.7 => /lib64/libLLVMAMDGPUCodeGen.so.3.7
> (0x00007f8a672e2000)
> libLLVMAMDGPUAsmParser.so.3.7 =>
> /lib64/libLLVMAMDGPUAsmParser.so.3.7 (0x00007f8a670a1000)
> libLLVMAMDGPUUtils.so.3.7 => /lib64/libLLVMAMDGPUUtils.so.3.7
> (0x00007f8a66e9f000)
> libLLVMAMDGPUDesc.so.3.7 => /lib64/libLLVMAMDGPUDesc.so.3.7
> (0x00007f8a66b9b000)
> libLLVMAMDGPUInfo.so.3.7 => /lib64/libLLVMAMDGPUInfo.so.3.7
> (0x00007f8a66999000)
> libLLVMAMDGPUAsmPrinter.so.3.7 =>
> /lib64/libLLVMAMDGPUAsmPrinter.so.3.7 (0x00007f8a66774000)
> libLLVMObjCARCOpts.so.3.7 => /lib64/libLLVMObjCARCOpts.so.3.7
> (0x00007f8a6654e000)
> libLLVMOption.so.3.7 => /lib64/libLLVMOption.so.3.7 (0x00007f8a66340000)
> libLLVMIRReader.so.3.7 => /lib64/libLLVMIRReader.so.3.7 (0x00007f8a6613b000)
> libLLVMAsmParser.so.3.7 => /lib64/libLLVMAsmParser.so.3.7
> (0x00007f8a65ef2000)
> libLLVMLinker.so.3.7 => /lib64/libLLVMLinker.so.3.7 (0x00007f8a65cdc000)
> libLLVMipo.so.3.7 => /lib64/libLLVMipo.so.3.7 (0x00007f8a65a4a000)
> libLLVMVectorize.so.3.7 => /lib64/libLLVMVectorize.so.3.7
> (0x00007f8a657ef000)
> libLLVMAArch64Disassembler.so.3.7 =>
> /lib64/libLLVMAArch64Disassembler.so.3.7 (0x00007f8a655d0000)
> libLLVMAArch64CodeGen.so.3.7 =>
> /lib64/libLLVMAArch64CodeGen.so.3.7 (0x00007f8a652b0000)
> libLLVMAArch64AsmParser.so.3.7 =>
> /lib64/libLLVMAArch64AsmParser.so.3.7 (0x00007f8a65058000)
> libLLVMAArch64Desc.so.3.7 => /lib64/libLLVMAArch64Desc.so.3.7
> (0x00007f8a64dde000)
> libLLVMAArch64Info.so.3.7 => /lib64/libLLVMAArch64Info.so.3.7
> (0x00007f8a64bdc000)
> libLLVMAArch64AsmPrinter.so.3.7 =>
> /lib64/libLLVMAArch64AsmPrinter.so.3.7 (0x00007f8a64979000)
> libLLVMAArch64Utils.so.3.7 => /lib64/libLLVMAArch64Utils.so.3.7
> (0x00007f8a64768000)
> libLLVMBitWriter.so.3.7 => /lib64/libLLVMBitWriter.so.3.7
> (0x00007f8a64541000)
> libLLVMX86Disassembler.so.3.7 =>
> /lib64/libLLVMX86Disassembler.so.3.7 (0x00007f8a641df000)
> libLLVMX86AsmParser.so.3.7 => /lib64/libLLVMX86AsmParser.so.3.7
> (0x00007f8a63f4b000)
> libLLVMX86CodeGen.so.3.7 => /lib64/libLLVMX86CodeGen.so.3.7
> (0x00007f8a63b61000)
> libLLVMSelectionDAG.so.3.7 => /lib64/libLLVMSelectionDAG.so.3.7
> (0x00007f8a63761000)
> libLLVMAsmPrinter.so.3.7 => /lib64/libLLVMAsmPrinter.so.3.7
> (0x00007f8a634e6000)
> libLLVMCodeGen.so.3.7 => /lib64/libLLVMCodeGen.so.3.7 (0x00007f8a63014000)
> libLLVMScalarOpts.so.3.7 => /lib64/libLLVMScalarOpts.so.3.7
> (0x00007f8a62c92000)
> libLLVMProfileData.so.3.7 => /lib64/libLLVMProfileData.so.3.7
> (0x00007f8a62a67000)
> libLLVMInstCombine.so.3.7 => /lib64/libLLVMInstCombine.so.3.7
> (0x00007f8a627aa000)
> libLLVMInstrumentation.so.3.7 =>
> /lib64/libLLVMInstrumentation.so.3.7 (0x00007f8a6253f000)
> libLLVMTransformUtils.so.3.7 =>
> /lib64/libLLVMTransformUtils.so.3.7 (0x00007f8a6226b000)
> libLLVMipa.so.3.7 => /lib64/libLLVMipa.so.3.7 (0x00007f8a62043000)
> libLLVMX86Desc.so.3.7 => /lib64/libLLVMX86Desc.so.3.7 (0x00007f8a61c95000)
> libLLVMMCDisassembler.so.3.7 =>
> /lib64/libLLVMMCDisassembler.so.3.7 (0x00007f8a61a8f000)
> libLLVMX86Info.so.3.7 => /lib64/libLLVMX86Info.so.3.7 (0x00007f8a6188d000)
> libLLVMX86AsmPrinter.so.3.7 => /lib64/libLLVMX86AsmPrinter.so.3.7
> (0x00007f8a61647000)
> libLLVMX86Utils.so.3.7 => /lib64/libLLVMX86Utils.so.3.7 (0x00007f8a6143e000)
> libLLVMMCJIT.so.3.7 => /lib64/libLLVMMCJIT.so.3.7 (0x00007f8a61233000)
> libLLVMExecutionEngine.so.3.7 =>
> /lib64/libLLVMExecutionEngine.so.3.7 (0x00007f8a61011000)
> libLLVMTarget.so.3.7 => /lib64/libLLVMTarget.so.3.7 (0x00007f8a60e02000)
> libLLVMAnalysis.so.3.7 => /lib64/libLLVMAnalysis.so.3.7 (0x00007f8a60a33000)
> libLLVMRuntimeDyld.so.3.7 => /lib64/libLLVMRuntimeDyld.so.3.7
> (0x00007f8a607e4000)
> libLLVMObject.so.3.7 => /lib64/libLLVMObject.so.3.7 (0x00007f8a60574000)
> libLLVMMCParser.so.3.7 => /lib64/libLLVMMCParser.so.3.7 (0x00007f8a60347000)
> libLLVMBitReader.so.3.7 => /lib64/libLLVMBitReader.so.3.7
> (0x00007f8a60112000)
> libLLVMMC.so.3.7 => /lib64/libLLVMMC.so.3.7 (0x00007f8a5fe91000)
> libLLVMCore.so.3.7 => /lib64/libLLVMCore.so.3.7 (0x00007f8a5fa56000)
> libLLVMSupport.so.3.7 => /lib64/libLLVMSupport.so.3.7 (0x00007f8a5f66a000)
> libm.so.6 => /lib64/libm.so.6 (0x00007f8a5f360000)
> libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f8a5f149000)
> libc.so.6 => /lib64/libc.so.6 (0x00007f8a5ed72000)
> libz.so.1 => /lib64/libz.so.1 (0x00007f8a5eb5c000)
> libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f8a5e8e7000)
> /lib64/ld-linux-x86-64.so.2 (0x0000565263dae000)
> libpciaccess.so.0 => /lib64/libpciaccess.so.0 (0x00007f8a5e6dc000)
> librt.so.1 => /lib64/../lib64/librt.so.1 (0x00007f8a5e4d2000)
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
More information about the mesa-dev
mailing list