+10
tools/perf/builtin-trace.c
+10
tools/perf/builtin-trace.c
···
1138
1138
return err;
1139
1139
}
1140
1140
1141
+
static void trace__symbols__exit(struct trace *trace)
1142
+
{
1143
+
machine__exit(trace->host);
1144
+
trace->host = NULL;
1145
+
1146
+
symbol__exit();
1147
+
}
1148
+
1141
1149
static int syscall__alloc_arg_fmts(struct syscall *sc, int nr_args)
1142
1150
{
1143
1151
int idx;
···
2489
2481
}
2490
2482
2491
2483
out_delete_evlist:
2484
+
trace__symbols__exit(trace);
2485
+
2492
2486
perf_evlist__delete(evlist);
2493
2487
trace->evlist = NULL;
2494
2488
trace->live = false;
+3
-2
tools/perf/util/parse-events.l
+3
-2
tools/perf/util/parse-events.l
···
5
5
%option stack
6
6
%option bison-locations
7
7
%option yylineno
8
+
%option reject
8
9
9
10
%{
10
11
#include <errno.h>
···
340
339
{num_hex} { return value(yyscanner, 16); }
341
340
342
341
{modifier_event} { return str(yyscanner, PE_MODIFIER_EVENT); }
343
-
{bpf_object} { if (!isbpf(yyscanner)) USER_REJECT; return str(yyscanner, PE_BPF_OBJECT); }
344
-
{bpf_source} { if (!isbpf(yyscanner)) USER_REJECT; return str(yyscanner, PE_BPF_SOURCE); }
342
+
{bpf_object} { if (!isbpf(yyscanner)) { USER_REJECT }; return str(yyscanner, PE_BPF_OBJECT); }
343
+
{bpf_source} { if (!isbpf(yyscanner)) { USER_REJECT }; return str(yyscanner, PE_BPF_SOURCE); }
345
344
{name} { return pmu_str_check(yyscanner); }
346
345
"/" { BEGIN(config); return '/'; }
347
346
- { return '-'; }