Hi all, hello Martin,

first of all, thank you for the rapid fix.

So since I only need a tiny fraction of Vinit (the device emulator), some time 
ago 
I decided that it would be easier for my project to only 'reintegrate' the 
stuff I need 
from Vinit into Genode 16.08 instead of porting the whole thing. Basically I 
create 
a child from my parent and register as pager. When my child requests a 
dataspace, 
I take note of size and address but don't actually create one. So then each 
time 
my child accesses data, I get notified via a pagefault. Then, with each PF, 
I would need to do 4 basic steps:

1. Get instruction pointer and decode instruction
2. Simulate memory access, redundantly
3. Increase instruction pointer
4. Resume child without ever attaching the dataspace

First, I experimented with my own solo app but then moved to adapt our existing 
checkpointing app rtcr accordingly [1] [2], since I figured that later I could 
reuse 
some parts of it for C/R.
Step 4 is relatively easy and already working, so I now have an app that 
pagefaults 
and gets resumed repeatedly at the same address and ip since I couldn't 
implement 
the rest of the steps so far. The reason is that I can't figure out how to 
access the 
Thread_state of the thread causing the pagefault. The Vinit uses an imprint 
written 
into the State that can be used to correlate an RM client to the pagefault 
State. I'm 
trying to integrate this imprint as well, but I'm struggling because obviously 
since 
the creation of Vinit the genode architecture has changed quite a bit (at least 
for a 
newcomer like me). E.g. I'm having trouble corresponding the required changes 
from [3] to add_client() to the 16.08 version (it exists in a different place 
with a 
different signature and a much smaller body).

So I'm wondering if maybe in the meantime there exists an easier way to access 
the IP (and other registers) of a pagefaulting thread from within the 
fault-handler 
(in my example _handle_fault in [4])? Especially considering that my parent 
task 
has only this one child (with currently only 1 thread), if that makes it easier.

Thank you.

Best regards,
Josef


[1] https://github.com/jmstark/genode (Base OS modifications required for rtcr)
[2] https://github.com/jmstark/rtcr (rtcr, to be cloned into repos)
[3] 
https://github.com/jmstark/genode_hdl_env/commit/79014e19861a7b02f028c6b5918148bbc7f06e18?diff=unified
[4] 
https://github.com/jmstark/rtcr/blob/red_mem/src/rtcr/intercept/ram_session.cc
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
genode-main mailing list
genode-main@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/genode-main

Reply via email to