summaryrefslogtreecommitdiff
path: root/tools/perf/builtin-script.c
diff options
context:
space:
mode:
authorIan Rogers <irogers@google.com>2024-11-19 04:16:29 +0300
committerArnaldo Carvalho de Melo <acme@redhat.com>2024-12-18 22:24:32 +0300
commitd927e30ca0b130d81c61dd031eeae22328a778ba (patch)
tree7d5c9a5f03ed3514d18f5e894f45996e19fdfbfa /tools/perf/builtin-script.c
parentf76f94dc7885b5bd288532642690eab74cd06b03 (diff)
downloadlinux-d927e30ca0b130d81c61dd031eeae22328a778ba.tar.xz
perf script: Move find_scripts to browser/scripts.c
The only use of find_scripts is in browser/scripts.c but the definition in builtin causes linking problems requiring a stub in python.c. Move the function to allow the stub to be removed. Signed-off-by: Ian Rogers <irogers@google.com> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Acked-by: Namhyung Kim <namhyung@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com> Cc: Colin Ian King <colin.i.king@gmail.com> Cc: Dapeng Mi <dapeng1.mi@linux.intel.com> Cc: Howard Chu <howardchu95@gmail.com> Cc: Ilya Leoshkevich <iii@linux.ibm.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@linaro.org> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Josh Poimboeuf <jpoimboe@redhat.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Michael Petlan <mpetlan@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Richter <tmricht@linux.ibm.com> Cc: Veronika Molnarova <vmolnaro@redhat.com> Cc: Weilin Wang <weilin.wang@intel.com> Link: https://lore.kernel.org/r/20241119011644.971342-8-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/builtin-script.c')
-rw-r--r--tools/perf/builtin-script.c171
1 files changed, 0 insertions, 171 deletions
diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
index 196e2f3438c5..25c25058121a 100644
--- a/tools/perf/builtin-script.c
+++ b/tools/perf/builtin-script.c
@@ -3526,177 +3526,6 @@ static void free_dlarg(void)
free(dlargv);
}
-/*
- * Some scripts specify the required events in their "xxx-record" file,
- * this function will check if the events in perf.data match those
- * mentioned in the "xxx-record".
- *
- * Fixme: All existing "xxx-record" are all in good formats "-e event ",
- * which is covered well now. And new parsing code should be added to
- * cover the future complex formats like event groups etc.
- */
-static int check_ev_match(int dir_fd, const char *scriptname, struct perf_session *session)
-{
- char line[BUFSIZ];
- FILE *fp;
-
- {
- char filename[FILENAME_MAX + 5];
- int fd;
-
- scnprintf(filename, sizeof(filename), "bin/%s-record", scriptname);
- fd = openat(dir_fd, filename, O_RDONLY);
- if (fd == -1)
- return -1;
- fp = fdopen(fd, "r");
- if (!fp)
- return -1;
- }
-
- while (fgets(line, sizeof(line), fp)) {
- char *p = skip_spaces(line);
-
- if (*p == '#')
- continue;
-
- while (strlen(p)) {
- int match, len;
- struct evsel *pos;
- char evname[128];
-
- p = strstr(p, "-e");
- if (!p)
- break;
-
- p += 2;
- p = skip_spaces(p);
- len = strcspn(p, " \t");
- if (!len)
- break;
-
- snprintf(evname, len + 1, "%s", p);
-
- match = 0;
- evlist__for_each_entry(session->evlist, pos) {
- if (evsel__name_is(pos, evname)) {
- match = 1;
- break;
- }
- }
-
- if (!match) {
- fclose(fp);
- return -1;
- }
- }
- }
-
- fclose(fp);
- return 0;
-}
-
-/*
- * Return -1 if none is found, otherwise the actual scripts number.
- *
- * Currently the only user of this function is the script browser, which
- * will list all statically runnable scripts, select one, execute it and
- * show the output in a perf browser.
- */
-int find_scripts(char **scripts_array, char **scripts_path_array, int num,
- int pathlen)
-{
- struct dirent *script_dirent, *lang_dirent;
- int scripts_dir_fd, lang_dir_fd;
- DIR *scripts_dir, *lang_dir;
- struct perf_session *session;
- struct perf_data data = {
- .path = input_name,
- .mode = PERF_DATA_MODE_READ,
- };
- char *temp;
- int i = 0;
- const char *exec_path = get_argv_exec_path();
-
- session = perf_session__new(&data, NULL);
- if (IS_ERR(session))
- return PTR_ERR(session);
-
- {
- char scripts_path[PATH_MAX];
-
- snprintf(scripts_path, sizeof(scripts_path), "%s/scripts", exec_path);
- scripts_dir_fd = open(scripts_path, O_DIRECTORY);
- pr_err("Failed to open directory '%s'", scripts_path);
- if (scripts_dir_fd == -1) {
- perf_session__delete(session);
- return -1;
- }
- }
- scripts_dir = fdopendir(scripts_dir_fd);
- if (!scripts_dir) {
- close(scripts_dir_fd);
- perf_session__delete(session);
- return -1;
- }
-
- while ((lang_dirent = readdir(scripts_dir)) != NULL) {
- if (lang_dirent->d_type != DT_DIR &&
- (lang_dirent->d_type == DT_UNKNOWN &&
- !is_directory_at(scripts_dir_fd, lang_dirent->d_name)))
- continue;
- if (!strcmp(lang_dirent->d_name, ".") || !strcmp(lang_dirent->d_name, ".."))
- continue;
-
-#ifndef HAVE_LIBPERL_SUPPORT
- if (strstr(lang_dirent->d_name, "perl"))
- continue;
-#endif
-#ifndef HAVE_LIBPYTHON_SUPPORT
- if (strstr(lang_dirent->d_name, "python"))
- continue;
-#endif
-
- lang_dir_fd = openat(scripts_dir_fd, lang_dirent->d_name, O_DIRECTORY);
- if (lang_dir_fd == -1)
- continue;
- lang_dir = fdopendir(lang_dir_fd);
- if (!lang_dir) {
- close(lang_dir_fd);
- continue;
- }
- while ((script_dirent = readdir(lang_dir)) != NULL) {
- if (script_dirent->d_type == DT_DIR)
- continue;
- if (script_dirent->d_type == DT_UNKNOWN &&
- is_directory_at(lang_dir_fd, script_dirent->d_name))
- continue;
- /* Skip those real time scripts: xxxtop.p[yl] */
- if (strstr(script_dirent->d_name, "top."))
- continue;
- if (i >= num)
- break;
- scnprintf(scripts_path_array[i], pathlen, "%s/scripts/%s/%s",
- exec_path,
- lang_dirent->d_name,
- script_dirent->d_name);
- temp = strchr(script_dirent->d_name, '.');
- snprintf(scripts_array[i],
- (temp - script_dirent->d_name) + 1,
- "%s", script_dirent->d_name);
-
- if (check_ev_match(lang_dir_fd, scripts_array[i], session))
- continue;
-
- i++;
- }
- closedir(lang_dir);
- }
-
- closedir(scripts_dir);
- perf_session__delete(session);
- return i;
-}
-
static char *get_script_path(const char *script_root, const char *suffix)
{
struct dirent *script_dirent, *lang_dirent;