Browse Source
The trace crate is a minimal container for dependencies of tracepoints (so that they do not have to be imported in all the crates that use tracepoints); it also contains a macro called "include_trace!" that is able to find the right include file from the trace/ directory. [Write commit message, add #[allow()]. - Paolo] 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-10-pbonzini@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>pull/305/head
committed by
Stefan Hajnoczi
7 changed files with 83 additions and 2 deletions
@ -0,0 +1,16 @@ |
|||
[package] |
|||
name = "trace" |
|||
version = "0.1.0" |
|||
authors = ["Tanish Desai <tanishdesai37@gmail.com>"] |
|||
description = "QEMU tracing infrastructure support" |
|||
resolver = "2" |
|||
publish = false |
|||
|
|||
edition.workspace = true |
|||
homepage.workspace = true |
|||
license.workspace = true |
|||
repository.workspace = true |
|||
rust-version.workspace = true |
|||
|
|||
[lints] |
|||
workspace = true |
|||
@ -0,0 +1,19 @@ |
|||
rust = import('rust') |
|||
|
|||
lib_rs = configure_file( |
|||
input: 'src/lib.rs', |
|||
output: 'lib.rs', |
|||
configuration: { |
|||
'MESON_BUILD_ROOT': meson.project_build_root(), |
|||
}) |
|||
|
|||
_trace_rs = static_library( |
|||
'trace', # Library name, |
|||
lib_rs, |
|||
trace_rs_targets, # List of generated `.rs` custom targets |
|||
override_options: ['rust_std=2021', 'build.rust_std=2021'], |
|||
dependencies: [libc_rs], |
|||
rust_abi: 'rust', |
|||
) |
|||
|
|||
trace_rs = declare_dependency(link_with: _trace_rs) |
|||
@ -0,0 +1,35 @@ |
|||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|||
|
|||
//! This crate provides macros that aid in using QEMU's tracepoint
|
|||
//! functionality.
|
|||
|
|||
#[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`.
|
|||
///
|
|||
/// ```ignore
|
|||
/// ::trace::include_trace!("hw_char");
|
|||
/// // ...
|
|||
/// trace::trace_pl011_read_fifo_rx_full();
|
|||
/// ```
|
|||
macro_rules! include_trace { |
|||
($name:literal) => { |
|||
#[allow(
|
|||
clippy::ptr_as_ptr, |
|||
clippy::cast_lossless, |
|||
clippy::used_underscore_binding |
|||
)] |
|||
mod trace { |
|||
#[cfg(not(MESON))] |
|||
include!(concat!( |
|||
env!("MESON_BUILD_ROOT"), |
|||
"/trace/trace-", |
|||
$name, |
|||
".rs" |
|||
)); |
|||
|
|||
#[cfg(MESON)] |
|||
include!(concat!("@MESON_BUILD_ROOT@/trace/trace-", $name, ".rs")); |
|||
} |
|||
}; |
|||
} |
|||
Loading…
Reference in new issue