[vlc-devel] Win32 implementation of mdate breaks for large values returned by QueryPerformanceCounter (suspected due to a buggy gcc optimization), causing video stream playback to fail on Windows systems with a large uptime

Skywing skywing at valhallalegends.com
Tue Jan 9 05:30:22 CET 2007


Hi,

There's sign extension & data loss bug in the Win32 implementation of
mdate (src\misc\mtime.c) that appears to be introduced by aggressive gcc
optimizations.  I don't have a cygwin build environment installed, so I
am just dropping a mail to explain the problem and what likely needs to
be done to fix it.

Specifically, there is a problem with the path of mdate that uses
QueryPerformanceCounter for high precision timing (around line 152 for
the vlc 0.8.6 source tree posted for download at videolan.org).

Specifically, the following lines trip up the optimizer, causing it to
generate bad code:

        LARGE_INTEGER counter;

        QueryPerformanceCounter (&counter);


        /* Convert to from (1/freq) to microsecond resolution */

        /* We need to split the division to avoid 63-bits overflow */

        lldiv_t d = lldiv (counter.QuadPart, freq);


        return (d.quot * 1000000)

             + ((d.rem * 1000000) / freq);

While this may look okay at first glance, it seems that gcc attempts to
be clever here and reorder the multiplications in the return statement
to occur before the lldiv call (and instead pass the result of the
multiplications and addition to lldiv).  In effect, gcc rewrites the
above code to the following:

LARGE_INTEGER counter, tmp;

QueryPerformanceCounter(&counter);

tmp.LowPart  = Counter.LowPart  * 1000000;
tmp.HighPart = Counter.HighPart * 1000000 + (((unsigned long
long)counter.LowPart  * 1000000) >> 32);

d = lldiv(tmp.QuadPart, freq);

return d.quot;

While this appears to work *most of the time*, there is actually a bug
here.  Specifically, gcc's optimization only works correctly for "small"
values of counter.  Once the performance counter value grows too large,
the "optimized" version starts introducing errors into the calculation.

For example, on one of my systems, I observed this happening with a
"freq" value of 0x00369e99, and a "counter" value of 0x00000e055d29c231.
In this particular case, the compiler optimization causes the value
returned by mdate() to be completely bogus (a large negative quantity).
This subsequently breaks MPEG over UDP streaming playback after the
system that was hosting VLC had been running for a large time (~49 days,
with a 2.4GHz P4); when I try to play a stream, I get a blank black out,
output, no audio, and a log full of messages stating that frames have
been dropped because they are in the future.

The buggy assembler code emitted by gcc for the relevant C source
snippet is as follows:

libvlc!mdate+0xe0:
62e20aa0 8d442428         lea     eax,[esp+0x28]
62e20aa4 890424           mov     [esp],eax
;
; QueryPerformanceCounter(&counter)
;
62e20aa7 e874640800       call  libvlc!vlc_entry__quicktime+0x1600
(62ea6f20)
62e20aac 83ec04           sub     esp,0x4
62e20aaf b940420f00       mov     ecx,0xf4240
62e20ab4 8b742428         mov     esi,[esp+0x28]
62e20ab8 8b7c242c         mov     edi,[esp+0x2c]
62e20abc 89f0             mov     eax,esi
62e20abe f7e1             mul     ecx
62e20ac0 89c1             mov     ecx,eax
62e20ac2 69c740420f00     imul    eax,edi,0xf4240
62e20ac8 890c24           mov     [esp],ecx
62e20acb 8b3dcc7a2763     mov     edi,[libvlc!ZnwjPv+0x468c (63277acc)]
62e20ad1 8d3402           lea     esi,[edx+eax]
62e20ad4 897c240c         mov     [esp+0xc],edi
62e20ad8 8b15c87a2763     mov     edx,[libvlc!ZnwjPv+0x4688 (63277ac8)]
62e20ade 89742404         mov     [esp+0x4],esi
62e20ae2 89542408         mov     [esp+0x8],edx
;
; lldiv(...)
;
62e20ae6 e815983e00       call    libvlc!VBR_noise_shaping+0xc247
(6320a300)
62e20aeb 8b5c2430         mov     ebx,[esp+0x30]
62e20aef 8b742434         mov     esi,[esp+0x34]
62e20af3 8b7c2438         mov     edi,[esp+0x38]
62e20af7 83c43c           add     esp,0x3c
62e20afa c3               ret

