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