vegastrike / Vega-Strike-Engine-Source

Vega Strike Engine
Other
255 stars 42 forks source link

Segfault in blutLoadWAVMemory #160

Closed illuhad closed 4 years ago

illuhad commented 4 years ago

Hi,

first of all, let me say that I'm thrilled that this project is being resurrected. I remember pouring a lot of time in this game back in the old days :) While I may not have the time to contribute a lot of code, I can offer to help with code reviews of the C++ stuff if you need some more eyes. I work on C++ compiler technologies for GPGPU/high performance computing in my day job, so I'm used to C++ code ;)

Anyway, when trying out current master, it segfaults for me at startup (see below).

My system:

What I did:

The game then immediately segfaults. Here is some gdb output after I recompiled with -O -g:

Thread 1 "vegastrike" received signal SIGSEGV, Segmentation fault.
blutLoadWAVMemory (memory=<optimized out>, format=format@entry=0x7fffffffb888, data=data@entry=0x7fffffffb880, size=size@entry=0x7fffffffb88c, freq=freq@entry=0x7fffffffb890, loop=loop@entry=0x7fffffffb894 "")
    at /usr/include/powerpc64le-linux-gnu/bits/string_fortified.h:34
34        return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
(gdb) bt
#0  blutLoadWAVMemory (memory=<optimized out>, format=format@entry=0x7fffffffb888, data=data@entry=0x7fffffffb880, size=size@entry=0x7fffffffb88c, freq=freq@entry=0x7fffffffb890, loop=loop@entry=0x7fffffffb894 "")
    at /usr/include/powerpc64le-linux-gnu/bits/string_fortified.h:34
#1  0x0000000010201524 in AUDLoadSoundFile (s=<optimized out>, info=info@entry=0x7fffffffb858, use_fileptr=use_fileptr@entry=false) at /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/aldrv/al_sound.cpp:475
#2  0x0000000010201924 in AUDCreateSoundWAV (s="beam.wav", music=music@entry=false, LOOP=<optimized out>) at /usr/include/c++/9/bits/basic_string.h:2300
#3  0x0000000010201bd8 in AUDCreateSoundWAV (s=..., LOOP=<optimized out>) at /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/aldrv/al_sound.cpp:554
#4  0x00000000104a6568 in BeamXML::beginElement (userData=<optimized out>, name=<optimized out>, atts=<optimized out>) at /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/cmd/weapon_xml.cpp:330
#5  0x00000000104a7028 in BeamXML::beginElementXML_Char (userData=<optimized out>, name=<optimized out>, atts=<optimized out>) at /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/cmd/weapon_xml.cpp:231
#6  0x00007ffff728d244 in ?? () from /lib/powerpc64le-linux-gnu/libexpat.so.1
#7  0x00007ffff728bac4 in ?? () from /lib/powerpc64le-linux-gnu/libexpat.so.1
#8  0x00007ffff728f78c in ?? () from /lib/powerpc64le-linux-gnu/libexpat.so.1
#9  0x00007ffff7292224 in XML_ParseBuffer () from /lib/powerpc64le-linux-gnu/libexpat.so.1
#10 0x00007ffff7292ab4 in XML_Parse () from /lib/powerpc64le-linux-gnu/libexpat.so.1
#11 0x00000000104a38ec in LoadWeapons (filename=<optimized out>) at /usr/include/c++/9/bits/basic_string.h:2300
#12 0x00000000105251b8 in Universe::Init (this=0x11238a60, gal=0x10ff8258 <game_options+184> "milky_way.xml") at /usr/include/c++/9/bits/basic_string.h:2300
#13 0x000000001009a58c in GameUniverse::Init (this=this@entry=0x11238a60, argc=argc@entry=1, argv=argv@entry=0x7fffffffee58, galaxy=galaxy@entry=0x10ff8258 <game_options+184> "milky_way.xml") at /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/universe.cpp:97
#14 0x000000001009a664 in GameUniverse::GameUniverse (this=0x11238a60, argc=<optimized out>, argv=0x7fffffffee58, galaxy=0x10ff8258 <game_options+184> "milky_way.xml") at /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/universe.cpp:102
#15 0x0000000010352898 in main (argc=<optimized out>, argv=0x7fffffffee58) at /usr/include/c++/9/bits/basic_string.h:2300
(gdb) frame 0
#0  blutLoadWAVMemory (memory=<optimized out>, format=format@entry=0x7fffffffb888, data=data@entry=0x7fffffffb880, size=size@entry=0x7fffffffb88c, freq=freq@entry=0x7fffffffb890, loop=loop@entry=0x7fffffffb894 "")
    at /usr/include/powerpc64le-linux-gnu/bits/string_fortified.h:34
