I've been banging my head against a wall for days trying to figure out why my (once working with KOS back in 2016) project is no longer booting after updating KOS to latest and greatest.
During startup, after KOS init and before main(), I get this error during static initialisation:
Code: Select all
terminate called after throwing an instance of '__gnu_cxx::__concurrence_lock_error'
what(): __gnu_cxx::__concurrence_lock_error
arch: shutting down kernel
I'm using an external build system, which passes mostly the same flags to GCC as the KOS example makefiles (differences are -std=gnu++11, and rtti enabled).
I've compiled a basic Hello World sample with both the KOS makefiles and my build system, and can confirm the disassembly and section locations are identical, apart from the debug areas (because filename differences).
It would be tricky to post code snippets since the project is huge, but due to the nature of the error (and how it disappears when commenting out unrelated code) I'm convinced the problem is related to compiler/linker flags, alignment, or section locations.
I'm debugging using redream's GDB bridge, but it doesn't allow much in the way of debugging before main().
Output from gcc/g++/ld with -v option:
5>@ C.kos.C++ <dreamcast/release:dc_test>main.o
5>Using built-in specs.
5>COLLECT_GCC=C:/msys32/opt/toolchains/dc/sh-elf/bin/sh-elf-g++.exe
5>Target: sh-elf
5>Configured with: ../gcc-4.7.3/configure --target=sh-elf --prefix=/opt/toolchains/dc/sh-elf --without-headers --with-newlib --enable-languages=c --disable-libssp --disable-tls --with-multilib-list=m4-single-only,m4-nofpu,m4 --with-endian=little --with-cpu=m4-single-only CXX=g++ : (reconfigured) ../gcc-4.7.3/configure --target=sh-elf --prefix=/opt/toolchains/dc/sh-elf --with-newlib --disable-libssp --disable-tls --enable-threads=kos --enable-languages=c,c++,objc,obj-c++ --with-multilib-list=m4-single-only,m4-nofpu,m4 --with-endian=little --with-cpu=m4-single-only CXX=g++
5>Thread model: kos
5>gcc version 4.7.3 (GCC)
5>COLLECT_GCC_OPTIONS='-c' '-std=gnu++11' '-v' '-O2' '-fomit-frame-pointer' '-ml' '-m4-single-only' '-ffunction-sections' '-fdata-sections' '-Wall' '-g' '-fno-builtin' '-fno-strict-aliasing' '-fno-operator-names' '-fno-exceptions' '-I' 'C:/dev/dc_test' '-I' 'C:/dev/dc_test/ion' '-I' 'C:/dev/dc_test/dc_test' '-I' 'C:/msys32/opt/toolchains/dc/kos/include' '-I' 'C:/msys32/opt/toolchains/dc/kos/kernel/arch/dreamcast/include' '-I' 'C:/msys32/opt/toolchains/dc/kos/addons/include' '-I' 'C:/msys32/opt/toolchains/dc/kos-ports/include' '-D' '_arch_dreamcast' '-D' '_arch_sub_pristine' '-D' 'ION_BUILD_RELEASE' '-D' 'ION_PLATFORM_DREAMCAST' '-D' 'ION_PLATFORM_32BIT' '-D' 'ION_TOOLCHAIN_KOS' '-D' 'ION_ENDIAN_LITTLE' '-D' 'ION_RENDERER_OPENGL' '-D' 'ION_RENDERER_FIXED' '-D' 'ION_RENDER_SUPPORTS_GLUT' '-o' 'C:/dev/dc_test/dc_test/_Build/dreamcast/_intermediates_/dreamcast-release/bigevilcorp/dc_test/dc_test/main.o'
5> c:/msys32/opt/toolchains/dc/sh-elf/bin/../libexec/gcc/sh-elf/4.7.3/cc1plus.exe -quiet -v -I C:/dev/dc_test -I C:/dev/dc_test/ion -I C:/dev/dc_test/dc_test -I C:/msys32/opt/toolchains/dc/kos/include -I C:/msys32/opt/toolchains/dc/kos/kernel/arch/dreamcast/include -I C:/msys32/opt/toolchains/dc/kos/addons/include -I C:/msys32/opt/toolchains/dc/kos-ports/include -iprefix c:\msys32\opt\toolchains\dc\sh-elf\bin\../lib/gcc/sh-elf/4.7.3/ -D _arch_dreamcast -D _arch_sub_pristine -D ION_BUILD_RELEASE -D ION_PLATFORM_DREAMCAST -D ION_PLATFORM_32BIT -D ION_TOOLCHAIN_KOS -D ION_ENDIAN_LITTLE -D ION_RENDERER_OPENGL -D ION_RENDERER_FIXED -D ION_RENDER_SUPPORTS_GLUT C:/dev/dc_test/dc_test/main.cpp -quiet -dumpbase main.cpp -ml -m4-single-only -auxbase-strip C:/dev/dc_test/dc_test/_Build/dreamcast/_intermediates_/dreamcast-release/bigevilcorp/dc_test/dc_test/main.o -g -O2 -Wall -std=gnu++11 -version -fomit-frame-pointer -ffunction-sections -fdata-sections -fno-builtin -fno-strict-aliasing -fno-operator-names -fno-exceptions -o C:\Users\Matt\AppData\Local\Temp\cc7bEQ4v.s
5>GNU C++ (GCC) version 4.7.3 (sh-elf)
5> compiled by GNU C version 6.2.0, GMP version 4.3.2, MPFR version 2.4.2, MPC version 0.8.1
5>GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
5>ignoring nonexistent directory "c:\msys32\opt\toolchains\dc\sh-elf\bin\../lib/gcc/sh-elf/4.7.3/../../../../sh-elf/sys-include"
5>ignoring duplicate directory "C:/msys32/opt/toolchains/dc/sh-elf/lib/gcc/../../lib/gcc/sh-elf/4.7.3/../../../../sh-elf/include/c++/4.7.3"
5>ignoring duplicate directory "C:/msys32/opt/toolchains/dc/sh-elf/lib/gcc/../../lib/gcc/sh-elf/4.7.3/../../../../sh-elf/include/c++/4.7.3/sh-elf"
5>ignoring duplicate directory "C:/msys32/opt/toolchains/dc/sh-elf/lib/gcc/../../lib/gcc/sh-elf/4.7.3/../../../../sh-elf/include/c++/4.7.3/backward"
5>ignoring duplicate directory "C:/msys32/opt/toolchains/dc/sh-elf/lib/gcc/../../lib/gcc/sh-elf/4.7.3/include"
5>ignoring duplicate directory "C:/msys32/opt/toolchains/dc/sh-elf/lib/gcc/../../lib/gcc/sh-elf/4.7.3/include-fixed"
5>ignoring nonexistent directory "C:/msys32/opt/toolchains/dc/sh-elf/lib/gcc/../../lib/gcc/sh-elf/4.7.3/../../../../sh-elf/sys-include"
5>ignoring duplicate directory "C:/msys32/opt/toolchains/dc/sh-elf/lib/gcc/../../lib/gcc/sh-elf/4.7.3/../../../../sh-elf/include"
5>#include "..." search starts here:
5>#include <...> search starts here:
5> C:/dev/dc_test
5> C:/dev/dc_test/ion
5> C:/dev/dc_test/dc_test
5> C:/msys32/opt/toolchains/dc/kos/include
5> C:/msys32/opt/toolchains/dc/kos/kernel/arch/dreamcast/include
5> C:/msys32/opt/toolchains/dc/kos/addons/include
5> C:/msys32/opt/toolchains/dc/kos-ports/include
5> c:\msys32\opt\toolchains\dc\sh-elf\bin\../lib/gcc/sh-elf/4.7.3/../../../../sh-elf/include/c++/4.7.3
5> c:\msys32\opt\toolchains\dc\sh-elf\bin\../lib/gcc/sh-elf/4.7.3/../../../../sh-elf/include/c++/4.7.3/sh-elf
5> c:\msys32\opt\toolchains\dc\sh-elf\bin\../lib/gcc/sh-elf/4.7.3/../../../../sh-elf/include/c++/4.7.3/backward
5> c:\msys32\opt\toolchains\dc\sh-elf\bin\../lib/gcc/sh-elf/4.7.3/include
5> c:\msys32\opt\toolchains\dc\sh-elf\bin\../lib/gcc/sh-elf/4.7.3/include-fixed
5> c:\msys32\opt\toolchains\dc\sh-elf\bin\../lib/gcc/sh-elf/4.7.3/../../../../sh-elf/include
5>End of search list.
5>GNU C++ (GCC) version 4.7.3 (sh-elf)
5> compiled by GNU C version 6.2.0, GMP version 4.3.2, MPFR version 2.4.2, MPC version 0.8.1
5>GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
5>Compiler executable checksum: 58bc609f140e81e706072f4925b6261e
5>COLLECT_GCC_OPTIONS='-c' '-std=gnu++11' '-v' '-O2' '-fomit-frame-pointer' '-ml' '-m4-single-only' '-ffunction-sections' '-fdata-sections' '-Wall' '-g' '-fno-builtin' '-fno-strict-aliasing' '-fno-operator-names' '-fno-exceptions' '-I' 'C:/dev/dc_test' '-I' 'C:/dev/dc_test/ion' '-I' 'C:/dev/dc_test/dc_test' '-I' 'C:/msys32/opt/toolchains/dc/kos/include' '-I' 'C:/msys32/opt/toolchains/dc/kos/kernel/arch/dreamcast/include' '-I' 'C:/msys32/opt/toolchains/dc/kos/addons/include' '-I' 'C:/msys32/opt/toolchains/dc/kos-ports/include' '-D' '_arch_dreamcast' '-D' '_arch_sub_pristine' '-D' 'ION_BUILD_RELEASE' '-D' 'ION_PLATFORM_DREAMCAST' '-D' 'ION_PLATFORM_32BIT' '-D' 'ION_TOOLCHAIN_KOS' '-D' 'ION_ENDIAN_LITTLE' '-D' 'ION_RENDERER_OPENGL' '-D' 'ION_RENDERER_FIXED' '-D' 'ION_RENDER_SUPPORTS_GLUT' '-o' 'C:/dev/dc_test/dc_test/_Build/dreamcast/_intermediates_/dreamcast-release/bigevilcorp/dc_test/dc_test/main.o'
5> c:/msys32/opt/toolchains/dc/sh-elf/bin/../lib/gcc/sh-elf/4.7.3/../../../../sh-elf/bin/as.exe -little -o C:/dev/dc_test/dc_test/_Build/dreamcast/_intermediates_/dreamcast-release/bigevilcorp/dc_test/dc_test/main.o C:\Users\Matt\AppData\Local\Temp\cc7bEQ4v.s
5>COMPILER_PATH=c:/msys32/opt/toolchains/dc/sh-elf/bin/../libexec/gcc/sh-elf/4.7.3/;c:/msys32/opt/toolchains/dc/sh-elf/bin/../libexec/gcc/;c:/msys32/opt/toolchains/dc/sh-elf/bin/../lib/gcc/sh-elf/4.7.3/../../../../sh-elf/bin/
5>LIBRARY_PATH=c:/msys32/opt/toolchains/dc/sh-elf/bin/../lib/gcc/sh-elf/4.7.3/;c:/msys32/opt/toolchains/dc/sh-elf/bin/../lib/gcc/;c:/msys32/opt/toolchains/dc/sh-elf/bin/../lib/gcc/sh-elf/4.7.3/../../../../sh-elf/lib/
5>COLLECT_GCC_OPTIONS='-c' '-std=gnu++11' '-v' '-O2' '-fomit-frame-pointer' '-ml' '-m4-single-only' '-ffunction-sections' '-fdata-sections' '-Wall' '-g' '-fno-builtin' '-fno-strict-aliasing' '-fno-operator-names' '-fno-exceptions' '-I' 'C:/dev/dc_test' '-I' 'C:/dev/dc_test/ion' '-I' 'C:/dev/dc_test/dc_test' '-I' 'C:/msys32/opt/toolchains/dc/kos/include' '-I' 'C:/msys32/opt/toolchains/dc/kos/kernel/arch/dreamcast/include' '-I' 'C:/msys32/opt/toolchains/dc/kos/addons/include' '-I' 'C:/msys32/opt/toolchains/dc/kos-ports/include' '-D' '_arch_dreamcast' '-D' '_arch_sub_pristine' '-D' 'ION_BUILD_RELEASE' '-D' 'ION_PLATFORM_DREAMCAST' '-D' 'ION_PLATFORM_32BIT' '-D' 'ION_TOOLCHAIN_KOS' '-D' 'ION_ENDIAN_LITTLE' '-D' 'ION_RENDERER_OPENGL' '-D' 'ION_RENDERER_FIXED' '-D' 'ION_RENDER_SUPPORTS_GLUT' '-o' 'C:/dev/dc_test/dc_test/_Build/dreamcast/_intermediates_/dreamcast-release/bigevilcorp/dc_test/dc_test/main.o'
5>@ C.kos.Link <dreamcast/release:dc_test>dc_test.elf
5>Using built-in specs.
5>COLLECT_GCC=C:/msys32/opt/toolchains/dc/sh-elf/bin/sh-elf-g++.exe
5>COLLECT_LTO_WRAPPER=c:/msys32/opt/toolchains/dc/sh-elf/bin/../libexec/gcc/sh-elf/4.7.3/lto-wrapper.exe
5>Target: sh-elf
5>Configured with: ../gcc-4.7.3/configure --target=sh-elf --prefix=/opt/toolchains/dc/sh-elf --without-headers --with-newlib --enable-languages=c --disable-libssp --disable-tls --with-multilib-list=m4-single-only,m4-nofpu,m4 --with-endian=little --with-cpu=m4-single-only CXX=g++ : (reconfigured) ../gcc-4.7.3/configure --target=sh-elf --prefix=/opt/toolchains/dc/sh-elf --with-newlib --disable-libssp --disable-tls --enable-threads=kos --enable-languages=c,c++,objc,obj-c++ --with-multilib-list=m4-single-only,m4-nofpu,m4 --with-endian=little --with-cpu=m4-single-only CXX=g++
5>Thread model: kos
5>gcc version 4.7.3 (GCC)
5>COMPILER_PATH=c:/msys32/opt/toolchains/dc/sh-elf/bin/../libexec/gcc/sh-elf/4.7.3/;c:/msys32/opt/toolchains/dc/sh-elf/bin/../libexec/gcc/;c:/msys32/opt/toolchains/dc/sh-elf/bin/../lib/gcc/sh-elf/4.7.3/../../../../sh-elf/bin/
5>LIBRARY_PATH=c:/msys32/opt/toolchains/dc/sh-elf/bin/../lib/gcc/sh-elf/4.7.3/;c:/msys32/opt/toolchains/dc/sh-elf/bin/../lib/gcc/;c:/msys32/opt/toolchains/dc/sh-elf/bin/../lib/gcc/sh-elf/4.7.3/../../../../sh-elf/lib/
5>COLLECT_GCC_OPTIONS='-o' 'C:/dev/dc_test/dc_test/_Build/dreamcast/_intermediates_/dreamcast-release/bigevilcorp/dc_test/dc_test/dc_test.elf' '-LC:/msys32/opt/toolchains/dc/kos/lib/dreamcast' '-LC:/msys32/opt/toolchains/dc/kos/addons/lib/dreamcast' '-LC:/msys32/opt/toolchains/dc/kos-ports/lib' '-LC:/msys32/opt/toolchains/dc/sh-elf/sh-elf/lib' '-LC:/msys32/opt/toolchains/dc/sh-elf/lib/gcc/sh-elf/4.7.3' '-v' '-O2' '-fomit-frame-pointer' '-ml' '-m4-single-only' '-ffunction-sections' '-fdata-sections' '-Wall' '-g' '-fno-builtin' '-fno-strict-aliasing' '-fno-operator-names' '-fno-exceptions' '-v' '-T' 'C:/msys32/opt/toolchains/dc/kos/utils/ldscripts/shlelf.xc' '-nodefaultlibs'
5> c:/msys32/opt/toolchains/dc/sh-elf/bin/../libexec/gcc/sh-elf/4.7.3/collect2.exe -m shlelf -o C:/dev/dc_test/dc_test/_Build/dreamcast/_intermediates_/dreamcast-release/bigevilcorp/dc_test/dc_test/dc_test.elf c:/msys32/opt/toolchains/dc/sh-elf/bin/../lib/gcc/sh-elf/4.7.3/crt1.o c:/msys32/opt/toolchains/dc/sh-elf/bin/../lib/gcc/sh-elf/4.7.3/crti.o c:/msys32/opt/toolchains/dc/sh-elf/bin/../lib/gcc/sh-elf/4.7.3/crtbegin.o -LC:/msys32/opt/toolchains/dc/kos/lib/dreamcast -LC:/msys32/opt/toolchains/dc/kos/addons/lib/dreamcast -LC:/msys32/opt/toolchains/dc/kos-ports/lib -LC:/msys32/opt/toolchains/dc/sh-elf/sh-elf/lib -LC:/msys32/opt/toolchains/dc/sh-elf/lib/gcc/sh-elf/4.7.3 -Lc:/msys32/opt/toolchains/dc/sh-elf/bin/../lib/gcc/sh-elf/4.7.3 -Lc:/msys32/opt/toolchains/dc/sh-elf/bin/../lib/gcc -Lc:/msys32/opt/toolchains/dc/sh-elf/bin/../lib/gcc/sh-elf/4.7.3/../../../../sh-elf/lib C:/dev/dc_test/dc_test/_Build/dreamcast/_intermediates_/dreamcast-release/bigevilcorp/dc_test/dc_test/main.o --start-group C:/msys32/opt/toolchains/dc/kos/lib/dreamcast/libkallisti.a C:/msys32/opt/toolchains/dc/sh-elf/sh-elf/lib/libc.a C:/msys32/opt/toolchains/dc/sh-elf/lib/gcc/sh-elf/4.7.3/libgcc.a C:/msys32/opt/toolchains/dc/sh-elf/sh-elf/lib/libstdc++.a --end-group --gc-sections c:/msys32/opt/toolchains/dc/sh-elf/bin/../lib/gcc/sh-elf/4.7.3/crtend.o c:/msys32/opt/toolchains/dc/sh-elf/bin/../lib/gcc/sh-elf/4.7.3/crtn.o -T C:/msys32/opt/toolchains/dc/kos/utils/ldscripts/shlelf.xc
Cheers