int synthesize_trace_kprobe_event(struct probe_point *pp) { char *buf; int i, len, ret; pp->probes[0] = buf = zalloc(MAX_CMDLEN); if (!buf) die("Failed to allocate memory by zalloc."); ret = e_snprintf(buf, MAX_CMDLEN, "%s+%d", pp->function, pp->offset); if (ret <= 0) goto error; len = ret; for (i = 0; i < pp->nr_args; i++) { ret = e_snprintf(&buf[len], MAX_CMDLEN - len, " %s", pp->args[i]); if (ret <= 0) goto error; len += ret; } pp->found = 1; return pp->found; error: free(pp->probes[0]); pp->probes[0] = NULL; return ret; }
/* Synthesize only probe point (not argument) */ int synthesize_perf_probe_point(struct probe_point *pp) { char *buf; char offs[64] = "", line[64] = ""; int ret; pp->probes[0] = buf = zalloc(MAX_CMDLEN); pp->found = 1; if (!buf) die("Failed to allocate memory by zalloc."); if (pp->offset) { ret = e_snprintf(offs, 64, "+%d", pp->offset); if (ret <= 0) goto error; } if (pp->line) { ret = e_snprintf(line, 64, ":%d", pp->line); if (ret <= 0) goto error; } if (pp->function) ret = e_snprintf(buf, MAX_CMDLEN, "%s%s%s%s", pp->function, offs, pp->retprobe ? "%return" : "", line); else ret = e_snprintf(buf, MAX_CMDLEN, "%s%s", pp->file, line); if (ret <= 0) { error: free(pp->probes[0]); pp->probes[0] = NULL; pp->found = 0; } return ret; }
static struct strlist *__probe_file__get_namelist(int fd, bool include_group) { char buf[128]; struct strlist *sl, *rawlist; struct str_node *ent; struct probe_trace_event tev; int ret = 0; memset(&tev, 0, sizeof(tev)); rawlist = probe_file__get_rawlist(fd); if (!rawlist) return NULL; sl = strlist__new(NULL, NULL); strlist__for_each(ent, rawlist) { ret = parse_probe_trace_command(ent->s, &tev); if (ret < 0) break; if (include_group) { ret = e_snprintf(buf, 128, "%s:%s", tev.group, tev.event); if (ret >= 0) ret = strlist__add(sl, buf); } else ret = strlist__add(sl, tev.event); clear_probe_trace_event(&tev); if (ret < 0) break; }
int synthesize_perf_probe_event(struct probe_point *pp) { char *buf; int i, len, ret; len = synthesize_perf_probe_point(pp); if (len < 0) return 0; buf = pp->probes[0]; for (i = 0; i < pp->nr_args; i++) { ret = e_snprintf(&buf[len], MAX_CMDLEN - len, " %s", pp->args[i]); if (ret <= 0) goto error; len += ret; } pp->found = 1; return pp->found; error: free(pp->probes[0]); pp->probes[0] = NULL; return ret; }
/* Show an event */ static void show_perf_probe_event(const char *event, const char *place, struct probe_point *pp) { int i, ret; char buf[128]; ret = e_snprintf(buf, 128, "%s:%s", pp->group, event); if (ret < 0) die("Failed to copy event: %s", strerror(-ret)); printf(" %-40s (on %s", buf, place); if (pp->nr_args > 0) { printf(" with"); for (i = 0; i < pp->nr_args; i++) printf(" %s", pp->args[i]); } printf(")\n"); }
static int open_probe_events(const char *trace_file, bool readwrite) { char buf[PATH_MAX]; const char *tracing_dir = ""; int ret; ret = e_snprintf(buf, PATH_MAX, "%s/%s%s", tracing_path, tracing_dir, trace_file); if (ret >= 0) { pr_debug("Opening %s write=%d\n", buf, readwrite); if (readwrite && !probe_event_dry_run) ret = open(buf, O_RDWR | O_APPEND, 0); else ret = open(buf, O_RDONLY, 0); if (ret < 0) ret = -errno; } return ret; }
static int open_kprobe_events(int flags, int mode) { char buf[PATH_MAX]; int ret; ret = e_snprintf(buf, PATH_MAX, "%s/../kprobe_events", debugfs_path); if (ret < 0) die("Failed to make kprobe_events path."); ret = open(buf, flags, mode); if (ret < 0) { if (errno == ENOENT) die("kprobe_events file does not exist -" " please rebuild with CONFIG_KPROBE_EVENT."); else die("Could not open kprobe_events file: %s", strerror(errno)); } return ret; }