1 IMPLEMENTATION [amd64]:
5 unsigned Jdb_ptab::max_pt_level = Pdir::Depth;
7 IMPLEMENT inline NEEDS ["paging.h"]
9 Jdb_ptab::entry_is_pt_ptr(Mword entry, unsigned level,
10 unsigned *entries, unsigned *next_level)
12 if (level > Pdir::Super_level || entry & Pt_entry::Pse_bit)
14 *entries = Ptab::Level<Pdir::Traits, Pdir::Depth>::length(level);
15 *next_level = level+1;
19 IMPLEMENT inline NEEDS ["paging.h"]
21 Jdb_ptab::entry_phys(Mword entry, unsigned level)
23 return Ptab::Level<Pdir::Traits, Pdir::Depth>::addr(level, entry);
26 IMPLEMENT inline NEEDS ["paging.h"]
28 Jdb_ptab::entry_valid(Mword entry, unsigned)
29 { return entry & Pt_entry::Valid; }
33 Jdb_ptab::print_entry(Mword entry, unsigned level)
37 printf(L4_PTR_FMT, entry);
41 if (!entry_valid(entry,level))
47 Address phys = entry_phys(entry, level);
49 if (level == Pdir::Super_level && entry & Pt_entry::Pse_bit)
50 printf((phys >> 20) > 0xFF
51 ? " %03lx/2" : " %02lx/2", phys >> 20);
53 printf((phys >> Config::PAGE_SHIFT) > 0xFFFF
54 ? "%13lx" : " %04lx", phys >> Config::PAGE_SHIFT);
56 putchar(((cur_pt_level>=max_pt_level || (entry & Pt_entry::Pse_bit)) &&
57 (entry & Pt_entry::Cpu_global)) ? '+' : '-');
58 printf("%s%c%s", entry & Pt_entry::Noncacheable ? JDB_ANSI_COLOR(lightblue) : "",
59 entry & Pt_entry::Noncacheable
60 ? 'n' : (entry & Pt_entry::Write_through) ? 't' : '-',
61 entry & Pt_entry::Noncacheable ? JDB_ANSI_END : "");
62 putchar(entry & Pt_entry::User
63 ? (entry & Pt_entry::Writable) ? 'w' : 'r'
64 : (entry & Pt_entry::Writable) ? 'W' : 'R');
69 Jdb_ptab::rows() const
74 Jdb_ptab::disp_virt(unsigned long row, unsigned col)
76 Pdir::Va e(Mword(col-1) + (Mword(row) * Mword(cols()-1)));
77 e <<= Ptab::Level<Pdir::Traits, Pdir::Depth>::shift(cur_pt_level);
78 return Virt_addr(e).value() + virt_base;
83 Jdb_ptab::print_statline(unsigned long row, unsigned long col)
85 if (cur_pt_level == 0)
87 Jdb::printf_statline("pml4", "<Space>=mode <CR>=goto pdp",
88 "<" L4_PTR_FMT "> task %p", disp_virt(row,col), _task);
90 else if (cur_pt_level == 1)
92 Jdb::printf_statline("pdp", "<Space>=mode <CR>=goto pdir",
93 "<" L4_PTR_FMT "> task %p", disp_virt(row,col), _task);
95 else if (cur_pt_level == 2)
97 Jdb::printf_statline("pdir", "<Space>=mode <CR>=goto ptab/superpage",
98 "<" L4_PTR_FMT "> task %p", disp_virt(row,col), _task);
102 Jdb::printf_statline("ptab", "<Space>=mode <CR>=goto page",
103 "<" L4_PTR_FMT "> task %p", disp_virt(row,col), _task);