|
@@ -542,18 +542,9 @@ static int process_sample_event(struct perf_tool *tool __maybe_unused,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static struct perf_tool perf_script = {
|
|
|
- .sample = process_sample_event,
|
|
|
- .mmap = perf_event__process_mmap,
|
|
|
- .mmap2 = perf_event__process_mmap2,
|
|
|
- .comm = perf_event__process_comm,
|
|
|
- .exit = perf_event__process_exit,
|
|
|
- .fork = perf_event__process_fork,
|
|
|
- .attr = perf_event__process_attr,
|
|
|
- .tracing_data = perf_event__process_tracing_data,
|
|
|
- .build_id = perf_event__process_build_id,
|
|
|
- .ordered_samples = true,
|
|
|
- .ordering_requires_timestamps = true,
|
|
|
+struct perf_script {
|
|
|
+ struct perf_tool tool;
|
|
|
+ struct perf_session *session;
|
|
|
};
|
|
|
|
|
|
static void sig_handler(int sig __maybe_unused)
|
|
@@ -561,13 +552,13 @@ static void sig_handler(int sig __maybe_unused)
|
|
|
session_done = 1;
|
|
|
}
|
|
|
|
|
|
-static int __cmd_script(struct perf_session *session)
|
|
|
+static int __cmd_script(struct perf_script *script)
|
|
|
{
|
|
|
int ret;
|
|
|
|
|
|
signal(SIGINT, sig_handler);
|
|
|
|
|
|
- ret = perf_session__process_events(session, &perf_script);
|
|
|
+ ret = perf_session__process_events(script->session, &script->tool);
|
|
|
|
|
|
if (debug_mode)
|
|
|
pr_err("Misordered timestamps: %" PRIu64 "\n", nr_unordered);
|
|
@@ -1273,6 +1264,21 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
|
|
|
char *script_path = NULL;
|
|
|
const char **__argv;
|
|
|
int i, j, err;
|
|
|
+ struct perf_script script = {
|
|
|
+ .tool = {
|
|
|
+ .sample = process_sample_event,
|
|
|
+ .mmap = perf_event__process_mmap,
|
|
|
+ .mmap2 = perf_event__process_mmap2,
|
|
|
+ .comm = perf_event__process_comm,
|
|
|
+ .exit = perf_event__process_exit,
|
|
|
+ .fork = perf_event__process_fork,
|
|
|
+ .attr = perf_event__process_attr,
|
|
|
+ .tracing_data = perf_event__process_tracing_data,
|
|
|
+ .build_id = perf_event__process_build_id,
|
|
|
+ .ordered_samples = true,
|
|
|
+ .ordering_requires_timestamps = true,
|
|
|
+ },
|
|
|
+ };
|
|
|
const struct option options[] = {
|
|
|
OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace,
|
|
|
"dump raw trace in ASCII"),
|
|
@@ -1498,10 +1504,12 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
|
|
|
if (!script_name)
|
|
|
setup_pager();
|
|
|
|
|
|
- session = perf_session__new(&file, false, &perf_script);
|
|
|
+ session = perf_session__new(&file, false, &script.tool);
|
|
|
if (session == NULL)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
+ script.session = session;
|
|
|
+
|
|
|
if (cpu_list) {
|
|
|
if (perf_session__cpu_bitmap(session, cpu_list, cpu_bitmap))
|
|
|
return -1;
|
|
@@ -1565,7 +1573,7 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)
|
|
|
if (err < 0)
|
|
|
goto out;
|
|
|
|
|
|
- err = __cmd_script(session);
|
|
|
+ err = __cmd_script(&script);
|
|
|
|
|
|
perf_session__delete(session);
|
|
|
cleanup_scripting();
|