util: Make cpt_upgraders python3 compatible
It won't be possible to build gem5 in a python3 only environment otherwise since the cpt_upgrader.py script is automatically run at the end of compilation Change-Id: Iea4217e5cd64ca44b99aa0db5dabfdced7aeb3ea Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/28587 Maintainer: Bobby R. Bruce <bbruce@ucdavis.edu> Reviewed-by: Jason Lowe-Power <power.jg@gmail.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python2.7
|
||||
#!/usr/bin/env python
|
||||
|
||||
# Copyright (c) 2012-2013,2015-2016 ARM Limited
|
||||
# Copyright (c) 2012-2013,2015-2016, 2020 ARM Limited
|
||||
# All rights reserved
|
||||
#
|
||||
# The license below extends only to copyright in the software and shall
|
||||
@@ -68,8 +68,9 @@
|
||||
# upgrader. This can be especially valuable when maintaining private
|
||||
# upgraders in private branches.
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import ConfigParser
|
||||
from six.moves import configparser
|
||||
import glob, types, sys, os
|
||||
import os.path as osp
|
||||
|
||||
@@ -79,8 +80,8 @@ def verboseprint(*args):
|
||||
if not verbose_print:
|
||||
return
|
||||
for arg in args:
|
||||
print arg,
|
||||
print
|
||||
print(arg, end=' ')
|
||||
print("\n")
|
||||
|
||||
class Upgrader:
|
||||
tag_set = set()
|
||||
@@ -89,7 +90,7 @@ class Upgrader:
|
||||
legacy = {}
|
||||
def __init__(self, filename):
|
||||
self.filename = filename
|
||||
execfile(filename, {}, self.__dict__)
|
||||
exec(open(filename).read(), {}, self.__dict__)
|
||||
|
||||
if not hasattr(self, 'tag'):
|
||||
self.tag = osp.basename(filename)[:-3]
|
||||
@@ -99,7 +100,7 @@ class Upgrader:
|
||||
self.depends = [self.depends]
|
||||
|
||||
if not isinstance(self.depends, list):
|
||||
print "Error: 'depends' for %s is the wrong type" % self.tag
|
||||
print("Error: 'depends' for {} is the wrong type".format(self.tag))
|
||||
sys.exit(1)
|
||||
|
||||
if hasattr(self, 'fwd_depends'):
|
||||
@@ -109,23 +110,25 @@ class Upgrader:
|
||||
self.fwd_depends = []
|
||||
|
||||
if not isinstance(self.fwd_depends, list):
|
||||
print "Error: 'fwd_depends' for %s is the wrong type" % self.tag
|
||||
print("Error: 'fwd_depends' for {} is the wrong type".format(
|
||||
self.tag))
|
||||
sys.exit(1)
|
||||
|
||||
if hasattr(self, 'upgrader'):
|
||||
if not isinstance(self.upgrader, types.FunctionType):
|
||||
print "Error: 'upgrader' for %s is %s, not function" \
|
||||
% (self.tag, type(self))
|
||||
print("Error: 'upgrader' for {} is {}, not function".format(
|
||||
self.tag, type(self)))
|
||||
sys.exit(1)
|
||||
Upgrader.tag_set.add(self.tag)
|
||||
elif hasattr(self, 'downgrader'):
|
||||
if not isinstance(self.downgrader, types.FunctionType):
|
||||
print "Error: 'downgrader' for %s is %s, not function" \
|
||||
% (self.tag, type(self))
|
||||
print("Error: 'downgrader' for {} is {}, not function".format(
|
||||
self.tag, type(self)))
|
||||
sys.exit(1)
|
||||
Upgrader.untag_set.add(self.tag)
|
||||
else:
|
||||
print "Error: no upgrader or downgrader method for", self.tag
|
||||
print("Error: no upgrader or downgrader method for".format(
|
||||
self.tag))
|
||||
sys.exit(1)
|
||||
|
||||
if hasattr(self, 'legacy_version'):
|
||||
@@ -170,14 +173,14 @@ class Upgrader:
|
||||
for tag, upg in Upgrader.by_tag.items():
|
||||
for fd in upg.fwd_depends:
|
||||
if fd not in Upgrader.by_tag:
|
||||
print "Error: '%s' cannot (forward) depend on "\
|
||||
"nonexistent tag '%s'" % (fd, tag)
|
||||
print("Error: '{}' cannot (forward) depend on "
|
||||
"nonexistent tag '{}'".format(fd, tag))
|
||||
sys.exit(1)
|
||||
Upgrader.by_tag[fd].depends.append(tag)
|
||||
for dep in upg.depends:
|
||||
if dep not in Upgrader.by_tag:
|
||||
print "Error: '%s' cannot depend on "\
|
||||
"nonexistent tag '%s'" % (tag, dep)
|
||||
print("Error: '{}' cannot depend on "
|
||||
"nonexistent tag '{}'".format(tag, dep))
|
||||
sys.exit(1)
|
||||
|
||||
def process_file(path, **kwargs):
|
||||
@@ -191,7 +194,7 @@ def process_file(path, **kwargs):
|
||||
import shutil
|
||||
shutil.copyfile(path, path + '.bak')
|
||||
|
||||
cpt = ConfigParser.SafeConfigParser()
|
||||
cpt = configparser.SafeConfigParser()
|
||||
|
||||
# gem5 is case sensitive with paramaters
|
||||
cpt.optionxform = str
|
||||
@@ -219,7 +222,7 @@ def process_file(path, **kwargs):
|
||||
elif cpt.has_option('Globals','version_tags'):
|
||||
tags = set((''.join(cpt.get('Globals','version_tags'))).split())
|
||||
else:
|
||||
print "fatal: no version information in checkpoint"
|
||||
print("fatal: no version information in checkpoint")
|
||||
exit(1)
|
||||
|
||||
verboseprint("has tags", ' '.join(tags))
|
||||
@@ -228,8 +231,8 @@ def process_file(path, **kwargs):
|
||||
# simulator support for its changes.
|
||||
unknown_tags = tags - (Upgrader.tag_set | Upgrader.untag_set)
|
||||
if unknown_tags:
|
||||
print "warning: upgrade script does not recognize the following "\
|
||||
"tags in this checkpoint:", ' '.join(unknown_tags)
|
||||
print("warning: upgrade script does not recognize the following "
|
||||
"tags in this checkpoint:", ' '.join(unknown_tags))
|
||||
|
||||
# Apply migrations for tags not in checkpoint and tags present for which
|
||||
# downgraders are present, respecting dependences
|
||||
@@ -237,8 +240,8 @@ def process_file(path, **kwargs):
|
||||
while to_apply:
|
||||
ready = set([ t for t in to_apply if Upgrader.get(t).ready(tags) ])
|
||||
if not ready:
|
||||
print "could not apply these upgrades:", ' '.join(to_apply)
|
||||
print "update dependences impossible to resolve; aborting"
|
||||
print("could not apply these upgrades:", ' '.join(to_apply))
|
||||
print("update dependences impossible to resolve; aborting")
|
||||
exit(1)
|
||||
|
||||
for tag in ready:
|
||||
@@ -278,14 +281,14 @@ if __name__ == '__main__':
|
||||
Upgrader.load_all()
|
||||
|
||||
if options.get_cc_file:
|
||||
print "// this file is auto-generated by util/cpt_upgrader.py"
|
||||
print "#include <string>"
|
||||
print "#include <set>"
|
||||
print("// this file is auto-generated by util/cpt_upgrader.py")
|
||||
print("#include <string>")
|
||||
print("#include <set>")
|
||||
print
|
||||
print "std::set<std::string> version_tags = {"
|
||||
print("std::set<std::string> version_tags = {")
|
||||
for tag in Upgrader.tag_set:
|
||||
print " \"%s\"," % tag
|
||||
print "};"
|
||||
print(" \"{}\",".format(tag))
|
||||
print("};")
|
||||
exit(0)
|
||||
elif len(args) != 1:
|
||||
parser.error("You must specify a checkpoint file to modify or a "\
|
||||
@@ -312,8 +315,8 @@ if __name__ == '__main__':
|
||||
elif osp.isfile(cpt_file):
|
||||
process_file(cpt_file, **vars(options))
|
||||
else:
|
||||
print "Error: checkpoint file not found at in %s " % path,
|
||||
print "and recurse not specified"
|
||||
print("Error: checkpoint file not found in {} ".format(path))
|
||||
print("and recurse not specified")
|
||||
sys.exit(1)
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
@@ -94,8 +94,8 @@ def upgrader(cpt):
|
||||
cpt.set(sec_dma, "buffer", "")
|
||||
|
||||
|
||||
print "Warning: Assuming that the HDLCD pixel clock and global frequency " \
|
||||
"are still using their default values."
|
||||
print("Warning: Assuming that the HDLCD pixel clock and global frequency "
|
||||
"are still using their default values.")
|
||||
sec_osc = "system.realview.realview_io.osc_pxl"
|
||||
global_tick = 1E12
|
||||
pxl_freq = 137E6
|
||||
|
||||
@@ -7,7 +7,7 @@ def upgrader(cpt):
|
||||
if re.search('.*sys.*\.cpu.*\.isa$', sec):
|
||||
mr = cpt.get(sec, 'miscRegs').split()
|
||||
if len(mr) == 161:
|
||||
print "MISCREG_TEEHBR already seems to be inserted."
|
||||
print("MISCREG_TEEHBR already seems to be inserted.")
|
||||
else:
|
||||
mr.insert(51,0); # Add dummy value for MISCREG_TEEHBR
|
||||
cpt.set(sec, 'miscRegs', ' '.join(str(x) for x in mr))
|
||||
|
||||
@@ -23,7 +23,8 @@ def upgrader(cpt):
|
||||
# Updating SVE misc registers (dummy values)
|
||||
mr = cpt.get(sec, 'miscRegs').split()
|
||||
if len(mr) == 820:
|
||||
print "MISCREG_SVE registers already seems to be inserted."
|
||||
print("MISCREG_SVE registers already seems "
|
||||
"to be inserted.")
|
||||
else:
|
||||
# Replace MISCREG_FREESLOT_1 with MISCREG_ID_AA64ZFR0_EL1
|
||||
mr[-1] = 0;
|
||||
|
||||
@@ -3,10 +3,10 @@ def upgrader(cpt):
|
||||
if cpt.get('root','isa') != 'arm':
|
||||
return
|
||||
import re
|
||||
print "Warning: The size of the FP register file has changed. "\
|
||||
"To get similar results you need to adjust the number of "\
|
||||
"physical registers in the CPU you're restoring into by "\
|
||||
"NNNN."
|
||||
print("Warning: The size of the FP register file has changed. "
|
||||
"To get similar results you need to adjust the number of "
|
||||
"physical registers in the CPU you're restoring into by "
|
||||
"NNNN.")
|
||||
# Find the CPU context's and upgrade their registers
|
||||
for sec in cpt.sections():
|
||||
re_xc_match = re.match('^.*?sys.*?\.cpu(\d+)*\.xc\.*', sec)
|
||||
|
||||
@@ -12,6 +12,6 @@ def upgrader(cpt):
|
||||
cpt.set(sec, '_size', '0')
|
||||
cpt.set(sec, 'lruSeq', '0')
|
||||
else:
|
||||
print "ISA is not x86"
|
||||
print("ISA is not x86")
|
||||
|
||||
legacy_version = 6
|
||||
|
||||
Reference in New Issue
Block a user