> The 'nop' backend is a short-hand for no trace probe usage
> at all. The emitted functions become a no-op, and as such
> there is no need to emit the TraceEvent structs, nor the
> DSTATE variables they reference.
> 
> Reviewed-by: Marc-André Lureau <[email protected]>
> Signed-off-by: Daniel P. Berrangé <[email protected]>
> Message-ID: <[email protected]>
> ---
>  scripts/tracetool/format/c.py | 75 ++++++++++++++++++-----------------
>  scripts/tracetool/format/h.py | 16 +++++---
>  tests/tracetool/nop.c         | 29 --------------
>  tests/tracetool/nop.h         |  6 +--
>  4 files changed, 50 insertions(+), 76 deletions(-)
>
> diff --git a/scripts/tracetool/format/c.py b/scripts/tracetool/format/c.py
> index de1c154a8819..5f6669c917c7 100644
> --- a/scripts/tracetool/format/c.py
> +++ b/scripts/tracetool/format/c.py
> @@ -29,41 +29,42 @@ def generate(events, backend, group):
>          '#include "%s"' % header,
>          '')
>  
> -    for e in events:
> -        out('uint8_t %s;' % e.api(e.QEMU_DSTATE))
> +    if len(list(backend.backend_modules())):
> +        for e in events:
> +            out('uint8_t %s;' % e.api(e.QEMU_DSTATE))
>  
> -    for e in events:
> -        out('TraceEvent %(event)s = {',
> -            '#ifdef CONFIG_TRACE_SIMPLE',
> -            '    .id = 0,',
> -            '#endif',
> -            '    .name = \"%(name)s\",',
> -            '    .sstate = %(sstate)s,',
> -            '    .dstate = &%(dstate)s',
> +        for e in events:
> +            out('TraceEvent %(event)s = {',
> +                '#ifdef CONFIG_TRACE_SIMPLE',
> +                '    .id = 0,',
> +                '#endif',
> +                '    .name = \"%(name)s\",',
> +                '    .sstate = %(sstate)s,',
> +                '    .dstate = &%(dstate)s',
> +                '};',
> +                event = e.api(e.QEMU_EVENT),
> +                name = e.name,
> +                sstate = "TRACE_%s_ENABLED" % e.name.upper(),
> +                dstate = e.api(e.QEMU_DSTATE))
> +
> +        out('TraceEvent *%(group)s_trace_events[] = {',
> +            group = group.lower())
> +
> +        for e in events:
> +            out('    &%(event)s,', event = e.api(e.QEMU_EVENT))
> +
> +        out('  NULL,',
>              '};',
> -            event = e.api(e.QEMU_EVENT),
> -            name = e.name,
> -            sstate = "TRACE_%s_ENABLED" % e.name.upper(),
> -            dstate = e.api(e.QEMU_DSTATE))
> +            '')
>  
> -    out('TraceEvent *%(group)s_trace_events[] = {',
> -        group = group.lower())
> +        out('static void trace_%(group)s_register_events(void)',
> +            '{',
> +            '    trace_event_register_group(%(group)s_trace_events);',
> +            '}',
> +            'trace_init(trace_%(group)s_register_events)',
> +            group = group.lower())
>  
> -    for e in events:
> -        out('    &%(event)s,', event = e.api(e.QEMU_EVENT))
> -
> -    out('  NULL,',
> -        '};',
> -        '')
> -
> -    out('static void trace_%(group)s_register_events(void)',
> -        '{',
> -        '    trace_event_register_group(%(group)s_trace_events);',
> -        '}',
> -        'trace_init(trace_%(group)s_register_events)',
> -        group = group.lower())
> -
> -    backend.generate_begin(active_events, group)
> -    for event in active_events:
> -        backend.generate(event, group)
> -    backend.generate_end(active_events, group)
> +        backend.generate_begin(active_events, group)
> +        for event in active_events:
> +            backend.generate(event, group)
> +        backend.generate_end(active_events, group)
> diff --git a/scripts/tracetool/format/h.py b/scripts/tracetool/format/h.py
> index 4dc1ad7eb158..6ffb7256e314 100644
> --- a/scripts/tracetool/format/h.py
> +++ b/scripts/tracetool/format/h.py
> @@ -27,12 +27,16 @@ def generate(events, backend, group):
>          '#include "%s"' % header,
>          '')
>  
> -    for e in events:
> -        out('extern TraceEvent %(event)s;',
> -            event = e.api(e.QEMU_EVENT))
> +    if len(list(backend.backend_modules())):
> +        for e in events:
> +            out('extern TraceEvent %(event)s;',
> +                event = e.api(e.QEMU_EVENT))
>  
> -    for e in events:
> -        out('extern uint8_t %s;' % e.api(e.QEMU_DSTATE))
> +        for e in events:
> +            out('extern uint8_t %s;' % e.api(e.QEMU_DSTATE))
> +    else:
> +        for e in events:
> +            out('#define %s 0' % e.api(e.QEMU_DSTATE))
>  
>      # static state
>      for e in events:
> diff --git a/tests/tracetool/nop.c b/tests/tracetool/nop.c
> index f83d06252eaa..d34cc0ca7426 100644
> --- a/tests/tracetool/nop.c
> +++ b/tests/tracetool/nop.c
> @@ -5,32 +5,3 @@
>  #include "qemu/module.h"
>  #include "trace-testsuite.h"
>  
> -uint8_t _TRACE_TEST_BLAH_DSTATE;
> -uint8_t _TRACE_TEST_WIBBLE_DSTATE;
> -TraceEvent _TRACE_TEST_BLAH_EVENT = {
> -#ifdef CONFIG_TRACE_SIMPLE
> -    .id = 0,
> -#endif
> -    .name = "test_blah",
> -    .sstate = TRACE_TEST_BLAH_ENABLED,
> -    .dstate = &_TRACE_TEST_BLAH_DSTATE
> -};
> -TraceEvent _TRACE_TEST_WIBBLE_EVENT = {
> -#ifdef CONFIG_TRACE_SIMPLE
> -    .id = 0,
> -#endif
> -    .name = "test_wibble",
> -    .sstate = TRACE_TEST_WIBBLE_ENABLED,
> -    .dstate = &_TRACE_TEST_WIBBLE_DSTATE
> -};
> -TraceEvent *testsuite_trace_events[] = {
> -    &_TRACE_TEST_BLAH_EVENT,
> -    &_TRACE_TEST_WIBBLE_EVENT,
> -  NULL,
> -};
> -
> -static void trace_testsuite_register_events(void)
> -{
> -    trace_event_register_group(testsuite_trace_events);
> -}
> -trace_init(trace_testsuite_register_events)
> diff --git a/tests/tracetool/nop.h b/tests/tracetool/nop.h
> index 443f5e0cf6ee..64b6b0056841 100644
> --- a/tests/tracetool/nop.h
> +++ b/tests/tracetool/nop.h
> @@ -6,10 +6,8 @@
>  
>  #include "trace/control.h"
>  
> -extern TraceEvent _TRACE_TEST_BLAH_EVENT;
> -extern TraceEvent _TRACE_TEST_WIBBLE_EVENT;
> -extern uint8_t _TRACE_TEST_BLAH_DSTATE;
> -extern uint8_t _TRACE_TEST_WIBBLE_DSTATE;
> +#define _TRACE_TEST_BLAH_DSTATE 0
> +#define _TRACE_TEST_WIBBLE_DSTATE 0

The rust generator should be adjusted too

-- 
Marc-André Lureau <[email protected]>


Reply via email to