sim: Add checkpoint parameters for VMA list
Add checkpoint parameters (together with corresponding serialization
and unserialization) for VMA list of class MemState into a separate
section named 'vmalist'.
Without these VMA list parameters, a page table fault will occur when
running with --restore-simpoint-checkpoint, because of an empty VMA
list. For example:
$ ./build/RISCV/gem5.debug --debug-flags=Exec configs/example/se.py \
-c tests/test-progs/hello/bin/riscv/linux/hello \
--cpu-type=NonCachingSimpleCPU --restore-simpoint-checkpoint \
--checkpoint-dir m5out/ -r 2
...
2404000: system.switch_cpus: T0 : @_int_malloc+3392 : sd a5, 8(a0) \
: MemWrite : D=0x000000000001ed21 A=0x862e8
panic: Page table fault when accessing virtual address 0x862e8
...
Example checkpoint output:
[system.cpu.workload.vmalist]
size=3
[system.cpu.workload.vmalist.Vma0]
name=stack
addrRangeStart=...
addrRangeEnd=...
[system.cpu.workload.vmalist.Vma1]
name=heap
addrRangeStart=...
addrRangeEnd=...
[system.cpu.workload.vmalist.Vma2]
...
Change-Id: Ib2fa7ad2c34fe667ce95bc4b10a1affcf60d9c1f
Signed-off-by: Ian Jiang <ianjiang.ict@gmail.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/31875
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
Reviewed-by: Bobby R. Bruce <bbruce@ucdavis.edu>
Reviewed-by: Alexandru Duțu <alexandru.dutu@amd.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -190,7 +190,18 @@ class MemState : public Serializable
|
||||
paramOut(cp, "stackMin", _stackMin);
|
||||
paramOut(cp, "nextThreadStackBase", _nextThreadStackBase);
|
||||
paramOut(cp, "mmapEnd", _mmapEnd);
|
||||
|
||||
ScopedCheckpointSection sec(cp, "vmalist");
|
||||
paramOut(cp, "size", _vmaList.size());
|
||||
int count = 0;
|
||||
for (auto vma : _vmaList) {
|
||||
ScopedCheckpointSection sec(cp, csprintf("Vma%d", count++));
|
||||
paramOut(cp, "name", vma.getName());
|
||||
paramOut(cp, "addrRangeStart", vma.start());
|
||||
paramOut(cp, "addrRangeEnd", vma.end());
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
unserialize(CheckpointIn &cp) override
|
||||
{
|
||||
@@ -201,6 +212,20 @@ class MemState : public Serializable
|
||||
paramIn(cp, "stackMin", _stackMin);
|
||||
paramIn(cp, "nextThreadStackBase", _nextThreadStackBase);
|
||||
paramIn(cp, "mmapEnd", _mmapEnd);
|
||||
|
||||
int count;
|
||||
ScopedCheckpointSection sec(cp, "vmalist");
|
||||
paramIn(cp, "size", count);
|
||||
for (int i = 0; i < count; ++i) {
|
||||
ScopedCheckpointSection sec(cp, csprintf("Vma%d", i));
|
||||
std::string name;
|
||||
Addr start;
|
||||
Addr end;
|
||||
paramIn(cp, "name", name);
|
||||
paramIn(cp, "addrRangeStart", start);
|
||||
paramIn(cp, "addrRangeEnd", end);
|
||||
_vmaList.emplace_back(AddrRange(start, end), _pageBytes, name);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user