From cedd9de64f183e4ce088654f8a9ed978cbdc8962 Mon Sep 17 00:00:00 2001 From: mlugg Date: Thu, 11 Sep 2025 20:07:55 +0100 Subject: std.debug.Dwarf: fix names of inlined functions --- lib/std/debug/Dwarf.zig | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'lib/std/debug/Dwarf.zig') diff --git a/lib/std/debug/Dwarf.zig b/lib/std/debug/Dwarf.zig index dfe9bd8dd3..9a70746b0a 100644 --- a/lib/std/debug/Dwarf.zig +++ b/lib/std/debug/Dwarf.zig @@ -348,7 +348,13 @@ pub fn deinit(di: *Dwarf, gpa: Allocator) void { } pub fn getSymbolName(di: *Dwarf, address: u64) ?[]const u8 { - for (di.func_list.items) |*func| { + // Iterate the function list backwards so that we see child DIEs before their parents. This is + // important because `DW_TAG_inlined_subroutine` DIEs will have a range which is a sub-range of + // their caller, and we want to return the callee's name, not the caller's. + var i: usize = di.func_list.items.len; + while (i > 0) { + i -= 1; + const func = &di.func_list.items[i]; if (func.pc_range) |range| { if (address >= range.start and address < range.end) { return func.name; -- cgit v1.2.3