[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