AFAICT, this support for ftrace is incomplete.
Building with:
./configure --enable-trace-backends=ftrace --enable-rust
--target-list=x86_64-softmmu
results in Rust build failures
error[E0425]: cannot find function `ftrace_write` in module `bindings`
--> /home/berrange/src/virt/qemu/build/trace/trace-hw_char.rs:130:27
|
130 | ... unsafe {bindings::ftrace_write(format_string.as_ptr() as *const
c_char, _desc.as_ptr(), _addr as std::ffi::c_int, _value as std::ff...
| ^^^^^^^^^^^^ not found in `bindings`
error[E0425]: cannot find function `ftrace_write` in module `bindings`
--> /home/berrange/src/virt/qemu/build/trace/trace-hw_char.rs:140:27
|
140 | ... unsafe {bindings::ftrace_write(format_string.as_ptr() as *const
c_char, _desc.as_ptr(), _addr as std::ffi::c_int, _value as std::ff...
| ^^^^^^^^^^^^ not found in `bindings`
and these errors occur on both today's git master HEAD, and all
the way back to this first patch that claimed to support ftrace
with Rust.
Did some piece of supporting code go missing in the final
pull request here ?
On Wed, Oct 01, 2025 at 11:30:58AM -0400, Stefan Hajnoczi wrote:
> From: Tanish Desai <[email protected]>
>
> Signed-off-by: Tanish Desai <[email protected]>
> Reviewed-by: Stefan Hajnoczi <[email protected]>
> Signed-off-by: Paolo Bonzini <[email protected]>
> Message-ID: <[email protected]>
> Signed-off-by: Stefan Hajnoczi <[email protected]>
> ---
> scripts/tracetool/backend/ftrace.py | 8 +++++-
> tests/tracetool/ftrace.rs | 40 +++++++++++++++++++++++++++++
> tests/tracetool/tracetool-test.py | 2 +-
> 3 files changed, 48 insertions(+), 2 deletions(-)
> create mode 100644 tests/tracetool/ftrace.rs
>
> diff --git a/scripts/tracetool/backend/ftrace.py
> b/scripts/tracetool/backend/ftrace.py
> index 7ddd5d11a6..e03698a2ed 100644
> --- a/scripts/tracetool/backend/ftrace.py
> +++ b/scripts/tracetool/backend/ftrace.py
> @@ -12,7 +12,7 @@
> __email__ = "[email protected]"
>
>
> -from tracetool import out
> +from tracetool import out, expand_format_string
>
>
> PUBLIC = True
> @@ -43,3 +43,9 @@ 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";',
> + ' unsafe {bindings::ftrace_write(format_string.as_ptr() as
> *const c_char, %(args)s);}',
> + fmt=expand_format_string(event.fmt),
> + args=event.args.rust_call_varargs())
> diff --git a/tests/tracetool/ftrace.rs b/tests/tracetool/ftrace.rs
> new file mode 100644
> index 0000000000..07b9259cf2
> --- /dev/null
> +++ b/tests/tracetool/ftrace.rs
> @@ -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 {bindings::ftrace_write(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 {bindings::ftrace_write(format_string.as_ptr() as *const
> c_char, _context /* as *mut () */, _value /* as std::ffi::c_int */);}
> + }
> +}
> diff --git a/tests/tracetool/tracetool-test.py
> b/tests/tracetool/tracetool-test.py
> index f58f3b795e..3341fb18f9 100755
> --- a/tests/tracetool/tracetool-test.py
> +++ b/tests/tracetool/tracetool-test.py
> @@ -14,7 +14,7 @@ def get_formats(backend):
> "c",
> "h",
> ]
> - if backend in {"log", "simple"}:
> + if backend in {"ftrace", "log", "simple"}:
> formats += ["rs"]
> if backend == "dtrace":
> formats += [
> --
> 2.51.0
>
>
With regards,
Daniel
--
|: https://berrange.com ~~ https://hachyderm.io/@berrange :|
|: https://libvirt.org ~~ https://entangle-photo.org :|
|: https://pixelfed.art/berrange ~~ https://fstop138.berrange.com :|