To prove that this is a problem with the way the gcc optimizer rewrote
the above code, I translated the instructions omitted by gcc back into C
and compiled both with the Microsoft C/C++ compiler (VS2005; x64).  

int
__cdecl
wmain(
	int ac,
	wchar_t** av
	)
{
	LARGE_INTEGER counter, tmp;
	unsigned __int64 freq;
	lldiv_t d;

	//
	// First, let's show that it breaks as vlc does:
	//

	freq             = 0x00369e99;
	counter.QuadPart = 0x00000e055d29c231;

	d = lldiv(counter.QuadPart, freq);

	// 00003eabe396516

	wprintf(L"%I64x\n", (d.quot * 1000000) + ((d.rem * 1000000) /
freq));

	tmp.LowPart  = counter.LowPart  * 1000000;
	tmp.HighPart = counter.HighPart * 1000000 + (((unsigned
__int64)counter.LowPart  * 1000000) >> 32);

	// d5f158ce6f602e40 

	wprintf(L"%I64x\n", tmp.QuadPart);

	d = lldiv(tmp.QuadPart, freq);

	// ffffff3ae1083396

	wprintf(L"%I64x\n", d.quot);

	//
	// Next, let's show that it works for "small" values of counter:
	//

	counter.QuadPart = 0x00000000aaaaaaaa;

	d = lldiv(counter.QuadPart, freq);

	// 2fada5ea

	wprintf(L"%I64x\n", (d.quot * 1000000) + ((d.rem * 1000000) /
freq));

	tmp.LowPart  = counter.LowPart  * 1000000;
	tmp.HighPart = counter.HighPart * 1000000 + (((unsigned
__int64)counter.LowPart  * 1000000) >> 32);

	// a2c2aaaa07e80 

	wprintf(L"%I64x\n", tmp.QuadPart);

	d = lldiv(tmp.QuadPart, freq);

	// 2fada5ea

	wprintf(L"%I64x\n", d.quot);

	return 0;
}

The output of the test program is included in comments, but suffice to
say, the gcc "optimization" introduces significant calculation errors
when the performance counter grows large (in my case, gcc's optimized
mdate() returns 0xffffff3ae1083396 instead of the expected
0x00003eabe396516 value, for the given performance counter and frequency
values).

Since this appears to be an optimizer problem with gcc, one thing that
you might try in order to fix this problem is to turn down the
optimization level.  You might also try rewriting the affected code a
bit in order to see if you can coax gcc's optimizer to not introduce
calculation errors (from disassembling the output, it should be pretty
clear whether gcc is doing the right thing or not; in this case, it is
*not* safe for gcc to move the mul's and add operations *before* the
lldiv, so if you see that in the output, it's a good indication that
gcc's optimizer is playing dirty).  You might try upgrading gcc as well
(I don't know which gcc version was used to build the 0.8.6 and 0.8.5
vlc-win32 binaries).

BTW, I would also be a bit interested to know if this problem repros for
the latest gcc available (and which gcc release, exactly, was used to
build the 0.8.6 and 0.8.5 vlc-win32 binaries).  If it does repro with
the latest gcc version, then this particular problem is probably
something that should be brought to the attention of the gcc team so
that they can fix it.

I am also including debugger trace logs from stepping through vlc's
implementation of mdate on my test system (I have verified that the
problem is present in vlc 0.8.6 and 0.8.5):

eax=d5ebcb40 ebx=00369e99 ecx=13894400 edx=00369e99 esi=d5ed6fe6
edi=00000000
eip=62e20ae6 esp=032afeac ebp=00000000 iopl=0         ov up ei ng nz na
pe cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000a83
libvlc!mdate+0x126:
62e20ae6 e815983e00       call    libvlc!VBR_noise_shaping+0xc247
(6320a300)
0:011> 
eax=ceb4fa7f ebx=00369e99 ecx=ffffffff edx=ffffff3a esi=d5ed6fe6
edi=00000000
eip=62e20aeb esp=032afeac ebp=00000000 iopl=0         nv up ei pl nz na
pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000202
libvlc!mdate+0x12b:
62e20aeb 8b5c2430         mov     ebx,[esp+0x30]
ss:0023:032afedc=00000000
0:011> g
Breakpoint 1 hit
eax=00b53e20 ebx=00000000 ecx=00000004 edx=00000123 esi=00b73068
edi=00000000
eip=62e209c0 esp=01d0fc38 ebp=00b73068 iopl=0         nv up ei pl zr na
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000246
libvlc!mdate:
62e209c0 83ec3c           sub     esp,0x3c
0:007> p
eax=00b53e20 ebx=00000000 ecx=00000004 edx=00000123 esi=00b73068
edi=00000000
eip=62e209c3 esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz ac
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000216
libvlc!mdate+0x3:
62e209c3 8b15c87a2763 mov edx,[libvlc!ZnwjPv+0x4688 (63277ac8)]
ds:0023:63277ac8=00369e99
0:007> 
eax=00b53e20 ebx=00000000 ecx=00000004 edx=00369e99 esi=00b73068
edi=00000000
eip=62e209c9 esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz ac
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000216
libvlc!mdate+0x9:
62e209c9 895c2430         mov     [esp+0x30],ebx
ss:0023:01d0fc2c=ffffffff
0:007> 
eax=00b53e20 ebx=00000000 ecx=00000004 edx=00369e99 esi=00b73068
edi=00000000
eip=62e209cd esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz ac
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000216
libvlc!mdate+0xd:
62e209cd 8b0dcc7a2763 mov ecx,[libvlc!ZnwjPv+0x468c (63277acc)]
ds:0023:63277acc=00000000
0:007> 
eax=00b53e20 ebx=00000000 ecx=00000000 edx=00369e99 esi=00b73068
edi=00000000
eip=62e209d3 esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz ac
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000216
libvlc!mdate+0x13:
62e209d3 89742434         mov     [esp+0x34],esi
ss:0023:01d0fc30=00000000
0:007> 
eax=00b53e20 ebx=00000000 ecx=00000000 edx=00369e99 esi=00b73068
edi=00000000
eip=62e209d7 esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz ac
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000216
libvlc!mdate+0x17:
62e209d7 89d0             mov     eax,edx
0:007> 
eax=00369e99 ebx=00000000 ecx=00000000 edx=00369e99 esi=00b73068
edi=00000000
eip=62e209d9 esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz ac
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000216
libvlc!mdate+0x19:
62e209d9 21c8             and     eax,ecx
0:007> 
eax=00000000 ebx=00000000 ecx=00000000 edx=00369e99 esi=00b73068
edi=00000000
eip=62e209db esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl zr na
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000246
libvlc!mdate+0x1b:
62e209db 897c2438         mov     [esp+0x38],edi
ss:0023:01d0fc34=00000001
0:007> 
eax=00000000 ebx=00000000 ecx=00000000 edx=00369e99 esi=00b73068
edi=00000000
eip=62e209df esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl zr na
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000246
libvlc!mdate+0x1f:
62e209df 40               inc     eax
0:007> 
eax=00000001 ebx=00000000 ecx=00000000 edx=00369e99 esi=00b73068
edi=00000000
eip=62e209e0 esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz na
pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000202
libvlc!mdate+0x20:
62e209e0 0f841a010000     je      libvlc!mdate+0x140 (62e20b00)
[br=0]
0:007> 
eax=00000001 ebx=00000000 ecx=00000000 edx=00369e99 esi=00b73068
edi=00000000
eip=62e209e6 esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz na
pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000202
libvlc!mdate+0x26:
62e209e6 89cb             mov     ebx,ecx
0:007> 
eax=00000001 ebx=00000000 ecx=00000000 edx=00369e99 esi=00b73068
edi=00000000
eip=62e209e8 esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz na
pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000202
libvlc!mdate+0x28:
62e209e8 09d3             or      ebx,edx
0:007> 
eax=00000001 ebx=00369e99 ecx=00000000 edx=00369e99 esi=00b73068
edi=00000000
eip=62e209ea esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz na
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000206
libvlc!mdate+0x2a:
62e209ea 0f85b0000000     jne     libvlc!mdate+0xe0 (62e20aa0)
[br=1]
0:007> 
eax=00000001 ebx=00369e99 ecx=00000000 edx=00369e99 esi=00b73068
edi=00000000
eip=62e20aa0 esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz na
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000206
libvlc!mdate+0xe0:
62e20aa0 8d442428         lea     eax,[esp+0x28]
ss:0023:01d0fc24=77e6ba42
0:007> 
eax=01d0fc24 ebx=00369e99 ecx=00000000 edx=00369e99 esi=00b73068
edi=00000000
eip=62e20aa4 esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz na
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000206
libvlc!mdate+0xe4:
62e20aa4 890424           mov     [esp],eax
ss:0023:01d0fbfc=7ffd5000
0:007> 
eax=01d0fc24 ebx=00369e99 ecx=00000000 edx=00369e99 esi=00b73068
edi=00000000
eip=62e20aa7 esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz na
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000206
libvlc!mdate+0xe7:
62e20aa7 e874640800       call  libvlc!vlc_entry__quicktime+0x1600
(62ea6f20)
0:007> 
eax=00000001 ebx=00369e99 ecx=01d0fbdc edx=7c82ed54 esi=00b73068
edi=00000000
eip=62e20aac esp=01d0fc00 ebp=00b73068 iopl=0         nv up ei pl nz na
pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000202
libvlc!mdate+0xec:
62e20aac 83ec04           sub     esp,0x4
0:007> 
eax=00000001 ebx=00369e99 ecx=01d0fbdc edx=7c82ed54 esi=00b73068
edi=00000000
eip=62e20aaf esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz ac
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000216
libvlc!mdate+0xef:
62e20aaf b940420f00       mov     ecx,0xf4240
0:007> 
eax=00000001 ebx=00369e99 ecx=000f4240 edx=7c82ed54 esi=00b73068
edi=00000000
eip=62e20ab4 esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz ac
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000216
libvlc!mdate+0xf4:
62e20ab4 8b742428         mov     esi,[esp+0x28]
ss:0023:01d0fc24=5d29c231
0:007> 
eax=00000001 ebx=00369e99 ecx=000f4240 edx=7c82ed54 esi=5d29c231
edi=00000000
eip=62e20ab8 esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz ac
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000216
libvlc!mdate+0xf8:
62e20ab8 8b7c242c         mov     edi,[esp+0x2c]
ss:0023:01d0fc28=00000e05
0:007> 
eax=00000001 ebx=00369e99 ecx=000f4240 edx=7c82ed54 esi=5d29c231
edi=00000e05
eip=62e20abc esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz ac
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000216
libvlc!mdate+0xfc:
62e20abc 89f0             mov     eax,esi
0:007> 
eax=5d29c231 ebx=00369e99 ecx=000f4240 edx=7c82ed54 esi=5d29c231
edi=00000e05
eip=62e20abe esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz ac
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000216
libvlc!mdate+0xfe:
62e20abe f7e1             mul     ecx
0:007> 
eax=6f602e40 ebx=00369e99 ecx=000f4240 edx=00058d8e esi=5d29c231
edi=00000e05
eip=62e20ac0 esp=01d0fbfc ebp=00b73068 iopl=0         ov up ei pl nz na
pe cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000a03
libvlc!mdate+0x100:
62e20ac0 89c1             mov     ecx,eax
0:007> 
eax=6f602e40 ebx=00369e99 ecx=6f602e40 edx=00058d8e esi=5d29c231
edi=00000e05
eip=62e20ac2 esp=01d0fbfc ebp=00b73068 iopl=0         ov up ei pl nz na
pe cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000a03
libvlc!mdate+0x102:
62e20ac2 69c740420f00     imul    eax,edi,0xf4240
0:007> 
eax=d5ebcb40 ebx=00369e99 ecx=6f602e40 edx=00058d8e esi=5d29c231
edi=00000e05
eip=62e20ac8 esp=01d0fbfc ebp=00b73068 iopl=0         ov up ei ng nz na
pe cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000a83
libvlc!mdate+0x108:
62e20ac8 890c24           mov     [esp],ecx
ss:0023:01d0fbfc=01d0fc24
0:007> 
eax=d5ebcb40 ebx=00369e99 ecx=6f602e40 edx=00058d8e esi=5d29c231
edi=00000e05
eip=62e20acb esp=01d0fbfc ebp=00b73068 iopl=0         ov up ei ng nz na
pe cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000a83
libvlc!mdate+0x10b:
62e20acb 8b3dcc7a2763 mov edi,[libvlc!ZnwjPv+0x468c (63277acc)]
ds:0023:63277acc=00000000
0:007> 
eax=d5ebcb40 ebx=00369e99 ecx=6f602e40 edx=00058d8e esi=5d29c231
edi=00000000
eip=62e20ad1 esp=01d0fbfc ebp=00b73068 iopl=0         ov up ei ng nz na
pe cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000a83
libvlc!mdate+0x111:
62e20ad1 8d3402           lea     esi,[edx+eax]
ds:0023:d5f158ce=????????
0:007> 
eax=d5ebcb40 ebx=00369e99 ecx=6f602e40 edx=00058d8e esi=d5f158ce
edi=00000000
eip=62e20ad4 esp=01d0fbfc ebp=00b73068 iopl=0         ov up ei ng nz na
pe cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000a83
libvlc!mdate+0x114:
62e20ad4 897c240c         mov     [esp+0xc],edi
ss:0023:01d0fc08=01d0fbc4
0:007> 
eax=d5ebcb40 ebx=00369e99 ecx=6f602e40 edx=00058d8e esi=d5f158ce
edi=00000000
eip=62e20ad8 esp=01d0fbfc ebp=00b73068 iopl=0         ov up ei ng nz na
pe cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000a83
libvlc!mdate+0x118:
62e20ad8 8b15c87a2763 mov edx,[libvlc!ZnwjPv+0x4688 (63277ac8)]
ds:0023:63277ac8=00369e99
0:007> 
eax=d5ebcb40 ebx=00369e99 ecx=6f602e40 edx=00369e99 esi=d5f158ce
edi=00000000
eip=62e20ade esp=01d0fbfc ebp=00b73068 iopl=0         ov up ei ng nz na
pe cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000a83
libvlc!mdate+0x11e:
62e20ade 89742404         mov     [esp+0x4],esi
ss:0023:01d0fc00=00000000
0:007> 
eax=d5ebcb40 ebx=00369e99 ecx=6f602e40 edx=00369e99 esi=d5f158ce
edi=00000000
eip=62e20ae2 esp=01d0fbfc ebp=00b73068 iopl=0         ov up ei ng nz na
pe cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000a83
libvlc!mdate+0x122:
62e20ae2 89542408         mov     [esp+0x8],edx
ss:0023:01d0fc04=00000000
0:007> 
eax=d5ebcb40 ebx=00369e99 ecx=6f602e40 edx=00369e99 esi=d5f158ce
edi=00000000
eip=62e20ae6 esp=01d0fbfc ebp=00b73068 iopl=0         ov up ei ng nz na
pe cy
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000a83
libvlc!mdate+0x126:
62e20ae6 e815983e00       call    libvlc!VBR_noise_shaping+0xc247
(6320a300)
0:007> dd @esp
01d0fbfc  6f602e40 d5f158ce 00369e99 00000000
01d0fc0c  00000060 01d0ffa8 77e6b7d0 77e6bb00
01d0fc1c  ffffffff 77e6bafd 5d29c231 00000e05
01d0fc2c  00000000 00b73068 00000000 62e2a544
01d0fc3c  00000f08 ffffffff 01d0fd50 00b72fd8
01d0fc4c  03acc670 00a49530 01d0fd50 6b941bd2
01d0fc5c  00a49530 00000f30 00000000 00000003
01d0fc6c  00b24130 00b53e20 0000000f 00b244a8
0:007> p
eax=e1083396 ebx=00369e99 ecx=ffffffff edx=ffffff3a esi=d5f158ce
edi=00000000
eip=62e20aeb esp=01d0fbfc ebp=00b73068 iopl=0         nv up ei pl nz na
po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000
efl=00000206
libvlc!mdate+0x12b:
62e20aeb 8b5c2430         mov     ebx,[esp+0x30]
ss:0023:01d0fc2c=00000000

Note the bogus value returned in edx:eax (ffffff3a:e1083396).


Let me know if you need anything else in order to understand this
problem.

- Ken Johnson (Skywing)
http://www.nynaeve.net

-- 
This is the vlc-devel mailing-list, see http://www.videolan.org/vlc/
To unsubscribe, please read http://developers.videolan.org/lists.html



More information about the vlc-devel mailing list