34        return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
(gdb) info local
ChunkHdr = {Id = "fmt ", Size = 268435456}
FmtExHdr = <optimized out>
FileHdr = {Id = "RIFF", Size = 1084425204, Type = "WAVE"}
SmplHdr = <optimized out>
FmtHdr = {Format = 256, Channels = 1, SamplesPerSec = 22050, BytesPerSec = 44100, BlockAlign = 2, BitsPerSample = 16}
Stream = 0x21d74df4 <error: Cannot access memory at address 0x21d74df4>
(gdb) frame 4
#4  0x00000000104a6568 in BeamXML::beginElement (userData=<optimized out>, name=<optimized out>, atts=<optimized out>) at /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/cmd/weapon_xml.cpp:330
330                     tmpweapon.sound    = AUDCreateSoundWAV( (*iter).value, tmpweapon.type == weapon_info::PROJECTILE );
(gdb) info local
gun_speed = 1
gamma = 27
attributes = {<std::vector<XMLSupport::Attribute, std::allocator<XMLSupport::Attribute> >> = std::vector of length 6, capacity 8 = {{name = "file", value = "weapons/unknown_beam.texture"}, {name = "soundwav", value = "beam.wav"}, {name = "r", value = ".7"}, {name = "g", 
      value = "1"}, {name = "b", value = ".7"}, {name = "a", value = "1"}}, <No data fields>}
weaptyp = <optimized out>
elem = <optimized out>
iter = {name = "soundwav", value = "beam.wav"}

I tried disabling sound in vegasettings since this seems to be related to audio, but this did not seem to have any effect. Do you have any ideas what I should look at next?

nabaco commented 4 years ago

Hi @illuhad, thanks for filing the ticket and supplying the info.

Though Ubuntu 20.04 support is somewhat marginal right now, and ppc64le is not supported at all, I agree that it might be good to investigate this further. Though box will have to be our test-bed :)

For starters, could you please write the exact CMAKE command you used for compilation. Additionally, could you please mention which compiler are you using. Finally, if you have the time and motivation, could you please try to recompile with -Og and repost here the debugger output?

@stephengtuggy do you know whether ppc64le is mentioned/supported in our POSH file?

illuhad commented 4 years ago

I just ran ccmake -DCMAKE_BUILD_TYPE=Debug ../engine (tried Release first, and then switched to Debug when it crashed) and then changed BUILD_OPT to -g -mcpu=power8 -Wno-narrowing -O inside the ccmake gui. I also increased CPU_SMP to expose more of the CPU resources, although I'm not sure what exactly this flag does - I assume it controls some multithreading optimizations.

Full Cmake configuration:

