Statistics
| Branch: | Revision:

root / tracetool @ 7e24e92a

History | View | Annotate | Download (6.2 kB)

1 94a420b1 Stefan Hajnoczi
#!/bin/sh
2 94a420b1 Stefan Hajnoczi
#
3 94a420b1 Stefan Hajnoczi
# Code generator for trace events
4 94a420b1 Stefan Hajnoczi
#
5 94a420b1 Stefan Hajnoczi
# Copyright IBM, Corp. 2010
6 94a420b1 Stefan Hajnoczi
#
7 94a420b1 Stefan Hajnoczi
# This work is licensed under the terms of the GNU GPL, version 2.  See
8 94a420b1 Stefan Hajnoczi
# the COPYING file in the top-level directory.
9 94a420b1 Stefan Hajnoczi
10 94a420b1 Stefan Hajnoczi
# Disable pathname expansion, makes processing text with '*' characters simpler
11 94a420b1 Stefan Hajnoczi
set -f
12 94a420b1 Stefan Hajnoczi
13 94a420b1 Stefan Hajnoczi
usage()
14 94a420b1 Stefan Hajnoczi
{
15 94a420b1 Stefan Hajnoczi
    cat >&2 <<EOF
16 7e24e92a Stefan Hajnoczi
usage: $0 [--nop | --simple | --ust] [-h | -c]
17 94a420b1 Stefan Hajnoczi
Generate tracing code for a file on stdin.
18 94a420b1 Stefan Hajnoczi
19 94a420b1 Stefan Hajnoczi
Backends:
20 26f7227b Stefan Hajnoczi
  --nop     Tracing disabled
21 26f7227b Stefan Hajnoczi
  --simple  Simple built-in backend
22 7e24e92a Stefan Hajnoczi
  --ust     LTTng User Space Tracing backend
23 94a420b1 Stefan Hajnoczi
24 94a420b1 Stefan Hajnoczi
Output formats:
25 94a420b1 Stefan Hajnoczi
  -h    Generate .h file
26 94a420b1 Stefan Hajnoczi
  -c    Generate .c file
27 94a420b1 Stefan Hajnoczi
EOF
28 94a420b1 Stefan Hajnoczi
    exit 1
29 94a420b1 Stefan Hajnoczi
}
30 94a420b1 Stefan Hajnoczi
31 94a420b1 Stefan Hajnoczi
# Get the name of a trace event
32 94a420b1 Stefan Hajnoczi
get_name()
33 94a420b1 Stefan Hajnoczi
{
34 94a420b1 Stefan Hajnoczi
    echo ${1%%\(*}
35 94a420b1 Stefan Hajnoczi
}
36 94a420b1 Stefan Hajnoczi
37 94a420b1 Stefan Hajnoczi
# Get the argument list of a trace event, including types and names
38 94a420b1 Stefan Hajnoczi
get_args()
39 94a420b1 Stefan Hajnoczi
{
40 94a420b1 Stefan Hajnoczi
    local args
41 94a420b1 Stefan Hajnoczi
    args=${1#*\(}
42 94a420b1 Stefan Hajnoczi
    args=${args%)*}
43 94a420b1 Stefan Hajnoczi
    echo "$args"
44 94a420b1 Stefan Hajnoczi
}
45 94a420b1 Stefan Hajnoczi
46 94a420b1 Stefan Hajnoczi
# Get the argument name list of a trace event
47 94a420b1 Stefan Hajnoczi
get_argnames()
48 94a420b1 Stefan Hajnoczi
{
49 94a420b1 Stefan Hajnoczi
    local nfields field name
50 94a420b1 Stefan Hajnoczi
    nfields=0
51 94a420b1 Stefan Hajnoczi
    for field in $(get_args "$1"); do
52 94a420b1 Stefan Hajnoczi
        nfields=$((nfields + 1))
53 94a420b1 Stefan Hajnoczi
54 94a420b1 Stefan Hajnoczi
        # Drop pointer star
55 94a420b1 Stefan Hajnoczi
        field=${field#\*}
56 94a420b1 Stefan Hajnoczi
57 94a420b1 Stefan Hajnoczi
        # Only argument names have commas at the end
58 94a420b1 Stefan Hajnoczi
        name=${field%,}
59 94a420b1 Stefan Hajnoczi
        test "$field" = "$name" && continue
60 94a420b1 Stefan Hajnoczi
61 94a420b1 Stefan Hajnoczi
        printf "%s" "$name, "
62 94a420b1 Stefan Hajnoczi
    done
63 94a420b1 Stefan Hajnoczi
64 94a420b1 Stefan Hajnoczi
    # Last argument name
65 94a420b1 Stefan Hajnoczi
    if [ "$nfields" -gt 1 ]
66 94a420b1 Stefan Hajnoczi
    then
67 94a420b1 Stefan Hajnoczi
        printf "%s" "$name"
68 94a420b1 Stefan Hajnoczi
    fi
69 94a420b1 Stefan Hajnoczi
}
70 94a420b1 Stefan Hajnoczi
71 26f7227b Stefan Hajnoczi
# Get the number of arguments to a trace event
72 26f7227b Stefan Hajnoczi
get_argc()
73 26f7227b Stefan Hajnoczi
{
74 26f7227b Stefan Hajnoczi
    local name argc
75 26f7227b Stefan Hajnoczi
    argc=0
76 26f7227b Stefan Hajnoczi
    for name in $(get_argnames "$1"); do
77 26f7227b Stefan Hajnoczi
        argc=$((argc + 1))
78 26f7227b Stefan Hajnoczi
    done
79 26f7227b Stefan Hajnoczi
    echo $argc
80 26f7227b Stefan Hajnoczi
}
81 26f7227b Stefan Hajnoczi
82 94a420b1 Stefan Hajnoczi
# Get the format string for a trace event
83 94a420b1 Stefan Hajnoczi
get_fmt()
84 94a420b1 Stefan Hajnoczi
{
85 94a420b1 Stefan Hajnoczi
    local fmt
86 94a420b1 Stefan Hajnoczi
    fmt=${1#*\"}
87 94a420b1 Stefan Hajnoczi
    fmt=${fmt%\"*}
88 94a420b1 Stefan Hajnoczi
    echo "$fmt"
89 94a420b1 Stefan Hajnoczi
}
90 94a420b1 Stefan Hajnoczi
91 1e2cf2bc Stefan Hajnoczi
# Get the state of a trace event
92 1e2cf2bc Stefan Hajnoczi
get_state()
93 1e2cf2bc Stefan Hajnoczi
{
94 1e2cf2bc Stefan Hajnoczi
    local str disable state
95 1e2cf2bc Stefan Hajnoczi
    str=$(get_name "$1")
96 1e2cf2bc Stefan Hajnoczi
    disable=${str##disable }
97 1e2cf2bc Stefan Hajnoczi
    if [ "$disable" = "$str" ] ; then
98 1e2cf2bc Stefan Hajnoczi
        state=1
99 1e2cf2bc Stefan Hajnoczi
    else
100 1e2cf2bc Stefan Hajnoczi
        state=0
101 1e2cf2bc Stefan Hajnoczi
    fi
102 1e2cf2bc Stefan Hajnoczi
    echo "$state"
103 1e2cf2bc Stefan Hajnoczi
}
104 1e2cf2bc Stefan Hajnoczi
105 94a420b1 Stefan Hajnoczi
linetoh_begin_nop()
106 94a420b1 Stefan Hajnoczi
{
107 94a420b1 Stefan Hajnoczi
    return
108 94a420b1 Stefan Hajnoczi
}
109 94a420b1 Stefan Hajnoczi
110 94a420b1 Stefan Hajnoczi
linetoh_nop()
111 94a420b1 Stefan Hajnoczi
{
112 94a420b1 Stefan Hajnoczi
    local name args
113 94a420b1 Stefan Hajnoczi
    name=$(get_name "$1")
114 94a420b1 Stefan Hajnoczi
    args=$(get_args "$1")
115 94a420b1 Stefan Hajnoczi
116 94a420b1 Stefan Hajnoczi
    # Define an empty function for the trace event
117 94a420b1 Stefan Hajnoczi
    cat <<EOF
118 94a420b1 Stefan Hajnoczi
static inline void trace_$name($args)
119 94a420b1 Stefan Hajnoczi
{
120 94a420b1 Stefan Hajnoczi
}
121 94a420b1 Stefan Hajnoczi
EOF
122 94a420b1 Stefan Hajnoczi
}
123 94a420b1 Stefan Hajnoczi
124 94a420b1 Stefan Hajnoczi
linetoh_end_nop()
125 94a420b1 Stefan Hajnoczi
{
126 94a420b1 Stefan Hajnoczi
    return
127 94a420b1 Stefan Hajnoczi
}
128 94a420b1 Stefan Hajnoczi
129 94a420b1 Stefan Hajnoczi
linetoc_begin_nop()
130 94a420b1 Stefan Hajnoczi
{
131 94a420b1 Stefan Hajnoczi
    return
132 94a420b1 Stefan Hajnoczi
}
133 94a420b1 Stefan Hajnoczi
134 94a420b1 Stefan Hajnoczi
linetoc_nop()
135 94a420b1 Stefan Hajnoczi
{
136 94a420b1 Stefan Hajnoczi
    # No need for function definitions in nop backend
137 94a420b1 Stefan Hajnoczi
    return
138 94a420b1 Stefan Hajnoczi
}
139 94a420b1 Stefan Hajnoczi
140 94a420b1 Stefan Hajnoczi
linetoc_end_nop()
141 94a420b1 Stefan Hajnoczi
{
142 94a420b1 Stefan Hajnoczi
    return
143 94a420b1 Stefan Hajnoczi
}
144 94a420b1 Stefan Hajnoczi
145 26f7227b Stefan Hajnoczi
linetoh_begin_simple()
146 26f7227b Stefan Hajnoczi
{
147 26f7227b Stefan Hajnoczi
    cat <<EOF
148 26f7227b Stefan Hajnoczi
#include "simpletrace.h"
149 26f7227b Stefan Hajnoczi
EOF
150 26f7227b Stefan Hajnoczi
151 26f7227b Stefan Hajnoczi
    simple_event_num=0
152 26f7227b Stefan Hajnoczi
}
153 26f7227b Stefan Hajnoczi
154 26f7227b Stefan Hajnoczi
cast_args_to_uint64_t()
155 26f7227b Stefan Hajnoczi
{
156 26f7227b Stefan Hajnoczi
    local arg
157 26f7227b Stefan Hajnoczi
    for arg in $(get_argnames "$1"); do
158 26f7227b Stefan Hajnoczi
        printf "%s" "(uint64_t)(uintptr_t)$arg"
159 26f7227b Stefan Hajnoczi
    done
160 26f7227b Stefan Hajnoczi
}
161 26f7227b Stefan Hajnoczi
162 26f7227b Stefan Hajnoczi
linetoh_simple()
163 26f7227b Stefan Hajnoczi
{
164 1e2cf2bc Stefan Hajnoczi
    local name args argc trace_args state
165 26f7227b Stefan Hajnoczi
    name=$(get_name "$1")
166 26f7227b Stefan Hajnoczi
    args=$(get_args "$1")
167 26f7227b Stefan Hajnoczi
    argc=$(get_argc "$1")
168 1e2cf2bc Stefan Hajnoczi
    state=$(get_state "$1")
169 1e2cf2bc Stefan Hajnoczi
    if [ "$state" = "0" ]; then
170 1e2cf2bc Stefan Hajnoczi
        name=${name##disable }
171 1e2cf2bc Stefan Hajnoczi
    fi
172 26f7227b Stefan Hajnoczi
173 26f7227b Stefan Hajnoczi
    trace_args="$simple_event_num"
174 26f7227b Stefan Hajnoczi
    if [ "$argc" -gt 0 ]
175 26f7227b Stefan Hajnoczi
    then
176 26f7227b Stefan Hajnoczi
        trace_args="$trace_args, $(cast_args_to_uint64_t "$1")"
177 26f7227b Stefan Hajnoczi
    fi
178 26f7227b Stefan Hajnoczi
179 26f7227b Stefan Hajnoczi
    cat <<EOF
180 26f7227b Stefan Hajnoczi
static inline void trace_$name($args)
181 26f7227b Stefan Hajnoczi
{
182 26f7227b Stefan Hajnoczi
    trace$argc($trace_args);
183 26f7227b Stefan Hajnoczi
}
184 26f7227b Stefan Hajnoczi
EOF
185 26f7227b Stefan Hajnoczi
186 26f7227b Stefan Hajnoczi
    simple_event_num=$((simple_event_num + 1))
187 26f7227b Stefan Hajnoczi
}
188 26f7227b Stefan Hajnoczi
189 26f7227b Stefan Hajnoczi
linetoh_end_simple()
190 26f7227b Stefan Hajnoczi
{
191 22890ab5 Prerna Saxena
    cat <<EOF
192 22890ab5 Prerna Saxena
#define NR_TRACE_EVENTS $simple_event_num
193 22890ab5 Prerna Saxena
extern TraceEvent trace_list[NR_TRACE_EVENTS];
194 22890ab5 Prerna Saxena
EOF
195 26f7227b Stefan Hajnoczi
}
196 26f7227b Stefan Hajnoczi
197 26f7227b Stefan Hajnoczi
linetoc_begin_simple()
198 26f7227b Stefan Hajnoczi
{
199 22890ab5 Prerna Saxena
    cat <<EOF
200 22890ab5 Prerna Saxena
#include "trace.h"
201 22890ab5 Prerna Saxena
202 22890ab5 Prerna Saxena
TraceEvent trace_list[] = {
203 22890ab5 Prerna Saxena
EOF
204 22890ab5 Prerna Saxena
    simple_event_num=0
205 22890ab5 Prerna Saxena
206 26f7227b Stefan Hajnoczi
}
207 26f7227b Stefan Hajnoczi
208 26f7227b Stefan Hajnoczi
linetoc_simple()
209 26f7227b Stefan Hajnoczi
{
210 1e2cf2bc Stefan Hajnoczi
    local name state
211 22890ab5 Prerna Saxena
    name=$(get_name "$1")
212 1e2cf2bc Stefan Hajnoczi
    state=$(get_state "$1")
213 1e2cf2bc Stefan Hajnoczi
    if [ "$state" = "0" ] ; then
214 1e2cf2bc Stefan Hajnoczi
        name=${name##disable }
215 1e2cf2bc Stefan Hajnoczi
    fi
216 22890ab5 Prerna Saxena
    cat <<EOF
217 1e2cf2bc Stefan Hajnoczi
{.tp_name = "$name", .state=$state},
218 22890ab5 Prerna Saxena
EOF
219 22890ab5 Prerna Saxena
    simple_event_num=$((simple_event_num + 1))
220 26f7227b Stefan Hajnoczi
}
221 26f7227b Stefan Hajnoczi
222 26f7227b Stefan Hajnoczi
linetoc_end_simple()
223 26f7227b Stefan Hajnoczi
{
224 22890ab5 Prerna Saxena
    cat <<EOF
225 22890ab5 Prerna Saxena
};
226 22890ab5 Prerna Saxena
EOF
227 26f7227b Stefan Hajnoczi
}
228 26f7227b Stefan Hajnoczi
229 7e24e92a Stefan Hajnoczi
# Clean up after UST headers which pollute the namespace
230 7e24e92a Stefan Hajnoczi
ust_clean_namespace() {
231 7e24e92a Stefan Hajnoczi
    cat <<EOF
232 7e24e92a Stefan Hajnoczi
#undef mutex_lock
233 7e24e92a Stefan Hajnoczi
#undef mutex_unlock
234 7e24e92a Stefan Hajnoczi
#undef inline
235 7e24e92a Stefan Hajnoczi
#undef wmb
236 7e24e92a Stefan Hajnoczi
EOF
237 7e24e92a Stefan Hajnoczi
}
238 7e24e92a Stefan Hajnoczi
239 7e24e92a Stefan Hajnoczi
linetoh_begin_ust()
240 7e24e92a Stefan Hajnoczi
{
241 7e24e92a Stefan Hajnoczi
    echo "#include <ust/tracepoint.h>"
242 7e24e92a Stefan Hajnoczi
    ust_clean_namespace
243 7e24e92a Stefan Hajnoczi
}
244 7e24e92a Stefan Hajnoczi
245 7e24e92a Stefan Hajnoczi
linetoh_ust()
246 7e24e92a Stefan Hajnoczi
{
247 7e24e92a Stefan Hajnoczi
    local name args argnames
248 7e24e92a Stefan Hajnoczi
    name=$(get_name "$1")
249 7e24e92a Stefan Hajnoczi
    args=$(get_args "$1")
250 7e24e92a Stefan Hajnoczi
    argnames=$(get_argnames "$1")
251 7e24e92a Stefan Hajnoczi
252 7e24e92a Stefan Hajnoczi
    cat <<EOF
253 7e24e92a Stefan Hajnoczi
DECLARE_TRACE(ust_$name, TPPROTO($args), TPARGS($argnames));
254 7e24e92a Stefan Hajnoczi
#define trace_$name trace_ust_$name
255 7e24e92a Stefan Hajnoczi
EOF
256 7e24e92a Stefan Hajnoczi
}
257 7e24e92a Stefan Hajnoczi
258 7e24e92a Stefan Hajnoczi
linetoh_end_ust()
259 7e24e92a Stefan Hajnoczi
{
260 7e24e92a Stefan Hajnoczi
    return
261 7e24e92a Stefan Hajnoczi
}
262 7e24e92a Stefan Hajnoczi
263 7e24e92a Stefan Hajnoczi
linetoc_begin_ust()
264 7e24e92a Stefan Hajnoczi
{
265 7e24e92a Stefan Hajnoczi
    cat <<EOF
266 7e24e92a Stefan Hajnoczi
#include <ust/marker.h>
267 7e24e92a Stefan Hajnoczi
$(ust_clean_namespace)
268 7e24e92a Stefan Hajnoczi
#include "trace.h"
269 7e24e92a Stefan Hajnoczi
EOF
270 7e24e92a Stefan Hajnoczi
}
271 7e24e92a Stefan Hajnoczi
272 7e24e92a Stefan Hajnoczi
linetoc_ust()
273 7e24e92a Stefan Hajnoczi
{
274 7e24e92a Stefan Hajnoczi
    local name args argnames fmt
275 7e24e92a Stefan Hajnoczi
    name=$(get_name "$1")
276 7e24e92a Stefan Hajnoczi
    args=$(get_args "$1")
277 7e24e92a Stefan Hajnoczi
    argnames=$(get_argnames "$1")
278 7e24e92a Stefan Hajnoczi
    fmt=$(get_fmt "$1")
279 7e24e92a Stefan Hajnoczi
280 7e24e92a Stefan Hajnoczi
    cat <<EOF
281 7e24e92a Stefan Hajnoczi
DEFINE_TRACE(ust_$name);
282 7e24e92a Stefan Hajnoczi
283 7e24e92a Stefan Hajnoczi
static void ust_${name}_probe($args)
284 7e24e92a Stefan Hajnoczi
{
285 7e24e92a Stefan Hajnoczi
    trace_mark(ust, $name, "$fmt", $argnames);
286 7e24e92a Stefan Hajnoczi
}
287 7e24e92a Stefan Hajnoczi
EOF
288 7e24e92a Stefan Hajnoczi
289 7e24e92a Stefan Hajnoczi
    # Collect names for later
290 7e24e92a Stefan Hajnoczi
    names="$names $name"
291 7e24e92a Stefan Hajnoczi
}
292 7e24e92a Stefan Hajnoczi
293 7e24e92a Stefan Hajnoczi
linetoc_end_ust()
294 7e24e92a Stefan Hajnoczi
{
295 7e24e92a Stefan Hajnoczi
    cat <<EOF
296 7e24e92a Stefan Hajnoczi
static void __attribute__((constructor)) trace_init(void)
297 7e24e92a Stefan Hajnoczi
{
298 7e24e92a Stefan Hajnoczi
EOF
299 7e24e92a Stefan Hajnoczi
300 7e24e92a Stefan Hajnoczi
    for name in $names; do
301 7e24e92a Stefan Hajnoczi
        cat <<EOF
302 7e24e92a Stefan Hajnoczi
    register_trace_ust_$name(ust_${name}_probe);
303 7e24e92a Stefan Hajnoczi
EOF
304 7e24e92a Stefan Hajnoczi
    done
305 7e24e92a Stefan Hajnoczi
306 7e24e92a Stefan Hajnoczi
    echo "}"
307 7e24e92a Stefan Hajnoczi
}
308 7e24e92a Stefan Hajnoczi
309 94a420b1 Stefan Hajnoczi
# Process stdin by calling begin, line, and end functions for the backend
310 94a420b1 Stefan Hajnoczi
convert()
311 94a420b1 Stefan Hajnoczi
{
312 1e2cf2bc Stefan Hajnoczi
    local begin process_line end str disable
313 94a420b1 Stefan Hajnoczi
    begin="lineto$1_begin_$backend"
314 94a420b1 Stefan Hajnoczi
    process_line="lineto$1_$backend"
315 94a420b1 Stefan Hajnoczi
    end="lineto$1_end_$backend"
316 94a420b1 Stefan Hajnoczi
317 94a420b1 Stefan Hajnoczi
    "$begin"
318 94a420b1 Stefan Hajnoczi
319 94a420b1 Stefan Hajnoczi
    while read -r str; do
320 94a420b1 Stefan Hajnoczi
        # Skip comments and empty lines
321 94a420b1 Stefan Hajnoczi
        str=${str%%#*}
322 94a420b1 Stefan Hajnoczi
        test -z "$str" && continue
323 94a420b1 Stefan Hajnoczi
324 1e2cf2bc Stefan Hajnoczi
        # Process the line.  The nop backend handles disabled lines.
325 1e2cf2bc Stefan Hajnoczi
        disable=${str%%disable *}
326 94a420b1 Stefan Hajnoczi
        echo
327 1e2cf2bc Stefan Hajnoczi
        if test -z "$disable"; then
328 1e2cf2bc Stefan Hajnoczi
            # Pass the disabled state as an arg to lineto$1_simple().
329 1e2cf2bc Stefan Hajnoczi
            # For all other cases, call lineto$1_nop()
330 1e2cf2bc Stefan Hajnoczi
            if [ $backend = "simple" ]; then
331 1e2cf2bc Stefan Hajnoczi
                "$process_line" "$str"
332 1e2cf2bc Stefan Hajnoczi
            else
333 1e2cf2bc Stefan Hajnoczi
                "lineto$1_nop" "${str##disable }"
334 1e2cf2bc Stefan Hajnoczi
            fi
335 1e2cf2bc Stefan Hajnoczi
        else
336 1e2cf2bc Stefan Hajnoczi
            "$process_line" "$str"
337 1e2cf2bc Stefan Hajnoczi
        fi
338 94a420b1 Stefan Hajnoczi
    done
339 94a420b1 Stefan Hajnoczi
340 94a420b1 Stefan Hajnoczi
    echo
341 94a420b1 Stefan Hajnoczi
    "$end"
342 94a420b1 Stefan Hajnoczi
}
343 94a420b1 Stefan Hajnoczi
344 94a420b1 Stefan Hajnoczi
tracetoh()
345 94a420b1 Stefan Hajnoczi
{
346 94a420b1 Stefan Hajnoczi
    cat <<EOF
347 94a420b1 Stefan Hajnoczi
#ifndef TRACE_H
348 94a420b1 Stefan Hajnoczi
#define TRACE_H
349 94a420b1 Stefan Hajnoczi
350 94a420b1 Stefan Hajnoczi
/* This file is autogenerated by tracetool, do not edit. */
351 94a420b1 Stefan Hajnoczi
352 94a420b1 Stefan Hajnoczi
#include "qemu-common.h"
353 94a420b1 Stefan Hajnoczi
EOF
354 94a420b1 Stefan Hajnoczi
    convert h
355 94a420b1 Stefan Hajnoczi
    echo "#endif /* TRACE_H */"
356 94a420b1 Stefan Hajnoczi
}
357 94a420b1 Stefan Hajnoczi
358 94a420b1 Stefan Hajnoczi
tracetoc()
359 94a420b1 Stefan Hajnoczi
{
360 94a420b1 Stefan Hajnoczi
    echo "/* This file is autogenerated by tracetool, do not edit. */"
361 94a420b1 Stefan Hajnoczi
    convert c
362 94a420b1 Stefan Hajnoczi
}
363 94a420b1 Stefan Hajnoczi
364 94a420b1 Stefan Hajnoczi
# Choose backend
365 94a420b1 Stefan Hajnoczi
case "$1" in
366 7e24e92a Stefan Hajnoczi
"--nop" | "--simple" | "--ust") backend="${1#--}" ;;
367 94a420b1 Stefan Hajnoczi
*) usage ;;
368 94a420b1 Stefan Hajnoczi
esac
369 94a420b1 Stefan Hajnoczi
shift
370 94a420b1 Stefan Hajnoczi
371 94a420b1 Stefan Hajnoczi
case "$1" in
372 94a420b1 Stefan Hajnoczi
"-h") tracetoh ;;
373 94a420b1 Stefan Hajnoczi
"-c") tracetoc ;;
374 94a420b1 Stefan Hajnoczi
"--check-backend") exit 0 ;; # used by ./configure to test for backend
375 94a420b1 Stefan Hajnoczi
*) usage ;;
376 94a420b1 Stefan Hajnoczi
esac
377 94a420b1 Stefan Hajnoczi
378 94a420b1 Stefan Hajnoczi
exit 0