x86, mem: Pass the multi level page table layout in as a parameter.

Don't get it from a global constant declared in an ISA header file.

Change-Id: Ie19440abdd76500a5e12e6791e6f755ad9e95af3
Reviewed-on: https://gem5-review.googlesource.com/7344
Maintainer: Gabe Black <gabeblack@google.com>
Reviewed-by: Brandon Potter <Brandon.Potter@amd.com>
Reviewed-by: Alexandru Duțu <alexandru.dutu@amd.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
This commit is contained in:
Gabe Black
2018-01-05 17:48:40 -08:00
parent 2a15bfd79c
commit 703662624c
3 changed files with 8 additions and 6 deletions

View File

@@ -101,7 +101,8 @@ X86Process::X86Process(ProcessParams *params, ObjectFile *objFile,
: Process(params, params->useArchPT ?
static_cast<EmulationPageTable *>(
new ArchPageTable(params->name, params->pid,
params->system, PageBytes)) :
params->system, PageBytes,
PageTableLayout)) :
new EmulationPageTable(params->name, params->pid,
PageBytes),
objFile),

View File

@@ -139,7 +139,8 @@ class MultiLevelPageTable : public EmulationPageTable
public:
MultiLevelPageTable(const std::string &__name, uint64_t _pid,
System *_sys, Addr pageSize);
System *_sys, Addr pageSize,
const std::vector<uint8_t> &layout);
~MultiLevelPageTable();
void initState(ThreadContext* tc) override;

View File

@@ -45,11 +45,11 @@ using namespace std;
using namespace TheISA;
template <class ISAOps>
MultiLevelPageTable<ISAOps>::MultiLevelPageTable(const std::string &__name,
uint64_t _pid, System *_sys,
Addr pageSize)
MultiLevelPageTable<ISAOps>::MultiLevelPageTable(
const std::string &__name, uint64_t _pid, System *_sys,
Addr pageSize, const std::vector<uint8_t> &layout)
: EmulationPageTable(__name, _pid, pageSize), system(_sys),
logLevelSize(PageTableLayout),
logLevelSize(layout),
numLevels(logLevelSize.size())
{
}