BUILD_OPT:STRING=-g -mcpu=power8 -Wno-narrowing -O
Boost_ATOMIC_LIBRARY_DEBUG:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_atomic.so
Boost_ATOMIC_LIBRARY_RELEASE:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_atomic.so
Boost_CHRONO_LIBRARY_DEBUG:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_chrono.so
Boost_CHRONO_LIBRARY_RELEASE:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_chrono.so
Boost_DATE_TIME_LIBRARY_DEBUG:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_date_time.so
Boost_DATE_TIME_LIBRARY_RELEASE:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_date_time.so
Boost_DIR:PATH=Boost_DIR-NOTFOUND
Boost_FILESYSTEM_LIBRARY_DEBUG:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_filesystem.so
Boost_FILESYSTEM_LIBRARY_RELEASE:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_filesystem.so
Boost_INCLUDE_DIR:PATH=/usr/include
Boost_LIBRARY_DIR_DEBUG:PATH=/usr/lib/powerpc64le-linux-gnu
Boost_LIBRARY_DIR_RELEASE:PATH=/usr/lib/powerpc64le-linux-gnu
Boost_LOG_LIBRARY_DEBUG:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_log.so
Boost_LOG_LIBRARY_RELEASE:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_log.so
Boost_LOG_SETUP_LIBRARY_DEBUG:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_log_setup.so
Boost_LOG_SETUP_LIBRARY_RELEASE:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_log_setup.so
Boost_PYTHON_LIBRARY_DEBUG:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_python.so
Boost_PYTHON_LIBRARY_RELEASE:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_python.so
Boost_REGEX_LIBRARY_DEBUG:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_regex.so
Boost_REGEX_LIBRARY_RELEASE:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_regex.so
Boost_SYSTEM_LIBRARY_DEBUG:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_system.so
Boost_SYSTEM_LIBRARY_RELEASE:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_system.so
Boost_THREAD_LIBRARY_DEBUG:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_thread.so
Boost_THREAD_LIBRARY_RELEASE:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libboost_thread.so
CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line
CMAKE_AR:FILEPATH=/usr/bin/ar
CMAKE_BUILD_TYPE:STRING=Debug
CMAKE_COLOR_MAKEFILE:BOOL=ON
CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++
CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-9
CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-9
CMAKE_CXX_FLAGS:STRING=
CMAKE_CXX_FLAGS_DEBUG:STRING= -g -mcpu=power8 -Wno-narrowing -O   -ftree-parallelize-loops=8   -DNV_CUBE_MAP -DBOOST_PYTHON_NO_PY_SIGNATURES -DBOOST_LOG_DYN_LINK  -include config.h -pipe -g2 -std=c++11 -Wall -fvisibility=hidden
CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_CXX_FLAGS_PROFILER:STRING= -g -mcpu=power8 -Wno-narrowing -O   -ftree-parallelize-loops=8   -DNV_CUBE_MAP -DBOOST_PYTHON_NO_PY_SIGNATURES -DBOOST_LOG_DYN_LINK  -pg -g2 -include config.h -pipe -std=c++11 -Wall -Wno-unused-function -Wno-unused-variable
CMAKE_CXX_FLAGS_RELEASE:STRING= -g -mcpu=power8 -Wno-narrowing -O   -ftree-parallelize-loops=8   -DNV_CUBE_MAP -DBOOST_PYTHON_NO_PY_SIGNATURES -DBOOST_LOG_DYN_LINK  -include config.h -pipe -std=c++11 -Wall -fvisibility=hidden
CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc
CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-9
CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-9
CMAKE_C_FLAGS:STRING=
CMAKE_C_FLAGS_DEBUG:STRING=  -g -mcpu=power8 -Wno-narrowing -O   -ftree-parallelize-loops=8   -DNV_CUBE_MAP -DBOOST_PYTHON_NO_PY_SIGNATURES -DBOOST_LOG_DYN_LINK  -include config.h -pipe -g2 -Wall -Wno-unused-function -Wno-unused-variable -fvisibility=hidden
CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
CMAKE_C_FLAGS_PROFILER:STRING= -g -mcpu=power8 -Wno-narrowing -O   -ftree-parallelize-loops=8   -DNV_CUBE_MAP -DBOOST_PYTHON_NO_PY_SIGNATURES -DBOOST_LOG_DYN_LINK  -pg -g2 -include config.h -pipe -Wall -Wno-unused-function -Wno-unused-variable
CMAKE_C_FLAGS_RELEASE:STRING= -g -mcpu=power8 -Wno-narrowing -O   -ftree-parallelize-loops=8   -DNV_CUBE_MAP -DBOOST_PYTHON_NO_PY_SIGNATURES -DBOOST_LOG_DYN_LINK  -include config.h -pipe -Wall -Wno-unused-function -Wno-unused-variable -fvisibility=hidden
CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND
CMAKE_EXE_LINKER_FLAGS:STRING=
CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=-Bsymbolic 
CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_EXE_LINKER_FLAGS_PROFILER:STRING=-Bsymbolic 
CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=-Bsymbolic
CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF
CMAKE_INSTALL_PREFIX:PATH=/usr/local
CMAKE_LINKER:FILEPATH=/usr/bin/ld
CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make
CMAKE_MODULE_LINKER_FLAGS:STRING=
CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_NM:FILEPATH=/usr/bin/nm
CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy
CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump
CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib
CMAKE_READELF:FILEPATH=/usr/bin/readelf
CMAKE_SHARED_LINKER_FLAGS:STRING=
CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
CMAKE_SKIP_RPATH:BOOL=NO
CMAKE_STATIC_LINKER_FLAGS:STRING=
CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=
CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=
CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=
CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
CMAKE_STRIP:FILEPATH=/usr/bin/strip
CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE
CPACK_SOURCE_RPM:BOOL=OFF
CPACK_SOURCE_TBZ2:BOOL=ON
CPACK_SOURCE_TGZ:BOOL=ON
CPACK_SOURCE_TXZ:BOOL=ON
CPACK_SOURCE_TZ:BOOL=ON
CPACK_SOURCE_ZIP:BOOL=OFF
CPUAMD_k10:BOOL=OFF
CPUAMD_k8:BOOL=OFF
CPUAMD_k9:BOOL=OFF
CPUAMD_vishera:BOOL=OFF
CPUINTEL_core2:BOOL=OFF
CPUINTEL_native:BOOL=OFF
CPUINTEL_nocona:BOOL=OFF
CPUINTEL_p4:BOOL=OFF
CPUINTEL_prescott:BOOL=OFF
CPU_SMP:STRING=8
DATADIR:STRING=
DISABLE_CLIENT:BOOL=OFF
DISABLE_FFMPEG:BOOL=ON
DISABLE_OGRE:BOOL=ON
ENABLE_PIE:BOOL=OFF
EXPAT_INCLUDE_DIR:PATH=/usr/include
EXPAT_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libexpat.so
GLUT_INCLUDE_DIR:PATH=/usr/include
GLUT_Xi_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libXi.so
GLUT_Xmu_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libXmu.so
GLUT_glut_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libglut.so
GTK2_ATK_INCLUDE_DIR:PATH=/usr/include/atk-1.0
GTK2_ATK_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libatk-1.0.so
GTK2_CAIRO_INCLUDE_DIR:PATH=/usr/include/cairo
GTK2_CAIRO_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libpangocairo-1.0.so
GTK2_GDK_INCLUDE_DIR:PATH=/usr/lib/powerpc64le-linux-gnu/gtk-2.0/include
GTK2_GDK_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgdk-x11-2.0.so
GTK2_GDK_PIXBUF_INCLUDE_DIR:PATH=/usr/include/gdk-pixbuf-2.0
GTK2_GDK_PIXBUF_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgdk_pixbuf-2.0.so
GTK2_GLIBCONFIG_INCLUDE_DIR:PATH=/usr/lib/powerpc64le-linux-gnu/glib-2.0/include
GTK2_GLIB_INCLUDE_DIR:PATH=/usr/include/glib-2.0
GTK2_GLIB_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libglib-2.0.so
GTK2_GMODULE_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgmodule-2.0.so
GTK2_GOBJECT_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgobject-2.0.so
GTK2_GTHREAD_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgthread-2.0.so
GTK2_GTKGL_INCLUDE_DIR:PATH=GTK2_GTKGL_INCLUDE_DIR-NOTFOUND
GTK2_GTKGL_LIBRARY:FILEPATH=GTK2_GTKGL_LIBRARY-NOTFOUND
GTK2_GTK_INCLUDE_DIR:PATH=/usr/include/gtk-2.0
GTK2_GTK_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgtk-x11-2.0.so
GTK2_PANGO_INCLUDE_DIR:PATH=/usr/include/pango-1.0
GTK2_PANGO_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libpango-1.0.so
HAS_APT:FILEPATH=/usr/bin/apt-get
HAS_RPMBUILD:FILEPATH=/usr/bin/rpmbuild
JPEG_INCLUDE_DIR:PATH=/usr/include
JPEG_LIBRARY_DEBUG:FILEPATH=JPEG_LIBRARY_DEBUG-NOTFOUND
JPEG_LIBRARY_RELEASE:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libjpeg.so
MATH_INCLUDE_DIRS:PATH=/usr/include
MATH_LIBRARIES:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libm.so
OPENAL_INCLUDE_DIR:PATH=/usr/include/AL
OPENAL_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libopenal.so
OPENGL_EGL_INCLUDE_DIR:PATH=/usr/include
OPENGL_GLX_INCLUDE_DIR:PATH=/usr/include
OPENGL_INCLUDE_DIR:PATH=/usr/include
OPENGL_egl_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libEGL.so
OPENGL_glu_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libGLU.so
OPENGL_glx_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libGLX.so
OPENGL_opengl_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libOpenGL.so
OPENGL_xmesa_INCLUDE_DIR:PATH=OPENGL_xmesa_INCLUDE_DIR-NOTFOUND
PKG_CONFIG_EXECUTABLE:FILEPATH=/usr/bin/pkg-config
PNG_INCLUDE_DIRS:PATH=/usr/include
PNG_LIBRARIES:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libpng.so
PYTHON_INCLUDE_DIR:PATH=/usr/include/python2.7
PYTHON_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libpython2.7.so
PYTHON_LIBRARY_DEBUG:FILEPATH=PYTHON_LIBRARY_DEBUG-NOTFOUND
SDLMAIN_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libSDLmain.a
SDL_INCLUDE_DIR:PATH=/usr/include/SDL
SDL_LIBRARY:STRING=/usr/lib/powerpc64le-linux-gnu/libSDLmain.a;/usr/lib/powerpc64le-linux-gnu/libSDL.so;-lpthread
USE_NET_THREAD_POSIX:BOOL=OFF
USE_PYTHON_3:BOOL=OFF
USE_SYSTEM_BOOST:BOOL=ON
UTIL_LIB:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libutil.so
ZLIB_INCLUDE_DIR:PATH=/usr/include
ZLIB_LIBRARY_DEBUG:FILEPATH=ZLIB_LIBRARY_DEBUG-NOTFOUND
ZLIB_LIBRARY_RELEASE:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libz.so
ogg_INCLUDE_DIR:PATH=/usr/include/ogg
ogg_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libogg.so
pkgcfg_lib_Atk_atk-1.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libatk-1.0.so
pkgcfg_lib_Atk_glib-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libglib-2.0.so
pkgcfg_lib_Atk_gobject-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgobject-2.0.so
pkgcfg_lib_Cairo_cairo:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libcairo.so
pkgcfg_lib_LIBPNG_png16:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libpng16.so
pkgcfg_lib_LIBPNG_z:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libz.so
pkgcfg_lib_PC_EXPAT_expat:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libexpat.so
pkgcfg_lib_Pango_glib-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libglib-2.0.so
pkgcfg_lib_Pango_gobject-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgobject-2.0.so
pkgcfg_lib_Pango_harfbuzz:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libharfbuzz.so
pkgcfg_lib_Pango_pango-1.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libpango-1.0.so
pkgcfg_lib_gdk2.0_cairo:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libcairo.so
pkgcfg_lib_gdk2.0_gdk-x11-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgdk-x11-2.0.so
pkgcfg_lib_gdk2.0_gdk_pixbuf-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgdk_pixbuf-2.0.so
pkgcfg_lib_gdk2.0_glib-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libglib-2.0.so
pkgcfg_lib_gdk2.0_gobject-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgobject-2.0.so
pkgcfg_lib_gdk2.0_harfbuzz:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libharfbuzz.so
pkgcfg_lib_gdk2.0_pango-1.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libpango-1.0.so
pkgcfg_lib_gdk2.0_pangocairo-1.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libpangocairo-1.0.so
pkgcfg_lib_glib2.0_glib-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libglib-2.0.so
pkgcfg_lib_gmod2.0_glib-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libglib-2.0.so
pkgcfg_lib_gmod2.0_gmodule-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgmodule-2.0.so
pkgcfg_lib_gtk2.0_atk-1.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libatk-1.0.so
pkgcfg_lib_gtk2.0_cairo:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libcairo.so
pkgcfg_lib_gtk2.0_fontconfig:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libfontconfig.so
pkgcfg_lib_gtk2.0_freetype:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libfreetype.so
pkgcfg_lib_gtk2.0_gdk-x11-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgdk-x11-2.0.so
pkgcfg_lib_gtk2.0_gdk_pixbuf-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgdk_pixbuf-2.0.so
pkgcfg_lib_gtk2.0_gio-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgio-2.0.so
pkgcfg_lib_gtk2.0_glib-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libglib-2.0.so
pkgcfg_lib_gtk2.0_gobject-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgobject-2.0.so
pkgcfg_lib_gtk2.0_gtk-x11-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgtk-x11-2.0.so
pkgcfg_lib_gtk2.0_harfbuzz:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libharfbuzz.so
pkgcfg_lib_gtk2.0_pango-1.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libpango-1.0.so
pkgcfg_lib_gtk2.0_pangocairo-1.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libpangocairo-1.0.so
pkgcfg_lib_gtk2.0_pangoft2-1.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libpangoft2-1.0.so
pkgcfg_lib_pixbuf_gdk_pixbuf-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgdk_pixbuf-2.0.so
pkgcfg_lib_pixbuf_glib-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libglib-2.0.so
pkgcfg_lib_pixbuf_gobject-2.0:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libgobject-2.0.so
vorbis_INCLUDE_DIR:PATH=/usr/include/vorbis
vorbis_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libvorbis.so
vorbisfile_LIBRARY:FILEPATH=/usr/lib/powerpc64le-linux-gnu/libvorbisfile.so

The compiler is the standard Ubuntu 20.04 compiler, which is gcc 9.3:

$ c++ --version
c++ (Ubuntu 9.3.0-10ubuntu2) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

I looked at the source file you mentioned, and power is mentioned here: https://github.com/vegastrike/Vega-Strike-Engine-Source/blob/402ac075b6d2cd3c465a69974f7022cd67412c75/engine/src/posh.h#L405 I tested that section and it indeed resolves to PowerPC64, so that seems to be fine.

Compilation is quite fast on a 80 thread machine, so here goes -Og, although I'm not sure if it has changed the output :)

blutLoadWAVMemory (memory=<optimized out>, format=format@entry=0x7fffffffb8a8, data=data@entry=0x7fffffffb8a0, size=size@entry=0x7fffffffb8ac, freq=freq@entry=0x7fffffffb8b0, loop=loop@entry=0x7fffffffb8b4 "")
    at /usr/include/powerpc64le-linux-gnu/bits/string_fortified.h:34
34        return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
(gdb) bt
#0  blutLoadWAVMemory (memory=<optimized out>, format=format@entry=0x7fffffffb8a8, data=data@entry=0x7fffffffb8a0, size=size@entry=0x7fffffffb8ac, freq=freq@entry=0x7fffffffb8b0, loop=loop@entry=0x7fffffffb8b4 "")
    at /usr/include/powerpc64le-linux-gnu/bits/string_fortified.h:34
