Win9x segfaults with Voodoo Recompiler

Support and general discussion.
Post Reply
SA1988
Posts: 274
Joined: Wed 30 Apr, 2014 9:38 am

Win9x segfaults with Voodoo Recompiler

Post by SA1988 »

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.
Last edited by SA1988 on Sat 30 Jan, 2016 5:17 pm, edited 2 times in total.
Battler
Posts: 793
Joined: Sun 06 Jul, 2014 7:05 pm

Re: Win9x segfaults with Voodoo Recompiler

Post by Battler »

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.
User avatar
leilei
Posts: 1039
Joined: Fri 25 Apr, 2014 4:47 pm

Re: Win9x segfaults with Voodoo Recompiler

Post by leilei »

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.
Attachments
pcemsuccess.png
pcemsuccess.png (20.88 KiB) Viewed 8233 times
Battler
Posts: 793
Joined: Sun 06 Jul, 2014 7:05 pm

Re: Win9x segfaults with Voodoo Recompiler

Post by Battler »

- 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.
User avatar
SarahWalker
Site Admin
Posts: 2054
Joined: Thu 24 Apr, 2014 4:18 pm

Re: Win9x segfaults with Voodoo Recompiler

Post by SarahWalker »

Can you provide a register dump and a disassembly of voodoo_x86_data from GDB at the time of the crash please?
SA1988
Posts: 274
Joined: Wed 30 Apr, 2014 9:38 am

Re: Win9x segfaults with Voodoo Recompiler

Post by SA1988 »

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:

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}}

Disassembler:

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.
User avatar
SarahWalker
Site Admin
Posts: 2054
Joined: Thu 24 Apr, 2014 4:18 pm

Re: Win9x segfaults with Voodoo Recompiler

Post by SarahWalker »

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.
SA1988
Posts: 274
Joined: Wed 30 Apr, 2014 9:38 am

Re: Win9x segfaults with Voodoo Recompiler

Post by SA1988 »

I do Tom, for all Windows programs.
SA1988
Posts: 274
Joined: Wed 30 Apr, 2014 9:38 am

Re: Win9x segfaults with Voodoo Recompiler

Post by SA1988 »

Small update: works now if I do #if 0 between lines 1913 and 1919 in vid_voodoo.c
Battler
Posts: 793
Joined: Sun 06 Jul, 2014 7:05 pm

Re: Win9x segfaults with Voodoo Recompiler

Post by Battler »

Of course, you disabled the following:

Code: Select all

                if (voodoo->use_recompiler)
                {
                        voodoo_draw(state, params, x, real_y);
                }
                else
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.
Post Reply