audetto / AppleWin

Apple II emulator for Linux
GNU General Public License v2.0
47 stars 12 forks source link

Segfault running sa2 / applen on Ubuntu 22.04 LTS #63

Closed cesarmiquel closed 2 years ago

cesarmiquel commented 2 years ago

Hey guys! Was trying to compile and test this port of AppleWin (I'm 100% on linux and would love to have a version of AppleWin running natively on Linux). I was able to compile the SDL2 version and NCurses (I didn't test the QT since I'm trying to avoid installing QT). Both versions compiled fine after installing several dependencies. Unfortunately as soon as I start either version it segfaults. Here's the stack trace of both frontends. Let me know what other information you might need to point me a little to what can be the problem.

NCurses:

$ gdb ./applen 
GNU gdb (Ubuntu 12.0.90-0ubuntu1) 12.0.90
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./applen...
(No debugging symbols found in ./applen)
(gdb) r
Starting program: /home/miquel/Develop/AppleII/AppleWin-audetto-linux/build/applen 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[DSInit] PC=00000000, WC=00000000, Diff=00000000

Program received signal SIGSEGV, Segmentation fault.
0x00005555555ef267 in ClearOverscanVideoArea() ()
(gdb) bt
#0  0x00005555555ef267 in ClearOverscanVideoArea() ()
#1  0x00005555555f2604 in NTSC_SetVideoStyle() ()
#2  0x00005555555fb0de in Video::VideoReinitialize(bool) ()
#3  0x00005555555f277d in NTSC_VideoInit(unsigned char*) ()
#4  0x00005555555fcdc2 in Video::Initialize(unsigned char*, bool) ()
#5  0x0000555555607f63 in LinuxFrame::Initialize(bool) ()
#6  0x0000555555572040 in na2::NFrame::Initialize(bool) ()
#7  0x00005555556080fd in LinuxFrame::Begin() ()
#8  0x000055555556d330 in (anonymous namespace)::run_ncurses(int, char const**) ()
#9  0x000055555556d67c in main ()

ldd output:

$ ldd applen 
        linux-vdso.so.1 (0x00007ffe2c8e3000)
        libncurses.so.6 => /lib/x86_64-linux-gnu/libncurses.so.6 (0x00007f23e4b2b000)
        libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f23e4af9000)
        libevdev.so.2 => /lib/x86_64-linux-gnu/libevdev.so.2 (0x00007f23e4adc000)
        libyaml-0.so.2 => /lib/x86_64-linux-gnu/libyaml-0.so.2 (0x00007f23e4abb000)
        libminizip.so.1 => /lib/x86_64-linux-gnu/libminizip.so.1 (0x00007f23e4800000)
        libpcap.so.0.8 => /lib/x86_64-linux-gnu/libpcap.so.0.8 (0x00007f23e4a6c000)
        libslirp.so.0 => /lib/x86_64-linux-gnu/libslirp.so.0 (0x00007f23e4a4b000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f23e4a2f000)
        libboost_program_options.so.1.74.0 => /lib/x86_64-linux-gnu/libboost_program_options.so.1.74.0 (0x00007f23e47bb000)
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f23e458f000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f23e44a8000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f23e4a0d000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f23e4280000)
        libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007f23e4232000)
        libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f23e40f8000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f23e4f40000)
        libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007f23e4031000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f23e3fbb000)
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f23e3f90000)
        libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007f23e3ec1000)
        liblz4.so.1 => /lib/x86_64-linux-gnu/liblz4.so.1 (0x00007f23e3ea1000)
        libcap.so.2 => /lib/x86_64-linux-gnu/libcap.so.2 (0x00007f23e3e96000)
        libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007f23e3d58000)
        libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007f23e3d30000)

SDL

$ gdb ./sa2                                                                                                                                             
GNU gdb (Ubuntu 12.0.90-0ubuntu1) 12.0.90                                                                                                                                                                          
Copyright (C) 2022 Free Software Foundation, Inc.                                                                                                                                                                  
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>                                                                                                                                      
This is free software: you are free to change and redistribute it.                                                                                                                                                 
There is NO WARRANTY, to the extent permitted by law.                                                                                                                                                              
Type "show copying" and "show warranty" for details.                                                                                                                                                               
This GDB was configured as "x86_64-linux-gnu".                                                                                                                                                                     
Type "show configuration" for configuration details. 
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./sa2...
(No debugging symbols found in ./sa2)
(gdb) r
Starting program: /home/miquel/Develop/AppleII/AppleWin-audetto-linux/build/sa2 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff667f640 (LWP 2539429)]
[New Thread 0x7fffeb7c7640 (LWP 2539431)]
[New Thread 0x7fffeafc6640 (LWP 2539432)]
[New Thread 0x7fffea7c5640 (LWP 2539433)]
[New Thread 0x7fffe9fc4640 (LWP 2539434)]
[New Thread 0x7fffe97c3640 (LWP 2539435)]
[New Thread 0x7fffe8fc2640 (LWP 2539436)]
[New Thread 0x7fffd3fff640 (LWP 2539437)]
[New Thread 0x7fffd37fe640 (LWP 2539438)]
[Thread 0x7fffd37fe640 (LWP 2539438) exited]
[New Thread 0x7fffd37fe640 (LWP 2539439)]
[Thread 0x7fffd37fe640 (LWP 2539439) exited]
[New Thread 0x7fffe854a640 (LWP 2539441)]
[New Thread 0x7fffd37fe640 (LWP 2539442)]
[Thread 0x7fffd37fe640 (LWP 2539442) exited]
[New Thread 0x7fffd37fe640 (LWP 2539443)]
IMGUI_VERSION: 1.88 WIP
GL_VENDOR: Intel
GL_RENDERER: Mesa Intel(R) Xe Graphics (TGL GT2)
GL_VERSION: OpenGL ES 3.2 Mesa 22.0.1
GL_SHADING_LANGUAGE_VERSION: OpenGL ES GLSL ES 3.20
Default GL swap interval: -1
[DSInit] PC=00000000, WC=00000000, Diff=00000000

Thread 1 "sa2" received signal SIGSEGV, Segmentation fault.
0x0000555555730c15 in ClearOverscanVideoArea() ()
(gdb) bt
#0  0x0000555555730c15 in ClearOverscanVideoArea() ()
#1  0x0000555555733fb2 in NTSC_SetVideoStyle() ()
#2  0x000055555573c610 in Video::VideoReinitialize(bool) ()
#3  0x000055555573412b in NTSC_VideoInit(unsigned char*) ()
#4  0x000055555573e2f4 in Video::Initialize(unsigned char*, bool) ()
#5  0x0000555555749537 in LinuxFrame::Initialize(bool) ()
#6  0x0000555555585903 in sa2::SDLImGuiFrame::Initialize(bool) ()
#7  0x00005555557496d1 in LinuxFrame::Begin() ()
#8  0x000055555557da70 in sa2::SDLFrame::Begin() ()
#9  0x0000555555573089 in run_sdl(int, char const**) ()
#10 0x0000555555573acf in main ()
(gdb)

ldd output

