Lines Matching +full:trace +full:- +full:buffer +full:- +full:extension
1 // SPDX-License-Identifier: GPL-2.0
7 #include <subcmd/exec-cmd.h>
9 #include <subcmd/parse-options.h>
17 #include "util/trace-event.h"
30 #include "util/thread-stack.h"
31 #include "util/time-utils.h"
44 #include "util/mem-events.h"
45 #include "util/dump-insn.h"
162 {.str = "trace", .field = PERF_OUTPUT_TRACE},
176 {.str = "bpf-output", .field = PERF_OUTPUT_BPF_OUTPUT},
318 return (struct evsel_script *)evsel->priv; in evsel_script()
326 if (asprintf(&es->filename, "%s.%s.dump", data->file.path, evsel__name(evsel)) < 0) in evsel_script__new()
328 es->fp = fopen(es->filename, "w"); in evsel_script__new()
329 if (es->fp == NULL) in evsel_script__new()
335 zfree(&es->filename); in evsel_script__new()
343 zfree(&es->filename); in evsel_script__delete()
344 fclose(es->fp); in evsel_script__delete()
345 es->fp = NULL; in evsel_script__delete()
353 fstat(fileno(es->fp), &st); in evsel_script__fprintf()
355 st.st_size / 1024.0 / 1024.0, es->filename, es->samples); in evsel_script__fprintf()
395 #define PRINT_FIELD(x) (output[output_type(attr->type)].fields & PERF_OUTPUT_##x)
400 struct perf_event_attr *attr = &evsel->core.attr; in evsel__do_check_stype()
401 int type = output_type(attr->type); in evsel__do_check_stype()
404 if (attr->sample_type & sample_type) in evsel__do_check_stype()
414 return -1; in evsel__do_check_stype()
435 struct perf_event_attr *attr = &evsel->core.attr; in evsel__check_attr()
438 if (perf_header__has_feat(&session->header, HEADER_STAT)) in evsel__check_attr()
441 allow_user_set = perf_header__has_feat(&session->header, in evsel__check_attr()
444 if (PRINT_FIELD(TRACE) && in evsel__check_attr()
445 !perf_session__has_traces(session, "record -R")) in evsel__check_attr()
446 return -EINVAL; in evsel__check_attr()
450 return -EINVAL; in evsel__check_attr()
455 return -EINVAL; in evsel__check_attr()
459 return -EINVAL; in evsel__check_attr()
463 return -EINVAL; in evsel__check_attr()
466 !(evsel->core.attr.sample_type & (PERF_SAMPLE_IP|PERF_SAMPLE_ADDR))) { in evsel__check_attr()
470 return -EINVAL; in evsel__check_attr()
475 return -EINVAL; in evsel__check_attr()
478 !(evsel->core.attr.sample_type & (PERF_SAMPLE_IP|PERF_SAMPLE_ADDR))) { in evsel__check_attr()
480 return -EINVAL; in evsel__check_attr()
485 return -EINVAL; in evsel__check_attr()
488 !(evlist__combined_branch_type(session->evlist) & PERF_SAMPLE_BRANCH_ANY)) { in evsel__check_attr()
489 pr_err("Display of branch stack assembler requested, but non all-branch filter set\n" in evsel__check_attr()
490 "Hint: run 'perf record -b ...'\n"); in evsel__check_attr()
491 return -EINVAL; in evsel__check_attr()
495 return -EINVAL; in evsel__check_attr()
499 return -EINVAL; in evsel__check_attr()
503 return -EINVAL; in evsel__check_attr()
507 return -EINVAL; in evsel__check_attr()
511 return -EINVAL; in evsel__check_attr()
515 return -EINVAL; in evsel__check_attr()
519 return -EINVAL; in evsel__check_attr()
523 return -EINVAL; in evsel__check_attr()
530 unsigned int type = output_type(attr->type); in set_print_ip_opts()
555 if (output_type(evsel->core.attr.type) == (int)type) in find_first_output_type()
572 evsel = find_first_output_type(session->evlist, j); in perf_session__check_output_opt()
581 "Remove corresponding -F option to proceed.\n", in perf_session__check_output_opt()
583 return -1; in perf_session__check_output_opt()
588 return -1; in perf_session__check_output_opt()
593 set_print_ip_opts(&evsel->core.attr); in perf_session__check_output_opt()
601 evlist__for_each_entry(session->evlist, evsel) { in perf_session__check_output_opt()
620 evlist__for_each_entry(session->evlist, evsel) { in perf_session__check_output_opt()
621 if (evsel->core.attr.type != j) in perf_session__check_output_opt()
629 set_print_ip_opts(&evsel->core.attr); in perf_session__check_output_opt()
635 if (tod && !session->header.env.clock.enabled) { in perf_session__check_output_opt()
637 "Please record with -k/--clockid option.\n"); in perf_session__check_output_opt()
638 return -1; in perf_session__check_output_opt()
650 if (!regs || !regs->regs) in perf_sample__fprintf_regs()
653 printed += fprintf(fp, " ABI:%" PRIu64 " ", regs->abi); in perf_sample__fprintf_regs()
656 u64 val = regs->regs[i++]; in perf_sample__fprintf_regs()
680 env = &script->session->header.env; in tod_scnprintf()
681 if (!env->clock.enabled) { in tod_scnprintf()
686 clockid_ns = env->clock.clockid_ns; in tod_scnprintf()
687 tod_ns = env->clock.tod_ns; in tod_scnprintf()
690 tod_ns += timestamp - clockid_ns; in tod_scnprintf()
692 tod_ns -= clockid_ns - timestamp; in tod_scnprintf()
695 nsec = tod_ns - sec * NSEC_PER_SEC; in tod_scnprintf()
716 return perf_sample__fprintf_regs(&sample->intr_regs, in perf_sample__fprintf_iregs()
717 attr->sample_regs_intr, fp); in perf_sample__fprintf_iregs()
723 return perf_sample__fprintf_regs(&sample->user_regs, in perf_sample__fprintf_uregs()
724 attr->sample_regs_user, fp); in perf_sample__fprintf_uregs()
733 struct perf_event_attr *attr = &evsel->core.attr; in perf_sample__fprintf_start()
740 const char *comm = thread ? thread__comm_str(thread) : ":-1"; in perf_sample__fprintf_start()
751 printed += fprintf(fp, "%5d/%-5d ", sample->pid, sample->tid); in perf_sample__fprintf_start()
753 printed += fprintf(fp, "%5d ", sample->pid); in perf_sample__fprintf_start()
755 printed += fprintf(fp, "%5d ", sample->tid); in perf_sample__fprintf_start()
759 printed += fprintf(fp, "%3d ", sample->cpu); in perf_sample__fprintf_start()
761 printed += fprintf(fp, "[%03d] ", sample->cpu); in perf_sample__fprintf_start()
768 (sample->misc & PERF_RECORD_MISC_##m) == PERF_RECORD_MISC_##m in perf_sample__fprintf_start()
795 if (sample->misc & PERF_RECORD_MISC_SWITCH_OUT_PREEMPT) in perf_sample__fprintf_start()
804 ret += fprintf(fp, "%*s", 6 - ret, " "); in perf_sample__fprintf_start()
809 tod_scnprintf(script, tstr, sizeof(tstr), sample->time); in perf_sample__fprintf_start()
814 u64 t = sample->time; in perf_sample__fprintf_start()
817 initial_time = sample->time; in perf_sample__fprintf_start()
818 t = sample->time - initial_time; in perf_sample__fprintf_start()
821 t = sample->time - previous_time; in perf_sample__fprintf_start()
825 previous_time = sample->time; in perf_sample__fprintf_start()
829 nsecs -= secs * NSEC_PER_SEC; in perf_sample__fprintf_start()
846 if (!(br->flags.mispred || br->flags.predicted)) in mispred_str()
847 return '-'; in mispred_str()
849 return br->flags.predicted ? 'P' : 'M'; in mispred_str()
856 struct branch_stack *br = sample->branch_stack; in perf_sample__fprintf_brstack()
862 if (!(br && br->nr)) in perf_sample__fprintf_brstack()
865 for (i = 0; i < br->nr; i++) { in perf_sample__fprintf_brstack()
872 thread__find_map_fb(thread, sample->cpumode, from, &alf); in perf_sample__fprintf_brstack()
873 thread__find_map_fb(thread, sample->cpumode, to, &alt); in perf_sample__fprintf_brstack()
892 entries[i].flags.in_tx ? 'X' : '-', in perf_sample__fprintf_brstack()
893 entries[i].flags.abort ? 'A' : '-', in perf_sample__fprintf_brstack()
904 struct branch_stack *br = sample->branch_stack; in perf_sample__fprintf_brstacksym()
910 if (!(br && br->nr)) in perf_sample__fprintf_brstacksym()
913 for (i = 0; i < br->nr; i++) { in perf_sample__fprintf_brstacksym()
920 thread__find_symbol_fb(thread, sample->cpumode, from, &alf); in perf_sample__fprintf_brstacksym()
921 thread__find_symbol_fb(thread, sample->cpumode, to, &alt); in perf_sample__fprintf_brstacksym()
938 entries[i].flags.in_tx ? 'X' : '-', in perf_sample__fprintf_brstacksym()
939 entries[i].flags.abort ? 'A' : '-', in perf_sample__fprintf_brstacksym()
950 struct branch_stack *br = sample->branch_stack; in perf_sample__fprintf_brstackoff()
956 if (!(br && br->nr)) in perf_sample__fprintf_brstackoff()
959 for (i = 0; i < br->nr; i++) { in perf_sample__fprintf_brstackoff()
966 if (thread__find_map_fb(thread, sample->cpumode, from, &alf) && in perf_sample__fprintf_brstackoff()
967 !alf.map->dso->adjust_symbols) in perf_sample__fprintf_brstackoff()
970 if (thread__find_map_fb(thread, sample->cpumode, to, &alt) && in perf_sample__fprintf_brstackoff()
971 !alt.map->dso->adjust_symbols) in perf_sample__fprintf_brstackoff()
988 entries[i].flags.in_tx ? 'X' : '-', in perf_sample__fprintf_brstackoff()
989 entries[i].flags.abort ? 'A' : '-', in perf_sample__fprintf_brstackoff()
997 static int grab_bb(u8 *buffer, u64 start, u64 end, in grab_bb() argument
1021 pr_debug("\tblock %" PRIx64 "-%" PRIx64 " transfers between kernel and user\n", start, end); in grab_bb()
1022 return -ENXIO; in grab_bb()
1026 if (end - start > MAXBB - MAXINSN) { in grab_bb()
1028 pr_debug("\tbrstack does not reach to final jump (%" PRIx64 "-%" PRIx64 ")\n", start, end); in grab_bb()
1030 …pr_debug("\tblock %" PRIx64 "-%" PRIx64 " (%" PRIu64 ") too long to dump\n", start, end, end - sta… in grab_bb()
1034 if (!thread__find_map(thread, *cpumode, start, &al) || !al.map->dso) { in grab_bb()
1035 pr_debug("\tcannot resolve %" PRIx64 "-%" PRIx64 "\n", start, end); in grab_bb()
1038 if (al.map->dso->data.status == DSO_DATA_STATUS_ERROR) { in grab_bb()
1039 pr_debug("\tcannot resolve %" PRIx64 "-%" PRIx64 "\n", start, end); in grab_bb()
1043 /* Load maps to ensure dso->is_64_bit has been updated */ in grab_bb()
1046 offset = al.map->map_ip(al.map, start); in grab_bb()
1047 len = dso__data_read_offset(al.map->dso, machine, offset, (u8 *)buffer, in grab_bb()
1048 end - start + MAXINSN); in grab_bb()
1050 *is64bit = al.map->dso->is_64_bit; in grab_bb()
1052 pr_debug("\tcannot fetch code for block at %" PRIx64 "-%" PRIx64 "\n", in grab_bb()
1065 if (!map || !map->dso) in map__fprintf_srccode()
1067 srcfile = get_srcline_split(map->dso, in map__fprintf_srccode()
1075 state->srcfile && in map__fprintf_srccode()
1076 !strcmp(state->srcfile, srcfile) && in map__fprintf_srccode()
1077 state->line == line) { in map__fprintf_srccode()
1086 ret = fprintf(fp, "|%-8d %.*s", line, len, srccode); in map__fprintf_srccode()
1089 state->srcfile = srcfile; in map__fprintf_srccode()
1090 state->line = line; in map__fprintf_srccode()
1109 &thread->srccode_state); in print_srccode()
1119 int printed = fprintf(fp, "\t%016" PRIx64 "\t%-30s\t#%s%s%s%s", ip, in ip__fprintf_jump()
1121 en->flags.predicted ? " PRED" : "", in ip__fprintf_jump()
1122 en->flags.mispred ? " MISPRED" : "", in ip__fprintf_jump()
1123 en->flags.in_tx ? " INTX" : "", in ip__fprintf_jump()
1124 en->flags.abort ? " ABORT" : ""); in ip__fprintf_jump()
1125 if (en->flags.cycles) { in ip__fprintf_jump()
1126 *total_cycles += en->flags.cycles; in ip__fprintf_jump()
1127 printed += fprintf(fp, " %d cycles [%d]", en->flags.cycles, *total_cycles); in ip__fprintf_jump()
1129 printed += fprintf(fp, " %.2f IPC", (float)insn / en->flags.cycles); in ip__fprintf_jump()
1145 if ((*lastsym) && al.addr >= (*lastsym)->start && al.addr < (*lastsym)->end) in ip__fprintf_sym()
1156 if (al.addr < al.sym->end) in ip__fprintf_sym()
1157 off = al.addr - al.sym->start; in ip__fprintf_sym()
1159 off = al.addr - al.map->start - al.sym->start; in ip__fprintf_sym()
1160 printed += fprintf(fp, "\t%s", al.sym->name); in ip__fprintf_sym()
1177 struct branch_stack *br = sample->branch_stack; in perf_sample__fprintf_brstackinsn()
1182 u8 buffer[MAXBB]; in perf_sample__fprintf_brstackinsn() local
1187 if (!(br && br->nr)) in perf_sample__fprintf_brstackinsn()
1189 nr = br->nr; in perf_sample__fprintf_brstackinsn()
1194 x.cpu = sample->cpu; in perf_sample__fprintf_brstackinsn()
1199 len = grab_bb(buffer, entries[nr-1].from, in perf_sample__fprintf_brstackinsn()
1200 entries[nr-1].from, in perf_sample__fprintf_brstackinsn()
1203 printed += ip__fprintf_sym(entries[nr - 1].from, thread, in perf_sample__fprintf_brstackinsn()
1205 printed += ip__fprintf_jump(entries[nr - 1].from, &entries[nr - 1], in perf_sample__fprintf_brstackinsn()
1206 &x, buffer, len, 0, fp, &total_cycles); in perf_sample__fprintf_brstackinsn()
1208 printed += print_srccode(thread, x.cpumode, entries[nr - 1].from); in perf_sample__fprintf_brstackinsn()
1212 for (i = nr - 2; i >= 0; i--) { in perf_sample__fprintf_brstackinsn()
1214 pr_debug("%d: %" PRIx64 "-%" PRIx64 "\n", i, in perf_sample__fprintf_brstackinsn()
1220 len = grab_bb(buffer, start, end, machine, thread, &x.is64bit, &x.cpumode, false); in perf_sample__fprintf_brstackinsn()
1222 if (len == -ENXIO && i > 0) { in perf_sample__fprintf_brstackinsn()
1223 end = entries[--i].from; in perf_sample__fprintf_brstackinsn()
1224 pr_debug("\tpatching up to %" PRIx64 "-%" PRIx64 "\n", start, end); in perf_sample__fprintf_brstackinsn()
1225 len = grab_bb(buffer, start, end, machine, thread, &x.is64bit, &x.cpumode, false); in perf_sample__fprintf_brstackinsn()
1236 printed += ip__fprintf_jump(ip, &entries[i], &x, buffer + off, len - off, ++insn, fp, in perf_sample__fprintf_brstackinsn()
1244 dump_insn(&x, ip, buffer + off, len - off, &ilen)); in perf_sample__fprintf_brstackinsn()
1252 if (off != end - start) in perf_sample__fprintf_brstackinsn()
1260 if (entries[0].from == sample->ip) in perf_sample__fprintf_brstackinsn()
1274 end = sample->ip; in perf_sample__fprintf_brstackinsn()
1279 len = grab_bb(buffer, start, end, machine, thread, &x.is64bit, &x.cpumode, true); in perf_sample__fprintf_brstackinsn()
1283 len = grab_bb(buffer, sample->ip, sample->ip, in perf_sample__fprintf_brstackinsn()
1287 printed += fprintf(fp, "\t%016" PRIx64 "\t%s\n", sample->ip, in perf_sample__fprintf_brstackinsn()
1288 dump_insn(&x, sample->ip, buffer, len, NULL)); in perf_sample__fprintf_brstackinsn()
1290 print_srccode(thread, x.cpumode, sample->ip); in perf_sample__fprintf_brstackinsn()
1293 for (off = 0; off <= end - start; off += ilen) { in perf_sample__fprintf_brstackinsn()
1296 dump_insn(&x, start + off, buffer + off, len - off, &ilen)); in perf_sample__fprintf_brstackinsn()
1299 if (arch_is_branch(buffer + off, len - off, x.is64bit) && start + off != sample->ip) { in perf_sample__fprintf_brstackinsn()
1318 int printed = fprintf(fp, "%16" PRIx64, sample->addr); in perf_sample__fprintf_addr()
1349 struct perf_event_attr *attr = &evsel->core.attr; in resolve_branch_sym()
1352 if (sample->flags & (PERF_IP_FLAG_CALL | PERF_IP_FLAG_TRACE_BEGIN)) { in resolve_branch_sym()
1354 if (!addr_al->thread) in resolve_branch_sym()
1356 if (addr_al->sym) in resolve_branch_sym()
1357 name = addr_al->sym->name; in resolve_branch_sym()
1359 *ip = sample->addr; in resolve_branch_sym()
1361 *ip = sample->addr; in resolve_branch_sym()
1363 } else if (sample->flags & (PERF_IP_FLAG_RETURN | PERF_IP_FLAG_TRACE_END)) { in resolve_branch_sym()
1364 if (al->sym) in resolve_branch_sym()
1365 name = al->sym->name; in resolve_branch_sym()
1367 *ip = sample->ip; in resolve_branch_sym()
1379 struct perf_event_attr *attr = &evsel->core.attr; in perf_sample__fprintf_callindent()
1380 size_t depth = thread_stack__depth(thread, sample->cpu); in perf_sample__fprintf_callindent()
1391 if (thread->ts && sample->flags & PERF_IP_FLAG_RETURN) in perf_sample__fprintf_callindent()
1398 dlen += map__fprintf_dsoname(al->map, fp); in perf_sample__fprintf_callindent()
1414 if (len > spacing || (len && len < spacing - 52)) in perf_sample__fprintf_callindent()
1418 len += fprintf(fp, "%*s", spacing - len, ""); in perf_sample__fprintf_callindent()
1432 if (sample->insn_len == 0 && native_arch) in script_fetch_insn()
1446 printed += fprintf(fp, " ilen: %d", sample->insn_len); in perf_sample__fprintf_insn()
1447 if (PRINT_FIELD(INSN) && sample->insn_len) { in perf_sample__fprintf_insn()
1451 for (i = 0; i < sample->insn_len; i++) in perf_sample__fprintf_insn()
1452 printed += fprintf(fp, " %02x", (unsigned char)sample->insn[i]); in perf_sample__fprintf_insn()
1465 if (!PRINT_FIELD(IPC) || !sample->cyc_cnt || !sample->insn_cnt) in perf_sample__fprintf_ipc()
1468 ipc = (sample->insn_cnt * 100) / sample->cyc_cnt; in perf_sample__fprintf_ipc()
1471 ipc / 100, ipc % 100, sample->insn_cnt, sample->cyc_cnt); in perf_sample__fprintf_ipc()
1481 struct perf_event_attr *attr = &evsel->core.attr; in perf_sample__fprintf_bts()
1482 unsigned int type = output_type(attr->type); in perf_sample__fprintf_bts()
1494 if (symbol_conf.use_callchain && sample->callchain && in perf_sample__fprintf_bts()
1495 thread__resolve_callchain(al->thread, &callchain_cursor, evsel, in perf_sample__fprintf_bts()
1514 ((evsel->core.attr.sample_type & PERF_SAMPLE_ADDR) && in perf_sample__fprintf_bts()
1523 printed += map__fprintf_srcline(al->map, al->addr, "\n ", fp); in perf_sample__fprintf_bts()
1528 int ret = map__fprintf_srccode(al->map, al->addr, stdout, in perf_sample__fprintf_bts()
1529 &thread->srccode_state); in perf_sample__fprintf_bts()
1582 return snprintf(str, sz, "%-15s%4s", name, in_tx ? "(x)" : ""); in perf_sample__sprintf_flags()
1587 return snprintf(str, sz, "tr strt %-7s%4s", name, in_tx ? "(x)" : ""); in perf_sample__sprintf_flags()
1593 return snprintf(str, sz, "tr end %-7s%4s", name, in_tx ? "(x)" : ""); in perf_sample__sprintf_flags()
1615 return fprintf(fp, " %-19s ", str); in perf_sample__fprintf_flags()
1637 printed += fprintf(fp, "%17s", !printer_data->line_no ? "BPF output:" : in sample__fprintf_bpf_output()
1653 if (printer_data->hit_nul && ch) in sample__fprintf_bpf_output()
1654 printer_data->is_printable = false; in sample__fprintf_bpf_output()
1659 if (!printer_data->is_printable) in sample__fprintf_bpf_output()
1663 printer_data->hit_nul = true; in sample__fprintf_bpf_output()
1665 printer_data->is_printable = false; in sample__fprintf_bpf_output()
1675 printer_data->line_no++; in sample__fprintf_bpf_output()
1687 unsigned int nr_bytes = sample->raw_size; in perf_sample__fprintf_bpf_output()
1689 int printed = binary__fprintf(sample->raw_data, nr_bytes, 8, in perf_sample__fprintf_bpf_output()
1693 printed += fprintf(fp, "%17s \"%s\"\n", "BPF string:", (char *)(sample->raw_data)); in perf_sample__fprintf_bpf_output()
1701 return fprintf(fp, "%*s", spacing - len, ""); in perf_sample__fprintf_spacing()
1720 data->ip, le64_to_cpu(data->payload)); in perf_sample__fprintf_synth_ptwrite()
1733 data->hints, data->extensions); in perf_sample__fprintf_synth_mwait()
1745 len = fprintf(fp, " hw: %u cstate: %u sub-cstate: %u ", in perf_sample__fprintf_synth_pwre()
1746 data->hw, data->cstate, data->subcstate); in perf_sample__fprintf_synth_pwre()
1758 len = fprintf(fp, " IP: %u ", data->ip); in perf_sample__fprintf_synth_exstop()
1771 data->deepest_cstate, data->last_cstate, in perf_sample__fprintf_synth_pwrx()
1772 data->wake_reason); in perf_sample__fprintf_synth_pwrx()
1785 freq = (le32_to_cpu(data->freq) + 500) / 1000; in perf_sample__fprintf_synth_cbr()
1786 len = fprintf(fp, " cbr: %2u freq: %4u MHz ", data->cbr, freq); in perf_sample__fprintf_synth_cbr()
1787 if (data->max_nonturbo) { in perf_sample__fprintf_synth_cbr()
1788 percent = (5 + (1000 * data->cbr) / data->max_nonturbo) / 10; in perf_sample__fprintf_synth_cbr()
1802 len = fprintf(fp, " psb offs: %#" PRIx64, data->offset); in perf_sample__fprintf_synth_psb()
1809 switch (evsel->core.attr.config) { in perf_sample__fprintf_synth()
1859 return fprintf(fp, "%-*s", maxlen, out); in data_src__fprintf()
1878 perf_sample__fprintf_start(NULL, mctx->sample, mctx->thread, mctx->evsel, in script_print_metric()
1879 PERF_RECORD_SAMPLE, mctx->fp); in script_print_metric()
1880 fputs("\tmetric: ", mctx->fp); in script_print_metric()
1882 color_fprintf(mctx->fp, color, fmt, val); in script_print_metric()
1885 fprintf(mctx->fp, " %s\n", unit); in script_print_metric()
1893 perf_sample__fprintf_start(NULL, mctx->sample, mctx->thread, mctx->evsel, in script_new_line()
1894 PERF_RECORD_SAMPLE, mctx->fp); in script_new_line()
1895 fputs("\tmetric: ", mctx->fp); in script_new_line()
1919 if (!evsel->stats) in perf_sample__fprint_metric()
1920 evlist__alloc_stats(script->session->evlist, false); in perf_sample__fprint_metric()
1921 if (evsel_script(leader)->gnum++ == 0) in perf_sample__fprint_metric()
1923 val = sample->period * evsel->scale; in perf_sample__fprint_metric()
1926 sample->cpu, in perf_sample__fprint_metric()
1928 evsel_script(evsel)->val = val; in perf_sample__fprint_metric()
1929 if (evsel_script(leader)->gnum == leader->core.nr_members) { in perf_sample__fprint_metric()
1932 evsel_script(ev2)->val, in perf_sample__fprint_metric()
1933 sample->cpu, in perf_sample__fprint_metric()
1938 evsel_script(leader)->gnum = 0; in perf_sample__fprint_metric()
1948 int depth = thread_stack__depth(thread, sample->cpu); in show_event()
1953 if (thread->filter) { in show_event()
1954 if (depth <= thread->filter_entry_depth) { in show_event()
1955 thread->filter = false; in show_event()
1972 thread->filter = true; in show_event()
1973 thread->filter_entry_depth = depth; in show_event()
1990 struct thread *thread = al->thread; in process_event()
1991 struct perf_event_attr *attr = &evsel->core.attr; in process_event()
1992 unsigned int type = output_type(attr->type); in process_event()
1993 struct evsel_script *es = evsel->priv; in process_event()
1994 FILE *fp = es->fp; in process_event()
2000 ++es->samples; in process_event()
2006 fprintf(fp, "%10" PRIu64 " ", sample->period); in process_event()
2011 if (!script->name_width) in process_event()
2012 script->name_width = evlist__max_name_len(script->session->evlist); in process_event()
2014 fprintf(fp, "%*s: ", script->name_width, evname ?: "[unknown]"); in process_event()
2018 perf_sample__fprintf_flags(sample->flags, fp); in process_event()
2025 if (PRINT_FIELD(TRACE) && sample->raw_data) { in process_event()
2026 event_format__fprintf(evsel->tp_format, sample->cpu, in process_event()
2027 sample->raw_data, sample->raw_size, fp); in process_event()
2030 if (attr->type == PERF_TYPE_SYNTH && PRINT_FIELD(SYNTH)) in process_event()
2037 data_src__fprintf(sample->data_src, fp); in process_event()
2040 fprintf(fp, "%16" PRIu64, sample->weight); in process_event()
2045 if (script->stitch_lbr) in process_event()
2046 al->thread->lbr_stitch_enable = true; in process_event()
2048 if (symbol_conf.use_callchain && sample->callchain && in process_event()
2049 thread__resolve_callchain(al->thread, &callchain_cursor, evsel, in process_event()
2076 fprintf(fp, "%16" PRIx64, sample->phys_addr); in process_event()
2079 fprintf(fp, " %s", get_page_size_name(sample->data_page_size, str)); in process_event()
2082 fprintf(fp, " %s", get_page_size_name(sample->code_page_size, str)); in process_event()
2089 if (map__fprintf_srccode(al->map, al->addr, stdout, in process_event()
2090 &thread->srccode_state)) in process_event()
2105 int nthreads = perf_thread_map__nr(counter->core.threads); in __process_stat()
2110 if (counter->core.system_wide) in __process_stat()
2123 counts = perf_counts(counter->counts, cpu, thread); in __process_stat()
2126 counter->core.cpus->map[cpu], in __process_stat()
2127 perf_thread_map__pid(counter->core.threads, thread), in __process_stat()
2128 counts->val, in __process_stat()
2129 counts->ena, in __process_stat()
2130 counts->run, in __process_stat()
2139 if (scripting_ops && scripting_ops->process_stat) in process_stat()
2140 scripting_ops->process_stat(&stat_config, counter, tstamp); in process_stat()
2147 if (scripting_ops && scripting_ops->process_stat_interval) in process_stat_interval()
2148 scripting_ops->process_stat_interval(tstamp); in process_stat_interval()
2159 return scripting_ops ? scripting_ops->flush_script() : 0; in flush_scripting()
2166 return scripting_ops ? scripting_ops->stop_script() : 0; in cleanup_scripting()
2171 if (cpu_list && sample->cpu != (u32)-1) in filter_cpu()
2172 return !test_bit(sample->cpu, cpu_bitmap); in filter_cpu()
2198 if (perf_time__ranges_skip_sample(scr->ptime_range, scr->range_num, in process_sample_event()
2199 sample->time)) { in process_sample_event()
2204 if (sample->time < last_timestamp) { in process_sample_event()
2207 sample->time); in process_sample_event()
2210 last_timestamp = sample->time; in process_sample_event()
2219 event->header.type); in process_sample_event()
2220 ret = -1; in process_sample_event()
2230 if (evswitch__discard(&scr->evswitch, evsel)) in process_sample_event()
2243 if ((evsel->core.attr.sample_type & PERF_SAMPLE_ADDR) && in process_sample_event()
2244 sample_addr_correlates_sym(&evsel->core.attr)) { in process_sample_event()
2249 scripting_ops->process_event(event, sample, evsel, &al, addr_al_ptr); in process_sample_event()
2277 if (!evsel->priv) { in process_attr()
2278 if (scr->per_event_dump) { in process_attr()
2279 evsel->priv = evsel_script__new(evsel, scr->session->data); in process_attr()
2283 return -ENOMEM; in process_attr()
2284 es->fp = stdout; in process_attr()
2285 evsel->priv = es; in process_attr()
2289 if (evsel->core.attr.type >= PERF_TYPE_MAX && in process_attr()
2290 evsel->core.attr.type != PERF_TYPE_SYNTH) in process_attr()
2294 if (pos->core.attr.type == evsel->core.attr.type && pos != evsel) in process_attr()
2298 if (evsel->core.attr.sample_type) { in process_attr()
2299 err = evsel__check_attr(evsel, scr->session); in process_attr()
2317 int type = output_type(evsel->core.attr.type); in process_attr()
2324 set_print_ip_opts(&evsel->core.attr); in process_attr()
2335 struct perf_session *session = script->session; in print_event_with_time()
2336 struct evsel *evsel = evlist__id2evsel(session->evlist, sample->id); in print_event_with_time()
2339 if (evsel && !evsel->core.attr.sample_id_all) { in print_event_with_time()
2340 sample->cpu = 0; in print_event_with_time()
2341 sample->time = timestamp; in print_event_with_time()
2342 sample->pid = pid; in print_event_with_time()
2343 sample->tid = tid; in print_event_with_time()
2349 if (tid != -1) in print_event_with_time()
2354 event->header.type, stdout); in print_event_with_time()
2377 return -1; in process_comm_event()
2379 return print_event(tool, event, sample, machine, event->comm.pid, in process_comm_event()
2380 event->comm.tid); in process_comm_event()
2389 return -1; in process_namespaces_event()
2391 return print_event(tool, event, sample, machine, event->namespaces.pid, in process_namespaces_event()
2392 event->namespaces.tid); in process_namespaces_event()
2401 return -1; in process_cgroup_event()
2403 return print_event(tool, event, sample, machine, sample->pid, in process_cgroup_event()
2404 sample->tid); in process_cgroup_event()
2413 return -1; in process_fork_event()
2416 event->fork.pid, event->fork.tid, in process_fork_event()
2417 event->fork.time); in process_fork_event()
2425 if (print_event_with_time(tool, event, sample, machine, event->fork.pid, in process_exit_event()
2426 event->fork.tid, event->fork.time)) in process_exit_event()
2427 return -1; in process_exit_event()
2438 return -1; in process_mmap_event()
2440 return print_event(tool, event, sample, machine, event->mmap.pid, in process_mmap_event()
2441 event->mmap.tid); in process_mmap_event()
2450 return -1; in process_mmap2_event()
2452 return print_event(tool, event, sample, machine, event->mmap2.pid, in process_mmap2_event()
2453 event->mmap2.tid); in process_mmap2_event()
2464 return -1; in process_switch_event()
2466 if (scripting_ops && scripting_ops->process_switch) in process_switch_event()
2467 scripting_ops->process_switch(event, sample, machine); in process_switch_event()
2469 if (!script->show_switch_events) in process_switch_event()
2472 return print_event(tool, event, sample, machine, sample->pid, in process_switch_event()
2473 sample->tid); in process_switch_event()
2479 if (scripting_ops && scripting_ops->process_auxtrace_error) { in process_auxtrace_error()
2480 scripting_ops->process_auxtrace_error(session, event); in process_auxtrace_error()
2493 return print_event(tool, event, sample, machine, sample->pid, in process_lost_event()
2494 sample->tid); in process_lost_event()
2503 if (scripting_ops && scripting_ops->process_throttle) in process_throttle_event()
2504 scripting_ops->process_throttle(event, sample, machine); in process_throttle_event()
2525 return -1; in process_bpf_events()
2527 return print_event(tool, event, sample, machine, sample->pid, in process_bpf_events()
2528 sample->tid); in process_bpf_events()
2537 return -1; in process_text_poke_events()
2539 return print_event(tool, event, sample, machine, sample->pid, in process_text_poke_events()
2540 sample->tid); in process_text_poke_events()
2550 struct evlist *evlist = script->session->evlist; in perf_script__fclose_per_event_dump()
2554 if (!evsel->priv) in perf_script__fclose_per_event_dump()
2556 evsel_script__delete(evsel->priv); in perf_script__fclose_per_event_dump()
2557 evsel->priv = NULL; in perf_script__fclose_per_event_dump()
2565 evlist__for_each_entry(script->session->evlist, evsel) { in perf_script__fopen_per_event_dump()
2573 if (evsel->priv != NULL) in perf_script__fopen_per_event_dump()
2576 evsel->priv = evsel_script__new(evsel, script->session->data); in perf_script__fopen_per_event_dump()
2577 if (evsel->priv == NULL) in perf_script__fopen_per_event_dump()
2585 return -1; in perf_script__fopen_per_event_dump()
2593 if (script->per_event_dump) in perf_script__setup_per_event_dump()
2598 evlist__for_each_entry(script->session->evlist, evsel) in perf_script__setup_per_event_dump()
2599 evsel->priv = &es_stdout; in perf_script__setup_per_event_dump()
2608 evlist__for_each_entry(script->session->evlist, evsel) { in perf_script__exit_per_event_dump_stats()
2609 struct evsel_script *es = evsel->priv; in perf_script__exit_per_event_dump_stats()
2613 evsel->priv = NULL; in perf_script__exit_per_event_dump_stats()
2619 perf_thread_map__put(script->threads); in perf_script__exit()
2620 perf_cpu_map__put(script->cpus); in perf_script__exit()
2632 if (script->show_task_events) { in __cmd_script()
2633 script->tool.comm = process_comm_event; in __cmd_script()
2634 script->tool.fork = process_fork_event; in __cmd_script()
2635 script->tool.exit = process_exit_event; in __cmd_script()
2637 if (script->show_mmap_events) { in __cmd_script()
2638 script->tool.mmap = process_mmap_event; in __cmd_script()
2639 script->tool.mmap2 = process_mmap2_event; in __cmd_script()
2641 if (script->show_switch_events || (scripting_ops && scripting_ops->process_switch)) in __cmd_script()
2642 script->tool.context_switch = process_switch_event; in __cmd_script()
2643 if (scripting_ops && scripting_ops->process_auxtrace_error) in __cmd_script()
2644 script->tool.auxtrace_error = process_auxtrace_error; in __cmd_script()
2645 if (script->show_namespace_events) in __cmd_script()
2646 script->tool.namespaces = process_namespaces_event; in __cmd_script()
2647 if (script->show_cgroup_events) in __cmd_script()
2648 script->tool.cgroup = process_cgroup_event; in __cmd_script()
2649 if (script->show_lost_events) in __cmd_script()
2650 script->tool.lost = process_lost_event; in __cmd_script()
2651 if (script->show_round_events) { in __cmd_script()
2652 script->tool.ordered_events = false; in __cmd_script()
2653 script->tool.finished_round = process_finished_round_event; in __cmd_script()
2655 if (script->show_bpf_events) { in __cmd_script()
2656 script->tool.ksymbol = process_bpf_events; in __cmd_script()
2657 script->tool.bpf = process_bpf_events; in __cmd_script()
2659 if (script->show_text_poke_events) { in __cmd_script()
2660 script->tool.ksymbol = process_bpf_events; in __cmd_script()
2661 script->tool.text_poke = process_text_poke_events; in __cmd_script()
2666 return -1; in __cmd_script()
2669 ret = perf_session__process_events(script->session); in __cmd_script()
2671 if (script->per_event_dump) in __cmd_script()
2694 strcpy(s->spec, spec); in script_spec__new()
2695 s->ops = ops; in script_spec__new()
2703 list_add_tail(&s->node, &script_specs); in script_spec__add()
2711 if (strcasecmp(s->spec, spec) == 0) in script_spec__find()
2722 return -1; in script_spec_register()
2726 return -1; in script_spec_register()
2739 return s->ops; in script_spec__lookup()
2748 "perf script -s [spec:]script.[spec]):\n\n"); in list_available_languages()
2751 fprintf(stderr, " %-42s [%s]\n", s->spec, s->ops->name); in list_available_languages()
2778 exec_path, scripting_ops->dirname, script); in find_script()
2801 len = script - str; in parse_scriptname()
2804 return -1; in parse_scriptname()
2811 return -1; in parse_scriptname()
2818 fprintf(stderr, "invalid script extension"); in parse_scriptname()
2819 return -1; in parse_scriptname()
2823 fprintf(stderr, "invalid script extension"); in parse_scriptname()
2824 return -1; in parse_scriptname()
2843 int type = -1; in parse_output_fields()
2847 return -ENOMEM; in parse_output_fields()
2861 else if (!strcmp(str, "trace")) in parse_output_fields()
2871 rc = -EINVAL; in parse_output_fields()
2879 /* Don't override defaults for +- */ in parse_output_fields()
2880 if (strchr(tok, '+') || strchr(tok, '-')) in parse_output_fields()
2892 rc = -EINVAL; in parse_output_fields()
2896 /* Don't override defaults for +- */ in parse_output_fields()
2897 if (strchr(str, '+') || strchr(str, '-')) in parse_output_fields()
2917 } else if (*tok == '-') { in parse_output_fields()
2938 rc = -EINVAL; in parse_output_fields()
2942 if (type == -1) { in parse_output_fields()
2969 rc = -EINVAL; in parse_output_fields()
2990 fprintf(stderr, "Cannot mix +-field with overridden fields\n"); in parse_output_fields()
2991 rc = -EINVAL; in parse_output_fields()
2999 if ((lang_dirent->d_type == DT_DIR || \
3000 (lang_dirent->d_type == DT_UNKNOWN && \
3002 (strcmp(lang_dirent->d_name, ".")) && \
3003 (strcmp(lang_dirent->d_name, "..")))
3007 if (script_dirent->d_type != DT_DIR && \
3008 (script_dirent->d_type != DT_UNKNOWN || \
3012 #define RECORD_SUFFIX "-record"
3013 #define REPORT_SUFFIX "-report"
3029 s->name = strdup(name); in script_desc__new()
3036 zfree(&s->name); in script_desc__delete()
3037 zfree(&s->half_liner); in script_desc__delete()
3038 zfree(&s->args); in script_desc__delete()
3044 list_add_tail(&s->node, &script_descs); in script_desc__add()
3052 if (strcasecmp(s->name, name) == 0) in script_desc__find()
3079 p = str + strlen(str) - suffix_len; in ends_with()
3094 return -1; in read_script_info()
3107 if (strlen(p) && p[strlen(p) - 1] == '\n') in read_script_info()
3108 p[strlen(p) - 1] = '\0'; in read_script_info()
3112 desc->half_liner = strdup(skip_spaces(p)); in read_script_info()
3118 desc->args = strdup(skip_spaces(p)); in read_script_info()
3132 script_root = strdup(script_dirent->d_name); in get_script_root()
3167 exit(-1); in list_available_scripts()
3172 lang_dirent->d_name); in list_available_scripts()
3182 lang_path, script_dirent->d_name); in list_available_scripts()
3189 fprintf(stdout, "List of available trace scripts:\n"); in list_available_scripts()
3191 sprintf(first_half, "%s %s", desc->name, in list_available_scripts()
3192 desc->args ? desc->args : ""); in list_available_scripts()
3193 fprintf(stdout, " %-36s %s\n", first_half, in list_available_scripts()
3194 desc->half_liner ? desc->half_liner : ""); in list_available_scripts()
3207 return -1; in add_dlarg()
3212 return -1; in add_dlarg()
3223 while (dlargc--) in free_dlarg()
3229 * Some scripts specify the required events in their "xxx-record" file,
3231 * mentioned in the "xxx-record".
3233 * Fixme: All existing "xxx-record" are all in good formats "-e event ",
3246 scnprintf(filename, MAXPATHLEN, "%s/bin/%s-record", dir_name, scriptname); in check_ev_match()
3250 return -1; in check_ev_match()
3258 p = strstr(p, "-e"); in check_ev_match()
3271 evlist__for_each_entry(session->evlist, pos) { in check_ev_match()
3280 return -1; in check_ev_match()
3290 * Return -1 if none is found, otherwise the actual scripts number.
3319 return -1; in find_scripts()
3324 lang_dirent->d_name); in find_scripts()
3340 if (strstr(script_dirent->d_name, "top.")) in find_scripts()
3346 script_dirent->d_name); in find_scripts()
3347 temp = strchr(script_dirent->d_name, '.'); in find_scripts()
3349 (temp - script_dirent->d_name) + 1, in find_scripts()
3350 "%s", script_dirent->d_name); in find_scripts()
3383 lang_dirent->d_name); in get_script_path()
3394 lang_path, script_dirent->d_name); in get_script_path()
3423 if (!desc->args) in has_required_arg()
3426 for (p = desc->args; *p; p++) in has_required_arg()
3441 return -1; in have_cmd()
3456 struct perf_session *session = script->session; in script__setup_sample_type()
3457 u64 sample_type = evlist__combined_sample_type(session->evlist); in script__setup_sample_type()
3470 if (script->stitch_lbr && (callchain_param.record_mode != CALLCHAIN_LBR)) { in script__setup_sample_type()
3471 pr_warning("Can't find LBR callchain. Switch off --stitch-lbr.\n" in script__setup_sample_type()
3472 "Please apply --call-graph lbr when recording.\n"); in script__setup_sample_type()
3473 script->stitch_lbr = false; in script__setup_sample_type()
3480 struct perf_record_stat_round *round = &event->stat_round; in process_stat_round_event()
3483 evlist__for_each_entry(session->evlist, counter) { in process_stat_round_event()
3485 process_stat(counter, round->time); in process_stat_round_event()
3488 process_stat_interval(round->time); in process_stat_round_event()
3495 perf_event__read_stat_config(&stat_config, &event->stat_config); in process_stat_config_event()
3501 struct evlist *evlist = script->session->evlist; in set_maps()
3503 if (!script->cpus || !script->threads) in set_maps()
3506 if (WARN_ONCE(script->allocated, "stats double allocation\n")) in set_maps()
3507 return -EINVAL; in set_maps()
3509 perf_evlist__set_maps(&evlist->core, script->cpus, script->threads); in set_maps()
3512 return -ENOMEM; in set_maps()
3514 script->allocated = true; in set_maps()
3522 struct perf_tool *tool = session->tool; in process_thread_map_event()
3525 if (script->threads) { in process_thread_map_event()
3530 script->threads = thread_map__new_event(&event->thread_map); in process_thread_map_event()
3531 if (!script->threads) in process_thread_map_event()
3532 return -ENOMEM; in process_thread_map_event()
3541 struct perf_tool *tool = session->tool; in process_cpu_map_event()
3544 if (script->cpus) { in process_cpu_map_event()
3549 script->cpus = cpu_map__new_data(&event->cpu_map.data); in process_cpu_map_event()
3550 if (!script->cpus) in process_cpu_map_event()
3551 return -ENOMEM; in process_cpu_map_event()
3559 if (event->feat.feat_id < HEADER_LAST_FEATURE) in process_feature_event()
3568 struct perf_tool *tool = session->tool; in perf_script__process_auxtrace_info()
3588 parse_output_fields(NULL, "+insn,-event,-period", 0); in parse_insn_trace()
3599 force_pager("xed -F insn: -A -64 | less"); in parse_xed()
3601 force_pager("xed -F insn: -A -64"); in parse_xed()
3609 parse_output_fields(NULL, "-ip,-addr,-event,-period,+callindent", 0); in parse_call_trace()
3620 parse_output_fields(NULL, "-ip,-addr,-event,-period,+callindent,+flags", 0); in parse_callret_trace()
3678 OPT_BOOLEAN('D', "dump-raw-trace", &dump_trace, in cmd_script()
3679 "dump raw trace in ASCII"), in cmd_script()
3686 OPT_CALLBACK_NOOPT(0, "list-dlfilters", NULL, NULL, "list available dlfilters", in cmd_script()
3691 OPT_STRING('g', "gen-script", &generate_script_lang, "lang", in cmd_script()
3692 "generate perf-script.xx script in specified language"), in cmd_script()
3697 OPT_BOOLEAN('d', "debug-mode", &debug_mode, in cmd_script()
3700 OPT_BOOLEAN(0, "header-only", &header_only, "Show only data header."), in cmd_script()
3705 OPT_BOOLEAN('G', "hide-call-graph", &no_callchain, in cmd_script()
3712 "+field to add and -field to remove." in cmd_script()
3713 "Valid types: hw,sw,trace,raw,synth. " in cmd_script()
3714 "Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso," in cmd_script()
3716 "brstacksym,flags,bpf-output,brstackinsn,brstackoff," in cmd_script()
3720 OPT_BOOLEAN('a', "all-cpus", &system_wide, in cmd_script()
3721 "system-wide collection from all CPUs"), in cmd_script()
3726 OPT_INTEGER(0, "addr-range", &symbol_conf.addr_range, in cmd_script()
3727 "Use with -S to list traced records within address range"), in cmd_script()
3728 OPT_CALLBACK_OPTARG(0, "insn-trace", &itrace_synth_opts, NULL, NULL, in cmd_script()
3732 OPT_CALLBACK_OPTARG(0, "call-trace", &itrace_synth_opts, NULL, NULL, in cmd_script()
3734 OPT_CALLBACK_OPTARG(0, "call-ret-trace", &itrace_synth_opts, NULL, NULL, in cmd_script()
3736 OPT_STRING(0, "graph-function", &symbol_conf.graph_function, "symbol[,symbol...]", in cmd_script()
3737 "Only print symbols and callees with --call-trace/--call-ret-trace"), in cmd_script()
3738 OPT_STRING(0, "stop-bt", &symbol_conf.bt_stop_list_str, "symbol[,symbol...]", in cmd_script()
3747 OPT_UINTEGER(0, "max-stack", &scripting_max_stack, in cmd_script()
3753 OPT_BOOLEAN('I', "show-info", &show_full_info, in cmd_script()
3755 OPT_BOOLEAN('\0', "show-kernel-path", &symbol_conf.show_kernel_path, in cmd_script()
3757 OPT_BOOLEAN('\0', "show-task-events", &script.show_task_events, in cmd_script()
3759 OPT_BOOLEAN('\0', "show-mmap-events", &script.show_mmap_events, in cmd_script()
3761 OPT_BOOLEAN('\0', "show-switch-events", &script.show_switch_events, in cmd_script()
3763 OPT_BOOLEAN('\0', "show-namespace-events", &script.show_namespace_events, in cmd_script()
3765 OPT_BOOLEAN('\0', "show-cgroup-events", &script.show_cgroup_events, in cmd_script()
3767 OPT_BOOLEAN('\0', "show-lost-events", &script.show_lost_events, in cmd_script()
3769 OPT_BOOLEAN('\0', "show-round-events", &script.show_round_events, in cmd_script()
3771 OPT_BOOLEAN('\0', "show-bpf-events", &script.show_bpf_events, in cmd_script()
3773 OPT_BOOLEAN('\0', "show-text-poke-events", &script.show_text_poke_events, in cmd_script()
3775 OPT_BOOLEAN('\0', "per-event-dump", &script.per_event_dump, in cmd_script()
3776 "Dump trace output to files named by the monitored events"), in cmd_script()
3778 OPT_INTEGER(0, "max-blocks", &max_blocks, in cmd_script()
3785 OPT_BOOLEAN(0, "full-source-path", &srcline_full_filename, in cmd_script()
3789 OPT_BOOLEAN(0, "demangle-kernel", &symbol_conf.demangle_kernel, in cmd_script()
3804 OPT_BOOLEAN('\0', "stitch-lbr", &script.stitch_lbr, in cmd_script()
3812 "perf script [<options>] record <script> [<record-options>] <command>", in cmd_script()
3813 "perf script [<options>] report <script> [script-args]", in cmd_script()
3814 "perf script [<options>] <script> [<record-options>] <command>", in cmd_script()
3815 "perf script [<options>] <top-script> [script-args]", in cmd_script()
3850 "(see 'perf script -l' for listing)\n"); in cmd_script()
3851 return -1; in cmd_script()
3857 "reltime and deltatime - the two don't get along well. " in cmd_script()
3858 "Please limit to --reltime or --deltatime.\n"); in cmd_script()
3859 return -1; in cmd_script()
3880 argc -= 1; in cmd_script()
3886 " script -l for available scripts.\n", argv[0]); in cmd_script()
3890 rep_args = argc - 1; in cmd_script()
3895 rec_args = (argc - 1) - rep_args; in cmd_script()
3899 "\n\n See perf script -l for available " in cmd_script()
3906 return -1; in cmd_script()
3912 return -1; in cmd_script()
3924 if (have_cmd(argc - rep_args, &argv[rep_args]) != 0) { in cmd_script()
3925 err = -1; in cmd_script()
3933 err = -ENOMEM; in cmd_script()
3940 __argv[j++] = "-a"; in cmd_script()
3941 __argv[j++] = "-q"; in cmd_script()
3942 __argv[j++] = "-o"; in cmd_script()
3943 __argv[j++] = "-"; in cmd_script()
3950 exit(-1); in cmd_script()
3959 err = -ENOMEM; in cmd_script()
3968 __argv[j++] = "-i"; in cmd_script()
3969 __argv[j++] = "-"; in cmd_script()
3974 exit(-1); in cmd_script()
3988 if (have_cmd(argc - 1, &argv[1]) != 0) { in cmd_script()
3989 err = -1; in cmd_script()
3997 err = -ENOMEM; in cmd_script()
4004 __argv[j++] = "-a"; in cmd_script()
4011 exit(-1); in cmd_script()
4017 return -1; in cmd_script()
4038 if (symbol__init(&session->header.env) < 0) in cmd_script()
4044 } else if (session->header.env.arch) { in cmd_script()
4045 if (!strcmp(uts.machine, session->header.env.arch)) in cmd_script()
4048 !strcmp(session->header.env.arch, "i386")) in cmd_script()
4059 session->itrace_synth_opts = &itrace_synth_opts; in cmd_script()
4073 if (session->tevent.pevent && in cmd_script()
4074 tep_set_function_resolver(session->tevent.pevent, in cmd_script()
4076 &session->machines.host) < 0) { in cmd_script()
4078 err = -1; in cmd_script()
4089 err = -EINVAL; in cmd_script()
4095 err = -errno; in cmd_script()
4107 fprintf(stderr, "zero-sized file, nothing to do!\n"); in cmd_script()
4114 err = -ENOENT; in cmd_script()
4118 err = scripting_ops->generate_script(session->tevent.pevent, in cmd_script()
4119 "perf-script"); in cmd_script()
4128 err = scripting_ops->start_script(script_name, argc, argv, session); in cmd_script()
4154 err = evswitch__init(&script.evswitch, session->evlist, stderr); in cmd_script()
4158 if (zstd_init(&(session->zstd_data), 0) < 0) in cmd_script()
4171 zstd_fini(&(session->zstd_data)); in cmd_script()
4172 evlist__free_stats(session->evlist); in cmd_script()