<div dir="auto"><div dir="auto">Package: libunwind-13</div><div dir="auto">Version: 1:13.0.1-7</div><div dir="auto">Severity: grave</div><div dir="auto"><br></div><div dir="auto">LLVM libunwind and libgcc_s.so export the same unwinding functions.</div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto">$ objdump -T libgcc_s.so.1 | grep _Unwind_GetLanguageSpecificData</div><div dir="auto">0000000000014a00 g    DF .text<span style="white-space:pre"> </span>000000000000000c  GCC_3.0     _Unwind_GetLanguageSpecificData</div><div dir="auto">$ objdump -T libunwind.so.1.0 | grep _Unwind_GetLanguageSpecificData</div><div dir="auto">0000000000005510 g    DF .text<span style="white-space:pre">        </span>0000000000000043  Base        _Unwind_GetLanguageSpecificData</div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto">This would cause many C++ programs linking libunwind to potentially crash.</div><div dir="auto"><br></div><div dir="auto">I have the following reproducer which has a dependency on libgtest-dev:</div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto">$ sudo apt install libgtest-dev libunwind-13-dev</div><div dir="auto">$ cat a.cc</div><div dir="auto">#include <gtest/gtest.h></div><div dir="auto">#include <pthread.h></div><div dir="auto"><br></div><div dir="auto">TEST(Bug, Repro) {</div><div dir="auto">  pthread_exit(nullptr);</div><div dir="auto">}</div><div dir="auto">$ g++ a.cc -lgtest_main -lgtest -lpthread -lunwind</div><div dir="auto">$ ./a.out</div><div dir="auto">...</div><div dir="auto">Segmentation fault</div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto">GDB shows the following backtrace:</div><div dir="auto"><br></div><div dir="auto">#0  0x00007ffff7a0e740 in ?? ()</div><div dir="auto">#1  0x00007ffff7f5940a in unw_get_proc_info () from /lib/x86_64-linux-gnu/libunwind.so.1</div><div dir="auto">#2  0x00007ffff7f5d7ac in _Unwind_GetLanguageSpecificData () from /lib/x86_64-linux-gnu/libunwind.so.1</div><div dir="auto">#3  0x00007ffff7e1eb98 in __cxxabiv1::__gxx_personality_v0 (...) at .../eh_personality.cc:446</div><div dir="auto">#4  0x00007ffff7a21d54 in _Unwind_ForcedUnwind_Phase2 (...) at .../unwind.inc:182</div><div dir="auto">#5  0x00007ffff7a22412 in _Unwind_ForcedUnwind (...) at .../unwind.inc:217</div><div dir="auto">#6  0x00007ffff7f75f66 in __GI___pthread_unwind (buf=<optimized out>) at unwind.c:121</div><div dir="auto">#7  0x00007ffff7f6c972 in __do_cancel () at pthreadP.h:310</div><div dir="auto">#8  __pthread_exit (value=<optimized out>) at pthread_exit.c:28</div><div dir="auto">(...)</div><div dir="auto"><br></div><div dir="auto">There was a previous discussion that has some details about the conflicts between libunwind and libgcc_s.so: <a href="https://reviews.llvm.org/D106703">https://reviews.llvm.org/D106703</a>.</div><div dir="auto"><br></div><div dir="auto">Regards,</div><div dir="auto">Lingzhu</div></div>