1*f40ed1f6SJonas Devlieghereimport lldb 2*f40ed1f6SJonas Devliegherefrom lldbsuite.test.decorators import * 3*f40ed1f6SJonas Devliegherefrom lldbsuite.test.lldbtest import * 4*f40ed1f6SJonas Devliegherefrom lldbsuite.test import lldbutil 5*f40ed1f6SJonas Devlieghere 6*f40ed1f6SJonas Devlieghereimport json 7*f40ed1f6SJonas Devlieghereimport uuid 8*f40ed1f6SJonas Devlieghereimport os 9*f40ed1f6SJonas Devlieghereimport shutil 10*f40ed1f6SJonas Devlieghereimport time 11*f40ed1f6SJonas Devlieghere 12*f40ed1f6SJonas Devlieghere 13*f40ed1f6SJonas Devlieghereclass TestObjectFileJSON(TestBase): 14*f40ed1f6SJonas Devlieghere TRIPLE = "arm64-apple-macosx13.0.0" 15*f40ed1f6SJonas Devlieghere 16*f40ed1f6SJonas Devlieghere def setUp(self): 17*f40ed1f6SJonas Devlieghere TestBase.setUp(self) 18*f40ed1f6SJonas Devlieghere self.source = "main.c" 19*f40ed1f6SJonas Devlieghere 20*f40ed1f6SJonas Devlieghere def emitJSON(self, data, path): 21*f40ed1f6SJonas Devlieghere json_object = json.dumps(data, indent=4) 22*f40ed1f6SJonas Devlieghere with open(path, "w") as outfile: 23*f40ed1f6SJonas Devlieghere outfile.write(json_object) 24*f40ed1f6SJonas Devlieghere 25*f40ed1f6SJonas Devlieghere def toModuleSpec(self, path): 26*f40ed1f6SJonas Devlieghere module_spec = lldb.SBModuleSpec() 27*f40ed1f6SJonas Devlieghere module_spec.SetFileSpec(lldb.SBFileSpec(path)) 28*f40ed1f6SJonas Devlieghere return module_spec 29*f40ed1f6SJonas Devlieghere 30*f40ed1f6SJonas Devlieghere @no_debug_info_test 31*f40ed1f6SJonas Devlieghere def test_target(self): 32*f40ed1f6SJonas Devlieghere triple = "arm64-apple-macosx13.0.0" 33*f40ed1f6SJonas Devlieghere data = { 34*f40ed1f6SJonas Devlieghere "triple": triple, 35*f40ed1f6SJonas Devlieghere "uuid": str(uuid.uuid4()), 36*f40ed1f6SJonas Devlieghere "type": "executable", 37*f40ed1f6SJonas Devlieghere } 38*f40ed1f6SJonas Devlieghere 39*f40ed1f6SJonas Devlieghere json_object_file = self.getBuildArtifact("a.json") 40*f40ed1f6SJonas Devlieghere self.emitJSON(data, json_object_file) 41*f40ed1f6SJonas Devlieghere 42*f40ed1f6SJonas Devlieghere target = self.dbg.CreateTarget(json_object_file) 43*f40ed1f6SJonas Devlieghere self.assertTrue(target.IsValid()) 44*f40ed1f6SJonas Devlieghere self.assertEqual(target.GetTriple(), triple) 45*f40ed1f6SJonas Devlieghere 46*f40ed1f6SJonas Devlieghere @no_debug_info_test 47*f40ed1f6SJonas Devlieghere def test_module(self): 48*f40ed1f6SJonas Devlieghere self.build() 49*f40ed1f6SJonas Devlieghere exe = self.getBuildArtifact("a.out") 50*f40ed1f6SJonas Devlieghere target = self.dbg.CreateTarget(exe) 51*f40ed1f6SJonas Devlieghere 52*f40ed1f6SJonas Devlieghere data = { 53*f40ed1f6SJonas Devlieghere "triple": target.GetTriple(), 54*f40ed1f6SJonas Devlieghere "uuid": str(uuid.uuid4()), 55*f40ed1f6SJonas Devlieghere } 56*f40ed1f6SJonas Devlieghere 57*f40ed1f6SJonas Devlieghere json_object_file_b = self.getBuildArtifact("b.json") 58*f40ed1f6SJonas Devlieghere self.emitJSON(data, json_object_file_b) 59*f40ed1f6SJonas Devlieghere 60*f40ed1f6SJonas Devlieghere module = target.AddModule(self.toModuleSpec(json_object_file_b)) 61*f40ed1f6SJonas Devlieghere self.assertFalse(module.IsValid()) 62*f40ed1f6SJonas Devlieghere 63*f40ed1f6SJonas Devlieghere data = { 64*f40ed1f6SJonas Devlieghere "triple": target.GetTriple(), 65*f40ed1f6SJonas Devlieghere "uuid": str(uuid.uuid4()), 66*f40ed1f6SJonas Devlieghere "type": "sharedlibrary", 67*f40ed1f6SJonas Devlieghere "sections": [ 68*f40ed1f6SJonas Devlieghere { 69*f40ed1f6SJonas Devlieghere "name": "__TEXT", 70*f40ed1f6SJonas Devlieghere "type": "code", 71*f40ed1f6SJonas Devlieghere "address": 0, 72*f40ed1f6SJonas Devlieghere "size": 0x222, 73*f40ed1f6SJonas Devlieghere } 74*f40ed1f6SJonas Devlieghere ], 75*f40ed1f6SJonas Devlieghere "symbols": [ 76*f40ed1f6SJonas Devlieghere { 77*f40ed1f6SJonas Devlieghere "name": "foo", 78*f40ed1f6SJonas Devlieghere "address": 0x100, 79*f40ed1f6SJonas Devlieghere "size": 0x11, 80*f40ed1f6SJonas Devlieghere } 81*f40ed1f6SJonas Devlieghere ], 82*f40ed1f6SJonas Devlieghere } 83*f40ed1f6SJonas Devlieghere 84*f40ed1f6SJonas Devlieghere json_object_file_c = self.getBuildArtifact("c.json") 85*f40ed1f6SJonas Devlieghere self.emitJSON(data, json_object_file_c) 86*f40ed1f6SJonas Devlieghere 87*f40ed1f6SJonas Devlieghere module = target.AddModule(self.toModuleSpec(json_object_file_c)) 88*f40ed1f6SJonas Devlieghere self.assertTrue(module.IsValid()) 89*f40ed1f6SJonas Devlieghere 90*f40ed1f6SJonas Devlieghere section = module.GetSectionAtIndex(0) 91*f40ed1f6SJonas Devlieghere self.assertTrue(section.IsValid()) 92*f40ed1f6SJonas Devlieghere self.assertEqual(section.GetName(), "__TEXT") 93*f40ed1f6SJonas Devlieghere self.assertEqual(section.file_addr, 0x0) 94*f40ed1f6SJonas Devlieghere self.assertEqual(section.size, 0x222) 95*f40ed1f6SJonas Devlieghere 96*f40ed1f6SJonas Devlieghere symbol = module.FindSymbol("foo") 97*f40ed1f6SJonas Devlieghere self.assertTrue(symbol.IsValid()) 98*f40ed1f6SJonas Devlieghere self.assertEqual(symbol.addr.GetFileAddress(), 0x100) 99*f40ed1f6SJonas Devlieghere self.assertEqual(symbol.GetSize(), 0x11) 100*f40ed1f6SJonas Devlieghere 101*f40ed1f6SJonas Devlieghere error = target.SetSectionLoadAddress(section, 0x1000) 102*f40ed1f6SJonas Devlieghere self.assertSuccess(error) 103*f40ed1f6SJonas Devlieghere self.assertEqual(symbol.addr.GetLoadAddress(target), 0x1100) 104