Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4778d2e4 authored by Frederic Weisbecker's avatar Frederic Weisbecker Committed by Ingo Molnar
Browse files

perf tools: Read the build-ids from the header layer



Keep the build-ids reading implementation in the data mapping
but move its call to the headers so that we have a better
control on it (offset seeking, size passing, etc..).

Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
LKML-Reference: <1257911467-28276-4-git-send-email-fweisbec@gmail.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 57f395a7
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -70,7 +70,7 @@ process_event(event_t *event, unsigned long offset, unsigned long head)
	}
}

static int perf_header__read_build_ids(const struct perf_header *self,
int perf_header__read_build_ids(const struct perf_header *self,
				int input, off_t file_size)
{
	off_t offset = self->data_offset + self->data_size;
@@ -163,10 +163,6 @@ int mmap_dispatch_perf_file(struct perf_header **pheader,
		if (curr_handler->sample_type_check(sample_type) < 0)
			exit(-1);

	if (perf_header__has_feat(header, HEADER_BUILD_ID) &&
	    perf_header__read_build_ids(header, input, input_stat.st_size))
		pr_debug("failed to read buildids, continuing...\n");

	if (load_kernel(NULL) < 0) {
		perror("failed to load kernel symbols");
		return EXIT_FAILURE;
+2 −0
Original line number Diff line number Diff line
@@ -27,5 +27,7 @@ int mmap_dispatch_perf_file(struct perf_header **pheader,
			    int full_paths,
			    int *cwdlen,
			    char **cwd);
int perf_header__read_build_ids(const struct perf_header *self,
				int input, off_t file_size);

#endif
+12 −2
Original line number Diff line number Diff line
@@ -9,6 +9,8 @@
#include "../perf.h"
#include "trace-event.h"
#include "symbol.h"
#include "data_map.h"
#include "debug.h"

/*
 * Create new perf.data header attribute:
@@ -322,6 +324,14 @@ static void perf_header__adds_read(struct perf_header *self, int fd)
		trace_report(fd);
		lseek(fd, trace_sec.offset + trace_sec.size, SEEK_SET);
	}

	if (perf_header__has_feat(self, HEADER_BUILD_ID)) {
		struct stat input_stat;

		fstat(fd, &input_stat);
		if (perf_header__read_build_ids(self, fd, input_stat.st_size))
			pr_debug("failed to read buildids, continuing...\n");
	}
};

struct perf_header *perf_header__read(int fd)
@@ -382,14 +392,14 @@ struct perf_header *perf_header__read(int fd)

	memcpy(&self->adds_features, &f_header.adds_features, sizeof(f_header.adds_features));

	perf_header__adds_read(self, fd);

	self->event_offset = f_header.event_types.offset;
	self->event_size   = f_header.event_types.size;

	self->data_offset = f_header.data.offset;
	self->data_size   = f_header.data.size;

	perf_header__adds_read(self, fd);

	lseek(fd, self->data_offset, SEEK_SET);

	self->frozen = 1;