Lines Matching refs:jd

70 jit_emit_elf(struct jit_buf_desc *jd,  in jit_emit_elf()  argument
88 nsinfo__mountns_enter(jd->nsi, &nsc); in jit_emit_elf()
103 nsinfo__mountns_enter(jd->nsi, &nsc); in jit_emit_elf()
112 jit_close(struct jit_buf_desc *jd) in jit_close() argument
114 if (!(jd && jd->in)) in jit_close()
116 funlockfile(jd->in); in jit_close()
117 fclose(jd->in); in jit_close()
118 jd->in = NULL; in jit_close()
137 jit_open(struct jit_buf_desc *jd, const char *name) in jit_open() argument
146 nsinfo__mountns_enter(jd->nsi, &nsc); in jit_open()
147 jd->in = fopen(name, "r"); in jit_open()
149 if (!jd->in) in jit_open()
161 flockfile(jd->in); in jit_open()
163 ret = fread(buf, sizeof(header), 1, jd->in); in jit_open()
172 jd->needs_bswap = true; in jit_open()
175 if (jd->needs_bswap) { in jit_open()
184 jd->use_arch_timestamp = header.flags & JITDUMP_FLAGS_ARCH_TIMESTAMP; in jit_open()
193 jd->use_arch_timestamp); in jit_open()
207 if (jd->use_arch_timestamp && !jd->session->time_conv.time_mult) { in jit_open()
215 if (!jd->use_arch_timestamp && jit_validate_events(jd->session)) { in jit_open()
229 ret = fread(buf, bs - bsz, 1, jd->in); in jit_open()
236 strcpy(jd->dir, name); in jit_open()
237 dirname(jd->dir); in jit_open()
241 funlockfile(jd->in); in jit_open()
242 fclose(jd->in); in jit_open()
247 jit_get_next_entry(struct jit_buf_desc *jd) in jit_get_next_entry() argument
255 if (!(jd && jd->in)) in jit_get_next_entry()
258 if (jd->buf == NULL) { in jit_get_next_entry()
263 jd->buf = malloc(sz); in jit_get_next_entry()
264 if (jd->buf == NULL) in jit_get_next_entry()
267 jd->bufsize = sz; in jit_get_next_entry()
270 prefix = jd->buf; in jit_get_next_entry()
275 ret = fread(prefix, sizeof(*prefix), 1, jd->in); in jit_get_next_entry()
279 if (jd->needs_bswap) { in jit_get_next_entry()
294 if (bs > jd->bufsize) { in jit_get_next_entry()
296 n = realloc(jd->buf, bs); in jit_get_next_entry()
299 jd->buf = n; in jit_get_next_entry()
300 jd->bufsize = bs; in jit_get_next_entry()
303 addr = ((void *)jd->buf) + sizeof(*prefix); in jit_get_next_entry()
305 ret = fread(addr, bs - sizeof(*prefix), 1, jd->in); in jit_get_next_entry()
309 jr = (union jr_entry *)jd->buf; in jit_get_next_entry()
313 if (jd->needs_bswap) { in jit_get_next_entry()
325 if (jd->needs_bswap) { in jit_get_next_entry()
334 if (jd->needs_bswap) { in jit_get_next_entry()
342 jd->code_load_count++; in jit_get_next_entry()
345 if (jd->needs_bswap) { in jit_get_next_entry()
364 jit_inject_event(struct jit_buf_desc *jd, union perf_event *event) in jit_inject_event() argument
368 size = perf_data__write(jd->output, event, event->header.size); in jit_inject_event()
372 jd->bytes_written += size; in jit_inject_event()
376 static pid_t jr_entry_pid(struct jit_buf_desc *jd, union jr_entry *jr) in jr_entry_pid() argument
378 if (jd->nsi && nsinfo__in_pidns(jd->nsi)) in jr_entry_pid()
379 return nsinfo__tgid(jd->nsi); in jr_entry_pid()
383 static pid_t jr_entry_tid(struct jit_buf_desc *jd, union jr_entry *jr) in jr_entry_tid() argument
385 if (jd->nsi && nsinfo__in_pidns(jd->nsi)) in jr_entry_tid()
386 return nsinfo__pid(jd->nsi); in jr_entry_tid()
390 static uint64_t convert_timestamp(struct jit_buf_desc *jd, uint64_t timestamp) in convert_timestamp() argument
393 struct perf_record_time_conv *time_conv = &jd->session->time_conv; in convert_timestamp()
395 if (!jd->use_arch_timestamp) in convert_timestamp()
421 static int jit_repipe_code_load(struct jit_buf_desc *jd, union jr_entry *jr) in jit_repipe_code_load() argument
425 struct perf_tool *tool = jd->session->tool; in jit_repipe_code_load()
442 pid = jr_entry_pid(jd, jr); in jit_repipe_code_load()
443 tid = jr_entry_tid(jd, jr); in jit_repipe_code_load()
445 usize = jd->unwinding_mapped_size; in jit_repipe_code_load()
450 idr_size = jd->machine->id_hdr_size; in jit_repipe_code_load()
458 jd->dir, in jit_repipe_code_load()
466 …ret = jit_emit_elf(jd, filename, sym, addr, (const void *)uaddr, csize, jd->debug_data, jd->nr_deb… in jit_repipe_code_load()
467 jd->unwinding_data, jd->eh_frame_hdr_size, jd->unwinding_size); in jit_repipe_code_load()
469 if (jd->debug_data && jd->nr_debug_entries) { in jit_repipe_code_load()
470 zfree(&jd->debug_data); in jit_repipe_code_load()
471 jd->nr_debug_entries = 0; in jit_repipe_code_load()
474 if (jd->unwinding_data && jd->eh_frame_hdr_size) { in jit_repipe_code_load()
475 zfree(&jd->unwinding_data); in jit_repipe_code_load()
476 jd->eh_frame_hdr_size = 0; in jit_repipe_code_load()
477 jd->unwinding_mapped_size = 0; in jit_repipe_code_load()
478 jd->unwinding_size = 0; in jit_repipe_code_load()
485 if (nsinfo__stat(filename, &st, jd->nsi)) in jit_repipe_code_load()
506 if (jd->sample_type & PERF_SAMPLE_TID) { in jit_repipe_code_load()
510 if (jd->sample_type & PERF_SAMPLE_TIME) in jit_repipe_code_load()
511 id->time = convert_timestamp(jd, jr->load.p.timestamp); in jit_repipe_code_load()
524 ret = perf_event__process_mmap2(tool, event, &sample, jd->machine); in jit_repipe_code_load()
528 ret = jit_inject_event(jd, event); in jit_repipe_code_load()
533 build_id__mark_dso_hit(tool, event, &sample, NULL, jd->machine); in jit_repipe_code_load()
538 static int jit_repipe_code_move(struct jit_buf_desc *jd, union jr_entry *jr) in jit_repipe_code_move() argument
542 struct perf_tool *tool = jd->session->tool; in jit_repipe_code_move()
556 pid = jr_entry_pid(jd, jr); in jit_repipe_code_move()
557 tid = jr_entry_tid(jd, jr); in jit_repipe_code_move()
558 usize = jd->unwinding_mapped_size; in jit_repipe_code_move()
559 idr_size = jd->machine->id_hdr_size; in jit_repipe_code_move()
570 jd->dir, in jit_repipe_code_move()
576 if (nsinfo__stat(filename, &st, jd->nsi)) in jit_repipe_code_move()
599 if (jd->sample_type & PERF_SAMPLE_TID) { in jit_repipe_code_move()
603 if (jd->sample_type & PERF_SAMPLE_TIME) in jit_repipe_code_move()
604 id->time = convert_timestamp(jd, jr->load.p.timestamp); in jit_repipe_code_move()
617 ret = perf_event__process_mmap2(tool, event, &sample, jd->machine); in jit_repipe_code_move()
621 ret = jit_inject_event(jd, event); in jit_repipe_code_move()
623 build_id__mark_dso_hit(tool, event, &sample, NULL, jd->machine); in jit_repipe_code_move()
628 static int jit_repipe_debug_info(struct jit_buf_desc *jd, union jr_entry *jr) in jit_repipe_debug_info() argument
633 if (!(jd && jr)) in jit_repipe_debug_info()
643 jd->debug_data = data; in jit_repipe_debug_info()
649 jd->nr_debug_entries = jr->info.nr_entry; in jit_repipe_debug_info()
655 jit_repipe_unwinding_info(struct jit_buf_desc *jd, union jr_entry *jr) in jit_repipe_unwinding_info() argument
660 if (!(jd && jr)) in jit_repipe_unwinding_info()
671 jd->eh_frame_hdr_size = jr->unwinding.eh_frame_hdr_size; in jit_repipe_unwinding_info()
672 jd->unwinding_size = jr->unwinding.unwinding_size; in jit_repipe_unwinding_info()
673 jd->unwinding_mapped_size = jr->unwinding.mapped_size; in jit_repipe_unwinding_info()
674 jd->unwinding_data = unwinding_data; in jit_repipe_unwinding_info()
680 jit_process_dump(struct jit_buf_desc *jd) in jit_process_dump() argument
685 while ((jr = jit_get_next_entry(jd))) { in jit_process_dump()
688 ret = jit_repipe_code_load(jd, jr); in jit_process_dump()
691 ret = jit_repipe_code_move(jd, jr); in jit_process_dump()
694 ret = jit_repipe_debug_info(jd, jr); in jit_process_dump()
697 ret = jit_repipe_unwinding_info(jd, jr); in jit_process_dump()
708 jit_inject(struct jit_buf_desc *jd, char *path) in jit_inject() argument
715 ret = jit_open(jd, path); in jit_inject()
719 ret = jit_process_dump(jd); in jit_inject()
721 jit_close(jd); in jit_inject()
823 struct jit_buf_desc jd; in jit_process() local
853 memset(&jd, 0, sizeof(jd)); in jit_process()
855 jd.session = session; in jit_process()
856 jd.output = output; in jit_process()
857 jd.machine = machine; in jit_process()
858 jd.nsi = nsi; in jit_process()
865 jd.sample_type = first->core.attr.sample_type; in jit_process()
869 ret = jit_inject(&jd, filename); in jit_process()
872 *nbytes = jd.bytes_written; in jit_process()
876 nsinfo__put(jd.nsi); in jit_process()