Hand merge
[gem5.git] / base / traceflags.py
1 #!/usr/bin/env python
2
3 # Copyright (c) 2004 The Regents of The University of Michigan
4 # All rights reserved.
5 #
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions are
8 # met: redistributions of source code must retain the above copyright
9 # notice, this list of conditions and the following disclaimer;
10 # redistributions in binary form must reproduce the above copyright
11 # notice, this list of conditions and the following disclaimer in the
12 # documentation and/or other materials provided with the distribution;
13 # neither the name of the copyright holders nor the names of its
14 # contributors may be used to endorse or promote products derived from
15 # this software without specific prior written permission.
16 #
17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
29 #
30 # This file generates the header and source files for the flags
31 # that control the tracing facility.
32 #
33
34 import sys
35
36 if len(sys.argv) != 2:
37 print "%s: Need argument (basename of cc/hh files)" % sys.argv[0]
38 sys.exit(1)
39
40 hhfilename = sys.argv[1] + '.hh'
41 ccfilename = sys.argv[1] + '.cc'
42
43 #
44 # The list of trace flags that can be used to condition DPRINTFs etc.
45 # To define a new flag, simply add it to this list.
46 #
47 baseFlags = [
48 'TCPIP',
49 'Bus',
50 'ScsiDisk',
51 'ScsiCtrl',
52 'ScsiNone',
53 'DMA',
54 'DMAReadVerbose',
55 'DMAWriteVerbose',
56 'TLB',
57 'SimpleDisk',
58 'SimpleDiskData',
59 'Clock',
60 'Regs',
61 'MC146818',
62 'IPI',
63 'Timer',
64 'Mbox',
65 'PCIA',
66 'PCIDEV',
67 'PciConfigAll',
68 'ISP',
69 'BADADDR',
70 'Console',
71 'ConsolePoll',
72 'ConsoleVerbose',
73 'AlphaConsole',
74 'Flow',
75 'Interrupt',
76 'Fault',
77 'Cycle',
78 'Loader',
79 'MMU',
80 'Ethernet',
81 'EthernetPIO',
82 'EthernetDMA',
83 'EthernetData',
84 'EthernetDesc',
85 'EthernetIntr',
86 'EthernetSM',
87 'EthernetCksum',
88 'GDBMisc',
89 'GDBAcc',
90 'GDBRead',
91 'GDBWrite',
92 'GDBSend',
93 'GDBRecv',
94 'GDBExtra',
95 'VtoPhys',
96 'Printf',
97 'DebugPrintf',
98 'Serialize',
99 'Event',
100 'PCEvent',
101 'SyscallWarnings',
102 'SyscallVerbose',
103 'DiskImage',
104 'DiskImageRead',
105 'DiskImageWrite',
106 'InstExec',
107 'BPredRAS',
108 'Cache',
109 'IIC',
110 'IICMore',
111 'MSHR',
112 'Chains',
113 'Dispatch',
114 'Stats',
115 'StatEvents',
116 'Context',
117 'Config',
118 'Sampler',
119 'WriteBarrier',
120 'IdeCtrl',
121 'IdeDisk',
122 'Tsunami',
123 'Uart',
124 'Split',
125 'SQL',
126 'Thread',
127 'Fetch',
128 'Decode',
129 'Rename',
130 'IEW',
131 'Commit',
132 'IQ',
133 'ROB',
134 'FreeList',
135 'RenameMap',
136 'LDSTQ',
137 'StoreSet',
138 'MemDepUnit',
139 'DynInst',
140 'FullCPU',
141 'CommitRate'
142 ]
143
144 #
145 # "Compound" flags correspond to a set of base flags. These exist
146 # solely for convenience in setting them via the command line: if a
147 # compound flag is specified, all of the corresponding base flags are
148 # set. Compound flags cannot be used directly in DPRINTFs etc.
149 # To define a new compound flag, add a new entry to this hash
150 # following the existing examples.
151 #
152 compoundFlagMap = {
153 'GDBAll' : [ 'GDBMisc', 'GDBAcc', 'GDBRead', 'GDBWrite', 'GDBSend', 'GDBRecv', 'GDBExtra' ],
154 'ScsiAll' : [ 'ScsiDisk', 'ScsiCtrl', 'ScsiNone' ],
155 'DiskImageAll' : [ 'DiskImage', 'DiskImageRead', 'DiskImageWrite' ],
156 'EthernetAll' : [ 'Ethernet', 'EthernetPIO', 'EthernetDMA', 'EthernetData' , 'EthernetDesc', 'EthernetIntr', 'EthernetSM', 'EthernetCksum' ],
157 'EthernetNoData' : [ 'Ethernet', 'EthernetPIO', 'EthernetDesc', 'EthernetIntr', 'EthernetSM', 'EthernetCksum' ],
158 'IdeAll' : [ 'IdeCtrl', 'IdeDisk' ],
159 'FullCPUAll' : [ 'Fetch', 'Decode', 'Rename', 'IEW', 'Commit', 'IQ', 'ROB', 'FreeList', 'RenameMap', 'LDSTQ', 'StoreSet', 'MemDepUnit', 'DynInst', 'FullCPU']
160 }
161
162 #############################################################
163 #
164 # Everything below this point generates the appropriate C++
165 # declarations and definitions for the trace flags. If you are simply
166 # adding or modifying flag definitions, you should not have to change
167 # anything below.
168 #
169
170 import sys
171
172 # extract just the compound flag names into a list
173 compoundFlags = []
174 compoundFlags.extend(compoundFlagMap.keys())
175 compoundFlags.sort()
176
177 #
178 # First generate the header file. This defines the Flag enum
179 # and some extern declarations for the .cc file.
180 #
181 try:
182 hhfile = file(hhfilename, 'w')
183 except IOError, e:
184 sys.exit("can't open %s: %s" % (hhfilename, e))
185
186 # file header boilerplate
187 print >>hhfile, '''/* $Id $ */
188
189 /*
190 * Copyright (c) 2004
191 * The Regents of The University of Michigan
192 * All Rights Reserved
193 *
194 * This code is part of the M5 simulator, developed by Nathan Binkert,
195 * Erik Hallnor, Steve Raasch, and Steve Reinhardt, with contributions
196 * from Ron Dreslinski, Dave Greene, and Lisa Hsu.
197 *
198 * Permission is granted to use, copy, create derivative works and
199 * redistribute this software and such derivative works for any
200 * purpose, so long as the copyright notice above, this grant of
201 * permission, and the disclaimer below appear in all copies made; and
202 * so long as the name of The University of Michigan is not used in
203 * any advertising or publicity pertaining to the use or distribution
204 * of this software without specific, written prior authorization.
205 *
206 * THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE
207 * UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY PURPOSE, AND
208 * WITHOUT WARRANTY BY THE UNIVERSITY OF MICHIGAN OF ANY KIND, EITHER
209 * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
210 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
211 * PURPOSE. THE REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE
212 * LIABLE FOR ANY DAMAGES, INCLUDING DIRECT, SPECIAL, INDIRECT,
213 * INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM
214 * ARISING OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN
215 * IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF SUCH
216 * DAMAGES.
217 */
218
219 /*
220 * DO NOT EDIT THIS FILE!
221 *
222 * Automatically generated from traceflags.py
223 */
224
225 #ifndef __BASE_TRACE_FLAGS_HH__
226 #define __BASE_TRACE_FLAGS_HH__
227
228 namespace Trace {
229
230 enum Flags {
231 ''',
232
233 # Generate the enum. Base flags come first, then compound flags.
234 idx = 0
235 for flag in baseFlags:
236 print >>hhfile, ' %s = %d,' % (flag, idx)
237 idx += 1
238
239 numBaseFlags = idx
240 print >>hhfile, ' NumFlags = %d,' % idx
241
242 # put a comment in here to separate base from compound flags
243 print >>hhfile, '''
244 // The remaining enum values are *not* valid indices for Trace::flags.
245 // They are "compound" flags, which correspond to sets of base
246 // flags, and are used only by TraceParamContext::setFlags().
247 ''',
248
249 for flag in compoundFlags:
250 print >>hhfile, ' %s = %d,' % (flag, idx)
251 idx += 1
252
253 numCompoundFlags = idx - numBaseFlags
254 print >>hhfile, ' NumCompoundFlags = %d' % numCompoundFlags
255
256 # trailer boilerplate
257 print >>hhfile, '''\
258 }; // enum Flags
259
260 // Array of strings for SimpleEnumParam
261 extern const char *flagStrings[];
262 extern const int numFlagStrings;
263
264 // Array of arraay pointers: for each compound flag, gives the list of
265 // base flags to set. Inidividual flag arrays are terminated by -1.
266 extern const Flags *compoundFlags[];
267
268 /* namespace Trace */ }
269
270 #endif // __BASE_TRACE_FLAGS_HH__
271 ''',
272
273 hhfile.close()
274
275 #
276 #
277 # Print out .cc file with array definitions.
278 #
279 #
280 try:
281 ccfile = file(ccfilename, 'w')
282 except OSError, e:
283 sys.exit("can't open %s: %s" % (ccfilename, e))
284
285 # file header
286 print >>ccfile, '''\
287 /* $Id $ */
288
289 /*
290 * Copyright (c) 2004
291 * The Regents of The University of Michigan
292 * All Rights Reserved
293 *
294 * This code is part of the M5 simulator, developed by Nathan Binkert,
295 * Erik Hallnor, Steve Raasch, and Steve Reinhardt, with contributions
296 * from Ron Dreslinski, Dave Greene, and Lisa Hsu.
297 *
298 * Permission is granted to use, copy, create derivative works and
299 * redistribute this software and such derivative works for any
300 * purpose, so long as the copyright notice above, this grant of
301 * permission, and the disclaimer below appear in all copies made; and
302 * so long as the name of The University of Michigan is not used in
303 * any advertising or publicity pertaining to the use or distribution
304 * of this software without specific, written prior authorization.
305 *
306 * THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE
307 * UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY PURPOSE, AND
308 * WITHOUT WARRANTY BY THE UNIVERSITY OF MICHIGAN OF ANY KIND, EITHER
309 * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
310 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
311 * PURPOSE. THE REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE
312 * LIABLE FOR ANY DAMAGES, INCLUDING DIRECT, SPECIAL, INDIRECT,
313 * INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM
314 * ARISING OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN
315 * IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF SUCH
316 * DAMAGES.
317 */
318
319 /*
320 * DO NOT EDIT THIS FILE!
321 *
322 * Automatically generated from traceflags.pl.
323 */
324
325 #include "base/traceflags.hh"
326
327 using namespace Trace;
328
329 const char *Trace::flagStrings[] =
330 {
331 ''',
332
333 # The string array is used by SimpleEnumParam to map the strings
334 # provided by the user to enum values.
335 for flag in baseFlags:
336 print >>ccfile, ' "%s",' % flag
337
338 for flag in compoundFlags:
339 print >>ccfile, ' "%s",' % flag
340
341 print >>ccfile, '};\n'
342
343 numFlagStrings = len(baseFlags) + len(compoundFlags);
344
345 print >>ccfile, 'const int Trace::numFlagStrings = %d;' % numFlagStrings
346 print >>ccfile
347
348 #
349 # Now define the individual compound flag arrays. There is an array
350 # for each compound flag listing the component base flags.
351 #
352
353 for flag in compoundFlags:
354 flags = compoundFlagMap[flag]
355 flags.append('(Flags)-1')
356 print >>ccfile, 'static const Flags %sMap[] =' % flag
357 print >>ccfile, '{ %s };' % (', '.join(flags))
358 print >>ccfile
359
360 #
361 # Finally the compoundFlags[] array maps the compound flags
362 # to their individual arrays/
363 #
364 print >>ccfile, 'const Flags *Trace::compoundFlags[] ='
365 print >>ccfile, '{'
366
367 for flag in compoundFlags:
368 print >>ccfile, ' %sMap,' % flag
369
370 # file trailer
371 print >>ccfile, '};'
372
373 ccfile.close()
374