summaryrefslogtreecommitdiff
path: root/trace
diff options
context:
space:
mode:
authorLluís <xscript@gmx.net>2011-08-31 20:31:03 +0200
committerStefan Hajnoczi <stefanha@linux.vnet.ibm.com>2011-09-01 10:34:53 +0100
commite4858974ec36afd8a6b3a9e2b0ad8f357f28efc7 (patch)
treeceb7f2b2cdff3c511e1807e65eb862b82cfac16c /trace
parentedb47ec498a5c00607e8d428668d5141822a9eac (diff)
trace: avoid conditional code compilation during option parsing
A default implementation for backend-specific routines is provided in "trace/default.c", which backends can override by setting "trace_default=no" in "configure". Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu>
Diffstat (limited to 'trace')
-rw-r--r--trace/control.h24
-rw-r--r--trace/default.c21
-rw-r--r--trace/simple.c10
-rw-r--r--trace/simple.h8
4 files changed, 51 insertions, 12 deletions
diff --git a/trace/control.h b/trace/control.h
new file mode 100644
index 0000000000..bb54339258
--- /dev/null
+++ b/trace/control.h
@@ -0,0 +1,24 @@
+/*
+ * Interface for configuring and controlling the state of tracing events.
+ *
+ * Copyright (C) 2011 Lluís Vilanova <vilanova@ac.upc.edu>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2. See
+ * the COPYING file in the top-level directory.
+ */
+
+#ifndef TRACE_CONTROL_H
+#define TRACE_CONTROL_H
+
+#include <stdbool.h>
+
+
+/** Initialize the tracing backend.
+ *
+ * @file Name of trace output file; may be NULL.
+ * Corresponds to commandline option "-trace file=...".
+ * @return Whether the backend could be successfully initialized.
+ */
+bool trace_backend_init(const char *file);
+
+#endif /* TRACE_CONTROL_H */
diff --git a/trace/default.c b/trace/default.c
new file mode 100644
index 0000000000..42fdb6b6a4
--- /dev/null
+++ b/trace/default.c
@@ -0,0 +1,21 @@
+/*
+ * Default implementation for backend initialization from commandline.
+ *
+ * Copyright (C) 2011 Lluís Vilanova <vilanova@ac.upc.edu>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2. See
+ * the COPYING file in the top-level directory.
+ */
+
+#include "trace/control.h"
+
+
+bool trace_backend_init(const char *file)
+{
+ if (file) {
+ fprintf(stderr, "error: -trace file=...: "
+ "option not supported by the selected tracing backend\n");
+ return false;
+ }
+ return true;
+}
diff --git a/trace/simple.c b/trace/simple.c
index de355e9675..369e860305 100644
--- a/trace/simple.c
+++ b/trace/simple.c
@@ -16,6 +16,7 @@
#include <pthread.h>
#include "qemu-timer.h"
#include "trace.h"
+#include "trace/control.h"
/** Trace file header event ID */
#define HEADER_EVENT_ID (~(uint64_t)0) /* avoids conflicting with TraceEventIDs */
@@ -330,7 +331,7 @@ void st_flush_trace_buffer(void)
flush_trace_file(true);
}
-bool st_init(const char *file)
+bool trace_backend_init(const char *file)
{
pthread_t thread;
pthread_attr_t attr;
@@ -346,10 +347,11 @@ bool st_init(const char *file)
pthread_sigmask(SIG_SETMASK, &oldset, NULL);
if (ret != 0) {
- return false;
+ fprintf(stderr, "warning: unable to initialize simple trace backend\n");
+ } else {
+ atexit(st_flush_trace_buffer);
+ st_set_trace_file(file);
}
- atexit(st_flush_trace_buffer);
- st_set_trace_file(file);
return true;
}
diff --git a/trace/simple.h b/trace/simple.h
index 77633ab68a..08b9a52146 100644
--- a/trace/simple.h
+++ b/trace/simple.h
@@ -15,7 +15,6 @@
#include <stdbool.h>
#include <stdio.h>
-#ifdef CONFIG_TRACE_SIMPLE
typedef uint64_t TraceEventID;
typedef struct {
@@ -37,12 +36,5 @@ void st_print_trace_file_status(FILE *stream, fprintf_function stream_printf);
void st_set_trace_file_enabled(bool enable);
bool st_set_trace_file(const char *file);
void st_flush_trace_buffer(void);
-bool st_init(const char *file);
-#else
-static inline bool st_init(const char *file)
-{
- return true;
-}
-#endif /* !CONFIG_TRACE_SIMPLE */
#endif /* TRACE_SIMPLE_H */