Hi all.
I am now giving a try to the Genode OS framework. I like it's concepts and ideas and its elegant design, and maybe, will migrate to it eventually. -- I was
developing an OS/2 clone based on Fiasco microkernel and l4env. Now they're discontinued. So, I must probably, migrate to something else. The most
probable candidates are L4Re or Genode. I like Genode because of its kernel-neutrality (It can work on any L4 flavour, it is very attractive feature) and has
interesting ideas regarding the scalability and capability to build a hierarchy of subsystems, minimising the application-specific Trusted Computing Bases.
So, as I understood, it abstracts the kernel specifics from a developer. But in some cases, it can be desirable to make some kernel-specific implementations.
For example, Fiasco kernel based on l4v2 API has 'segments' feature which, for example, is actively used by L4Linux. We use this feature too. One of our
objectives is a binary compatibility with existing OS/2 applications. And OS/2 application ABI includes a convention that FS register for Ring3 application, holds
a selector of a structure named Thread Info Block. Though the application can obtain this structure by calling an DosGetInfoBlocks() API, the C startup code
generated by many compilers, relies on the convention that FS must contain the TIB selector. So, if we try to implement this feature on L4, we must have the
means to allocate GDT selectors and get the allocated selector. On Fiasco, this can be done by filling the registers in a special way and issuing a 'LLDT'
instruction, or, by calling a fiasco_gdt_set() function, and get the allocated selector by fiasco_gdt_get_entry_offset() (which is the same, but through a 'l4sys'
package). On Fiasco.OC, this can be done similar way (not through LLDT instruction, though).
My question is: Can be the underlying kernel determined under Genode, and then try doing kernel-specific things? Or, maybe, there is a more elegant way to do
kernel-specific things?
Thanks in advance,
valery.
PS: On Pistachio, as I heard, the application also can operate on GDT selectors, but this possibility has even more limitations. (It seems, only LDT selectors
can be altered, but not GDT ones, or something)