[lldb/test] Do a better job at setting (DY)LD_LIBRARY_PATH

Summary:
registerSharedLibrariesWithTarget was setting the library path
environment variable to the process build directory, but the function is
also accepting libraries in other directories (in which case they won't
be found automatically).

This patch makes the function set the path variable correctly for these
libraries too. This enables us to remove the code for setting the path
variable in TestWeakSymbols.py, which was working only accidentally --
it was relying on the fact that
  launch_info.SetEnvironmentEntries(..., append=True)
would not overwrite the path variable it has set, but that is going to
change with D83306.

Reviewers: davide, jingham

Subscribers: lldb-commits

Tags: #lldb

Differential Revision: https://reviews.llvm.org/D83552
This commit is contained in:
Pavel Labath 2020-07-10 14:58:29 +02:00
parent e0a372ff10
commit 5f4c850e7b
2 changed files with 10 additions and 7 deletions

View File

@ -1881,8 +1881,7 @@ class TestBase(Base):
shlib_prefix = self.platformContext.shlib_prefix
shlib_extension = '.' + self.platformContext.shlib_extension
working_dir = self.get_process_working_directory()
environment = ['%s=%s' % (shlib_environment_var, working_dir)]
dirs = []
# Add any shared libraries to our target if remote so they get
# uploaded into the working directory on the remote side
for name in shlibs:
@ -1905,6 +1904,7 @@ class TestBase(Base):
# Make sure we found the local shared library in the above code
self.assertTrue(os.path.exists(local_shlib_path))
# Add the shared library to our target
shlib_module = target.AddModule(local_shlib_path, None, None, None)
if lldb.remote_platform:
@ -1914,8 +1914,15 @@ class TestBase(Base):
os.path.basename(local_shlib_path))
shlib_module.SetRemoteInstallFileSpec(
lldb.SBFileSpec(remote_shlib_path, False))
dir_to_add = self.get_process_working_directory()
else:
dir_to_add = os.path.dirname(local_shlib_path)
return environment
if dir_to_add not in dirs:
dirs.append(dir_to_add)
env_value = self.platformContext.shlib_path_separator.join(dirs)
return ['%s=%s' % (shlib_environment_var, env_value)]
def registerSanitizerLibrariesWithTarget(self, target):
runtimes = []

View File

@ -48,10 +48,6 @@ class TestWeakSymbolsInExpressions(TestBase):
launch_info = lldb.SBLaunchInfo(None)
launch_info.SetWorkingDirectory(self.getBuildDir())
# We have to point to the hidden directory to pick up the
# version of the dylib without the weak symbols:
env_expr = self.platformContext.shlib_environment_var + "=" + hidden_dir
launch_info.SetEnvironmentEntries([env_expr], True)
(self.target, _, thread, _) = lldbutil.run_to_source_breakpoint(
self, "Set a breakpoint here",