[Lldb-commits] [lldb] f22cff7 - [lldb] Support zero-padding in formatter sections (#119934)

via lldb-commits lldb-commits at lists.llvm.org
Fri Dec 13 16:09:34 PST 2024


Author: Adrian Prantl
Date: 2024-12-13T16:09:31-08:00
New Revision: f22cff7675f7f64aa52204f4426f5047cc75fbb9

URL: https://github.com/llvm/llvm-project/commit/f22cff7675f7f64aa52204f4426f5047cc75fbb9
DIFF: https://github.com/llvm/llvm-project/commit/f22cff7675f7f64aa52204f4426f5047cc75fbb9.diff

LOG: [lldb] Support zero-padding in formatter sections (#119934)

Added: 
    

Modified: 
    lldb/source/DataFormatters/FormatterSection.cpp
    lldb/test/API/functionalities/data-formatter/embedded-summary/TestEmbeddedTypeSummary.py
    lldb/test/API/functionalities/data-formatter/embedded-summary/main.c

Removed: 
    


################################################################################
diff  --git a/lldb/source/DataFormatters/FormatterSection.cpp b/lldb/source/DataFormatters/FormatterSection.cpp
index f70f41fdeb736f..1de633f4998e05 100644
--- a/lldb/source/DataFormatters/FormatterSection.cpp
+++ b/lldb/source/DataFormatters/FormatterSection.cpp
@@ -50,6 +50,13 @@ static void ForEachFormatterInModule(
   uint8_t addr_size = section.getAddressSize();
   llvm::DataExtractor::Cursor cursor(0);
   while (cursor && cursor.tell() < section_size) {
+    while (cursor && cursor.tell() < section_size) {
+      // Skip over 0 padding.
+      if (section.getU8(cursor) == 0)
+        continue;
+      cursor.seek(cursor.tell() - 1);
+      break;
+    }
     uint64_t version = section.getULEB128(cursor);
     uint64_t record_size = section.getULEB128(cursor);
     if (version == 1) {

diff  --git a/lldb/test/API/functionalities/data-formatter/embedded-summary/TestEmbeddedTypeSummary.py b/lldb/test/API/functionalities/data-formatter/embedded-summary/TestEmbeddedTypeSummary.py
index b8ce7d9f76eb9e..21b21ea760e761 100644
--- a/lldb/test/API/functionalities/data-formatter/embedded-summary/TestEmbeddedTypeSummary.py
+++ b/lldb/test/API/functionalities/data-formatter/embedded-summary/TestEmbeddedTypeSummary.py
@@ -10,3 +10,4 @@ def test(self):
         self.build()
         lldbutil.run_to_source_breakpoint(self, "break here", lldb.SBFileSpec("main.c"))
         self.expect("v player", substrs=['"Dirk" (41)'])
+        self.expect("v layer", substrs=['"crust" (3)'])

diff  --git a/lldb/test/API/functionalities/data-formatter/embedded-summary/main.c b/lldb/test/API/functionalities/data-formatter/embedded-summary/main.c
index 9ddd64246f726c..3273c1e38a2ae1 100644
--- a/lldb/test/API/functionalities/data-formatter/embedded-summary/main.c
+++ b/lldb/test/API/functionalities/data-formatter/embedded-summary/main.c
@@ -1,22 +1,43 @@
-#include <stdio.h>
+void puts(const char *);
+
+#define LLDBSUMMARY __attribute__((section("__TEXT,__lldbsummaries"), used))
 
 struct Player {
   char *name;
   int number;
 };
 
-__attribute__((used, section("__DATA_CONST,__lldbsummaries"))) unsigned char
-    _Player_type_summary[] = "\x01"     // version
-                             "\x25"     // record size
-                             "\x07"     // type name size
-                             "Player\0" // type name
-                             "\x1c"     // summary string size
-                             "${var.name} (${var.number})"; // summary string
+LLDBSUMMARY unsigned char _Player_type_summary[] =
+    "\x01"                         // version
+    "\x25"                         // record size
+    "\x07"                         // type name size
+    "Player\0"                     // type name
+    "\x1c"                         // summary string size
+    "${var.name} (${var.number})"; // summary string
+
+struct Layer {
+  char *name;
+  int number;
+};
+
+LLDBSUMMARY unsigned char _padding[] = "\x00\x00";
+
+// Near copy of the record for `Player`, using a regex type name (`^Layer`).
+LLDBSUMMARY unsigned char _Layer_type_summary[] =
+    "\x01"                         // version
+    "\x25"                         // record size
+    "\x07"                         // type name size
+    "^Layer\0"                     // type name
+    "\x1c"                         // summary string size
+    "${var.name} (${var.number})"; // summary string
 
 int main() {
   struct Player player;
   player.name = "Dirk";
   player.number = 41;
+  struct Layer layer;
+  layer.name = "crust";
+  layer.number = 3;
   puts("break here");
   return 0;
 }


        


More information about the lldb-commits mailing list