[Lldb-commits] [PATCH] D154037: Recognize BSS-only DATA segments as sections that need to be slid/loaded at addresses

Jason Molenda via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Wed Jun 28 19:11:48 PDT 2023


jasonmolenda created this revision.
jasonmolenda added a reviewer: JDevlieghere.
jasonmolenda added a project: LLDB.
Herald added a project: All.
jasonmolenda requested review of this revision.
Herald added a subscriber: lldb-commits.

ObjectFileMachO::SetLoadAddress() takes a slide or base load address and applies the correct address difference to each section in the Target.  It only makes these changes to "loadable" sections and one of the heuristics incorrectly disqualified a DATA segment that has no on-disk content, e.g. a BSS-only DATA segment.  A DATA segment is allowed to have no file size; this is a small patch to SectionIsLoadable to recognize that.  And add a quick test case.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D154037

Files:
  lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
  lldb/test/API/macosx/bss-only-data-section-sliding/Makefile
  lldb/test/API/macosx/bss-only-data-section-sliding/TestBSSOnlyDataSectionSliding.py
  lldb/test/API/macosx/bss-only-data-section-sliding/main.c


Index: lldb/test/API/macosx/bss-only-data-section-sliding/main.c
===================================================================
--- /dev/null
+++ lldb/test/API/macosx/bss-only-data-section-sliding/main.c
@@ -0,0 +1,2 @@
+int glob = 0;
+int main() { return glob; }
Index: lldb/test/API/macosx/bss-only-data-section-sliding/TestBSSOnlyDataSectionSliding.py
===================================================================
--- /dev/null
+++ lldb/test/API/macosx/bss-only-data-section-sliding/TestBSSOnlyDataSectionSliding.py
@@ -0,0 +1,27 @@
+"""Test that we a BSS-data only DATA segment is slid with other segments."""
+
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class TestBSSOnlyDataSectionSliding(TestBase):
+    @skipUnlessDarwin
+    def test_with_python_api(self):
+        """Test that we get thread names when interrupting a process."""
+        self.build()
+        exe = self.getBuildArtifact("a.out")
+
+        target = self.dbg.CreateTarget(exe, "", "", False, lldb.SBError())
+        self.assertTrue(target, VALID_TARGET)
+
+        module = target.modules[0]
+        self.assertTrue(module.IsValid())
+        data_sect = module.section["__DATA"]
+        self.assertTrue(data_sect.IsValid())
+
+        target.SetModuleLoadAddress(module, 0x170000000)
+        self.assertEqual(
+            data_sect.GetFileAddress() + 0x170000000, data_sect.GetLoadAddress(target)
+        )
Index: lldb/test/API/macosx/bss-only-data-section-sliding/Makefile
===================================================================
--- /dev/null
+++ lldb/test/API/macosx/bss-only-data-section-sliding/Makefile
@@ -0,0 +1,3 @@
+C_SOURCES := main.c
+
+include Makefile.rules
Index: lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
===================================================================
--- lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -6048,7 +6048,8 @@
   if (!section)
     return false;
   const bool is_dsym = (m_header.filetype == MH_DSYM);
-  if (section->GetFileSize() == 0 && !is_dsym)
+  if (section->GetFileSize() == 0 && !is_dsym &&
+      section->GetName() != GetSegmentNameDATA())
     return false;
   if (section->IsThreadSpecific())
     return false;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D154037.535602.patch
Type: text/x-patch
Size: 2365 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20230629/06b7d03c/attachment.bin>


More information about the lldb-commits mailing list