[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