DMD compiler switch to set default extern() linkage?

Don Clugston dac at nospam.com
Thu Apr 5 03:57:57 PDT 2012


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.


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?
>



More information about the Digitalmars-d mailing list