https://github.com/DavidSpickett updated https://github.com/llvm/llvm-project/pull/217659
>From dc031833811341d387277a9f275e9489ab15fbc5 Mon Sep 17 00:00:00 2001 From: David Spickett <[email protected]> Date: Thu, 20 Aug 2026 15:09:55 +0000 Subject: [PATCH 1/2] [lldb][test] Fix 64-bit register assumption in wrapped frame test Added in #216840 / b0e9c530b5f0206de4a4f59f6728dbd5f10a5ca2. This is failing on our downstream Arm 32-bit Linux bot: ``` * thread #1, name = 'a.out', stop reason = breakpoint 1.1 * frame #0: 0x013d0630 a.out`compute(a=<unavailable>, b=<unavailable>) at main.c:3:10 [synthetic] frame #1: 0x013d065c a.out`main at main.c:6:25 frame #2: 0xea2b739a libc.so.6` frame #3: 0xea2b743e libc.so.6`__libc_start_main + 94 frame #4: 0x013d0538 a.out`_start + 40 Expecting sub string: "compute(a=3, b=4)" (was not found) ``` I have not had time to reproduce it locally, but I did notice that the test packs a struct of registers using `Q` (8 bytes) regardless of register size. https://docs.python.org/3/library/struct.html#format-characters Which probably works because most targets have 64-bit GPRs and any non-64-bit registers don't take part in debug info lookups. I think we can fix 32-bit by accounting for the actual register sizes. I tried this on AArch64 Linux and it worked fine. --- .../frame_provider.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/lldb/test/API/functionalities/scripted_frame_provider/wrapped_frame_register_context/frame_provider.py b/lldb/test/API/functionalities/scripted_frame_provider/wrapped_frame_register_context/frame_provider.py index 94be1b23d2552..8628a61ceb265 100644 --- a/lldb/test/API/functionalities/scripted_frame_provider/wrapped_frame_register_context/frame_provider.py +++ b/lldb/test/API/functionalities/scripted_frame_provider/wrapped_frame_register_context/frame_provider.py @@ -45,7 +45,10 @@ def get_register_context(self): for reg_set in self._frame.registers: if "general purpose" in reg_set.name.lower(): for reg in reg_set: - regs[reg.name] = int(reg.value, 16) if reg.value else 0 + regs[reg.name] = ( + int(reg.value, 16) if reg.value else 0, + reg.GetByteSize(), + ) break if not regs: return None @@ -60,7 +63,16 @@ def read(entry): return regs[entry["name"]] return regs.get(entry.get("alt-name", ""), 0) - return struct.pack(f"{len(info)}Q", *(read(r) for r in info)) + struct_format = "" + struct_data = [] + sizes = {1: "B", 2: "H", 4: "I", 8: "Q"} + + for reg in info: + value, size = read(reg) + struct_format += sizes[size] + struct_data.append(value) + + return struct.pack(struct_format, *struct_data) class WrapVariablesProvider(ScriptedFrameProvider): >From c0aeb89ebfcb8447ef84079997401ea89a977c3c Mon Sep 17 00:00:00 2001 From: David Spickett <[email protected]> Date: Fri, 21 Aug 2026 10:20:39 +0000 Subject: [PATCH 2/2] try to debug windows failure --- .../wrapped_frame_register_context/frame_provider.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lldb/test/API/functionalities/scripted_frame_provider/wrapped_frame_register_context/frame_provider.py b/lldb/test/API/functionalities/scripted_frame_provider/wrapped_frame_register_context/frame_provider.py index 8628a61ceb265..ce2e3b6dd10a2 100644 --- a/lldb/test/API/functionalities/scripted_frame_provider/wrapped_frame_register_context/frame_provider.py +++ b/lldb/test/API/functionalities/scripted_frame_provider/wrapped_frame_register_context/frame_provider.py @@ -45,6 +45,7 @@ def get_register_context(self): for reg_set in self._frame.registers: if "general purpose" in reg_set.name.lower(): for reg in reg_set: + print(f"Getting info for {reg.name}, byte size {reg.GetByteSize()}") regs[reg.name] = ( int(reg.value, 16) if reg.value else 0, reg.GetByteSize(), @@ -54,6 +55,7 @@ def get_register_context(self): return None info = self.get_register_info()["registers"] + from pprint import pprint; pprint(info) def read(entry): # A register set reports a register under the name LLDB displays, @@ -72,6 +74,9 @@ def read(entry): struct_format += sizes[size] struct_data.append(value) + print("struct_format:", struct_format) + print("struct_data:", struct_data) + print("len(struct_data):", len(struct_data)) return struct.pack(struct_format, *struct_data) _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
