Cross Compiler

Adam D. Ruppe destructionator at gmail.com
Mon Mar 3 17:22:14 PST 2014


On Monday, 3 March 2014 at 19:03:20 UTC, Jeroen Bollen wrote:
> Just realized that's probably the missing runtime. Why does it 
> need a runtime though? It's just returning.

There's some hidden references to the runtime outputted, 
especially when you write a D main, which adds references to 
d_run_main and other such stuff.

If you make it an extern(C) main instead of a regular D main, it 
gets rid of some of that, but it will still complain about the 
d_dso_registry thing (at least on Linux).

You can add a dummy "extern(C) void _d_dso_registry() {}" to it 
to hack past that too, but you probably shouldn't - going without 
the runtime is a fair amount of work for little practical 
benefit, though it can be pretty educational.

The definition of this function in druntime is 
src/rt/sections_linux.d

 From that file:

/* For each shared library and executable, the compiler generates 
code that
  * sets up CompilerDSOData and calls _d_dso_registry().
  * A pointer to that code is inserted into both the .ctors and 
.dtors
  * segment so it gets called by the loader on startup and 
shutdown.
  */
extern(C) void _d_dso_registry(CompilerDSOData* data)



More information about the Digitalmars-d mailing list