|
@@ -67,7 +67,6 @@ int e_snprintf(char *str, size_t size, const char *format, ...)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static char *synthesize_perf_probe_point(struct perf_probe_point *pp);
|
|
|
static struct machine *host_machine;
|
|
|
|
|
|
/* Initialize symbol maps and path of vmlinux/modules */
|
|
@@ -1716,7 +1715,7 @@ out:
|
|
|
}
|
|
|
|
|
|
/* Compose only probe point (not argument) */
|
|
|
-static char *synthesize_perf_probe_point(struct perf_probe_point *pp)
|
|
|
+char *synthesize_perf_probe_point(struct perf_probe_point *pp)
|
|
|
{
|
|
|
struct strbuf buf;
|
|
|
char *tmp, *ret = NULL;
|
|
@@ -1755,30 +1754,36 @@ out:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-#if 0
|
|
|
char *synthesize_perf_probe_command(struct perf_probe_event *pev)
|
|
|
{
|
|
|
- char *buf;
|
|
|
- int i, len, ret;
|
|
|
+ struct strbuf buf;
|
|
|
+ char *tmp, *ret = NULL;
|
|
|
+ int i;
|
|
|
|
|
|
- buf = synthesize_perf_probe_point(&pev->point);
|
|
|
- if (!buf)
|
|
|
+ if (strbuf_init(&buf, 64))
|
|
|
return NULL;
|
|
|
+ if (pev->event)
|
|
|
+ if (strbuf_addf(&buf, "%s:%s=", pev->group ?: PERFPROBE_GROUP,
|
|
|
+ pev->event) < 0)
|
|
|
+ goto out;
|
|
|
+
|
|
|
+ tmp = synthesize_perf_probe_point(&pev->point);
|
|
|
+ if (!tmp || strbuf_addstr(&buf, tmp) < 0)
|
|
|
+ goto out;
|
|
|
+ free(tmp);
|
|
|
|
|
|
- len = strlen(buf);
|
|
|
for (i = 0; i < pev->nargs; i++) {
|
|
|
- ret = e_snprintf(&buf[len], MAX_CMDLEN - len, " %s",
|
|
|
- pev->args[i].name);
|
|
|
- if (ret <= 0) {
|
|
|
- free(buf);
|
|
|
- return NULL;
|
|
|
- }
|
|
|
- len += ret;
|
|
|
+ tmp = synthesize_perf_probe_arg(pev->args + i);
|
|
|
+ if (!tmp || strbuf_addf(&buf, " %s", tmp) < 0)
|
|
|
+ goto out;
|
|
|
+ free(tmp);
|
|
|
}
|
|
|
|
|
|
- return buf;
|
|
|
+ ret = strbuf_detach(&buf, NULL);
|
|
|
+out:
|
|
|
+ strbuf_release(&buf);
|
|
|
+ return ret;
|
|
|
}
|
|
|
-#endif
|
|
|
|
|
|
static int __synthesize_probe_trace_arg_ref(struct probe_trace_arg_ref *ref,
|
|
|
struct strbuf *buf, int depth)
|