"""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), )