Commit 6186de9a authored by Milian Wolff's avatar Milian Wolff Committed by Arnaldo Carvalho de Melo
Browse files

perf evsel: Allow specifying a file to output in perf_evsel__print_ip

As this function will be used in 'perf trace'.

Cc: Jiri Olsa <jolsa@kernel.org>
Link: http://lkml.kernel.org/n/tip-8x297v9utnxq77onikevvlse@git.kernel.org


[ Split from a larger patch ]
Signed-off-by: default avatarMilian Wolff <milian.wolff@kdab.com>
parent 72c08098
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -580,7 +580,7 @@ static void print_sample_bts(struct perf_sample *sample,
			}
		}
		perf_evsel__print_ip(evsel, sample, al, print_opts,
				     scripting_max_stack);
				     scripting_max_stack, stdout);
	}

	/* print branch_to information */
@@ -790,7 +790,7 @@ static void process_event(struct perf_script *script,

		perf_evsel__print_ip(evsel, sample, al,
				     output[attr->type].print_ip_opts,
				     scripting_max_stack);
				     scripting_max_stack, stdout);
	}

	if (PRINT_FIELD(IREGS))
+21 −18
Original line number Diff line number Diff line
@@ -1955,7 +1955,8 @@ struct perf_evsel *perf_session__find_first_evtype(struct perf_session *session,

void perf_evsel__print_ip(struct perf_evsel *evsel, struct perf_sample *sample,
			  struct addr_location *al,
			  unsigned int print_opts, unsigned int stack_depth)
			  unsigned int print_opts, unsigned int stack_depth,
			  FILE *fp)
{
	struct callchain_cursor_node *node;
	int print_ip = print_opts & PRINT_IP_OPT_IP;
@@ -1992,33 +1993,35 @@ void perf_evsel__print_ip(struct perf_evsel *evsel, struct perf_sample *sample,
				goto next;

			if (print_ip)
				printf("%c%16" PRIx64, s, node->ip);
				fprintf(fp, "%c%16" PRIx64, s, node->ip);

			if (node->map)
				addr = node->map->map_ip(node->map, node->ip);

			if (print_sym) {
				printf(" ");
				fprintf(fp, " ");
				if (print_symoffset) {
					node_al.addr = addr;
					node_al.map  = node->map;
					symbol__fprintf_symname_offs(node->sym, &node_al, stdout);
					symbol__fprintf_symname_offs(node->sym,
								     &node_al,
								     fp);
				} else
					symbol__fprintf_symname(node->sym, stdout);
					symbol__fprintf_symname(node->sym, fp);
			}

			if (print_dso) {
				printf(" (");
				map__fprintf_dsoname(node->map, stdout);
				printf(")");
				fprintf(fp, " (");
				map__fprintf_dsoname(node->map, fp);
				fprintf(fp, ")");
			}

			if (print_srcline)
				map__fprintf_srcline(node->map, addr, "\n  ",
						     stdout);
						     fp);

			if (!print_oneline)
				printf("\n");
				fprintf(fp, "\n");

			stack_depth--;
next:
@@ -2030,25 +2033,25 @@ next:
			return;

		if (print_ip)
			printf("%16" PRIx64, sample->ip);
			fprintf(fp, "%16" PRIx64, sample->ip);

		if (print_sym) {
			printf(" ");
			fprintf(fp, " ");
			if (print_symoffset)
				symbol__fprintf_symname_offs(al->sym, al,
							     stdout);
							     fp);
			else
				symbol__fprintf_symname(al->sym, stdout);
				symbol__fprintf_symname(al->sym, fp);
		}

		if (print_dso) {
			printf(" (");
			map__fprintf_dsoname(al->map, stdout);
			printf(")");
			fprintf(fp, " (");
			map__fprintf_dsoname(al->map, fp);
			fprintf(fp, ")");
		}

		if (print_srcline)
			map__fprintf_srcline(al->map, al->addr, "\n  ", stdout);
			map__fprintf_srcline(al->map, al->addr, "\n  ", fp);
	}
}

+2 −1
Original line number Diff line number Diff line
@@ -106,7 +106,8 @@ struct perf_evsel *perf_session__find_first_evtype(struct perf_session *session,

void perf_evsel__print_ip(struct perf_evsel *evsel, struct perf_sample *sample,
			  struct addr_location *al,
			  unsigned int print_opts, unsigned int stack_depth);
			  unsigned int print_opts, unsigned int stack_depth,
			  FILE *fp);

int perf_session__cpu_bitmap(struct perf_session *session,
			     const char *cpu_list, unsigned long *cpu_bitmap);