trace: generalize the "property" concept in the trace-events file

This adds/modifies the following functions:

* get_name: Get _only_ the event name
* has_property: Return whether an event has a property (keyword before the event
  name)

Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu>
This commit is contained in:
Lluís 2011-08-31 20:31:10 +02:00 committed by Stefan Hajnoczi
parent e4858974ec
commit 49926043c1
2 changed files with 35 additions and 42 deletions

View file

@ -38,7 +38,7 @@ generate code for the trace events. Trace events are invoked directly from
source code like this: source code like this:
#include "trace.h" /* needed for trace event prototype */ #include "trace.h" /* needed for trace event prototype */
void *qemu_malloc(size_t size) void *qemu_malloc(size_t size)
{ {
void *ptr; void *ptr;
@ -103,7 +103,7 @@ portability macros, ensure they are preceded and followed by double quotes:
4. Name trace events after their function. If there are multiple trace events 4. Name trace events after their function. If there are multiple trace events
in one function, append a unique distinguisher at the end of the name. in one function, append a unique distinguisher at the end of the name.
5. Declare trace events with the "disable" keyword. Some trace events can 5. Declare trace events with the "disable" property. Some trace events can
produce a lot of output and users are typically only interested in a subset produce a lot of output and users are typically only interested in a subset
of trace events. Marking trace events disabled by default saves the user of trace events. Marking trace events disabled by default saves the user
from having to manually disable noisy trace events. from having to manually disable noisy trace events.

View file

@ -43,7 +43,26 @@ EOF
# Get the name of a trace event # Get the name of a trace event
get_name() get_name()
{ {
echo ${1%%\(*} local name
name=${1%%\(*}
echo "${name##* }"
}
# Get the given property of a trace event
# 1: trace-events line
# 2: property name
# -> return 0 if property is present, or 1 otherwise
has_property()
{
local props prop
props=${1%%\(*}
props=${props% *}
for prop in $props; do
if [ "$prop" = "$2" ]; then
return 0
fi
done
return 1
} }
# Get the argument list of a trace event, including types and names # Get the argument list of a trace event, including types and names
@ -101,20 +120,6 @@ get_fmt()
echo "$fmt" echo "$fmt"
} }
# Get the state of a trace event
get_state()
{
local str disable state
str=$(get_name "$1")
disable=${str##disable }
if [ "$disable" = "$str" ] ; then
state=1
else
state=0
fi
echo "$state"
}
linetoh_begin_nop() linetoh_begin_nop()
{ {
return return
@ -174,14 +179,10 @@ cast_args_to_uint64_t()
linetoh_simple() linetoh_simple()
{ {
local name args argc trace_args state local name args argc trace_args
name=$(get_name "$1") name=$(get_name "$1")
args=$(get_args "$1") args=$(get_args "$1")
argc=$(get_argc "$1") argc=$(get_argc "$1")
state=$(get_state "$1")
if [ "$state" = "0" ]; then
name=${name##disable }
fi
trace_args="$simple_event_num" trace_args="$simple_event_num"
if [ "$argc" -gt 0 ] if [ "$argc" -gt 0 ]
@ -222,9 +223,10 @@ linetoc_simple()
{ {
local name state local name state
name=$(get_name "$1") name=$(get_name "$1")
state=$(get_state "$1") if has_property "$1" "disable"; then
if [ "$state" = "0" ] ; then state="0"
name=${name##disable } else
state="1"
fi fi
cat <<EOF cat <<EOF
{.tp_name = "$name", .state=$state}, {.tp_name = "$name", .state=$state},
@ -379,14 +381,10 @@ EOF
linetoh_dtrace() linetoh_dtrace()
{ {
local name args argnames state nameupper local name args argnames nameupper
name=$(get_name "$1") name=$(get_name "$1")
args=$(get_args "$1") args=$(get_args "$1")
argnames=$(get_argnames "$1", ",") argnames=$(get_argnames "$1", ",")
state=$(get_state "$1")
if [ "$state" = "0" ] ; then
name=${name##disable }
fi
nameupper=`echo $name | tr '[:lower:]' '[:upper:]'` nameupper=`echo $name | tr '[:lower:]' '[:upper:]'`
@ -430,13 +428,9 @@ EOF
linetod_dtrace() linetod_dtrace()
{ {
local name args state local name args
name=$(get_name "$1") name=$(get_name "$1")
args=$(get_args "$1") args=$(get_args "$1")
state=$(get_state "$1")
if [ "$state" = "0" ] ; then
name=${name##disable }
fi
# DTrace provider syntax expects foo() for empty # DTrace provider syntax expects foo() for empty
# params, not foo(void) # params, not foo(void)
@ -464,14 +458,10 @@ linetostap_begin_dtrace()
linetostap_dtrace() linetostap_dtrace()
{ {
local i arg name args arglist state local i arg name args arglist
name=$(get_name "$1") name=$(get_name "$1")
args=$(get_args "$1") args=$(get_args "$1")
arglist=$(get_argnames "$1", "") arglist=$(get_argnames "$1", "")
state=$(get_state "$1")
if [ "$state" = "0" ] ; then
name=${name##disable }
fi
# Define prototype for probe arguments # Define prototype for probe arguments
cat <<EOF cat <<EOF
@ -517,9 +507,12 @@ convert()
test -z "${str%%#*}" && continue test -z "${str%%#*}" && continue
# Process the line. The nop backend handles disabled lines. # Process the line. The nop backend handles disabled lines.
disable=${str%%disable *} disable="0"
if has_property "$str" "disable"; then
disable="1"
fi
echo echo
if test -z "$disable"; then if [ "$disable" = "1" ]; then
# Pass the disabled state as an arg for the simple # Pass the disabled state as an arg for the simple
# or DTrace backends which handle it dynamically. # or DTrace backends which handle it dynamically.
# For all other backends, call lineto$1_nop() # For all other backends, call lineto$1_nop()