What I have determined so far:
* It does take some CXXFLAGS to trigger it: g++ CXXFLAGS="-fomit-frame-pointer -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -funwind-tables -fasynchronous-unwind-tables" (since I let gzdoom build with the distro's tools, these get added.)
* Of course, Valgrind spews a lot of "read from uninitialized memory" warnings (svn1107), so that certainly is a sign that something's wrong. It's specifically GL code that is affected, plain zdoom was pretty much error-clean last time I ran that.
[spoiler]
Code: Select all
==6679== Memcheck, a memory error detector
==6679== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==6679== Using Valgrind-3.5.0 and LibVEX; rerun with -h for copyright info
==6679== Command: ./gzdoom -iwad /usr/share/zdoom/hexen.wad -file /home/jengelh/dmaps/SP/serpent.wad /home/jengelh/dmaps/SP/serpent.pk3 -width 320 -height 200 -warp 1 +fullscreen 0 -nosound -nomusic
==6679==
GZDoom v1.5.6 - SVN revision 0 - SDL version
Compiled on Nov 27 2010
M_LoadDefaults: Load system defaults.
Gameinfo scan took 647 ms
W_Init: Init WADfiles.
adding /home/jengelh/code_nosov/zdoom/gzdoom/dobj/gzdoom.pk4, 563 lumps
adding /usr/share/zdoom/hexen.wad, 4270 lumps
adding /home/jengelh/dmaps/SP/serpent.wad, 351 lumps
adding /home/jengelh/dmaps/SP/serpent.pk3, 5633 lumps
I_Init: Setting up machine state.
CPU Vendor ID: GenuineIntel
Family 6, Model 11, Stepping 1
Features: MMX SSE
V_Init: allocate screen.
S_Init: Setting up sound.
ST_Init: Init startup screen.
P_Init: Checking cmd-line parameters...
G_ParseMapInfo: Load map definitions.
S_InitData: Load sound definitions.
Texman.Init: Init texture manager.
ParseTeamInfo: Load team definitions.
LoadActors: Load actor definitions.
R_Init: Init Hexen refresh subsystem.
==6679== Conditional jump or move depends on uninitialised value(s)
==6679== at 0x8408BC5: FInternalLightAssociation::FInternalLightAssociation(FLightAssociation*) (gl_dynlight.cpp:974)
# 974: if (strlen(asso->FrameName())==5 || asso->FrameName()[5]=='0')
==6679== by 0x8408CA8: gl_InitializeActorLights() (gl_dynlight.cpp:1021)
==6679== by 0x84096D8: gl_ParseDefs() (gl_dynlight.cpp:1341)
==6679== by 0x82DD292: R_Init() (r_main.cpp:761)
==6679== by 0x81DA557: D_DoomMain() (d_main.cpp:2195)
==6679== by 0x81A1B68: main (i_main.cpp:324)
==6679==
DecalLibrary: Load decals.
M_Init: Init menus.
P_Init: Init Playloop state.
ParseSBarInfo: Loading default status bar definition.
ParseSBarInfo: Loading custom status bar definition.
D_CheckNetGame: Checking network game status.
player 1 of 1 (1 nodes)
Occlusion query enabled.
Resolution: 320 x 200
+MAP01 - lystern harbour
==6679== Conditional jump or move depends on uninitialised value(s)
==6679== at 0x82891DD: P_SpawnMapThing(FMapThing*, int) (p_mobj.cpp:4423)
# 4423: if (mthing->Conversation > 0)
==6679== by 0x8297EAB: SpawnMapThing(int, FMapThing*, int) (p_setup.cpp:1602)
==6679== by 0x82987E2: P_SpawnThings(int) (p_setup.cpp:1741)
==6679== by 0x829E1A6: P_SetupLevel(char*, int) (p_setup.cpp:3980)
==6679== by 0x81FFD3F: G_DoLoadLevel(int, bool) (g_level.cpp:875)
==6679== by 0x81FF05F: G_InitNew(char const*, bool) (g_level.cpp:447)
==6679== by 0x81DAAB3: D_DoomMain() (d_main.cpp:2334)
==6679== by 0x81A1B68: main (i_main.cpp:324)
==6679==
61 map sections found
==6679== Conditional jump or move depends on uninitialised value(s)
==6679== at 0x49A58AE: ??? (in /usr/lib/libSDL-1.2.so.0.11.3)
==6679== by 0x49A5EBD: ??? (in /usr/lib/libSDL-1.2.so.0.11.3)
==6679== by 0x49A6969: ??? (in /usr/lib/libSDL-1.2.so.0.11.3)
==6679== by 0x49737B4: SDL_PumpEvents (in /usr/lib/libSDL-1.2.so.0.11.3)
==6679== by 0x819F983: CenterMouse() (i_input.cpp:160)
# This one may not be so important
==6679== by 0x819FD0F: I_CheckNativeMouse() (i_input.cpp:273)
==6679== by 0x81A03F9: I_StartTic() (i_input.cpp:471)
==6679== by 0x81DEAD4: NetUpdate() (d_net.cpp:932)
==6679== by 0x81E05FE: TryRunTics() (d_net.cpp:1691)
==6679== by 0x81D7A36: D_DoomLoop() (d_main.cpp:985)
==6679== by 0x81DAAEC: D_DoomMain() (d_main.cpp:2348)
==6679== by 0x81A1B68: main (i_main.cpp:324)
==6679==
==6679== Conditional jump or move depends on uninitialised value(s)
==6679== at 0x49A58D2: ??? (in /usr/lib/libSDL-1.2.so.0.11.3)
==6679== by 0x49A5EBD: ??? (in /usr/lib/libSDL-1.2.so.0.11.3)
==6679== by 0x49A6969: ??? (in /usr/lib/libSDL-1.2.so.0.11.3)
==6679== by 0x49737B4: SDL_PumpEvents (in /usr/lib/libSDL-1.2.so.0.11.3)
==6679== by 0x819F983: CenterMouse() (i_input.cpp:160)
==6679== by 0x819FD0F: I_CheckNativeMouse() (i_input.cpp:273)
==6679== by 0x81A03F9: I_StartTic() (i_input.cpp:471)
==6679== by 0x81DEAD4: NetUpdate() (d_net.cpp:932)
==6679== by 0x81E05FE: TryRunTics() (d_net.cpp:1691)
==6679== by 0x81D7A36: D_DoomLoop() (d_main.cpp:985)
==6679== by 0x81DAAEC: D_DoomMain() (d_main.cpp:2348)
==6679== by 0x81A1B68: main (i_main.cpp:324)
==6679==
==6679== Conditional jump or move depends on uninitialised value(s)
==6679== at 0x83E18C0: vertex_t::GetClipAngle() (gl_clipper.h:146)
# 146: return angletime == Clipper::anglecache? viewangle : (angletime = Clipper::anglecache, viewangle = R_PointToPseudoAngle(viewx, viewy, x,y));
==6679== by 0x83E0BB0: AddLine(seg_t*) (gl_bsp.cpp:116)
==6679== by 0x83E1096: AddLines(subsector_t*, sector_t*) (gl_bsp.cpp:322)
==6679== by 0x83E12E5: DoSubsector(subsector_t*) (gl_bsp.cpp:438)
==6679== by 0x83E15E7: gl_RenderBSPNode(void*) (gl_bsp.cpp:560)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679==
==6679== Conditional jump or move depends on uninitialised value(s)
==6679== at 0x83E18C0: vertex_t::GetClipAngle() (gl_clipper.h:146)
==6679== by 0x83E0BC0: AddLine(seg_t*) (gl_bsp.cpp:117)
==6679== by 0x83E1096: AddLines(subsector_t*, sector_t*) (gl_bsp.cpp:322)
==6679== by 0x83E12E5: DoSubsector(subsector_t*) (gl_bsp.cpp:438)
==6679== by 0x83E15E7: gl_RenderBSPNode(void*) (gl_bsp.cpp:560)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679==
==6679== Conditional jump or move depends on uninitialised value(s)
==6679== at 0x83E18C0: vertex_t::GetClipAngle() (gl_clipper.h:146)
==6679== by 0x83E0BB0: AddLine(seg_t*) (gl_bsp.cpp:116)
==6679== by 0x83E1075: AddLines(subsector_t*, sector_t*) (gl_bsp.cpp:318)
==6679== by 0x83E12E5: DoSubsector(subsector_t*) (gl_bsp.cpp:438)
==6679== by 0x83E15E7: gl_RenderBSPNode(void*) (gl_bsp.cpp:560)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679==
==6679== Source and destination overlap in memcpy(0x96aa200, 0x96aa180, 132)
==6679== at 0x4028115: memcpy (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==6679== by 0x83D5F01: FHardwareTexture::LoadImage(unsigned char*, int, int, unsigned int&, int, bool, int) (gl_hwtexture.cpp:157)
# 157: memcpy(scaledbuffer + rw * h * 4, scaledbuffer + rw * (h-1) * 4, w*4 + 4);
==6679== by 0x83D6884: FHardwareTexture::CreateTexture(unsigned char*, int, int, bool, int, int, int) (gl_hwtexture.cpp:405)
==6679== by 0x83DA224: FGLTexture::BindPatch(int, int, int, int) (gl_material.cpp:500)
==6679== by 0x83DB0EB: FMaterial::BindPatch(int, int) (gl_material.cpp:893)
==6679== by 0x83F16F1: GLSprite::Draw(int) (gl_sprite.cpp:206)
==6679== by 0x83E61D4: GLDrawList::DoDraw(int, int) (gl_drawinfo.cpp:719)
==6679== by 0x83E6226: GLDrawList::DoDrawSorted(SortNode*) (gl_drawinfo.cpp:740)
==6679== by 0x83E62FB: GLDrawList::DrawSorted() (gl_drawinfo.cpp:768)
==6679== by 0x83FCD16: FGLRenderer::RenderTranslucent() (gl_scene.cpp:548)
==6679== by 0x83FCE12: FGLRenderer::DrawScene(bool) (gl_scene.cpp:590)
==6679== by 0x83FDCB2: FGLRenderer::ProcessScene(bool) (gl_scene.cpp:855)
==6679==
The view is now loaded. Turning 90 deg left gives the crash then (when used w/o valgrind):
==6679== Conditional jump or move depends on uninitialised value(s)
==6679== at 0x83EB61F: GLFlat::PutFlat(bool) (gl_flats.cpp:465)
# 465: bool masked = gltexture->isMasked() && ((renderflags&SSRF_RENDER3DPLANES) || stack);
==6679== by 0x83EA526: GLFlat::Process(sector_t*, int, bool) (gl_flats.cpp:525)
==6679== by 0x83EAAF9: GLFlat::ProcessSector(sector_t*) (gl_flats.cpp:683)
==6679== by 0x83D2083: FGLRenderer::ProcessSector(sector_t*) (gl_renderer.cpp:177)
==6679== by 0x83E1442: DoSubsector(subsector_t*) (gl_bsp.cpp:483)
==6679== by 0x83E15E7: gl_RenderBSPNode(void*) (gl_bsp.cpp:560)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679== by 0x83E158E: gl_RenderBSPNode(void*) (gl_bsp.cpp:546)
==6679==
==6679== Conditional jump or move depends on uninitialised value(s)
==6679== at 0x83E18C0: vertex_t::GetClipAngle() (gl_clipper.h:146)
==6679== by 0x83E0BB0: AddLine(seg_t*) (gl_bsp.cpp:116)
==6679== by 0x83E0ED6: PolySubsector(subsector_t*) (gl_bsp.cpp:228)
==6679== by 0x83E0F81: RenderPolyBSPNode(void*) (gl_bsp.cpp:266)
==6679== by 0x83E0F2F: RenderPolyBSPNode(void*) (gl_bsp.cpp:253)
==6679== by 0x83E0F2F: RenderPolyBSPNode(void*) (gl_bsp.cpp:253)
==6679== by 0x83E0F2F: RenderPolyBSPNode(void*) (gl_bsp.cpp:253)
==6679== by 0x83E0F2F: RenderPolyBSPNode(void*) (gl_bsp.cpp:253)
==6679== by 0x83E1004: AddPolyobjs(subsector_t*) (gl_bsp.cpp:288)
==6679== by 0x83E103D: AddLines(subsector_t*, sector_t*) (gl_bsp.cpp:307)
==6679== by 0x83E12E5: DoSubsector(subsector_t*) (gl_bsp.cpp:438)
==6679== by 0x83E15E7: gl_RenderBSPNode(void*) (gl_bsp.cpp:560)
==6679==
==6679== Conditional jump or move depends on uninitialised value(s)
==6679== at 0x83E18C0: vertex_t::GetClipAngle() (gl_clipper.h:146)
==6679== by 0x83E0BC0: AddLine(seg_t*) (gl_bsp.cpp:117)
==6679== by 0x83E0ED6: PolySubsector(subsector_t*) (gl_bsp.cpp:228)
==6679== by 0x83E0F81: RenderPolyBSPNode(void*) (gl_bsp.cpp:266)
==6679== by 0x83E0F2F: RenderPolyBSPNode(void*) (gl_bsp.cpp:253)
==6679== by 0x83E0F2F: RenderPolyBSPNode(void*) (gl_bsp.cpp:253)
==6679== by 0x83E0F2F: RenderPolyBSPNode(void*) (gl_bsp.cpp:253)
==6679== by 0x83E0F2F: RenderPolyBSPNode(void*) (gl_bsp.cpp:253)
==6679== by 0x83E1004: AddPolyobjs(subsector_t*) (gl_bsp.cpp:288)
==6679== by 0x83E103D: AddLines(subsector_t*, sector_t*) (gl_bsp.cpp:307)
==6679== by 0x83E12E5: DoSubsector(subsector_t*) (gl_bsp.cpp:438)
==6679== by 0x83E15E7: gl_RenderBSPNode(void*) (gl_bsp.cpp:560)
==6679==