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