1f03dbdb7SKazuki Sakamoto""" 2f03dbdb7SKazuki SakamotoTest platform locate module callback functionality 3f03dbdb7SKazuki Sakamoto""" 4f03dbdb7SKazuki Sakamoto 5f03dbdb7SKazuki Sakamotoimport ctypes 6f03dbdb7SKazuki Sakamotofrom lldbsuite.test.decorators import * 7f03dbdb7SKazuki Sakamotofrom lldbsuite.test.lldbtest import * 8f03dbdb7SKazuki Sakamotofrom pathlib import Path 9f03dbdb7SKazuki Sakamoto 10f03dbdb7SKazuki Sakamotoimport lldb 11f03dbdb7SKazuki Sakamoto 12f03dbdb7SKazuki SakamotoUNITTESTS_TARGET_INPUTS_PATH = "../../../../unittests/Target/Inputs" 13f03dbdb7SKazuki SakamotoMODULE_PLATFORM_PATH = "/system/lib64/AndroidModule.so" 14f03dbdb7SKazuki SakamotoMODULE_TRIPLE = "aarch64-none-linux" 15f03dbdb7SKazuki SakamotoMODULE_RESOLVED_TRIPLE = "aarch64--linux-android" 16f03dbdb7SKazuki SakamotoMODULE_UUID = "80008338-82A0-51E5-5922-C905D23890DA-BDDEFECC" 17f03dbdb7SKazuki SakamotoMODULE_FUNCTION = "boom" 18f03dbdb7SKazuki SakamotoMODULE_HIDDEN_FUNCTION = "boom_hidden" 19f03dbdb7SKazuki SakamotoMODULE_FILE = "AndroidModule.so" 20f03dbdb7SKazuki SakamotoMODULE_NON_EXISTENT_FILE = "non-existent-file" 21f03dbdb7SKazuki SakamotoSYMBOL_FILE = "AndroidModule.unstripped.so" 22f03dbdb7SKazuki SakamotoBREAKPAD_SYMBOL_FILE = "AndroidModule.so.sym" 23f03dbdb7SKazuki SakamotoSYMBOL_STRIPPED = "stripped" 24f03dbdb7SKazuki SakamotoSYMBOL_UNSTRIPPED = "unstripped" 25f03dbdb7SKazuki Sakamoto 26f03dbdb7SKazuki Sakamoto 27f03dbdb7SKazuki Sakamotoclass LocateModuleCallbackTestCase(TestBase): 28f03dbdb7SKazuki Sakamoto def setUp(self): 29f03dbdb7SKazuki Sakamoto TestBase.setUp(self) 30f03dbdb7SKazuki Sakamoto self.platform = self.dbg.GetSelectedPlatform() 31f03dbdb7SKazuki Sakamoto self.target = self.dbg.CreateTarget("") 32f03dbdb7SKazuki Sakamoto self.assertTrue(self.target) 33f03dbdb7SKazuki Sakamoto 34f03dbdb7SKazuki Sakamoto self.input_dir = ( 35f03dbdb7SKazuki Sakamoto Path(self.getSourceDir()) / UNITTESTS_TARGET_INPUTS_PATH 36f03dbdb7SKazuki Sakamoto ).resolve() 37f03dbdb7SKazuki Sakamoto self.assertTrue(self.input_dir.is_dir()) 38f03dbdb7SKazuki Sakamoto 39f03dbdb7SKazuki Sakamoto def check_module_spec(self, module_spec: lldb.SBModuleSpec): 40f03dbdb7SKazuki Sakamoto self.assertEqual( 41f03dbdb7SKazuki Sakamoto MODULE_UUID.replace("-", ""), 42f03dbdb7SKazuki Sakamoto ctypes.string_at( 43f03dbdb7SKazuki Sakamoto int(module_spec.GetUUIDBytes()), 44f03dbdb7SKazuki Sakamoto module_spec.GetUUIDLength(), 45f03dbdb7SKazuki Sakamoto ) 46f03dbdb7SKazuki Sakamoto .hex() 47f03dbdb7SKazuki Sakamoto .upper(), 48f03dbdb7SKazuki Sakamoto ) 49f03dbdb7SKazuki Sakamoto 50f03dbdb7SKazuki Sakamoto self.assertEqual(MODULE_TRIPLE, module_spec.GetTriple()) 51f03dbdb7SKazuki Sakamoto 52*43b9d620SKazuki Sakamoto self.assertEqual( 53*43b9d620SKazuki Sakamoto MODULE_PLATFORM_PATH, Path(module_spec.GetFileSpec().fullpath).as_posix() 54*43b9d620SKazuki Sakamoto ) 55f03dbdb7SKazuki Sakamoto 56f03dbdb7SKazuki Sakamoto def check_module(self, module: lldb.SBModule, symbol_file: str, symbol_kind: str): 57f03dbdb7SKazuki Sakamoto self.assertTrue(module.IsValid()) 58f03dbdb7SKazuki Sakamoto 59f03dbdb7SKazuki Sakamoto self.assertEqual( 60f03dbdb7SKazuki Sakamoto MODULE_UUID, 61f03dbdb7SKazuki Sakamoto module.GetUUIDString(), 62f03dbdb7SKazuki Sakamoto ) 63f03dbdb7SKazuki Sakamoto 64f03dbdb7SKazuki Sakamoto self.assertEqual(MODULE_RESOLVED_TRIPLE, module.GetTriple()) 65f03dbdb7SKazuki Sakamoto 66f03dbdb7SKazuki Sakamoto self.assertEqual( 67*43b9d620SKazuki Sakamoto MODULE_PLATFORM_PATH, Path(module.GetPlatformFileSpec().fullpath).as_posix() 68f03dbdb7SKazuki Sakamoto ) 69f03dbdb7SKazuki Sakamoto 70*43b9d620SKazuki Sakamoto self.assertTrue( 71*43b9d620SKazuki Sakamoto (self.input_dir / MODULE_FILE) 72*43b9d620SKazuki Sakamoto .resolve() 73*43b9d620SKazuki Sakamoto .samefile(Path(module.GetFileSpec().fullpath).resolve()) 74*43b9d620SKazuki Sakamoto ) 75*43b9d620SKazuki Sakamoto 76*43b9d620SKazuki Sakamoto self.assertTrue( 77*43b9d620SKazuki Sakamoto (self.input_dir / symbol_file) 78*43b9d620SKazuki Sakamoto .resolve() 79*43b9d620SKazuki Sakamoto .samefile(Path(module.GetSymbolFileSpec().fullpath).resolve()) 80f03dbdb7SKazuki Sakamoto ) 81f03dbdb7SKazuki Sakamoto 82f03dbdb7SKazuki Sakamoto sc_list = module.FindFunctions(MODULE_FUNCTION, lldb.eSymbolTypeCode) 83f03dbdb7SKazuki Sakamoto self.assertEqual(1, sc_list.GetSize()) 84f03dbdb7SKazuki Sakamoto sc_list = module.FindFunctions(MODULE_HIDDEN_FUNCTION, lldb.eSymbolTypeCode) 85f03dbdb7SKazuki Sakamoto self.assertEqual(0 if symbol_kind == SYMBOL_STRIPPED else 1, sc_list.GetSize()) 86f03dbdb7SKazuki Sakamoto 87f03dbdb7SKazuki Sakamoto def test_set_non_callable(self): 88f03dbdb7SKazuki Sakamoto # The callback should be callable. 89f03dbdb7SKazuki Sakamoto non_callable = "a" 90f03dbdb7SKazuki Sakamoto 91f03dbdb7SKazuki Sakamoto with self.assertRaises(TypeError, msg="Need a callable object or None!"): 92f03dbdb7SKazuki Sakamoto self.platform.SetLocateModuleCallback(non_callable) 93f03dbdb7SKazuki Sakamoto 94f03dbdb7SKazuki Sakamoto def test_set_wrong_args(self): 95f03dbdb7SKazuki Sakamoto # The callback should accept 3 argument. 96f03dbdb7SKazuki Sakamoto def test_args2(a, b): 97f03dbdb7SKazuki Sakamoto pass 98f03dbdb7SKazuki Sakamoto 99f03dbdb7SKazuki Sakamoto with self.assertRaises(TypeError, msg="Expected 3 argument callable object"): 100f03dbdb7SKazuki Sakamoto self.platform.SetLocateModuleCallback(test_args2) 101f03dbdb7SKazuki Sakamoto 102f03dbdb7SKazuki Sakamoto def test_default(self): 103f03dbdb7SKazuki Sakamoto # The default behavior is to locate the module with LLDB implementation 104f03dbdb7SKazuki Sakamoto # and AddModule should fail. 105f03dbdb7SKazuki Sakamoto module = self.target.AddModule( 106f03dbdb7SKazuki Sakamoto MODULE_PLATFORM_PATH, 107f03dbdb7SKazuki Sakamoto MODULE_TRIPLE, 108f03dbdb7SKazuki Sakamoto MODULE_UUID, 109f03dbdb7SKazuki Sakamoto ) 110f03dbdb7SKazuki Sakamoto 111f03dbdb7SKazuki Sakamoto self.assertFalse(module) 112f03dbdb7SKazuki Sakamoto 113f03dbdb7SKazuki Sakamoto def test_set_none(self): 114f03dbdb7SKazuki Sakamoto # SetLocateModuleCallback should succeed to clear the callback with None. 115f03dbdb7SKazuki Sakamoto # and AddModule should fail. 116f03dbdb7SKazuki Sakamoto self.assertTrue(self.platform.SetLocateModuleCallback(None).Success()) 117f03dbdb7SKazuki Sakamoto 118f03dbdb7SKazuki Sakamoto module = self.target.AddModule( 119f03dbdb7SKazuki Sakamoto MODULE_PLATFORM_PATH, 120f03dbdb7SKazuki Sakamoto MODULE_TRIPLE, 121f03dbdb7SKazuki Sakamoto MODULE_UUID, 122f03dbdb7SKazuki Sakamoto ) 123f03dbdb7SKazuki Sakamoto 124f03dbdb7SKazuki Sakamoto self.assertFalse(module) 125f03dbdb7SKazuki Sakamoto 126f03dbdb7SKazuki Sakamoto def test_return_error(self): 127f03dbdb7SKazuki Sakamoto # The callback fails, AddModule should fail. 128f03dbdb7SKazuki Sakamoto def test_locate_module( 129f03dbdb7SKazuki Sakamoto module_spec: lldb.SBModuleSpec, 130f03dbdb7SKazuki Sakamoto module_file_spec: lldb.SBFileSpec, 131f03dbdb7SKazuki Sakamoto symbol_file_spec: lldb.SBFileSpec, 132f03dbdb7SKazuki Sakamoto ): 133f03dbdb7SKazuki Sakamoto self.check_module_spec(module_spec) 134f03dbdb7SKazuki Sakamoto return lldb.SBError("locate module callback failed") 135f03dbdb7SKazuki Sakamoto 136f03dbdb7SKazuki Sakamoto self.assertTrue( 137f03dbdb7SKazuki Sakamoto self.platform.SetLocateModuleCallback(test_locate_module).Success() 138f03dbdb7SKazuki Sakamoto ) 139f03dbdb7SKazuki Sakamoto 140f03dbdb7SKazuki Sakamoto module = self.target.AddModule( 141f03dbdb7SKazuki Sakamoto MODULE_PLATFORM_PATH, 142f03dbdb7SKazuki Sakamoto MODULE_TRIPLE, 143f03dbdb7SKazuki Sakamoto MODULE_UUID, 144f03dbdb7SKazuki Sakamoto ) 145f03dbdb7SKazuki Sakamoto 146f03dbdb7SKazuki Sakamoto self.assertFalse(module) 147f03dbdb7SKazuki Sakamoto 148f03dbdb7SKazuki Sakamoto def test_return_no_files(self): 149f03dbdb7SKazuki Sakamoto # The callback succeeds but not return any files, AddModule should fail. 150f03dbdb7SKazuki Sakamoto def test_locate_module( 151f03dbdb7SKazuki Sakamoto module_spec: lldb.SBModuleSpec, 152f03dbdb7SKazuki Sakamoto module_file_spec: lldb.SBFileSpec, 153f03dbdb7SKazuki Sakamoto symbol_file_spec: lldb.SBFileSpec, 154f03dbdb7SKazuki Sakamoto ): 155f03dbdb7SKazuki Sakamoto self.check_module_spec(module_spec) 156f03dbdb7SKazuki Sakamoto return lldb.SBError() 157f03dbdb7SKazuki Sakamoto 158f03dbdb7SKazuki Sakamoto self.assertTrue( 159f03dbdb7SKazuki Sakamoto self.platform.SetLocateModuleCallback(test_locate_module).Success() 160f03dbdb7SKazuki Sakamoto ) 161f03dbdb7SKazuki Sakamoto 162f03dbdb7SKazuki Sakamoto module = self.target.AddModule( 163f03dbdb7SKazuki Sakamoto MODULE_PLATFORM_PATH, 164f03dbdb7SKazuki Sakamoto MODULE_TRIPLE, 165f03dbdb7SKazuki Sakamoto MODULE_UUID, 166f03dbdb7SKazuki Sakamoto ) 167f03dbdb7SKazuki Sakamoto 168f03dbdb7SKazuki Sakamoto self.assertFalse(module) 169f03dbdb7SKazuki Sakamoto 170f03dbdb7SKazuki Sakamoto def test_return_non_existent_module(self): 171f03dbdb7SKazuki Sakamoto # The callback returns non-existent module file, AddModule should fail. 172f03dbdb7SKazuki Sakamoto def test_locate_module( 173f03dbdb7SKazuki Sakamoto module_spec: lldb.SBModuleSpec, 174f03dbdb7SKazuki Sakamoto module_file_spec: lldb.SBFileSpec, 175f03dbdb7SKazuki Sakamoto symbol_file_spec: lldb.SBFileSpec, 176f03dbdb7SKazuki Sakamoto ): 177f03dbdb7SKazuki Sakamoto self.check_module_spec(module_spec) 178f03dbdb7SKazuki Sakamoto 179f03dbdb7SKazuki Sakamoto module_file_spec.SetDirectory(str(self.input_dir)) 180f03dbdb7SKazuki Sakamoto module_file_spec.SetFilename(MODULE_NON_EXISTENT_FILE) 181f03dbdb7SKazuki Sakamoto 182f03dbdb7SKazuki Sakamoto return lldb.SBError() 183f03dbdb7SKazuki Sakamoto 184f03dbdb7SKazuki Sakamoto self.assertTrue( 185f03dbdb7SKazuki Sakamoto self.platform.SetLocateModuleCallback(test_locate_module).Success() 186f03dbdb7SKazuki Sakamoto ) 187f03dbdb7SKazuki Sakamoto 188f03dbdb7SKazuki Sakamoto module = self.target.AddModule( 189f03dbdb7SKazuki Sakamoto MODULE_PLATFORM_PATH, 190f03dbdb7SKazuki Sakamoto MODULE_TRIPLE, 191f03dbdb7SKazuki Sakamoto MODULE_UUID, 192f03dbdb7SKazuki Sakamoto ) 193f03dbdb7SKazuki Sakamoto 194f03dbdb7SKazuki Sakamoto self.assertFalse(module) 195f03dbdb7SKazuki Sakamoto 196f03dbdb7SKazuki Sakamoto def test_return_module_with_non_existent_symbol(self): 197f03dbdb7SKazuki Sakamoto # The callback returns a module and non-existent symbol file, 198f03dbdb7SKazuki Sakamoto # AddModule should fail. 199f03dbdb7SKazuki Sakamoto def test_locate_module( 200f03dbdb7SKazuki Sakamoto module_spec: lldb.SBModuleSpec, 201f03dbdb7SKazuki Sakamoto module_file_spec: lldb.SBFileSpec, 202f03dbdb7SKazuki Sakamoto symbol_file_spec: lldb.SBFileSpec, 203f03dbdb7SKazuki Sakamoto ): 204f03dbdb7SKazuki Sakamoto self.check_module_spec(module_spec) 205f03dbdb7SKazuki Sakamoto 206f03dbdb7SKazuki Sakamoto module_file_spec.SetDirectory(str(self.input_dir)) 207f03dbdb7SKazuki Sakamoto module_file_spec.SetFilename(MODULE_FILE) 208f03dbdb7SKazuki Sakamoto 209f03dbdb7SKazuki Sakamoto symbol_file_spec.SetDirectory(str(self.input_dir)) 210f03dbdb7SKazuki Sakamoto symbol_file_spec.SetFilename(MODULE_NON_EXISTENT_FILE) 211f03dbdb7SKazuki Sakamoto 212f03dbdb7SKazuki Sakamoto return lldb.SBError() 213f03dbdb7SKazuki Sakamoto 214f03dbdb7SKazuki Sakamoto self.assertTrue( 215f03dbdb7SKazuki Sakamoto self.platform.SetLocateModuleCallback(test_locate_module).Success() 216f03dbdb7SKazuki Sakamoto ) 217f03dbdb7SKazuki Sakamoto 218f03dbdb7SKazuki Sakamoto module = self.target.AddModule( 219f03dbdb7SKazuki Sakamoto MODULE_PLATFORM_PATH, 220f03dbdb7SKazuki Sakamoto MODULE_TRIPLE, 221f03dbdb7SKazuki Sakamoto MODULE_UUID, 222f03dbdb7SKazuki Sakamoto ) 223f03dbdb7SKazuki Sakamoto 224f03dbdb7SKazuki Sakamoto self.assertFalse(module) 225f03dbdb7SKazuki Sakamoto 226f03dbdb7SKazuki Sakamoto def test_return_non_existent_symbol(self): 227f03dbdb7SKazuki Sakamoto # The callback returns non-existent symbol file, AddModule should fail. 228f03dbdb7SKazuki Sakamoto def test_locate_module( 229f03dbdb7SKazuki Sakamoto module_spec: lldb.SBModuleSpec, 230f03dbdb7SKazuki Sakamoto module_file_spec: lldb.SBFileSpec, 231f03dbdb7SKazuki Sakamoto symbol_file_spec: lldb.SBFileSpec, 232f03dbdb7SKazuki Sakamoto ): 233f03dbdb7SKazuki Sakamoto self.check_module_spec(module_spec) 234f03dbdb7SKazuki Sakamoto 235f03dbdb7SKazuki Sakamoto symbol_file_spec.SetDirectory(str(self.input_dir)) 236f03dbdb7SKazuki Sakamoto symbol_file_spec.SetFilename(MODULE_NON_EXISTENT_FILE) 237f03dbdb7SKazuki Sakamoto 238f03dbdb7SKazuki Sakamoto return lldb.SBError() 239f03dbdb7SKazuki Sakamoto 240f03dbdb7SKazuki Sakamoto self.assertTrue( 241f03dbdb7SKazuki Sakamoto self.platform.SetLocateModuleCallback(test_locate_module).Success() 242f03dbdb7SKazuki Sakamoto ) 243f03dbdb7SKazuki Sakamoto 244f03dbdb7SKazuki Sakamoto module = self.target.AddModule( 245f03dbdb7SKazuki Sakamoto MODULE_PLATFORM_PATH, 246f03dbdb7SKazuki Sakamoto MODULE_TRIPLE, 247f03dbdb7SKazuki Sakamoto MODULE_UUID, 248f03dbdb7SKazuki Sakamoto ) 249f03dbdb7SKazuki Sakamoto 250f03dbdb7SKazuki Sakamoto self.assertFalse(module) 251f03dbdb7SKazuki Sakamoto 252f03dbdb7SKazuki Sakamoto def test_return_module(self): 253f03dbdb7SKazuki Sakamoto # The callback returns the module file, AddModule should succeed. 254f03dbdb7SKazuki Sakamoto def test_locate_module( 255f03dbdb7SKazuki Sakamoto module_spec: lldb.SBModuleSpec, 256f03dbdb7SKazuki Sakamoto module_file_spec: lldb.SBFileSpec, 257f03dbdb7SKazuki Sakamoto symbol_file_spec: lldb.SBFileSpec, 258f03dbdb7SKazuki Sakamoto ): 259f03dbdb7SKazuki Sakamoto self.check_module_spec(module_spec) 260f03dbdb7SKazuki Sakamoto 261f03dbdb7SKazuki Sakamoto module_file_spec.SetDirectory(str(self.input_dir)) 262f03dbdb7SKazuki Sakamoto module_file_spec.SetFilename(MODULE_FILE) 263f03dbdb7SKazuki Sakamoto 264f03dbdb7SKazuki Sakamoto return lldb.SBError() 265f03dbdb7SKazuki Sakamoto 266f03dbdb7SKazuki Sakamoto self.assertTrue( 267f03dbdb7SKazuki Sakamoto self.platform.SetLocateModuleCallback(test_locate_module).Success() 268f03dbdb7SKazuki Sakamoto ) 269f03dbdb7SKazuki Sakamoto 270f03dbdb7SKazuki Sakamoto module = self.target.AddModule( 271f03dbdb7SKazuki Sakamoto MODULE_PLATFORM_PATH, 272f03dbdb7SKazuki Sakamoto MODULE_TRIPLE, 273f03dbdb7SKazuki Sakamoto MODULE_UUID, 274f03dbdb7SKazuki Sakamoto ) 275f03dbdb7SKazuki Sakamoto 276f03dbdb7SKazuki Sakamoto self.check_module( 277f03dbdb7SKazuki Sakamoto module=module, symbol_file=MODULE_FILE, symbol_kind=SYMBOL_STRIPPED 278f03dbdb7SKazuki Sakamoto ) 279f03dbdb7SKazuki Sakamoto 280f03dbdb7SKazuki Sakamoto def test_return_module_with_symbol(self): 281f03dbdb7SKazuki Sakamoto # The callback returns the module file and the symbol file, 282f03dbdb7SKazuki Sakamoto # AddModule should succeed. 283f03dbdb7SKazuki Sakamoto def test_locate_module( 284f03dbdb7SKazuki Sakamoto module_spec: lldb.SBModuleSpec, 285f03dbdb7SKazuki Sakamoto module_file_spec: lldb.SBFileSpec, 286f03dbdb7SKazuki Sakamoto symbol_file_spec: lldb.SBFileSpec, 287f03dbdb7SKazuki Sakamoto ): 288f03dbdb7SKazuki Sakamoto self.check_module_spec(module_spec) 289f03dbdb7SKazuki Sakamoto 290f03dbdb7SKazuki Sakamoto module_file_spec.SetDirectory(str(self.input_dir)) 291f03dbdb7SKazuki Sakamoto module_file_spec.SetFilename(MODULE_FILE) 292f03dbdb7SKazuki Sakamoto 293f03dbdb7SKazuki Sakamoto symbol_file_spec.SetDirectory(str(self.input_dir)) 294f03dbdb7SKazuki Sakamoto symbol_file_spec.SetFilename(SYMBOL_FILE) 295f03dbdb7SKazuki Sakamoto 296f03dbdb7SKazuki Sakamoto return lldb.SBError() 297f03dbdb7SKazuki Sakamoto 298f03dbdb7SKazuki Sakamoto self.assertTrue( 299f03dbdb7SKazuki Sakamoto self.platform.SetLocateModuleCallback(test_locate_module).Success() 300f03dbdb7SKazuki Sakamoto ) 301f03dbdb7SKazuki Sakamoto 302f03dbdb7SKazuki Sakamoto module = self.target.AddModule( 303f03dbdb7SKazuki Sakamoto MODULE_PLATFORM_PATH, 304f03dbdb7SKazuki Sakamoto MODULE_TRIPLE, 305f03dbdb7SKazuki Sakamoto MODULE_UUID, 306f03dbdb7SKazuki Sakamoto ) 307f03dbdb7SKazuki Sakamoto 308f03dbdb7SKazuki Sakamoto self.check_module( 309f03dbdb7SKazuki Sakamoto module=module, symbol_file=SYMBOL_FILE, symbol_kind=SYMBOL_UNSTRIPPED 310f03dbdb7SKazuki Sakamoto ) 311f03dbdb7SKazuki Sakamoto 312f03dbdb7SKazuki Sakamoto def test_return_module_with_breakpad_symbol(self): 313f03dbdb7SKazuki Sakamoto # The callback returns the module file and the breakpad symbol file, 314f03dbdb7SKazuki Sakamoto # AddModule should succeed. 315f03dbdb7SKazuki Sakamoto def test_locate_module( 316f03dbdb7SKazuki Sakamoto module_spec: lldb.SBModuleSpec, 317f03dbdb7SKazuki Sakamoto module_file_spec: lldb.SBFileSpec, 318f03dbdb7SKazuki Sakamoto symbol_file_spec: lldb.SBFileSpec, 319f03dbdb7SKazuki Sakamoto ): 320f03dbdb7SKazuki Sakamoto self.check_module_spec(module_spec) 321f03dbdb7SKazuki Sakamoto 322f03dbdb7SKazuki Sakamoto module_file_spec.SetDirectory(str(self.input_dir)) 323f03dbdb7SKazuki Sakamoto module_file_spec.SetFilename(MODULE_FILE) 324f03dbdb7SKazuki Sakamoto 325f03dbdb7SKazuki Sakamoto symbol_file_spec.SetDirectory(str(self.input_dir)) 326f03dbdb7SKazuki Sakamoto symbol_file_spec.SetFilename(BREAKPAD_SYMBOL_FILE) 327f03dbdb7SKazuki Sakamoto 328f03dbdb7SKazuki Sakamoto return lldb.SBError() 329f03dbdb7SKazuki Sakamoto 330f03dbdb7SKazuki Sakamoto self.assertTrue( 331f03dbdb7SKazuki Sakamoto self.platform.SetLocateModuleCallback(test_locate_module).Success() 332f03dbdb7SKazuki Sakamoto ) 333f03dbdb7SKazuki Sakamoto 334f03dbdb7SKazuki Sakamoto module = self.target.AddModule( 335f03dbdb7SKazuki Sakamoto MODULE_PLATFORM_PATH, 336f03dbdb7SKazuki Sakamoto MODULE_TRIPLE, 337f03dbdb7SKazuki Sakamoto MODULE_UUID, 338f03dbdb7SKazuki Sakamoto ) 339f03dbdb7SKazuki Sakamoto 340f03dbdb7SKazuki Sakamoto self.check_module( 341f03dbdb7SKazuki Sakamoto module=module, 342f03dbdb7SKazuki Sakamoto symbol_file=BREAKPAD_SYMBOL_FILE, 343f03dbdb7SKazuki Sakamoto symbol_kind=SYMBOL_UNSTRIPPED, 344f03dbdb7SKazuki Sakamoto ) 345