Author: Rumeet Dhindsa Date: 2021-08-24T15:20:52-07:00 New Revision: 120d97b1a7a81561bb02fc7cd5dc304ef5cbe1cf
URL: https://github.com/llvm/llvm-project/commit/120d97b1a7a81561bb02fc7cd5dc304ef5cbe1cf DIFF: https://github.com/llvm/llvm-project/commit/120d97b1a7a81561bb02fc7cd5dc304ef5cbe1cf.diff LOG: Revert "[lldb] Add support for debugging via the dynamic linker." This reverts commit 1cbdc07ec015d83038c08dc562d55eccfd808591. Buildbot failure started after this patch with failure in api/multithreaded/TestMultithreaded.py: https://lab.llvm.org/buildbot/#/builders/68/builds/17556 Added: Modified: lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp Removed: lldb/test/API/functionalities/dyld-launch-linux/Makefile lldb/test/API/functionalities/dyld-launch-linux/TestDyldLaunchLinux.py lldb/test/API/functionalities/dyld-launch-linux/main.cpp lldb/test/API/functionalities/dyld-launch-linux/signal_file.cpp lldb/test/API/functionalities/dyld-launch-linux/signal_file.h ################################################################################ diff --git a/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp b/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp index e385b583cef9a..866acbddbdc8a 100644 --- a/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp +++ b/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DYLDRendezvous.cpp @@ -56,19 +56,6 @@ static addr_t ResolveRendezvousAddress(Process *process) { "%s resolved via direct object file approach to 0x%" PRIx64, __FUNCTION__, info_location); } else { - const Symbol *_r_debug = - target->GetExecutableModule()->FindFirstSymbolWithNameAndType( - ConstString("_r_debug")); - if (_r_debug) { - info_addr = _r_debug->GetAddress().GetLoadAddress(target); - if (info_addr != LLDB_INVALID_ADDRESS) { - LLDB_LOGF(log, - "%s resolved by finding symbol '_r_debug' whose value is " - "0x%" PRIx64, - __FUNCTION__, info_addr); - return info_addr; - } - } LLDB_LOGF(log, "%s FAILED - direct object file approach did not yield a " "valid address", @@ -289,14 +276,6 @@ bool DYLDRendezvous::FillSOEntryFromModuleInfo( entry.base_addr = base_addr; entry.dyn_addr = dyn_addr; - // ld.so saves empty file name for the executable file in the link map. - // When executable is run using ld.so, we need to be update executable path. - if (name.empty()) { - MemoryRegionInfo region; - Status region_status = - m_process->GetMemoryRegionInfo(entry.dyn_addr, region); - name = region.GetName().AsCString(); - } entry.file_spec.SetFile(name, FileSpec::Style::native); UpdateBaseAddrIfNecessary(entry, name); @@ -568,15 +547,6 @@ bool DYLDRendezvous::ReadSOEntryFromMemory(lldb::addr_t addr, SOEntry &entry) { return false; std::string file_path = ReadStringFromMemory(entry.path_addr); - - // ld.so saves empty file name for the executable file in the link map. - // When executable is run using ld.so, we need to be update executable path. - if (file_path.empty()) { - MemoryRegionInfo region; - Status region_status = - m_process->GetMemoryRegionInfo(entry.dyn_addr, region); - file_path = region.GetName().AsCString(); - } entry.file_spec.SetFile(file_path, FileSpec::Style::native); UpdateBaseAddrIfNecessary(entry, file_path); diff --git a/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp b/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp index 09d0523f676cf..160faa74af239 100644 --- a/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp +++ b/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.cpp @@ -333,48 +333,28 @@ bool DynamicLoaderPOSIXDYLD::SetRendezvousBreakpoint() { LLDB_LOG(log, "Rendezvous structure is not set up yet. " "Trying to locate rendezvous breakpoint in the interpreter " "by symbol name."); - // Function names from diff erent dynamic loaders that are known to be - // used as rendezvous between the loader and debuggers. + ModuleSP interpreter = LoadInterpreterModule(); + if (!interpreter) { + LLDB_LOG(log, "Can't find interpreter, rendezvous breakpoint isn't set."); + return false; + } + + // Function names from diff erent dynamic loaders that are known to be used + // as rendezvous between the loader and debuggers. static std::vector<std::string> DebugStateCandidates{ "_dl_debug_state", "rtld_db_dlactivity", "__dl_rtld_db_dlactivity", "r_debug_state", "_r_debug_state", "_rtld_debug_state", }; - ModuleSP interpreter = LoadInterpreterModule(); - if (!interpreter) { - if (NameMatches(m_process->GetTarget() - .GetExecutableModulePointer() - ->GetFileSpec() - .GetFilename() - .GetCString(), - NameMatch::StartsWith, "ld-")) { - FileSpecList containingModules; - containingModules.Append( - m_process->GetTarget().GetExecutableModulePointer()->GetFileSpec()); - - dyld_break = target.CreateBreakpoint( - &containingModules, /*containingSourceFiles=*/nullptr, - DebugStateCandidates, eFunctionNameTypeFull, eLanguageTypeC, - /*offset=*/0, - /*skip_prologue=*/eLazyBoolNo, - /*internal=*/true, - /*request_hardware=*/false); - } else { - LLDB_LOG(log, - "Can't find interpreter, rendezvous breakpoint isn't set."); - return false; - } - } else { - FileSpecList containingModules; - containingModules.Append(interpreter->GetFileSpec()); - dyld_break = target.CreateBreakpoint( - &containingModules, /*containingSourceFiles=*/nullptr, - DebugStateCandidates, eFunctionNameTypeFull, eLanguageTypeC, - /*offset=*/0, - /*skip_prologue=*/eLazyBoolNo, - /*internal=*/true, - /*request_hardware=*/false); - } + FileSpecList containingModules; + containingModules.Append(interpreter->GetFileSpec()); + dyld_break = target.CreateBreakpoint( + &containingModules, nullptr /* containingSourceFiles */, + DebugStateCandidates, eFunctionNameTypeFull, eLanguageTypeC, + 0, /* offset */ + eLazyBoolNo, /* skip_prologue */ + true, /* internal */ + false /* request_hardware */); } if (dyld_break->GetNumResolvedLocations() != 1) { diff --git a/lldb/test/API/functionalities/dyld-launch-linux/Makefile b/lldb/test/API/functionalities/dyld-launch-linux/Makefile deleted file mode 100644 index 36bfbb52590d7..0000000000000 --- a/lldb/test/API/functionalities/dyld-launch-linux/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -CXX_SOURCES := main.cpp -LD_EXTRAS := -Wl,-rpath "-Wl,$(shell pwd)" -USE_LIBDL := 1 - -include Makefile.rules - -# The following shared library will be used to test breakpoints under dynamic loading -libsignal_file.so: signal_file.cpp - $(MAKE) -f $(MAKEFILE_RULES) \ - DYLIB_ONLY=YES DYLIB_CXX_SOURCES=signal_file.cpp DYLIB_NAME=signal_file - -a.out: libsignal_file.so main.cpp - $(MAKE) -f $(MAKEFILE_RULES) \ - CXX_SOURCES=main.cpp LD_EXTRAS=libsignal_file.so - diff --git a/lldb/test/API/functionalities/dyld-launch-linux/TestDyldLaunchLinux.py b/lldb/test/API/functionalities/dyld-launch-linux/TestDyldLaunchLinux.py deleted file mode 100644 index bf7ce12effc4d..0000000000000 --- a/lldb/test/API/functionalities/dyld-launch-linux/TestDyldLaunchLinux.py +++ /dev/null @@ -1,46 +0,0 @@ -""" -Test that LLDB can launch a linux executable through the dynamic loader and still hit a breakpoint. -""" - -import lldb -import os - -from lldbsuite.test.lldbtest import * - -class TestLinux64LaunchingViaDynamicLoader(TestBase): - mydir = TestBase.compute_mydir(__file__) - - def test(self): - self.build() - exe = "/lib64/ld-linux-x86-64.so.2" - if(os.path.exists(exe)): - target = self.dbg.CreateTarget(exe) - self.assertTrue(target, VALID_TARGET) - - # Set breakpoints both on shared library function as well as on - # main. Both of them will be pending breakpoints. - breakpoint_main = target.BreakpointCreateBySourceRegex("// Break here", lldb.SBFileSpec("main.cpp")) - breakpoint_shared_library = target.BreakpointCreateBySourceRegex("get_signal_crash", lldb.SBFileSpec("signal_file.cpp")) - launch_info = lldb.SBLaunchInfo([ "--library-path",self.get_process_working_directory(),self.getBuildArtifact("a.out")]) - launch_info.SetWorkingDirectory(self.get_process_working_directory()) - error = lldb.SBError() - process = target.Launch(launch_info,error) - self.assertTrue(error.Success()) - - # Stopped on main here. - self.assertEqual(process.GetState(), lldb.eStateStopped) - thread = process.GetSelectedThread() - self.assertIn("main",thread.GetFrameAtIndex(0).GetDisplayFunctionName()) - process.Continue() - - # Stopped on get_signal_crash function here. - self.assertEqual(process.GetState(), lldb.eStateStopped) - self.assertIn("get_signal_crash",thread.GetFrameAtIndex(0).GetDisplayFunctionName()) - process.Continue() - - # Stopped because of generated signal. - self.assertEqual(process.GetState(), lldb.eStateStopped) - self.assertIn("raise",thread.GetFrameAtIndex(0).GetDisplayFunctionName()) - self.assertIn("get_signal_crash",thread.GetFrameAtIndex(1).GetDisplayFunctionName()) - - diff --git a/lldb/test/API/functionalities/dyld-launch-linux/main.cpp b/lldb/test/API/functionalities/dyld-launch-linux/main.cpp deleted file mode 100644 index 0ff05466c58ca..0000000000000 --- a/lldb/test/API/functionalities/dyld-launch-linux/main.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "signal_file.h" - -int main() { - // Break here - return get_signal_crash(); -} diff --git a/lldb/test/API/functionalities/dyld-launch-linux/signal_file.cpp b/lldb/test/API/functionalities/dyld-launch-linux/signal_file.cpp deleted file mode 100644 index 3c904a34f4210..0000000000000 --- a/lldb/test/API/functionalities/dyld-launch-linux/signal_file.cpp +++ /dev/null @@ -1,7 +0,0 @@ -#include "signal_file.h" -#include <signal.h> - -int get_signal_crash(void) { - raise(SIGSEGV); - return 0; -} diff --git a/lldb/test/API/functionalities/dyld-launch-linux/signal_file.h b/lldb/test/API/functionalities/dyld-launch-linux/signal_file.h deleted file mode 100644 index 7c8676f711094..0000000000000 --- a/lldb/test/API/functionalities/dyld-launch-linux/signal_file.h +++ /dev/null @@ -1 +0,0 @@ -int get_signal_crash(void); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits