[Lldb-commits] [lldb] r324224 - Resolve binary symlinks before finding its separate .debug file
Jan Kratochvil via lldb-commits
lldb-commits at lists.llvm.org
Mon Feb 5 02:50:39 PST 2018
Author: jankratochvil
Date: Mon Feb 5 02:50:38 2018
New Revision: 324224
URL: http://llvm.org/viewvc/llvm-project?rev=324224&view=rev
Log:
Resolve binary symlinks before finding its separate .debug file
I have found LLDB cannot find separate debug info of Fedora /usr/bin/gdb.
It is because:
lrwxrwxrwx 1 root root 14 Jan 25 20:41 /usr/bin/gdb -> ../libexec/gdb*
-rwxr-xr-x 1 root root 10180296 Jan 25 20:41 /usr/libexec/gdb*
ls: cannot access '/usr/lib/debug/usr/bin/gdb-8.0.1-35.fc27.x86_64.debug': No such file or directory
-r--r--r-- 1 root root 29200464 Jan 25 20:41 /usr/lib/debug/usr/libexec/gdb-8.0.1-35.fc27.x86_64.debug
FYI that -8.0.1-35.fc27.x86_64.debug may look confusing, it was always just
.debug before.
Why is /usr/bin/gdb a symlink is offtopic for this bugreport, Fedora has it so
for some reasons.
It is always safest to look at the .debug file only after resolving all
symlinks on the binary file.
Differential revision: https://reviews.llvm.org/D42853
Added:
lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/
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
Modified:
lldb/trunk/source/Host/common/Symbols.cpp
Added: lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/Makefile
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/Makefile?rev=324224&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/Makefile (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/Makefile Mon Feb 5 02:50:38 2018
@@ -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
Added: lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/TestTargetSymbolsSepDebugSymlink.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/TestTargetSymbolsSepDebugSymlink.py?rev=324224&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/TestTargetSymbolsSepDebugSymlink.py (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/TestTargetSymbolsSepDebugSymlink.py Mon Feb 5 02:50:38 2018
@@ -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)
Added: lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/main.c
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/main.c?rev=324224&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/main.c (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/linux/sepdebugsymlink/main.c Mon Feb 5 02:50:38 2018
@@ -0,0 +1,3 @@
+int main() {
+ return 0;
+}
Modified: lldb/trunk/source/Host/common/Symbols.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/common/Symbols.cpp?rev=324224&r1=324223&r2=324224&view=diff
==============================================================================
--- lldb/trunk/source/Host/common/Symbols.cpp (original)
+++ lldb/trunk/source/Host/common/Symbols.cpp Mon Feb 5 02:50:38 2018
@@ -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 @@ FileSpec Symbols::LocateExecutableSymbol
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 Symbols::LocateExecutableSymbol
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()) {
More information about the lldb-commits
mailing list