[lldb-dev] FileSpec and normalization questions
Jim Ingham via lldb-dev
lldb-dev at lists.llvm.org
Thu Apr 19 11:19:30 PDT 2018
The last time I looked at the llvm functions they only support the path syntax of the llvm host, which won't do for lldb. But maybe they have gotten more general recently?
Jim
> On Apr 19, 2018, at 11:16 AM, Davide Italiano via lldb-dev <lldb-dev at lists.llvm.org> wrote:
>
> IIRC We have path normalization functions in llvm, have you looked at them?
>
> Thanks,
>
> --
> Davide
>
> On Thu, Apr 19, 2018 at 11:14 AM, Greg Clayton via lldb-dev
> <lldb-dev at lists.llvm.org> wrote:
>> We currently have DWARF that has a DW_AT_comp_dir that is set to "./"
>> followed by any number of extra '/' characters. I would like to have this
>> path normalized as we parse the DWARF so we don't end up with line tables
>> with a variety of ".//+" prefixes on each source file.
>>
>> While looking to solve this issue, I took a look at the functionality that
>> is in FileSpec right now. In:
>>
>> void FileSpec::SetFile(llvm::StringRef pathname, bool resolve, PathSyntax
>> syntax);
>>
>>
>> This function always calls a cheaper normalize function:
>>
>> namespace {
>> void Normalize(llvm::SmallVectorImpl<char> &path, FileSpec::PathSyntax
>> syntax);
>> }
>>
>> This function does nothing for posix paths, but switches backward slashes to
>> forward slashes.
>>
>> We have a FileSpec function named FileSpec::GetNormalizedPath() which will
>> do much more path normalization on a path by removing redundant "." and ".."
>> and "//".
>>
>> I can fix my DWARF issue in a few ways:
>> 1 - fix FileSpec::SetFile() to still call ::Normalize() but have it do more
>> work and have it normalize out the and redundant or relative path info
>> 2 - call FileSpec::GetNormalizedPath() on each comp dir before using it to
>> actually normalize it
>>
>> The main question is: do we want paths floating around LLDB that aren't
>> normalized? It seems like having a mixture of theses path will lead to
>> issues in LLDB so I would vote for solution #1.
>>
>> Also, looking at the tests for normalizing paths I found the following pairs
>> of pre-normalized and post-normalization paths for posix:
>>
>> {"//", "//"},
>> {"//net", "//net"},
>>
>> Why wouldn't we reduce "//" to just "/" for posix? And why wouldn't we
>> reduce "//net" to "/net"?
>>
>> Also I found:
>>
>> {"./foo", "foo"},
>>
>> Do we prefer to not have "./foo" to stay as "./foo"? Seems like if users
>> know that their debug info has line table entries that are "./foo/foo.c"
>> that they might type this in:
>>
>> (lldb) b ./foo/foo.c:12
>>
>> But this will fail since it might not match the "foo/foo.c:12" that might
>> result from path normalization. We don't normalize right now so it doesn't
>> matter and things would match, but part of my fix is normalizing a path in
>> the DWARF that is currently ".////////foo/foo.c" down to either
>> "./foo/foo.c" or "foo/foo.c" so it will matter depending on what we decide
>> here.
>>
>> Any input would be appreciated.
>>
>> Greg Clayton
>>
>>
>> _______________________________________________
>> lldb-dev mailing list
>> lldb-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
>>
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
More information about the lldb-dev
mailing list