diff options
Diffstat (limited to 'tools/perf/builtin-script.c')
| -rw-r--r-- | tools/perf/builtin-script.c | 43 | 
1 files changed, 18 insertions, 25 deletions
| diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 9434367af166..ecd4f99a6c14 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -15,6 +15,7 @@  #include "util/symbol.h"  #include "util/thread.h"  #include "util/trace-event.h" +#include "util/env.h"  #include "util/evlist.h"  #include "util/evsel.h"  #include "util/evsel_fprintf.h" @@ -648,7 +649,7 @@ out:  	return 0;  } -static int perf_sample__fprintf_regs(struct regs_dump *regs, uint64_t mask, +static int perf_sample__fprintf_regs(struct regs_dump *regs, uint64_t mask, const char *arch,  				     FILE *fp)  {  	unsigned i = 0, r; @@ -661,7 +662,7 @@ static int perf_sample__fprintf_regs(struct regs_dump *regs, uint64_t mask,  	for_each_set_bit(r, (unsigned long *) &mask, sizeof(mask) * 8) {  		u64 val = regs->regs[i++]; -		printed += fprintf(fp, "%5s:0x%"PRIx64" ", perf_reg_name(r), val); +		printed += fprintf(fp, "%5s:0x%"PRIx64" ", perf_reg_name(r, arch), val);  	}  	return printed; @@ -718,17 +719,17 @@ tod_scnprintf(struct perf_script *script, char *buf, int buflen,  }  static int perf_sample__fprintf_iregs(struct perf_sample *sample, -				      struct perf_event_attr *attr, FILE *fp) +				      struct perf_event_attr *attr, const char *arch, FILE *fp)  {  	return perf_sample__fprintf_regs(&sample->intr_regs, -					 attr->sample_regs_intr, fp); +					 attr->sample_regs_intr, arch, fp);  }  static int perf_sample__fprintf_uregs(struct perf_sample *sample, -				      struct perf_event_attr *attr, FILE *fp) +				      struct perf_event_attr *attr, const char *arch, FILE *fp)  {  	return perf_sample__fprintf_regs(&sample->user_regs, -					 attr->sample_regs_user, fp); +					 attr->sample_regs_user, arch, fp);  }  static int perf_sample__fprintf_start(struct perf_script *script, @@ -2000,6 +2001,7 @@ static void process_event(struct perf_script *script,  	struct evsel_script *es = evsel->priv;  	FILE *fp = es->fp;  	char str[PAGE_SIZE_NAME_LEN]; +	const char *arch = perf_env__arch(machine->env);  	if (output[type].fields == 0)  		return; @@ -2066,10 +2068,10 @@ static void process_event(struct perf_script *script,  	}  	if (PRINT_FIELD(IREGS)) -		perf_sample__fprintf_iregs(sample, attr, fp); +		perf_sample__fprintf_iregs(sample, attr, arch, fp);  	if (PRINT_FIELD(UREGS)) -		perf_sample__fprintf_uregs(sample, attr, fp); +		perf_sample__fprintf_uregs(sample, attr, arch, fp);  	if (PRINT_FIELD(BRSTACK))  		perf_sample__fprintf_brstack(sample, thread, attr, fp); @@ -2113,8 +2115,8 @@ static struct scripting_ops	*scripting_ops;  static void __process_stat(struct evsel *counter, u64 tstamp)  {  	int nthreads = perf_thread_map__nr(counter->core.threads); -	int ncpus = evsel__nr_cpus(counter); -	int cpu, thread; +	int idx, thread; +	struct perf_cpu cpu;  	static int header_printed;  	if (counter->core.system_wide) @@ -2127,13 +2129,13 @@ static void __process_stat(struct evsel *counter, u64 tstamp)  	}  	for (thread = 0; thread < nthreads; thread++) { -		for (cpu = 0; cpu < ncpus; cpu++) { +		perf_cpu_map__for_each_cpu(cpu, idx, evsel__cpus(counter)) {  			struct perf_counts_values *counts; -			counts = perf_counts(counter->counts, cpu, thread); +			counts = perf_counts(counter->counts, idx, thread);  			printf("%3d %8d %15" PRIu64 " %15" PRIu64 " %15" PRIu64 " %15" PRIu64 " %s\n", -				counter->core.cpus->map[cpu], +				cpu.cpu,  				perf_thread_map__pid(counter->core.threads, thread),  				counts->val,  				counts->ena, @@ -2316,7 +2318,7 @@ static int process_attr(struct perf_tool *tool, union perf_event *event,  	 * on events sample_type.  	 */  	sample_type = evlist__combined_sample_type(evlist); -	callchain_param_setup(sample_type); +	callchain_param_setup(sample_type, perf_env__arch((*pevlist)->env));  	/* Enable fields for callchain entries */  	if (symbol_conf.use_callchain && @@ -2473,7 +2475,7 @@ static int process_switch_event(struct perf_tool *tool,  	if (perf_event__process_switch(tool, event, sample, machine) < 0)  		return -1; -	if (scripting_ops && scripting_ops->process_switch) +	if (scripting_ops && scripting_ops->process_switch && !filter_cpu(sample))  		scripting_ops->process_switch(event, sample, machine);  	if (!script->show_switch_events) @@ -3466,16 +3468,7 @@ static void script__setup_sample_type(struct perf_script *script)  	struct perf_session *session = script->session;  	u64 sample_type = evlist__combined_sample_type(session->evlist); -	if (symbol_conf.use_callchain || symbol_conf.cumulate_callchain) { -		if ((sample_type & PERF_SAMPLE_REGS_USER) && -		    (sample_type & PERF_SAMPLE_STACK_USER)) { -			callchain_param.record_mode = CALLCHAIN_DWARF; -			dwarf_callchain_users = true; -		} else if (sample_type & PERF_SAMPLE_BRANCH_STACK) -			callchain_param.record_mode = CALLCHAIN_LBR; -		else -			callchain_param.record_mode = CALLCHAIN_FP; -	} +	callchain_param_setup(sample_type, perf_env__arch(session->machines.host.env));  	if (script->stitch_lbr && (callchain_param.record_mode != CALLCHAIN_LBR)) {  		pr_warning("Can't find LBR callchain. Switch off --stitch-lbr.\n" |