|
@@ -269,3 +269,62 @@ void perf_debugfs_set_path(const char *mntpt)
|
|
|
snprintf(debugfs_mountpoint, strlen(debugfs_mountpoint), "%s", mntpt);
|
|
|
set_tracing_events_path(mntpt);
|
|
|
}
|
|
|
+
|
|
|
+static const char *find_debugfs(void)
|
|
|
+{
|
|
|
+ const char *path = perf_debugfs_mount(NULL);
|
|
|
+
|
|
|
+ if (!path)
|
|
|
+ fprintf(stderr, "Your kernel does not support the debugfs filesystem");
|
|
|
+
|
|
|
+ return path;
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * Finds the path to the debugfs/tracing
|
|
|
+ * Allocates the string and stores it.
|
|
|
+ */
|
|
|
+const char *find_tracing_dir(void)
|
|
|
+{
|
|
|
+ static char *tracing;
|
|
|
+ static int tracing_found;
|
|
|
+ const char *debugfs;
|
|
|
+
|
|
|
+ if (tracing_found)
|
|
|
+ return tracing;
|
|
|
+
|
|
|
+ debugfs = find_debugfs();
|
|
|
+ if (!debugfs)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ tracing = malloc(strlen(debugfs) + 9);
|
|
|
+ if (!tracing)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ sprintf(tracing, "%s/tracing", debugfs);
|
|
|
+
|
|
|
+ tracing_found = 1;
|
|
|
+ return tracing;
|
|
|
+}
|
|
|
+
|
|
|
+char *get_tracing_file(const char *name)
|
|
|
+{
|
|
|
+ const char *tracing;
|
|
|
+ char *file;
|
|
|
+
|
|
|
+ tracing = find_tracing_dir();
|
|
|
+ if (!tracing)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ file = malloc(strlen(tracing) + strlen(name) + 2);
|
|
|
+ if (!file)
|
|
|
+ return NULL;
|
|
|
+
|
|
|
+ sprintf(file, "%s/%s", tracing, name);
|
|
|
+ return file;
|
|
|
+}
|
|
|
+
|
|
|
+void put_tracing_file(char *file)
|
|
|
+{
|
|
|
+ free(file);
|
|
|
+}
|