Win9x segfaults with Voodoo Recompiler
Win9x segfaults with Voodoo Recompiler
When the voodoo recompiler is enabled and I try to do some Direct3D tests like dxdiag, it segfaults with voodoo_x86_data() being at fault.
Note: I'm using the Voodoo1 drivers from 1999 for win9x.
Drivers: http://www.falconfly.de/voodoo1.htm 01 May 1999 ones.
Note: I'm using the Voodoo1 drivers from 1999 for win9x.
Drivers: http://www.falconfly.de/voodoo1.htm 01 May 1999 ones.
Last edited by SA1988 on Sat 30 Jan, 2016 5:17 pm, edited 2 times in total.
Re: Win9x segfaults with Voodoo Recompiler
It's the emulator that segfaults when DXDiag is run on Windows 95 with the Voodoo recompiler enabled and it seems the 1999 Voodoo drivers.
Re: Win9x segfaults with Voodoo Recompiler
Doesn't segfault here on Win95 and Win98SE with DX7's dxdiag and May 1999 drivers, and 2mb / 4mb frame buffers.
What are your compiling flags? Mine are the standard makefile, plus -flto.
What are your compiling flags? Mine are the standard makefile, plus -flto.
- Attachments
-
- pcemsuccess.png (20.88 KiB) Viewed 8233 times
Re: Win9x segfaults with Voodoo Recompiler
- leilei: CFLAGS = -O3 -march=core2 -mtune=core2 -fbranch-probabilities -fvpt -funroll-loops -fpeel-loops -ftracer -fomit-frame-pointer -ffast-math -msse -msse2 -msse3 -mssse3 -mfpmath=sse -mstackrealign -DRELEASE_BUILD .
But I also have another user who says he did not have the problem with the same binary.
But I also have another user who says he did not have the problem with the same binary.
- SarahWalker
- Site Admin
- Posts: 2054
- Joined: Thu 24 Apr, 2014 4:18 pm
Re: Win9x segfaults with Voodoo Recompiler
Can you provide a register dump and a disassembly of voodoo_x86_data from GDB at the time of the crash please?
Re: Win9x segfaults with Voodoo Recompiler
Sorry to ask, but do I have to generate it with "bt" in gdb?
Edit: nvm, figured out: here's the full log.
Register Dump:
Disassembler:
Edit: nvm, figured out: here's the full log.
Register Dump:
Code: Select all
(gdb) info all-registers
eax 0x1628ba0 23235488
ecx 0x12c000 1228800
edx 0x19ac0020 430702624
ebx 0x0 0
esp 0x1a6dfc1c 0x1a6dfc1c
ebp 0x1a6dff08 0x1a6dff08
esi 0x0 0
edi 0x194d14a0 424481952
eip 0x1628ba0 0x1628ba0 <voodoo_x86_data+65760>
eflags 0x10202 [ IF RF ]
cs 0x23 35
ss 0x2b 43
ds 0x2b 43
es 0x2b 43
fs 0x53 83
gs 0x2b 43
st0 0 (raw 0x00000000000000000000)
st1 0 (raw 0x00000000000000000000)
st2 0 (raw 0x00000000000000000000)
st3 0 (raw 0x00000000000000000000)
st4 0 (raw 0x00000000000000000000)
st5 0 (raw 0x00000000000000000000)
st6 0 (raw 0x00000000000000000000)
st7 0 (raw 0x00000000000000000000)
fctrl 0x27f 639
fstat 0x100 256
ftag 0xffff 65535
fiseg 0x23 35
fioff 0x5856d6 5789398
foseg 0x2b 43
fooff 0x1a6dfd50 443415888
fop 0x0 0
xmm0 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {
0x8000000000000000, 0x0}, v16_int8 = {0x2, 0xff, 0x2, 0xff, 0x2, 0xff,
0x2, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0xff02,
0xff02, 0xff02, 0xff02, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0xff02ff02,
0xff02ff02, 0x0, 0x0}, v2_int64 = {0xff02ff02ff02ff02, 0x0},
uint128 = 0x0000000000000000ff02ff02ff02ff02}
xmm1 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x20, 0x0, 0xed, 0x19, 0x20, 0x0, 0xed, 0x19, 0x20, 0x0, 0xed,
0x19, 0x20, 0x0, 0xed, 0x19}, v8_int16 = {0x20, 0x19ed, 0x20, 0x19ed,
0x20, 0x19ed, 0x20, 0x19ed}, v4_int32 = {0x19ed0020, 0x19ed0020,
0x19ed0020, 0x19ed0020}, v2_int64 = {0x19ed002019ed0020,
0x19ed002019ed0020}, uint128 = 0x19ed002019ed002019ed002019ed0020}
xmm2 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0xff, 0xff, 0x1f, 0x0, 0xff, 0xff, 0x1f, 0x0, 0xff, 0xff, 0x1f,
0x0, 0xff, 0xff, 0x1f, 0x0}, v8_int16 = {0xffff, 0x1f, 0xffff, 0x1f,
0xffff, 0x1f, 0xffff, 0x1f}, v4_int32 = {0x1fffff, 0x1fffff, 0x1fffff,
0x1fffff}, v2_int64 = {0x1fffff001fffff, 0x1fffff001fffff},
uint128 = 0x001fffff001fffff001fffff001fffff}
xmm3 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0xff, 0xff, 0x1f, 0x0 <repeats 13 times>}, v8_int16 = {0xffff,
0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x1fffff, 0x0, 0x0,
0x0}, v2_int64 = {0x1fffff, 0x0},
uint128 = 0x000000000000000000000000001fffff}
xmm4 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x20, 0x0, 0xed, 0x19, 0x0 <repeats 12 times>}, v8_int16 = {
0x20, 0x19ed, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x19ed0020, 0x0,
0x0, 0x0}, v2_int64 = {0x19ed0020, 0x0},
uint128 = 0x00000000000000000000000019ed0020}
xmm5 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0},
uint128 = 0x00000000000000000000000000000000}
xmm6 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0},
uint128 = 0x00000000000000000000000000000000}
xmm7 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0}, v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0},
uint128 = 0x00000000000000000000000000000000}
mxcsr 0x1f80 [ IM DM ZM OM UM PM ]
mm0 {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0,
0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm1 {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0,
0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm2 {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0,
0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm3 {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0,
0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm4 {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0,
0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm5 {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0,
0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm6 {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0,
0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm7 {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0,
0x0, 0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
Code: Select all
(gdb) disass $pc-32,$pc+32
Dump of assembler code from 0x1628b80 to 0x1628bc0:
0x01628b80 <voodoo_x86_data+65728>: add %al,(%eax)
0x01628b82 <voodoo_x86_data+65730>: add %al,(%eax)
0x01628b84 <voodoo_x86_data+65732>: add %al,(%eax)
0x01628b86 <voodoo_x86_data+65734>: add %al,(%eax)
0x01628b88 <voodoo_x86_data+65736>: add %al,(%eax)
0x01628b8a <voodoo_x86_data+65738>: add %al,(%eax)
0x01628b8c <voodoo_x86_data+65740>: add %al,(%eax)
0x01628b8e <voodoo_x86_data+65742>: add %al,(%eax)
0x01628b90 <voodoo_x86_data+65744>: add %al,(%eax)
0x01628b92 <voodoo_x86_data+65746>: add %al,(%eax)
0x01628b94 <voodoo_x86_data+65748>: add %al,(%eax)
0x01628b96 <voodoo_x86_data+65750>: add %al,(%eax)
0x01628b98 <voodoo_x86_data+65752>: add %al,(%eax)
0x01628b9a <voodoo_x86_data+65754>: add %al,(%eax)
0x01628b9c <voodoo_x86_data+65756>: add %al,(%eax)
0x01628b9e <voodoo_x86_data+65758>: add %al,(%eax)
=> 0x01628ba0 <voodoo_x86_data+65760>: push %ebp
0x01628ba1 <voodoo_x86_data+65761>: push %edi
0x01628ba2 <voodoo_x86_data+65762>: push %esi
0x01628ba3 <voodoo_x86_data+65763>: push %ebx
0x01628ba4 <voodoo_x86_data+65764>: mov 0x14(%esp),%edi
0x01628ba8 <voodoo_x86_data+65768>: mov 0x18(%esp),%esi
0x01628bac <voodoo_x86_data+65772>: pxor %xmm2,%xmm2
0x01628bb0 <voodoo_x86_data+65776>: mov 0x120(%edi),%eax
0x01628bb6 <voodoo_x86_data+65782>: mov $0xffff,%ebx
0x01628bbb <voodoo_x86_data+65787>: xor %ecx,%ecx
0x01628bbd <voodoo_x86_data+65789>: sar $0xc,%eax
End of assembler dump.
- SarahWalker
- Site Admin
- Posts: 2054
- Joined: Thu 24 Apr, 2014 4:18 pm
Re: Win9x segfaults with Voodoo Recompiler
Do you have Data Execution Prevention turned on in Windows? The Voodoo recompiler should be handling that, but it's possible I made a mistake somewhere.
Re: Win9x segfaults with Voodoo Recompiler
I do Tom, for all Windows programs.
Re: Win9x segfaults with Voodoo Recompiler
Small update: works now if I do #if 0 between lines 1913 and 1919 in vid_voodoo.c
Re: Win9x segfaults with Voodoo Recompiler
Of course, you disabled the following:
Edit: SA1988 says he got the Voodoo recompiler to work by setting DEP to Only essential Windows programs and services. This means the Voodoo recompiler currently doesn't with DEP enabled.
Code: Select all
if (voodoo->use_recompiler)
{
voodoo_draw(state, params, x, real_y);
}
else