tora
tora copied to clipboard
Crashes during start on FreeBSD
Version 3.2 rev bbeb2fe4 crashes during start with this stack:
(gdb) r
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /usr/local/bin/tora
Program received signal SIGSEGV, Segmentation fault.
0x0000000806373d78 in vtable for __cxxabiv1::__si_class_type_info () from /lib/libcxxrt.so.1
(gdb) info th
Id Target Id Frame
* 1 LWP 101034 of process 97849 0x0000000806373d78 in vtable for __cxxabiv1::__si_class_type_info () from /lib/libcxxrt.so.1
(gdb) bt
#0 0x0000000806373d78 in vtable for __cxxabiv1::__si_class_type_info () from /lib/libcxxrt.so.1
#1 0x0000000805172e29 in __dynamic_cast () from /usr/local/lib/gcc6/libstdc++.so.6
#2 0x00000008051f6c30 in bool std::has_facet<std::ctype<char> >(std::locale const&) () from /usr/local/lib/gcc6/libstdc++.so.6
#3 0x00000008051ea594 in std::basic_ios<char, std::char_traits<char> >::_M_cache_locale(std::locale const&) () from /usr/local/lib/gcc6/libstdc++.so.6
#4 0x00000008051ea710 in std::basic_ios<char, std::char_traits<char> >::init(std::basic_streambuf<char, std::char_traits<char> >*) ()
from /usr/local/lib/gcc6/libstdc++.so.6
#5 0x0000000805187301 in std::ios_base::Init::Init() () from /usr/local/lib/gcc6/libstdc++.so.6
#6 0x0000000000a3067e in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535) at /usr/local/lib/gcc6/include/c++/iostream:74
#7 0x0000000000a3086e in _GLOBAL__sub_I_main.cpp(void) () at /usr/ports/databases/tora/work/tora-3.2-133-gbbeb2fe4/src/main/main.cpp:393
#8 0x000000080203d7ab in objlist_call_init (list=<optimized out>, lockstate=<optimized out>) at /usr/src/libexec/rtld-elf/rtld.c:2657
#9 0x000000080203c6ac in _rtld (sp=<optimized out>, exit_proc=0x7fffffffe7e0, objp=0x7fffffffe7e8) at /usr/src/libexec/rtld-elf/rtld.c:770
#10 0x000000080203a6f9 in .rtld_start () at /usr/src/libexec/rtld-elf/amd64/rtld_start.S:39
#11 0x0000000000000000 in ?? ()
(gdb)
It looks to me like a static constructor conflict.
This looks like "static initialization order fiasco". Generally: Tora uses some singletons which are initialized before the main function is called. It works in Linux ld/gold and also on MSVC. There is no defined standard for this, but usually the order of files passed to ld (linker) matters. So I ordered files in CMakeList.txt to make it working. Static initialization for files from directories "main" and "core" must be done before any other singletons are initialized.
I do not have access to any machine running FreeSBD, so I can not help you :(