#1  0x0000000010228fb4 in AUDLoadSoundFile (s=<optimized out>, info=info@entry=0x7fffffffb878, use_fileptr=use_fileptr@entry=false) at /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/aldrv/al_sound.cpp:475
#2  0x0000000010229e90 in AUDCreateSoundWAV (s="beam.wav", music=music@entry=false, LOOP=<optimized out>) at /usr/include/c++/9/bits/basic_string.h:2300
#3  0x000000001022a0bc in AUDCreateSoundWAV (s=..., LOOP=<optimized out>) at /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/aldrv/al_sound.cpp:554
#4  0x00000000104d02f0 in BeamXML::beginElement (userData=<optimized out>, name=<optimized out>, atts=0x11d80310) at /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/cmd/weapon_xml.cpp:330
#5  0x00000000104d0d08 in BeamXML::beginElementXML_Char (userData=<optimized out>, name=<optimized out>, atts=<optimized out>) at /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/cmd/weapon_xml.cpp:231
#6  0x00007ffff728d244 in ?? () from /lib/powerpc64le-linux-gnu/libexpat.so.1
#7  0x00007ffff728bac4 in ?? () from /lib/powerpc64le-linux-gnu/libexpat.so.1
#8  0x00007ffff728f78c in ?? () from /lib/powerpc64le-linux-gnu/libexpat.so.1
#9  0x00007ffff7292224 in XML_ParseBuffer () from /lib/powerpc64le-linux-gnu/libexpat.so.1
#10 0x00007ffff7292ab4 in XML_Parse () from /lib/powerpc64le-linux-gnu/libexpat.so.1
#11 0x00000000104cf1ec in LoadWeapons (filename=<optimized out>) at /usr/include/c++/9/bits/basic_string.h:2300
#12 0x000000001055a4d8 in Universe::Init (this=0x11286b20, gal=0x11048268 <game_options+184> "milky_way.xml") at /usr/include/c++/9/bits/basic_string.h:2300
#13 0x00000000100b2148 in GameUniverse::Init (this=this@entry=0x11286b20, argc=argc@entry=1, argv=argv@entry=0x7fffffffee78, galaxy=galaxy@entry=0x11048268 <game_options+184> "milky_way.xml") at /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/universe.cpp:97
#14 0x00000000100b2224 in GameUniverse::GameUniverse (this=0x11286b20, argc=<optimized out>, argv=0x7fffffffee78, galaxy=0x11048268 <game_options+184> "milky_way.xml") at /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/universe.cpp:102
#15 0x0000000010380160 in main (argc=<optimized out>, argv=0x7fffffffee78) at /usr/include/c++/9/bits/basic_string.h:2300
(gdb) frame 0
#0  blutLoadWAVMemory (memory=<optimized out>, format=format@entry=0x7fffffffb8a8, data=data@entry=0x7fffffffb8a0, size=size@entry=0x7fffffffb8ac, freq=freq@entry=0x7fffffffb8b0, loop=loop@entry=0x7fffffffb8b4 "")
    at /usr/include/powerpc64le-linux-gnu/bits/string_fortified.h:34
