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

Commit afb7b4f0 authored by Arnaldo Carvalho de Melo's avatar Arnaldo Carvalho de Melo Committed by Ingo Molnar
Browse files

perf tools: Factor out the map initialization



Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Mike Galbraith <efault@gmx.de>
LKML-Reference: <1256927305-4628-1-git-send-email-acme@infradead.org>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 3ed67776
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -105,6 +105,8 @@ struct symbol;

typedef int (*symbol_filter_t)(struct map *map, struct symbol *sym);

void map__init(struct map *self, u64 start, u64 end, u64 pgoff,
	       struct dso *dso);
struct map *map__new(struct mmap_event *event, char *cwd, int cwdlen,
		     unsigned int sym_priv_size);
struct map *map__clone(struct map *self);
+18 −10
Original line number Diff line number Diff line
@@ -20,6 +20,18 @@ static int strcommon(const char *pathname, char *cwd, int cwdlen)
	return n;
}

void map__init(struct map *self, u64 start, u64 end, u64 pgoff,
	       struct dso *dso)
{
	self->start    = start;
	self->end      = end;
	self->pgoff    = pgoff;
	self->dso      = dso;
	self->map_ip   = map__map_ip;
	self->unmap_ip = map__unmap_ip;
	RB_CLEAR_NODE(&self->rb_node);
}

struct map *map__new(struct mmap_event *event, char *cwd, int cwdlen,
		     unsigned int sym_priv_size)
{
@@ -28,6 +40,7 @@ struct map *map__new(struct mmap_event *event, char *cwd, int cwdlen,
	if (self != NULL) {
		const char *filename = event->filename;
		char newfilename[PATH_MAX];
		struct dso *dso;
		int anon;

		if (cwd) {
@@ -47,20 +60,15 @@ struct map *map__new(struct mmap_event *event, char *cwd, int cwdlen,
			filename = newfilename;
		}

		self->start = event->start;
		self->end   = event->start + event->len;
		self->pgoff = event->pgoff;

		self->dso = dsos__findnew(filename, sym_priv_size);
		if (self->dso == NULL)
		dso = dsos__findnew(filename, sym_priv_size);
		if (dso == NULL)
			goto out_delete;

		map__init(self, event->start, event->start + event->len,
			  event->pgoff, dso);

		if (self->dso == vdso || anon)
			self->map_ip = self->unmap_ip = identity__map_ip;
		else {
			self->map_ip = map__map_ip;
			self->unmap_ip = map__unmap_ip;
		}
	}
	return self;
out_delete:
+3 −9
Original line number Diff line number Diff line
@@ -1132,18 +1132,12 @@ static struct map *map__new2(u64 start, struct dso *dso)
	struct map *self = malloc(sizeof(*self));

	if (self != NULL) {
		self->start = start;
		/*
		 * Will be filled after we load all the symbols
		 * ->end will be filled after we load all the symbols
		 */
		self->end = 0;

		self->pgoff = 0;
		self->dso = dso;
		self->map_ip = map__map_ip;
		self->unmap_ip = map__unmap_ip;
		RB_CLEAR_NODE(&self->rb_node);
		map__init(self, start, 0, 0, dso);
	}

	return self;
}