Lines Matching refs:jd
107 jit_close(struct jit_buf_desc *jd) in jit_close() argument
109 if (!(jd && jd->in)) in jit_close()
111 funlockfile(jd->in); in jit_close()
112 fclose(jd->in); in jit_close()
113 jd->in = NULL; in jit_close()
132 jit_open(struct jit_buf_desc *jd, const char *name) in jit_open() argument
140 jd->in = fopen(name, "r"); in jit_open()
141 if (!jd->in) in jit_open()
153 flockfile(jd->in); in jit_open()
155 ret = fread(buf, sizeof(header), 1, jd->in); in jit_open()
164 jd->needs_bswap = true; in jit_open()
167 if (jd->needs_bswap) { in jit_open()
176 jd->use_arch_timestamp = header.flags & JITDUMP_FLAGS_ARCH_TIMESTAMP; in jit_open()
185 jd->use_arch_timestamp); in jit_open()
199 if (jd->use_arch_timestamp && !jd->session->time_conv.time_mult) { in jit_open()
207 if (!jd->use_arch_timestamp && jit_validate_events(jd->session)) { in jit_open()
221 ret = fread(buf, bs - bsz, 1, jd->in); in jit_open()
228 strcpy(jd->dir, name); in jit_open()
229 dirname(jd->dir); in jit_open()
233 funlockfile(jd->in); in jit_open()
234 fclose(jd->in); in jit_open()
239 jit_get_next_entry(struct jit_buf_desc *jd) in jit_get_next_entry() argument
247 if (!(jd && jd->in)) in jit_get_next_entry()
250 if (jd->buf == NULL) { in jit_get_next_entry()
255 jd->buf = malloc(sz); in jit_get_next_entry()
256 if (jd->buf == NULL) in jit_get_next_entry()
259 jd->bufsize = sz; in jit_get_next_entry()
262 prefix = jd->buf; in jit_get_next_entry()
267 ret = fread(prefix, sizeof(*prefix), 1, jd->in); in jit_get_next_entry()
271 if (jd->needs_bswap) { in jit_get_next_entry()
286 if (bs > jd->bufsize) { in jit_get_next_entry()
288 n = realloc(jd->buf, bs); in jit_get_next_entry()
291 jd->buf = n; in jit_get_next_entry()
292 jd->bufsize = bs; in jit_get_next_entry()
295 addr = ((void *)jd->buf) + sizeof(*prefix); in jit_get_next_entry()
297 ret = fread(addr, bs - sizeof(*prefix), 1, jd->in); in jit_get_next_entry()
301 jr = (union jr_entry *)jd->buf; in jit_get_next_entry()
305 if (jd->needs_bswap) { in jit_get_next_entry()
317 if (jd->needs_bswap) { in jit_get_next_entry()
326 if (jd->needs_bswap) { in jit_get_next_entry()
334 jd->code_load_count++; in jit_get_next_entry()
337 if (jd->needs_bswap) { in jit_get_next_entry()
356 jit_inject_event(struct jit_buf_desc *jd, union perf_event *event) in jit_inject_event() argument
360 size = perf_data__write(jd->output, event, event->header.size); in jit_inject_event()
364 jd->bytes_written += size; in jit_inject_event()
368 static uint64_t convert_timestamp(struct jit_buf_desc *jd, uint64_t timestamp) in convert_timestamp() argument
372 if (!jd->use_arch_timestamp) in convert_timestamp()
375 tc.time_shift = jd->session->time_conv.time_shift; in convert_timestamp()
376 tc.time_mult = jd->session->time_conv.time_mult; in convert_timestamp()
377 tc.time_zero = jd->session->time_conv.time_zero; in convert_timestamp()
385 static int jit_repipe_code_load(struct jit_buf_desc *jd, union jr_entry *jr) in jit_repipe_code_load() argument
389 struct perf_tool *tool = jd->session->tool; in jit_repipe_code_load()
408 usize = jd->unwinding_mapped_size; in jit_repipe_code_load()
413 idr_size = jd->machine->id_hdr_size; in jit_repipe_code_load()
421 jd->dir, in jit_repipe_code_load()
429 …ret = jit_emit_elf(filename, sym, addr, (const void *)uaddr, csize, jd->debug_data, jd->nr_debug_e… in jit_repipe_code_load()
430 jd->unwinding_data, jd->eh_frame_hdr_size, jd->unwinding_size); in jit_repipe_code_load()
432 if (jd->debug_data && jd->nr_debug_entries) { in jit_repipe_code_load()
433 free(jd->debug_data); in jit_repipe_code_load()
434 jd->debug_data = NULL; in jit_repipe_code_load()
435 jd->nr_debug_entries = 0; in jit_repipe_code_load()
438 if (jd->unwinding_data && jd->eh_frame_hdr_size) { in jit_repipe_code_load()
439 free(jd->unwinding_data); in jit_repipe_code_load()
440 jd->unwinding_data = NULL; in jit_repipe_code_load()
441 jd->eh_frame_hdr_size = 0; in jit_repipe_code_load()
442 jd->unwinding_mapped_size = 0; in jit_repipe_code_load()
443 jd->unwinding_size = 0; in jit_repipe_code_load()
471 if (jd->sample_type & PERF_SAMPLE_TID) { in jit_repipe_code_load()
475 if (jd->sample_type & PERF_SAMPLE_TIME) in jit_repipe_code_load()
476 id->time = convert_timestamp(jd, jr->load.p.timestamp); in jit_repipe_code_load()
489 ret = perf_event__process_mmap2(tool, event, &sample, jd->machine); in jit_repipe_code_load()
493 ret = jit_inject_event(jd, event); in jit_repipe_code_load()
498 build_id__mark_dso_hit(tool, event, &sample, NULL, jd->machine); in jit_repipe_code_load()
503 static int jit_repipe_code_move(struct jit_buf_desc *jd, union jr_entry *jr) in jit_repipe_code_move() argument
507 struct perf_tool *tool = jd->session->tool; in jit_repipe_code_move()
522 usize = jd->unwinding_mapped_size; in jit_repipe_code_move()
523 idr_size = jd->machine->id_hdr_size; in jit_repipe_code_move()
534 jd->dir, in jit_repipe_code_move()
563 if (jd->sample_type & PERF_SAMPLE_TID) { in jit_repipe_code_move()
567 if (jd->sample_type & PERF_SAMPLE_TIME) in jit_repipe_code_move()
568 id->time = convert_timestamp(jd, jr->load.p.timestamp); in jit_repipe_code_move()
581 ret = perf_event__process_mmap2(tool, event, &sample, jd->machine); in jit_repipe_code_move()
585 ret = jit_inject_event(jd, event); in jit_repipe_code_move()
587 build_id__mark_dso_hit(tool, event, &sample, NULL, jd->machine); in jit_repipe_code_move()
592 static int jit_repipe_debug_info(struct jit_buf_desc *jd, union jr_entry *jr) in jit_repipe_debug_info() argument
597 if (!(jd && jr)) in jit_repipe_debug_info()
607 jd->debug_data = data; in jit_repipe_debug_info()
613 jd->nr_debug_entries = jr->info.nr_entry; in jit_repipe_debug_info()
619 jit_repipe_unwinding_info(struct jit_buf_desc *jd, union jr_entry *jr) in jit_repipe_unwinding_info() argument
624 if (!(jd && jr)) in jit_repipe_unwinding_info()
635 jd->eh_frame_hdr_size = jr->unwinding.eh_frame_hdr_size; in jit_repipe_unwinding_info()
636 jd->unwinding_size = jr->unwinding.unwinding_size; in jit_repipe_unwinding_info()
637 jd->unwinding_mapped_size = jr->unwinding.mapped_size; in jit_repipe_unwinding_info()
638 jd->unwinding_data = unwinding_data; in jit_repipe_unwinding_info()
644 jit_process_dump(struct jit_buf_desc *jd) in jit_process_dump() argument
649 while ((jr = jit_get_next_entry(jd))) { in jit_process_dump()
652 ret = jit_repipe_code_load(jd, jr); in jit_process_dump()
655 ret = jit_repipe_code_move(jd, jr); in jit_process_dump()
658 ret = jit_repipe_debug_info(jd, jr); in jit_process_dump()
661 ret = jit_repipe_unwinding_info(jd, jr); in jit_process_dump()
672 jit_inject(struct jit_buf_desc *jd, char *path) in jit_inject() argument
679 ret = jit_open(jd, path); in jit_inject()
683 ret = jit_process_dump(jd); in jit_inject()
685 jit_close(jd); in jit_inject()
762 struct jit_buf_desc jd; in jit_process() local
771 memset(&jd, 0, sizeof(jd)); in jit_process()
773 jd.session = session; in jit_process()
774 jd.output = output; in jit_process()
775 jd.machine = machine; in jit_process()
782 jd.sample_type = first->attr.sample_type; in jit_process()
786 ret = jit_inject(&jd, filename); in jit_process()
788 *nbytes = jd.bytes_written; in jit_process()