tracetool/syslog: add Rust support
The syslog backend needs the syslog function from libc and the LOG_INFO enum value; they are re-exported as "::trace::syslog" and "::trace::LOG_INFO" so that device crates do not all have to add the libc dependency, but otherwise there is nothing special. 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-17-pbonzini@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
7dbee12742
commit
1461752f0f
6 changed files with 57 additions and 2 deletions
3
rust/Cargo.lock
generated
3
rust/Cargo.lock
generated
|
|
@ -262,6 +262,9 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "trace"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
|
|
|
|||
|
|
@ -12,5 +12,8 @@ license.workspace = true
|
|||
repository.workspace = true
|
||||
rust-version.workspace = true
|
||||
|
||||
[dependencies]
|
||||
libc = { workspace = true }
|
||||
|
||||
[lints]
|
||||
workspace = true
|
||||
|
|
|
|||
|
|
@ -3,6 +3,10 @@
|
|||
//! This crate provides macros that aid in using QEMU's tracepoint
|
||||
//! functionality.
|
||||
|
||||
#[doc(hidden)]
|
||||
/// Re-exported item to avoid adding libc as a dependency everywhere.
|
||||
pub use libc::{syslog, LOG_INFO};
|
||||
|
||||
#[macro_export]
|
||||
/// Define the trace-points from the named directory (which should have slashes
|
||||
/// replaced by underscore characters) as functions in a module called `trace`.
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ __maintainer__ = "Stefan Hajnoczi"
|
|||
__email__ = "stefanha@redhat.com"
|
||||
|
||||
|
||||
from tracetool import out
|
||||
from tracetool import out, expand_format_string
|
||||
|
||||
|
||||
PUBLIC = True
|
||||
|
|
@ -38,6 +38,11 @@ def generate_h(event, group):
|
|||
fmt=event.fmt.rstrip("\n"),
|
||||
argnames=argnames)
|
||||
|
||||
def generate_rs(event, group):
|
||||
out(' let format_string = c"%(fmt)s";',
|
||||
' unsafe {::trace::syslog(::trace::LOG_INFO, format_string.as_ptr() as *const c_char, %(args)s);}',
|
||||
fmt=expand_format_string(event.fmt),
|
||||
args=event.args.rust_call_varargs())
|
||||
|
||||
def generate_h_backend_dstate(event, group):
|
||||
out(' trace_event_get_state_dynamic_by_id(%(event_id)s) || \\',
|
||||
|
|
|
|||
40
tests/tracetool/syslog.rs
Normal file
40
tests/tracetool/syslog.rs
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
// 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"Blah context=%p filename=%s";
|
||||
unsafe {::trace::syslog(::trace::LOG_INFO, 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"Wibble context=%p value=%d";
|
||||
unsafe {::trace::syslog(::trace::LOG_INFO, format_string.as_ptr() as *const c_char, _context /* as *mut () */, _value /* as std::ffi::c_int */);}
|
||||
}
|
||||
}
|
||||
|
|
@ -14,7 +14,7 @@ def get_formats(backend):
|
|||
"c",
|
||||
"h",
|
||||
]
|
||||
if backend in {"ftrace", "log", "simple"}:
|
||||
if backend in {"ftrace", "log", "simple", "syslog"}:
|
||||
formats += ["rs"]
|
||||
if backend == "dtrace":
|
||||
formats += [
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue