forked from OSchip/llvm-project
Revert "[lldb/PlatformPOSIX] Change LoadImage default to RTLD_LAZY"
This reverts commit cb8c1ee269
. The test
is failing on Debian for unknown reasons.
https://lab.llvm.org/buildbot/#/builders/68/builds/8990
This commit is contained in:
parent
cb8c1ee269
commit
d8d5ef2e9d
|
@ -578,19 +578,7 @@ PlatformPOSIX::MakeLoadImageUtilityFunction(ExecutionContext &exe_ctx,
|
||||||
// __lldb_dlopen_result for consistency. The wrapper returns a void * but
|
// __lldb_dlopen_result for consistency. The wrapper returns a void * but
|
||||||
// doesn't use it because UtilityFunctions don't work with void returns at
|
// doesn't use it because UtilityFunctions don't work with void returns at
|
||||||
// present.
|
// present.
|
||||||
//
|
|
||||||
// Use lazy binding so as to not make dlopen()'s success conditional on
|
|
||||||
// forcing every symbol in the library.
|
|
||||||
//
|
|
||||||
// In general, the debugger should allow programs to load & run with
|
|
||||||
// libraries as far as they can, instead of defaulting to being super-picky
|
|
||||||
// about unavailable symbols.
|
|
||||||
//
|
|
||||||
// The value "1" appears to imply lazy binding (RTLD_LAZY) on both Darwin
|
|
||||||
// and other POSIX OSes.
|
|
||||||
static const char *dlopen_wrapper_code = R"(
|
static const char *dlopen_wrapper_code = R"(
|
||||||
const int RTLD_LAZY = 1;
|
|
||||||
|
|
||||||
struct __lldb_dlopen_result {
|
struct __lldb_dlopen_result {
|
||||||
void *image_ptr;
|
void *image_ptr;
|
||||||
const char *error_str;
|
const char *error_str;
|
||||||
|
@ -607,7 +595,7 @@ PlatformPOSIX::MakeLoadImageUtilityFunction(ExecutionContext &exe_ctx,
|
||||||
{
|
{
|
||||||
// This is the case where the name is the full path:
|
// This is the case where the name is the full path:
|
||||||
if (!path_strings) {
|
if (!path_strings) {
|
||||||
result_ptr->image_ptr = dlopen(name, RTLD_LAZY);
|
result_ptr->image_ptr = dlopen(name, 2);
|
||||||
if (result_ptr->image_ptr)
|
if (result_ptr->image_ptr)
|
||||||
result_ptr->error_str = nullptr;
|
result_ptr->error_str = nullptr;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -621,7 +609,7 @@ PlatformPOSIX::MakeLoadImageUtilityFunction(ExecutionContext &exe_ctx,
|
||||||
buffer[path_len] = '/';
|
buffer[path_len] = '/';
|
||||||
char *target_ptr = buffer+path_len+1;
|
char *target_ptr = buffer+path_len+1;
|
||||||
memcpy((void *) target_ptr, (void *) name, name_len + 1);
|
memcpy((void *) target_ptr, (void *) name, name_len + 1);
|
||||||
result_ptr->image_ptr = dlopen(buffer, RTLD_LAZY);
|
result_ptr->image_ptr = dlopen(buffer, 2);
|
||||||
if (result_ptr->image_ptr) {
|
if (result_ptr->image_ptr) {
|
||||||
result_ptr->error_str = nullptr;
|
result_ptr->error_str = nullptr;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
CXX_SOURCES := main.cpp
|
|
||||||
|
|
||||||
all: t2_0 t2_1 t1 a.out
|
|
||||||
|
|
||||||
include Makefile.rules
|
|
||||||
|
|
||||||
t1: t2_0
|
|
||||||
$(MAKE) VPATH=$(SRCDIR) -f $(MAKEFILE_RULES) \
|
|
||||||
DYLIB_ONLY=YES DYLIB_C_SOURCES=t1.c DYLIB_NAME=t1 LD_EXTRAS="-L. -lt2_0"
|
|
||||||
|
|
||||||
t2_0:
|
|
||||||
$(MAKE) VPATH=$(SRCDIR) -f $(MAKEFILE_RULES) \
|
|
||||||
DYLIB_ONLY=YES DYLIB_C_SOURCES=t2_0.c DYLIB_NAME=t2_0
|
|
||||||
|
|
||||||
t2_1:
|
|
||||||
$(MAKE) VPATH=$(SRCDIR) -f $(MAKEFILE_RULES) \
|
|
||||||
DYLIB_ONLY=YES DYLIB_C_SOURCES=t2_1.c DYLIB_NAME=t2_1
|
|
|
@ -1,54 +0,0 @@
|
||||||
"""
|
|
||||||
Test that SBProcess.LoadImageUsingPaths uses RTLD_LAZY
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import os
|
|
||||||
import shutil
|
|
||||||
import lldb
|
|
||||||
from lldbsuite.test.decorators import *
|
|
||||||
from lldbsuite.test.lldbtest import *
|
|
||||||
from lldbsuite.test import lldbutil
|
|
||||||
|
|
||||||
|
|
||||||
@skipIfRemote
|
|
||||||
@skipIfWindows # The Windows platform doesn't implement DoLoadImage.
|
|
||||||
class LoadUsingLazyBind(TestBase):
|
|
||||||
|
|
||||||
mydir = TestBase.compute_mydir(__file__)
|
|
||||||
|
|
||||||
NO_DEBUG_INFO_TESTCASE = True
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
# Call super's setUp().
|
|
||||||
TestBase.setUp(self)
|
|
||||||
|
|
||||||
# Invoke the default build rule.
|
|
||||||
self.build()
|
|
||||||
|
|
||||||
self.wd = os.path.realpath(self.getBuildDir())
|
|
||||||
|
|
||||||
self.ext = 'so'
|
|
||||||
if self.platformIsDarwin():
|
|
||||||
self.ext = 'dylib'
|
|
||||||
|
|
||||||
# Overwrite t2_0 with t2_1 to delete the definition of `use`.
|
|
||||||
shutil.copy(os.path.join(self.wd, 'libt2_1.{}'.format(self.ext)),
|
|
||||||
os.path.join(self.wd, 'libt2_0.{}'.format(self.ext)))
|
|
||||||
|
|
||||||
@skipIfRemote
|
|
||||||
@skipIfWindows # The Windows platform doesn't implement DoLoadImage.
|
|
||||||
def test_load_using_lazy_bind(self):
|
|
||||||
"""Test that we load using RTLD_LAZY"""
|
|
||||||
|
|
||||||
(target, process, thread, _) = lldbutil.run_to_source_breakpoint(self,
|
|
||||||
"break here",
|
|
||||||
lldb.SBFileSpec("main.cpp"))
|
|
||||||
error = lldb.SBError()
|
|
||||||
lib_spec = lldb.SBFileSpec("libt1.{}".format(self.ext))
|
|
||||||
paths = lldb.SBStringList()
|
|
||||||
paths.AppendString(self.wd)
|
|
||||||
out_spec = lldb.SBFileSpec()
|
|
||||||
token = process.LoadImageUsingPaths(lib_spec, paths, out_spec, error)
|
|
||||||
self.assertNotEqual(token, lldb.LLDB_INVALID_IMAGE_TOKEN, "Got a valid token")
|
|
|
@ -1 +0,0 @@
|
||||||
basic_process
|
|
|
@ -1,3 +0,0 @@
|
||||||
int main() {
|
|
||||||
return 0; // break here
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
extern void use();
|
|
||||||
void f1() {}
|
|
||||||
void f2() { use(); }
|
|
|
@ -1 +0,0 @@
|
||||||
void use() {}
|
|
Loading…
Reference in New Issue