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