diff --git a/base-nova/src/base/thread/thread_nova.cc b/base-nova/src/base/thread/thread_nova.cc index f62b609ab..26c754bb3 100644 --- a/base-nova/src/base/thread/thread_nova.cc +++ b/base-nova/src/base/thread/thread_nova.cc @@ -151,6 +151,11 @@ void Thread_base::start() request_event_portal(_pager_cap, _tid.exc_pt_sel, PT_SEL_RECALL); } + /* default: we don't accept any mappings or translations */ + Utcb * utcb_obj = reinterpret_cast(utcb()); + utcb_obj->crd_rcv = Obj_crd(); + utcb_obj->crd_xlt = Obj_crd(); + /* request creation of SC to let thread run*/ env()->cpu_session()->resume(_thread_cap); } diff --git a/base-nova/src/core/irq_session_component.cc b/base-nova/src/core/irq_session_component.cc index 55c5bd5df..53d96e741 100644 --- a/base-nova/src/core/irq_session_component.cc +++ b/base-nova/src/core/irq_session_component.cc @@ -91,6 +91,11 @@ class Irq_thread : public Thread_base throw Cpu_session::Thread_creation_failed(); } + /* default: we don't accept any mappings or translations */ + Utcb * utcb_obj = reinterpret_cast(Thread_base::utcb()); + utcb_obj->crd_rcv = Obj_crd(); + utcb_obj->crd_xlt = Obj_crd(); + /* create SC */ unsigned sc_sel = cap_selector_allocator()->alloc(); res = create_sc(sc_sel, pd_sel, _tid.ec_sel, Qpd()); diff --git a/base-nova/src/core/thread_start.cc b/base-nova/src/core/thread_start.cc index d4ae39724..68621a0df 100644 --- a/base-nova/src/core/thread_start.cc +++ b/base-nova/src/core/thread_start.cc @@ -77,9 +77,10 @@ void Thread_base::start() */ using namespace Nova; - addr_t sp = reinterpret_cast(&_context->stack[-4]); + addr_t sp = reinterpret_cast(&_context->stack[-4]); addr_t utcb = reinterpret_cast(&_context->utcb); - addr_t pd_sel = Platform_pd::pd_core_sel(); + Utcb * utcb_obj = reinterpret_cast(&_context->utcb); + addr_t pd_sel = Platform_pd::pd_core_sel(); /* create local EC */ enum { CPU_NO = 0, GLOBAL = false }; @@ -90,6 +91,10 @@ void Thread_base::start() throw Cpu_session::Thread_creation_failed(); } + /* default: we don't accept any mappings or translations */ + utcb_obj->crd_rcv = Obj_crd(); + utcb_obj->crd_xlt = Obj_crd(); + if (map_local(reinterpret_cast(Thread_base::myself()->utcb()), Obj_crd(PT_SEL_PAGE_FAULT, 0), Obj_crd(_tid.exc_pt_sel + PT_SEL_PAGE_FAULT, 0))) {