https://bugs.winehq.org/show_bug.cgi?id=48171
Richard Yao ryao@gentoo.org changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |ryao@gentoo.org
--- Comment #8 from Richard Yao ryao@gentoo.org --- Since this affects a friend of mine, I took a brief look at it. The issue is occurring inside gdi32.dll, so I disassembled proton 5.0's gdi32.dll on the assumption that it might yield something interesting. It certainly did:
Running `objdump -d --adjust-vma=0x036c0000 "${HOME}/.steam/steam/SteamApps/common/Proton 5.0/dist/lib64/wine/gdi32.dll.so"` gives, among other things, this:
Disassembly of section .init:
00000000036d0eb0 <.init>: 36d0eb0: 48 83 ec 08 sub $0x8,%rsp 36d0eb4: e8 d3 14 01 00 callq 36e238c <_end@@Base+0x3532e9c> 36d0eb9: e9 00 10 01 00 jmpq 36e1ebe <_end@@Base+0x35329ce> ... 36e1ebe: e8 dd f0 0a 00 callq 3790fa0 <_end@@Base+0x35e1ab0> 36e1ec3: 48 83 c4 08 add $0x8,%rsp 36e1ec7: c3 retq
The the exception is occuring at 0x36d1a90 (or 0x36d1a91), which is in no man's land, but is inside the .init section. What goes into this space and how it is called has something to do with how DLLs are dynamically linked in Wine. There is an int3 instruction inside it, but very few things in wine use int3. I don't offhand know what to make of this.
Also, the DLL itself has a strange series of int3 instructions at the end of StretchBlt@@Base. I don't know what to make of it. It is not obvious from the C code how it got there. Nothing in the diassembly appears to be able to call them and they seem to be unrelated to the int3 instruction that is breaking this.
Perhaps things would be more clear if I delved deeper, but I don't have time for that. I thought I'd share my findings as they probably would help those who have time or are more familiar with wine internals.