diff options
Diffstat (limited to 'src/mem')
-rw-r--r-- | src/mem/page_table.cc | 7 | ||||
-rw-r--r-- | src/mem/page_table.hh | 5 | ||||
-rw-r--r-- | src/mem/se_translating_port_proxy.hh | 2 |
3 files changed, 14 insertions, 0 deletions
diff --git a/src/mem/page_table.cc b/src/mem/page_table.cc index 8ff640837..0abe8eaf3 100644 --- a/src/mem/page_table.cc +++ b/src/mem/page_table.cc @@ -104,6 +104,13 @@ FuncPageTable::remap(Addr vaddr, int64_t size, Addr new_vaddr) } void +FuncPageTable::getMappings(std::vector<std::pair<Addr, Addr>> *addr_maps) +{ + for (auto &iter : pTable) + addr_maps->push_back(make_pair(iter.first, iter.second.pageStart())); +} + +void FuncPageTable::unmap(Addr vaddr, int64_t size) { assert(pageOffset(vaddr) == 0); diff --git a/src/mem/page_table.hh b/src/mem/page_table.hh index 9b24c0efa..0d0a75ef5 100644 --- a/src/mem/page_table.hh +++ b/src/mem/page_table.hh @@ -194,6 +194,9 @@ class PageTableBase : public Serializable pTableCache[2].valid = false; } } + + virtual void getMappings(std::vector<std::pair<Addr, Addr>> + *addr_mappings) {}; }; /** @@ -239,6 +242,8 @@ class FuncPageTable : public PageTableBase void serialize(CheckpointOut &cp) const override; void unserialize(CheckpointIn &cp) override; + + void getMappings(std::vector<std::pair<Addr, Addr>> *addr_maps) override; }; /** diff --git a/src/mem/se_translating_port_proxy.hh b/src/mem/se_translating_port_proxy.hh index bb823a75b..5ac6b5286 100644 --- a/src/mem/se_translating_port_proxy.hh +++ b/src/mem/se_translating_port_proxy.hh @@ -83,6 +83,8 @@ class SETranslatingPortProxy : public PortProxy SETranslatingPortProxy(MasterPort& port, Process* p, AllocType alloc); virtual ~SETranslatingPortProxy(); + void setPageTable(PageTableBase *p) { pTable = p; } + void setProcess(Process *p) { process = p; } bool tryReadBlob(Addr addr, uint8_t *p, int size) const; bool tryWriteBlob(Addr addr, const uint8_t *p, int size) const; bool tryMemsetBlob(Addr addr, uint8_t val, int size) const; |