From 38d2b8d46aeca73d5232488539b8aee4d04528ee Mon Sep 17 00:00:00 2001 From: Christian Helmuth Date: Mon, 25 Mar 2024 09:50:59 +0100 Subject: [PATCH] lx_emul: function to generate trace messages lx_emul_trace_msg() uses Genode::trace() as message function for lightweight trace points, but also supports Linux format-string attributes by using vsnprintf(). --- repos/dde_linux/src/include/lx_emul/debug.h | 2 ++ repos/dde_linux/src/lib/lx_emul/debug.cc | 2 +- .../src/lib/lx_emul/shadow/kernel/printk/printk.c | 10 ++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/repos/dde_linux/src/include/lx_emul/debug.h b/repos/dde_linux/src/include/lx_emul/debug.h index 5fc71c890a..5bf62f0250 100644 --- a/repos/dde_linux/src/include/lx_emul/debug.h +++ b/repos/dde_linux/src/include/lx_emul/debug.h @@ -23,6 +23,8 @@ __attribute__((noreturn)) void lx_emul_trace_and_stop(const char * func); void lx_emul_trace(const char * func); +__attribute__((__format__(printf, 1, 2))) void lx_emul_trace_msg(char const *fmt, ...); + void lx_emul_backtrace(void); #ifdef __cplusplus diff --git a/repos/dde_linux/src/lib/lx_emul/debug.cc b/repos/dde_linux/src/lib/lx_emul/debug.cc index e10eba74a6..1e13ee3071 100644 --- a/repos/dde_linux/src/lib/lx_emul/debug.cc +++ b/repos/dde_linux/src/lib/lx_emul/debug.cc @@ -29,7 +29,7 @@ extern "C" void lx_emul_trace_and_stop(const char * func) } -extern "C" void lx_emul_trace(const char *) {} +extern "C" void lx_emul_trace(const char *s) { trace(s); } extern "C" void lx_emul_backtrace() diff --git a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/printk/printk.c b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/printk/printk.c index 40d505c0da..b787305c2e 100644 --- a/repos/dde_linux/src/lib/lx_emul/shadow/kernel/printk/printk.c +++ b/repos/dde_linux/src/lib/lx_emul/shadow/kernel/printk/printk.c @@ -56,3 +56,13 @@ asmlinkage int vprintk_emit(int facility, int level, return 0; } + +void lx_emul_trace_msg(char const *fmt, ...) +{ + va_list args; + va_start(args, fmt); + vsnprintf(print_string, sizeof(print_string), fmt, args); + va_end(args); + + lx_emul_trace(print_string); +}