debug.py revision 8269:5a9a639ce16f
13536Sgblack@eecs.umich.edu# Copyright (c) 2008 The Hewlett-Packard Development Company
210595Sgabeblack@google.com# All rights reserved.
33536Sgblack@eecs.umich.edu#
43536Sgblack@eecs.umich.edu# Redistribution and use in source and binary forms, with or without
53536Sgblack@eecs.umich.edu# modification, are permitted provided that the following conditions are
63536Sgblack@eecs.umich.edu# met: redistributions of source code must retain the above copyright
73536Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer;
83536Sgblack@eecs.umich.edu# redistributions in binary form must reproduce the above copyright
93536Sgblack@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the
103536Sgblack@eecs.umich.edu# documentation and/or other materials provided with the distribution;
113536Sgblack@eecs.umich.edu# neither the name of the copyright holders nor the names of its
123536Sgblack@eecs.umich.edu# contributors may be used to endorse or promote products derived from
133536Sgblack@eecs.umich.edu# this software without specific prior written permission.
143536Sgblack@eecs.umich.edu#
153536Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
163536Sgblack@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
173536Sgblack@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
183536Sgblack@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
193536Sgblack@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
203536Sgblack@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
213536Sgblack@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
223536Sgblack@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
233536Sgblack@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
243536Sgblack@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
253536Sgblack@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
263536Sgblack@eecs.umich.edu#
273536Sgblack@eecs.umich.edu# Authors: Nathan Binkert
283536Sgblack@eecs.umich.edu
293536Sgblack@eecs.umich.edufrom UserDict import DictMixin
303536Sgblack@eecs.umich.edu
313536Sgblack@eecs.umich.eduimport internal
323536Sgblack@eecs.umich.edu
338332Snate@binkert.orgfrom internal.debug import SimpleFlag, CompoundFlag
348332Snate@binkert.orgfrom internal.debug import schedBreakCycle, setRemoteGDBPort
353536Sgblack@eecs.umich.edufrom m5.util import printList
363536Sgblack@eecs.umich.edu
373536Sgblack@eecs.umich.edudef help():
383536Sgblack@eecs.umich.edu    print "Base Flags:"
393536Sgblack@eecs.umich.edu    for name in sorted(flags):
403536Sgblack@eecs.umich.edu        if name == 'All':
413536Sgblack@eecs.umich.edu            continue
425543Ssaidi@eecs.umich.edu        flag = flags[name]
435543Ssaidi@eecs.umich.edu        children = [c for c in flag.kids() ]
443536Sgblack@eecs.umich.edu        if not children:
453536Sgblack@eecs.umich.edu            print "    %s: %s" % (name, flag.desc())
463536Sgblack@eecs.umich.edu    print
473536Sgblack@eecs.umich.edu    print "Compound Flags:"
483536Sgblack@eecs.umich.edu    for name in sorted(flags):
493536Sgblack@eecs.umich.edu        if name == 'All':
503536Sgblack@eecs.umich.edu            continue
513536Sgblack@eecs.umich.edu        flag = flags[name]
523536Sgblack@eecs.umich.edu        children = [c for c in flag.kids() ]
533536Sgblack@eecs.umich.edu        if children:
543536Sgblack@eecs.umich.edu            print "    %s: %s" % (name, flag.desc())
555543Ssaidi@eecs.umich.edu            printList([ c.name() for c in children ], indent=8)
565543Ssaidi@eecs.umich.edu    print
573536Sgblack@eecs.umich.edu
583536Sgblack@eecs.umich.educlass AllFlags(DictMixin):
593536Sgblack@eecs.umich.edu    def __init__(self):
603536Sgblack@eecs.umich.edu        self._version = -1
613536Sgblack@eecs.umich.edu        self._dict = {}
623536Sgblack@eecs.umich.edu
633536Sgblack@eecs.umich.edu    def _update(self):
643536Sgblack@eecs.umich.edu        current_version = internal.debug.getAllFlagsVersion()
653536Sgblack@eecs.umich.edu        if self._version == current_version:
663536Sgblack@eecs.umich.edu            return
673536Sgblack@eecs.umich.edu
683536Sgblack@eecs.umich.edu        self._dict.clear()
693536Sgblack@eecs.umich.edu        for flag in internal.debug.getAllFlags():
703536Sgblack@eecs.umich.edu            self._dict[flag.name()] = flag
713536Sgblack@eecs.umich.edu        self._version = current_version
723536Sgblack@eecs.umich.edu
735543Ssaidi@eecs.umich.edu    def __contains__(self, item):
743536Sgblack@eecs.umich.edu        self._update()
753536Sgblack@eecs.umich.edu        return item in self._dict
763536Sgblack@eecs.umich.edu
773536Sgblack@eecs.umich.edu    def __getitem__(self, item):
783536Sgblack@eecs.umich.edu        self._update()
793536Sgblack@eecs.umich.edu        return self._dict[item]
803536Sgblack@eecs.umich.edu
813536Sgblack@eecs.umich.edu    def keys(self):
823536Sgblack@eecs.umich.edu        self._update()
833536Sgblack@eecs.umich.edu        return self._dict.keys()
843536Sgblack@eecs.umich.edu
853536Sgblack@eecs.umich.edu    def values(self):
863536Sgblack@eecs.umich.edu        self._update()
873536Sgblack@eecs.umich.edu        return self._dict.values()
883536Sgblack@eecs.umich.edu
893536Sgblack@eecs.umich.edu    def items(self):
903536Sgblack@eecs.umich.edu        self._update()
913536Sgblack@eecs.umich.edu        return self._dict.items()
923536Sgblack@eecs.umich.edu
935543Ssaidi@eecs.umich.edu    def iterkeys(self):
945543Ssaidi@eecs.umich.edu        self._update()
953536Sgblack@eecs.umich.edu        return self._dict.iterkeys()
963536Sgblack@eecs.umich.edu
973536Sgblack@eecs.umich.edu    def itervalues(self):
983536Sgblack@eecs.umich.edu        self._update()
993536Sgblack@eecs.umich.edu        return self._dict.itervalues()
1003536Sgblack@eecs.umich.edu
1013536Sgblack@eecs.umich.edu    def iteritems(self):
1023536Sgblack@eecs.umich.edu        self._update()
1033536Sgblack@eecs.umich.edu        return self._dict.iteritems()
1043536Sgblack@eecs.umich.edu
1053536Sgblack@eecs.umich.eduflags = AllFlags()
1063536Sgblack@eecs.umich.edu