On Mon Sep 15, 2014 at 15:50:07 +0200, Valentin Hauner wrote:
On 09/15/2014 09:18 AM, Björn Döbel wrote:
The trick here is that your pager needs to have the binary mapped into its own address space before handing it out. This can be achieved by accessing the binary's pages once during startup. (For convenience, see the l4_touch_ro() and l4_touch_rw() functions.)
That worked, now the warnings do not appear any more. But it does not solve the real problem either.
The code I've added:
extern char _start[], _stext[], _sdata[], _end[];
// Adapted from examples/sys/start-with-exc/main.c l4_touch_ro(_start, _sdata - _start + 1); l4_touch_rw(_sdata, _end - _sdata);
// Allocating stack and setting arguments to pass ...
l4_touch_rw(thread_stack[count], sizeof(thread_stack[count])); l4_touch_ro(t->func, 1);
// Mapping the pages with l4_task_map ...
I've tried using _stext instead of _start, but still no success.
A simple call of
l4_touch_ro(_stext, _end - _stext)
does not solve the issue either.
I'm unsure what is the problem now. Doing the 4 l4_touch_* are the right thing to do. We should check whether there are more page faults happening. Enter jdb, then issue 'P*' (capital P) to enable page-fault logging, then 'g' for go. Let it run a second, then ESC again. Look at log with 'T' (capital T). Are there any entries? And generally, what are the threads doing?
Adam