DMD compiler switch to set default extern() linkage?

Alex Rønne Petersen xtzgzorex at gmail.com
Thu Apr 5 04:17:26 PDT 2012


On 05-04-2012 12:57, Don Clugston wrote:
> On 05/04/12 11:49, Alex Rønne Petersen wrote:
>> Hi,
>>
>> It is no secret that DMD is the only compiler in existence that follows
>> the "D" calling convention (and even then, only on some platforms,
>> seemingly?). Both GDC and LDC use the C calling convention of the
>> platform by default (and don't even have options to use the "D" calling
>> convention because their back ends don't support it at all).
>
> There are couple of separate issues here, I think. The most important
> issue is the name mangling. That MUST be supported by all compilers, on
> all platforms. The binary layout of objects MUST also be consistent
> across a processor. If any currently don't obey this, it's a bug.

Right. I understand I should have been clearer here. What I want to do 
is force C calling convention but still use D name mangling.

>
>
> That leaves parameter passing conventions, which are indeed a problem.
> There are a couple of DMD oddities, like passing the last parameter in
> EAX. The DMD calling convention is not particularly efficient. It's just
> plain weird. The whole thing is rather peculiar because different OSes
> impose different restrictions -- eg, stack has to be aligned on OSX,
> Linux64 and Windows64 are radically different -- so it isn't even
> possible to be identical on all systems.
>
>
>> I'm writing a virtual machine. As far as I am concerned, the "D" calling
>> convention adds nothing but complexity to the configuration support
>> matrix. The calling convention situation across platforms is already
>> utterly insane enough as it is. I would not have a problem with
>> supporting the "D" calling convention if all compilers followed it. But
>> they don't. And it is only specified for x86. Even in an ideal world,
>> the "D" calling convention won't exist everywhere because it isn't
>> intended to.
>>
>> So yes, we could just say "but eventually, those compilers should
>> support it!". But realistically, it is not going to happen. Those
>> compilers have no reason to implement yet another calling convention
>> that is entirely specific to x86.
>>
>> I don't think it's good that DMD forces all functions to use the "D"
>> calling convention by default. However, I accept that it is an
>> established situation, and changing is now is not an option.
>>
>> That said, I believe a compiler switch to set the default extern()
>> linkage is not an unreasonable thing to ask for, e.g.: dmd -extern=C
>> foo.d
>>
>> Thoughts?
>>
>


-- 
- Alex


More information about the Digitalmars-d mailing list