mirror of
https://github.com/RPCS3/llvm.git
synced 2026-07-19 15:13:49 -04:00
[DebugLine] Improve path handling.
After switching over LLDB's line table parser to libDebugInfo, we noticed two regressions on the Windows bot. The problem is that when obtaining a file from the line table prologue, we append paths without specifying a path style. This leads to incorrect results on Windows for debug info containing Posix paths: 0x0000000000201000: /tmp\b.c, is_start_of_statement = TRUE This patch is an attempt to fix that by guessing the path style whenever possible. Differential revision: https://reviews.llvm.org/D66227 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@368879 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1041,6 +1041,24 @@ static bool isPathAbsoluteOnWindowsOrPosix(const Twine &Path) {
|
||||
sys::path::is_absolute(Path, sys::path::Style::windows);
|
||||
}
|
||||
|
||||
/// If given an absolute path, guess the path style.
|
||||
static sys::path::Style GuessPathStyle(StringRef Path) {
|
||||
bool Posix = sys::path::is_absolute(Path, sys::path::Style::posix);
|
||||
bool Windows = sys::path::is_absolute(Path, sys::path::Style::windows);
|
||||
// This is a relative path.
|
||||
if (!Posix && !Windows)
|
||||
return sys::path::Style::native;
|
||||
// This is a valid absolute path for both Windows and Posix.
|
||||
if (Posix && Windows)
|
||||
return sys::path::Style::native;
|
||||
if (Posix)
|
||||
return sys::path::Style::posix;
|
||||
if (Windows)
|
||||
return sys::path::Style::windows;
|
||||
|
||||
llvm_unreachable("All combinations should have been handled.");
|
||||
}
|
||||
|
||||
bool DWARFDebugLine::Prologue::getFileNameByIndex(uint64_t FileIndex,
|
||||
StringRef CompDir,
|
||||
FileLineInfoKind Kind,
|
||||
@@ -1070,11 +1088,11 @@ bool DWARFDebugLine::Prologue::getFileNameByIndex(uint64_t FileIndex,
|
||||
// We know that FileName is not absolute, the only way to have an
|
||||
// absolute path at this point would be if IncludeDir is absolute.
|
||||
if (!CompDir.empty() && !isPathAbsoluteOnWindowsOrPosix(IncludeDir))
|
||||
sys::path::append(FilePath, CompDir);
|
||||
sys::path::append(FilePath, GuessPathStyle(CompDir), CompDir);
|
||||
}
|
||||
|
||||
// sys::path::append skips empty strings.
|
||||
sys::path::append(FilePath, IncludeDir, FileName);
|
||||
sys::path::append(FilePath, GuessPathStyle(IncludeDir), IncludeDir, FileName);
|
||||
Result = FilePath.str();
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user