- Separate the two test and only have TestSymbolFileJSON rely on strip. - Use different file names to make sure LLDB reloads the module. This should address all the post commit review from D148062.
104 lines
3.0 KiB
Python
104 lines
3.0 KiB
Python
import lldb
|
|
from lldbsuite.test.decorators import *
|
|
from lldbsuite.test.lldbtest import *
|
|
from lldbsuite.test import lldbutil
|
|
|
|
import json
|
|
import uuid
|
|
import os
|
|
import shutil
|
|
import time
|
|
|
|
|
|
class TestObjectFileJSON(TestBase):
|
|
TRIPLE = "arm64-apple-macosx13.0.0"
|
|
|
|
def setUp(self):
|
|
TestBase.setUp(self)
|
|
self.source = "main.c"
|
|
|
|
def emitJSON(self, data, path):
|
|
json_object = json.dumps(data, indent=4)
|
|
with open(path, "w") as outfile:
|
|
outfile.write(json_object)
|
|
|
|
def toModuleSpec(self, path):
|
|
module_spec = lldb.SBModuleSpec()
|
|
module_spec.SetFileSpec(lldb.SBFileSpec(path))
|
|
return module_spec
|
|
|
|
@no_debug_info_test
|
|
def test_target(self):
|
|
triple = "arm64-apple-macosx13.0.0"
|
|
data = {
|
|
"triple": triple,
|
|
"uuid": str(uuid.uuid4()),
|
|
"type": "executable",
|
|
}
|
|
|
|
json_object_file = self.getBuildArtifact("a.json")
|
|
self.emitJSON(data, json_object_file)
|
|
|
|
target = self.dbg.CreateTarget(json_object_file)
|
|
self.assertTrue(target.IsValid())
|
|
self.assertEqual(target.GetTriple(), triple)
|
|
|
|
@no_debug_info_test
|
|
def test_module(self):
|
|
self.build()
|
|
exe = self.getBuildArtifact("a.out")
|
|
target = self.dbg.CreateTarget(exe)
|
|
|
|
data = {
|
|
"triple": target.GetTriple(),
|
|
"uuid": str(uuid.uuid4()),
|
|
}
|
|
|
|
json_object_file_b = self.getBuildArtifact("b.json")
|
|
self.emitJSON(data, json_object_file_b)
|
|
|
|
module = target.AddModule(self.toModuleSpec(json_object_file_b))
|
|
self.assertFalse(module.IsValid())
|
|
|
|
data = {
|
|
"triple": target.GetTriple(),
|
|
"uuid": str(uuid.uuid4()),
|
|
"type": "sharedlibrary",
|
|
"sections": [
|
|
{
|
|
"name": "__TEXT",
|
|
"type": "code",
|
|
"address": 0,
|
|
"size": 0x222,
|
|
}
|
|
],
|
|
"symbols": [
|
|
{
|
|
"name": "foo",
|
|
"address": 0x100,
|
|
"size": 0x11,
|
|
}
|
|
],
|
|
}
|
|
|
|
json_object_file_c = self.getBuildArtifact("c.json")
|
|
self.emitJSON(data, json_object_file_c)
|
|
|
|
module = target.AddModule(self.toModuleSpec(json_object_file_c))
|
|
self.assertTrue(module.IsValid())
|
|
|
|
section = module.GetSectionAtIndex(0)
|
|
self.assertTrue(section.IsValid())
|
|
self.assertEqual(section.GetName(), "__TEXT")
|
|
self.assertEqual(section.file_addr, 0x0)
|
|
self.assertEqual(section.size, 0x222)
|
|
|
|
symbol = module.FindSymbol("foo")
|
|
self.assertTrue(symbol.IsValid())
|
|
self.assertEqual(symbol.addr.GetFileAddress(), 0x100)
|
|
self.assertEqual(symbol.GetSize(), 0x11)
|
|
|
|
error = target.SetSectionLoadAddress(section, 0x1000)
|
|
self.assertSuccess(error)
|
|
self.assertEqual(symbol.addr.GetLoadAddress(target), 0x1100)
|