core: Introduce default CPU exception handler

The CPU session interfaces comes with the ability to install an
exception handler per thread. This patch enhances the feature with the
provision of a default signal handler that is used if no thread-specific
handler is installed. The default signal handler can be set by
specifying an invalid thread capability and a valid signal context
capability.

Furthermore, this patch relaxes the requirement of the order of the
calls of 'exception_handler' and 'set_pager'. Originally, the exception
handler could be installed not before setting a pager. Now, we remember
the installed exception handler in the 'Cpu_thread' and propagate to to
the platform thread at a later time.
This commit is contained in:
Norman Feske
2013-01-03 20:29:18 +01:00
parent 9b24115c08
commit 9f82764316
8 changed files with 170 additions and 34 deletions

View File

@ -46,8 +46,15 @@ namespace Genode {
Pager_capability add_client(Thread_capability thread) {
return _local()->add_client(thread); }
void fault_handler(Signal_context_capability handler) {
return _local()->fault_handler(handler); }
void fault_handler(Signal_context_capability handler)
{
/*
* On Linux, page faults are never reflected to RM clients. They
* are always handled by the kernel. If a segmentation fault
* occurs, this condition is being reflected as a CPU exception
* to the handler registered via 'Cpu_session::exception_handler'.
*/
}
State state() {
return _local()->state(); }