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