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@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@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 _______________________________________________ lldb-dev mailing list lldb-dev@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev