This revision was automatically updated to reflect the committed changes. Closed by commit rL324224: Resolve binary symlinks before finding its separate .debug file (authored by jankratochvil, committed by ). Herald added a subscriber: llvm-commits.
Changed prior to commit: https://reviews.llvm.org/D42853?vs=132670&id=132798#toc Repository: rL LLVM https://reviews.llvm.org/D42853 Files: lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/Makefile lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/TestTargetSymbolsSepDebugSymlink.py lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/main.c lldb/trunk/source/Host/common/Symbols.cpp Index: lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/Makefile =================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/Makefile +++ lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/Makefile @@ -0,0 +1,20 @@ +LEVEL = ../../make +C_SOURCES := main.c + +all: dirsymlink + +dirreal: a.out + $(RM) -r $@ + mkdir $@ + $(OBJCOPY) --only-keep-debug $< $@/stripped.debug + $(OBJCOPY) --strip-all --add-gnu-debuglink=$@/stripped.debug $< $@/stripped.out + +dirsymlink: dirreal + $(RM) -r $@ + mkdir $@ + ln -s ../$</stripped.out $@/stripped.symlink + +clean:: + $(RM) -r dirreal dirsymlink + +include $(LEVEL)/Makefile.rules Index: lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/TestTargetSymbolsSepDebugSymlink.py =================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/TestTargetSymbolsSepDebugSymlink.py +++ lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/TestTargetSymbolsSepDebugSymlink.py @@ -0,0 +1,22 @@ +""" Testing separate debug info loading for base binary with a symlink. """ +import os +import time +import lldb +import sys +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + + +class TestTargetSymbolsSepDebugSymlink(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + @no_debug_info_test # Prevent the genaration of the dwarf version of this test + @skipUnlessPlatform(['linux']) + @skipIf(hostoslist=["windows"]) + def test_target_symbols_sepdebug_symlink_case(self): + self.build(clean=True) + exe = self.getBuildArtifact("dirsymlink/stripped.symlink") + + lldbutil.run_to_name_breakpoint(self, "main", exe_name = exe) Index: lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/main.c =================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/main.c +++ lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/main.c @@ -0,0 +1,3 @@ +int main() { + return 0; +} Index: lldb/trunk/source/Host/common/Symbols.cpp =================================================================== --- lldb/trunk/source/Host/common/Symbols.cpp +++ lldb/trunk/source/Host/common/Symbols.cpp @@ -9,6 +9,7 @@ #include "lldb/Host/Symbols.h" #include "lldb/Core/ModuleSpec.h" +#include "lldb/Host/FileSystem.h" #include "lldb/Symbol/ObjectFile.h" #include "lldb/Target/Target.h" #include "lldb/Utility/ArchSpec.h" @@ -221,7 +222,11 @@ Target::GetDefaultDebugFileSearchPaths()); // Add module directory. - const ConstString &file_dir = module_spec.GetFileSpec().GetDirectory(); + FileSpec module_file_spec = module_spec.GetFileSpec(); + // We keep the unresolved pathname if it fails. + FileSystem::ResolveSymbolicLink(module_file_spec, module_file_spec); + + const ConstString &file_dir = module_file_spec.GetDirectory(); debug_file_search_paths.AppendIfUnique( FileSpec(file_dir.AsCString("."), true)); @@ -276,7 +281,7 @@ FileSpec file_spec(filename, true); if (llvm::sys::fs::equivalent(file_spec.GetPath(), - module_spec.GetFileSpec().GetPath())) + module_file_spec.GetPath())) continue; if (file_spec.Exists()) {
Index: lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/Makefile =================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/Makefile +++ lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/Makefile @@ -0,0 +1,20 @@ +LEVEL = ../../make +C_SOURCES := main.c + +all: dirsymlink + +dirreal: a.out + $(RM) -r $@ + mkdir $@ + $(OBJCOPY) --only-keep-debug $< $@/stripped.debug + $(OBJCOPY) --strip-all --add-gnu-debuglink=$@/stripped.debug $< $@/stripped.out + +dirsymlink: dirreal + $(RM) -r $@ + mkdir $@ + ln -s ../$</stripped.out $@/stripped.symlink + +clean:: + $(RM) -r dirreal dirsymlink + +include $(LEVEL)/Makefile.rules Index: lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/TestTargetSymbolsSepDebugSymlink.py =================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/TestTargetSymbolsSepDebugSymlink.py +++ lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/TestTargetSymbolsSepDebugSymlink.py @@ -0,0 +1,22 @@ +""" Testing separate debug info loading for base binary with a symlink. """ +import os +import time +import lldb +import sys +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + + +class TestTargetSymbolsSepDebugSymlink(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + @no_debug_info_test # Prevent the genaration of the dwarf version of this test + @skipUnlessPlatform(['linux']) + @skipIf(hostoslist=["windows"]) + def test_target_symbols_sepdebug_symlink_case(self): + self.build(clean=True) + exe = self.getBuildArtifact("dirsymlink/stripped.symlink") + + lldbutil.run_to_name_breakpoint(self, "main", exe_name = exe) Index: lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/main.c =================================================================== --- lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/main.c +++ lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/main.c @@ -0,0 +1,3 @@ +int main() { + return 0; +} Index: lldb/trunk/source/Host/common/Symbols.cpp =================================================================== --- lldb/trunk/source/Host/common/Symbols.cpp +++ lldb/trunk/source/Host/common/Symbols.cpp @@ -9,6 +9,7 @@ #include "lldb/Host/Symbols.h" #include "lldb/Core/ModuleSpec.h" +#include "lldb/Host/FileSystem.h" #include "lldb/Symbol/ObjectFile.h" #include "lldb/Target/Target.h" #include "lldb/Utility/ArchSpec.h" @@ -221,7 +222,11 @@ Target::GetDefaultDebugFileSearchPaths()); // Add module directory. - const ConstString &file_dir = module_spec.GetFileSpec().GetDirectory(); + FileSpec module_file_spec = module_spec.GetFileSpec(); + // We keep the unresolved pathname if it fails. + FileSystem::ResolveSymbolicLink(module_file_spec, module_file_spec); + + const ConstString &file_dir = module_file_spec.GetDirectory(); debug_file_search_paths.AppendIfUnique( FileSpec(file_dir.AsCString("."), true)); @@ -276,7 +281,7 @@ FileSpec file_spec(filename, true); if (llvm::sys::fs::equivalent(file_spec.GetPath(), - module_spec.GetFileSpec().GetPath())) + module_file_spec.GetPath())) continue; if (file_spec.Exists()) {
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits