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