void fill_header(struct opd_header * header, unsigned long counter, vma_t anon_start, vma_t cg_to_anon_start, int is_kernel, int cg_to_is_kernel, time_t mtime) { struct opd_event * event = find_counter_event(counter); memset(header, '\0', sizeof(struct opd_header)); header->version = OPD_VERSION; memcpy(header->magic, OPD_MAGIC, sizeof(header->magic)); header->cpu_type = cpu_type; header->ctr_event = event->value; header->ctr_count = event->count; header->ctr_um = event->um; header->is_kernel = is_kernel; header->cg_to_is_kernel = cg_to_is_kernel; header->cpu_speed = cpu_speed; header->mtime = mtime; header->anon_start = anon_start; header->cg_to_anon_start = cg_to_anon_start; }
static char * mangle_filename(struct sfile * last, struct sfile const * sf, int counter, int cg) { char * mangled; struct mangle_values values; struct opd_event * event = find_counter_event(counter); values.flags = 0; if (sf->kernel) { values.image_name = sf->kernel->name; values.flags |= MANGLE_KERNEL; } else if (sf->anon) { values.flags |= MANGLE_ANON; values.image_name = mangle_anon(sf->anon); values.anon_name = sf->anon->name; } else { values.image_name = find_cookie(sf->cookie); } values.dep_name = get_dep_name(sf); if (!values.dep_name) values.dep_name = values.image_name; /* FIXME: log */ if (!values.image_name || !values.dep_name) return NULL; if (separate_thread) { values.flags |= MANGLE_TGID | MANGLE_TID; values.tid = sf->tid; values.tgid = sf->tgid; } if (separate_cpu) { values.flags |= MANGLE_CPU; values.cpu = sf->cpu; } if (cg) { values.flags |= MANGLE_CALLGRAPH; if (last->kernel) { values.cg_image_name = last->kernel->name; } else if (last->anon) { values.flags |= MANGLE_CG_ANON; values.cg_image_name = mangle_anon(last->anon); values.anon_name = last->anon->name; } else { values.cg_image_name = find_cookie(last->cookie); } /* FIXME: log */ if (!values.cg_image_name) { if (values.flags & MANGLE_ANON) free((char *)values.image_name); return NULL; } } values.event_name = event->name; values.count = event->count; values.unit_mask = event->um; mangled = op_mangle_filename(&values); if (values.flags & MANGLE_ANON) free((char *)values.image_name); if (values.flags & MANGLE_CG_ANON) free((char *)values.cg_image_name); return mangled; }