digitalmars.D.learn - Writting SO kernel in D
- Javi (7/7) Apr 19 2007 Hi,
- Frits van Bommel (7/14) Apr 19 2007 Actually, that looks like exception support. Try compiling with
- speal (10/10) Aug 17 2007 That's helpful. I was dealing with that same issue in my kernel project...
- Javi (6/12) Apr 19 2007 Thank you very much!
- BCS (2/21) Apr 19 2007 I think it's in libphobos.a (or the .lib equivalent on Win32)
- Sean Kelly (6/10) Apr 19 2007 It's in Phobos in the /internal directory. Under that is the /gc
- Frits van Bommel (6/18) Apr 19 2007 And since he's using GDC[1] some of it is in d/phobos/gcc/ in the GDC
- Sean Kelly (10/29) Apr 19 2007 Oops, good point. In Tango all of this is in the same place, and I'd
Hi, I would like to know the main issues about writting OS kernels in D. My (hobby) kernel is composed by 2 files: startup.S and kernel.d, neither startup.S nor kernel.d make system calls, of cource. But kernel.o references the symbol __gdc_persolnality_v0 Where is It? It seems a kind of runtime for garbage collector, etc. How can I turn it off? Thanks, and sorry for my poor english. Javi
Apr 19 2007
Javi wrote:Hi, I would like to know the main issues about writting OS kernels in D. My (hobby) kernel is composed by 2 files: startup.S and kernel.d, neither startup.S nor kernel.d make system calls, of cource. But kernel.o references the symbol __gdc_persolnality_v0 Where is It? It seems a kind of runtime for garbage collector, etc. How can I turn it off?Actually, that looks like exception support. Try compiling with "-fno-exceptions" to turn it off. Though if you ever want to use exceptions in your kernel you'll have to eventually copy the code from the runtime or reimplement it yourself. (I have no idea what it requires, for all I know the default implementation could work just fine in a kernel)
Apr 19 2007
That's helpful. I was dealing with that same issue in my kernel project. I've got some other undefined symbols I'd like to take care of so I can go to OO code, but there seems to be a lack of documentation for D's inner workings. Maybe I'm just missing it? What specifically is involved in declaring, instantiating, and calling member functions for classes, as far as the runtime is concerned? None of this is in dynamic memory yet, of course. How about static constructors? How are the calls to static constructors stored in the binary? Is it the same as for C++ (array of static constructor pointers), are they put in the .bss section, or is it something else entirely?
Aug 17 2007
Frits van Bommel Wrote:Actually, that looks like exception support. Try compiling with "-fno-exceptions" to turn it off. Though if you ever want to use exceptions in your kernel you'll have to eventually copy the code from the runtime or reimplement it yourself. (I have no idea what it requires, for all I know the default implementation could work just fine in a kernel)Thank you very much! I works fine now. Another question: Where is the runtime code localted on disk? And If this code resides in a big file, how can I extract only the relevant routines? Sorry, but I'm not a compiler expert.
Apr 19 2007
Javi wrote:Frits van Bommel Wrote:I think it's in libphobos.a (or the .lib equivalent on Win32)Actually, that looks like exception support. Try compiling with "-fno-exceptions" to turn it off. Though if you ever want to use exceptions in your kernel you'll have to eventually copy the code from the runtime or reimplement it yourself. (I have no idea what it requires, for all I know the default implementation could work just fine in a kernel)Thank you very much! I works fine now. Another question: Where is the runtime code localted on disk? And If this code resides in a big file, how can I extract only the relevant routines? Sorry, but I'm not a compiler expert.
Apr 19 2007
Javi wrote:Another question: Where is the runtime code localted on disk? And If this code resides in a big file, how can I extract only the relevant routines? Sorry, but I'm not a compiler expert.It's in Phobos in the /internal directory. Under that is the /gc directory, which contains the garbage collector implementation. If you're using Tango, the compiler runtime is in /lib/compiler/gdc or /lib/compiler/dmd, and the garbage collector is in /lib/gc/basic. Sean
Apr 19 2007
Sean Kelly wrote:Javi wrote:And since he's using GDC[1] some of it is in d/phobos/gcc/ in the GDC source tree, or include/d/*/gcc/ in the installed version. Specifically, look at deh.d for exceptions. [1]: and presumably not Tango, since he's coding a kernel. Though he could of course use that version just as well.Another question: Where is the runtime code localted on disk? And If this code resides in a big file, how can I extract only the relevant routines? Sorry, but I'm not a compiler expert.It's in Phobos in the /internal directory. Under that is the /gc directory, which contains the garbage collector implementation. If you're using Tango, the compiler runtime is in /lib/compiler/gdc or /lib/compiler/dmd, and the garbage collector is in /lib/gc/basic.
Apr 19 2007
Frits van Bommel wrote:Sean Kelly wrote:Oops, good point. In Tango all of this is in the same place, and I'd forgotten GPhobos was different.Javi wrote:And since he's using GDC[1] some of it is in d/phobos/gcc/ in the GDC source tree, or include/d/*/gcc/ in the installed version. Specifically, look at deh.d for exceptions.Another question: Where is the runtime code localted on disk? And If this code resides in a big file, how can I extract only the relevant routines? Sorry, but I'm not a compiler expert.It's in Phobos in the /internal directory. Under that is the /gc directory, which contains the garbage collector implementation. If you're using Tango, the compiler runtime is in /lib/compiler/gdc or /lib/compiler/dmd, and the garbage collector is in /lib/gc/basic.[1]: and presumably not Tango, since he's coding a kernel. Though he could of course use that version just as well.As a shameless plug, building kernels against Tango should actually be easier than doing so against Phobos, since the runtime can be used completely separately from all user-level code, the GC more easily replaced or customized, etc. Kernel development was actually one of my primary inspirations for the Tango design, since most of the vocal Ares users were working on kernel projects :-) Sean
Apr 19 2007