34        return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest));
(gdb) info local
ChunkHdr = {Id = "fmt ", Size = 268435456}
FmtExHdr = <optimized out>
FileHdr = {Id = "RIFF", Size = 1084425204, Type = "WAVE"}
SmplHdr = <optimized out>
FmtHdr = {Format = 256, Channels = 1, SamplesPerSec = 22050, BytesPerSec = 44100, BlockAlign = 2, BitsPerSample = 16}
Stream = 0x21dbe524 <error: Cannot access memory at address 0x21dbe524>
(gdb) frame 4
#4  0x00000000104d02f0 in BeamXML::beginElement (userData=<optimized out>, name=<optimized out>, atts=0x11d80310) at /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/cmd/weapon_xml.cpp:330
330                     tmpweapon.sound    = AUDCreateSoundWAV( (*iter).value, tmpweapon.type == weapon_info::PROJECTILE );
(gdb) info local
gun_speed = 1
gamma = 27
attributes = {<std::vector<XMLSupport::Attribute, std::allocator<XMLSupport::Attribute> >> = std::vector of length 6, capacity 8 = {{name = "file", value = "weapons/unknown_beam.texture"}, {name = "soundwav", value = "beam.wav"}, {name = "r", value = ".7"}, {name = "g", 
      value = "1"}, {name = "b", value = ".7"}, {name = "a", value = "1"}}, <No data fields>}
