> On Apr 19, 2018, at 11:33 AM, Jim Ingham <jing...@apple.com> wrote:
> 
> I can't see any reason why we benefit from having these differently spelled 
> equivalent paths floating around.  You want to be careful to preserve the 
> path syntax, since it would be weird to be cross debugging to a Windows 
> machine and have to type Posix paths.  But other than that, removing all the 
> extraneous cruft seems goodness to me.

We translate all windows slashes all the time in any FileSpec, so it doesn't 
really matter what the user types.

> Were you proposing just that you get the DWARF parser to do this, or were you 
> proposing that that become a requirement for SymbolFile parsers, so that we 
> can drop all the code that normalizes paths from debug information before 
> comparisons?  We still have to normalize paths from users, but it would be 
> nice not to have to do it if we know the source is debug info.
> 

I was proposing to fix FileSpec::SetFile(), when false is passed for the 
"resolve" parameter, to always normalize all paths. Or I could just fix this 
inside of SymbolFileDWARF. I would rather do this at the "FileSpec" level since 
it will normalize our comparisons and just remove a ton of issue we can run 
into. So I vote for fixing FileSpec to "do the right thing".

Greg

> Jim
> 
> 
>> On Apr 19, 2018, at 11:14 AM, Greg Clayton via lldb-dev 
>> <lldb-dev@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@lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev
> 

_______________________________________________
lldb-dev mailing list
lldb-dev@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev

Reply via email to