summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/CMakeLists.txt1
-rw-r--r--lldb/lit/CMakeLists.txt3
-rw-r--r--lldb/lit/Settings/TestModuleCacheSanity.test4
-rw-r--r--lldb/lit/Suite/lit.cfg6
-rw-r--r--lldb/lit/Suite/lit.site.cfg.in3
-rw-r--r--lldb/lit/helper/toolchain.py3
-rw-r--r--lldb/lit/lit-lldb-init.in1
-rw-r--r--lldb/lit/lit.cfg.py11
-rw-r--r--lldb/lit/lit.site.cfg.py.in3
-rw-r--r--lldb/packages/Python/lldbsuite/test/configuration.py3
-rw-r--r--lldb/packages/Python/lldbsuite/test/dotest.py33
-rw-r--r--lldb/packages/Python/lldbsuite/test/dotest_args.py5
-rw-r--r--lldb/packages/Python/lldbsuite/test/lldbtest.py14
-rw-r--r--lldb/packages/Python/lldbsuite/test/sanity/TestModuleCacheSanity.py22
-rw-r--r--lldb/test/CMakeLists.txt2
-rwxr-xr-xlldb/utils/lldb-dotest/lldb-dotest.in2
16 files changed, 86 insertions, 30 deletions
diff --git a/lldb/CMakeLists.txt b/lldb/CMakeLists.txt
index 3585c7839bd..0e541887206 100644
--- a/lldb/CMakeLists.txt
+++ b/lldb/CMakeLists.txt
@@ -71,6 +71,7 @@ add_subdirectory(docs)
option(LLDB_INCLUDE_TESTS "Generate build targets for the LLDB unit tests." ${LLVM_INCLUDE_TESTS})
if(LLDB_INCLUDE_TESTS)
+ set(LLDB_TEST_BUILD_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/lldb-test-build.noindex" CACHE PATH "The build root for building tests.")
# Set the path to the default lldb test executable.
set(LLDB_DEFAULT_TEST_EXECUTABLE "${LLVM_RUNTIME_OUTPUT_INTDIR}/lldb${CMAKE_EXECUTABLE_SUFFIX}")
diff --git a/lldb/lit/CMakeLists.txt b/lldb/lit/CMakeLists.txt
index 133525cadda..608b211bc0c 100644
--- a/lldb/lit/CMakeLists.txt
+++ b/lldb/lit/CMakeLists.txt
@@ -15,6 +15,9 @@ endif()
get_property(LLDB_DOTEST_ARGS GLOBAL PROPERTY LLDB_DOTEST_ARGS_PROPERTY)
set(dotest_args_replacement ${LLVM_BUILD_MODE})
+set(LLDB_TEST_MODULE_CACHE_LLDB "${LLDB_TEST_BUILD_DIRECTORY}/module-cache-lldb" CACHE PATH "The Clang module cache used by the Clang embedded in LLDB while running tests.")
+set(LLDB_TEST_MODULE_CACHE_CLANG "${LLDB_TEST_BUILD_DIRECTORY}/module-cache-clang" CACHE PATH "The Clang module cache used by the Clang while building tests.")
+
if(LLDB_BUILT_STANDALONE)
# In paths to our build-tree, replace CMAKE_CFG_INTDIR with our configuration name placeholder.
string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} config_runtime_output_dir ${LLVM_RUNTIME_OUTPUT_INTDIR})
diff --git a/lldb/lit/Settings/TestModuleCacheSanity.test b/lldb/lit/Settings/TestModuleCacheSanity.test
new file mode 100644
index 00000000000..f16f40d47a6
--- /dev/null
+++ b/lldb/lit/Settings/TestModuleCacheSanity.test
@@ -0,0 +1,4 @@
+# This is a sanity check that verifies that the module cache path is set
+# correctly and points inside the default test build directory.
+RUN: %lldb -o 'settings show symbols.clang-modules-cache-path' | FileCheck %s
+CHECK: lldb-test-build.noindex{{.*}}module-cache-lldb
diff --git a/lldb/lit/Suite/lit.cfg b/lldb/lit/Suite/lit.cfg
index 490aaefab76..80f5ef0a3cd 100644
--- a/lldb/lit/Suite/lit.cfg
+++ b/lldb/lit/Suite/lit.cfg
@@ -69,6 +69,12 @@ if config.dotest_lit_args_str:
if config.llvm_libs_dir:
dotest_cmd += ['--env', 'LLVM_LIBS_DIR=' + config.llvm_libs_dir]
+if config.lldb_build_directory:
+ dotest_cmd += ['--build-dir', config.lldb_build_directory]
+
+if config.lldb_module_cache:
+ dotest_cmd += ['--module-cache-dir', config.lldb_module_cache]
+
# Load LLDB test format.
sys.path.append(os.path.join(config.lldb_src_root, "lit", "Suite"))
import lldbtest
diff --git a/lldb/lit/Suite/lit.site.cfg.in b/lldb/lit/Suite/lit.site.cfg.in
index 8fd3d25d931..9b950cf32a0 100644
--- a/lldb/lit/Suite/lit.site.cfg.in
+++ b/lldb/lit/Suite/lit.site.cfg.in
@@ -15,6 +15,9 @@ config.host_os = "@HOST_OS@"
config.host_triple = "@LLVM_HOST_TRIPLE@"
config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@"
config.target_triple = "@TARGET_TRIPLE@"
+config.lldb_build_directory = "@LLDB_TEST_BUILD_DIRECTORY@"
+config.lldb_module_cache = "@LLDB_TEST_MODULE_CACHE_LLDB@"
+config.clang_module_cache = "@LLDB_TEST_MODULE_CACHE_CLANG@"
config.python_executable = "@PYTHON_EXECUTABLE@"
config.dotest_path = "@LLDB_SOURCE_DIR@/test/dotest.py"
config.dotest_args_str = "@LLDB_DOTEST_ARGS@"
diff --git a/lldb/lit/helper/toolchain.py b/lldb/lit/helper/toolchain.py
index 84bd2dc2b65..0290e12c8f5 100644
--- a/lldb/lit/helper/toolchain.py
+++ b/lldb/lit/helper/toolchain.py
@@ -104,6 +104,9 @@ def use_support_substitutions(config):
flags += ['-L' + config.llvm_libs_dir,
'-Wl,-rpath,' + config.llvm_libs_dir]
+ # The clang module cache is used for building inferiors.
+ flags += ['-fmodules-cache-path={}'.format(config.clang_module_cache)]
+
additional_tool_dirs=[]
if config.lldb_lit_tools_dir:
additional_tool_dirs.append(config.lldb_lit_tools_dir)
diff --git a/lldb/lit/lit-lldb-init.in b/lldb/lit/lit-lldb-init.in
index 9e3bfebe911..2c1925c971a 100644
--- a/lldb/lit/lit-lldb-init.in
+++ b/lldb/lit/lit-lldb-init.in
@@ -2,3 +2,4 @@
settings set symbols.enable-external-lookup false
settings set plugin.process.gdb-remote.packet-timeout 60
settings set interpreter.echo-comment-commands false
+settings set symbols.clang-modules-cache-path "@LLDB_TEST_MODULE_CACHE_LLDB@"
diff --git a/lldb/lit/lit.cfg.py b/lldb/lit/lit.cfg.py
index b56e41e720b..4cf0855df36 100644
--- a/lldb/lit/lit.cfg.py
+++ b/lldb/lit/lit.cfg.py
@@ -64,13 +64,10 @@ llvm_config.feature_config(
('--targets-built', calculate_arch_features)
])
-# Clean the module caches in the test build directory. This is
-# necessary in an incremental build whenever clang changes underneath,
-# so doing it once per lit.py invocation is close enough.
-
-for i in ['module-cache-clang', 'module-cache-lldb']:
- cachedir = os.path.join(config.lldb_libs_dir, '..',
- 'lldb-test-build.noindex', i)
+# Clean the module caches in the test build directory. This is necessary in an
+# incremental build whenever clang changes underneath, so doing it once per
+# lit.py invocation is close enough.
+for cachedir in [config.clang_module_cache, config.lldb_module_cache]:
if os.path.isdir(cachedir):
print("Deleting module cache at %s."%cachedir)
shutil.rmtree(cachedir)
diff --git a/lldb/lit/lit.site.cfg.py.in b/lldb/lit/lit.site.cfg.py.in
index 738b25d0931..2ff07f7dab9 100644
--- a/lldb/lit/lit.site.cfg.py.in
+++ b/lldb/lit/lit.site.cfg.py.in
@@ -18,6 +18,9 @@ config.have_zlib = @LLVM_ENABLE_ZLIB@
config.host_triple = "@LLVM_HOST_TRIPLE@"
config.lldb_bitness = 64 if @LLDB_IS_64_BITS@ else 32
config.lldb_disable_python = @LLDB_DISABLE_PYTHON@
+config.lldb_build_directory = "@LLDB_TEST_BUILD_DIRECTORY@"
+config.lldb_module_cache = "@LLDB_TEST_MODULE_CACHE_LLDB@"
+config.clang_module_cache = "@LLDB_TEST_MODULE_CACHE_CLANG@"
# Support substitution of the tools and libs dirs with user parameters. This is
# used when we can't determine the tool dir at configuration time.
diff --git a/lldb/packages/Python/lldbsuite/test/configuration.py b/lldb/packages/Python/lldbsuite/test/configuration.py
index 72f046e86d7..8bd17feacb1 100644
--- a/lldb/packages/Python/lldbsuite/test/configuration.py
+++ b/lldb/packages/Python/lldbsuite/test/configuration.py
@@ -106,6 +106,9 @@ lldb_platform_working_dir = None
# The base directory in which the tests are being built.
test_build_dir = None
+# The clang module cache directory used by lldb.
+module_cache_dir = None
+
# The only directory to scan for tests. If multiple test directories are
# specified, and an exclusive test subdirectory is specified, the latter option
# takes precedence.
diff --git a/lldb/packages/Python/lldbsuite/test/dotest.py b/lldb/packages/Python/lldbsuite/test/dotest.py
index d41bafb0fec..e8974a453c1 100644
--- a/lldb/packages/Python/lldbsuite/test/dotest.py
+++ b/lldb/packages/Python/lldbsuite/test/dotest.py
@@ -55,7 +55,7 @@ def get_dotest_invocation():
def is_exe(fpath):
"""Returns true if fpath is an executable."""
if fpath == None:
- return False
+ return False
return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
@@ -274,10 +274,10 @@ def parseOptionsAndInitTestdirs():
break
if args.dsymutil:
- os.environ['DSYMUTIL'] = args.dsymutil
+ os.environ['DSYMUTIL'] = args.dsymutil
elif platform_system == 'Darwin':
- os.environ['DSYMUTIL'] = seven.get_command_output(
- 'xcrun -find -toolchain default dsymutil')
+ os.environ['DSYMUTIL'] = seven.get_command_output(
+ 'xcrun -find -toolchain default dsymutil')
if args.filecheck:
# The lldb-dotest script produced by the CMake build passes in a path
@@ -426,6 +426,11 @@ def parseOptionsAndInitTestdirs():
configuration.lldb_platform_working_dir = args.lldb_platform_working_dir
if args.test_build_dir:
configuration.test_build_dir = args.test_build_dir
+ if args.module_cache_dir:
+ configuration.module_cache_dir = args.module_cache_dir
+ else:
+ configuration.module_cache_dir = os.path.join(configuration.test_build_dir,
+ 'module-cache-lldb')
# Gather all the dirs passed on the command line.
if len(args.args) > 0:
@@ -869,16 +874,16 @@ def canRunWatchpointTests():
platform = lldbplatformutil.getPlatform()
if platform == "netbsd":
- if os.geteuid() == 0:
- return True, "root can always write dbregs"
- try:
- output = subprocess.check_output(["/sbin/sysctl", "-n",
- "security.models.extensions.user_set_dbregs"]).decode().strip()
- if output == "1":
- return True, "security.models.extensions.user_set_dbregs enabled"
- except subprocess.CalledProcessError:
- pass
- return False, "security.models.extensions.user_set_dbregs disabled"
+ if os.geteuid() == 0:
+ return True, "root can always write dbregs"
+ try:
+ output = subprocess.check_output(["/sbin/sysctl", "-n",
+ "security.models.extensions.user_set_dbregs"]).decode().strip()
+ if output == "1":
+ return True, "security.models.extensions.user_set_dbregs enabled"
+ except subprocess.CalledProcessError:
+ pass
+ return False, "security.models.extensions.user_set_dbregs disabled"
return True, "watchpoint support available"
def checkWatchpointSupport():
diff --git a/lldb/packages/Python/lldbsuite/test/dotest_args.py b/lldb/packages/Python/lldbsuite/test/dotest_args.py
index fa36cbcef45..8de4d8dbb2f 100644
--- a/lldb/packages/Python/lldbsuite/test/dotest_args.py
+++ b/lldb/packages/Python/lldbsuite/test/dotest_args.py
@@ -147,6 +147,11 @@ def create_parser():
metavar='Test build directory',
default='lldb-test-build.noindex',
help='The root build directory for the tests. It will be removed before running.')
+ group.add_argument(
+ '--module-cache-dir',
+ dest='module_cache_dir',
+ metavar='The clang module cache directory used by LLDB',
+ help='The clang module cache directory used by LLDB. This is not the one used by the makefiles. Defaults to <test build directory>/module-cache-lldb.')
# Configuration options
group = parser.add_argument_group('Remote platform options')
diff --git a/lldb/packages/Python/lldbsuite/test/lldbtest.py b/lldb/packages/Python/lldbsuite/test/lldbtest.py
index 6c00350167d..48dc81780e9 100644
--- a/lldb/packages/Python/lldbsuite/test/lldbtest.py
+++ b/lldb/packages/Python/lldbsuite/test/lldbtest.py
@@ -1852,9 +1852,9 @@ class TestBase(Base):
Base.setUp(self)
# Set the clang modules cache path used by LLDB.
- mod_cache = os.path.join(os.environ["LLDB_BUILD"], "module-cache-lldb")
- self.runCmd('settings set symbols.clang-modules-cache-path "%s"'
- % mod_cache)
+ self.runCmd(
+ 'settings set symbols.clang-modules-cache-path "{}"'.format(
+ configuration.module_cache_dir))
for s in self.setUpCommands():
self.runCmd(s)
@@ -2058,13 +2058,13 @@ class TestBase(Base):
if check:
output = ""
if self.res.GetOutput():
- output += "\nCommand output:\n" + self.res.GetOutput()
+ output += "\nCommand output:\n" + self.res.GetOutput()
if self.res.GetError():
- output += "\nError output:\n" + self.res.GetError()
+ output += "\nError output:\n" + self.res.GetError()
if msg:
- msg += output
+ msg += output
if cmd:
- cmd += output
+ cmd += output
self.assertTrue(self.res.Succeeded(),
msg if (msg) else CMD_MSG(cmd))
diff --git a/lldb/packages/Python/lldbsuite/test/sanity/TestModuleCacheSanity.py b/lldb/packages/Python/lldbsuite/test/sanity/TestModuleCacheSanity.py
new file mode 100644
index 00000000000..2ce00d4e7ca
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/sanity/TestModuleCacheSanity.py
@@ -0,0 +1,22 @@
+"""
+This is a sanity check that verifies that the module cache path is set
+correctly and points inside the default test build directory.
+"""
+
+from __future__ import print_function
+
+import lldb
+import lldbsuite.test.lldbutil as lldbutil
+from lldbsuite.test.lldbtest import *
+
+
+class ModuleCacheSanityTestCase(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+
+ NO_DEBUG_INFO_TESTCASE = True
+
+ def test(self):
+ self.expect(
+ 'settings show symbols.clang-modules-cache-path',
+ substrs=['lldb-test-build.noindex', 'module-cache-lldb'])
diff --git a/lldb/test/CMakeLists.txt b/lldb/test/CMakeLists.txt
index 6f33c8e204b..3bfb2332862 100644
--- a/lldb/test/CMakeLists.txt
+++ b/lldb/test/CMakeLists.txt
@@ -39,8 +39,6 @@ set(LLDB_TEST_COMMON_ARGS
--arch=${LLDB_TEST_ARCH}
-s
${CMAKE_BINARY_DIR}/lldb-test-traces
- --build-dir
- ${CMAKE_BINARY_DIR}/lldb-test-build.noindex
-S nm
-u CXXFLAGS
-u CFLAGS
diff --git a/lldb/utils/lldb-dotest/lldb-dotest.in b/lldb/utils/lldb-dotest/lldb-dotest.in
index 5cef370d74f..68d31273403 100755
--- a/lldb/utils/lldb-dotest/lldb-dotest.in
+++ b/lldb/utils/lldb-dotest/lldb-dotest.in
@@ -3,6 +3,7 @@ import subprocess
import sys
dotest_path = '@LLDB_SOURCE_DIR@/test/dotest.py'
+build_dir = '@LLDB_TEST_BUILD_DIRECTORY@'
dotest_args_str = '@LLDB_DOTEST_ARGS@'
if __name__ == '__main__':
@@ -11,6 +12,7 @@ if __name__ == '__main__':
# Build dotest.py command.
cmd = [sys.executable, dotest_path]
cmd.extend(dotest_args)
+ cmd.extend(['--build-dir', build_dir])
cmd.extend(wrapper_args)
# Invoke dotest.py and return exit code.
print(' '.join(cmd))
OpenPOWER on IntegriCloud