mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-30 22:03:54 -06:00
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
4 changed files with 80 additions and 0 deletions
70
scripts/tracetool/format/tcg_helper_wrapper_h.py
Normal file
70
scripts/tracetool/format/tcg_helper_wrapper_h.py
Normal file
|
@ -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]),
|
||||
)
|
Loading…
Add table
Add a link
Reference in a new issue