diff --git a/src/bin/e_start_main.c b/src/bin/e_start_main.c index d1f581b26..7a99a6b1c 100644 --- a/src/bin/e_start_main.c +++ b/src/bin/e_start_main.c @@ -359,10 +359,23 @@ find_valgrind(char *path, size_t path_len) #define VALGRIND_MODE_ALL 15 static int -valgrind_append(char **dst, int valgrind_mode, char *valgrind_path, const char *valgrind_log) +valgrind_append(char **dst, int valgrind_mode, int valgrind_tool, char *valgrind_path, const char *valgrind_log) { int i = 0; + if (valgrind_tool) + { + dst[i++] = valgrind_path; + + switch (valgrind_tool) + { + case 1: dst[i++] = "--tool=massif"; break; + case 2: dst[i++] = "--tool=callgrind"; break; + } + + return i; + } + if (!valgrind_mode) return 0; dst[i++] = valgrind_path; @@ -404,6 +417,7 @@ int main(int argc, char **argv) { int i, do_precache = 0, valgrind_mode = 0; + int valgrind_tool = 0; char buf[16384], **args, *p; char valgrind_path[PATH_MAX] = ""; const char *valgrind_log = NULL; @@ -452,6 +466,14 @@ main(int argc, char **argv) else printf("Unknown valgrind option: %s\n", argv[i]); } + else if (!strcmp(argv[i], "-massif")) + { + valgrind_tool = 1; + } + else if (!strcmp(argv[i], "-callgrind")) + { + valgrind_tool = 2; + } else if ((!strcmp(argv[i], "-h")) || (!strcmp(argv[i], "-help")) || (!strcmp(argv[i], "--help"))) @@ -467,6 +489,10 @@ main(int argc, char **argv) "\t\t 4 = check leak\n" "\t\t 8 = show reachable after processes finish.\n" "\t\t all = all of above\n" + "\t-massif\n" + "\t\tRun enlightenment from inside massif valgrind tool.\n" + "\t-callgrind\n" + "\t\tRun enlightenment from inside callgrind valgrind tool.\n" "\t-valgrind-log-file=\n" "\t\tSave valgrind log to file, see valgrind's --log-file for details.\n" "\n" @@ -478,7 +504,7 @@ main(int argc, char **argv) } } - if (valgrind_mode) + if (valgrind_mode || valgrind_tool) { if (!find_valgrind(valgrind_path, sizeof(valgrind_path))) { @@ -535,7 +561,7 @@ main(int argc, char **argv) args[0] = "dbus-launch"; args[1] = "--exit-with-session"; - i = 2 + valgrind_append(args + 2, valgrind_mode, valgrind_path, valgrind_log); + i = 2 + valgrind_append(args + 2, valgrind_mode, valgrind_tool, valgrind_path, valgrind_log); args[i++] = buf; copy_args(args + i, argv + 1, argc - 1); args[i + argc - 1] = NULL; @@ -543,7 +569,7 @@ main(int argc, char **argv) } /* dbus-launch failed - run e direct */ - i = valgrind_append(args, valgrind_mode, valgrind_path, valgrind_log); + i = valgrind_append(args, valgrind_mode, valgrind_tool, valgrind_path, valgrind_log); args[i++] = buf; copy_args(args + i, argv + 1, argc - 1); args[i + argc - 1] = NULL;