diff options
Diffstat (limited to 'tools/perf/perf.c')
| -rw-r--r-- | tools/perf/perf.c | 86 |
1 files changed, 29 insertions, 57 deletions
diff --git a/tools/perf/perf.c b/tools/perf/perf.c index 19fc7feb9d59..cf64049bc9bd 100644 --- a/tools/perf/perf.c +++ b/tools/perf/perf.c | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include "util/run-command.h" | 14 | #include "util/run-command.h" |
| 15 | #include "util/parse-events.h" | 15 | #include "util/parse-events.h" |
| 16 | #include "util/string.h" | 16 | #include "util/string.h" |
| 17 | #include "util/debugfs.h" | ||
| 17 | 18 | ||
| 18 | const char perf_usage_string[] = | 19 | const char perf_usage_string[] = |
| 19 | "perf [--version] [--help] COMMAND [ARGS]"; | 20 | "perf [--version] [--help] COMMAND [ARGS]"; |
| @@ -89,8 +90,8 @@ static int handle_options(const char*** argv, int* argc, int* envchanged) | |||
| 89 | /* | 90 | /* |
| 90 | * Check remaining flags. | 91 | * Check remaining flags. |
| 91 | */ | 92 | */ |
| 92 | if (!prefixcmp(cmd, "--exec-path")) { | 93 | if (!prefixcmp(cmd, CMD_EXEC_PATH)) { |
| 93 | cmd += 11; | 94 | cmd += strlen(CMD_EXEC_PATH); |
| 94 | if (*cmd == '=') | 95 | if (*cmd == '=') |
| 95 | perf_set_argv_exec_path(cmd + 1); | 96 | perf_set_argv_exec_path(cmd + 1); |
| 96 | else { | 97 | else { |
| @@ -117,8 +118,8 @@ static int handle_options(const char*** argv, int* argc, int* envchanged) | |||
| 117 | (*argv)++; | 118 | (*argv)++; |
| 118 | (*argc)--; | 119 | (*argc)--; |
| 119 | handled++; | 120 | handled++; |
| 120 | } else if (!prefixcmp(cmd, "--perf-dir=")) { | 121 | } else if (!prefixcmp(cmd, CMD_PERF_DIR)) { |
| 121 | setenv(PERF_DIR_ENVIRONMENT, cmd + 10, 1); | 122 | setenv(PERF_DIR_ENVIRONMENT, cmd + strlen(CMD_PERF_DIR), 1); |
| 122 | if (envchanged) | 123 | if (envchanged) |
| 123 | *envchanged = 1; | 124 | *envchanged = 1; |
| 124 | } else if (!strcmp(cmd, "--work-tree")) { | 125 | } else if (!strcmp(cmd, "--work-tree")) { |
| @@ -131,8 +132,8 @@ static int handle_options(const char*** argv, int* argc, int* envchanged) | |||
| 131 | *envchanged = 1; | 132 | *envchanged = 1; |
| 132 | (*argv)++; | 133 | (*argv)++; |
| 133 | (*argc)--; | 134 | (*argc)--; |
| 134 | } else if (!prefixcmp(cmd, "--work-tree=")) { | 135 | } else if (!prefixcmp(cmd, CMD_WORK_TREE)) { |
| 135 | setenv(PERF_WORK_TREE_ENVIRONMENT, cmd + 12, 1); | 136 | setenv(PERF_WORK_TREE_ENVIRONMENT, cmd + strlen(CMD_WORK_TREE), 1); |
| 136 | if (envchanged) | 137 | if (envchanged) |
| 137 | *envchanged = 1; | 138 | *envchanged = 1; |
| 138 | } else if (!strcmp(cmd, "--debugfs-dir")) { | 139 | } else if (!strcmp(cmd, "--debugfs-dir")) { |
| @@ -146,8 +147,8 @@ static int handle_options(const char*** argv, int* argc, int* envchanged) | |||
| 146 | *envchanged = 1; | 147 | *envchanged = 1; |
| 147 | (*argv)++; | 148 | (*argv)++; |
| 148 | (*argc)--; | 149 | (*argc)--; |
| 149 | } else if (!prefixcmp(cmd, "--debugfs-dir=")) { | 150 | } else if (!prefixcmp(cmd, CMD_DEBUGFS_DIR)) { |
| 150 | strncpy(debugfs_mntpt, cmd + 14, MAXPATHLEN); | 151 | strncpy(debugfs_mntpt, cmd + strlen(CMD_DEBUGFS_DIR), MAXPATHLEN); |
| 151 | debugfs_mntpt[MAXPATHLEN - 1] = '\0'; | 152 | debugfs_mntpt[MAXPATHLEN - 1] = '\0'; |
| 152 | if (envchanged) | 153 | if (envchanged) |
| 153 | *envchanged = 1; | 154 | *envchanged = 1; |
| @@ -284,17 +285,21 @@ static void handle_internal_command(int argc, const char **argv) | |||
| 284 | { | 285 | { |
| 285 | const char *cmd = argv[0]; | 286 | const char *cmd = argv[0]; |
| 286 | static struct cmd_struct commands[] = { | 287 | static struct cmd_struct commands[] = { |
| 287 | { "help", cmd_help, 0 }, | 288 | { "buildid-list", cmd_buildid_list, 0 }, |
| 288 | { "list", cmd_list, 0 }, | 289 | { "help", cmd_help, 0 }, |
| 289 | { "record", cmd_record, 0 }, | 290 | { "list", cmd_list, 0 }, |
| 290 | { "report", cmd_report, 0 }, | 291 | { "record", cmd_record, 0 }, |
| 291 | { "stat", cmd_stat, 0 }, | 292 | { "report", cmd_report, 0 }, |
| 292 | { "timechart", cmd_timechart, 0 }, | 293 | { "bench", cmd_bench, 0 }, |
| 293 | { "top", cmd_top, 0 }, | 294 | { "stat", cmd_stat, 0 }, |
| 294 | { "annotate", cmd_annotate, 0 }, | 295 | { "timechart", cmd_timechart, 0 }, |
| 295 | { "version", cmd_version, 0 }, | 296 | { "top", cmd_top, 0 }, |
| 296 | { "trace", cmd_trace, 0 }, | 297 | { "annotate", cmd_annotate, 0 }, |
| 297 | { "sched", cmd_sched, 0 }, | 298 | { "version", cmd_version, 0 }, |
| 299 | { "trace", cmd_trace, 0 }, | ||
| 300 | { "sched", cmd_sched, 0 }, | ||
| 301 | { "probe", cmd_probe, 0 }, | ||
| 302 | { "kmem", cmd_kmem, 0 }, | ||
| 298 | }; | 303 | }; |
| 299 | unsigned int i; | 304 | unsigned int i; |
| 300 | static const char ext[] = STRIP_EXTENSION; | 305 | static const char ext[] = STRIP_EXTENSION; |
| @@ -382,45 +387,12 @@ static int run_argv(int *argcp, const char ***argv) | |||
| 382 | /* mini /proc/mounts parser: searching for "^blah /mount/point debugfs" */ | 387 | /* mini /proc/mounts parser: searching for "^blah /mount/point debugfs" */ |
| 383 | static void get_debugfs_mntpt(void) | 388 | static void get_debugfs_mntpt(void) |
| 384 | { | 389 | { |
| 385 | FILE *file; | 390 | const char *path = debugfs_find_mountpoint(); |
| 386 | char fs_type[100]; | ||
| 387 | char debugfs[MAXPATHLEN]; | ||
| 388 | 391 | ||
| 389 | /* | 392 | if (path) |
| 390 | * try the standard location | 393 | strncpy(debugfs_mntpt, path, sizeof(debugfs_mntpt)); |
| 391 | */ | 394 | else |
| 392 | if (valid_debugfs_mount("/sys/kernel/debug/") == 0) { | 395 | debugfs_mntpt[0] = '\0'; |
| 393 | strcpy(debugfs_mntpt, "/sys/kernel/debug/"); | ||
| 394 | return; | ||
| 395 | } | ||
| 396 | |||
| 397 | /* | ||
| 398 | * try the sane location | ||
| 399 | */ | ||
| 400 | if (valid_debugfs_mount("/debug/") == 0) { | ||
| 401 | strcpy(debugfs_mntpt, "/debug/"); | ||
| 402 | return; | ||
| 403 | } | ||
| 404 | |||
| 405 | /* | ||
| 406 | * give up and parse /proc/mounts | ||
| 407 | */ | ||
| 408 | file = fopen("/proc/mounts", "r"); | ||
| 409 | if (file == NULL) | ||
| 410 | return; | ||
| 411 | |||
| 412 | while (fscanf(file, "%*s %" | ||
| 413 | STR(MAXPATHLEN) | ||
| 414 | "s %99s %*s %*d %*d\n", | ||
| 415 | debugfs, fs_type) == 2) { | ||
| 416 | if (strcmp(fs_type, "debugfs") == 0) | ||
| 417 | break; | ||
| 418 | } | ||
| 419 | fclose(file); | ||
| 420 | if (strcmp(fs_type, "debugfs") == 0) { | ||
| 421 | strncpy(debugfs_mntpt, debugfs, MAXPATHLEN); | ||
| 422 | debugfs_mntpt[MAXPATHLEN - 1] = '\0'; | ||
| 423 | } | ||
| 424 | } | 396 | } |
| 425 | 397 | ||
| 426 | int main(int argc, const char **argv) | 398 | int main(int argc, const char **argv) |