$ ldd sa2                                                                                                                                               
        linux-vdso.so.1 (0x00007ffca99cd000)                                                                                                                                                                       
        libSDL2-2.0.so.0 => /lib/x86_64-linux-gnu/libSDL2-2.0.so.0 (0x00007f6fe35f6000)                                                                                                                            
        libSDL2_image-2.0.so.0 => /lib/x86_64-linux-gnu/libSDL2_image-2.0.so.0 (0x00007f6fe35d3000)                                                                                                                
        libGLESv2.so.2 => /lib/x86_64-linux-gnu/libGLESv2.so.2 (0x00007f6fe35c0000)                                                                                                                                
        libyaml-0.so.2 => /lib/x86_64-linux-gnu/libyaml-0.so.2 (0x00007f6fe359f000)                                                                                                                                
        libminizip.so.1 => /lib/x86_64-linux-gnu/libminizip.so.1 (0x00007f6fe3200000)                                                                                                                              
        libpcap.so.0.8 => /lib/x86_64-linux-gnu/libpcap.so.0.8 (0x00007f6fe3550000)                                                                                                                                
        libslirp.so.0 => /lib/x86_64-linux-gnu/libslirp.so.0 (0x00007f6fe352f000)                                                                                                                                  
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f6fe3513000)                                                                                                                                          
        libboost_program_options.so.1.74.0 => /lib/x86_64-linux-gnu/libboost_program_options.so.1.74.0 (0x00007f6fe34ce000)                                                                                        
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f6fe2fd4000)                                                                                                                                
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f6fe2eed000)                                                                                                                                          
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f6fe34ac000)                                                                                                                                  
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6fe2cc5000)                                                                                                                                          
        libasound.so.2 => /lib/x86_64-linux-gnu/libasound.so.2 (0x00007f6fe2bc2000)                                                                                                                                
        libpulse.so.0 => /lib/x86_64-linux-gnu/libpulse.so.0 (0x00007f6fe3457000)                                                                                                                                  
        libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007f6fe2a82000)                                                                                                                                      
        libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x00007f6fe3442000)                                                                                                                                    
        libXcursor.so.1 => /lib/x86_64-linux-gnu/libXcursor.so.1 (0x00007f6fe3434000)                                                                                                                              
        libXinerama.so.1 => /lib/x86_64-linux-gnu/libXinerama.so.1 (0x00007f6fe342f000)                                                                                                                            
        libXi.so.6 => /lib/x86_64-linux-gnu/libXi.so.6 (0x00007f6fe341b000)                                                                                                                                        
        libXfixes.so.3 => /lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007f6fe3413000)                                                                                                                                
        libXrandr.so.2 => /lib/x86_64-linux-gnu/libXrandr.so.2 (0x00007f6fe2a75000)                                                                                                                                
        libXss.so.1 => /lib/x86_64-linux-gnu/libXss.so.1 (0x00007f6fe340e000)                                                                                                                                      
        libXxf86vm.so.1 => /lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007f6fe2a6e000)                                                                                                                              
        libdrm.so.2 => /lib/x86_64-linux-gnu/libdrm.so.2 (0x00007f6fe2a58000)                                                                                                                                      
        libgbm.so.1 => /lib/x86_64-linux-gnu/libgbm.so.1 (0x00007f6fe2a47000)                                                                                                                                      
        libwayland-egl.so.1 => /lib/x86_64-linux-gnu/libwayland-egl.so.1 (0x00007f6fe2a42000)                                                                                                                      
        libwayland-client.so.0 => /lib/x86_64-linux-gnu/libwayland-client.so.0 (0x00007f6fe2a32000)                                                                                                                
        libwayland-cursor.so.0 => /lib/x86_64-linux-gnu/libwayland-cursor.so.0 (0x00007f6fe2a28000)                                                                                                                
        libxkbcommon.so.0 => /lib/x86_64-linux-gnu/libxkbcommon.so.0 (0x00007f6fe29df000)                                                                                                                          
        libdecor-0.so.0 => /lib/x86_64-linux-gnu/libdecor-0.so.0 (0x00007f6fe29d5000)                                                                                                                              
        libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007f6fe299a000)                                                                                                                                
        libjpeg.so.8 => /lib/x86_64-linux-gnu/libjpeg.so.8 (0x00007f6fe2919000)                                                                                                                                    
        libtiff.so.5 => /lib/x86_64-linux-gnu/libtiff.so.5 (0x00007f6fe2893000)                                                                                                                                    
        libwebp.so.7 => /lib/x86_64-linux-gnu/libwebp.so.7 (0x00007f6fe2827000)                                                                                                                                    
        libGLdispatch.so.0 => /lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007f6fe276d000)                                                                                                                        
        libdbus-1.so.3 => /lib/x86_64-linux-gnu/libdbus-1.so.3 (0x00007f6fe271f000)                                                                                                                                
        libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f6fe25e5000)                                                                                                                            
        /lib64/ld-linux-x86-64.so.2 (0x00007f6fe3cbd000)                                                                                                                                                           
        libpulsecommon-15.99.so => /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-15.99.so (0x00007f6fe2560000)                                                                                               
        libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f6fe2536000)                                                                                                                                      
        libXrender.so.1 => /lib/x86_64-linux-gnu/libXrender.so.1 (0x00007f6fe2527000)                                                                                                                              
        libwayland-server.so.0 => /lib/x86_64-linux-gnu/libwayland-server.so.0 (0x00007f6fe2511000)                                                                                                                
        libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f6fe24e0000)                                                                                                                                  
        libffi.so.8 => /lib/x86_64-linux-gnu/libffi.so.8 (0x00007f6fe24d3000)                                                                                                                                      
        libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007f6fe2404000)
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f6fe23d7000)
        libjbig.so.0 => /lib/x86_64-linux-gnu/libjbig.so.0 (0x00007f6fe23c6000)
        libdeflate.so.0 => /lib/x86_64-linux-gnu/libdeflate.so.0 (0x00007f6fe23a2000)
        libsystemd.so.0 => /lib/x86_64-linux-gnu/libsystemd.so.0 (0x00007f6fe22db000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f6fe2265000)
        libsndfile.so.1 => /lib/x86_64-linux-gnu/libsndfile.so.1 (0x00007f6fe21e4000)
        libX11-xcb.so.1 => /lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007f6fe21df000)
        libasyncns.so.0 => /lib/x86_64-linux-gnu/libasyncns.so.0 (0x00007f6fe21d7000)
        libapparmor.so.1 => /lib/x86_64-linux-gnu/libapparmor.so.1 (0x00007f6fe21c2000)
        libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007f6fe21bc000)
        libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f6fe21b4000)
        liblz4.so.1 => /lib/x86_64-linux-gnu/liblz4.so.1 (0x00007f6fe2192000)
        libcap.so.2 => /lib/x86_64-linux-gnu/libcap.so.2 (0x00007f6fe2187000)
        libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007f6fe2049000)
        libFLAC.so.8 => /lib/x86_64-linux-gnu/libFLAC.so.8 (0x00007f6fe200d000)
        libvorbis.so.0 => /lib/x86_64-linux-gnu/libvorbis.so.0 (0x00007f6fe1fe0000)
        libvorbisenc.so.2 => /lib/x86_64-linux-gnu/libvorbisenc.so.2 (0x00007f6fe1f33000)
        libopus.so.0 => /lib/x86_64-linux-gnu/libopus.so.0 (0x00007f6fe1ed5000)
        libogg.so.0 => /lib/x86_64-linux-gnu/libogg.so.0 (0x00007f6fe1eca000)
        libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f6fe1eb2000)
        libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007f6fe1e8c000)
        libmd.so.0 => /lib/x86_64-linux-gnu/libmd.so.0 (0x00007f6fe1e7d000)
