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) |