diff options
Diffstat (limited to 'tools/perf/builtin-script.c')
| -rw-r--r-- | tools/perf/builtin-script.c | 42 | 
1 files changed, 39 insertions, 3 deletions
| diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index b3bf35512d21..568ddfac3213 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -180,6 +180,18 @@ static struct {  				  PERF_OUTPUT_EVNAME | PERF_OUTPUT_TRACE  	}, +	[PERF_TYPE_HW_CACHE] = { +		.user_set = false, + +		.fields = PERF_OUTPUT_COMM | PERF_OUTPUT_TID | +			      PERF_OUTPUT_CPU | PERF_OUTPUT_TIME | +			      PERF_OUTPUT_EVNAME | PERF_OUTPUT_IP | +			      PERF_OUTPUT_SYM | PERF_OUTPUT_SYMOFFSET | +			      PERF_OUTPUT_DSO | PERF_OUTPUT_PERIOD, + +		.invalid_fields = PERF_OUTPUT_TRACE | PERF_OUTPUT_BPF_OUTPUT, +	}, +  	[PERF_TYPE_RAW] = {  		.user_set = false, @@ -1822,6 +1834,7 @@ static int process_attr(struct perf_tool *tool, union perf_event *event,  	struct perf_evlist *evlist;  	struct perf_evsel *evsel, *pos;  	int err; +	static struct perf_evsel_script *es;  	err = perf_event__process_attr(tool, event, pevlist);  	if (err) @@ -1830,6 +1843,19 @@ static int process_attr(struct perf_tool *tool, union perf_event *event,  	evlist = *pevlist;  	evsel = perf_evlist__last(*pevlist); +	if (!evsel->priv) { +		if (scr->per_event_dump) { +			evsel->priv = perf_evsel_script__new(evsel, +						scr->session->data); +		} else { +			es = zalloc(sizeof(*es)); +			if (!es) +				return -ENOMEM; +			es->fp = stdout; +			evsel->priv = es; +		} +	} +  	if (evsel->attr.type >= PERF_TYPE_MAX &&  	    evsel->attr.type != PERF_TYPE_SYNTH)  		return 0; @@ -3018,6 +3044,15 @@ int process_cpu_map_event(struct perf_tool *tool __maybe_unused,  	return set_maps(script);  } +static int process_feature_event(struct perf_tool *tool, +				 union perf_event *event, +				 struct perf_session *session) +{ +	if (event->feat.feat_id < HEADER_LAST_FEATURE) +		return perf_event__process_feature(tool, event, session); +	return 0; +} +  #ifdef HAVE_AUXTRACE_SUPPORT  static int perf_script__process_auxtrace_info(struct perf_tool *tool,  					      union perf_event *event, @@ -3062,7 +3097,7 @@ int cmd_script(int argc, const char **argv)  			.attr		 = process_attr,  			.event_update   = perf_event__process_event_update,  			.tracing_data	 = perf_event__process_tracing_data, -			.feature	 = perf_event__process_feature, +			.feature	 = process_feature_event,  			.build_id	 = perf_event__process_build_id,  			.id_index	 = perf_event__process_id_index,  			.auxtrace_info	 = perf_script__process_auxtrace_info, @@ -3113,8 +3148,9 @@ int cmd_script(int argc, const char **argv)  		     "+field to add and -field to remove."  		     "Valid types: hw,sw,trace,raw,synth. "  		     "Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso," -		     "addr,symoff,period,iregs,uregs,brstack,brstacksym,flags," -		     "bpf-output,callindent,insn,insnlen,brstackinsn,synth,phys_addr", +		     "addr,symoff,srcline,period,iregs,uregs,brstack," +		     "brstacksym,flags,bpf-output,brstackinsn,brstackoff," +		     "callindent,insn,insnlen,synth,phys_addr,metric,misc",  		     parse_output_fields),  	OPT_BOOLEAN('a', "all-cpus", &system_wide,  		    "system-wide collection from all CPUs"), |