6 unsigned Jdb_ptab::max_pt_level = 1;
8 // -----------------------------------------------------------------------
9 IMPLEMENTATION [arm && armv5]:
13 Jdb_ptab::entry_valid(Mword entry, unsigned)
14 { return entry & 0x03; }
18 Jdb_ptab::entry_is_pt_ptr(Mword entry, unsigned level,
19 unsigned *entries, unsigned *next_level)
21 if (level > 0 || (entry & 0x03) == 0x02)
24 if ((entry & 0x03) == 0x01)
25 *entries = 256; // coarse (1KB)
27 *entries = 1024; // fine (4KB)
35 Jdb_ptab::is_cached(Mword entry, unsigned level)
37 if (level == 0 && (entry & 3) != 2)
38 return true; /* No caching options on PDEs */
39 return (entry & Page::Cache_mask) == Page::CACHEABLE;
44 Jdb_ptab::is_executable(Mword entry)
52 Jdb_ptab::ap_char(unsigned ap)
54 return ap & 0x2 ? (ap & 0x1) ? 'w' : 'r'
55 : (ap & 0x1) ? 'W' : 'R';
59 // -----------------------------------------------------------------------
60 IMPLEMENTATION [arm && (armv6 || armv7)]:
62 IMPLEMENT inline NEEDS ["paging.h"]
64 Jdb_ptab::entry_valid(Mword entry, unsigned)
65 { return (entry & 3) == 1 || (entry & 3) == 2; }
69 Jdb_ptab::entry_is_pt_ptr(Mword entry, unsigned level,
70 unsigned *entries, unsigned *next_level)
72 if (level > 0 || (entry & 0x03) == 0x02)
75 *entries = 256; // coarse (1KB)
82 Jdb_ptab::is_cached(Mword entry, unsigned level)
87 return (entry & 0x700c) == 0x5004;
91 return (entry & Page::Cache_mask) == Page::CACHEABLE;
96 Jdb_ptab::is_executable(Mword entry)
98 return (entry & 3) == 2 || (entry & 3) == 1;
103 Jdb_ptab::ap_char(unsigned ap)
111 case 0x21: return 'R';
112 case 0x22: case 0x23: return 'r';
117 // -----------------------------------------------------------------------
118 IMPLEMENTATION [arm]:
120 IMPLEMENT inline NEEDS ["paging.h"]
122 Jdb_ptab::entry_phys(Mword entry, unsigned level)
124 unsigned t = entry & 0x03;
133 return entry & 0xfffffc00;
135 return entry & 0xfff00000;
137 return entry & 0xfffff000;
148 return entry & 0xffff0000;
150 return entry & 0xfffff000;
152 return entry & 0xfffffc00;
159 Jdb_ptab::print_entry(Mword entry, unsigned level)
162 printf("%08lx", entry);
165 if (!entry_valid(entry,level))
170 Address phys = entry_phys(entry, level);
172 unsigned t = entry & 0x03;
173 unsigned ap = entry >> 4;
178 case 1: ps = 'C'; break;
179 case 2: ps = 'S'; ap = entry >> 10; break;
180 case 3: ps = 'F'; break;
181 default: ps = 'U'; break;
186 case 1: ps = 'l'; break;
187 case 2: ps = 's'; break;
188 case 3: ps = 't'; break;
189 default: ps = 'u'; break;
192 printf("%05lx%s%c", phys >> Config::PAGE_SHIFT,
193 is_cached(entry, level)
194 ? "-" : JDB_ANSI_COLOR(lightblue) "n" JDB_ANSI_END,
196 if (level == 0 && t != 2)
199 printf("%s%c" JDB_ANSI_END,
200 is_executable(entry) ? "" : JDB_ANSI_COLOR(red),
207 Jdb_ptab::rows() const
208 { return entries/8; }