weaptyp = <optimized out>
elem = <optimized out>
iter = <optimized out>
(gdb) frame 11
#11 0x00000000104cf1ec in LoadWeapons (filename=<optimized out>) at /usr/include/c++/9/bits/basic_string.h:2300
2300          c_str() const _GLIBCXX_NOEXCEPT
(gdb) info local
f = {fp = 0x11ca8770, pk3_file = 0x0, pk3_extracted_file = 0x0, file_index = -1, offset = 0, file_type = VSFileSystem::UnknownFile, alt_type = VSFileSystem::UnknownFile, file_mode = VSFileSystem::ReadOnly, volume_type = VSFileSystem::VSFSNone, 
  filename = "weapon_list.xml", subdirectoryname = "", directoryname = "", rootname = "", size = 40018, valid = true}
err = <optimized out>
parser = 0x11567820

Let me know if you are interested in any other stack frames.

illuhad commented 4 years ago

Since the issue also reproduces with clang, I tried clang 10 address sanitizer:

$ bin/vegastrike_clang_asan 
Registering codec ogg.
 In path /home/aksel/in/vs/Vega-Strike-Engine-Source/bin
Vega Strike  
See http://www.gnu.org/copyleft/gpl.html for license details.

GOT SUBDIR ARG = 
Found data in /home/aksel/in/vs/Vega-Strike-Engine-Source/data
Using /home/aksel/in/vs/Vega-Strike-Engine-Source/data as data directory
Using .vegastrike as the home directory
Found MODDIR = /home/aksel/in/vs/Vega-Strike-Engine-Source/data/mods
USING HOMEDIR : /home/aksel/.vegastrike As the home directory 
CONFIGFILE - Found a config file in home directory, using : /home/aksel/.vegastrike/vegastrike.config
DATADIR - No datadir specified in config file, using ; /home/aksel/in/vs/Vega-Strike-Engine-Source/data
SIMULATION_ATOM: 0.01
MISSION_NAME is empty using : main_menu.mission
running import sys
print(sys.path)
sys.path = ["",r"/home/aksel/in/vs/Vega-Strike-Engine-Source/data/modules/builtin",r"/home/aksel/in/vs/Vega-Strike-Engine-Source/data/modules/quests",r"/home/aksel/in/vs/Vega-Strike-Engine-Source/data/modules/missions",r"/home/aksel/in/vs/Vega-Strike-Engine-Source/data/modules/ai",r"/home/aksel/in/vs/Vega-Strike-Engine-Source/data/modules",r"/home/aksel/in/vs/Vega-Strike-Engine-Source/data/bases"] + sys.path
['/usr/lib/python2.7', '/usr/lib/python2.7/plat-powerpc64le-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload']
testing VS randomrunning import sys
print(sys.path)
['', '/home/aksel/in/vs/Vega-Strike-Engine-Source/data/modules/builtin', '/home/aksel/in/vs/Vega-Strike-Engine-Source/data/modules/quests', '/home/aksel/in/vs/Vega-Strike-Engine-Source/data/modules/missions', '/home/aksel/in/vs/Vega-Strike-Engine-Source/data/modules/ai', '/home/aksel/in/vs/Vega-Strike-Engine-Source/data/modules', '/home/aksel/in/vs/Vega-Strike-Engine-Source/data/bases', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-powerpc64le-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload']
Creating scene manager...
Creating template manager...
  Initializing renderer...
0 joysticks were found.

The names of the joysticks are:
AddressSanitizer:DEADLYSIGNAL
=================================================================
==45993==ERROR: AddressSanitizer: SEGV on unknown address 0x7e00891e1d1c (pc 0x000010747080 bp 0x7fffffffa6e0 sp 0x7fffffffa660 T0)
==45993==The signal is caused by a UNKNOWN memory access.
    #0 0x10747080 in blutLoadWAVMemory(signed char*, int*, void**, int*, int*, char*) /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/aldrv/al_sound.cpp:102:46
    #1 0x10748868 in AUDLoadSoundFile(char const*, AUDSoundProperties*, bool) /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/aldrv/al_sound.cpp:475:5
    #2 0x1074b0b0 in AUDCreateSoundWAV(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/aldrv/al_sound.cpp:533:19
    #3 0x1074b49c in AUDCreateSoundWAV(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/aldrv/al_sound.cpp:554:12
    #4 0x10ccf618 in BeamXML::beginElement(void*, char const*, char const**) /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/cmd/weapon_xml.cpp:330:38
    #5 0x10cce8d4 in BeamXML::beginElementXML_Char(void*, char const*, char const**) /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/cmd/weapon_xml.cpp:231:5
    #6 0x7ffff6dad240  (/lib/powerpc64le-linux-gnu/libexpat.so.1+0xd240)
    #7 0x7ffff6dabac0  (/lib/powerpc64le-linux-gnu/libexpat.so.1+0xbac0)
    #8 0x7ffff6daf788  (/lib/powerpc64le-linux-gnu/libexpat.so.1+0xf788)
    #9 0x7ffff6db2220 in XML_ParseBuffer (/lib/powerpc64le-linux-gnu/libexpat.so.1+0x12220)
    #10 0x7ffff6db2ab0 in XML_Parse (/lib/powerpc64le-linux-gnu/libexpat.so.1+0x12ab0)
    #11 0x10cd1914 in LoadWeapons(char const*) /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/cmd/weapon_xml.cpp:550:5
    #12 0x10e2f3c0 in Universe::Init(char const*) /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/universe_generic.cpp:167:5
    #13 0x103a4770 in GameUniverse::Init(int, char**, char const*) /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/universe.cpp:97:21
    #14 0x103a4c7c in GameUniverse::GameUniverse(int, char**, char const*) /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/universe.cpp:102:11
    #15 0x10a13ef8 in main /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/main.cpp:368:21
    #16 0x7ffff66e8148 in generic_start_main /build/glibc-iUwrk6/glibc-2.31/csu/../csu/libc-start.c:308:16
    #17 0x7ffff66e8320 in __libc_start_main /build/glibc-iUwrk6/glibc-2.31/csu/../sysdeps/unix/sysv/linux/powerpc/libc-start.c:98:10

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /home/aksel/in/vs/Vega-Strike-Engine-Source/engine/src/aldrv/al_sound.cpp:102:46 in blutLoadWAVMemory(signed char*, int*, void**, int*, int*, char*)
==45993==ABORTING

Unfortunately this doesn't reveal much more information..

illuhad commented 4 years ago

Got it! :) Turns out, that some parts of vegastrike, including the al_drv do some arcane byte swapping to correct for endianness. This behavior is controlled by that posh thing, which however treats pretty much anything that isn't x86 as a big endian CPU - which might have been okay 20 years ago ;) ppc64le as a little endian platform is of course much younger, so it swaps bytes even though it wouldn't need to. Of course, incorrectly swapping bytes inside headers of audio files will not result in a good outcome :)

Do you want me to file a PR?

nabaco commented 4 years ago

@illuhad Good job for finding that! Yes, we would absolutely love to receive a PR to fix that. Enjoy the game :)

P.S. if you issue a PR, please add to its description something like "Closes #160" or "Resolves #160"