The command executed was `black src configs tests util`. Change-Id: I8dfaa6ab04658fea37618127d6ac19270028d771 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/47024 Maintainer: Bobby Bruce <bbruce@ucdavis.edu> Reviewed-by: Jason Lowe-Power <power.jg@gmail.com> Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Tested-by: kokoro <noreply+kokoro@google.com>
105 lines
2.9 KiB
Python
105 lines
2.9 KiB
Python
# The ISA is now a separate SimObject, which means that we serialize
|
|
# it in a separate section instead of as a part of the ThreadContext.
|
|
def upgrader(cpt):
|
|
isa = cpt.get("root", "isa", fallback="")
|
|
if isa == "":
|
|
return
|
|
isa_fields = {
|
|
"arm": ("miscRegs"),
|
|
"sparc": (
|
|
"asi",
|
|
"tick",
|
|
"fprs",
|
|
"gsr",
|
|
"softint",
|
|
"tick_cmpr",
|
|
"stick",
|
|
"stick_cmpr",
|
|
"tpc",
|
|
"tnpc",
|
|
"tstate",
|
|
"tt",
|
|
"tba",
|
|
"pstate",
|
|
"tl",
|
|
"pil",
|
|
"cwp",
|
|
"gl",
|
|
"hpstate",
|
|
"htstate",
|
|
"hintp",
|
|
"htba",
|
|
"hstick_cmpr",
|
|
"strandStatusReg",
|
|
"fsr",
|
|
"priContext",
|
|
"secContext",
|
|
"partId",
|
|
"lsuCtrlReg",
|
|
"scratchPad",
|
|
"cpu_mondo_head",
|
|
"cpu_mondo_tail",
|
|
"dev_mondo_head",
|
|
"dev_mondo_tail",
|
|
"res_error_head",
|
|
"res_error_tail",
|
|
"nres_error_head",
|
|
"nres_error_tail",
|
|
"tick_intr_sched",
|
|
"cpu",
|
|
"tc_num",
|
|
"tick_cmp",
|
|
"stick_cmp",
|
|
"hstick_cmp",
|
|
),
|
|
"x86": ("regVal"),
|
|
}
|
|
|
|
isa_fields = isa_fields.get(isa, [])
|
|
isa_sections = []
|
|
for sec in cpt.sections():
|
|
import re
|
|
|
|
re_cpu_match = re.match("^(.*sys.*\.cpu[^.]*)\.xc\.(.+)$", sec)
|
|
# Search for all the execution contexts
|
|
if not re_cpu_match:
|
|
continue
|
|
|
|
if re_cpu_match.group(2) != "0":
|
|
# This shouldn't happen as we didn't support checkpointing
|
|
# of in-order and O3 CPUs.
|
|
raise ValueError(
|
|
"Don't know how to migrate multi-threaded CPUs "
|
|
"from version 1"
|
|
)
|
|
|
|
isa_section = []
|
|
for fspec in isa_fields:
|
|
for (key, value) in cpt.items(sec, raw=True):
|
|
if key in isa_fields:
|
|
isa_section.append((key, value))
|
|
|
|
name = "%s.isa" % re_cpu_match.group(1)
|
|
isa_sections.append((name, isa_section))
|
|
|
|
for (key, value) in isa_section:
|
|
cpt.remove_option(sec, key)
|
|
|
|
for (sec, options) in isa_sections:
|
|
# Some intermediate versions of gem5 have empty ISA sections
|
|
# (after we made the ISA a SimObject, but before we started to
|
|
# serialize into a separate ISA section).
|
|
if not cpt.has_section(sec):
|
|
cpt.add_section(sec)
|
|
else:
|
|
if cpt.items(sec):
|
|
raise ValueError(
|
|
"Unexpected populated ISA section in old " "checkpoint"
|
|
)
|
|
|
|
for (key, value) in options:
|
|
cpt.set(sec, key, value)
|
|
|
|
|
|
legacy_version = 4
|