master
py 83 lines 2.52 KB
Raw
1 # SPDX-License-Identifier: GPL-2.0-or-later
2
3 """
4 trace-DIR.rs
5 """
6
7 __author__ = "Tanish Desai <tanishdesai37@gmail.com>"
8 __copyright__ = "Copyright 2025, Tanish Desai <tanishdesai37@gmail.com>"
9 __license__ = "GPL version 2 or (at your option) any later version"
10
11 __maintainer__ = "Stefan Hajnoczi"
12 __email__ = "stefanha@redhat.com"
13
14
15 from tracetool import out
16
17
18 def generate(events, backend, group):
19 out('// SPDX-License-Identifier: GPL-2.0-or-later',
20 '// This file is @generated by tracetool, do not edit.',
21 '',
22 '#[allow(unused_imports)]',
23 'use std::ffi::c_char;',
24 '#[allow(unused_imports)]',
25 'use util::bindings;',
26 '',
27 '#[allow(dead_code)]',
28 '#[inline(always)]',
29 'fn trace_event_state_is_enabled(dstate: u16) -> bool {',
30 ' (unsafe { trace_events_enabled_count }) != 0 && dstate != 0',
31 '}',
32 '',
33 'extern "C" {',
34 ' #[allow(dead_code)]',
35 ' static mut trace_events_enabled_count: u32;',
36 '}',)
37
38 out('extern "C" {')
39
40 for e in events:
41 out(' #[allow(dead_code)]',
42 ' static mut %s: u16;' % e.api(e.QEMU_DSTATE))
43 out('}',
44 '')
45
46 backend.generate_begin(events, group)
47
48 for e in events:
49 out('#[inline(always)]',
50 '#[allow(dead_code)]',
51 'pub fn %(api)s() -> bool',
52 '{',
53 api=e.api(e.QEMU_RUST_DSTATE))
54
55 if "disable" not in e.properties:
56 backend.generate_backend_dstate(e, group)
57 if backend.check_trace_event_get_state:
58 out(' trace_event_state_is_enabled(unsafe { _%(event_id)s_DSTATE}) ||',
59 event_id = 'TRACE_' + e.name.upper())
60
61 out(' false',
62 '}',
63 '',
64 '#[inline(always)]',
65 '#[allow(dead_code)]',
66 'pub fn %(api)s(%(args)s)',
67 '{',
68 api=e.api(e.QEMU_TRACE),
69 args=e.args.rust_decl())
70
71 if "disable" not in e.properties:
72 backend.generate(e, group, check_trace_event_get_state=False)
73 if backend.check_trace_event_get_state:
74 event_id = 'TRACE_' + e.name.upper()
75 out(' if trace_event_state_is_enabled(unsafe { _%(event_id)s_DSTATE}) {',
76 event_id = event_id,
77 api=e.api())
78 backend.generate(e, group, check_trace_event_get_state=True)
79 out(' }')
80 out('}',
81 '')
82
83 backend.generate_end(events, group)