cesarmiquel commented 2 years ago

I was able to compile with debug symbols. Here's a better idea of where the crash happens:

(gdb) r
Starting program: /home/miquel/Develop/AppleII/AppleWin-audetto-linux/build/applen 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[DSInit] PC=00000000, WC=00000000, Diff=00000000

Program received signal SIGSEGV, Segmentation fault.
0x00005555555ef267 in ClearOverscanVideoArea () at /home/miquel/Develop/AppleII/AppleWin-audetto-linux/source/NTSC.cpp:830
830                     *pLine1Prev++ = CLEAR_COLOUR_TOP | ALPHA32_MASK;
(gdb) l
825
826             pLine1Prev += GetVideo().GetFrameBufferCentringValue() - kOverscanOffsetL;              // Centre the older //e video modes when running with a VidHD
827
828             // Clear this line at Y=-1
829             for (uint32_t i = 0; i < (kHorzPixels + (kOverscanSpanL - kOverscanOverlapL) + (kOverscanSpanR - kOverscanOverlapR)); i++)
830                     *pLine1Prev++ = CLEAR_COLOUR_TOP | ALPHA32_MASK;
831
832             // Clear overscan before & after display area
833             for (uint32_t i = 0; i < VIDEO_SCANNER_Y_DISPLAY*2; i++)
834             {
(gdb)
cesarmiquel commented 2 years ago

Ok. I digged a little into the source code and noticed this commit 0f750ee1679d1578126ec30af1b22a7d1410a72c which modified the NTSC.cpp file. I checked out the previous commit, recompiled and it runs ok! (no Segfault). So my bet is that something in that commit is breaking it.

BTW: great work! I was able to run the SDL version and its beautiful to see it running in Linux without wine!! šŸ¤©

audetto commented 2 years ago

It is an issue in AppleWin which shows up in 64 bit builds. I will create a PR upstream.