summaryrefslogtreecommitdiff
path: root/src/mem
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem')
-rw-r--r--src/mem/page_table.cc7
-rw-r--r--src/mem/page_table.hh5
-rw-r--r--src/mem/se_translating_port_proxy.hh2
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;