https://github.com/adrian-prantl created https://github.com/llvm/llvm-project/pull/119934
None >From 373a93b56b415003bff8ca0ae9de85c820c87036 Mon Sep 17 00:00:00 2001 From: Adrian Prantl <apra...@apple.com> Date: Fri, 13 Dec 2024 15:00:19 -0800 Subject: [PATCH] [lldb] Support zero-padding in formatter sections --- .../DataFormatters/FormatterSection.cpp | 7 ++++ .../TestEmbeddedTypeSummary.py | 1 + .../data-formatter/embedded-summary/main.c | 37 +++++++++++++++---- 3 files changed, 37 insertions(+), 8 deletions(-) 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; } _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits