| """Test the LLDB module cache funcionality for universal mach-o files.""" |
| |
| import glob |
| import lldb |
| from lldbsuite.test.decorators import * |
| from lldbsuite.test.lldbtest import * |
| from lldbsuite.test import lldbutil |
| import os |
| import time |
| |
| |
| class ModuleCacheTestcaseUniversal(TestBase): |
| def setUp(self): |
| # Call super's setUp(). |
| TestBase.setUp(self) |
| # Find the line number in a(int) to break at. |
| self.cache_dir = os.path.join(self.getBuildDir(), "lldb-module-cache") |
| # Set the lldb module cache directory to a directory inside the build |
| # artifacts directory so no other tests are interfered with. |
| self.runCmd( |
| 'settings set symbols.lldb-index-cache-path "%s"' % (self.cache_dir) |
| ) |
| self.runCmd("settings set symbols.enable-lldb-index-cache true") |
| |
| def get_module_cache_files(self, basename): |
| module_file_glob = os.path.join(self.cache_dir, "llvmcache-*%s*" % (basename)) |
| return glob.glob(module_file_glob) |
| |
| # Doesn't depend on any specific debug information. |
| @no_debug_info_test |
| def test(self): |
| """ |
| Test module cache functionality for a universal mach-o files. |
| |
| This will test that if we enable the module cache, we can create |
| lldb module caches for each slice of a universal mach-o file and |
| they will each have a unique directory. |
| """ |
| exe_basename = "testit" |
| src_dir = self.getSourceDir() |
| yaml_path = os.path.join(src_dir, "universal.yaml") |
| yaml_base, ext = os.path.splitext(yaml_path) |
| exe = self.getBuildArtifact(exe_basename) |
| self.yaml2obj(yaml_path, exe) |
| self.assertTrue(os.path.exists(exe)) |
| # Create a module with no dependencies. |
| self.runCmd("target create -d --arch x86_64 %s" % (exe)) |
| self.runCmd("image dump symtab %s" % (exe_basename)) |
| self.runCmd("target create -d --arch arm64 %s" % (exe)) |
| self.runCmd("image dump symtab %s" % (exe_basename)) |
| |
| cache_files = self.get_module_cache_files(exe_basename) |
| |
| self.assertEqual( |
| len(cache_files), |
| 2, |
| "make sure there are two files in the module cache directory (%s) for %s" |
| % (self.cache_dir, exe_basename), |
| ) |