Lines Matching +full:stdout +full:- +full:path

2  * probe-event.c : perf-probe definition to probe_events format converter
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
45 #include "trace-event.h" /* For __unused */
46 #include "probe-event.h"
47 #include "probe-finder.h"
57 /* If there is no space to write, returns -E2BIG. */
69 ret = -E2BIG; in e_snprintf()
76 /* Initialize symbol maps and path of vmlinux/modules */
102 pr_warning("Failed to init vmlinux path.\n"); in init_vmlinux()
118 /* A file path -- this is an offline module */ in kernel_get_module_map()
125 for (nd = rb_first(&grp->maps[MAP__FUNCTION]); nd; nd = rb_next(nd)) { in kernel_get_module_map()
127 if (strncmp(pos->dso->short_name + 1, module, in kernel_get_module_map()
128 pos->dso->short_name_len - 2) == 0) { in kernel_get_module_map()
143 if (strncmp(dso->short_name + 1, module, in kernel_get_module_dso()
144 dso->short_name_len - 2) == 0) in kernel_get_module_dso()
152 dso = map->dso; in kernel_get_module_dso()
171 return (dso) ? dso->long_name : NULL; in kernel_get_module_path()
178 const char *path; in open_debuginfo() local
180 /* A file path -- this is an offline module */ in open_debuginfo()
182 path = module; in open_debuginfo()
184 path = kernel_get_module_path(module); in open_debuginfo()
186 if (!path) { in open_debuginfo()
187 pr_err("Failed to find path of %s module.\n", in open_debuginfo()
192 return debuginfo__new(path); in open_debuginfo()
205 int ret = -ENOENT; in kprobe_convert_to_perf_probe()
208 sym = __find_kernel_function_by_name(tp->symbol, &map); in kprobe_convert_to_perf_probe()
210 addr = map->unmap_ip(map, sym->start + tp->offset); in kprobe_convert_to_perf_probe()
211 pr_debug("try to find %s+%ld@%" PRIx64 "\n", tp->symbol, in kprobe_convert_to_perf_probe()
212 tp->offset, addr); in kprobe_convert_to_perf_probe()
222 ret = -ENOENT; in kprobe_convert_to_perf_probe()
228 pp->function = strdup(tp->symbol); in kprobe_convert_to_perf_probe()
229 if (pp->function == NULL) in kprobe_convert_to_perf_probe()
230 return -ENOMEM; in kprobe_convert_to_perf_probe()
231 pp->offset = tp->offset; in kprobe_convert_to_perf_probe()
233 pp->retprobe = tp->retprobe; in kprobe_convert_to_perf_probe()
249 /* This is a module path -- get the module name */ in add_module_to_probe_trace_events()
252 return -ENOMEM; in add_module_to_probe_trace_events()
262 ret = -ENOMEM; in add_module_to_probe_trace_events()
285 return -ENOENT; in try_to_find_probe_trace_events()
306 synthesize_perf_probe_point(&pev->point)); in try_to_find_probe_trace_events()
307 return -ENOENT; in try_to_find_probe_trace_events()
309 /* Error path : ntevs < 0 */ in try_to_find_probe_trace_events()
311 if (ntevs == -EBADF) { in try_to_find_probe_trace_events()
312 pr_warning("Warning: No dwarf info found in the vmlinux - " in try_to_find_probe_trace_events()
323 * Find a src file from a DWARF tag path. Prepend optional source path prefix
325 * a newly allocated path on success.
326 * Return 0 if file was found and readable, -errno otherwise.
335 /* If not an absolute path, try to use comp_dir */ in get_real_path()
342 return -errno; in get_real_path()
348 return -ENOMEM; in get_real_path()
358 return -errno; in get_real_path()
369 return -ENOENT; in get_real_path()
376 return -errno; in get_real_path()
397 color_fprintf(stdout, color, prefix, l); in __show_one_line()
399 color_fprintf(stdout, color, "%s", buf); in __show_one_line()
407 return -1; in __show_one_line()
417 rv = -1; in _show_one_line()
428 * Show line-range always requires debuginfo to find source file and
448 return -ENOENT; in show_line_range()
455 return -ENOENT; in show_line_range()
461 /* Convert source file path */ in show_line_range()
462 tmp = lr->path; in show_line_range()
463 ret = get_real_path(tmp, lr->comp_dir, &lr->path); in show_line_range()
464 free(tmp); /* Free old path */ in show_line_range()
472 if (lr->function) in show_line_range()
473 fprintf(stdout, "<%s@%s:%d>\n", lr->function, lr->path, in show_line_range()
474 lr->start - lr->offset); in show_line_range()
476 fprintf(stdout, "<%s:%d>\n", lr->path, lr->start); in show_line_range()
478 fp = fopen(lr->path, "r"); in show_line_range()
480 pr_warning("Failed to open %s: %s\n", lr->path, in show_line_range()
482 return -errno; in show_line_range()
485 while (l < lr->start) { in show_line_range()
491 list_for_each_entry(ln, &lr->line_list, list) { in show_line_range()
492 for (; ln->line > l; l++) { in show_line_range()
493 ret = show_one_line(fp, l - lr->offset); in show_line_range()
497 ret = show_one_line_with_num(fp, l++ - lr->offset); in show_line_range()
502 if (lr->end == INT_MAX) in show_line_range()
503 lr->end = l + NR_ADDITIONAL_LINES; in show_line_range()
504 while (l <= lr->end) { in show_line_range()
505 ret = show_one_line_or_eof(fp, l++ - lr->offset); in show_line_range()
525 buf = synthesize_perf_probe_point(&pev->point); in show_available_vars_at()
527 return -EINVAL; in show_available_vars_at()
537 fprintf(stdout, "Available variables at %s\n", buf); in show_available_vars_at()
544 fprintf(stdout, "\t@<%s+%lu>\n", vl->point.symbol, in show_available_vars_at()
545 vl->point.offset); in show_available_vars_at()
546 free(vl->point.symbol); in show_available_vars_at()
548 if (vl->vars) { in show_available_vars_at()
549 strlist__for_each(node, vl->vars) { in show_available_vars_at()
550 var = strchr(node->s, '\t') + 1; in show_available_vars_at()
552 fprintf(stdout, "\t\t%s\n", node->s); in show_available_vars_at()
556 strlist__delete(vl->vars); in show_available_vars_at()
559 fprintf(stdout, "\t\t(No matched variables)\n"); in show_available_vars_at()
582 return -ENOENT; in show_available_vars()
602 sym = __find_kernel_function_by_name(tp->symbol, NULL); in kprobe_convert_to_perf_probe()
604 pr_err("Failed to find symbol %s in kernel.\n", tp->symbol); in kprobe_convert_to_perf_probe()
605 return -ENOENT; in kprobe_convert_to_perf_probe()
607 pp->function = strdup(tp->symbol); in kprobe_convert_to_perf_probe()
608 if (pp->function == NULL) in kprobe_convert_to_perf_probe()
609 return -ENOMEM; in kprobe_convert_to_perf_probe()
610 pp->offset = tp->offset; in kprobe_convert_to_perf_probe()
611 pp->retprobe = tp->retprobe; in kprobe_convert_to_perf_probe()
621 pr_warning("Debuginfo-analysis is not supported.\n"); in try_to_find_probe_trace_events()
622 return -ENOSYS; in try_to_find_probe_trace_events()
629 pr_warning("Debuginfo-analysis is not supported.\n"); in show_line_range()
630 return -ENOSYS; in show_line_range()
639 pr_warning("Debuginfo-analysis is not supported.\n"); in show_available_vars()
640 return -ENOSYS; in show_available_vars()
652 return -EINVAL; in parse_line_num()
661 * SRC[:SLN[+NUM|-ELN]]
662 * FNC[@SRC][:SLN[+NUM|-ELN]]
670 return -ENOMEM; in parse_line_range_desc()
672 lr->start = 0; in parse_line_range_desc()
673 lr->end = INT_MAX; in parse_line_range_desc()
679 err = parse_line_num(&range, &lr->start, "start line"); in parse_line_range_desc()
683 if (*range == '+' || *range == '-') { in parse_line_range_desc()
686 err = parse_line_num(&range, &lr->end, "end line"); in parse_line_range_desc()
691 lr->end += lr->start; in parse_line_range_desc()
698 lr->end--; in parse_line_range_desc()
702 pr_debug("Line range is %d to %d\n", lr->start, lr->end); in parse_line_range_desc()
704 err = -EINVAL; in parse_line_range_desc()
705 if (lr->start > lr->end) { in parse_line_range_desc()
719 lr->file = strdup(++file); in parse_line_range_desc()
720 if (lr->file == NULL) { in parse_line_range_desc()
721 err = -ENOMEM; in parse_line_range_desc()
724 lr->function = name; in parse_line_range_desc()
726 lr->file = name; in parse_line_range_desc()
728 lr->function = name; in parse_line_range_desc()
751 struct perf_probe_point *pp = &pev->point; in parse_perf_probe_point()
768 return -ENOTSUP; in parse_perf_probe_point()
771 semantic_error("%s is bad for event name -it must " in parse_perf_probe_point()
772 "follow C symbol-naming rule.\n", arg); in parse_perf_probe_point()
773 return -EINVAL; in parse_perf_probe_point()
775 pev->event = strdup(arg); in parse_perf_probe_point()
776 if (pev->event == NULL) in parse_perf_probe_point()
777 return -ENOMEM; in parse_perf_probe_point()
778 pev->group = NULL; in parse_perf_probe_point()
790 return -ENOMEM; in parse_perf_probe_point()
794 pp->file = tmp; in parse_perf_probe_point()
796 pp->function = tmp; in parse_perf_probe_point()
803 pp->lazy_line = strdup(arg); in parse_perf_probe_point()
804 if (pp->lazy_line == NULL) in parse_perf_probe_point()
805 return -ENOMEM; in parse_perf_probe_point()
815 pp->line = strtoul(arg, &tmp, 0); in parse_perf_probe_point()
817 semantic_error("There is non-digit char" in parse_perf_probe_point()
819 return -EINVAL; in parse_perf_probe_point()
823 pp->offset = strtoul(arg, &tmp, 0); in parse_perf_probe_point()
825 semantic_error("There is non-digit character" in parse_perf_probe_point()
827 return -EINVAL; in parse_perf_probe_point()
831 if (pp->file) { in parse_perf_probe_point()
833 return -EINVAL; in parse_perf_probe_point()
835 pp->file = strdup(arg); in parse_perf_probe_point()
836 if (pp->file == NULL) in parse_perf_probe_point()
837 return -ENOMEM; in parse_perf_probe_point()
841 pp->retprobe = 1; in parse_perf_probe_point()
844 return -ENOTSUP; in parse_perf_probe_point()
850 return -ENOTSUP; in parse_perf_probe_point()
856 if (pp->lazy_line && pp->line) { in parse_perf_probe_point()
859 return -EINVAL; in parse_perf_probe_point()
862 if (pp->lazy_line && pp->offset) { in parse_perf_probe_point()
864 return -EINVAL; in parse_perf_probe_point()
867 if (pp->line && pp->offset) { in parse_perf_probe_point()
869 return -EINVAL; in parse_perf_probe_point()
872 if (!pp->line && !pp->lazy_line && pp->file && !pp->function) { in parse_perf_probe_point()
875 return -EINVAL; in parse_perf_probe_point()
878 if (pp->offset && !pp->function) { in parse_perf_probe_point()
880 return -EINVAL; in parse_perf_probe_point()
883 if (pp->retprobe && !pp->function) { in parse_perf_probe_point()
885 return -EINVAL; in parse_perf_probe_point()
888 if ((pp->offset || pp->line || pp->lazy_line) && pp->retprobe) { in parse_perf_probe_point()
891 return -EINVAL; in parse_perf_probe_point()
895 pp->function, pp->file, pp->line, pp->offset, pp->retprobe, in parse_perf_probe_point()
896 pp->lazy_line); in parse_perf_probe_point()
900 /* Parse perf-probe event argument */
910 arg->name = strndup(str, tmp - str); in parse_perf_probe_arg()
911 if (arg->name == NULL) in parse_perf_probe_arg()
912 return -ENOMEM; in parse_perf_probe_arg()
913 pr_debug("name:%s ", arg->name); in parse_perf_probe_arg()
920 arg->type = strdup(tmp + 1); in parse_perf_probe_arg()
921 if (arg->type == NULL) in parse_perf_probe_arg()
922 return -ENOMEM; in parse_perf_probe_arg()
923 pr_debug("type:%s ", arg->type); in parse_perf_probe_arg()
926 tmp = strpbrk(str, "-.["); in parse_perf_probe_arg()
929 arg->var = strdup(str); in parse_perf_probe_arg()
930 if (arg->var == NULL) in parse_perf_probe_arg()
931 return -ENOMEM; in parse_perf_probe_arg()
932 pr_debug("%s\n", arg->var); in parse_perf_probe_arg()
937 arg->var = strndup(str, tmp - str); in parse_perf_probe_arg()
938 if (arg->var == NULL) in parse_perf_probe_arg()
939 return -ENOMEM; in parse_perf_probe_arg()
940 goodname = arg->var; in parse_perf_probe_arg()
941 pr_debug("%s, ", arg->var); in parse_perf_probe_arg()
942 fieldp = &arg->field; in parse_perf_probe_arg()
947 return -ENOMEM; in parse_perf_probe_arg()
950 (*fieldp)->index = strtol(str + 1, &tmp, 0); in parse_perf_probe_arg()
951 (*fieldp)->ref = true; in parse_perf_probe_arg()
955 return -EINVAL; in parse_perf_probe_arg()
963 (*fieldp)->ref = false; in parse_perf_probe_arg()
966 (*fieldp)->ref = true; in parse_perf_probe_arg()
970 return -EINVAL; in parse_perf_probe_arg()
972 tmp = strpbrk(str, "-.["); in parse_perf_probe_arg()
975 (*fieldp)->name = strndup(str, tmp - str); in parse_perf_probe_arg()
976 if ((*fieldp)->name == NULL) in parse_perf_probe_arg()
977 return -ENOMEM; in parse_perf_probe_arg()
979 goodname = (*fieldp)->name; in parse_perf_probe_arg()
980 pr_debug("%s(%d), ", (*fieldp)->name, (*fieldp)->ref); in parse_perf_probe_arg()
981 fieldp = &(*fieldp)->next; in parse_perf_probe_arg()
984 (*fieldp)->name = strdup(str); in parse_perf_probe_arg()
985 if ((*fieldp)->name == NULL) in parse_perf_probe_arg()
986 return -ENOMEM; in parse_perf_probe_arg()
988 goodname = (*fieldp)->name; in parse_perf_probe_arg()
989 pr_debug("%s(%d)\n", (*fieldp)->name, (*fieldp)->ref); in parse_perf_probe_arg()
992 if (!arg->name) { in parse_perf_probe_arg()
993 arg->name = strdup(goodname); in parse_perf_probe_arg()
994 if (arg->name == NULL) in parse_perf_probe_arg()
995 return -ENOMEM; in parse_perf_probe_arg()
1000 /* Parse perf-probe event command */
1009 return -ENOMEM; in parse_perf_probe_command()
1011 if (argc - 1 > MAX_PROBE_ARGS) { in parse_perf_probe_command()
1012 semantic_error("Too many probe arguments (%d).\n", argc - 1); in parse_perf_probe_command()
1013 ret = -ERANGE; in parse_perf_probe_command()
1022 pev->nargs = argc - 1; in parse_perf_probe_command()
1023 pev->args = zalloc(sizeof(struct perf_probe_arg) * pev->nargs); in parse_perf_probe_command()
1024 if (pev->args == NULL) { in parse_perf_probe_command()
1025 ret = -ENOMEM; in parse_perf_probe_command()
1028 for (i = 0; i < pev->nargs && ret >= 0; i++) { in parse_perf_probe_command()
1029 ret = parse_perf_probe_arg(argv[i + 1], &pev->args[i]); in parse_perf_probe_command()
1031 is_c_varname(pev->args[i].var) && pev->point.retprobe) { in parse_perf_probe_command()
1034 ret = -EINVAL; in parse_perf_probe_command()
1048 if (pev->point.file || pev->point.line || pev->point.lazy_line) in perf_probe_event_need_dwarf()
1051 for (i = 0; i < pev->nargs; i++) in perf_probe_event_need_dwarf()
1052 if (is_c_varname(pev->args[i].var)) in perf_probe_event_need_dwarf()
1062 struct probe_trace_point *tp = &tev->point; in parse_probe_trace_command()
1072 return -ENOMEM; in parse_probe_trace_command()
1076 ret = -ERANGE; in parse_probe_trace_command()
1082 &pr, (float *)(void *)&tev->group, in parse_probe_trace_command()
1083 (float *)(void *)&tev->event); in parse_probe_trace_command()
1086 ret = -EINVAL; in parse_probe_trace_command()
1089 pr_debug("Group:%s Event:%s probe:%c\n", tev->group, tev->event, pr); in parse_probe_trace_command()
1091 tp->retprobe = (pr == 'r'); in parse_probe_trace_command()
1096 tp->module = strndup(argv[1], p - argv[1]); in parse_probe_trace_command()
1100 ret = sscanf(p, "%a[^+]+%lu", (float *)(void *)&tp->symbol, in parse_probe_trace_command()
1101 &tp->offset); in parse_probe_trace_command()
1103 tp->offset = 0; in parse_probe_trace_command()
1105 tev->nargs = argc - 2; in parse_probe_trace_command()
1106 tev->args = zalloc(sizeof(struct probe_trace_arg) * tev->nargs); in parse_probe_trace_command()
1107 if (tev->args == NULL) { in parse_probe_trace_command()
1108 ret = -ENOMEM; in parse_probe_trace_command()
1111 for (i = 0; i < tev->nargs; i++) { in parse_probe_trace_command()
1117 tev->args[i].name = strdup(argv[i + 2]); in parse_probe_trace_command()
1119 tev->args[i].value = strdup(p); in parse_probe_trace_command()
1120 if (tev->args[i].name == NULL || tev->args[i].value == NULL) { in parse_probe_trace_command()
1121 ret = -ENOMEM; in parse_probe_trace_command()
1134 struct perf_probe_arg_field *field = pa->field; in synthesize_perf_probe_arg()
1138 if (pa->name && pa->var) in synthesize_perf_probe_arg()
1139 ret = e_snprintf(tmp, len, "%s=%s", pa->name, pa->var); in synthesize_perf_probe_arg()
1141 ret = e_snprintf(tmp, len, "%s", pa->name ? pa->name : pa->var); in synthesize_perf_probe_arg()
1145 len -= ret; in synthesize_perf_probe_arg()
1148 if (field->name[0] == '[') in synthesize_perf_probe_arg()
1149 ret = e_snprintf(tmp, len, "%s", field->name); in synthesize_perf_probe_arg()
1152 field->ref ? "->" : ".", field->name); in synthesize_perf_probe_arg()
1156 len -= ret; in synthesize_perf_probe_arg()
1157 field = field->next; in synthesize_perf_probe_arg()
1160 if (pa->type) { in synthesize_perf_probe_arg()
1161 ret = e_snprintf(tmp, len, ":%s", pa->type); in synthesize_perf_probe_arg()
1165 len -= ret; in synthesize_perf_probe_arg()
1168 return tmp - buf; in synthesize_perf_probe_arg()
1171 strerror(-ret)); in synthesize_perf_probe_arg()
1184 ret = -ENOMEM; in synthesize_perf_probe_point()
1187 if (pp->offset) { in synthesize_perf_probe_point()
1188 ret = e_snprintf(offs, 32, "+%lu", pp->offset); in synthesize_perf_probe_point()
1192 if (pp->line) { in synthesize_perf_probe_point()
1193 ret = e_snprintf(line, 32, ":%d", pp->line); in synthesize_perf_probe_point()
1197 if (pp->file) { in synthesize_perf_probe_point()
1198 tmp = pp->file; in synthesize_perf_probe_point()
1201 tmp = strchr(pp->file + len - 30, '/'); in synthesize_perf_probe_point()
1202 tmp = tmp ? tmp + 1 : pp->file + len - 30; in synthesize_perf_probe_point()
1209 if (pp->function) in synthesize_perf_probe_point()
1210 ret = e_snprintf(buf, MAX_CMDLEN, "%s%s%s%s%s", pp->function, in synthesize_perf_probe_point()
1211 offs, pp->retprobe ? "%return" : "", line, in synthesize_perf_probe_point()
1221 strerror(-ret)); in synthesize_perf_probe_point()
1233 buf = synthesize_perf_probe_point(&pev->point);
1238 for (i = 0; i < pev->nargs; i++) {
1239 ret = e_snprintf(&buf[len], MAX_CMDLEN - len, " %s",
1240 pev->args[i].name);
1257 if (ref->next) { in __synthesize_probe_trace_arg_ref()
1258 depth = __synthesize_probe_trace_arg_ref(ref->next, buf, in __synthesize_probe_trace_arg_ref()
1264 ret = e_snprintf(*buf, *buflen, "%+ld(", ref->offset); in __synthesize_probe_trace_arg_ref()
1269 *buflen -= ret; in __synthesize_probe_trace_arg_ref()
1279 struct probe_trace_arg_ref *ref = arg->ref; in synthesize_probe_trace_arg()
1284 if (arg->name) in synthesize_probe_trace_arg()
1285 ret = e_snprintf(buf, buflen, " %s=", arg->name); in synthesize_probe_trace_arg()
1291 buflen -= ret; in synthesize_probe_trace_arg()
1294 if (arg->value[0] == '@' && arg->ref) in synthesize_probe_trace_arg()
1295 ref = ref->next; in synthesize_probe_trace_arg()
1306 if (arg->value[0] == '@' && arg->ref) in synthesize_probe_trace_arg()
1307 ret = e_snprintf(buf, buflen, "%s%+ld", arg->value, in synthesize_probe_trace_arg()
1308 arg->ref->offset); in synthesize_probe_trace_arg()
1310 ret = e_snprintf(buf, buflen, "%s", arg->value); in synthesize_probe_trace_arg()
1314 buflen -= ret; in synthesize_probe_trace_arg()
1317 while (depth--) { in synthesize_probe_trace_arg()
1322 buflen -= ret; in synthesize_probe_trace_arg()
1325 if (arg->type) { in synthesize_probe_trace_arg()
1326 ret = e_snprintf(buf, buflen, ":%s", arg->type); in synthesize_probe_trace_arg()
1332 return buf - tmp; in synthesize_probe_trace_arg()
1337 struct probe_trace_point *tp = &tev->point; in synthesize_probe_trace_command()
1346 tp->retprobe ? 'r' : 'p', in synthesize_probe_trace_command()
1347 tev->group, tev->event, in synthesize_probe_trace_command()
1348 tp->module ?: "", tp->module ? ":" : "", in synthesize_probe_trace_command()
1349 tp->symbol, tp->offset); in synthesize_probe_trace_command()
1353 for (i = 0; i < tev->nargs; i++) { in synthesize_probe_trace_command()
1354 ret = synthesize_probe_trace_arg(&tev->args[i], buf + len, in synthesize_probe_trace_command()
1355 MAX_CMDLEN - len); in synthesize_probe_trace_command()
1374 pev->event = strdup(tev->event); in convert_to_perf_probe_event()
1375 pev->group = strdup(tev->group); in convert_to_perf_probe_event()
1376 if (pev->event == NULL || pev->group == NULL) in convert_to_perf_probe_event()
1377 return -ENOMEM; in convert_to_perf_probe_event()
1380 ret = kprobe_convert_to_perf_probe(&tev->point, &pev->point); in convert_to_perf_probe_event()
1385 pev->nargs = tev->nargs; in convert_to_perf_probe_event()
1386 pev->args = zalloc(sizeof(struct perf_probe_arg) * pev->nargs); in convert_to_perf_probe_event()
1387 if (pev->args == NULL) in convert_to_perf_probe_event()
1388 return -ENOMEM; in convert_to_perf_probe_event()
1389 for (i = 0; i < tev->nargs && ret >= 0; i++) { in convert_to_perf_probe_event()
1390 if (tev->args[i].name) in convert_to_perf_probe_event()
1391 pev->args[i].name = strdup(tev->args[i].name); in convert_to_perf_probe_event()
1393 ret = synthesize_probe_trace_arg(&tev->args[i], in convert_to_perf_probe_event()
1395 pev->args[i].name = strdup(buf); in convert_to_perf_probe_event()
1397 if (pev->args[i].name == NULL && ret >= 0) in convert_to_perf_probe_event()
1398 ret = -ENOMEM; in convert_to_perf_probe_event()
1409 struct perf_probe_point *pp = &pev->point; in clear_perf_probe_event()
1413 if (pev->event) in clear_perf_probe_event()
1414 free(pev->event); in clear_perf_probe_event()
1415 if (pev->group) in clear_perf_probe_event()
1416 free(pev->group); in clear_perf_probe_event()
1417 if (pp->file) in clear_perf_probe_event()
1418 free(pp->file); in clear_perf_probe_event()
1419 if (pp->function) in clear_perf_probe_event()
1420 free(pp->function); in clear_perf_probe_event()
1421 if (pp->lazy_line) in clear_perf_probe_event()
1422 free(pp->lazy_line); in clear_perf_probe_event()
1423 for (i = 0; i < pev->nargs; i++) { in clear_perf_probe_event()
1424 if (pev->args[i].name) in clear_perf_probe_event()
1425 free(pev->args[i].name); in clear_perf_probe_event()
1426 if (pev->args[i].var) in clear_perf_probe_event()
1427 free(pev->args[i].var); in clear_perf_probe_event()
1428 if (pev->args[i].type) in clear_perf_probe_event()
1429 free(pev->args[i].type); in clear_perf_probe_event()
1430 field = pev->args[i].field; in clear_perf_probe_event()
1432 next = field->next; in clear_perf_probe_event()
1433 if (field->name) in clear_perf_probe_event()
1434 free(field->name); in clear_perf_probe_event()
1439 if (pev->args) in clear_perf_probe_event()
1440 free(pev->args); in clear_perf_probe_event()
1449 if (tev->event) in clear_probe_trace_event()
1450 free(tev->event); in clear_probe_trace_event()
1451 if (tev->group) in clear_probe_trace_event()
1452 free(tev->group); in clear_probe_trace_event()
1453 if (tev->point.symbol) in clear_probe_trace_event()
1454 free(tev->point.symbol); in clear_probe_trace_event()
1455 if (tev->point.module) in clear_probe_trace_event()
1456 free(tev->point.module); in clear_probe_trace_event()
1457 for (i = 0; i < tev->nargs; i++) { in clear_probe_trace_event()
1458 if (tev->args[i].name) in clear_probe_trace_event()
1459 free(tev->args[i].name); in clear_probe_trace_event()
1460 if (tev->args[i].value) in clear_probe_trace_event()
1461 free(tev->args[i].value); in clear_probe_trace_event()
1462 if (tev->args[i].type) in clear_probe_trace_event()
1463 free(tev->args[i].type); in clear_probe_trace_event()
1464 ref = tev->args[i].ref; in clear_probe_trace_event()
1466 next = ref->next; in clear_probe_trace_event()
1471 if (tev->args) in clear_probe_trace_event()
1472 free(tev->args); in clear_probe_trace_event()
1485 return -ENOENT; in open_kprobe_events()
1499 pr_warning("kprobe_events file does not exist - please" in open_kprobe_events()
1525 idx = strlen(p) - 1; in get_probe_trace_command_rawlist()
1530 pr_debug("strlist__add failed: %s\n", strerror(-ret)); in get_probe_trace_command_rawlist()
1548 place = synthesize_perf_probe_point(&pev->point); in show_perf_probe_event()
1550 return -EINVAL; in show_perf_probe_event()
1552 ret = e_snprintf(buf, 128, "%s:%s", pev->group, pev->event); in show_perf_probe_event()
1556 printf(" %-20s (on %s", buf, place); in show_perf_probe_event()
1558 if (pev->nargs > 0) { in show_perf_probe_event()
1560 for (i = 0; i < pev->nargs; i++) { in show_perf_probe_event()
1561 ret = synthesize_perf_probe_arg(&pev->args[i], in show_perf_probe_event()
1573 /* List up current perf-probe events */
1597 return -ENOENT; in show_perf_probe_events()
1600 ret = parse_probe_trace_command(ent->s, &tev); in show_perf_probe_events()
1616 /* Get current perf-probe event names */
1629 ret = parse_probe_trace_command(ent->s, &tev); in get_probe_trace_event_names()
1659 return -EINVAL; in write_probe_trace_event()
1681 pr_debug("snprintf() failed: %s\n", strerror(-ret)); in get_new_event_name()
1689 "(Use -f to force duplicates.)\n", base); in get_new_event_name()
1690 return -EEXIST; in get_new_event_name()
1697 pr_debug("snprintf() failed: %s\n", strerror(-ret)); in get_new_event_name()
1705 ret = -ERANGE; in get_new_event_name()
1728 return -EIO; in __add_probe_trace_events()
1735 if (pev->event) in __add_probe_trace_events()
1736 event = pev->event; in __add_probe_trace_events()
1738 if (pev->point.function) in __add_probe_trace_events()
1739 event = pev->point.function; in __add_probe_trace_events()
1741 event = tev->point.symbol; in __add_probe_trace_events()
1742 if (pev->group) in __add_probe_trace_events()
1743 group = pev->group; in __add_probe_trace_events()
1754 tev->event = strdup(event); in __add_probe_trace_events()
1755 tev->group = strdup(group); in __add_probe_trace_events()
1756 if (tev->event == NULL || tev->group == NULL) { in __add_probe_trace_events()
1757 ret = -ENOMEM; in __add_probe_trace_events()
1766 /* Trick here - save current event/group */ in __add_probe_trace_events()
1767 event = pev->event; in __add_probe_trace_events()
1768 group = pev->group; in __add_probe_trace_events()
1769 pev->event = tev->event; in __add_probe_trace_events()
1770 pev->group = tev->group; in __add_probe_trace_events()
1772 /* Trick here - restore current event/group */ in __add_probe_trace_events()
1773 pev->event = (char *)event; in __add_probe_trace_events()
1774 pev->group = (char *)group; in __add_probe_trace_events()
1788 printf("\tperf record -e %s:%s -aR sleep 1\n\n", tev->group, in __add_probe_trace_events()
1789 tev->event); in __add_probe_trace_events()
1813 return -ENOMEM; in convert_to_probe_trace_events()
1816 tev->point.symbol = strdup(pev->point.function); in convert_to_probe_trace_events()
1817 if (tev->point.symbol == NULL) { in convert_to_probe_trace_events()
1818 ret = -ENOMEM; in convert_to_probe_trace_events()
1823 tev->point.module = strdup(module); in convert_to_probe_trace_events()
1824 if (tev->point.module == NULL) { in convert_to_probe_trace_events()
1825 ret = -ENOMEM; in convert_to_probe_trace_events()
1830 tev->point.offset = pev->point.offset; in convert_to_probe_trace_events()
1831 tev->point.retprobe = pev->point.retprobe; in convert_to_probe_trace_events()
1832 tev->nargs = pev->nargs; in convert_to_probe_trace_events()
1833 if (tev->nargs) { in convert_to_probe_trace_events()
1834 tev->args = zalloc(sizeof(struct probe_trace_arg) in convert_to_probe_trace_events()
1835 * tev->nargs); in convert_to_probe_trace_events()
1836 if (tev->args == NULL) { in convert_to_probe_trace_events()
1837 ret = -ENOMEM; in convert_to_probe_trace_events()
1840 for (i = 0; i < tev->nargs; i++) { in convert_to_probe_trace_events()
1841 if (pev->args[i].name) { in convert_to_probe_trace_events()
1842 tev->args[i].name = strdup(pev->args[i].name); in convert_to_probe_trace_events()
1843 if (tev->args[i].name == NULL) { in convert_to_probe_trace_events()
1844 ret = -ENOMEM; in convert_to_probe_trace_events()
1848 tev->args[i].value = strdup(pev->args[i].var); in convert_to_probe_trace_events()
1849 if (tev->args[i].value == NULL) { in convert_to_probe_trace_events()
1850 ret = -ENOMEM; in convert_to_probe_trace_events()
1853 if (pev->args[i].type) { in convert_to_probe_trace_events()
1854 tev->args[i].type = strdup(pev->args[i].type); in convert_to_probe_trace_events()
1855 if (tev->args[i].type == NULL) { in convert_to_probe_trace_events()
1856 ret = -ENOMEM; in convert_to_probe_trace_events()
1864 sym = __find_kernel_function_by_name(tev->point.symbol, NULL); in convert_to_probe_trace_events()
1867 tev->point.symbol); in convert_to_probe_trace_events()
1868 ret = -ENOENT; in convert_to_probe_trace_events()
1870 } else if (tev->point.offset > sym->end - sym->start) { in convert_to_probe_trace_events()
1872 tev->point.symbol); in convert_to_probe_trace_events()
1873 ret = -ENOENT; in convert_to_probe_trace_events()
1900 return -ENOMEM; in add_perf_probe_events()
1902 /* Init vmlinux path */ in add_perf_probe_events()
1947 /* Convert from perf-probe event to trace-probe event */ in __del_trace_probe_event()
1948 ret = e_snprintf(buf, 128, "-:%s", ent->s); in __del_trace_probe_event()
1955 ent->s); in __del_trace_probe_event()
1956 ret = -ENOTSUP; in __del_trace_probe_event()
1964 ret = -errno; in __del_trace_probe_event()
1968 printf("Remove event: %s\n", ent->s); in __del_trace_probe_event()
1971 pr_warning("Failed to delete event: %s\n", strerror(-ret)); in __del_trace_probe_event()
1988 if (strpbrk(buf, "*?")) { /* Glob-exp */ in del_trace_probe_event()
1990 if (strglobmatch(ent->s, buf)) { in del_trace_probe_event()
2027 return -EINVAL; in del_perf_probe_events()
2030 str = strdup(ent->s); in del_perf_probe_events()
2032 ret = -ENOMEM; in del_perf_probe_events()
2066 if (sym->binding == STB_GLOBAL && in filter_available_functions()
2067 strfilter__compare(available_func_filter, sym->name)) in filter_available_functions()
2086 return -EINVAL; in show_available_funcs()
2091 return -EINVAL; in show_available_funcs()
2093 if (!dso__sorted_by_name(map->dso, map->type)) in show_available_funcs()
2094 dso__sort_by_name(map->dso, map->type); in show_available_funcs()
2096 dso__fprintf_symbols_by_name(map->dso, map->type, stdout); in show_available_funcs()