llvm symbols leak through, cause trouble with software rendering in llvm-linked software
Submitted by Tobias Schlüter
Assigned to mes..@..op.org
Description
libmesa uses llvm in its software rendering path. I'm trying to run via X forwarding (and thus using software rendering) a software project on ubuntu 14.04 that uses OpenGL for visualization and links against its own copy of llvm (via the root libraries, I don't think this matters, and they have recently put in place a workaround for this problem, their bug report is here https://sft.its.cern.ch/jira/browse/ROOT-7744).
When loading the mesa libraries I get a backtrace that looks as follows (libCling is the interface to llvm):
#5 0x00007f3eff60deb1 in llvm::cl::AddLiteralOption(llvm::cl::Option&, char const*) () from /home/schlueter/src/belle2/externals/v01-01-01/Linux_x86_64/opt/root/lib/libCling.so
#6 0x00007f3ecadcfdcc in ?? () from /usr/lib/x86_64-linux-gnu/libLLVM-3.4.so.1
#7 0x00007f3f0867913a in ?? () from /lib64/ld-linux-x86-64.so.2
#8 0x00007f3f08679223 in ?? () from /lib64/ld-linux-x86-64.so.2
#9 0x00007f3f0867dc70 in ?? () from /lib64/ld-linux-x86-64.so.2
#10 0x00007f3f08678ff4 in ?? () from /lib64/ld-linux-x86-64.so.2
#11 0x00007f3f0867d3bb in ?? () from /lib64/ld-linux-x86-64.so.2
#12 0x00007f3f06cd902b in ?? () from /lib/x86_64-linux-gnu/libdl.so.2
#13 0x00007f3f08678ff4 in ?? () from /lib64/ld-linux-x86-64.so.2
#14 0x00007f3f06cd962d in ?? () from /lib/x86_64-linux-gnu/libdl.so.2
#15 0x00007f3f06cd90c1 in dlopen () from /lib/x86_64-linux-gnu/libdl.so.2
#16 0x00007f3edc84801c in ?? () from /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
#17 0x00007f3edc847719 in ?? () from /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
#18 0x00007f3edc828558 in ?? () from /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
#19 0x00007f3edc824f3b in ?? () from /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
#20 0x00007f3edc8256d0 in glXChooseVisual () from /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
#21 0x00007f3eddc7ffc1 in TGLWidget::CreateWindow(TGWindow const*, TGLFormat const&, unsigned int, unsigned int, std::pair<void*, void*>&) () from /home/schlueter/src/belle2/externals/v01-01-01/Linux_x86_64/opt/root/lib/libRGL.so
#22 0x00007f3eddc80500 in TGLWidget::Create(TGLFormat const&, TGWindow const*, bool, bool, TGLPaintDevice const*, unsigned int, unsigned int) () from /home/schlueter/src/belle2/externals/v01-01-01/Linux_x86_64/opt/root/lib/libRGL.so
#23 0x00007f3eddc80723 in TGLWidget::Create(TGWindow const*, bool, bool, TGLPaintDevice const*, unsigned int, unsigned int) () from /home/schlueter/src/belle2/externals/v01-01-01/Linux_x86_64/opt/root/lib/libRGL.so
#24 0x00007f3eddbf4801 in TGLEmbeddedViewer::CreateFrames() () from /home/schlueter/src/belle2/externals/v01-01-01/Linux_x86_64/opt/root/lib/libRGL.so
The reason is that the symbols from the libllvm that libmesa is linked against collide with the symbols of my already loaded llvm library. I don't think libmesa should load libraries in a way that pollutes the symbol namespace, depending on the execution path taken.
Version: 10.1