| 
									
										
										
										
											2012-04-03 20:48:12 +02:00
										 |  |  | #!/usr/bin/env python | 
					
						
							|  |  |  | # -*- coding: utf-8 -*- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | DTrace/SystemTAP backend. | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | __author__     = "Lluís Vilanova <vilanova@ac.upc.edu>" | 
					
						
							| 
									
										
										
										
											2017-07-04 10:50:46 +02:00
										 |  |  | __copyright__  = "Copyright 2012-2017, Lluís Vilanova <vilanova@ac.upc.edu>" | 
					
						
							| 
									
										
										
										
											2012-04-03 20:48:12 +02:00
										 |  |  | __license__    = "GPL version 2 or (at your option) any later version" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | __maintainer__ = "Stefan Hajnoczi" | 
					
						
							|  |  |  | __email__      = "stefanha@linux.vnet.ibm.com" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from tracetool import out | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-05 14:47:26 +01:00
										 |  |  | PUBLIC = True | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-03 20:48:12 +02:00
										 |  |  | PROBEPREFIX = None | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-23 20:37:40 +01:00
										 |  |  | def probeprefix(): | 
					
						
							| 
									
										
										
										
											2012-04-03 20:48:12 +02:00
										 |  |  |     if PROBEPREFIX is None: | 
					
						
							|  |  |  |         raise ValueError("you must set PROBEPREFIX") | 
					
						
							|  |  |  |     return PROBEPREFIX | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | BINARY = None | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-23 20:37:40 +01:00
										 |  |  | def binary(): | 
					
						
							| 
									
										
										
										
											2012-04-03 20:48:12 +02:00
										 |  |  |     if BINARY is None: | 
					
						
							|  |  |  |         raise ValueError("you must set BINARY") | 
					
						
							|  |  |  |     return BINARY | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-04 14:35:59 +01:00
										 |  |  | def generate_h_begin(events, group): | 
					
						
							| 
									
										
										
										
											2017-01-25 16:14:15 +00:00
										 |  |  |     if group == "root": | 
					
						
							|  |  |  |         header = "trace-dtrace-root.h" | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         header = "trace-dtrace.h" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     out('#include "%s"' % header, | 
					
						
							| 
									
										
										
										
											2012-04-03 20:48:12 +02:00
										 |  |  |         '') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-31 15:07:17 +01:00
										 |  |  |     # SystemTap defines <provider>_<name>_ENABLED() but other DTrace | 
					
						
							|  |  |  |     # implementations might not. | 
					
						
							|  |  |  |     for e in events: | 
					
						
							|  |  |  |         out('#ifndef QEMU_%(uppername)s_ENABLED', | 
					
						
							|  |  |  |             '#define QEMU_%(uppername)s_ENABLED() true', | 
					
						
							|  |  |  |             '#endif', | 
					
						
							|  |  |  |             uppername=e.name.upper()) | 
					
						
							| 
									
										
										
										
											2014-02-23 20:37:40 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-04 14:35:59 +01:00
										 |  |  | def generate_h(event, group): | 
					
						
							| 
									
										
										
										
											2017-07-04 10:50:46 +02:00
										 |  |  |     out('    QEMU_%(uppername)s(%(argnames)s);', | 
					
						
							| 
									
										
										
										
											2014-02-23 20:37:40 +01:00
										 |  |  |         uppername=event.name.upper(), | 
					
						
							|  |  |  |         argnames=", ".join(event.args.names())) | 
					
						
							| 
									
										
										
										
											2017-07-31 15:07:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def generate_h_backend_dstate(event, group): | 
					
						
							|  |  |  |     out('    QEMU_%(uppername)s_ENABLED() || \\', | 
					
						
							|  |  |  |         uppername=event.name.upper()) |