Root issue
Occasionally found that libtvm.so
might be linked to libedit.so
once it is linked against libllvm.so
, which might be the root cause of the issue.
I have no idea why libLLVM.so
is linked against libedit
. @zhiics @were @haichen any ideas?
Build without LLVM
# ipdb does not crash
$ python -c "import tvm; import ipdb; ipdb.set_trace()"
--Return--
None
> <string>(1)<module>()
ipdb>
# not linked against libedit.so
$ ldd libtvm.so
linux-vdso.so.1 (0x00007ffd1f7ae000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fdeeb4bf000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fdeeb136000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdeead98000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fdeeab80000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fdeea961000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdeea570000)
/lib64/ld-linux-x86-64.so.2 (0x00007fdeec6b6000)
Build with LLVM
# ipdb crashes immediately
$ python -c "import tvm; import ipdb; ipdb.set_trace()"
[1] 21458 segmentation fault (core dumped) python -c "import tvm; import ipdb; ipdb.set_trace()"
# linked against libedit.so
$ ldd libtvm.so
linux-vdso.so.1 (0x00007ffd9b5f1000)
libLLVM-8.so.1 => /usr/lib/llvm-8/lib/libLLVM-8.so.1 (0x00007fe136a4d000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe136849000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fe1364c0000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe136122000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fe135f0a000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe135ceb000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe1358fa000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe13b731000)
libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007fe1356f2000)
libedit.so.2 => /usr/lib/x86_64-linux-gnu/libedit.so.2 (0x00007fe1354bb000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fe13529e000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fe135096000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007fe134e6c000)
Let’s take a look at libLLVM-8.so
$ ldd /usr/lib/llvm-8/lib/libLLVM-8.so
linux-vdso.so.1 (0x00007ffe15464000)
libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f75d039f000)
libedit.so.2 => /usr/lib/x86_64-linux-gnu/libedit.so.2 (0x00007f75d0168000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f75cff4b000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f75cfd43000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f75cfb3f000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f75cf915000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f75cf6f6000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f75cf358000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f75cefcf000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f75cedb7000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f75ce9c6000)
/lib64/ld-linux-x86-64.so.2 (0x00007f75d41f4000)
Yet another work around
After PR 3954 is merged, we are able to run cmake with extra arguments. Then, in config.cmake
, you may force linking to static LLVM library, e.g.
set(USE_LLVM "/usr/bin/llvm-config-8 --ignore-libllvm")
In that case, we can invoke pdb normally without having to worry about core dumps…
$ python -c "import tvm; import ipdb; ipdb.set_trace()"
--Return--
None
> <string>(1)<module>()
ipdb>
Exiting Debugger.