forked from OSchip/llvm-project
Revert "[lldb] Add support for debugging via the dynamic linker."
This reverts commit 1cbdc07ec0
.
Buildbot failure started after this patch with failure in
api/multithreaded/TestMultithreaded.py:
https://lab.llvm.org/buildbot/#/builders/68/builds/17556
This commit is contained in:
parent
88125e8af1
commit
120d97b1a7
|
@ -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);
|
||||
|
|
|
@ -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 different 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 different 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) {
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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())
|
||||
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
#include "signal_file.h"
|
||||
|
||||
int main() {
|
||||
// Break here
|
||||
return get_signal_crash();
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
#include "signal_file.h"
|
||||
#include <signal.h>
|
||||
|
||||
int get_signal_crash(void) {
|
||||
raise(SIGSEGV);
|
||||
return 0;
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
int get_signal_crash(void);
|
Loading…
Reference in New Issue