[Issue 5591] EBX register not preserved when calling stdcall function pointer
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Feb 16 12:13:14 PST 2011
http://d.puremagic.com/issues/show_bug.cgi?id=5591
hypothermia.frost at gmail.com changed:
What |Removed |Added
----------------------------------------------------------------------------
Severity|major |critical
--- Comment #2 from hypothermia.frost at gmail.com 2011-02-16 12:10:39 PST ---
After disassembly I found out that this code was generated(no -O switch):
//asm { mov EBX,3; } bar(4);
mov ebx, 3
push 4
mov ebx, large fs:2Ch
mov esi, [ebx]
call dword ptr [esi+4F4h]
mov [ebp+var_20], ebx
//the next round ecx is used...
//asm { mov EBX,5; } bar(6);
mov ebx, 5
push 6
mov ecx, large fs:2Ch
mov edx, [ecx]
call dword ptr [edx+4F4h]
mov [ebp+var_20], ebx
Why is DMD not preserving the EBX register in the first call? The worst thing
is that the compiler doesn't even know tha there's something in EBX... This
problem happened to me with when EBX had a this pointer and then DMD didn't
save it and after the function pointer call I got an exception!
I think this is a serious issue and should be looked at ASAP.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list