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; } _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits