[M3devel] could someone add __stdcall name mangling to m3cc please?
Tony Hosking
hosking at cs.purdue.edu
Sun Jan 13 01:06:35 CET 2008
It will need to be a little cleaner than that -- I'd rather gather
the parameters as declared and enter them into the function type. It
means not ignoring the parameter decls: see m3cg_declare_param check
for current_param_count==0. To do this it needs to be a little bit
smarter about managing current_function_decl -- probably a stack.
On Jan 12, 2008, at 2:57 PM, Jay wrote:
> Something like this?????
>
> ===================================================================
> RCS file: /usr/cvs/cm3/m3-sys/m3cc/gcc/gcc/m3cg/parse.c,v
> retrieving revision 1.41
> diff -r1.41 parse.c
> 3066a3070
> > tree atypes = NULL_TREE);
> 3091c3095,3102
> < TREE_TYPE (p) = build_function_type (return_type, NULL_TREE);
> ---
> > /* for NT386 __stdcall, we just need to declare the right number
> > of parameters
> > */
> > if (--n_params== 0) {
> > atypes = tree_cons (NULL_TREE, t_word, atypes);
> > }
> >
> > TREE_TYPE (p) = build_function_type (return_type, atypes);
>
> haven't even compiled it yet..
>
> - Jay
>
>
>
>
>
>
> > From: jayk123 at hotmail.com
> > To: hosking at cs.purdue.edu
> > Date: Sat, 12 Jan 2008 18:13:27 +0000
> > CC: m3devel at elegosoft.com
> > Subject: Re: [M3devel] could someone add __stdcall name mangling
> to m3cc please?
> >
> > Tony, Sorry, I didn't mean to check those in. Those were wild
> guesses that I hadn't tested yet.I put it back. Thanks for catching
> that.
> >
> > - Jay
> >
> >
> >
> > > CC: m3devel at elegosoft.com> From: hosking at cs.purdue.edu>
> Subject: Re: [M3devel] could someone add __stdcall name mangling to
> m3cc please?> Date: Sat, 12 Jan 2008 10:41:26 -0500> To:
> jayk123 at hotmail.com> > I'm not sure what you were trying to do with
> parse.c by adding a > parameter (nargs*4) to the stdcall attribute,
> but that probably > doesn't do anything interesting. The problem
> appears to be because > on external function decls the parameter
> decls are currently being > ignored by cm3cg. If I fix parse.c to
> add the params for those then > it should work properly with the
> stdcall attribute.> > On Jan 12, 2008, at 8:27 AM, Jay wrote:> > >
> Thanks, but not quite. The number of parameters times four needs to
> > > be appended to the name, in decimal.> > But I'm just getting
> 0.> > That is, gcc is handling the underlying detail, but you
> aren't > > giving it enough infomrmation.> > I'll see if I can bang
> out those temporary wrappers automatically.. > > (a Quake
> programming challenge, that I've already invented the hard > > part
> of I think -- Quake can't do math..)> >> > - Jay> >> >> > > CC:
> m3devel at elegosoft.com> > > From: hosking at cs.purdue.edu> > >
> Subject: Re: [M3devel] could someone add __stdcall name mangling >
> > to m3cc please?> > > Date: Fri, 11 Jan 2008 13:16:44 -0500> > >
> To: jayk123 at hotmail.com> > >> > > I just added support for this.
> Let me know if it seems to work (or> > > not! :-) ).> > >> > >> > >
> On Jan 10, 2008, at 7:40 AM, Jay wrote:> > >> > > > Could someone
> out there (Tony?) familiar with the gcc backend> > > > have it not
> ignore call_conv and if call_conv is 1, append> > > > an at symbol
> and the number of bytes of parameters to the function> > > > name?>
> > > > (Even for zero, e.g. Sleep at 0, GetFileAttributes at 4).> > > >
> This would be I guess at least for "imported" functions.> > > >> >
> > > Not clear about calling function pointers, probably needs> > >
> > modification.> > > > call_conv 0 is "__cdecl" is push right to
> left, caller cleans up> > > > call_conv 1 is "__stdcall" is push
> right to left, callee cleans up> > > > There are various synonyms.>
> > > > With no command line switches, __cdecl is the compiler
> default.> > > > __stdcall is deemed more efficient, and is very
> widely used.> > > >> > > > Not clear about functions implemented in
> Modula-3.> > > > Probably won't occur? Maybe for callbacks?
> WindowProcs, thread> > > > entry point?> > > >> > > > This could/
> should be for NT386GNU only.> > > > The hypothetical other NT
> targets only have one calling convention> > > > each.> > > >> > > >
> I COULD do something sleazy here and generate little adapter> > > >
> functions, over in m3-win/import-libs esp.> > > >> > > > I'm still
> checking out pm3 to see what it does here.> > > > (as in cvs
> checkout, not "looking at")> > > >> > > > This'll clear up:> > > >>
> > > > RTOS.m3:27: undefined reference to `_FatalExit'> > > >
> RTOS.mo: In function `RTOS__GetMemory':> > > > RTOS.m3:75:
> undefined reference to `_VirtualAlloc'> > > > RTOS.m3:85: undefined
> reference to `_VirtualAlloc'> > > > RTOS.mo: In function
> `RTOS__InitMemory':> > > > RTOS.m3:96: undefined reference to
> `_VirtualAlloc'> > > > RTOS.m3:100: undefined reference to
> `_GetSystemInfo'> > > > RTOS.mo: In function `RTOS__Write':> > > >
> RTOS.m3:118: undefined reference to `_AllocConsole'> > > >
> RTOS.m3:119: undefined reference to `_GetStdHandle'> > > >
> RTOS.m3:122: undefined reference to `_WriteFile'> > > >
> RTPerfTool.mo: In function `RTPerfTool__Start':> > > >
> RTPerfTool.m3:19: undefined reference to `_ReadFile'> > > >
> RTPerfTool.m3:22: undefined reference to `_CloseHandle'> > > >
> RTPerfTool.mo: In function `RTPerfTool__Close':> > > >
> RTPerfTool.m3:28: undefined reference to `_CloseHandle'> > > >
> RTPerfTool.mo: In function `RTPerfTool__Send':> > > >
> RTPerfTool.m3:34: undefined reference to `_WriteFile'> > > >
> RTPerfTool.mo: In function `RTPerfTool__PrepHandle':> > > >
> RTPerfTool.m3:58: undefined reference to `_GetCurrentProcess'> > >
> > RTPerfTool.m3:59: undefined reference to `_DuplicateHandle'> > >
> > etc.> > > >> > > > I did think I was past these. I thought I
> built m3core and libm3> > > > including linking (having even
> modified cm3.cfg)> > > > COULD be I'm using the wrong .libs, but:>
> > > >> > > > C:\cygwin\lib\w32api>nm libkernel32.a | findstr
> CreateFile> > > > 00000000 I __imp__CreateFileW at 28> > > > 00000000
> T _CreateFileW at 28> > > > 00000000 I __imp__CreateFileMappingW at 24> >
> > > 00000000 T _CreateFileMappingW at 24> > > > 00000000 I
> __imp__CreateFileMappingA at 24> > > > 00000000 T
> _CreateFileMappingA at 24> > > > 00000000 I __imp__CreateFileA at 28> > >
> > 00000000 T _CreateFileA at 28> > > >> > > > C:\cygwin\lib\w32api>cd
> \MinGW\lib> > > >> > > > C:\MinGW\lib>nm libkernel32.a | findstr
> CreateFile> > > > 00000000 I __imp__CreateFileW at 28> > > > 00000000
> T _CreateFileW at 28> > > > 00000000 I __imp__CreateFileMappingW at 24> >
> > > 00000000 T _CreateFileMappingW at 24> > > > 00000000 I
> __imp__CreateFileMappingA at 24> > > > 00000000 T
> _CreateFileMappingA at 24> > > > 00000000 I __imp__CreateFileA at 28> > >
> > 00000000 T _CreateFileA at 28> > > >> > > > I think at least THREE
> calling conventions should be supported --> > > > __cdecl,
> __stdcall, __fastcall --> > > > but oh well. We can live without
> __fastcall.> > > > Watcom has another calling convention,
> "watcall", and they let you> > > > describe calling conventions
> with #pragmas, neat.> > > >> > > > Thanks,> > > > - Jay> > > >> > >
> > Share life as it happens with the new Windows Live. Start sharing!
> > > >> >> >> > Make distant family not so distant with Windows
> Vista® + Windows > > Live™. Start now!>
> > _________________________________________________________________
> > Watch “Cause Effect,” a show about real people making a real
> difference
>
>
> Get the power of Windows + Web with the new Windows Live. Get it now!
More information about the M3devel
mailing list