[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 05/10] trace: [tracetool] Common functions to manage
From: |
Lluís Vilanova |
Subject: |
[Qemu-devel] [PATCH 05/10] trace: [tracetool] Common functions to manage event arguments |
Date: |
Thu, 08 Dec 2011 23:49:08 +0100 |
User-agent: |
StGit/0.15 |
This adds:
* zip_lists: Pair elements from two lists.
* get_argtypes: Get the list of types of the arguments; can optionally transform
the types in the process.
The function 'get_args' is modified to use a combination of 'get_argnames',
'get_argtypes', 'zip_lists' and, optionally, use the type transformation
capabilities of 'get_argtypes'.
Signed-off-by: Lluís Vilanova <address@hidden>
---
scripts/tracetool | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 116 insertions(+), 1 deletions(-)
diff --git a/scripts/tracetool b/scripts/tracetool
index 4c9951d..f2b6680 100755
--- a/scripts/tracetool
+++ b/scripts/tracetool
@@ -74,15 +74,130 @@ has_property()
return 1
}
+# Convenience function to pair elements from two comma-separated lists of equal
+# size.
+# 1: first list
+# 2: second list
+# 3: printf format for each pair of elements (optional, default: "%s %s, ")
+zip_lists()
+{
+ [ -n "$1" -a -n "$2" ] || return
+
+ local format
+ format=$3
+ [ -n "$format" ] || format="%s %s, "
+
+ local i elem accum
+ i=1
+ accum=""
+ for elem in $1; do
+ if [ "$elem" = "${elem%,}" ]; then
+ accum="$accum $elem"
+ else
+ accum="$accum ${elem%,}"
+ eval __elem_$i=\"$accum\"
+ i=$(($i + 1))
+ accum=""
+ fi
+ done
+ eval __elem_$i=\"$accum\"
+
+ local tmp res
+ accum=""
+ res=""
+ i=1
+ for elem in $2; do
+ if [ "$elem" = "${elem%,}" ]; then
+ accum="$accum $elem"
+ else
+ accum="$accum ${elem%,}"
+ eval tmp=\$__elem_$i
+ tmp=$(printf "$format" "$tmp" "$accum")
+ res="$res$tmp"
+ i=$(($i + 1))
+ accum=""
+ fi
+ done
+ eval tmp=\$__elem_$i
+ tmp=$(printf "$format" "$tmp" "$accum")
+ res="$res$tmp"
+ res="${res%, }"
+ echo $res
+}
+
# Get the argument list of a trace event, including types and names
+# 1: event name
+# 2: passed as the second argument to 'get_argtypes' (optional)
get_args()
{
local args
args=${1#*\(}
args=${args%%\)*}
- echo "$args"
+
+ if [ -z "$2" -o "$args" = "void" ]; then
+ echo "$args"
+ else
+ local argtypes argnames res
+ argtypes=$(get_argtypes "$1" $2)
+ argnames=$(get_argnames "$1" ",")
+ res=$(zip_lists "$argtypes" "$argnames")
+ echo "${res#, }"
+ fi
}
+# Get the argument type list of a trace event
+# 1: event name
+# 2: function to translate each of the types (optional, default: nil_type)
+get_argtypes()
+{
+ local translate field type res
+
+ translate=$2
+ [ -n "$translate" ] || translate=nil_type
+
+ res=""
+ type=""
+ for field in $(get_args "$1"); do
+ if [ "${field%,}" != "${field}" ]; then
+ # it's a name, but can have a star in it
+ [ "${field#\*}" = "$field" ] || type="${type}*"
+ # trim spaces
+ type="${type## }"
+ type="${type%% }"
+ # translate
+ type=$($translate "$type")
+ res="$res$type, "
+ type=""
+ else
+ # types can have spaces
+ type="$type $field"
+ fi
+ done
+
+ # remove the accumulated name
+ field="${type##* }"
+ type="${type% *}"
+
+ # trim spaces
+ type="${type## }"
+ type="${type%% }"
+
+ # it's a name, but can have a star in it
+ [ "${field#\*}" = "$field" ] || type="${type}*"
+ # translate
+ type=$($translate "$type")
+ res="$res$type"
+
+ echo $res
+}
+
+# No-op type translator for get_argtypes
+nil_type()
+{
+ echo "$1"
+}
+
+
# Get the argument name list of a trace event
get_argnames()
{
- [Qemu-devel] [RFC][PATCH 00/10] trace-tcg: Allow tracing guest events in TCG-generated code, Lluís Vilanova, 2011/12/08
- [Qemu-devel] [PATCH 01/10] trace: [doc] Document event properties on a separate section, Lluís Vilanova, 2011/12/08
- [Qemu-devel] [PATCH 02/10] trace-tcg: Add documentation, Lluís Vilanova, 2011/12/08
- [Qemu-devel] [PATCH 03/10] Trivial changes to eliminate auto-generated files, Lluís Vilanova, 2011/12/08
- [Qemu-devel] [PATCH 04/10] [m68k, s390, xtensa] Move helpers.h to helper.h, Lluís Vilanova, 2011/12/08
- [Qemu-devel] [PATCH 05/10] trace: [tracetool] Common functions to manage event arguments,
Lluís Vilanova <=
- [Qemu-devel] [PATCH 06/10] trace: [tracetool] Add 'get_api_name' to construct the name of tracing routines, Lluís Vilanova, 2011/12/08
- [Qemu-devel] [PATCH 07/10] trace-tcg: [tracetool] Allow TCG types in trace event declarations, Lluís Vilanova, 2011/12/08
- [Qemu-devel] [PATCH 08/10] trace-tcg: [tracetool] Declare TCG tracing helper routines, Lluís Vilanova, 2011/12/08
- [Qemu-devel] [PATCH 09/10] trace-tcg: [tracetool] Define TCG tracing helper routines, Lluís Vilanova, 2011/12/08
- [Qemu-devel] [PATCH 10/10] trace-tcg: [all] Include TCG-tracing helpers, Lluís Vilanova, 2011/12/08