On Thursday 09 April 2009 10:25:29 Gonéri Le Bouder wrote: > On Thu, Apr 09, 2009 at 09:59:19AM -0500, Raphael Geissert wrote: > Works fine here: [...] > I've the > feeling the problem come from your libgl1-mesa-glx from experimental. Can > you please upgrade your sysetem. >
Did that a couple of days ago, no difference. > > I tried to get the debug symbols of the package from debug.d.n but it > > they are not available for i386. > > It's probably because I built the package on my own machin. Is there > anything I can do to avoid that? No, it is unrelated to whether you built the package or a buildd did. I've already pinged the right person for that. I rebuilt the package with DEB_BUILD_OPTIONS=nostrip and got a better backtrace: (gdb) bt #0 0xb7f06756 in glViewport () from /usr/lib/libGL.so.1 #1 0x0804d348 in window::OpenWindow (this=0x807c820, w=1024, h=768, b=32, flags=-2147483646) at src/window.cpp:59 #2 0x0804ab95 in main (argc=1, argv=Cannot access memory at address 0x5 ) at src/main.cpp:211 By the way, like I mentioned to Barry via IRC, the package doesn't have an un/patch target and doesn't respect the debug and noopt DEB_BUILD_OPTIONS options; you should fix that. One of the obvious errors on the code is that while SDL_SetVideoMode takes a Uint32 for the flags, the code passes an integer which, as soon as SDL_FULLSCREEN is added, is overflowed, turning into a negative integer. Attached is the fix for that bug. While this doesn't fix the segfault it is one bug less (although I expect many, similar, bugs to be there on the code). What did help get the game's screen was commenting out the SDL_FULLSCREEN-related line in main.cpp; although after a few seconds the screen got corrupted and had to SIGTERM it. This is the backtrace from the code with the attached patch applied: (gdb) bt #0 0xb7e13756 in glViewport () from /usr/lib/libGL.so.1 #1 0x0804d348 in window::OpenWindow (this=0x807c820, w=1024, h=768, b=32, flags=2147483650) at src/window.cpp:59 #2 0x0804ab95 in main (argc=1, argv=Cannot access memory at address 0x5 ) at src/main.cpp:211 Cheers, -- Raphael Geissert - Debian Maintainer www.debian.org - get.debian.net
Index: bloboats-1.0.1.dsfg/src/window.cpp =================================================================== --- bloboats-1.0.1.dsfg.orig/src/window.cpp +++ bloboats-1.0.1.dsfg/src/window.cpp @@ -36,7 +36,7 @@ window::~window(){} -SDL_Surface * window::OpenWindow(int w, int h, int b, int flags) { +SDL_Surface * window::OpenWindow(int w, int h, int b, Uint32 flags) { if (!flags) { flags = oldflags^SDL_FULLSCREEN; } Index: bloboats-1.0.1.dsfg/src/window.h =================================================================== --- bloboats-1.0.1.dsfg.orig/src/window.h +++ bloboats-1.0.1.dsfg/src/window.h @@ -31,7 +31,7 @@ class window window(); ~window(); - SDL_Surface * OpenWindow(int width, int height, int bpp, int flags); + SDL_Surface * OpenWindow(int width, int height, int bpp, Uint32 flags); void SetTitle(char *text, char *icon); bool Iconify(); @@ -52,7 +52,7 @@ class window int xlast, ylast; - int oldflags; + Uint32 oldflags; private: SDL_Surface *screen;