| 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) |