base: Add warn() and inform() to m5.utils for use from python
This patch adds two fuctions to m5.util, warn and inform, which mirror those
found in the C++ side of gem5. These are added in addition to the already
existing m5.util.panic and m5.util.fatal which already mirror the C++
functionality. This ensures that warning and information messages generated
by python are in the same format as those generated by C++.
Occurrences of
print "Warning: %s..." % name
have been replaced with
warn("%s...", name)
This commit is contained in:
@@ -213,8 +213,7 @@ class MetaSimObject(type):
|
||||
if 'cxx_header' not in cls._value_dict:
|
||||
global noCxxHeader
|
||||
noCxxHeader = True
|
||||
print >> sys.stderr, \
|
||||
"warning: No header file specified for SimObject: %s" % name
|
||||
warn("No header file specified for SimObject: %s", name)
|
||||
|
||||
# Export methods are automatically inherited via C++, so we
|
||||
# don't want the method declarations to get inherited on the
|
||||
@@ -804,8 +803,8 @@ class SimObject(object):
|
||||
def add_child(self, name, child):
|
||||
child = coerceSimObjectOrVector(child)
|
||||
if child.has_parent():
|
||||
print "warning: add_child('%s'): child '%s' already has parent" % \
|
||||
(name, child.get_name())
|
||||
warn("add_child('%s'): child '%s' already has parent", name,
|
||||
child.get_name())
|
||||
if self._children.has_key(name):
|
||||
# This code path had an undiscovered bug that would make it fail
|
||||
# at runtime. It had been here for a long time and was only
|
||||
@@ -828,8 +827,7 @@ class SimObject(object):
|
||||
val = SimObjectVector(val)
|
||||
self._values[key] = val
|
||||
if isSimObjectOrVector(val) and not val.has_parent():
|
||||
print "warning: %s adopting orphan SimObject param '%s'" \
|
||||
% (self, key)
|
||||
warn("%s adopting orphan SimObject param '%s'", self, key)
|
||||
self.add_child(key, val)
|
||||
|
||||
def path(self):
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
# Authors: Nathan Binkert
|
||||
|
||||
import sys
|
||||
from m5.util import warn
|
||||
|
||||
tps = 1.0e12 # default to 1 THz (1 Tick == 1 ps)
|
||||
tps_fixed = False # once set to true, can't be changed
|
||||
@@ -81,8 +82,8 @@ def fromSeconds(value):
|
||||
int_value = int(round(value))
|
||||
err = (value - int_value) / value
|
||||
if err > frequency_tolerance:
|
||||
print >>sys.stderr, "Warning: rounding error > tolerance"
|
||||
print >>sys.stderr, " %f rounded to %d" % (value, int_value)
|
||||
warn("rounding error > tolerance\n %f rounded to %d", value,
|
||||
int_value)
|
||||
return int_value
|
||||
|
||||
__all__ = [ 'setGlobalFrequency', 'fixGlobalFrequency', 'fromSeconds',
|
||||
|
||||
@@ -56,6 +56,17 @@ def fatal(fmt, *args):
|
||||
print >>sys.stderr, 'fatal:', fmt % args
|
||||
sys.exit(1)
|
||||
|
||||
# warn() should be called when the user should be warned about some condition
|
||||
# that may or may not be the user's fault, but that they should be made aware
|
||||
# of as it may affect the simulation or results.
|
||||
def warn(fmt, *args):
|
||||
print >>sys.stderr, 'warn:', fmt % args
|
||||
|
||||
# inform() should be called when the user should be informed about some
|
||||
# condition that they may be interested in.
|
||||
def inform(fmt, *args):
|
||||
print >>sys.stdout, 'info:', fmt % args
|
||||
|
||||
class Singleton(type):
|
||||
def __call__(cls, *args, **kwargs):
|
||||
if hasattr(cls, '_instance'):
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
|
||||
import m5, os, re
|
||||
from m5.SimObject import isRoot, isSimObjectVector
|
||||
from m5.util import warn
|
||||
try:
|
||||
import pydot
|
||||
except:
|
||||
@@ -176,4 +177,4 @@ def do_dot(root, outdir, dotFilename):
|
||||
# So avoid terminating simulation unnecessarily
|
||||
callgraph.write_pdf(dot_filename + ".pdf")
|
||||
except:
|
||||
print "warning: failed to generate pdf output from %s" % dot_filename
|
||||
warn("failed to generate pdf output from %s", dot_filename)
|
||||
|
||||
Reference in New Issue
Block a user