What is the absolute minimum code for a D kernel, and how should it be compiled?

Stijn via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Jan 6 14:30:29 PST 2015


After writing a bootloader and getting it to jump to a Hello 
World "kernel" written in assembly, I want to give it a go with a 
"kernel" written in D. I'm using GDC because I didn't have much 
luck with making DMD skip the D runtime and standard libs.

Starting with this code:

     void main() { }

Compiling it like this:

     i686-gdcproject-mingw32-gdc.exe kernel.d -o 
"../bin/kernel.bin" -nophoboslib -nostdlib -s


This is the output:
kernel.d:(.text+0xa): undefined reference to `__main'
kernel.d:(.text+0x24): undefined reference to `_d_run_main'
(.text+0x38): undefined reference to `_Dmodule_ref'
(.text+0x43): undefined reference to `_Dmodule_ref'

According to 
http://stackoverflow.com/questions/13573289/how-to-compile-d-application-without-the-d-runtime 
I need something more like this:

     extern(C) __gshared void* _Dmodule_ref;
     extern(C) int main() { return 0; }

Now this is the output:
kernel.d:(.text+0x7): undefined reference to `__main'

So I have two problems here. The first one is that it's not 
working. The second one is that I'm copy pasting code, and 
perhaps by trying a bunch of variations I'll manage to get 
something that compiles, but I probably still won't understand 
what I'm doing and why it does or does not work.

Now I'm hoping that someone can give me a hand with working code, 
and also explain the reasoning behind it.


More information about the Digitalmars-d-learn mailing list