[ccache] ccache - .d files with absolute system header paths

Karanam Suryanarayana Rao Venkata Krishna venkatakrishna.karanamsuryana at gmail.com
Wed Sep 6 09:28:36 UTC 2017

I think I discovered a scenario that results in cache misses in spite of
Consider the following command:

CCACHE_BASEDIR=$PWD /bin/bash -c "ccache clang++
-fdebug-prefix-map=/proc/self/cwd= -g -c -MD -MF hello.d -o hello.o

It seems to me that is is perfectly alright to ask for debug prefix mapping
like: "-fdebug-prefix-map=/proc/self/cwd="
Unfortunately, ccache is ending up hashing gnu_getcwd(); thus, even though
we use CCACHE_BASEDIR setting, such a cache cannot be shared by other
users' from different workspaces resulting in cache misses.

I tested the following code to fix this problem(there by making such a
cache sharable) I'm looking forward to your feedback on this.

--- ccache-3.3_orig/ccache-3.3/ccache.c    2016-08-27 16:57:18.000000000
+++ ccache-3.3/ccache.c    2017-09-06 11:21:06.065818333 +0200
@@ -1525,6 +1525,11 @@
                     cwd = dir;
+                                if (strcmp(new, "") == 0) {
+                                   cc_log("forReview: empty string on the
right size of debug_prefix_map: %s", debug_prefix_map);
+                                   cwd = format("%s/", ".");
+                                   cc_log("forReview: Hence, hashing '%s'
as CWD", cwd);
+                                }

If the string after "=" in the mapping is null string, then, I hash "./".


On Mon, Sep 4, 2017 at 4:24 PM, Joel Rosdahl <joel at rosdahl.net> wrote:

> Hi Karanam,
> > From just ccache's point of view, is there a way to force relative
> paths into the
> > .d files at all?
> Yes, ccache version 3.3 and newer knows how to do this. See the release
> notes for ccache 3.3: http://ccache.samba.org/
> releasenotes.html#_ccache_3_3
> -- Joel

More information about the ccache mailing list