13 called from interrupt gate.
15 extern "C" void sys_ipc_log_wrapper(void)
17 Thread *curr = current_thread();
18 Entry_frame *regs = reinterpret_cast<Entry_frame*>(curr->regs());
19 Syscall_frame *ipc_regs = reinterpret_cast<Syscall_frame*>(curr->regs());
21 Mword entry_event_num = (Mword)-1;
22 Unsigned8 have_snd = (ipc_regs->ref().flags() & L4_obj_ref::Ipc_send)
23 || (ipc_regs->ref().flags() == L4_obj_ref::Ipc_call);
24 Unsigned8 is_next_period = ipc_regs->next_period();
25 Utcb *utcb = curr->access_utcb();
26 int do_log = Jdb_ipc_trace::log() &&
27 Jdb_ipc_trace::check_restriction (curr->kobject()->dbg_id(),
28 static_cast<Task*>(curr->space())->dbg_id(),
31 if (Jdb_nextper_trace::log() && is_next_period)
33 Tb_entry_ipc *tb = static_cast<Tb_entry_ipc*>(Jdb_tbuf::new_entry());
34 tb->set(curr, regs->ip(), ipc_regs, utcb,
35 0, curr->sched_context()->left());
36 Jdb_tbuf::commit_entry();
44 Obj_cap r = ipc_regs->ref();
46 Kobject_iface *o = r.deref(&rights, true);
48 dbg_id = o->dbg_info()->dbg_id();
52 Tb_entry_ipc *tb = static_cast<Tb_entry_ipc*>
53 (EXPECT_TRUE(Jdb_ipc_trace::log_buf()) ? Jdb_tbuf::new_entry()
54 : alloca(sizeof(Tb_entry_ipc)));
55 tb->set(curr, regs->ip(), ipc_regs, utcb,
56 dbg_id, curr->sched_context()->left());
58 entry_event_num = tb->number();
60 if (EXPECT_TRUE(Jdb_ipc_trace::log_buf()))
61 Jdb_tbuf::commit_entry();
63 Jdb_tbuf::direct_log_entry(tb, "IPC");
68 // now pass control to regular sys_ipc()
71 if (Jdb_nextper_trace::log() && is_next_period)
73 Tb_entry_ipc_res *tb =
74 static_cast<Tb_entry_ipc_res*>(Jdb_tbuf::new_entry());
75 tb->set(curr, regs->ip(), ipc_regs, utcb, 0,
76 entry_event_num, have_snd, is_next_period);
77 Jdb_tbuf::commit_entry();
78 goto skip_ipc_res_log;
81 if (Jdb_ipc_trace::log() && Jdb_ipc_trace::log_result() && do_log)
83 Tb_entry_ipc_res *tb = static_cast<Tb_entry_ipc_res*>
84 (EXPECT_TRUE(Jdb_ipc_trace::log_buf()) ? Jdb_tbuf::new_entry()
85 : alloca(sizeof(Tb_entry_ipc_res)));
86 tb->set(curr, regs->ip(), ipc_regs, utcb, utcb->error.raw(),
87 entry_event_num, have_snd, is_next_period);
89 if (EXPECT_TRUE(Jdb_ipc_trace::log_buf()))
90 Jdb_tbuf::commit_entry();
92 Jdb_tbuf::direct_log_entry(tb, "IPC result");
101 extern "C" void sys_ipc_trace_wrapper(void)
103 Thread *curr = current_thread();
104 Entry_frame *ef = nonull_static_cast<Entry_frame*>(curr->regs());
105 Syscall_frame *regs = curr->regs();
107 //Mword from_spec = regs->from_spec();
108 L4_obj_ref snd_dst = regs->ref();
110 Unsigned64 orig_tsc = Cpu::rdtsc();
112 // first try the fastpath, then the "slowpath"
115 // kernel is locked here => no Lock_guard <...> needed
116 Tb_entry_ipc_trace *tb =
117 static_cast<Tb_entry_ipc_trace*>(Jdb_tbuf::new_entry());
119 tb->set(curr, ef->ip(), orig_tsc, snd_dst, regs->from_spec(),
120 L4_msg_tag(0,0,0,0), 0, 0);
122 Jdb_tbuf::commit_entry();