mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-20 17:52:52 +00:00
nova: breakpoint handling
If no one is registered for a breakpoint trap - stop the thread. E.g. used by virtualbox assertion implementation.
This commit is contained in:
parent
9a4a0448be
commit
e5b509cabb
@ -101,6 +101,7 @@ void Pager_object::_exception_handler(addr_t portal_id)
|
||||
Utcb *utcb = _check_handler(myself, obj);
|
||||
addr_t fault_ip = utcb->ip;
|
||||
uint8_t res = 0xFF;
|
||||
addr_t mtd = 0;
|
||||
|
||||
if (obj->submit_exception_signal())
|
||||
res = obj->client_recall();
|
||||
@ -117,10 +118,17 @@ void Pager_object::_exception_handler(addr_t portal_id)
|
||||
|
||||
Nova::revoke(Obj_crd(portal_id, 0));
|
||||
obj->_state.mark_dead();
|
||||
|
||||
enum { TRAP_BREAKPOINT = 3 };
|
||||
|
||||
if ((portal_id & 0x1f) == TRAP_BREAKPOINT) {
|
||||
utcb->ip = fault_ip - 1;
|
||||
mtd = Mtd::EIP;
|
||||
}
|
||||
}
|
||||
|
||||
utcb->set_msg_word(0);
|
||||
utcb->mtd = 0;
|
||||
utcb->mtd = mtd;
|
||||
|
||||
reply(myself->stack_top());
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user