Browse Source

tracetool/log: add Rust support

Signed-off-by: Tanish Desai <tanishdesai37@gmail.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Message-ID: <20250929154938.594389-15-pbonzini@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
pull/305/head
Tanish Desai 6 months ago
committed by Stefan Hajnoczi
parent
commit
c4e8d44bac
  1. 10
      scripts/tracetool/backend/log.py
  2. 44
      tests/tracetool/log.rs
  3. 2
      tests/tracetool/tracetool-test.py

10
scripts/tracetool/backend/log.py

@ -12,7 +12,7 @@ __maintainer__ = "Stefan Hajnoczi"
__email__ = "stefanha@redhat.com"
from tracetool import out
from tracetool import out, expand_format_string
PUBLIC = True
@ -44,3 +44,11 @@ def generate_h(event, group):
def generate_h_backend_dstate(event, group):
out(' trace_event_get_state_dynamic_by_id(%(event_id)s) || \\',
event_id="TRACE_" + event.name.upper())
def generate_rs(event, group):
out(' let format_string = c"%(fmt)s\\n";',
' if (unsafe { bindings::qemu_loglevel } & bindings::LOG_TRACE) != 0 {',
' unsafe { bindings::qemu_log(format_string.as_ptr() as *const c_char, %(args)s);}',
' }',
fmt=expand_format_string(event.fmt, event.name + " "),
args=event.args.rust_call_varargs())

44
tests/tracetool/log.rs

@ -0,0 +1,44 @@
// SPDX-License-Identifier: GPL-2.0-or-later
// This file is @generated by tracetool, do not edit.
#[allow(unused_imports)]
use std::ffi::c_char;
#[allow(unused_imports)]
use util::bindings;
#[inline(always)]
fn trace_event_state_is_enabled(dstate: u16) -> bool {
(unsafe { trace_events_enabled_count }) != 0 && dstate != 0
}
extern "C" {
static mut trace_events_enabled_count: u32;
}
extern "C" {
static mut _TRACE_TEST_BLAH_DSTATE: u16;
static mut _TRACE_TEST_WIBBLE_DSTATE: u16;
}
#[inline(always)]
#[allow(dead_code)]
pub fn trace_test_blah(_context: *mut (), _filename: &std::ffi::CStr)
{
if trace_event_state_is_enabled(unsafe { _TRACE_TEST_BLAH_DSTATE}) {
let format_string = c"test_blah Blah context=%p filename=%s\n";
if (unsafe { bindings::qemu_loglevel } & bindings::LOG_TRACE) != 0 {
unsafe { bindings::qemu_log(format_string.as_ptr() as *const c_char, _context /* as *mut () */, _filename.as_ptr());}
}
}
}
#[inline(always)]
#[allow(dead_code)]
pub fn trace_test_wibble(_context: *mut (), _value: std::ffi::c_int)
{
if trace_event_state_is_enabled(unsafe { _TRACE_TEST_WIBBLE_DSTATE}) {
let format_string = c"test_wibble Wibble context=%p value=%d\n";
if (unsafe { bindings::qemu_loglevel } & bindings::LOG_TRACE) != 0 {
unsafe { bindings::qemu_log(format_string.as_ptr() as *const c_char, _context /* as *mut () */, _value /* as std::ffi::c_int */);}
}
}
}

2
tests/tracetool/tracetool-test.py

@ -14,7 +14,7 @@ def get_formats(backend):
"c",
"h",
]
if backend in {"simple"}:
if backend in {"log", "simple"}:
formats += ["rs"]
if backend == "dtrace":
formats += [

Loading…
Cancel
Save