From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41039) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bX91V-0006T9-9p for qemu-devel@nongnu.org; Tue, 09 Aug 2016 11:33:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bX91R-0005iO-6P for qemu-devel@nongnu.org; Tue, 09 Aug 2016 11:32:56 -0400 Received: from mx1.redhat.com ([209.132.183.28]:36812) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bX91Q-0005iH-Tw for qemu-devel@nongnu.org; Tue, 09 Aug 2016 11:32:53 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8912F3B72D for ; Tue, 9 Aug 2016 15:32:52 +0000 (UTC) From: "Daniel P. Berrange" Date: Tue, 9 Aug 2016 16:31:43 +0100 Message-Id: <1470756748-18933-16-git-send-email-berrange@redhat.com> In-Reply-To: <1470756748-18933-1-git-send-email-berrange@redhat.com> References: <1470756748-18933-1-git-send-email-berrange@redhat.com> Subject: [Qemu-devel] [PATCH for-2.8 v1 15/60] trace: introduce a formal group name for trace events List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi , "Daniel P. Berrange" The declarations in the generated-tracers.h file are assuming there's only ever going to be one instance of this header, as they are not namespaced. When we have one header per event group, if a single source file needs to include multiple sets of trace events, the symbols will all clash. This change thus introduces a '--group NAME' arg to the 'tracetool' program. This will cause all the symbols in the generated header files to be given a unique namespace. If no group is given, the group name 'common' is used, which is suitable for the current usage where there is only one global trace-events file used for code generation. Signed-off-by: Daniel P. Berrange --- hw/usb/hcd-ohci.c | 6 +++-- scripts/tracetool.py | 10 ++++++-- scripts/tracetool/__init__.py | 10 ++++++-- scripts/tracetool/backend/__init__.py | 12 ++++----- scripts/tracetool/backend/dtrace.py | 4 +-- scripts/tracetool/backend/ftrace.py | 7 +++--- scripts/tracetool/backend/log.py | 6 ++--- scripts/tracetool/backend/simple.py | 10 ++++---- scripts/tracetool/backend/ust.py | 4 +-- scripts/tracetool/format/__init__.py | 4 +-- scripts/tracetool/format/c.py | 23 +++++++++-------- scripts/tracetool/format/d.py | 2 +- scripts/tracetool/format/h.py | 32 ++++++++++++------------ scripts/tracetool/format/simpletrace_stap.py | 2 +- scripts/tracetool/format/stap.py | 2 +- scripts/tracetool/format/tcg_h.py | 2 +- scripts/tracetool/format/tcg_helper_c.py | 2 +- scripts/tracetool/format/tcg_helper_h.py | 2 +- scripts/tracetool/format/tcg_helper_wrapper_h.py | 2 +- scripts/tracetool/format/ust_events_c.py | 2 +- scripts/tracetool/format/ust_events_h.py | 8 +++--- 21 files changed, 85 insertions(+), 67 deletions(-) diff --git a/hw/usb/hcd-ohci.c b/hw/usb/hcd-ohci.c index 87508a7..43b5181 100644 --- a/hw/usb/hcd-ohci.c +++ b/hw/usb/hcd-ohci.c @@ -937,8 +937,10 @@ static int ohci_service_iso_td(OHCIState *ohci, struct ohci_ed *ed, #ifdef trace_event_get_state static void ohci_td_pkt(const char *msg, const uint8_t *buf, size_t len) { - bool print16 = !!trace_event_get_state(dstate, TRACE_USB_OHCI_TD_PKT_SHORT); - bool printall = !!trace_event_get_state(dstate, TRACE_USB_OHCI_TD_PKT_FULL); + bool print16 = !!trace_event_get_state(common_dstate, + TRACE_USB_OHCI_TD_PKT_SHORT); + bool printall = !!trace_event_get_state(common_dstate, + TRACE_USB_OHCI_TD_PKT_FULL); const int width = 16; int i; char tmp[3 * width + 1]; diff --git a/scripts/tracetool.py b/scripts/tracetool.py index 7b82959..1ce8799 100755 --- a/scripts/tracetool.py +++ b/scripts/tracetool.py @@ -44,6 +44,7 @@ Options: --help This help message. --list-backends Print list of available backends. --check-backends Check if the given backend is valid. + --group Name of the event group --binary Full path to QEMU binary. --target-type QEMU emulator target type ('system' or 'user'). --target-name QEMU emulator target name. @@ -67,7 +68,8 @@ def main(args): long_opts = ["backends=", "format=", "help", "list-backends", "check-backends"] - long_opts += ["binary=", "target-type=", "target-name=", "probe-prefix="] + long_opts += ["binary=", "target-type=", "target-name=", "probe-prefix=", + "group="] try: opts, args = getopt.getopt(args[1:], "", long_opts) @@ -81,6 +83,7 @@ def main(args): target_type = None target_name = None probe_prefix = None + group = None for opt, arg in opts: if opt == "--help": error_opt() @@ -105,6 +108,8 @@ def main(args): target_name = arg elif opt == '--probe-prefix': probe_prefix = arg + elif opt == '--group': + group = arg else: error_opt("unhandled option: %s" % opt) @@ -131,7 +136,8 @@ def main(args): try: tracetool.generate(sys.stdin, arg_format, arg_backends, - binary=binary, probe_prefix=probe_prefix) + binary=binary, probe_prefix=probe_prefix, + group=group) except tracetool.TracetoolError as e: error_opt(str(e)) diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.py index be24039..aebabaf 100644 --- a/scripts/tracetool/__init__.py +++ b/scripts/tracetool/__init__.py @@ -353,7 +353,8 @@ def try_import(mod_name, attr_name=None, attr_default=None): def generate(fevents, format, backends, - binary=None, probe_prefix=None): + binary=None, probe_prefix=None, + group=None): """Generate the output for the given (format, backends) pair. Parameters @@ -368,6 +369,8 @@ def generate(fevents, format, backends, See tracetool.backend.dtrace.BINARY. probe_prefix : str or None See tracetool.backend.dtrace.PROBEPREFIX. + group: str + Name of the tracing group """ # fix strange python error (UnboundLocalError tracetool) import tracetool @@ -378,6 +381,9 @@ def generate(fevents, format, backends, if not tracetool.format.exists(format): raise TracetoolError("unknown format: %s" % format) + if group is None: + group = "common" + if len(backends) is 0: raise TracetoolError("no backends specified") for backend in backends: @@ -391,4 +397,4 @@ def generate(fevents, format, backends, events = _read_events(fevents) - tracetool.format.generate(events, format, backend) + tracetool.format.generate(events, format, backend, group) diff --git a/scripts/tracetool/backend/__init__.py b/scripts/tracetool/backend/__init__.py index d4b6dab..f735a25 100644 --- a/scripts/tracetool/backend/__init__.py +++ b/scripts/tracetool/backend/__init__.py @@ -113,11 +113,11 @@ class Wrapper: if func is not None: func(*args, **kwargs) - def generate_begin(self, events): - self._run_function("generate_%s_begin", events) + def generate_begin(self, events, group): + self._run_function("generate_%s_begin", events, group) - def generate(self, event): - self._run_function("generate_%s", event) + def generate(self, event, group): + self._run_function("generate_%s", event, group) - def generate_end(self, events): - self._run_function("generate_%s_end", events) + def generate_end(self, events, group): + self._run_function("generate_%s_end", events, group) diff --git a/scripts/tracetool/backend/dtrace.py b/scripts/tracetool/backend/dtrace.py index ab9ecfa..79505c6 100644 --- a/scripts/tracetool/backend/dtrace.py +++ b/scripts/tracetool/backend/dtrace.py @@ -35,12 +35,12 @@ def binary(): return BINARY -def generate_h_begin(events): +def generate_h_begin(events, group): out('#include "trace/generated-tracers-dtrace.h"', '') -def generate_h(event): +def generate_h(event, group): out(' QEMU_%(uppername)s(%(argnames)s);', uppername=event.name.upper(), argnames=", ".join(event.args.names())) diff --git a/scripts/tracetool/backend/ftrace.py b/scripts/tracetool/backend/ftrace.py index 80dcf30..9bda5f9 100644 --- a/scripts/tracetool/backend/ftrace.py +++ b/scripts/tracetool/backend/ftrace.py @@ -19,13 +19,13 @@ from tracetool import out PUBLIC = True -def generate_h_begin(events): +def generate_h_begin(events, group): out('#include "trace/ftrace.h"', '#include "trace/control.h"', '') -def generate_h(event): +def generate_h(event, group): argnames = ", ".join(event.args.names()) if len(event.args) > 0: argnames = ", " + argnames @@ -34,13 +34,14 @@ def generate_h(event): ' char ftrace_buf[MAX_TRACE_STRLEN];', ' int unused __attribute__ ((unused));', ' int trlen;', - ' if (trace_event_get_state(%(event_id)s)) {', + ' if (trace_event_get_state(%(group)s_dstate, %(event_id)s)) {', ' trlen = snprintf(ftrace_buf, MAX_TRACE_STRLEN,', ' "%(name)s " %(fmt)s "\\n" %(argnames)s);', ' trlen = MIN(trlen, MAX_TRACE_STRLEN - 1);', ' unused = write(trace_marker_fd, ftrace_buf, trlen);', ' }', ' }', + group=group.lower(), name=event.name, args=event.args, event_id="TRACE_" + event.name.upper(), diff --git a/scripts/tracetool/backend/log.py b/scripts/tracetool/backend/log.py index b3ff064..8438b83 100644 --- a/scripts/tracetool/backend/log.py +++ b/scripts/tracetool/backend/log.py @@ -19,13 +19,13 @@ from tracetool import out PUBLIC = True -def generate_h_begin(events): +def generate_h_begin(events, group): out('#include "trace/control.h"', '#include "qemu/log.h"', '') -def generate_h(event): +def generate_h(event, group): argnames = ", ".join(event.args.names()) if len(event.args) > 0: argnames = ", " + argnames @@ -34,7 +34,7 @@ def generate_h(event): # already checked on the generic format code cond = "true" else: - cond = "trace_event_get_state(%s)" % ("TRACE_" + event.name.upper()) + cond = "trace_event_get_state(%s_dstate, %s)" % (group.lower(), "TRACE_" + event.name.upper()) out(' if (%(cond)s) {', ' struct timeval _now;', diff --git a/scripts/tracetool/backend/simple.py b/scripts/tracetool/backend/simple.py index c2a8468..8c27b68 100644 --- a/scripts/tracetool/backend/simple.py +++ b/scripts/tracetool/backend/simple.py @@ -27,7 +27,7 @@ def is_string(arg): return False -def generate_h_begin(events): +def generate_h_begin(events, group): for event in events: out('void _simple_%(api)s(%(args)s);', api=event.api(), @@ -35,13 +35,13 @@ def generate_h_begin(events): out('') -def generate_h(event): +def generate_h(event, group): out(' _simple_%(api)s(%(args)s);', api=event.api(), args=", ".join(event.args.names())) -def generate_c_begin(events): +def generate_c_begin(events, group): out('#include "qemu/osdep.h"', '#include "trace.h"', '#include "trace/control.h"', @@ -49,7 +49,7 @@ def generate_c_begin(events): '') -def generate_c(event): +def generate_c(event, group): out('void _simple_%(api)s(%(args)s)', '{', ' TraceBufferRecord rec;', @@ -73,7 +73,7 @@ def generate_c(event): # already checked on the generic format code cond = "true" else: - cond = "trace_event_get_state(dstate, %s)" % event_id + cond = "trace_event_get_state(%s_dstate, %s)" % (group.lower(), event_id) out('', ' if (!%(cond)s) {', diff --git a/scripts/tracetool/backend/ust.py b/scripts/tracetool/backend/ust.py index ed4c227..4594db6 100644 --- a/scripts/tracetool/backend/ust.py +++ b/scripts/tracetool/backend/ust.py @@ -19,13 +19,13 @@ from tracetool import out PUBLIC = True -def generate_h_begin(events): +def generate_h_begin(events, group): out('#include ', '#include "trace/generated-ust-provider.h"', '') -def generate_h(event): +def generate_h(event, group): argnames = ", ".join(event.args.names()) if len(event.args) > 0: argnames = ", " + argnames diff --git a/scripts/tracetool/format/__init__.py b/scripts/tracetool/format/__init__.py index 812570f..cf6e0e2 100644 --- a/scripts/tracetool/format/__init__.py +++ b/scripts/tracetool/format/__init__.py @@ -74,7 +74,7 @@ def exists(name): return tracetool.try_import("tracetool.format." + name)[1] -def generate(events, format, backend): +def generate(events, format, backend, group): if not exists(format): raise ValueError("unknown format: %s" % format) format = format.replace("-", "_") @@ -82,4 +82,4 @@ def generate(events, format, backend): "generate")[1] if func is None: raise AttributeError("format has no 'generate': %s" % format) - func(events, backend) + func(events, backend, group) diff --git a/scripts/tracetool/format/c.py b/scripts/tracetool/format/c.py index d496109..d98785d 100644 --- a/scripts/tracetool/format/c.py +++ b/scripts/tracetool/format/c.py @@ -16,7 +16,7 @@ __email__ = "stefanha@linux.vnet.ibm.com" from tracetool import out -def generate(events, backend): +def generate(events, backend, group): active_events = [e for e in events if "disable" not in e.properties] @@ -26,10 +26,10 @@ def generate(events, backend): '#include "trace.h"', '') - out('uint16_t dstate[TRACE_EVENT_COUNT];') - out('bool dstate_init[TRACE_EVENT_COUNT];') + out('uint16_t %s_dstate[TRACE_%s_EVENT_COUNT];' % (group.lower(), group.upper())) + out('bool %s_dstate_init[TRACE_%s_EVENT_COUNT];' % (group.lower(), group.upper())) - out('static TraceEvent trace_events[TRACE_EVENT_COUNT] = {') + out('static TraceEvent %s_trace_events[TRACE_%s_EVENT_COUNT] = {' % (group.lower(), group.upper())) for e in events: if "vcpu" in e.properties: @@ -47,13 +47,16 @@ def generate(events, backend): out('};', '') - out('void trace_register_events(void)', + out('void trace_%s_register_events(void)' % group.lower(), '{', - ' trace_event_register_group(trace_events, TRACE_EVENT_COUNT, dstate, dstate_init);', + ' trace_event_register_group(%s_trace_events,' % group.lower(), + ' TRACE_%s_EVENT_COUNT,' % group.upper(), + ' %s_dstate,' % group.lower(), + ' %s_dstate_init);' % group.lower(), '}', - 'trace_init(trace_register_events)') + 'trace_init(trace_%s_register_events)' % group.lower()) - backend.generate_begin(active_events) + backend.generate_begin(active_events, group) for event in active_events: - backend.generate(event) - backend.generate_end(active_events) + backend.generate(event, group) + backend.generate_end(active_events, group) diff --git a/scripts/tracetool/format/d.py b/scripts/tracetool/format/d.py index c77d5b7..78397c2 100644 --- a/scripts/tracetool/format/d.py +++ b/scripts/tracetool/format/d.py @@ -29,7 +29,7 @@ RESERVED_WORDS = ( ) -def generate(events, backend): +def generate(events, backend, group): events = [e for e in events if "disable" not in e.properties] diff --git a/scripts/tracetool/format/h.py b/scripts/tracetool/format/h.py index 4b53ee2..25ffe2b 100644 --- a/scripts/tracetool/format/h.py +++ b/scripts/tracetool/format/h.py @@ -16,34 +16,34 @@ __email__ = "stefanha@linux.vnet.ibm.com" from tracetool import out -def generate(events, backend): +def generate(events, backend, group): out('/* This file is autogenerated by tracetool, do not edit. */', '', - '#ifndef TRACE__GENERATED_TRACERS_H', - '#define TRACE__GENERATED_TRACERS_H', + '#ifndef TRACE_%s_GENERATED_TRACERS_H' % group.upper(), + '#define TRACE_%s_GENERATED_TRACERS_H' % group.upper(), '', '#include "qemu-common.h"', '#include "trace/control.h"', '') # event identifiers - out('typedef enum {') + out('enum {') for e in events: out(' TRACE_%s,' % e.name.upper()) - out(' TRACE_EVENT_COUNT', - '} TraceEventID;') + out(' TRACE_%s_EVENT_COUNT' % group.upper(), + '};') # per-vCPU event identifiers - out('typedef enum {') + out('enum {') for e in events: if "vcpu" in e.properties: out(' TRACE_VCPU_%s,' % e.name.upper()) - out(' TRACE_VCPU_EVENT_COUNT', - '} TraceEventVCPUID;') + out(' TRACE_%s_VCPU_EVENT_COUNT' % group.upper(), + '};') # static state for e in events: @@ -58,12 +58,12 @@ def generate(events, backend): enabled=enabled) out('#define TRACE_%s_ENABLED %d' % (e.name.upper(), enabled)) - out('extern uint16_t dstate[TRACE_EVENT_COUNT];') - out('extern bool dstate_init[TRACE_EVENT_COUNT];') + out('extern uint16_t %s_dstate[TRACE_%s_EVENT_COUNT];' % (group.lower(), group.upper())) + out('extern bool %s_dstate_init[TRACE_%s_EVENT_COUNT];' % (group.lower(), group.upper())) - out('void trace_register_events(void);') + out('void trace_%s_register_events(void);' % group.lower()) - backend.generate_begin(events) + backend.generate_begin(events, group) for e in events: if "vcpu" in e.properties: @@ -86,11 +86,11 @@ def generate(events, backend): cond=cond) if "disable" not in e.properties: - backend.generate(e) + backend.generate(e, group) out(' }', '}') - backend.generate_end(events) + backend.generate_end(events, group) - out('#endif /* TRACE__GENERATED_TRACERS_H */') + out('#endif /* TRACE_%s_GENERATED_TRACERS_H */' % group.upper()) diff --git a/scripts/tracetool/format/simpletrace_stap.py b/scripts/tracetool/format/simpletrace_stap.py index 7e44bc1..c8b3850 100644 --- a/scripts/tracetool/format/simpletrace_stap.py +++ b/scripts/tracetool/format/simpletrace_stap.py @@ -19,7 +19,7 @@ from tracetool.backend.simple import is_string from tracetool.format.stap import stap_escape -def generate(events, backend): +def generate(events, backend, group): out('/* This file is autogenerated by tracetool, do not edit. */', '') diff --git a/scripts/tracetool/format/stap.py b/scripts/tracetool/format/stap.py index 9e780f1..e8ef3e7 100644 --- a/scripts/tracetool/format/stap.py +++ b/scripts/tracetool/format/stap.py @@ -34,7 +34,7 @@ def stap_escape(identifier): return identifier -def generate(events, backend): +def generate(events, backend, group): events = [e for e in events if "disable" not in e.properties] diff --git a/scripts/tracetool/format/tcg_h.py b/scripts/tracetool/format/tcg_h.py index e2331f2..628388a 100644 --- a/scripts/tracetool/format/tcg_h.py +++ b/scripts/tracetool/format/tcg_h.py @@ -27,7 +27,7 @@ def vcpu_transform_args(args): ]) -def generate(events, backend): +def generate(events, backend, group): out('/* This file is autogenerated by tracetool, do not edit. */', '/* You must include this file after the inclusion of helper.h */', '', diff --git a/scripts/tracetool/format/tcg_helper_c.py b/scripts/tracetool/format/tcg_helper_c.py index e3485b7..cc26e03 100644 --- a/scripts/tracetool/format/tcg_helper_c.py +++ b/scripts/tracetool/format/tcg_helper_c.py @@ -40,7 +40,7 @@ def vcpu_transform_args(args, mode): assert False -def generate(events, backend): +def generate(events, backend, group): events = [e for e in events if "disable" not in e.properties] diff --git a/scripts/tracetool/format/tcg_helper_h.py b/scripts/tracetool/format/tcg_helper_h.py index dc76c15..6b184b6 100644 --- a/scripts/tracetool/format/tcg_helper_h.py +++ b/scripts/tracetool/format/tcg_helper_h.py @@ -18,7 +18,7 @@ from tracetool.transform import * import tracetool.vcpu -def generate(events, backend): +def generate(events, backend, group): events = [e for e in events if "disable" not in e.properties] diff --git a/scripts/tracetool/format/tcg_helper_wrapper_h.py b/scripts/tracetool/format/tcg_helper_wrapper_h.py index 020f442..ff53447 100644 --- a/scripts/tracetool/format/tcg_helper_wrapper_h.py +++ b/scripts/tracetool/format/tcg_helper_wrapper_h.py @@ -18,7 +18,7 @@ from tracetool.transform import * import tracetool.vcpu -def generate(events, backend): +def generate(events, backend, group): events = [e for e in events if "disable" not in e.properties] diff --git a/scripts/tracetool/format/ust_events_c.py b/scripts/tracetool/format/ust_events_c.py index 9967c7a..cd87d8a 100644 --- a/scripts/tracetool/format/ust_events_c.py +++ b/scripts/tracetool/format/ust_events_c.py @@ -16,7 +16,7 @@ __email__ = "stefanha@redhat.com" from tracetool import out -def generate(events, backend): +def generate(events, backend, group): events = [e for e in events if "disabled" not in e.properties] diff --git a/scripts/tracetool/format/ust_events_h.py b/scripts/tracetool/format/ust_events_h.py index 3e8a7cd..00b69d9 100644 --- a/scripts/tracetool/format/ust_events_h.py +++ b/scripts/tracetool/format/ust_events_h.py @@ -16,7 +16,7 @@ __email__ = "stefanha@redhat.com" from tracetool import out -def generate(events, backend): +def generate(events, backend, group): events = [e for e in events if "disabled" not in e.properties] @@ -28,8 +28,8 @@ def generate(events, backend): '#undef TRACEPOINT_INCLUDE_FILE', '#define TRACEPOINT_INCLUDE_FILE ./generated-ust-provider.h', '', - '#if !defined (TRACE__GENERATED_UST_H) || defined(TRACEPOINT_HEADER_MULTI_READ)', - '#define TRACE__GENERATED_UST_H', + '#if !defined (TRACE_%s_GENERATED_UST_H) || defined(TRACEPOINT_HEADER_MULTI_READ)' % group.upper(), + '#define TRACE_%s_GENERATED_UST_H' % group.upper(), '', '#include "qemu-common.h"', '#include ', @@ -94,7 +94,7 @@ def generate(events, backend): '', name=e.name) - out('#endif /* TRACE__GENERATED_UST_H */', + out('#endif /* TRACE_%s_GENERATED_UST_H */' % group.upper(), '', '/* This part must be outside ifdef protection */', '#include ') -- 2.7.4