Size of SUBHEAP in heap.c

Michael Karcher wine at mkarcher.dialup.fu-berlin.de
Thu Sep 11 12:44:49 CDT 2008


Am Donnerstag, den 11.09.2008, 18:21 +0200 schrieb Martin Profittlich:
> > In this particular case, I think the crash log does not really indicate
> > an alignment problem, but a "x/i $eip" in winedbg on the crash might
> > help to check further. I suspect a [edx-1] address while edx contains a
> > NULL pointer.
> x/i $eip does not show anything after the address.
Seems like winedbg dislikes SSE2.

> x $eip shows 3004290f
Thats
  movapd [esi+eax],xmm0
if my table-lookup-skills did not fool me. movapd is an instruction that
needs the memory address 16 byte aligned. eax is 0x00040000 (2^18) [from
1], probably some kind of index into a buffer, whereas esi is 0x6d50028.
Is the size of SUBHEAP 0x28 by any chance? Then esi is a pointer to a
block allocated in a fresh heap rooted at 0x6d50000.

So you should find out where the HeapAlloc call was issued from that
returned 0x6d50028. If it was from a wine dll, that dll might need to be
fixed to ensure more strict alignment (might be some kind of audio
buffer in dsound stuff); if it is directly from guitar rig, wine has to
implement the needed alignment in its ntdll implementation.

[1]: http://bugs.winehq.org/attachment.cgi?id=8706




More information about the wine-devel mailing list