[cfe-dev] [driver] Feedback on -fdebug-compilation-dir implementation
Chad Rosier
mcrosier at apple.com
Mon Apr 15 16:58:42 PDT 2013
All,
The -fdebug-compilation-dir flag was added in r142633, but it does not match the behavior implemented in gcc. I wanted to discuss the tradeoffs between the two implementations and solicit advice on if we should match gcc's behavior, keep the current behavior, or implement something different.
Currently clang uses $PWD to set the -fdebug-compilation-dir flag. GCC does the same, but it also performs a stat() call on '.' and '$PWD' to verify the inode and device match. If they don't match, then the value returned by getcwd() is used.
Here's a simple example that exposes the different behavior:
% cd /tmp
% mkdir -p a/src
% ln -s a/src
% cd /tmp/src
In this context the value of $PWD is '/tmp/src', but the value returned by getcwd() is '/private/tmp/a/src'. Thus, gcc would use '/private/tmp/a/src' in this context, while clang would use '/tmp/src'.
A more concrete example would be when a developer uses 'gmake -C' on a makefile in a relative directory. Because we rely on $PWD alone, the clang driver ignores the directory specified by -C when setting the -fdebug-compilation-dir flag. If we match gcc's behavior, 'gmake -C' should will work as expected
However, the tradeoff is that we now have to unconditional perform two stat() calls and conditionally perform a getcwd() call. Roughly speaking, the three combine calls take about 1.65 microseconds on my system. Also, if the local configuration changes (e.g., the soft-link changes), then the debugger may not be able to find the debug information using the expanded path.
Does anyone have a preference between the current implementation and that which is implemented in gcc? Should we do something else?
Chad
More information about the cfe-dev
mailing list