44 #include "debug/MMU.hh" 55 DPRINTF(MMU,
"Allocating Page: %#x-%#x\n", vaddr, vaddr + size);
58 auto it =
pTable.find(vaddr);
62 "EmulationPageTable::allocate: addr %#x already mapped",
64 it->second =
Entry(paddr, flags);
81 DPRINTF(MMU,
"moving pages from vaddr %08p to %08p, size = %d\n", vaddr,
86 auto old_it =
pTable.find(vaddr);
87 assert(old_it !=
pTable.end() && new_it ==
pTable.end());
89 pTable.emplace(new_vaddr, old_it->second);
101 addr_maps->push_back(std::make_pair(iter.first, iter.second.paddr));
109 DPRINTF(MMU,
"Unmapping page: %#x-%#x\n", vaddr, vaddr + size);
112 auto it =
pTable.find(vaddr);
113 assert(it !=
pTable.end());
140 return &(iter->second);
148 DPRINTF(MMU,
"Couldn't Translate: %#x\n", vaddr);
152 DPRINTF(MMU,
"Translating: %#x->%#x\n", vaddr, paddr);
160 assert(
pageAlign(req->getVaddr() + req->getSize() - 1) ==
164 req->setPaddr(paddr);
166 panic(
"Request spans page boundaries!\n");
178 for (
auto &pte :
pTable) {
182 paramOut(cp,
"paddr", pte.second.paddr);
183 paramOut(cp,
"flags", pte.second.flags);
185 assert(count == pTable.size());
192 paramIn(cp,
"ptable.size", count);
#define panic(...)
This implements a cprintf based panic() function.
virtual void remap(Addr vaddr, int64_t size, Addr new_vaddr)
virtual void map(Addr vaddr, Addr paddr, int64_t size, uint64_t flags=0)
Maps a virtual memory region to a physical memory region.
decltype(nullptr) constexpr NoFault
void unserialize(CheckpointIn &cp) override
Unserialize an object.
std::shared_ptr< Request > RequestPtr
#define UNSERIALIZE_SCALAR(scalar)
std::string csprintf(const char *format, const Args &...args)
bool translate(Addr vaddr, Addr &paddr)
Translate function.
void paramOut(CheckpointOut &cp, const string &name, ExtMachInst const &machInst)
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Declarations of a non-full system Page Table.
virtual bool isUnmapped(Addr vaddr, int64_t size)
Check if any pages in a region are already allocated.
std::ostream CheckpointOut
PTable::iterator PTableItr
const Entry * lookup(Addr vaddr)
Lookup function.
void paramIn(CheckpointIn &cp, const string &name, ExtMachInst &machInst)
virtual void unmap(Addr vaddr, int64_t size)
void getMappings(std::vector< std::pair< Addr, Addr >> *addr_mappings)
void serialize(CheckpointOut &cp) const override
Serialize an object.
static const int NumArgumentRegs M5_VAR_USED
Scoped checkpoint section helper class.
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...
std::shared_ptr< FaultBase > Fault