]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/thread-log.cpp
37c56f691f6f9c14f1790ca571122a4d87325198
[l4.git] / kernel / fiasco / src / kern / thread-log.cpp
1 IMPLEMENTATION [log]:
2
3 #include <cstring>
4 #include "config.h"
5 #include "jdb_trace.h"
6 #include "jdb_tbuf.h"
7 #include "types.h"
8 #include "cpu_lock.h"
9
10 PUBLIC static inline NEEDS["jdb_trace.h"]
11 int
12 Thread::log_page_fault()
13 {
14   return Jdb_pf_trace::log();
15 }
16
17
18 /** Page-fault logging.
19  */
20 void
21 Thread::page_fault_log(Address pfa, unsigned error_code, unsigned long eip)
22 {
23   if (Jdb_pf_trace::check_restriction(current_thread()->dbg_id(), pfa))
24     {
25       Lock_guard <Cpu_lock> guard (&cpu_lock);
26
27       Tb_entry_pf _local;
28       Tb_entry_pf *tb = static_cast<Tb_entry_pf*>
29         (EXPECT_TRUE(Jdb_pf_trace::log_buf()) ? Jdb_tbuf::new_entry()
30                                     : &_local);
31       tb->set(this, eip, pfa, error_code, current()->space());
32
33       if (EXPECT_TRUE(Jdb_pf_trace::log_buf()))
34         Jdb_tbuf::commit_entry();
35       else
36         Jdb_tbuf::direct_log_entry(tb, "PF");
37     }
38 }
39