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