digitalmars.D.bugs - [Issue 1134] New: incorrect calling convention used
- d-bugmail puremagic.com (55/55) Apr 12 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1134
- d-bugmail puremagic.com (6/6) Apr 12 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1134
- d-bugmail puremagic.com (6/6) Apr 12 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1134
- d-bugmail puremagic.com (9/9) Apr 20 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1134
- d-bugmail puremagic.com (8/8) Apr 23 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1134
http://d.puremagic.com/issues/show_bug.cgi?id=1134
Summary: incorrect calling convention used
Product: D
Version: 1.011
Platform: PC
OS/Version: Windows
Status: NEW
Keywords: wrong-code
Severity: major
Priority: P1
Component: DMD
AssignedTo: bugzilla digitalmars.com
ReportedBy: CppCoder gmail.com
the following code compiles to the asm after it. Notice that only two
parameters are pushed in the call to dllMain, when there should be three.
int main( char [][]args )
{
uint a;
uint b;
uint c;
extern (Windows) BOOL function( HMODULE hinstDLL, DWORD fdwReason,
LPVOID lpvReserved ) dllMain;
a = 1;
b = 2;
c = 3;
dllMain = cast(typeof(dllMain))(a + b);
asm { int 3; } //as a reference point
dllMain( cast(HMODULE)c, DLL_PROCESS_ATTACH, null );
return 0;
}
00402010 /$ C8 100000 ENTER 10,0
00402014 |. 53 PUSH EBX
00402015 |. CC INT3
00402016 |. 31C0 XOR EAX,EAX
00402018 |. 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX
0040201B |. 8945 F4 MOV DWORD PTR SS:[EBP-C],EAX
0040201E |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
00402021 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
00402024 |. B9 01000000 MOV ECX,1
00402029 |. 894D F0 MOV DWORD PTR SS:[EBP-10],ECX
0040202C |. BA 02000000 MOV EDX,2
00402031 |. 8955 F4 MOV DWORD PTR SS:[EBP-C],EDX
00402034 |. C745 F8 030000>MOV DWORD PTR SS:[EBP-8],3
0040203B |. 8D1C11 LEA EBX,DWORD PTR DS:[ECX+EDX]
0040203E |. 895D FC MOV DWORD PTR SS:[EBP-4],EBX
00402041 |. CC INT3
(DLL_PROCESS_ATTACH)
00402046 |. FF55 FC CALL DWORD PTR SS:[EBP-4] ;call dllMain
00402049 |. 31C0 XOR EAX,EAX
0040204B |. 5B POP EBX
0040204C |. C9 LEAVE
0040204D \. C3 RETN
--
Apr 12 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1134 Created an attachment (id=138) --> (http://d.puremagic.com/issues/attachment.cgi?id=138&action=view) test case --
Apr 12 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1134 It's because extern(windows) doesn't take effect on the calling convention I think. EAX is 0 and optimized --
Apr 12 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1134
bugzilla digitalmars.com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
Fixed DMD 1.013
--
Apr 20 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1134
thomas-dloop kuehne.cn changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |thomas-dloop kuehne.cn
*** Bug 957 has been marked as a duplicate of this bug. ***
--
Apr 23 2007









d-bugmail puremagic.com 