[ccache] Support for -fprofile-generate, -fprofile-use, -fprofile-arcs

Justin Lebar justin.lebar at gmail.com
Mon Jul 25 21:06:52 MDT 2011

+  if (output_to_real_object_first) {
+    if (copy_file(tmp_obj, cached_obj, enable_compression) != 0) {
+      cc_log("Failed to move %s to %s: %s", tmp_obj, cached_obj,
+      stats_update(STATS_ERROR);
+      failed();
+    }

Maybe you should hardlink, if CCACHE_HARDLINK is set.  Unless
copy_file already does that?

+  if (profile_use) {
+    /* Calculate gcda name */
+    char *gcda_name;
+    char *base_name;
+    output_to_real_object_first = true;
+    base_name = remove_extension(output_obj);
+    gcda_name = format("%s/%s.gcda", profile_dir, base_name);
+    cc_log("Adding profile data %s to our hash", gcda_name);
+    /* Add the gcda to our hash */
+    hash_delimiter(hash, "-fprofile-use");
+    hash_file(hash, gcda_name);

Could you add a comment saying that profile_dir is the cwd if
-fprofile-use doesn't have a parameter?  I initially thought it was
null (and that output_obj was an absolute path), and was confused as
to how this might work.

What happens if I specify -fprofile-use=dir1
-fbranch-probabilities=dir2?  I think ccache should bail and say it's
too hard in this and similar cases.

This looks good to me, for whatever that's worth.  :)


On Mon, Jul 25, 2011 at 3:19 PM, Chris AtLee <chris at atlee.ca> wrote:
> I've pushed some changes up here that I hope addresses all the comments:
> https://github.com/catlee/ccache/compare/jrosdahl:master...catlee:profile
> On Fri, Jul 22, 2011 at 3:19 PM, Chris AtLee <chris at atlee.ca> wrote:
>> On Fri, Jul 22, 2011 at 1:49 PM, Joel Rosdahl <joel at rosdahl.net> wrote:
>>> Justin Lebar's point that the cwd probably needs to be hashed seems
>>> valid. Other than that, I think it looks generally fine, but I only have
>>> limited knowledge about the -fprofile-* options so I can't say I
>>> understand their interaction completely. Some comments and questions,
>>> though:
>>> I think that the "output_to_real_object_first mode" should really be the
>>> default and only mode. That would of course mean that the things in
>>> from_cache() that need to be done after storing an object in the cache
>>> should be refactored out somehow, but we can do that later.
>> Sounds good. I'll need to add another flag to indicate that we need to
>> hash cwd then if output_to_real_object_first is the default.
>>> What about the -fprofile-generate=path and -fprofile-use=path forms?
>>> Should those be detected as well?
>> For -fprofile-generate, I don't think we need to worry about the
>> profile directory since the inputs to the compilation aren't affected
>> by where the profile data is stored. -fprofile-use does need to know
>> where to look so that it can add the profile data to the hash. I'm
>> half tempted to remove -fprofile-use support, I'm not sure how likely
>> you are to get cache hits there. Running the same executable twice in
>> a row generates different profile data.
>>> tmp_obj is freed at the end of to_cache(), so output_obj will refer to
>>> freed memory when dereferenced in from_cache() later. An x_strdup is needed.
>> Fixed.
>>> //-style comments won't compile on systems with C89 compilers, so use
>>> /**/ instead.
>> Fixed.
>>> You should probably use hash_delimiter(hash, "-fprofile-use") or so
>>> before hashing the gcda file (and then I guess that the hashing of "no
>>> data" won't be necessary).
>> Ah, that's what that function is for!
>> Thanks for the feedback, I should have some new commits up shortly.
>> Cheers,
>> Chris
> _______________________________________________
> ccache mailing list
> ccache at lists.samba.org
> https://lists.samba.org/mailman/listinfo/ccache

More information about the ccache mailing list