From 91a2954eb47b4a106e2be6cf611917b895108e35 Mon Sep 17 00:00:00 2001 From: Chris AtLee Date: Mon, 25 Jul 2011 08:38:01 -0400 Subject: [PATCH] Make sure we only handle known -fprofile flags. Rewrite profile directory to use absolute paths on commandline to increase direct / preprocessed hit rate. --- ccache.c | 40 ++++++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/ccache.c b/ccache.c index cad2943cf..21657ad2d 100644 --- a/ccache.c +++ b/ccache.c @@ -1588,22 +1588,50 @@ cc_process_args(struct args *orig_args, struct args **preprocessor_args, if (str_startswith(argv[i], "-fprofile-")) { char* arg_profile_dir = strchr(argv[i], '='); + char* arg = x_strdup(argv[i]); if (arg_profile_dir) { + char* option = x_strndup(argv[i], arg_profile_dir - argv[i]); + /* convert to absolute path */ - profile_dir = x_realpath(arg_profile_dir + 1); - cc_log("Setting profile directory to %s", profile_dir); + arg_profile_dir = x_realpath(arg_profile_dir + 1); + + /* We can get a better hit rate by using the + * real path here */ + free(arg); + arg = format("%s=%s", option, profile_dir); + cc_log("Rewriting arg to %s", arg); + free(option); } + if (str_startswith(argv[i], "-fprofile-generate") || str_eq(argv[i], "-fprofile-arcs")) { profile_generate = true; + if (arg_profile_dir) { + profile_dir = arg_profile_dir; + } + cc_log("Setting profile directory to %s", profile_dir); + args_add(stripped_args, arg); + free(arg); + continue; } else if (str_startswith(argv[i], "-fprofile-use") || str_eq(argv[i], "-fbranch-probabilities")) { profile_use = true; - } else { - cc_log("Unsupported profile option: %s", argv[i]); + if (arg_profile_dir) { + profile_dir = arg_profile_dir; + } + cc_log("Setting profile directory to %s", profile_dir); + args_add(stripped_args, arg); + free(arg); + continue; + } else if (str_eq(argv[i], "-fprofile-dir")) { + if (arg_profile_dir) { + profile_dir = arg_profile_dir; + } + cc_log("Setting profile directory to %s", profile_dir); + args_add(stripped_args, arg); + continue; } - args_add(stripped_args, argv[i]); - continue; + cc_log("Unknown profile option: %s", argv[i]); } /* -- 2.47.2