Genode 16.05 Fault handler

Sebastian Sumpf Sebastian.Sumpf at ...1...
Tue Aug 30 15:45:26 CEST 2016


Hello again,

I missed that part

> *((unsigned int*)0x1000) = 1;

in my last reply. You cannot cause a page fault in your entry point and
also handle it in the entry point thread, because the entry point is not
able to receive signals when it is in page fault. It is a hen and egg
problem.

If you cause the fault from another Genode thread, it should work as
expected.

Sebastian


On 08/30/2016 03:07 PM, Denis Huber wrote:
> Hello Sebastian,
> 
> I moved sigh to the member attributes [1], but without success. I also 
> tried to use a heap to store the Signal_handler, also without success.
> 
> [1] 
> https://github.com/702nADOS/genode-CheckpointRestore-SharedMemory/blob/93eaec436ce9b6d3b3a6663558bff9af925ae70f/src/test/fault_handler/main.cc#L19
> 
> I am using run script [2], if it helps.
> 
> [2] 
> https://github.com/702nADOS/genode-CheckpointRestore-SharedMemory/blob/93eaec436ce9b6d3b3a6663558bff9af925ae70f/run/fault_handler.run
> 
> 
> Kind regards,
> Denis
> 
> On 30.08.2016 14:36, Sebastian Sumpf wrote:
>> Hi Denis,
>>
>>> Signal_handler<Main> sigh = {env.ep(), *this, &Main::_handle_fault};
>>
>> The line above, creates the Signal_handler on the stack and destructs
>> this handler as soon as the 'Main' constructor is finished.
>>
>> Therefore, 'sigh' should be a member of the 'Main' class.
>>
>> Regards,
>>
>> Sebastian
>>
>> On 08/30/2016 02:10 PM, Denis Huber wrote:
>>> Dear Genode community,
>>>
>>> in Genode 16.05 the old usage of Signal_receivers and Signal_contexts is
>>> considered deprecated. Instead Signal_handler and Signal_transmitter
>>> shall be used.
>>>
>>> I am trying to use a Signal_handler as a fault handler for env's address
>>> space. I wrote a short test to illustrate the problem [1].
>>>
>>> [1]
>>> https://github.com/702nADOS/genode-CheckpointRestore-SharedMemory/blob/c9a5a1f999a2ce1c6ffd5c316eee127c93d87308/src/test/fault_handler/main.cc
>>>
>>> The output of [1] is as follows:
>>> "
>>> [init -> pf-signal_handler] --- pf-signal_handler started ---
>>> no RM attachment (WRITE pf_addr=1000 pf_ip=100061c from 2ae000)
>>> Genode::Pager_entrypoint::entry()::<lambda(Genode::Pager_object*)>:
>>> Could not resolve pf=1000 ip=100061c
>>> "
>>>
>>> The signal handler was registered correctly, because the line
>>> "
>>> Genode::Core_pd_session_component::submit(Genode::Capability<Genode::Signal_context>,
>>> unsigned int)::<lambda(Genode::Signal_context_component*)>: invalid
>>> signal-context capability
>>> "
>>> is missing. However, the method _handle_fault() is never entered. What
>>> am I doing wrong?
>>>
>>>
>>> Kind regards,
>>> Denis
>>>
>>> ------------------------------------------------------------------------------
>>> _______________________________________________
>>> genode-main mailing list
>>> genode-main at lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/genode-main
>>>
>>
>>
>> ------------------------------------------------------------------------------
>> _______________________________________________
>> genode-main mailing list
>> genode-main at lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/genode-main
>>
> 
> ------------------------------------------------------------------------------
> _______________________________________________
> genode-main mailing list
> genode-main at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/genode-main
> 





More information about the users mailing list