Patchwork [RFC] New trace-event backend: stdio

login
register
mail settings
Submitter Fabien Chouteau
Date Jan. 24, 2011, 5:33 p.m.
Message ID <e7c3ac0f4cbd0d0c1dd1d213cd2c871393bf1846.1295890311.git.chouteau@adacore.com>
Download mbox | patch
Permalink /patch/80220/
State New
Headers show

Comments

Fabien Chouteau - Jan. 24, 2011, 5:33 p.m.
This backend sends trace events to standard output during the emulation.

Signed-off-by: Fabien Chouteau <chouteau@adacore.com>
---
 configure         |    2 +-
 docs/tracing.txt  |    5 +++++
 scripts/tracetool |   52 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 3 files changed, 57 insertions(+), 2 deletions(-)
Fabien Chouteau - Jan. 26, 2011, 8:59 a.m.
On 01/24/2011 06:33 PM, Fabien Chouteau wrote:
> This backend sends trace events to standard output during the emulation.
>

Any comments?
Stefan Hajnoczi - Jan. 26, 2011, 9:50 a.m.
On Mon, Jan 24, 2011 at 5:33 PM, Fabien Chouteau <chouteau@adacore.com> wrote:
> diff --git a/docs/tracing.txt b/docs/tracing.txt
> index 963c504..de033ad 100644
> --- a/docs/tracing.txt
> +++ b/docs/tracing.txt
> @@ -133,6 +133,11 @@ source tree.  It may not be as powerful as platform-specific or third-party
>  trace backends but it is portable.  This is the recommended trace backend
>  unless you have specific needs for more advanced backends.
>
> +=== Stdio ===
> +
> +The "stdio" backend sends trace events directly to standard output during
> +emulation.
> +

This is a reasonable backend for development/debugging.  It's just a
small step from DPRINTF() and that might work well with people's
existing development workflows.

Since most other QEMU diagnostics go to stderr, please use it here
too.  Also please change the name to "stderr" so it is immediately
obvious what this backend does.

> @@ -236,6 +237,55 @@ linetoc_end_simple()
>  EOF
>  }
>
> +#STDIO
> +linetoh_begin_stdio()
> +{
> +    return
> +}
> +
> +linetoh_stdio()
> +{
> +    local name args argnamess argc fmt

local name args argnames argc state fmt

Stefan
Stefan Hajnoczi - Jan. 26, 2011, 10:18 a.m.
On Mon, Jan 24, 2011 at 5:33 PM, Fabien Chouteau <chouteau@adacore.com> wrote:
> @@ -236,6 +237,55 @@ linetoc_end_simple()
>  EOF
>  }
>
> +#STDIO
> +linetoh_begin_stdio()
> +{
> +    return
> +}
> +
> +linetoh_stdio()
> +{
> +    local name args argnamess argc fmt
> +    name=$(get_name "$1")
> +    args=$(get_args "$1")
> +    argnames=$(get_argnames "$1" ",")
> +    argc=$(get_argc "$1")
> +    state=$(get_state "$1")
> +    fmt=$(get_fmt "$1")
> +
> +    if [ "$argc" -gt 0 ]; then
> +        argnames=", $argnames"
> +    fi
> +
> +    cat <<EOF
> +static inline void trace_$name($args)
> +{
> +    printf("$name $fmt\n" $argnames);

Forgot to mention this but the generated header file needs to #include
<stdio.h>.

Stefan

Patch

diff --git a/configure b/configure
index 210670c..2672f2a 100755
--- a/configure
+++ b/configure
@@ -907,7 +907,7 @@  echo "  --enable-docs            enable documentation build"
 echo "  --disable-docs           disable documentation build"
 echo "  --disable-vhost-net      disable vhost-net acceleration support"
 echo "  --enable-vhost-net       enable vhost-net acceleration support"
-echo "  --enable-trace-backend=B Trace backend nop simple ust dtrace"
+echo "  --enable-trace-backend=B Trace backend nop simple stdio ust dtrace"
 echo "  --with-trace-file=NAME   Full PATH,NAME of file to store traces"
 echo "                           Default:trace-<pid>"
 echo "  --disable-spice          disable spice"
diff --git a/docs/tracing.txt b/docs/tracing.txt
index 963c504..de033ad 100644
--- a/docs/tracing.txt
+++ b/docs/tracing.txt
@@ -133,6 +133,11 @@  source tree.  It may not be as powerful as platform-specific or third-party
 trace backends but it is portable.  This is the recommended trace backend
 unless you have specific needs for more advanced backends.
 
+=== Stdio ===
+
+The "stdio" backend sends trace events directly to standard output during
+emulation.
+
 ==== Monitor commands ====
 
 * info trace
diff --git a/scripts/tracetool b/scripts/tracetool
index fce491c..01f81a1 100755
--- a/scripts/tracetool
+++ b/scripts/tracetool
@@ -19,6 +19,7 @@  Generate tracing code for a file on stdin.
 Backends:
   --nop     Tracing disabled
   --simple  Simple built-in backend
+  --stdio   Stdio built-in backend
   --ust     LTTng User Space Tracing backend
   --dtrace  DTrace/SystemTAP backend
 
@@ -236,6 +237,55 @@  linetoc_end_simple()
 EOF
 }
 
+#STDIO
+linetoh_begin_stdio()
+{
+    return
+}
+
+linetoh_stdio()
+{
+    local name args argnamess argc fmt
+    name=$(get_name "$1")
+    args=$(get_args "$1")
+    argnames=$(get_argnames "$1" ",")
+    argc=$(get_argc "$1")
+    state=$(get_state "$1")
+    fmt=$(get_fmt "$1")
+
+    if [ "$argc" -gt 0 ]; then
+        argnames=", $argnames"
+    fi
+
+    cat <<EOF
+static inline void trace_$name($args)
+{
+    printf("$name $fmt\n" $argnames);
+}
+EOF
+}
+
+linetoh_end_stdio()
+{
+return
+}
+
+linetoc_begin_stdio()
+{
+return
+}
+
+linetoc_stdio()
+{
+return
+}
+
+linetoc_end_stdio()
+{
+return
+}
+#END OF STDIO
+
 # Clean up after UST headers which pollute the namespace
 ust_clean_namespace() {
     cat <<EOF
@@ -546,7 +596,7 @@  targetarch=
 until [ -z "$1" ]
 do
   case "$1" in
-    "--nop" | "--simple" | "--ust" | "--dtrace") backend="${1#--}" ;;
+    "--nop" | "--simple" | "--stdio" | "--ust" | "--dtrace") backend="${1#--}" ;;
 
     "--binary") shift ; binary="$1" ;;
     "--target-arch") shift ; targetarch="$1" ;;