authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-08-28 17:39:35-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2024-08-28 17:39:35-04:00
log6a21875ddbe0f509122fbd220f1abb015cc7bac7
tree404542b3644206a3758ef603cc11cebbfc7b3366
parent31fef6f1103ea64a899729adea13b0ab9b66cb46
parent12275cf4b9a1e02e08aef8e1b29e5accb16268f1
signaturebadge-check Signed by PGP key B5690EEEBB952194

Merge pull request #21230 from jacobly0/stack-trace

Dwarf: fix self-hosted stack traces

4 files changed, 542 insertions(+), 87 deletions(-)

ci/x86_64-linux-debug.sh+1-1
......@@ -64,7 +64,7 @@ stage3-debug/bin/zig build \
6464
6565stage3-debug/bin/zig build test docs \
6666 --maxrss 21000000000 \
67 -Dlldb=$HOME/deps/lldb-zig/Debug-70b8227f1/bin/lldb \
67 -Dlldb=$HOME/deps/lldb-zig/Debug-befcd57a8/bin/lldb \
6868 -fqemu \
6969 -fwasmtime \
7070 -Dstatic-llvm \
ci/x86_64-linux-release.sh+1-1
......@@ -64,7 +64,7 @@ stage3-release/bin/zig build \
6464
6565stage3-release/bin/zig build test docs \
6666 --maxrss 21000000000 \
67 -Dlldb=$HOME/deps/lldb-zig/Release-70b8227f1/bin/lldb \
67 -Dlldb=$HOME/deps/lldb-zig/Release-befcd57a8/bin/lldb \
6868 -fqemu \
6969 -fwasmtime \
7070 -Dstatic-llvm \
lib/std/debug/Dwarf.zig+13-14
......@@ -279,10 +279,11 @@ pub const Die = struct {
279279 };
280280 }
281281
282 fn getAttrRef(self: *const Die, id: u64) !u64 {
282 fn getAttrRef(self: *const Die, id: u64, unit_offset: u64, unit_len: u64) !u64 {
283283 const form_value = self.getAttr(id) orelse return error.MissingDebugInfo;
284284 return switch (form_value.*) {
285 .ref => |value| value,
285 .ref => |offset| if (offset < unit_len) unit_offset + offset else bad(),
286 .ref_addr => |addr| addr,
286287 else => bad(),
287288 };
288289 }
......@@ -428,14 +429,14 @@ pub const ExceptionFrameHeader = struct {
428429 };
429430
430431 const fde_entry_header = try EntryHeader.read(&eh_frame_fbr, if (eh_frame_len == null) ma else null, .eh_frame);
431 if (!self.isValidPtr(u8, @intFromPtr(&fde_entry_header.entry_bytes[fde_entry_header.entry_bytes.len - 1]), ma, eh_frame_len)) return bad();
432 if (fde_entry_header.entry_bytes.len > 0 and !self.isValidPtr(u8, @intFromPtr(&fde_entry_header.entry_bytes[fde_entry_header.entry_bytes.len - 1]), ma, eh_frame_len)) return bad();
432433 if (fde_entry_header.type != .fde) return bad();
433434
434435 // CIEs always come before FDEs (the offset is a subtraction), so we can assume this memory is readable
435436 const cie_offset = fde_entry_header.type.fde;
436437 try eh_frame_fbr.seekTo(cie_offset);
437438 const cie_entry_header = try EntryHeader.read(&eh_frame_fbr, if (eh_frame_len == null) ma else null, .eh_frame);
438 if (!self.isValidPtr(u8, @intFromPtr(&cie_entry_header.entry_bytes[cie_entry_header.entry_bytes.len - 1]), ma, eh_frame_len)) return bad();
439 if (cie_entry_header.entry_bytes.len > 0 and !self.isValidPtr(u8, @intFromPtr(&cie_entry_header.entry_bytes[cie_entry_header.entry_bytes.len - 1]), ma, eh_frame_len)) return bad();
439440 if (cie_entry_header.type != .cie) return bad();
440441
441442 cie.* = try CommonInformationEntry.parse(
......@@ -942,13 +943,12 @@ fn scanAllFunctions(di: *Dwarf, allocator: Allocator) ScanError!void {
942943 defer fbr.pos = after_die_offset;
943944
944945 // Follow the DIE it points to and repeat
945 const ref_offset = try this_die_obj.getAttrRef(AT.abstract_origin);
946 if (ref_offset > next_offset) return bad();
947 try fbr.seekTo(this_unit_offset + ref_offset);
946 const ref_offset = try this_die_obj.getAttrRef(AT.abstract_origin, this_unit_offset, next_offset);
947 try fbr.seekTo(ref_offset);
948948 this_die_obj = (try parseDie(
949949 &fbr,
950950 attrs_bufs[2],
951 abbrev_table,
951 abbrev_table, // wrong abbrev table for different cu
952952 unit_header.format,
953953 )) orelse return bad();
954954 } else if (this_die_obj.getAttr(AT.specification)) |_| {
......@@ -956,13 +956,12 @@ fn scanAllFunctions(di: *Dwarf, allocator: Allocator) ScanError!void {
956956 defer fbr.pos = after_die_offset;
957957
958958 // Follow the DIE it points to and repeat
959 const ref_offset = try this_die_obj.getAttrRef(AT.specification);
960 if (ref_offset > next_offset) return bad();
961 try fbr.seekTo(this_unit_offset + ref_offset);
959 const ref_offset = try this_die_obj.getAttrRef(AT.specification, this_unit_offset, next_offset);
960 try fbr.seekTo(ref_offset);
962961 this_die_obj = (try parseDie(
963962 &fbr,
964963 attrs_bufs[2],
965 abbrev_table,
964 abbrev_table, // wrong abbrev table for different cu
966965 unit_header.format,
967966 )) orelse return bad();
968967 } else {
......@@ -1494,7 +1493,7 @@ fn runLineNumberProgram(d: *Dwarf, gpa: Allocator, compile_unit: *CompileUnit) !
14941493 }
14951494 } else {
14961495 const FileEntFmt = struct {
1497 content_type_code: u8,
1496 content_type_code: u16,
14981497 form_code: u16,
14991498 };
15001499 {
......@@ -1539,7 +1538,7 @@ fn runLineNumberProgram(d: *Dwarf, gpa: Allocator, compile_unit: *CompileUnit) !
15391538 if (file_name_entry_format_count > file_ent_fmt_buf.len) return bad();
15401539 for (file_ent_fmt_buf[0..file_name_entry_format_count]) |*ent_fmt| {
15411540 ent_fmt.* = .{
1542 .content_type_code = try fbr.readUleb128(u8),
1541 .content_type_code = try fbr.readUleb128(u16),
15431542 .form_code = try fbr.readUleb128(u16),
15441543 };
15451544 }
test/src/Debugger.zig+527-71
......@@ -667,37 +667,156 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
667667 target,
668668 &.{
669669 .{
670 .path = "main.zig",
670 .path = "root0.zig",
671671 .source =
672 \\const module = @import("module");
672 \\const root0 = @This();
673 \\pub const root1 = @import("root1.zig");
674 \\const mod0 = @import("module");
675 \\const mod1 = mod0.mod1;
676 \\pub fn r0pf(r0pa: u32) void {
677 \\ root0.r0cf(r0pa ^ 1);
678 \\ root0.r0cfi(r0pa ^ 2);
679 \\ root1.r1cf(r0pa ^ 3);
680 \\ root1.r1cfi(r0pa ^ 4);
681 \\ mod0.m0cf(r0pa ^ 5);
682 \\ mod0.m0cfi(r0pa ^ 6);
683 \\ mod1.m1cf(r0pa ^ 7);
684 \\ mod1.m1cfi(r0pa ^ 8);
685 \\}
686 \\pub inline fn r0pfi(r0pai: u32) void {
687 \\ root0.r0cf(r0pai ^ 1);
688 \\ root0.r0cfi(r0pai ^ 2);
689 \\ root1.r1cf(r0pai ^ 3);
690 \\ root1.r1cfi(r0pai ^ 4);
691 \\ mod0.m0cf(r0pai ^ 5);
692 \\ mod0.m0cfi(r0pai ^ 6);
693 \\ mod1.m1cf(r0pai ^ 7);
694 \\ mod1.m1cfi(r0pai ^ 8);
695 \\}
696 \\pub fn r0cf(r0ca: u32) void {
697 \\ _ = r0ca;
698 \\}
699 \\pub inline fn r0cfi(r0cai: u32) void {
700 \\ _ = r0cai;
701 \\}
673702 \\pub fn main() void {
674 \\ fa(12);
675 \\ fb(34);
676 \\ module.fc(56);
677 \\ module.fd(78);
703 \\ root0.r0pf(12);
704 \\ root0.r0pfi(23);
705 \\ root1.r1pf(34);
706 \\ root1.r1pfi(45);
707 \\ mod0.m0pf(56);
708 \\ mod0.m0pfi(67);
709 \\ mod1.m1pf(78);
710 \\ mod1.m1pfi(89);
711 \\}
712 \\
713 ,
714 },
715 .{
716 .path = "root1.zig",
717 .source =
718 \\const root0 = @import("root0.zig");
719 \\const root1 = @This();
720 \\const mod0 = @import("module");
721 \\const mod1 = mod0.mod1;
722 \\pub fn r1pf(r1pa: u32) void {
723 \\ root0.r0cf(r1pa ^ 1);
724 \\ root0.r0cfi(r1pa ^ 2);
725 \\ root1.r1cf(r1pa ^ 3);
726 \\ root1.r1cfi(r1pa ^ 4);
727 \\ mod0.m0cf(r1pa ^ 5);
728 \\ mod0.m0cfi(r1pa ^ 6);
729 \\ mod1.m1cf(r1pa ^ 7);
730 \\ mod1.m1cfi(r1pa ^ 8);
731 \\}
732 \\pub inline fn r1pfi(r1pai: u32) void {
733 \\ root0.r0cf(r1pai ^ 1);
734 \\ root0.r0cfi(r1pai ^ 2);
735 \\ root1.r1cf(r1pai ^ 3);
736 \\ root1.r1cfi(r1pai ^ 4);
737 \\ mod0.m0cf(r1pai ^ 5);
738 \\ mod0.m0cfi(r1pai ^ 6);
739 \\ mod1.m1cf(r1pai ^ 7);
740 \\ mod1.m1cfi(r1pai ^ 8);
678741 \\}
679 \\fn fa(pa: u32) void {
680 \\ const la = ~pa;
681 \\ _ = la;
742 \\pub fn r1cf(r1ca: u32) void {
743 \\ _ = r1ca;
682744 \\}
683 \\inline fn fb(pb: u32) void {
684 \\ const lb = ~pb;
685 \\ _ = lb;
745 \\pub inline fn r1cfi(r1cai: u32) void {
746 \\ _ = r1cai;
686747 \\}
687748 \\
688749 ,
689750 },
690751 .{
691752 .import = "module",
692 .path = "module.zig",
753 .path = "mod0.zig",
693754 .source =
694 \\pub fn fc(pc: u32) void {
695 \\ const lc = ~pc;
696 \\ _ = lc;
755 \\const root0 = @import("root");
756 \\const root1 = root0.root1;
757 \\const mod0 = @This();
758 \\pub const mod1 = @import("mod1.zig");
759 \\pub fn m0pf(m0pa: u32) void {
760 \\ root0.r0cf(m0pa ^ 1);
761 \\ root0.r0cfi(m0pa ^ 2);
762 \\ root1.r1cf(m0pa ^ 3);
763 \\ root1.r1cfi(m0pa ^ 4);
764 \\ mod0.m0cf(m0pa ^ 5);
765 \\ mod0.m0cfi(m0pa ^ 6);
766 \\ mod1.m1cf(m0pa ^ 7);
767 \\ mod1.m1cfi(m0pa ^ 8);
768 \\}
769 \\pub inline fn m0pfi(m0pai: u32) void {
770 \\ root0.r0cf(m0pai ^ 1);
771 \\ root0.r0cfi(m0pai ^ 2);
772 \\ root1.r1cf(m0pai ^ 3);
773 \\ root1.r1cfi(m0pai ^ 4);
774 \\ mod0.m0cf(m0pai ^ 5);
775 \\ mod0.m0cfi(m0pai ^ 6);
776 \\ mod1.m1cf(m0pai ^ 7);
777 \\ mod1.m1cfi(m0pai ^ 8);
697778 \\}
698 \\pub inline fn fd(pd: u32) void {
699 \\ const ld = ~pd;
700 \\ _ = ld;
779 \\pub fn m0cf(m0ca: u32) void {
780 \\ _ = m0ca;
781 \\}
782 \\pub inline fn m0cfi(m0cai: u32) void {
783 \\ _ = m0cai;
784 \\}
785 \\
786 ,
787 },
788 .{
789 .path = "mod1.zig",
790 .source =
791 \\const root0 = @import("root");
792 \\const root1 = root0.root1;
793 \\const mod0 = @import("mod0.zig");
794 \\const mod1 = @This();
795 \\pub fn m1pf(m1pa: u32) void {
796 \\ root0.r0cf(m1pa ^ 1);
797 \\ root0.r0cfi(m1pa ^ 2);
798 \\ root1.r1cf(m1pa ^ 3);
799 \\ root1.r1cfi(m1pa ^ 4);
800 \\ mod0.m0cf(m1pa ^ 5);
801 \\ mod0.m0cfi(m1pa ^ 6);
802 \\ mod1.m1cf(m1pa ^ 7);
803 \\ mod1.m1cfi(m1pa ^ 8);
804 \\}
805 \\pub inline fn m1pfi(m1pai: u32) void {
806 \\ root0.r0cf(m1pai ^ 1);
807 \\ root0.r0cfi(m1pai ^ 2);
808 \\ root1.r1cf(m1pai ^ 3);
809 \\ root1.r1cfi(m1pai ^ 4);
810 \\ mod0.m0cf(m1pai ^ 5);
811 \\ mod0.m0cfi(m1pai ^ 6);
812 \\ mod1.m1cf(m1pai ^ 7);
813 \\ mod1.m1cfi(m1pai ^ 8);
814 \\}
815 \\pub fn m1cf(m1ca: u32) void {
816 \\ _ = m1ca;
817 \\}
818 \\pub inline fn m1cfi(m1cai: u32) void {
819 \\ _ = m1cai;
701820 \\}
702821 \\
703822 ,
......@@ -705,70 +824,407 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
705824 },
706825 \\settings set frame-format 'frame #${frame.index}:{ ${module.file.basename}{\`${function.name-with-args}{${frame.no-debug}${function.pc-offset}}}}{ at ${line.file.basename}:${line.number}{:${line.column}}}{${function.is-optimized} [opt]}{${frame.is-artificial} [artificial]}\n'
707826 \\
708 \\breakpoint set --file main.zig --source-pattern-regexp '_ = la;'
827 \\breakpoint set --file root0.zig --line 26
828 \\breakpoint set --file root0.zig --line 29
829 \\breakpoint set --file root1.zig --line 26
830 \\breakpoint set --file root1.zig --line 29
831 \\breakpoint set --file mod0.zig --line 26
832 \\breakpoint set --file mod0.zig --line 29
833 \\breakpoint set --file mod1.zig --line 26
834 \\breakpoint set --file mod1.zig --line 29
835 \\
709836 \\process launch
710 \\frame variable pa la
711 \\thread backtrace --count 2
712 \\breakpoint delete --force 1
837 \\thread backtrace --count 3
838 \\process continue
839 \\thread backtrace --count 3
840 \\process continue
841 \\thread backtrace --count 3
842 \\process continue
843 \\thread backtrace --count 3
844 \\process continue
845 \\thread backtrace --count 3
846 \\process continue
847 \\thread backtrace --count 3
848 \\process continue
849 \\thread backtrace --count 3
850 \\process continue
851 \\thread backtrace --count 3
713852 \\
714 \\breakpoint set --file main.zig --source-pattern-regexp '_ = lb;'
715853 \\process continue
716 \\frame variable pb lb
717 \\thread backtrace --count 2
718 \\breakpoint delete --force 2
854 \\thread backtrace --count 3
855 \\process continue
856 \\thread backtrace --count 3
857 \\process continue
858 \\thread backtrace --count 3
859 \\process continue
860 \\thread backtrace --count 3
861 \\process continue
862 \\thread backtrace --count 3
863 \\process continue
864 \\thread backtrace --count 3
865 \\process continue
866 \\thread backtrace --count 3
867 \\process continue
868 \\thread backtrace --count 3
869 \\
870 \\process continue
871 \\thread backtrace --count 3
872 \\process continue
873 \\thread backtrace --count 3
874 \\process continue
875 \\thread backtrace --count 3
876 \\process continue
877 \\thread backtrace --count 3
878 \\process continue
879 \\thread backtrace --count 3
880 \\process continue
881 \\thread backtrace --count 3
882 \\process continue
883 \\thread backtrace --count 3
884 \\process continue
885 \\thread backtrace --count 3
719886 \\
720 \\breakpoint set --file module.zig --source-pattern-regexp '_ = lc;'
721887 \\process continue
722 \\frame variable pc lc
723 \\thread backtrace --count 2
724 \\breakpoint delete --force 3
888 \\thread backtrace --count 3
889 \\process continue
890 \\thread backtrace --count 3
891 \\process continue
892 \\thread backtrace --count 3
893 \\process continue
894 \\thread backtrace --count 3
895 \\process continue
896 \\thread backtrace --count 3
897 \\process continue
898 \\thread backtrace --count 3
899 \\process continue
900 \\thread backtrace --count 3
901 \\process continue
902 \\thread backtrace --count 3
903 \\
904 \\process continue
905 \\thread backtrace --count 3
906 \\process continue
907 \\thread backtrace --count 3
908 \\process continue
909 \\thread backtrace --count 3
910 \\process continue
911 \\thread backtrace --count 3
912 \\process continue
913 \\thread backtrace --count 3
914 \\process continue
915 \\thread backtrace --count 3
916 \\process continue
917 \\thread backtrace --count 3
918 \\process continue
919 \\thread backtrace --count 3
920 \\
921 \\process continue
922 \\thread backtrace --count 3
923 \\process continue
924 \\thread backtrace --count 3
925 \\process continue
926 \\thread backtrace --count 3
927 \\process continue
928 \\thread backtrace --count 3
929 \\process continue
930 \\thread backtrace --count 3
931 \\process continue
932 \\thread backtrace --count 3
933 \\process continue
934 \\thread backtrace --count 3
935 \\process continue
936 \\thread backtrace --count 3
937 \\
938 \\process continue
939 \\thread backtrace --count 3
940 \\process continue
941 \\thread backtrace --count 3
942 \\process continue
943 \\thread backtrace --count 3
944 \\process continue
945 \\thread backtrace --count 3
946 \\process continue
947 \\thread backtrace --count 3
948 \\process continue
949 \\thread backtrace --count 3
950 \\process continue
951 \\thread backtrace --count 3
952 \\process continue
953 \\thread backtrace --count 3
725954 \\
726 \\breakpoint set --file module.zig --line 7
727955 \\process continue
728 \\frame variable pd ld
729 \\thread backtrace --count 2
730 \\breakpoint delete --force 4
956 \\thread backtrace --count 3
957 \\process continue
958 \\thread backtrace --count 3
959 \\process continue
960 \\thread backtrace --count 3
961 \\process continue
962 \\thread backtrace --count 3
963 \\process continue
964 \\thread backtrace --count 3
965 \\process continue
966 \\thread backtrace --count 3
967 \\process continue
968 \\thread backtrace --count 3
969 \\process continue
970 \\thread backtrace --count 3
731971 ,
732972 &.{
733 \\(lldb) frame variable pa la
734 \\(u32) pa = 12
735 \\(u32) la = 4294967283
736 \\(lldb) thread backtrace --count 2
737 \\* thread #1, name = 'inline_call', stop reason = breakpoint 1.1
738 \\ * frame #0: inline_call`main.fa(pa=12) at main.zig:10:5
739 \\ frame #1: inline_call`main.main at main.zig:3:7
740 \\(lldb) breakpoint delete --force 1
741 \\1 breakpoints deleted; 0 breakpoint locations disabled.
973 \\ * frame #0: inline_call`root0.r0cf(r0ca=13) at root0.zig:26:5
974 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:6:15
975 \\ frame #2: inline_call`root0.main at root0.zig:32:15
742976 ,
743 \\(lldb) frame variable pb lb
744 \\(u32) pb = 34
745 \\(u32) lb = 4294967261
746 \\(lldb) thread backtrace --count 2
747 \\* thread #1, name = 'inline_call', stop reason = breakpoint 2.1
748 \\ * frame #0: inline_call`main.main [inlined] fb(pb=34) at main.zig:14:5
749 \\ frame #1: inline_call`main.main at main.zig:4:7
750 \\(lldb) breakpoint delete --force 2
751 \\1 breakpoints deleted; 0 breakpoint locations disabled.
977 \\ * frame #0: inline_call`root0.r0pf [inlined] r0cfi(r0cai=14) at root0.zig:29:5
978 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:7:16
979 \\ frame #2: inline_call`root0.main at root0.zig:32:15
752980 ,
753 \\(lldb) frame variable pc lc
754 \\(u32) pc = 56
755 \\(u32) lc = 4294967239
756 \\(lldb) thread backtrace --count 2
757 \\* thread #1, name = 'inline_call', stop reason = breakpoint 3.1
758 \\ * frame #0: inline_call`module.fc(pc=56) at module.zig:3:5
759 \\ frame #1: inline_call`main.main at main.zig:5:14
760 \\(lldb) breakpoint delete --force 3
761 \\1 breakpoints deleted; 0 breakpoint locations disabled.
981 \\ * frame #0: inline_call`root1.r1cf(r1ca=15) at root1.zig:26:5
982 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:8:15
983 \\ frame #2: inline_call`root0.main at root0.zig:32:15
762984 ,
763 \\(lldb) frame variable pd ld
764 \\(u32) pd = 78
765 \\(u32) ld = 4294967217
766 \\(lldb) thread backtrace --count 2
767 \\* thread #1, name = 'inline_call', stop reason = breakpoint 4.1
768 \\ * frame #0: inline_call`main.main [inlined] fd(pd=78) at module.zig:7:5
769 \\ frame #1: inline_call`main.main at main.zig:6:14
770 \\(lldb) breakpoint delete --force 4
771 \\1 breakpoints deleted; 0 breakpoint locations disabled.
985 \\ * frame #0: inline_call`root0.r0pf [inlined] r1cfi(r1cai=8) at root1.zig:29:5
986 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:9:16
987 \\ frame #2: inline_call`root0.main at root0.zig:32:15
988 ,
989 \\ * frame #0: inline_call`mod0.m0cf(m0ca=9) at mod0.zig:26:5
990 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:10:14
991 \\ frame #2: inline_call`root0.main at root0.zig:32:15
992 ,
993 \\ * frame #0: inline_call`root0.r0pf [inlined] m0cfi(m0cai=10) at mod0.zig:29:5
994 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:11:15
995 \\ frame #2: inline_call`root0.main at root0.zig:32:15
996 ,
997 \\ * frame #0: inline_call`mod1.m1cf(m1ca=11) at mod1.zig:26:5
998 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:12:14
999 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1000 ,
1001 \\ * frame #0: inline_call`root0.r0pf [inlined] m1cfi(m1cai=4) at mod1.zig:29:5
1002 \\ frame #1: inline_call`root0.r0pf(r0pa=12) at root0.zig:13:15
1003 \\ frame #2: inline_call`root0.main at root0.zig:32:15
1004 ,
1005 \\ * frame #0: inline_call`root0.r0cf(r0ca=22) at root0.zig:26:5
1006 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:16:15
1007 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1008 ,
1009 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=21) at root0.zig:29:5
1010 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:17:16
1011 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1012 ,
1013 \\ * frame #0: inline_call`root1.r1cf(r1ca=20) at root1.zig:26:5
1014 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:18:15
1015 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1016 ,
1017 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=19) at root1.zig:29:5
1018 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:19:16
1019 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1020 ,
1021 \\ * frame #0: inline_call`mod0.m0cf(m0ca=18) at mod0.zig:26:5
1022 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:20:14
1023 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1024 ,
1025 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=17) at mod0.zig:29:5
1026 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:21:15
1027 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1028 ,
1029 \\ * frame #0: inline_call`mod1.m1cf(m1ca=16) at mod1.zig:26:5
1030 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:22:14
1031 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1032 ,
1033 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=31) at mod1.zig:29:5
1034 \\ frame #1: inline_call`root0.main [inlined] r0pfi(r0pai=23) at root0.zig:23:15
1035 \\ frame #2: inline_call`root0.main at root0.zig:33:16
1036 ,
1037 \\ * frame #0: inline_call`root0.r0cf(r0ca=35) at root0.zig:26:5
1038 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:6:15
1039 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1040 ,
1041 \\ * frame #0: inline_call`root1.r1pf [inlined] r0cfi(r0cai=32) at root0.zig:29:5
1042 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:7:16
1043 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1044 ,
1045 \\ * frame #0: inline_call`root1.r1cf(r1ca=33) at root1.zig:26:5
1046 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:8:15
1047 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1048 ,
1049 \\ * frame #0: inline_call`root1.r1pf [inlined] r1cfi(r1cai=38) at root1.zig:29:5
1050 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:9:16
1051 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1052 ,
1053 \\ * frame #0: inline_call`mod0.m0cf(m0ca=39) at mod0.zig:26:5
1054 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:10:14
1055 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1056 ,
1057 \\ * frame #0: inline_call`root1.r1pf [inlined] m0cfi(m0cai=36) at mod0.zig:29:5
1058 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:11:15
1059 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1060 ,
1061 \\ * frame #0: inline_call`mod1.m1cf(m1ca=37) at mod1.zig:26:5
1062 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:12:14
1063 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1064 ,
1065 \\ * frame #0: inline_call`root1.r1pf [inlined] m1cfi(m1cai=42) at mod1.zig:29:5
1066 \\ frame #1: inline_call`root1.r1pf(r1pa=34) at root1.zig:13:15
1067 \\ frame #2: inline_call`root0.main at root0.zig:34:15
1068 ,
1069 \\ * frame #0: inline_call`root0.r0cf(r0ca=44) at root0.zig:26:5
1070 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:16:15
1071 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1072 ,
1073 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=47) at root0.zig:29:5
1074 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:17:16
1075 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1076 ,
1077 \\ * frame #0: inline_call`root1.r1cf(r1ca=46) at root1.zig:26:5
1078 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:18:15
1079 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1080 ,
1081 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=41) at root1.zig:29:5
1082 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:19:16
1083 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1084 ,
1085 \\ * frame #0: inline_call`mod0.m0cf(m0ca=40) at mod0.zig:26:5
1086 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:20:14
1087 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1088 ,
1089 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=43) at mod0.zig:29:5
1090 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:21:15
1091 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1092 ,
1093 \\ * frame #0: inline_call`mod1.m1cf(m1ca=42) at mod1.zig:26:5
1094 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:22:14
1095 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1096 ,
1097 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=37) at mod1.zig:29:5
1098 \\ frame #1: inline_call`root0.main [inlined] r1pfi(r1pai=45) at root1.zig:23:15
1099 \\ frame #2: inline_call`root0.main at root0.zig:35:16
1100 ,
1101 \\ * frame #0: inline_call`root0.r0cf(r0ca=57) at root0.zig:26:5
1102 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:6:15
1103 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1104 ,
1105 \\ * frame #0: inline_call`mod0.m0pf [inlined] r0cfi(r0cai=58) at root0.zig:29:5
1106 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:7:16
1107 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1108 ,
1109 \\ * frame #0: inline_call`root1.r1cf(r1ca=59) at root1.zig:26:5
1110 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:8:15
1111 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1112 ,
1113 \\ * frame #0: inline_call`mod0.m0pf [inlined] r1cfi(r1cai=60) at root1.zig:29:5
1114 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:9:16
1115 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1116 ,
1117 \\ * frame #0: inline_call`mod0.m0cf(m0ca=61) at mod0.zig:26:5
1118 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:10:14
1119 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1120 ,
1121 \\ * frame #0: inline_call`mod0.m0pf [inlined] m0cfi(m0cai=62) at mod0.zig:29:5
1122 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:11:15
1123 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1124 ,
1125 \\ * frame #0: inline_call`mod1.m1cf(m1ca=63) at mod1.zig:26:5
1126 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:12:14
1127 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1128 ,
1129 \\ * frame #0: inline_call`mod0.m0pf [inlined] m1cfi(m1cai=48) at mod1.zig:29:5
1130 \\ frame #1: inline_call`mod0.m0pf(m0pa=56) at mod0.zig:13:15
1131 \\ frame #2: inline_call`root0.main at root0.zig:36:14
1132 ,
1133 \\ * frame #0: inline_call`root0.r0cf(r0ca=66) at root0.zig:26:5
1134 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:16:15
1135 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1136 ,
1137 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=65) at root0.zig:29:5
1138 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:17:16
1139 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1140 ,
1141 \\ * frame #0: inline_call`root1.r1cf(r1ca=64) at root1.zig:26:5
1142 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:18:15
1143 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1144 ,
1145 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=71) at root1.zig:29:5
1146 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:19:16
1147 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1148 ,
1149 \\ * frame #0: inline_call`mod0.m0cf(m0ca=70) at mod0.zig:26:5
1150 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:20:14
1151 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1152 ,
1153 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=69) at mod0.zig:29:5
1154 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:21:15
1155 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1156 ,
1157 \\ * frame #0: inline_call`mod1.m1cf(m1ca=68) at mod1.zig:26:5
1158 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:22:14
1159 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1160 ,
1161 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=75) at mod1.zig:29:5
1162 \\ frame #1: inline_call`root0.main [inlined] m0pfi(m0pai=67) at mod0.zig:23:15
1163 \\ frame #2: inline_call`root0.main at root0.zig:37:15
1164 ,
1165 \\ * frame #0: inline_call`root0.r0cf(r0ca=79) at root0.zig:26:5
1166 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:6:15
1167 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1168 ,
1169 \\ * frame #0: inline_call`mod1.m1pf [inlined] r0cfi(r0cai=76) at root0.zig:29:5
1170 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:7:16
1171 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1172 ,
1173 \\ * frame #0: inline_call`root1.r1cf(r1ca=77) at root1.zig:26:5
1174 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:8:15
1175 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1176 ,
1177 \\ * frame #0: inline_call`mod1.m1pf [inlined] r1cfi(r1cai=74) at root1.zig:29:5
1178 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:9:16
1179 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1180 ,
1181 \\ * frame #0: inline_call`mod0.m0cf(m0ca=75) at mod0.zig:26:5
1182 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:10:14
1183 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1184 ,
1185 \\ * frame #0: inline_call`mod1.m1pf [inlined] m0cfi(m0cai=72) at mod0.zig:29:5
1186 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:11:15
1187 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1188 ,
1189 \\ * frame #0: inline_call`mod1.m1cf(m1ca=73) at mod1.zig:26:5
1190 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:12:14
1191 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1192 ,
1193 \\ * frame #0: inline_call`mod1.m1pf [inlined] m1cfi(m1cai=70) at mod1.zig:29:5
1194 \\ frame #1: inline_call`mod1.m1pf(m1pa=78) at mod1.zig:13:15
1195 \\ frame #2: inline_call`root0.main at root0.zig:38:14
1196 ,
1197 \\ * frame #0: inline_call`root0.r0cf(r0ca=88) at root0.zig:26:5
1198 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:16:15
1199 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1200 ,
1201 \\ * frame #0: inline_call`root0.main [inlined] r0cfi(r0cai=91) at root0.zig:29:5
1202 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:17:16
1203 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1204 ,
1205 \\ * frame #0: inline_call`root1.r1cf(r1ca=90) at root1.zig:26:5
1206 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:18:15
1207 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1208 ,
1209 \\ * frame #0: inline_call`root0.main [inlined] r1cfi(r1cai=93) at root1.zig:29:5
1210 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:19:16
1211 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1212 ,
1213 \\ * frame #0: inline_call`mod0.m0cf(m0ca=92) at mod0.zig:26:5
1214 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:20:14
1215 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1216 ,
1217 \\ * frame #0: inline_call`root0.main [inlined] m0cfi(m0cai=95) at mod0.zig:29:5
1218 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:21:15
1219 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1220 ,
1221 \\ * frame #0: inline_call`mod1.m1cf(m1ca=94) at mod1.zig:26:5
1222 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:22:14
1223 \\ frame #2: inline_call`root0.main at root0.zig:39:15
1224 ,
1225 \\ * frame #0: inline_call`root0.main [inlined] m1cfi(m1cai=81) at mod1.zig:29:5
1226 \\ frame #1: inline_call`root0.main [inlined] m1pfi(m1pai=89) at mod1.zig:23:15
1227 \\ frame #2: inline_call`root0.main at root0.zig:39:15
7721228 },
7731229 );
7741230 db.addLldbTest(