<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>PM3 appears to ignore call_conv.<BR>
Perhaps its NT386GNU uses usermode threads via cygwin1.dll and has no gui support, such as to not import any __stdcall functions???<BR>
 <BR>
<A href="http://dcvs.elegosoft.com/cgi-bin/cvsweb.cgi/m3/pm3/language/modula3/m3compiler/m3cc/gcc/gcc/m3cg/m3.c?rev=1.1;content-type=text%2Fx-cvsweb-markup;cvsroot=PM3">http://dcvs.elegosoft.com/cgi-bin/cvsweb.cgi/m3/pm3/language/modula3/m3compiler/m3cc/gcc/gcc/m3cg/m3.c?rev=1.1;content-type=text%2Fx-cvsweb-markup;cvsroot=PM3</A><BR>
 <BR>
 - Jay<BR><BR>
<BLOCKQUOTE>
<HR id=EC_stopSpelling>
From: jayk123@hotmail.com<BR>To: m3devel@elegosoft.com<BR>Date: Thu, 10 Jan 2008 12:40:22 +0000<BR>Subject: [M3devel] could someone add __stdcall name mangling to m3cc please?<BR><BR>
<META content="Microsoft SafeHTML" name=Generator>
<STYLE>
.ExternalClass .EC_hmmessage P
{padding:0px;}
.ExternalClass EC_body.hmmessage
{font-size:10pt;font-family:Tahoma;}
</STYLE>
Could someone out there (Tony?) familiar with the gcc backend<BR>have it not ignore call_conv and if call_conv is 1, append<BR>an at symbol and the number of bytes of parameters to the function name?<BR> (Even for zero, e.g. <A href="mailto:Sleep@0">Sleep@0</A>, <A href="mailto:GetFileAttributes@4">GetFileAttributes@4</A>).<BR>This would be I guess at least for "imported" functions.<BR><BR>Not clear about calling function pointers, probably needs modification.<BR>call_conv 0 is "__cdecl" is push right to left, caller cleans up<BR>call_conv 1 is "__stdcall" is push right to left, callee cleans up<BR>  There are various synonyms.<BR>  With no command line switches, __cdecl is the compiler default.<BR>  __stdcall is deemed more efficient, and is very widely used.<BR><BR>Not clear about functions implemented in Modula-3.<BR>Probably won't occur? Maybe for callbacks? WindowProcs, thread entry point?<BR><BR>This could/should be for NT386GNU only.<BR>The hypothetical other NT targets only have one calling convention each.<BR><BR>I COULD do something sleazy here and generate little adapter functions, over in m3-win/import-libs esp.<BR><BR>I'm still checking out pm3 to see what it does here.<BR>(as in cvs checkout, not "looking at")<BR><BR>This'll clear up:<BR><BR>RTOS.m3:27: undefined reference to `_FatalExit'<BR>RTOS.mo: In function `RTOS__GetMemory':<BR>RTOS.m3:75: undefined reference to `_VirtualAlloc'<BR>RTOS.m3:85: undefined reference to `_VirtualAlloc'<BR>RTOS.mo: In function `RTOS__InitMemory':<BR>RTOS.m3:96: undefined reference to `_VirtualAlloc'<BR>RTOS.m3:100: undefined reference to `_GetSystemInfo'<BR>RTOS.mo: In function `RTOS__Write':<BR>RTOS.m3:118: undefined reference to `_AllocConsole'<BR>RTOS.m3:119: undefined reference to `_GetStdHandle'<BR>RTOS.m3:122: undefined reference to `_WriteFile'<BR>RTPerfTool.mo: In function `RTPerfTool__Start':<BR>RTPerfTool.m3:19: undefined reference to `_ReadFile'<BR>RTPerfTool.m3:22: undefined reference to `_CloseHandle'<BR>RTPerfTool.mo: In function `RTPerfTool__Close':<BR>RTPerfTool.m3:28: undefined reference to `_CloseHandle'<BR>RTPerfTool.mo: In function `RTPerfTool__Send':<BR>RTPerfTool.m3:34: undefined reference to `_WriteFile'<BR>RTPerfTool.mo: In function `RTPerfTool__PrepHandle':<BR>RTPerfTool.m3:58: undefined reference to `_GetCurrentProcess'<BR>RTPerfTool.m3:59: undefined reference to `_DuplicateHandle'<BR>etc.<BR><BR>I did think I was past these. I thought I built m3core and libm3 including linking (having even modified cm3.cfg)<BR>COULD be I'm using the wrong .libs, but:<BR><BR>C:\cygwin\lib\w32api>nm libkernel32.a | findstr CreateFile<BR>00000000 I <A href="mailto:__imp__CreateFileW@28">__imp__CreateFileW@28</A><BR>00000000 T <A href="mailto:_CreateFileW@28">_CreateFileW@28</A><BR>00000000 I <A href="mailto:__imp__CreateFileMappingW@24">__imp__CreateFileMappingW@24</A><BR>00000000 T <A href="mailto:_CreateFileMappingW@24">_CreateFileMappingW@24</A><BR>00000000 I <A href="mailto:__imp__CreateFileMappingA@24">__imp__CreateFileMappingA@24</A><BR>00000000 T <A href="mailto:_CreateFileMappingA@24">_CreateFileMappingA@24</A><BR>00000000 I <A href="mailto:__imp__CreateFileA@28">__imp__CreateFileA@28</A><BR>00000000 T <A href="mailto:_CreateFileA@28">_CreateFileA@28</A><BR><BR>C:\cygwin\lib\w32api>cd \MinGW\lib<BR><BR>C:\MinGW\lib>nm libkernel32.a | findstr CreateFile<BR>00000000 I <A href="mailto:__imp__CreateFileW@28">__imp__CreateFileW@28</A><BR>00000000 T <A href="mailto:_CreateFileW@28">_CreateFileW@28</A><BR>00000000 I <A href="mailto:__imp__CreateFileMappingW@24">__imp__CreateFileMappingW@24</A><BR>00000000 T <A href="mailto:_CreateFileMappingW@24">_CreateFileMappingW@24</A><BR>00000000 I <A href="mailto:__imp__CreateFileMappingA@24">__imp__CreateFileMappingA@24</A><BR>00000000 T <A href="mailto:_CreateFileMappingA@24">_CreateFileMappingA@24</A><BR>00000000 I <A href="mailto:__imp__CreateFileA@28">__imp__CreateFileA@28</A><BR>00000000 T <A href="mailto:_CreateFileA@28">_CreateFileA@28</A><BR> <BR>I think at least THREE calling conventions should be supported -- __cdecl, __stdcall, __fastcall --<BR>but oh well. We can live without __fastcall.<BR>Watcom has another calling convention, "watcall", and they let you describe calling conventions with #pragmas, neat.<BR><BR>Thanks,<BR> - Jay<BR><BR>
<HR>
Share life as it happens with the new Windows Live. <A href="http://www.windowslive.com/share.html?ocid=TXT_TAGHM_Wave2_sharelife_012008" target=_blank>Start sharing!</A> </BLOCKQUOTE><br /><hr />Get the power of Windows + Web with the new Windows Live. <a href='http://www.windowslive.com?ocid=TXT_TAGHM_Wave2_powerofwindows_012008' target='_new'>Get it now!</a></body>
</html>