| 
									
										
										
										
											2012-04-03 20:47:50 +02:00
										 |  |  | # -*- coding: utf-8 -*- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | """
 | 
					
						
							| 
									
										
										
										
											2014-02-23 20:37:30 +01:00
										 |  |  | trace/generated-tracers.h | 
					
						
							| 
									
										
										
										
											2012-04-03 20:47:50 +02:00
										 |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | __author__     = "Lluís Vilanova <vilanova@ac.upc.edu>" | 
					
						
							| 
									
										
										
										
											2017-07-04 10:46:39 +02:00
										 |  |  | __copyright__  = "Copyright 2012-2017, Lluís Vilanova <vilanova@ac.upc.edu>" | 
					
						
							| 
									
										
										
										
											2012-04-03 20:47:50 +02:00
										 |  |  | __license__    = "GPL version 2 or (at your option) any later version" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | __maintainer__ = "Stefan Hajnoczi" | 
					
						
							| 
									
										
										
										
											2020-05-11 10:28:16 +02:00
										 |  |  | __email__      = "stefanha@redhat.com" | 
					
						
							| 
									
										
										
										
											2012-04-03 20:47:50 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from tracetool import out | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-04 14:35:59 +01:00
										 |  |  | def generate(events, backend, group): | 
					
						
							| 
									
										
										
										
											2023-05-26 17:53:58 +01:00
										 |  |  |     header = "trace/control.h" | 
					
						
							| 
									
										
										
										
											2019-08-12 07:23:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-03 20:47:50 +02:00
										 |  |  |     out('/* This file is autogenerated by tracetool, do not edit. */', | 
					
						
							|  |  |  |         '', | 
					
						
							| 
									
										
										
										
											2016-10-04 14:35:59 +01:00
										 |  |  |         '#ifndef TRACE_%s_GENERATED_TRACERS_H' % group.upper(), | 
					
						
							|  |  |  |         '#define TRACE_%s_GENERATED_TRACERS_H' % group.upper(), | 
					
						
							| 
									
										
										
										
											2012-04-03 20:47:50 +02:00
										 |  |  |         '', | 
					
						
							| 
									
										
										
										
											2019-08-12 07:23:37 +02:00
										 |  |  |         '#include "%s"' % header, | 
					
						
							| 
									
										
										
										
											2014-02-23 20:37:40 +01:00
										 |  |  |         '') | 
					
						
							| 
									
										
										
										
											2012-04-03 20:47:50 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-04 14:35:55 +01:00
										 |  |  |     for e in events: | 
					
						
							|  |  |  |         out('extern TraceEvent %(event)s;', | 
					
						
							|  |  |  |             event = e.api(e.QEMU_EVENT)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for e in events: | 
					
						
							|  |  |  |         out('extern uint16_t %s;' % e.api(e.QEMU_DSTATE)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # static state | 
					
						
							|  |  |  |     for e in events: | 
					
						
							|  |  |  |         if 'disable' in e.properties: | 
					
						
							|  |  |  |             enabled = 0 | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             enabled = 1 | 
					
						
							|  |  |  |         if "tcg-exec" in e.properties: | 
					
						
							|  |  |  |             # a single define for the two "sub-events" | 
					
						
							|  |  |  |             out('#define TRACE_%(name)s_ENABLED %(enabled)d', | 
					
						
							|  |  |  |                 name=e.original.name.upper(), | 
					
						
							|  |  |  |                 enabled=enabled) | 
					
						
							|  |  |  |         out('#define TRACE_%s_ENABLED %d' % (e.name.upper(), enabled)) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-04 14:35:59 +01:00
										 |  |  |     backend.generate_begin(events, group) | 
					
						
							| 
									
										
										
										
											2012-04-03 20:47:50 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     for e in events: | 
					
						
							| 
									
										
										
										
											2017-07-31 15:07:17 +01:00
										 |  |  |         # tracer-specific dstate | 
					
						
							|  |  |  |         out('', | 
					
						
							|  |  |  |             '#define %(api)s() ( \\', | 
					
						
							|  |  |  |             api=e.api(e.QEMU_BACKEND_DSTATE)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if "disable" not in e.properties: | 
					
						
							|  |  |  |             backend.generate_backend_dstate(e, group) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         out('    false)') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-04 10:46:39 +02:00
										 |  |  |         # tracer without checks | 
					
						
							|  |  |  |         out('', | 
					
						
							|  |  |  |             'static inline void %(api)s(%(args)s)', | 
					
						
							|  |  |  |             '{', | 
					
						
							|  |  |  |             api=e.api(e.QEMU_TRACE_NOCHECK), | 
					
						
							|  |  |  |             args=e.args) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if "disable" not in e.properties: | 
					
						
							|  |  |  |             backend.generate(e, group) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         out('}') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-26 17:53:53 +01:00
										 |  |  |         cond = "true" | 
					
						
							| 
									
										
										
										
											2016-07-11 12:53:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-03 20:47:50 +02:00
										 |  |  |         out('', | 
					
						
							| 
									
										
										
										
											2014-02-23 20:37:02 +01:00
										 |  |  |             'static inline void %(api)s(%(args)s)', | 
					
						
							| 
									
										
										
										
											2012-04-03 20:47:50 +02:00
										 |  |  |             '{', | 
					
						
							| 
									
										
										
										
											2016-07-11 12:53:46 +02:00
										 |  |  |             '    if (%(cond)s) {', | 
					
						
							| 
									
										
										
										
											2017-07-04 10:46:39 +02:00
										 |  |  |             '        %(api_nocheck)s(%(names)s);', | 
					
						
							|  |  |  |             '    }', | 
					
						
							|  |  |  |             '}', | 
					
						
							| 
									
										
										
										
											2014-02-23 20:37:40 +01:00
										 |  |  |             api=e.api(), | 
					
						
							| 
									
										
										
										
											2017-07-04 10:46:39 +02:00
										 |  |  |             api_nocheck=e.api(e.QEMU_TRACE_NOCHECK), | 
					
						
							| 
									
										
										
										
											2016-07-11 12:53:46 +02:00
										 |  |  |             args=e.args, | 
					
						
							| 
									
										
										
										
											2017-07-04 10:46:39 +02:00
										 |  |  |             names=", ".join(e.args.names()), | 
					
						
							| 
									
										
										
										
											2016-07-11 12:53:46 +02:00
										 |  |  |             cond=cond) | 
					
						
							| 
									
										
										
										
											2014-02-23 20:37:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-04 14:35:59 +01:00
										 |  |  |     backend.generate_end(events, group) | 
					
						
							| 
									
										
										
										
											2014-02-23 20:37:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-04 14:35:59 +01:00
										 |  |  |     out('#endif /* TRACE_%s_GENERATED_TRACERS_H */' % group.upper()) |