summaryrefslogtreecommitdiff
path: root/lldb/test/API/functionalities/json/object-file/TestObjectFileJSON.py
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@fb.com>2025-03-04 16:19:20 -0800
committerGitHub <noreply@github.com>2025-03-04 16:19:20 -0800
commit27901cec0e76d2cbf648b3b63d5b2fec1d46bb9c (patch)
treefac7bbf5ca4c6cce688053a7643e3f62181ee06c /lldb/test/API/functionalities/json/object-file/TestObjectFileJSON.py
parente697c99b63224069daa3814f536a69fecab8cd4e (diff)
Add subsection and permissions support to ObjectFileJSON. (#129801)
This patch adds the ability to create subsections in a section and allows permissions to be specified.
Diffstat (limited to 'lldb/test/API/functionalities/json/object-file/TestObjectFileJSON.py')
-rw-r--r--lldb/test/API/functionalities/json/object-file/TestObjectFileJSON.py66
1 files changed, 53 insertions, 13 deletions
diff --git a/lldb/test/API/functionalities/json/object-file/TestObjectFileJSON.py b/lldb/test/API/functionalities/json/object-file/TestObjectFileJSON.py
index eee0144ad570..510788b43d0d 100644
--- a/lldb/test/API/functionalities/json/object-file/TestObjectFileJSON.py
+++ b/lldb/test/API/functionalities/json/object-file/TestObjectFileJSON.py
@@ -75,16 +75,33 @@ class TestObjectFileJSON(TestBase):
"sections": [
{
"name": "__TEXT",
- "type": "code",
+ "type": "container",
"address": TEXT_file_addr,
"size": TEXT_size,
+ "read": True,
+ "write": False,
+ "execute": True,
+ "subsections": [
+ {
+ "name": "__text",
+ "type": "code",
+ "address": TEXT_file_addr,
+ "size": TEXT_size,
+ "read": True,
+ "write": False,
+ "execute": True,
+ }
+ ],
},
{
"name": "__DATA",
- "type": "code",
+ "type": "data",
"address": DATA_file_addr,
"size": DATA_size,
- }
+ "read": True,
+ "write": True,
+ "execute": False,
+ },
],
"symbols": [
{
@@ -108,17 +125,40 @@ class TestObjectFileJSON(TestBase):
module = target.AddModule(self.toModuleSpec(json_object_file_c))
self.assertTrue(module.IsValid())
- text_section = module.GetSectionAtIndex(0)
+ TEXT_section = module.GetSectionAtIndex(0)
+ self.assertTrue(TEXT_section.IsValid())
+ self.assertEqual(TEXT_section.GetName(), "__TEXT")
+ self.assertEqual(TEXT_section.file_addr, TEXT_file_addr)
+ self.assertEqual(TEXT_section.size, TEXT_size)
+ self.assertEqual(TEXT_section.GetSectionType(), lldb.eSectionTypeContainer)
+ self.assertEqual(TEXT_section.GetNumSubSections(), 1)
+ text_permissions = TEXT_section.GetPermissions()
+ self.assertTrue((text_permissions & lldb.ePermissionsReadable) != 0)
+ self.assertFalse((text_permissions & lldb.ePermissionsWritable) != 0)
+ self.assertTrue((text_permissions & lldb.ePermissionsExecutable) != 0)
+
+ text_section = TEXT_section.GetSubSectionAtIndex(0)
self.assertTrue(text_section.IsValid())
- self.assertEqual(text_section.GetName(), "__TEXT")
+ self.assertEqual(text_section.GetName(), "__text")
self.assertEqual(text_section.file_addr, TEXT_file_addr)
self.assertEqual(text_section.size, TEXT_size)
-
- data_section = module.GetSectionAtIndex(1)
- self.assertTrue(data_section.IsValid())
- self.assertEqual(data_section.GetName(), "__DATA")
- self.assertEqual(data_section.file_addr, DATA_file_addr)
- self.assertEqual(data_section.size, DATA_size)
+ self.assertEqual(text_section.GetSectionType(), lldb.eSectionTypeCode)
+ self.assertEqual(text_section.GetNumSubSections(), 0)
+ text_permissions = text_section.GetPermissions()
+ self.assertTrue((text_permissions & lldb.ePermissionsReadable) != 0)
+ self.assertFalse((text_permissions & lldb.ePermissionsWritable) != 0)
+ self.assertTrue((text_permissions & lldb.ePermissionsExecutable) != 0)
+
+ DATA_section = module.GetSectionAtIndex(1)
+ self.assertTrue(DATA_section.IsValid())
+ self.assertEqual(DATA_section.GetName(), "__DATA")
+ self.assertEqual(DATA_section.file_addr, DATA_file_addr)
+ self.assertEqual(DATA_section.size, DATA_size)
+ self.assertEqual(DATA_section.GetSectionType(), lldb.eSectionTypeData)
+ data_permissions = DATA_section.GetPermissions()
+ self.assertTrue((data_permissions & lldb.ePermissionsReadable) != 0)
+ self.assertTrue((data_permissions & lldb.ePermissionsWritable) != 0)
+ self.assertFalse((data_permissions & lldb.ePermissionsExecutable) != 0)
foo_symbol = module.FindSymbol("foo")
self.assertTrue(foo_symbol.IsValid())
@@ -130,9 +170,9 @@ class TestObjectFileJSON(TestBase):
self.assertEqual(bar_symbol.addr.GetFileAddress(), bar_file_addr)
self.assertEqual(bar_symbol.GetSize(), bar_size)
- error = target.SetSectionLoadAddress(text_section, TEXT_file_addr + slide)
+ error = target.SetSectionLoadAddress(TEXT_section, TEXT_file_addr + slide)
self.assertSuccess(error)
- error = target.SetSectionLoadAddress(data_section, DATA_file_addr + slide)
+ error = target.SetSectionLoadAddress(DATA_section, DATA_file_addr + slide)
self.assertSuccess(error)
self.assertEqual(foo_symbol.addr.GetLoadAddress(target), foo_file_addr + slide)
self.assertEqual(bar_symbol.addr.GetLoadAddress(target), bar_file_addr + slide)