Traceflags: Add SCons function to created a traceflag instead of having one file with them all.
--HG-- extra : convert_revision : 427f6bd8f050861ace3bc0d354a1afa5fc8319e6
This commit is contained in:
parent
8ce31ea471
commit
538fae951b
23 changed files with 395 additions and 44 deletions
|
@ -133,6 +133,38 @@ Export('PySource')
|
||||||
Export('SimObject')
|
Export('SimObject')
|
||||||
Export('SwigSource')
|
Export('SwigSource')
|
||||||
|
|
||||||
|
########################################################################
|
||||||
|
#
|
||||||
|
# Trace Flags
|
||||||
|
#
|
||||||
|
all_flags = {}
|
||||||
|
trace_flags = []
|
||||||
|
def TraceFlag(name, desc=''):
|
||||||
|
if name in all_flags:
|
||||||
|
raise AttributeError, "Flag %s already specified" % name
|
||||||
|
flag = (name, (), desc)
|
||||||
|
trace_flags.append(flag)
|
||||||
|
all_flags[name] = ()
|
||||||
|
|
||||||
|
def CompoundFlag(name, flags, desc=''):
|
||||||
|
if name in all_flags:
|
||||||
|
raise AttributeError, "Flag %s already specified" % name
|
||||||
|
|
||||||
|
compound = tuple(flags)
|
||||||
|
for flag in compound:
|
||||||
|
if flag not in all_flags:
|
||||||
|
raise AttributeError, "Trace flag %s not found" % flag
|
||||||
|
if all_flags[flag]:
|
||||||
|
raise AttributeError, \
|
||||||
|
"Compound flag can't point to another compound flag"
|
||||||
|
|
||||||
|
flag = (name, compound, desc)
|
||||||
|
trace_flags.append(flag)
|
||||||
|
all_flags[name] = compound
|
||||||
|
|
||||||
|
Export('TraceFlag')
|
||||||
|
Export('CompoundFlag')
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
#
|
#
|
||||||
# Set some compiler variables
|
# Set some compiler variables
|
||||||
|
@ -307,6 +339,15 @@ for source,package in swig_sources:
|
||||||
env.Command('swig/init.cc', swig_modules, generate.makeSwigInit)
|
env.Command('swig/init.cc', swig_modules, generate.makeSwigInit)
|
||||||
Source('swig/init.cc')
|
Source('swig/init.cc')
|
||||||
|
|
||||||
|
# Generate traceflags.py
|
||||||
|
flags = [ Value(f) for f in trace_flags ]
|
||||||
|
env.Command('base/traceflags.py', flags, generate.traceFlagsPy)
|
||||||
|
PySource('m5', 'base/traceflags.py')
|
||||||
|
|
||||||
|
env.Command('base/traceflags.hh', flags, generate.traceFlagsHH)
|
||||||
|
env.Command('base/traceflags.cc', flags, generate.traceFlagsCC)
|
||||||
|
Source('base/traceflags.cc')
|
||||||
|
|
||||||
# Build the zip file
|
# Build the zip file
|
||||||
py_compiled = []
|
py_compiled = []
|
||||||
py_zip_depends = []
|
py_zip_depends = []
|
||||||
|
|
|
@ -75,3 +75,5 @@ if env['TARGET_ISA'] == 'alpha':
|
||||||
for f in isa_desc_files:
|
for f in isa_desc_files:
|
||||||
if not f.path.endswith('.hh'):
|
if not f.path.endswith('.hh'):
|
||||||
Source(f)
|
Source(f)
|
||||||
|
|
||||||
|
TraceFlag('Context')
|
||||||
|
|
|
@ -43,6 +43,8 @@ if env['TARGET_ISA'] == 'mips':
|
||||||
|
|
||||||
SimObject('MipsTLB.py')
|
SimObject('MipsTLB.py')
|
||||||
|
|
||||||
|
TraceFlag('MipsPRA')
|
||||||
|
|
||||||
if env['FULL_SYSTEM']:
|
if env['FULL_SYSTEM']:
|
||||||
#Insert Full-System Files Here
|
#Insert Full-System Files Here
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -44,6 +44,7 @@ if env['TARGET_ISA'] == 'sparc':
|
||||||
Source('utility.cc')
|
Source('utility.cc')
|
||||||
|
|
||||||
SimObject('SparcTLB.py')
|
SimObject('SparcTLB.py')
|
||||||
|
TraceFlag('Sparc')
|
||||||
|
|
||||||
if env['FULL_SYSTEM']:
|
if env['FULL_SYSTEM']:
|
||||||
SimObject('SparcSystem.py')
|
SimObject('SparcSystem.py')
|
||||||
|
|
|
@ -105,6 +105,8 @@ if env['TARGET_ISA'] == 'x86':
|
||||||
Source('utility.cc')
|
Source('utility.cc')
|
||||||
|
|
||||||
SimObject('X86TLB.py')
|
SimObject('X86TLB.py')
|
||||||
|
TraceFlag('Predecoder')
|
||||||
|
TraceFlag('X86')
|
||||||
|
|
||||||
if env['FULL_SYSTEM']:
|
if env['FULL_SYSTEM']:
|
||||||
SimObject('X86System.py')
|
SimObject('X86System.py')
|
||||||
|
|
|
@ -30,27 +30,6 @@
|
||||||
|
|
||||||
Import('*')
|
Import('*')
|
||||||
|
|
||||||
def make_cc(target, source, env):
|
|
||||||
assert(len(source) == 1)
|
|
||||||
assert(len(target) == 1)
|
|
||||||
|
|
||||||
traceflags = {}
|
|
||||||
execfile(str(source[0]), traceflags)
|
|
||||||
func = traceflags['gen_cc']
|
|
||||||
func(str(target[0]))
|
|
||||||
|
|
||||||
def make_hh(target, source, env):
|
|
||||||
assert(len(source) == 1)
|
|
||||||
assert(len(target) == 1)
|
|
||||||
|
|
||||||
traceflags = {}
|
|
||||||
execfile(str(source[0]), traceflags)
|
|
||||||
func = traceflags['gen_hh']
|
|
||||||
func(str(target[0]))
|
|
||||||
|
|
||||||
env.Command('traceflags.hh', 'traceflags.py', make_hh)
|
|
||||||
env.Command('traceflags.cc', 'traceflags.py', make_cc)
|
|
||||||
|
|
||||||
Source('annotate.cc')
|
Source('annotate.cc')
|
||||||
Source('bigint.cc')
|
Source('bigint.cc')
|
||||||
Source('circlebuf.cc')
|
Source('circlebuf.cc')
|
||||||
|
@ -79,7 +58,6 @@ Source('statistics.cc')
|
||||||
Source('str.cc')
|
Source('str.cc')
|
||||||
Source('time.cc')
|
Source('time.cc')
|
||||||
Source('trace.cc')
|
Source('trace.cc')
|
||||||
Source('traceflags.cc')
|
|
||||||
Source('userinfo.cc')
|
Source('userinfo.cc')
|
||||||
|
|
||||||
Source('compression/lzss_compression.cc')
|
Source('compression/lzss_compression.cc')
|
||||||
|
@ -101,4 +79,16 @@ if env['USE_MYSQL']:
|
||||||
Source('mysql.cc')
|
Source('mysql.cc')
|
||||||
Source('stats/mysql.cc')
|
Source('stats/mysql.cc')
|
||||||
|
|
||||||
PySource('m5', 'traceflags.py')
|
TraceFlag('Annotate')
|
||||||
|
TraceFlag('GDBAcc')
|
||||||
|
TraceFlag('GDBExtra')
|
||||||
|
TraceFlag('GDBMisc')
|
||||||
|
TraceFlag('GDBRead')
|
||||||
|
TraceFlag('GDBRecv')
|
||||||
|
TraceFlag('GDBSend')
|
||||||
|
TraceFlag('GDBWrite')
|
||||||
|
TraceFlag('SQL')
|
||||||
|
TraceFlag('StatEvents')
|
||||||
|
|
||||||
|
CompoundFlag('GDBAll', [ 'GDBMisc', 'GDBAcc', 'GDBRead', 'GDBWrite', 'GDBSend',
|
||||||
|
'GDBRecv', 'GDBExtra' ])
|
||||||
|
|
|
@ -68,15 +68,6 @@ baseFlags = [
|
||||||
'DiskImageRead',
|
'DiskImageRead',
|
||||||
'DiskImageWrite',
|
'DiskImageWrite',
|
||||||
'DynInst',
|
'DynInst',
|
||||||
'Ethernet',
|
|
||||||
'EthernetCksum',
|
|
||||||
'EthernetDMA',
|
|
||||||
'EthernetData',
|
|
||||||
'EthernetDesc',
|
|
||||||
'EthernetEEPROM',
|
|
||||||
'EthernetIntr',
|
|
||||||
'EthernetPIO',
|
|
||||||
'EthernetSM',
|
|
||||||
'Event',
|
'Event',
|
||||||
'ExecEnable',
|
'ExecEnable',
|
||||||
'ExecCPSeq',
|
'ExecCPSeq',
|
||||||
|
|
|
@ -136,6 +136,7 @@ if env['TARGET_ISA'] == 'x86':
|
||||||
|
|
||||||
if env['USE_CHECKER']:
|
if env['USE_CHECKER']:
|
||||||
Source('checker/cpu.cc')
|
Source('checker/cpu.cc')
|
||||||
|
TraceFlag('Checker')
|
||||||
checker_supports = False
|
checker_supports = False
|
||||||
for i in CheckerSupportedCPUList:
|
for i in CheckerSupportedCPUList:
|
||||||
if i in env['CPU_MODELS']:
|
if i in env['CPU_MODELS']:
|
||||||
|
@ -146,3 +147,26 @@ if env['USE_CHECKER']:
|
||||||
print i,
|
print i,
|
||||||
print ", please set USE_CHECKER=False or use one of those CPU models"
|
print ", please set USE_CHECKER=False or use one of those CPU models"
|
||||||
Exit(1)
|
Exit(1)
|
||||||
|
|
||||||
|
TraceFlag('Activity')
|
||||||
|
TraceFlag('Commit')
|
||||||
|
TraceFlag('Decode')
|
||||||
|
TraceFlag('DynInst')
|
||||||
|
TraceFlag('ExecEnable')
|
||||||
|
TraceFlag('ExecCPSeq')
|
||||||
|
TraceFlag('ExecEffAddr')
|
||||||
|
TraceFlag('ExecFetchSeq')
|
||||||
|
TraceFlag('ExecOpClass')
|
||||||
|
TraceFlag('ExecRegDelta')
|
||||||
|
TraceFlag('ExecResult')
|
||||||
|
TraceFlag('ExecSpeculative')
|
||||||
|
TraceFlag('ExecSymbol')
|
||||||
|
TraceFlag('ExecThread')
|
||||||
|
TraceFlag('ExecTicks')
|
||||||
|
TraceFlag('Fetch')
|
||||||
|
TraceFlag('IntrControl')
|
||||||
|
TraceFlag('PCEvent')
|
||||||
|
TraceFlag('Quiesce')
|
||||||
|
|
||||||
|
CompoundFlag('Exec', [ 'ExecEnable', 'ExecTicks', 'ExecOpClass', 'ExecThread',
|
||||||
|
'ExecEffAddr', 'ExecResult', 'ExecSymbol' ])
|
||||||
|
|
|
@ -34,3 +34,5 @@ if 'O3CPU' in env['CPU_MODELS']:
|
||||||
SimObject('MemTest.py')
|
SimObject('MemTest.py')
|
||||||
|
|
||||||
Source('memtest.cc')
|
Source('memtest.cc')
|
||||||
|
|
||||||
|
TraceFlag('MemTest')
|
||||||
|
|
|
@ -32,6 +32,16 @@ import sys
|
||||||
|
|
||||||
Import('*')
|
Import('*')
|
||||||
|
|
||||||
|
if 'O3CPU' in env['CPU_MODELS'] or 'OzoneCPU' in env['CPU_MODELS']:
|
||||||
|
Source('2bit_local_pred.cc')
|
||||||
|
Source('btb.cc')
|
||||||
|
Source('ras.cc')
|
||||||
|
Source('tournament_pred.cc')
|
||||||
|
|
||||||
|
TraceFlag('CommitRate')
|
||||||
|
TraceFlag('IEW')
|
||||||
|
TraceFlag('IQ')
|
||||||
|
|
||||||
if 'O3CPU' in env['CPU_MODELS']:
|
if 'O3CPU' in env['CPU_MODELS']:
|
||||||
SimObject('FUPool.py')
|
SimObject('FUPool.py')
|
||||||
SimObject('FuncUnitConfig.py')
|
SimObject('FuncUnitConfig.py')
|
||||||
|
@ -56,6 +66,21 @@ if 'O3CPU' in env['CPU_MODELS']:
|
||||||
Source('scoreboard.cc')
|
Source('scoreboard.cc')
|
||||||
Source('store_set.cc')
|
Source('store_set.cc')
|
||||||
|
|
||||||
|
TraceFlag('FreeList')
|
||||||
|
TraceFlag('LSQ')
|
||||||
|
TraceFlag('LSQUnit')
|
||||||
|
TraceFlag('MemDepUnit')
|
||||||
|
TraceFlag('O3CPU')
|
||||||
|
TraceFlag('ROB')
|
||||||
|
TraceFlag('Rename')
|
||||||
|
TraceFlag('Scoreboard')
|
||||||
|
TraceFlag('StoreSet')
|
||||||
|
TraceFlag('Writeback')
|
||||||
|
|
||||||
|
CompoundFlag('O3CPUAll', [ 'Fetch', 'Decode', 'Rename', 'IEW', 'Commit',
|
||||||
|
'IQ', 'ROB', 'FreeList', 'LSQ', 'LSQUnit', 'StoreSet', 'MemDepUnit',
|
||||||
|
'DynInst', 'O3CPU', 'Activity', 'Scoreboard', 'Writeback' ])
|
||||||
|
|
||||||
if env['TARGET_ISA'] == 'alpha':
|
if env['TARGET_ISA'] == 'alpha':
|
||||||
Source('alpha/cpu.cc')
|
Source('alpha/cpu.cc')
|
||||||
Source('alpha/cpu_builder.cc')
|
Source('alpha/cpu_builder.cc')
|
||||||
|
@ -77,10 +102,3 @@ if 'O3CPU' in env['CPU_MODELS']:
|
||||||
if env['USE_CHECKER']:
|
if env['USE_CHECKER']:
|
||||||
SimObject('O3Checker.py')
|
SimObject('O3Checker.py')
|
||||||
Source('checker_builder.cc')
|
Source('checker_builder.cc')
|
||||||
|
|
||||||
if 'O3CPU' in env['CPU_MODELS'] or 'OzoneCPU' in env['CPU_MODELS']:
|
|
||||||
Source('2bit_local_pred.cc')
|
|
||||||
Source('btb.cc')
|
|
||||||
Source('ras.cc')
|
|
||||||
Source('tournament_pred.cc')
|
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,15 @@ if 'OzoneCPU' in env['CPU_MODELS']:
|
||||||
Source('lw_back_end.cc')
|
Source('lw_back_end.cc')
|
||||||
Source('lw_lsq.cc')
|
Source('lw_lsq.cc')
|
||||||
Source('rename_table.cc')
|
Source('rename_table.cc')
|
||||||
|
|
||||||
|
TraceFlag('BE')
|
||||||
|
TraceFlag('FE')
|
||||||
|
TraceFlag('IBE')
|
||||||
|
TraceFlag('OzoneCPU')
|
||||||
|
TraceFlag('OzoneLSQ')
|
||||||
|
|
||||||
|
CompoundFlag('OzoneCPUAll', [ 'BE', 'FE', 'IBE', 'OzoneLSQ', 'OzoneCPU' ])
|
||||||
|
|
||||||
if env['USE_CHECKER']:
|
if env['USE_CHECKER']:
|
||||||
SimObject('OzoneChecker.py')
|
SimObject('OzoneChecker.py')
|
||||||
Source('checker_builder.cc')
|
Source('checker_builder.cc')
|
||||||
|
|
|
@ -41,5 +41,9 @@ if 'TimingSimpleCPU' in env['CPU_MODELS']:
|
||||||
SimObject('TimingSimpleCPU.py')
|
SimObject('TimingSimpleCPU.py')
|
||||||
Source('timing.cc')
|
Source('timing.cc')
|
||||||
|
|
||||||
|
if 'AtomicSimpleCPU' in env['CPU_MODELS'] or \
|
||||||
|
'TimingSimpleCPU' in env['CPU_MODELS']:
|
||||||
|
TraceFlag('SimpleCPU')
|
||||||
|
|
||||||
if need_simple_base:
|
if need_simple_base:
|
||||||
Source('base.cc')
|
Source('base.cc')
|
||||||
|
|
|
@ -66,3 +66,35 @@ if env['FULL_SYSTEM']:
|
||||||
Source('sinic.cc')
|
Source('sinic.cc')
|
||||||
Source('uart.cc')
|
Source('uart.cc')
|
||||||
Source('uart8250.cc')
|
Source('uart8250.cc')
|
||||||
|
|
||||||
|
TraceFlag('Console')
|
||||||
|
TraceFlag('ConsoleVerbose')
|
||||||
|
TraceFlag('DiskImageRead')
|
||||||
|
TraceFlag('DiskImageWrite')
|
||||||
|
TraceFlag('DMA')
|
||||||
|
TraceFlag('Ethernet')
|
||||||
|
TraceFlag('EthernetCksum')
|
||||||
|
TraceFlag('EthernetDMA')
|
||||||
|
TraceFlag('EthernetData')
|
||||||
|
TraceFlag('EthernetDesc')
|
||||||
|
TraceFlag('EthernetEEPROM')
|
||||||
|
TraceFlag('EthernetIntr')
|
||||||
|
TraceFlag('EthernetPIO')
|
||||||
|
TraceFlag('EthernetSM')
|
||||||
|
TraceFlag('IdeCtrl')
|
||||||
|
TraceFlag('IdeDisk')
|
||||||
|
TraceFlag('IsaFake')
|
||||||
|
TraceFlag('PCIDEV')
|
||||||
|
TraceFlag('PciConfigAll')
|
||||||
|
TraceFlag('SimpleDisk')
|
||||||
|
TraceFlag('SimpleDiskData')
|
||||||
|
TraceFlag('Uart')
|
||||||
|
|
||||||
|
CompoundFlag('DiskImageAll', [ 'DiskImageRead', 'DiskImageWrite' ])
|
||||||
|
CompoundFlag('EthernetAll', [ 'Ethernet', 'EthernetPIO', 'EthernetDMA',
|
||||||
|
'EthernetData' , 'EthernetDesc', 'EthernetIntr', 'EthernetSM',
|
||||||
|
'EthernetCksum' ])
|
||||||
|
CompoundFlag('EthernetNoData', [ 'Ethernet', 'EthernetPIO', 'EthernetDesc',
|
||||||
|
'EthernetIntr', 'EthernetSM', 'EthernetCksum' ])
|
||||||
|
CompoundFlag('IdeAll', [ 'IdeCtrl', 'IdeDisk' ])
|
||||||
|
|
||||||
|
|
|
@ -40,3 +40,7 @@ if env['FULL_SYSTEM'] and env['TARGET_ISA'] == 'alpha':
|
||||||
Source('tsunami_cchip.cc')
|
Source('tsunami_cchip.cc')
|
||||||
Source('tsunami_io.cc')
|
Source('tsunami_io.cc')
|
||||||
Source('tsunami_pchip.cc')
|
Source('tsunami_pchip.cc')
|
||||||
|
|
||||||
|
TraceFlag('AlphaConsole')
|
||||||
|
TraceFlag('MC146818')
|
||||||
|
TraceFlag('Tsunami')
|
||||||
|
|
|
@ -61,12 +61,12 @@ IsaFake::read(PacketPtr pkt)
|
||||||
warn("Device %s accessed by read to address %#x size=%d\n",
|
warn("Device %s accessed by read to address %#x size=%d\n",
|
||||||
name(), pkt->getAddr(), pkt->getSize());
|
name(), pkt->getAddr(), pkt->getSize());
|
||||||
if (params()->ret_bad_addr) {
|
if (params()->ret_bad_addr) {
|
||||||
DPRINTF(Tsunami, "read to bad address va=%#x size=%d\n",
|
DPRINTF(IsaFake, "read to bad address va=%#x size=%d\n",
|
||||||
pkt->getAddr(), pkt->getSize());
|
pkt->getAddr(), pkt->getSize());
|
||||||
pkt->setBadAddress();
|
pkt->setBadAddress();
|
||||||
} else {
|
} else {
|
||||||
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize);
|
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize);
|
||||||
DPRINTF(Tsunami, "read va=%#x size=%d\n",
|
DPRINTF(IsaFake, "read va=%#x size=%d\n",
|
||||||
pkt->getAddr(), pkt->getSize());
|
pkt->getAddr(), pkt->getSize());
|
||||||
switch (pkt->getSize()) {
|
switch (pkt->getSize()) {
|
||||||
case sizeof(uint64_t):
|
case sizeof(uint64_t):
|
||||||
|
@ -114,11 +114,11 @@ IsaFake::write(PacketPtr pkt)
|
||||||
name(), pkt->getAddr(), pkt->getSize(), data);
|
name(), pkt->getAddr(), pkt->getSize(), data);
|
||||||
}
|
}
|
||||||
if (params()->ret_bad_addr) {
|
if (params()->ret_bad_addr) {
|
||||||
DPRINTF(Tsunami, "write to bad address va=%#x size=%d \n",
|
DPRINTF(IsaFake, "write to bad address va=%#x size=%d \n",
|
||||||
pkt->getAddr(), pkt->getSize());
|
pkt->getAddr(), pkt->getSize());
|
||||||
pkt->setBadAddress();
|
pkt->setBadAddress();
|
||||||
} else {
|
} else {
|
||||||
DPRINTF(Tsunami, "write - va=%#x size=%d \n",
|
DPRINTF(IsaFake, "write - va=%#x size=%d \n",
|
||||||
pkt->getAddr(), pkt->getSize());
|
pkt->getAddr(), pkt->getSize());
|
||||||
|
|
||||||
if (params()->update_data) {
|
if (params()->update_data) {
|
||||||
|
|
|
@ -66,7 +66,7 @@ class IsaFake : public BasicPioDevice
|
||||||
return dynamic_cast<const Params *>(_params);
|
return dynamic_cast<const Params *>(_params);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* The constructor for Tsunmami Fake just registers itself with the MMU.
|
* The constructor for Isa Fake just registers itself with the MMU.
|
||||||
* @param p params structure
|
* @param p params structure
|
||||||
*/
|
*/
|
||||||
IsaFake(Params *p);
|
IsaFake(Params *p);
|
||||||
|
|
|
@ -38,3 +38,5 @@ if env['FULL_SYSTEM'] and env['TARGET_ISA'] == 'sparc':
|
||||||
Source('iob.cc')
|
Source('iob.cc')
|
||||||
Source('t1000.cc')
|
Source('t1000.cc')
|
||||||
Source('mm_disk.cc')
|
Source('mm_disk.cc')
|
||||||
|
|
||||||
|
TraceFlag('Iob')
|
||||||
|
|
|
@ -34,6 +34,9 @@ if env['FULL_SYSTEM']:
|
||||||
Source('kernel_stats.cc')
|
Source('kernel_stats.cc')
|
||||||
Source('system_events.cc')
|
Source('system_events.cc')
|
||||||
|
|
||||||
|
TraceFlag('DebugPrintf')
|
||||||
|
TraceFlag('Printf')
|
||||||
|
|
||||||
Source('linux/events.cc')
|
Source('linux/events.cc')
|
||||||
Source('linux/linux_syscalls.cc')
|
Source('linux/linux_syscalls.cc')
|
||||||
Source('linux/printk.cc')
|
Source('linux/printk.cc')
|
||||||
|
@ -43,3 +46,5 @@ if env['FULL_SYSTEM']:
|
||||||
Source('tru64/printf.cc')
|
Source('tru64/printf.cc')
|
||||||
Source('tru64/tru64_events.cc')
|
Source('tru64/tru64_events.cc')
|
||||||
Source('tru64/tru64_syscalls.cc')
|
Source('tru64/tru64_syscalls.cc')
|
||||||
|
TraceFlag('BADADDR')
|
||||||
|
|
||||||
|
|
|
@ -49,3 +49,10 @@ if env['FULL_SYSTEM']:
|
||||||
else:
|
else:
|
||||||
Source('page_table.cc')
|
Source('page_table.cc')
|
||||||
Source('translating_port.cc')
|
Source('translating_port.cc')
|
||||||
|
|
||||||
|
TraceFlag('Bus')
|
||||||
|
TraceFlag('BusAddrRanges')
|
||||||
|
TraceFlag('BusBridge')
|
||||||
|
TraceFlag('LLSC')
|
||||||
|
TraceFlag('MMU')
|
||||||
|
TraceFlag('MemoryAccess')
|
||||||
|
|
5
src/mem/cache/SConscript
vendored
5
src/mem/cache/SConscript
vendored
|
@ -35,3 +35,8 @@ SimObject('BaseCache.py')
|
||||||
Source('base_cache.cc')
|
Source('base_cache.cc')
|
||||||
Source('cache.cc')
|
Source('cache.cc')
|
||||||
Source('cache_builder.cc')
|
Source('cache_builder.cc')
|
||||||
|
|
||||||
|
TraceFlag('Cache')
|
||||||
|
TraceFlag('CachePort')
|
||||||
|
TraceFlag('CacheRepl')
|
||||||
|
TraceFlag('HWPrefetch')
|
||||||
|
|
4
src/mem/cache/tags/SConscript
vendored
4
src/mem/cache/tags/SConscript
vendored
|
@ -40,3 +40,7 @@ Source('split_lru.cc')
|
||||||
|
|
||||||
SimObject('Repl.py')
|
SimObject('Repl.py')
|
||||||
Source('repl/gen.cc')
|
Source('repl/gen.cc')
|
||||||
|
|
||||||
|
TraceFlag('IIC')
|
||||||
|
TraceFlag('IICMore')
|
||||||
|
TraceFlag('Split')
|
||||||
|
|
|
@ -336,3 +336,194 @@ class Generate(object):
|
||||||
arcname = py_compiled[zipname].arcname
|
arcname = py_compiled[zipname].arcname
|
||||||
zf.write(zipname, arcname)
|
zf.write(zipname, arcname)
|
||||||
zf.close()
|
zf.close()
|
||||||
|
|
||||||
|
def traceFlagsPy(self, target, source, env):
|
||||||
|
assert(len(target) == 1)
|
||||||
|
|
||||||
|
f = file(str(target[0]), 'w')
|
||||||
|
|
||||||
|
allFlags = []
|
||||||
|
for s in source:
|
||||||
|
val = eval(s.get_contents())
|
||||||
|
allFlags.append(val)
|
||||||
|
|
||||||
|
print >>f, 'baseFlags = ['
|
||||||
|
for flag, compound, desc in allFlags:
|
||||||
|
if not compound:
|
||||||
|
print >>f, " '%s'," % flag
|
||||||
|
print >>f, " ]"
|
||||||
|
print >>f
|
||||||
|
|
||||||
|
print >>f, 'compoundFlags = ['
|
||||||
|
print >>f, " 'All',"
|
||||||
|
for flag, compound, desc in allFlags:
|
||||||
|
if compound:
|
||||||
|
print >>f, " '%s'," % flag
|
||||||
|
print >>f, " ]"
|
||||||
|
print >>f
|
||||||
|
|
||||||
|
print >>f, "allFlags = frozenset(baseFlags + compoundFlags)"
|
||||||
|
print >>f
|
||||||
|
|
||||||
|
print >>f, 'compoundFlagMap = {'
|
||||||
|
all = tuple([flag for flag,compound,desc in allFlags if not compound])
|
||||||
|
print >>f, " 'All' : %s," % (all, )
|
||||||
|
for flag, compound, desc in allFlags:
|
||||||
|
if compound:
|
||||||
|
print >>f, " '%s' : %s," % (flag, compound)
|
||||||
|
print >>f, " }"
|
||||||
|
print >>f
|
||||||
|
|
||||||
|
print >>f, 'flagDescriptions = {'
|
||||||
|
print >>f, " 'All' : 'All flags',"
|
||||||
|
for flag, compound, desc in allFlags:
|
||||||
|
print >>f, " '%s' : '%s'," % (flag, desc)
|
||||||
|
print >>f, " }"
|
||||||
|
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
def traceFlagsCC(self, target, source, env):
|
||||||
|
assert(len(target) == 1)
|
||||||
|
|
||||||
|
f = file(str(target[0]), 'w')
|
||||||
|
|
||||||
|
allFlags = []
|
||||||
|
for s in source:
|
||||||
|
val = eval(s.get_contents())
|
||||||
|
allFlags.append(val)
|
||||||
|
|
||||||
|
# file header
|
||||||
|
print >>f, '''
|
||||||
|
/*
|
||||||
|
* DO NOT EDIT THIS FILE! Automatically generated
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "base/traceflags.hh"
|
||||||
|
|
||||||
|
using namespace Trace;
|
||||||
|
|
||||||
|
const char *Trace::flagStrings[] =
|
||||||
|
{'''
|
||||||
|
|
||||||
|
# The string array is used by SimpleEnumParam to map the strings
|
||||||
|
# provided by the user to enum values.
|
||||||
|
for flag, compound, desc in allFlags:
|
||||||
|
if not compound:
|
||||||
|
print >>f, ' "%s",' % flag
|
||||||
|
|
||||||
|
print >>f, ' "All",'
|
||||||
|
for flag, compound, desc in allFlags:
|
||||||
|
if compound:
|
||||||
|
print >>f, ' "%s",' % flag
|
||||||
|
|
||||||
|
print >>f, '};'
|
||||||
|
print >>f
|
||||||
|
print >>f, 'const int Trace::numFlagStrings = %d;' % len(allFlags)
|
||||||
|
print >>f
|
||||||
|
|
||||||
|
#
|
||||||
|
# Now define the individual compound flag arrays. There is an array
|
||||||
|
# for each compound flag listing the component base flags.
|
||||||
|
#
|
||||||
|
all = tuple([flag for flag,compound,desc in allFlags if not compound])
|
||||||
|
print >>f, 'static const Flags AllMap[] = {'
|
||||||
|
for flag, compound, desc in allFlags:
|
||||||
|
if not compound:
|
||||||
|
print >>f, " %s," % flag
|
||||||
|
print >>f, '};'
|
||||||
|
print >>f
|
||||||
|
|
||||||
|
for flag, compound, desc in allFlags:
|
||||||
|
if not compound:
|
||||||
|
continue
|
||||||
|
print >>f, 'static const Flags %sMap[] = {' % flag
|
||||||
|
for flag in compound:
|
||||||
|
print >>f, " %s," % flag
|
||||||
|
print >>f, " (Flags)-1"
|
||||||
|
print >>f, '};'
|
||||||
|
print >>f
|
||||||
|
|
||||||
|
#
|
||||||
|
# Finally the compoundFlags[] array maps the compound flags
|
||||||
|
# to their individual arrays/
|
||||||
|
#
|
||||||
|
print >>f, 'const Flags *Trace::compoundFlags[] ='
|
||||||
|
print >>f, '{'
|
||||||
|
print >>f, ' AllMap,'
|
||||||
|
for flag, compound, desc in allFlags:
|
||||||
|
if compound:
|
||||||
|
print >>f, ' %sMap,' % flag
|
||||||
|
# file trailer
|
||||||
|
print >>f, '};'
|
||||||
|
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
def traceFlagsHH(self, target, source, env):
|
||||||
|
assert(len(target) == 1)
|
||||||
|
|
||||||
|
f = file(str(target[0]), 'w')
|
||||||
|
|
||||||
|
allFlags = []
|
||||||
|
for s in source:
|
||||||
|
val = eval(s.get_contents())
|
||||||
|
allFlags.append(val)
|
||||||
|
|
||||||
|
# file header boilerplate
|
||||||
|
print >>f, '''
|
||||||
|
/*
|
||||||
|
* DO NOT EDIT THIS FILE!
|
||||||
|
*
|
||||||
|
* Automatically generated from traceflags.py
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __BASE_TRACE_FLAGS_HH__
|
||||||
|
#define __BASE_TRACE_FLAGS_HH__
|
||||||
|
|
||||||
|
namespace Trace {
|
||||||
|
|
||||||
|
enum Flags {'''
|
||||||
|
|
||||||
|
# Generate the enum. Base flags come first, then compound flags.
|
||||||
|
idx = 0
|
||||||
|
for flag, compound, desc in allFlags:
|
||||||
|
if not compound:
|
||||||
|
print >>f, ' %s = %d,' % (flag, idx)
|
||||||
|
idx += 1
|
||||||
|
|
||||||
|
numBaseFlags = idx
|
||||||
|
print >>f, ' NumFlags = %d,' % idx
|
||||||
|
|
||||||
|
# put a comment in here to separate base from compound flags
|
||||||
|
print >>f, '''
|
||||||
|
// The remaining enum values are *not* valid indices for Trace::flags.
|
||||||
|
// They are "compound" flags, which correspond to sets of base
|
||||||
|
// flags, and are used by changeFlag.'''
|
||||||
|
|
||||||
|
print >>f, ' All = %d,' % idx
|
||||||
|
idx += 1
|
||||||
|
for flag, compound, desc in allFlags:
|
||||||
|
if compound:
|
||||||
|
print >>f, ' %s = %d,' % (flag, idx)
|
||||||
|
idx += 1
|
||||||
|
|
||||||
|
numCompoundFlags = idx - numBaseFlags
|
||||||
|
print >>f, ' NumCompoundFlags = %d' % numCompoundFlags
|
||||||
|
|
||||||
|
# trailer boilerplate
|
||||||
|
print >>f, '''\
|
||||||
|
}; // enum Flags
|
||||||
|
|
||||||
|
// Array of strings for SimpleEnumParam
|
||||||
|
extern const char *flagStrings[];
|
||||||
|
extern const int numFlagStrings;
|
||||||
|
|
||||||
|
// Array of arraay pointers: for each compound flag, gives the list of
|
||||||
|
// base flags to set. Inidividual flag arrays are terminated by -1.
|
||||||
|
extern const Flags *compoundFlags[];
|
||||||
|
|
||||||
|
/* namespace Trace */ }
|
||||||
|
|
||||||
|
#endif // __BASE_TRACE_FLAGS_HH__
|
||||||
|
'''
|
||||||
|
|
||||||
|
f.close()
|
||||||
|
|
|
@ -58,3 +58,18 @@ else:
|
||||||
|
|
||||||
Source('process.cc')
|
Source('process.cc')
|
||||||
Source('syscall_emul.cc')
|
Source('syscall_emul.cc')
|
||||||
|
|
||||||
|
TraceFlag('Config')
|
||||||
|
TraceFlag('Event')
|
||||||
|
TraceFlag('Fault')
|
||||||
|
TraceFlag('Flow')
|
||||||
|
TraceFlag('IPI')
|
||||||
|
TraceFlag('IPR')
|
||||||
|
TraceFlag('Interrupt')
|
||||||
|
TraceFlag('Loader')
|
||||||
|
TraceFlag('Stack')
|
||||||
|
TraceFlag('SyscallVerbose')
|
||||||
|
TraceFlag('TLB')
|
||||||
|
TraceFlag('Thread')
|
||||||
|
TraceFlag('Timer')
|
||||||
|
TraceFlag('VtoPhys')
|
||||||
|
|
Loading…
Reference in a new issue