trace: [tcg] Define TCG tracing helper routine wrappers
Generates header "trace/generated-helpers-wrappers.h" with definitions for TCG
helper wrappers.
These wrappers ('gen_helper_trace_${event}_exec_wrapper') transform mixed native
and TCG argument types to TCG types and call the actual TCG helpers
('gen_helper_trace_${event}_exec_proxy').
Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
			
			
This commit is contained in:
		
							parent
							
								
									341ea69185
								
							
						
					
					
						commit
						f4654226d4
					
				| 
						 | 
				
			
			@ -11,6 +11,7 @@
 | 
			
		|||
/trace/generated-tracers.dtrace
 | 
			
		||||
/trace/generated-events.h
 | 
			
		||||
/trace/generated-events.c
 | 
			
		||||
/trace/generated-helpers-wrappers.h
 | 
			
		||||
/trace/generated-helpers.h
 | 
			
		||||
/trace/generated-helpers.c
 | 
			
		||||
/trace/generated-ust-provider.h
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										1
									
								
								Makefile
								
								
								
								
							| 
						 | 
				
			
			@ -57,6 +57,7 @@ GENERATED_HEADERS += trace/generated-tracers-dtrace.h
 | 
			
		|||
endif
 | 
			
		||||
GENERATED_SOURCES += trace/generated-tracers.c
 | 
			
		||||
 | 
			
		||||
GENERATED_HEADERS += trace/generated-helpers-wrappers.h
 | 
			
		||||
GENERATED_HEADERS += trace/generated-helpers.h
 | 
			
		||||
GENERATED_SOURCES += trace/generated-helpers.c
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,70 @@
 | 
			
		|||
#!/usr/bin/env python
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
Generate trace/generated-helpers-wrappers.h.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
__author__     = "Lluís Vilanova <vilanova@ac.upc.edu>"
 | 
			
		||||
__copyright__  = "Copyright 2012-2014, Lluís Vilanova <vilanova@ac.upc.edu>"
 | 
			
		||||
__license__    = "GPL version 2 or (at your option) any later version"
 | 
			
		||||
 | 
			
		||||
__maintainer__ = "Stefan Hajnoczi"
 | 
			
		||||
__email__      = "stefanha@linux.vnet.ibm.com"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
from tracetool import out
 | 
			
		||||
from tracetool.transform import *
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def generate(events, backend):
 | 
			
		||||
    events = [e for e in events
 | 
			
		||||
              if "disable" not in e.properties]
 | 
			
		||||
 | 
			
		||||
    out('/* This file is autogenerated by tracetool, do not edit. */',
 | 
			
		||||
        '',
 | 
			
		||||
        '#define tcg_temp_new_nop(v) (v)',
 | 
			
		||||
        '#define tcg_temp_free_nop(v)',
 | 
			
		||||
        '',
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    for e in events:
 | 
			
		||||
        if "tcg-exec" not in e.properties:
 | 
			
		||||
            continue
 | 
			
		||||
 | 
			
		||||
        # tracetool.generate always transforms types to host
 | 
			
		||||
        e_args = e.original.args
 | 
			
		||||
 | 
			
		||||
        # mixed-type to TCG helper bridge
 | 
			
		||||
        args_tcg_compat = e_args.transform(HOST_2_TCG_COMPAT)
 | 
			
		||||
 | 
			
		||||
        code_new = [
 | 
			
		||||
            "%(tcg_type)s __%(name)s = %(tcg_func)s(%(name)s);" %
 | 
			
		||||
            {"tcg_type": transform_type(type_, HOST_2_TCG),
 | 
			
		||||
             "tcg_func": transform_type(type_, HOST_2_TCG_TMP_NEW),
 | 
			
		||||
             "name": name}
 | 
			
		||||
            for (type_, name) in args_tcg_compat
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
        code_free = [
 | 
			
		||||
            "%(tcg_func)s(__%(name)s);" %
 | 
			
		||||
            {"tcg_func": transform_type(type_, HOST_2_TCG_TMP_FREE),
 | 
			
		||||
             "name": name}
 | 
			
		||||
            for (type_, name) in args_tcg_compat
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
        gen_name = "gen_helper_" + e.api()
 | 
			
		||||
 | 
			
		||||
        out('static inline void %(name)s(%(args)s)',
 | 
			
		||||
            '{',
 | 
			
		||||
            '    %(code_new)s',
 | 
			
		||||
            '    %(proxy_name)s(%(tmp_names)s);',
 | 
			
		||||
            '    %(code_free)s',
 | 
			
		||||
            '}',
 | 
			
		||||
            name=gen_name,
 | 
			
		||||
            args=e_args,
 | 
			
		||||
            proxy_name=gen_name + "_proxy",
 | 
			
		||||
            code_new="\n    ".join(code_new),
 | 
			
		||||
            code_free="\n    ".join(code_free),
 | 
			
		||||
            tmp_names=", ".join(["__%s" % name for _, name in e_args]),
 | 
			
		||||
            )
 | 
			
		||||
| 
						 | 
				
			
			@ -99,6 +99,14 @@ endif
 | 
			
		|||
##################################################
 | 
			
		||||
# Translation level
 | 
			
		||||
 | 
			
		||||
$(obj)/generated-helpers-wrappers.h: $(obj)/generated-helpers-wrappers.h-timestamp
 | 
			
		||||
$(obj)/generated-helpers-wrappers.h-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak
 | 
			
		||||
	$(call quiet-command,$(TRACETOOL) \
 | 
			
		||||
		--format=tcg-helper-wrapper-h \
 | 
			
		||||
		--backend=$(TRACE_BACKENDS) \
 | 
			
		||||
		< $< > $@,"  GEN   $(patsubst %-timestamp,%,$@)")
 | 
			
		||||
	@cmp -s $@ $(patsubst %-timestamp,%,$@) || cp $@ $(patsubst %-timestamp,%,$@)
 | 
			
		||||
 | 
			
		||||
$(obj)/generated-helpers.h: $(obj)/generated-helpers.h-timestamp
 | 
			
		||||
$(obj)/generated-helpers.h-timestamp: $(SRC_PATH)/trace-events $(BUILD_DIR)/config-host.mak
 | 
			
		||||
	$(call quiet-command,$(TRACETOOL) \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue