Hi,
I just want to make sure I'm going about things the right way, so please forgive me if I sound a bit naive.
Anyways, I'm building an OS that uses the O'Caml language, and associated runtime. I've finally come to a wall where glibc code getting linked into my kernel is hurting DST (hardware exceptions and the like).
So, my thought is to get a libc compiled for DST, and then rebuild the O'Caml runtime using this libc instead of system one.
I'm not sure what the best libc implementation is to use for this task, so I've chosen newlib for now. Just want something that's easy to port. I had a look at dietlibc, but I think that might have some linux dependencies in it...
Anyways, I'm looking at osfaq2 to see how to do this. Are the steps as follows:
1. Build a custom binutils and gcc with newlib headers.
2. Compile newlib into a static library (do I use my new gcc?)
3. [Re]Build O'Caml runtime using this new gcc toolchain.
4. Build DST using this gcc toolchain, the new libc, and new ocaml runtime.
5. Run, and hope life will be very merry.
I assume then, I can just define the OS interfaces in some libc-interface.c file that's part of my kernel? And the linker will fix everything up so it's all good?
Kindest Regards,
Jonathan
Quick Steps to hosted libc
Re:Quick Steps to hosted libc
Hmm, I've been giving newlib a go. Everything was fine for a bit, but now trying to compile cairo library, I start having include hell.
It seems newlib doesn't have a bunch of seemingly standard headers (stdint.h, and stddef.h for example).
Am I missing something completely obvious? Or am I better to try some other libc implementation that'll work better for building a hosted environment for my OS?
Jonathan
It seems newlib doesn't have a bunch of seemingly standard headers (stdint.h, and stddef.h for example).
Am I missing something completely obvious? Or am I better to try some other libc implementation that'll work better for building a hosted environment for my OS?
Jonathan
Re:Quick Steps to hosted libc
stdint.h is new with C99 IIRC, and I couldn't find info about newlib stddef.h either.purevoid wrote: It seems newlib doesn't have a bunch of seemingly standard headers (stdint.h, and stddef.h for example).
You could look into PDCLib (see signature) for these two; PDCLib doesn't have much at this point, but it has those two. I also seem to recall that GCC itself builds them in some internal directory...
I'm a bit confused. "Hosted" means, basically, user-space (as opposed to "freestanding" which is, basically, kernel-space). But from your initial post I understand that you want a libc to use in kernel space, to support your chosen language's runtime in kernel space?Am I missing something completely obvious? Or am I better to try some other libc implementation that'll work better for building a hosted environment for my OS?
I know next to nothing about OCAML... can someone enlighten me with one, two sentences about the language and whether its runtime can be used in kernel space?
Every good solution is obvious once you've found it.
Re:Quick Steps to hosted libc
Ohh, I found some interesting tips. I used -ffreestanding with the system compiler, and used -isystem for newlib includes. That seemed to work.
And yes, ocaml can run in kernel space. Stuff like printing/opening files just returns error condition/does nothing.
DST has been using ocaml as the kernel for about 9 months already ;-)
Jonathan
And yes, ocaml can run in kernel space. Stuff like printing/opening files just returns error condition/does nothing.
DST has been using ocaml as the kernel for about 9 months already ;-)
O'Caml is a multi-paradigm programming language: boasts static type checking, GC, and other functional language nicities. It also has it's own form of OO, as well as a number of imperative features (for/while loops, mutable data structures).I know next to nothing about OCAML... can someone enlighten me with one, two sentences about the language
Jonathan