Since commit "80dd5c4918ab trace: introduce a formal group name for trace
events", tracetool generates C variable names and macro definitions out
of the path to the trace-events-all file.

The current code takes care of turning '/' and '-' characters into
underscores so that the resulting names are valid C tokens. This is
enough because these are the only illegal characters that appear in
a relative path within the QEMU source tree.

Things are different for out of tree builds where the path may contain
arbitrary character combinations, causing tracetool to generate invalid

This may cause a variety of build breaks like below:

trace/generated-tracers.h:4:15: warning: ISO C99 requires whitespace after the 
macro name


trace/generated-tracers.c:17497:13: error: variable or field ‘trace_’ declared 
 static void trace_=build_register_events(void)


trace/generated-tracers.c: In function ‘trace_2build_register_event’:
trace/generated-tracers.c:17499:32: error: invalid suffix "build_trace_events" 
on integer constant

This patch ensures that only letters [A-Za-z], digits [0-9] and underscores
are kept. All other characters are turned into underscores. Also, since the
first character of C symbol names cannot be a digit, an underscore is
prepended to the group name.

Signed-off-by: Greg Kurz <>
 scripts/ |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/scripts/ b/scripts/
index 629b2593c846..b81b834db924 100755
--- a/scripts/
+++ b/scripts/
@@ -70,7 +70,7 @@ def make_group_name(filename):
     if dirname == "":
         return "common"
-    return re.sub(r"/|-", "_", dirname)
+    return "_" + re.sub(r"[^\w]", "_", dirname)
 def main(args):
     global _SCRIPT

Reply via email to