コード例 #1
0
ファイル: builtin-record.c プロジェクト: Aircell/asp-kernel
static void write_event(event_t *buf, size_t size)
{
	/*
	* Add it to the list of DSOs, so that when we finish this
	 * record session we can pick the available build-ids.
	 */
	if (buf->header.type == PERF_RECORD_MMAP)
		dsos__findnew(buf->mmap.filename);

	write_output(buf, size);
}
コード例 #2
0
struct map *map__new(struct mmap_event *event, enum map_type type,
                     char *cwd, int cwdlen)
{
    struct map *self = malloc(sizeof(*self));

    if (self != NULL) {
        const char *filename = event->filename;
        char newfilename[PATH_MAX];
        struct dso *dso;
        int anon;

        if (cwd) {
            int n = strcommon(filename, cwd, cwdlen);

            if (n == cwdlen) {
                snprintf(newfilename, sizeof(newfilename),
                         ".%s", filename + n);
                filename = newfilename;
            }
        }

        anon = is_anon_memory(filename);

        if (anon) {
            snprintf(newfilename, sizeof(newfilename), "/tmp/perf-%d.map", event->pid);
            filename = newfilename;
        }

        dso = dsos__findnew(filename);
        if (dso == NULL)
            goto out_delete;

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

        if (anon) {
set_identity:
            self->map_ip = self->unmap_ip = identity__map_ip;
        } else if (strcmp(filename, "[vdso]") == 0) {
            dso__set_loaded(dso, self->type);
            goto set_identity;
        }
    }
    return self;
out_delete:
    free(self);
    return NULL;
}