struct Log_pf_invalid : public Tb_entry
{
Mword pfa;
- Mword cap_idx;
+ Cap_index cap_idx;
Mword err;
unsigned print(int max, char *buf) const;
};
struct Log_exc_invalid : public Tb_entry
{
- Mword cap_idx;
+ Cap_index cap_idx;
unsigned print(int max, char *buf) const;
};
};
};
Syscall_frame *_snd_regs;
- unsigned char _ipc_send_rights;
+ L4_fpage::Rights _ipc_send_rights;
};
class Buf_utcb_saver
L4_msg_tag tag;
Thread *partner;
Syscall_frame *regs;
- unsigned char rights;
+ L4_fpage::Rights rights;
bool timeout;
bool have_rcv;
auto guard = lock_guard(cpu_lock);
- unsigned char rights;
+ L4_fpage::Rights rights;
Kobject_iface *pager = _pager.ptr(space(), &rights);
if (!pager)
{
WARN("CPU%d: Pager of %lx is invalid (pfa=" L4_PTR_FMT
", errorcode=" L4_PTR_FMT ") to %lx (pc=%lx)\n",
- current_cpu(), dbg_id(), pfa, error_code,
- _pager.raw(), regs()->ip());
+ cxx::int_value<Cpu_number>(current_cpu()), dbg_id(), pfa,
+ error_code, cxx::int_value<Cap_index>(_pager.raw()), regs()->ip());
LOG_TRACE("Page fault invalid pager", "pf", this, Log_pf_invalid,
r.timeout(timeout);
r.tag(tag);
r.from(0);
- r.ref(L4_obj_ref(_pager.raw() << L4_obj_ref::Cap_shift, L4_obj_ref::Ipc_call_ipc));
+ r.ref(L4_obj_ref(_pager.raw(), L4_obj_ref::Ipc_call_ipc));
pager->invoke(r.ref(), rights, &r, utcb);
Thread::do_ipc(L4_msg_tag const &tag, bool have_send, Thread *partner,
bool have_receive, Sender *sender,
L4_timeout_pair t, Syscall_frame *regs,
- unsigned char rights)
+ L4_fpage::Rights rights)
{
assert_kdb (cpu_lock.test());
assert_kdb (this == current());
PRIVATE inline NEEDS [Thread::copy_utcb_to]
bool
Thread::transfer_msg(L4_msg_tag tag, Thread *receiver,
- Syscall_frame *sender_regs, unsigned char rights)
+ Syscall_frame *sender_regs, L4_fpage::Rights rights)
{
Syscall_frame* dst_regs = receiver->rcv_regs();
*/
PRIVATE
bool
-Thread::exception(Kobject_iface *handler, Trap_state *ts, Mword rights)
+Thread::exception(Kobject_iface *handler, Trap_state *ts, L4_fpage::Rights rights)
{
Syscall_frame r;
L4_timeout_pair timeout(L4_timeout::Never, L4_timeout::Never);
r.tag(tag);
r.timeout(timeout);
r.from(0);
- r.ref(L4_obj_ref(_exc_handler.raw() << L4_obj_ref::Cap_shift, L4_obj_ref::Ipc_call_ipc));
+ r.ref(L4_obj_ref(_exc_handler.raw(), L4_obj_ref::Ipc_call_ipc));
spill_user_state();
handler->invoke(r.ref(), rights, &r, utcb);
fill_user_state();
if (!send_exception_arch(ts))
return 0; // do not send exception
- unsigned char rights = 0;
+ L4_fpage::Rights rights = L4_fpage::Rights(0);
Kobject_iface *pager = _exc_handler.ptr(space(), &rights);
if (EXPECT_FALSE(!pager))
PRIVATE static inline
bool FIASCO_WARN_RESULT
Thread::copy_utcb_to_utcb(L4_msg_tag const &tag, Thread *snd, Thread *rcv,
- unsigned char rights)
+ L4_fpage::Rights rights)
{
assert (cpu_lock.test());
if (tag.items())
success = transfer_msg_items(tag, snd, snd_utcb, rcv, rcv_utcb, rights);
- if (tag.transfer_fpu() && rcv_utcb->inherit_fpu() && (rights & L4_fpage::W))
+ if (tag.transfer_fpu() && rcv_utcb->inherit_fpu() && (rights & L4_fpage::Rights::W()))
snd->transfer_fpu(rcv);
return success;
Thread::copy_ts_to_utcb]
bool FIASCO_WARN_RESULT
Thread::copy_utcb_to(L4_msg_tag const &tag, Thread* receiver,
- unsigned char rights)
+ L4_fpage::Rights rights)
{
// we cannot copy trap state to trap state!
assert_kdb (!this->_utcb_handler || !receiver->_utcb_handler);
bool
Thread::transfer_msg_items(L4_msg_tag const &tag, Thread* snd, Utcb *snd_utcb,
Thread *rcv, Utcb *rcv_utcb,
- unsigned char rights)
+ L4_fpage::Rights rights)
{
// LOG_MSG_3VAL(current(), "map bd=", rcv_utcb->buf_desc.raw(), 0, 0);
Task *const rcv_t = nonull_static_cast<Task*>(rcv->space());
// diminish when sending via restricted ipc gates
if (sfp.type() == L4_fpage::Obj)
- sfp.mask_rights(L4_fpage::Rights(rights | L4_fpage::RX));
+ sfp.mask_rights(rights | L4_fpage::Rights::CRW() | L4_fpage::Rights::CD());
L4_error err;
PRIVATE inline
void
-Thread::set_ipc_send_rights(unsigned char c)
+Thread::set_ipc_send_rights(L4_fpage::Rights c)
{
_ipc_send_rights = c;
}
Thread::remote_handshake_receiver(L4_msg_tag const &tag, Thread *partner,
bool have_receive,
L4_timeout snd_t, Syscall_frame *regs,
- unsigned char rights)
+ L4_fpage::Rights rights)
{
// Flag that there must be no switch in the receive path.
// This flag also prevents the receive path from accessing
unsigned
Thread::Log_pf_invalid::print(int max, char *buf) const
{
- return snprintf(buf, max, "InvCap C:%lx pfa=%lx err=%lx", cap_idx, pfa, err);
+ return snprintf(buf, max, "InvCap C:%lx pfa=%lx err=%lx",
+ cxx::int_value<Cap_index>(cap_idx), pfa, err);
}
IMPLEMENT
unsigned
Thread::Log_exc_invalid::print(int max, char *buf) const
{
- return snprintf(buf, max, "InvCap C:%lx", cap_idx);
+ return snprintf(buf, max, "InvCap C:%lx", cxx::int_value<Cap_index>(cap_idx));
}