Add support for dedicated 1GHz Simple CPU
[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 'Pipeline',
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 'HWPrefetch'
128 ]
129
130 #
131 # "Compound" flags correspond to a set of base flags. These exist
132 # solely for convenience in setting them via the command line: if a
133 # compound flag is specified, all of the corresponding base flags are
134 # set. Compound flags cannot be used directly in DPRINTFs etc.
135 # To define a new compound flag, add a new entry to this hash
136 # following the existing examples.
137 #
138 compoundFlagMap = {
139 'GDBAll' : [ 'GDBMisc', 'GDBAcc', 'GDBRead', 'GDBWrite', 'GDBSend', 'GDBRecv', 'GDBExtra' ],
140 'ScsiAll' : [ 'ScsiDisk', 'ScsiCtrl', 'ScsiNone' ],
141 'DiskImageAll' : [ 'DiskImage', 'DiskImageRead', 'DiskImageWrite' ],
142 'EthernetAll' : [ 'Ethernet', 'EthernetPIO', 'EthernetDMA', 'EthernetData' , 'EthernetDesc', 'EthernetIntr', 'EthernetSM', 'EthernetCksum' ],
143 'EthernetNoData' : [ 'Ethernet', 'EthernetPIO', 'EthernetDesc', 'EthernetIntr', 'EthernetSM', 'EthernetCksum' ],
144 'IdeAll' : [ 'IdeCtrl', 'IdeDisk' ]
145 }
146
147 #############################################################
148 #
149 # Everything below this point generates the appropriate C++
150 # declarations and definitions for the trace flags. If you are simply
151 # adding or modifying flag definitions, you should not have to change
152 # anything below.
153 #
154
155 import sys
156
157 # extract just the compound flag names into a list
158 compoundFlags = []
159 compoundFlags.extend(compoundFlagMap.keys())
160 compoundFlags.sort()
161
162 #
163 # First generate the header file. This defines the Flag enum
164 # and some extern declarations for the .cc file.
165 #
166 try:
167 hhfile = file(hhfilename, 'w')
168 except IOError, e:
169 sys.exit("can't open %s: %s" % (hhfilename, e))
170
171 # file header boilerplate
172 print >>hhfile, '''/* $Id $ */
173
174 /*
175 * Copyright (c) 2004
176 * The Regents of The University of Michigan
177 * All Rights Reserved
178 *
179 * This code is part of the M5 simulator, developed by Nathan Binkert,
180 * Erik Hallnor, Steve Raasch, and Steve Reinhardt, with contributions
181 * from Ron Dreslinski, Dave Greene, and Lisa Hsu.
182 *
183 * Permission is granted to use, copy, create derivative works and
184 * redistribute this software and such derivative works for any
185 * purpose, so long as the copyright notice above, this grant of
186 * permission, and the disclaimer below appear in all copies made; and
187 * so long as the name of The University of Michigan is not used in
188 * any advertising or publicity pertaining to the use or distribution
189 * of this software without specific, written prior authorization.
190 *
191 * THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE
192 * UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY PURPOSE, AND
193 * WITHOUT WARRANTY BY THE UNIVERSITY OF MICHIGAN OF ANY KIND, EITHER
194 * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
195 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
196 * PURPOSE. THE REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE
197 * LIABLE FOR ANY DAMAGES, INCLUDING DIRECT, SPECIAL, INDIRECT,
198 * INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM
199 * ARISING OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN
200 * IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF SUCH
201 * DAMAGES.
202 */
203
204 /*
205 * DO NOT EDIT THIS FILE!
206 *
207 * Automatically generated from traceflags.py
208 */
209
210 #ifndef __BASE_TRACE_FLAGS_HH__
211 #define __BASE_TRACE_FLAGS_HH__
212
213 namespace Trace {
214
215 enum Flags {
216 ''',
217
218 # Generate the enum. Base flags come first, then compound flags.
219 idx = 0
220 for flag in baseFlags:
221 print >>hhfile, ' %s = %d,' % (flag, idx)
222 idx += 1
223
224 numBaseFlags = idx
225 print >>hhfile, ' NumFlags = %d,' % idx
226
227 # put a comment in here to separate base from compound flags
228 print >>hhfile, '''
229 // The remaining enum values are *not* valid indices for Trace::flags.
230 // They are "compound" flags, which correspond to sets of base
231 // flags, and are used only by TraceParamContext::setFlags().
232 ''',
233
234 for flag in compoundFlags:
235 print >>hhfile, ' %s = %d,' % (flag, idx)
236 idx += 1
237
238 numCompoundFlags = idx - numBaseFlags
239 print >>hhfile, ' NumCompoundFlags = %d' % numCompoundFlags
240
241 # trailer boilerplate
242 print >>hhfile, '''\
243 }; // enum Flags
244
245 // Array of strings for SimpleEnumParam
246 extern const char *flagStrings[];
247 extern const int numFlagStrings;
248
249 // Array of arraay pointers: for each compound flag, gives the list of
250 // base flags to set. Inidividual flag arrays are terminated by -1.
251 extern const Flags *compoundFlags[];
252
253 /* namespace Trace */ }
254
255 #endif // __BASE_TRACE_FLAGS_HH__
256 ''',
257
258 hhfile.close()
259
260 #
261 #
262 # Print out .cc file with array definitions.
263 #
264 #
265 try:
266 ccfile = file(ccfilename, 'w')
267 except OSError, e:
268 sys.exit("can't open %s: %s" % (ccfilename, e))
269
270 # file header
271 print >>ccfile, '''\
272 /* $Id $ */
273
274 /*
275 * Copyright (c) 2004
276 * The Regents of The University of Michigan
277 * All Rights Reserved
278 *
279 * This code is part of the M5 simulator, developed by Nathan Binkert,
280 * Erik Hallnor, Steve Raasch, and Steve Reinhardt, with contributions
281 * from Ron Dreslinski, Dave Greene, and Lisa Hsu.
282 *
283 * Permission is granted to use, copy, create derivative works and
284 * redistribute this software and such derivative works for any
285 * purpose, so long as the copyright notice above, this grant of
286 * permission, and the disclaimer below appear in all copies made; and
287 * so long as the name of The University of Michigan is not used in
288 * any advertising or publicity pertaining to the use or distribution
289 * of this software without specific, written prior authorization.
290 *
291 * THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE
292 * UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY PURPOSE, AND
293 * WITHOUT WARRANTY BY THE UNIVERSITY OF MICHIGAN OF ANY KIND, EITHER
294 * EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED
295 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
296 * PURPOSE. THE REGENTS OF THE UNIVERSITY OF MICHIGAN SHALL NOT BE
297 * LIABLE FOR ANY DAMAGES, INCLUDING DIRECT, SPECIAL, INDIRECT,
298 * INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WITH RESPECT TO ANY CLAIM
299 * ARISING OUT OF OR IN CONNECTION WITH THE USE OF THE SOFTWARE, EVEN
300 * IF IT HAS BEEN OR IS HEREAFTER ADVISED OF THE POSSIBILITY OF SUCH
301 * DAMAGES.
302 */
303
304 /*
305 * DO NOT EDIT THIS FILE!
306 *
307 * Automatically generated from traceflags.pl.
308 */
309
310 #include "base/traceflags.hh"
311
312 using namespace Trace;
313
314 const char *Trace::flagStrings[] =
315 {
316 ''',
317
318 # The string array is used by SimpleEnumParam to map the strings
319 # provided by the user to enum values.
320 for flag in baseFlags:
321 print >>ccfile, ' "%s",' % flag
322
323 for flag in compoundFlags:
324 print >>ccfile, ' "%s",' % flag
325
326 print >>ccfile, '};\n'
327
328 numFlagStrings = len(baseFlags) + len(compoundFlags);
329
330 print >>ccfile, 'const int Trace::numFlagStrings = %d;' % numFlagStrings
331 print >>ccfile
332
333 #
334 # Now define the individual compound flag arrays. There is an array
335 # for each compound flag listing the component base flags.
336 #
337
338 for flag in compoundFlags:
339 flags = compoundFlagMap[flag]
340 flags.append('(Flags)-1')
341 print >>ccfile, 'static const Flags %sMap[] =' % flag
342 print >>ccfile, '{ %s };' % (', '.join(flags))
343 print >>ccfile
344
345 #
346 # Finally the compoundFlags[] array maps the compound flags
347 # to their individual arrays/
348 #
349 print >>ccfile, 'const Flags *Trace::compoundFlags[] ='
350 print >>ccfile, '{'
351
352 for flag in compoundFlags:
353 print >>ccfile, ' %sMap,' % flag
354
355 # file trailer
356 print >>ccfile, '};'
357
358 ccfile.close()
359