[PATCH] Fix a crash that occurs when PWD is invalid.

Andrew Trick atrick at apple.com
Mon Dec 9 15:02:54 PST 2013


On Dec 9, 2013, at 2:50 PM, Eric Christopher <echristo at gmail.com> wrote:

> On Mon, Dec 9, 2013 at 1:58 PM, Filip Pizlo <fpizlo at apple.com> wrote:
>> 
>> On Dec 9, 2013, at 12:42 PM, Andrew Trick <atrick at apple.com> wrote:
>> 
>> 
>> On Dec 9, 2013, at 12:01 PM, Eric Christopher <echristo at gmail.com> wrote:
>> 
>> Out of curiosity why isn't it able to get a compilation dir?
>> 
>> 
>> Probably one of these.
>> 
>>    The getcwd() function will fail if:
>> 
>>    [EACCES]           Read or search permission was denied for a component
>> of the pathname.
>> 
>>    [ENOENT]           A component of the pathname no longer exists.
>> 
>> Phil might know for sure.
>> 
>> 
>> I'm not sure, actually. ;-)  When I hit the bug it was probably ENOENT
>> caused by weirdness in our JSC test harness.
>> 
>> But, broadly, there is no requirement for a client of JavaScriptCore to run
>> with $PWD set to anything remotely sensible.  Moreover, it's my
>> understanding that libraries and frameworks in general never assume anything
>> about the sanity of $PWD unless they are asked to do relative path IO.  This
>> isn't just a JSC bug: if the claim is that LLVM is a JIT library then it's
>> probably best if LLVM gracefully handles not having a sane $PWD.
>> 
> 
> That's not quite what I'm talking about, FWIW I agree that you
> shouldn't have to have an environment at all :)
> 
> Basically the lines of code in MCDwarf.cpp are supposed to be when
> generating dwarf for assembly files and I wasn't under the impression
> you were compiling .s files. :)
> 
> That code should probably have some decent fallback in it, but I don't
> think a null DW_AT_compilation_dir is the correct one. It should omit
> the attribute if it can't get a valid value.

You think we should omit the entire compile_unit DIE if we don’t find the absolute path? If we simply omit the DIE, do you think any tools could be confused? Is it worth adding a special case for a situation that cannot conceivably happen in the context of compiling .s files? I’d be happy to simply assert that CompilationDir is non-empty if that’s preferable to emitting a DIE with an empty path.

-Andy

> 
> -eric
> 
> 
>> -eric
>> 
>> On Mon, Dec 9, 2013 at 11:41 AM, Andrew Trick <atrick at apple.com> wrote:
>> 
>> MCJIT needs to be able to run in hostile environments, even when PWD
>> is invalid. There's no need to crash MCJIT in this case.
>> 
>> If we do want to guarantee valid CompilationDir, that should be done
>> only for clients of getCompilationDir(). This is as simple as checking
>> for an empty string.
>> 
>> The obvious fix is to simply leave MCContext's CompilationDir empty
>> when PWD can't be determined. The only behavioral difference would be
>> that EmitGenDwarfInfo would output an empty string when recording the
>> working dir for the assembly output.
>> 
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131209/8760578a/attachment.html>


More information about the llvm-commits mailing list