Hello Genode community,

in my checkpoint component I intercepted the Cpu session of a child, 
through which I get all Thread_capabilities created for and by the 
child. To store the state of a component I need to store the registers 
of the threads used by the child.

I tried reading the registers through the "Thread_state 
Cpu_thread::state()" method, but it did not contain any information 
about (just zeros).

I'm using Genode 16.05, kernel Fiasco.OC (pbax9 build). By inspecting 
the kernel API of foc, I found out that the function 
l4_thread_ex_regs_ret can read the sp and ip register. By changing the 
state method in platform_thread.cc (in base-foc) I could get the registers:

Thread_state Platform_thread::state()
{
        Thread_state s;
        if (_pager_obj) s = _pager_obj->state;

        _pager_obj->state.ip  = ~0UL;
        _pager_obj->state.sp  = ~0UL;
        l4_umword_t flags = 0;
        l4_thread_ex_regs_ret(_thread.local.dst(), &_pager_obj->state.ip, 
&_pager_obj->state.sp, &flags);

        s.sp = _pager_obj->state.sp;
        s.ip = _pager_obj->state.ip;
        s.kcap = _gate.remote;
        s.id   = _gate.local.local_name();
        s.utcb = _utcb;

        return s;
}

But other registers like r0 - r12 are missing.

Is there a simple way in Genode to get them? Can I utilize the utcb 
memory location to find the missing registers?


Kind regards
Denis

------------------------------------------------------------------------------
_______________________________________________
genode-main mailing list
genode-main@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/genode-main

Reply via email to