static int perf_session__open(struct perf_session *session) { struct perf_data_file *file = session->file; if (perf_session__read_header(session) < 0) { pr_err("incompatible file format (rerun with -v to learn more)"); return -1; } if (perf_data_file__is_pipe(file)) return 0; if (!perf_evlist__valid_sample_type(session->evlist)) { pr_err("non matching sample_type"); return -1; } if (!perf_evlist__valid_sample_id_all(session->evlist)) { pr_err("non matching sample_id_all"); return -1; } if (!perf_evlist__valid_read_format(session->evlist)) { pr_err("non matching read_format"); return -1; } return 0; }
static int perf_session__list_build_ids(bool force, bool with_hits) { struct perf_session *session; struct perf_data_file file = { .path = input_name, .mode = PERF_DATA_MODE_READ, .force = force, }; symbol__elf_init(); /* * See if this is an ELF file first: */ if (filename__fprintf_build_id(input_name, stdout) > 0) goto out; session = perf_session__new(&file, false, &build_id__mark_dso_hit_ops); if (session == NULL) return -1; /* * We take all buildids when the file contains AUX area tracing data * because we do not decode the trace because it would take too long. */ if (!perf_data_file__is_pipe(&file) && perf_header__has_feat(&session->header, HEADER_AUXTRACE)) with_hits = false; /* * in pipe-mode, the only way to get the buildids is to parse * the record stream. Buildids are stored as RECORD_HEADER_BUILD_ID */ if (with_hits || perf_data_file__is_pipe(&file)) perf_session__process_events(session); perf_session__fprintf_dsos_buildid(session, stdout, dso__skip_buildid, with_hits); perf_session__delete(session); out: return 0; }
static int auxtrace_queues__add_event_buffer(struct auxtrace_queues *queues, struct perf_session *session, unsigned int idx, struct auxtrace_buffer *buffer) { if (session->one_mmap) { buffer->data = buffer->data_offset - session->one_mmap_offset + session->one_mmap_addr; } else if (perf_data_file__is_pipe(session->file)) { buffer->data = auxtrace_copy_data(buffer->size, session); if (!buffer->data) return -ENOMEM; buffer->data_needs_freeing = true; } else if (BITS_PER_LONG == 32 && buffer->size > BUFFER_LIMIT_FOR_32_BIT) { int err; err = auxtrace_queues__split_buffer(queues, idx, buffer); if (err) return err; } return auxtrace_queues__add_buffer(queues, idx, buffer); }