base: Add warn() and inform() to m5.utils for use from python
authorSascha Bischoff <sascha.bischoff@arm.com>
Fri, 15 Feb 2013 22:40:10 +0000 (17:40 -0500)
committerSascha Bischoff <sascha.bischoff@arm.com>
Fri, 15 Feb 2013 22:40:10 +0000 (17:40 -0500)
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)

src/python/m5/SimObject.py
src/python/m5/ticks.py
src/python/m5/util/__init__.py
src/python/m5/util/dot_writer.py

index 5db33d4bc25cae069eb5fc879ec594dbeb1f37aa..09145f498b05b515df6a71629c8d59c049d9e679 100644 (file)
@@ -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):
index 181a65eba68c7e7e01da9e499cbca805b83db87d..0d82f6edde5502b03ac06a30b6845eb3c58f953a 100644 (file)
@@ -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',
index 59178197701929c48088af452a564292b2900b9e..66ebb3cfe6395541f951d1f642c268c917fd3745 100644 (file)
@@ -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'):
index c1c5ff3ac5def1558188b3d3e55900d651a71297..52d0b4b62145f74db4bdf7639b4ecd1ad4e720d0 100644 (file)
@@ -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)