Index: llvm/test/tools/llvm-dwp/X86/search_dwos.test =================================================================== --- /dev/null +++ llvm/test/tools/llvm-dwp/X86/search_dwos.test @@ -0,0 +1,22 @@ +RUN: rm -rf %t +RUN: mkdir %t +RUN: cd %t +RUN: cp %p/../Inputs/search_dwos/a.dwo a.dwo +RUN: cp %p/../Inputs/search_dwos/b.dwo b.dwo +RUN: cp %p/../Inputs/search_dwos/main main +RUN: llvm-dwp -e main -o %t.dwp + +Search the DWO from relative path if absolute path is not valid. +Build commands for the test binaries: + +clang++ -Xclang -fdebug-compilation-dir -Xclang "/tmp" -g -O0 -gsplit-dwarf a.cpp b.cpp -o main + +sources: +a.cpp: + void a() {} + +b.cpp: + void b() {} + int main() { + return 0; + } Index: llvm/tools/llvm-dwp/llvm-dwp.cpp =================================================================== --- llvm/tools/llvm-dwp/llvm-dwp.cpp +++ llvm/tools/llvm-dwp/llvm-dwp.cpp @@ -71,7 +71,10 @@ if (!DWOCompDir.empty()) { SmallString<16> DWOPath(std::move(DWOName)); sys::fs::make_absolute(DWOCompDir, DWOPath); - DWOPaths.emplace_back(DWOPath.data(), DWOPath.size()); + if (sys::fs::exists(DWOPath)) + DWOPaths.emplace_back(DWOPath.data(), DWOPath.size()); + else + DWOPaths.push_back(std::move(DWOName)); } else { DWOPaths.push_back(std::move(DWOName)); }