Associating Threads with Process Rm's

Norman Feske norman.feske at ...1...
Fri Jan 23 16:28:54 CET 2015

Hello Bob,

> I have an application whose main function creates an object instance
> based on a Thread. That instance creates another object instance whose
> main purpose is to read and write to an ffat file system through the
> libc plug-in for that purpose. As soon as this object attempts to access
> the file system a error message complaining about no pager object
> implemented ("/void
> Genode::Pager_object::unresolved_page_fault_occurred(): not
> implemented/") occurs.

this message is printed by the base-hw version of core if a program
crashes (it corresponds to a segmentation fault on Linux). It would be
interesting to see the surrounding log output of the message you quoted.
Normally, core prints the instruction pointer and name of the thread
that caused the trouble.

> On re-reading the Architecture documentation about RM in the Core, it
> *very* briefly explains that a thread capability for a pager needs to be
> created for the thread, using an add_client function call. I assumed
> this would be done in the thread entry() member function and added the
> following line of code at the the beginning of that function:
> Thread_capability ap = Thread::cap();
> Pager_capability pc = env()->rm_session()->add_client(ap);
> env()->cpu_session()->set_pager(ap, pc);
> This did not work and I got he same error message about no pager object.

I think you are on the wrong track. For implementing your service, you
should not need to deal with the peculiarities of page-fault handling or
thread creation at all.

> I'm obviously confused about what's going with a process's region
> manager handling of threads. Could someone please enlighten me?

To get a clearer picture, you may find the documentation useful that I
am currently writing. In particular the Sections "Component creation"
(in the Architecture chapter) and "Page-fault handling" (in the
Under-the-hood chapter) might be of interest:

Right now, the document is not finished. So you have to go through the
trouble to build it yourself (see the README for the instructions). I
hope that it is still useful.

To investigate your problem, may you consider to make your branch along
with a run script publicly available (e.g., on GitHub) so that I can
reproduce it?


Dr.-Ing. Norman Feske
Genode Labs ·

Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz Dresden
Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth

More information about the users mailing list