diff options
Diffstat (limited to 'tools/perf/builtin-script.c')
| -rw-r--r-- | tools/perf/builtin-script.c | 34 | 
1 files changed, 16 insertions, 18 deletions
| diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index ce304dfd962a..58f10b8e6ff2 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -446,9 +446,9 @@ static void print_sample_bts(union perf_event *event,  }  static void process_event(union perf_event *event, struct perf_sample *sample, -			  struct perf_evsel *evsel, struct thread *thread, -			  struct addr_location *al) +			  struct perf_evsel *evsel, struct addr_location *al)  { +	struct thread *thread = al->thread;  	struct perf_event_attr *attr = &evsel->attr;  	if (output[attr->type].fields == 0) @@ -549,14 +549,6 @@ static int process_sample_event(struct perf_tool *tool __maybe_unused,  				struct machine *machine)  {  	struct addr_location al; -	struct thread *thread = machine__findnew_thread(machine, sample->pid, -							sample->tid); - -	if (thread == NULL) { -		pr_debug("problem processing %d event, skipping it.\n", -			 event->header.type); -		return -1; -	}  	if (debug_mode) {  		if (sample->time < last_timestamp) { @@ -581,7 +573,7 @@ static int process_sample_event(struct perf_tool *tool __maybe_unused,  	if (cpu_list && !test_bit(sample->cpu, cpu_bitmap))  		return 0; -	scripting_ops->process_event(event, sample, evsel, thread, &al); +	scripting_ops->process_event(event, sample, evsel, &al);  	return 0;  } @@ -800,7 +792,7 @@ static int __cmd_script(struct perf_script *script)  		script->tool.mmap2 = process_mmap2_event;  	} -	ret = perf_session__process_events(script->session, &script->tool); +	ret = perf_session__process_events(script->session);  	if (debug_mode)  		pr_err("Misordered timestamps: %" PRIu64 "\n", nr_unordered); @@ -1523,6 +1515,9 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)  			.ordering_requires_timestamps = true,  		},  	}; +	struct perf_data_file file = { +		.mode = PERF_DATA_MODE_READ, +	};  	const struct option options[] = {  	OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace,  		    "dump raw trace in ASCII"), @@ -1550,7 +1545,7 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)  		    "When printing symbols do not display call chain"),  	OPT_STRING(0, "symfs", &symbol_conf.symfs, "directory",  		    "Look for files with symbols relative to this directory"), -	OPT_CALLBACK('f', "fields", NULL, "str", +	OPT_CALLBACK('F', "fields", NULL, "str",  		     "comma separated output fields prepend with 'type:'. "  		     "Valid types: hw,sw,trace,raw. "  		     "Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso," @@ -1562,6 +1557,10 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)  	OPT_STRING('C', "cpu", &cpu_list, "cpu", "list of cpus to profile"),  	OPT_STRING('c', "comms", &symbol_conf.comm_list_str, "comm[,comm...]",  		   "only display events for these comms"), +	OPT_STRING(0, "pid", &symbol_conf.pid_list_str, "pid[,pid...]", +		   "only consider symbols in these pids"), +	OPT_STRING(0, "tid", &symbol_conf.tid_list_str, "tid[,tid...]", +		   "only consider symbols in these tids"),  	OPT_BOOLEAN('I', "show-info", &show_full_info,  		    "display extended information from perf.data file"),  	OPT_BOOLEAN('\0', "show-kernel-path", &symbol_conf.show_kernel_path, @@ -1570,9 +1569,11 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)  		    "Show the fork/comm/exit events"),  	OPT_BOOLEAN('\0', "show-mmap-events", &script.show_mmap_events,  		    "Show the mmap events"), +	OPT_BOOLEAN('f', "force", &file.force, "don't complain, do it"),  	OPT_END()  	}; -	const char * const script_usage[] = { +	const char * const script_subcommands[] = { "record", "report", NULL }; +	const char *script_usage[] = {  		"perf script [<options>]",  		"perf script [<options>] record <script> [<record-options>] <command>",  		"perf script [<options>] report <script> [script-args]", @@ -1580,13 +1581,10 @@ int cmd_script(int argc, const char **argv, const char *prefix __maybe_unused)  		"perf script [<options>] <top-script> [script-args]",  		NULL  	}; -	struct perf_data_file file = { -		.mode = PERF_DATA_MODE_READ, -	};  	setup_scripting(); -	argc = parse_options(argc, argv, options, script_usage, +	argc = parse_options_subcommand(argc, argv, options, script_subcommands, script_usage,  			     PARSE_OPT_STOP_AT_NON_OPTION);  	file.path = input_name; | 
