X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=trace%2Fcontrol.c;h=ed38e813b23d92d9c2856efbfdfedf399330b933;hb=117856c3748dfda50351d1c0328486ede5f2646c;hp=cd04dd4e0c1cd009410c9d1021b9b5cb468ab158;hpb=6745c8a01f759b64d3c4cd1e0a69bb793cead268;p=mirror_qemu.git diff --git a/trace/control.c b/trace/control.c index cd04dd4e0c..ed38e813b2 100644 --- a/trace/control.c +++ b/trace/control.c @@ -40,6 +40,7 @@ static size_t nevent_groups; static uint32_t next_id; static uint32_t next_vcpu_id; static bool init_trace_on_startup; +static char *trace_opts_file; QemuOptsList qemu_trace_opts = { .name = "trace", @@ -90,7 +91,7 @@ TraceEvent *trace_event_name(const char *name) TraceEventIter iter; TraceEvent *ev; - trace_event_iter_init(&iter, NULL); + trace_event_iter_init_all(&iter); while ((ev = trace_event_iter_next(&iter)) != NULL) { if (strcmp(trace_event_get_name(ev), name) == 0) { return ev; @@ -99,10 +100,16 @@ TraceEvent *trace_event_name(const char *name) return NULL; } -void trace_event_iter_init(TraceEventIter *iter, const char *pattern) +void trace_event_iter_init_all(TraceEventIter *iter) { iter->event = 0; iter->group = 0; + iter->pattern = NULL; +} + +void trace_event_iter_init_pattern(TraceEventIter *iter, const char *pattern) +{ + trace_event_iter_init_all(iter); iter->pattern = pattern; } @@ -129,7 +136,7 @@ void trace_list_events(FILE *f) { TraceEventIter iter; TraceEvent *ev; - trace_event_iter_init(&iter, NULL); + trace_event_iter_init_all(&iter); while ((ev = trace_event_iter_next(&iter)) != NULL) { fprintf(f, "%s\n", trace_event_get_name(ev)); } @@ -149,7 +156,7 @@ static void do_trace_enable_events(const char *line_buf) TraceEvent *ev; bool is_pattern = trace_event_is_pattern(line_ptr); - trace_event_iter_init(&iter, line_ptr); + trace_event_iter_init_pattern(&iter, line_ptr); while ((ev = trace_event_iter_next(&iter)) != NULL) { if (!trace_event_get_state_static(ev)) { if (!is_pattern) { @@ -224,10 +231,8 @@ static void trace_init_events(const char *fname) void trace_init_file(void) { - QemuOpts *opts = qemu_find_opts_singleton("trace"); - const char *file = qemu_opt_get(opts, "file"); #ifdef CONFIG_TRACE_SIMPLE - st_set_trace_file(file); + st_set_trace_file(trace_opts_file); if (init_trace_on_startup) { st_set_trace_file_enabled(true); } @@ -238,11 +243,11 @@ void trace_init_file(void) * backend. However we should only override -D if we actually have * something to override it with. */ - if (file) { - qemu_set_log_filename(file, &error_fatal); + if (trace_opts_file) { + qemu_set_log_filename(trace_opts_file, &error_fatal); } #else - if (file) { + if (trace_opts_file) { fprintf(stderr, "error: --trace file=...: " "option not supported by the selected tracing backends\n"); exit(1); @@ -257,7 +262,7 @@ void trace_fini_vcpu(CPUState *vcpu) trace_guest_cpu_exit(vcpu); - trace_event_iter_init(&iter, NULL); + trace_event_iter_init_all(&iter); while ((ev = trace_event_iter_next(&iter)) != NULL) { if (trace_event_is_vcpu(ev) && trace_event_get_state_static(ev) && @@ -303,6 +308,8 @@ void trace_opt_parse(const char *optarg) } trace_init_events(qemu_opt_get(opts, "events")); init_trace_on_startup = true; + g_free(trace_opts_file); + trace_opts_file = g_strdup(qemu_opt_get(opts, "file")); qemu_opts_del(opts); }