authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-12-25 14:25:21-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-01-12 23:40:57-05:00
log5de880c288b0f340b57442d68685c79cf515fc78
tree38a9c3e67974702563e17cc2a31de33d7f545153
parentfb7be4e074d1f23f708aa64cd49e8b0d9862e39a

Dwarf: emit debug info for extern globals


2 files changed, 33 insertions(+), 5 deletions(-)

src/link/Dwarf.zig+3-1
......@@ -2358,7 +2358,9 @@ pub fn initWipNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool.Nav.In
23582358 const nav_val = zcu.navValue(nav_index);
23592359 const nav_key = ip.indexToKey(nav_val.toIntern());
23602360 switch (nav_key) {
2361 .@"extern" => return null,
2361 // Ignore @extern
2362 .@"extern" => |@"extern"| if (decl.linkage != .@"extern" or
2363 !@"extern".name.eqlSlice(file.zir.nullTerminatedString(decl.name), ip)) return null,
23622364 else => {},
23632365 }
23642366
test/src/Debugger.zig+30-4
......@@ -656,10 +656,17 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
656656 .{
657657 .path = "storage.zig",
658658 .source =
659 \\comptime {
660 \\ _ = @import("externs.zig");
661 \\}
659662 \\const global_const: u64 = 0x19e50dc8d6002077;
660663 \\var global_var: u64 = 0xcc423cec08622e32;
661664 \\threadlocal var global_threadlocal1: u64 = 0xb4d643528c042121;
662665 \\threadlocal var global_threadlocal2: u64 = 0x43faea1cf5ad7a22;
666 \\extern const extern_const: u64;
667 \\extern var extern_var: u64;
668 \\extern threadlocal var extern_threadlocal1: u64;
669 \\extern threadlocal var extern_threadlocal2: u64;
663670 \\fn testStorage(
664671 \\ param1: u64,
665672 \\ param2: u64,
......@@ -673,6 +680,7 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
673680 \\ const local_comptime_val: u64 = global_const *% global_const;
674681 \\ const local_comptime_ptr: struct { u64 } = .{ local_comptime_val *% local_comptime_val };
675682 \\ const local_const: u64 = global_var ^ global_threadlocal1 ^ global_threadlocal2 ^
683 \\ extern_const ^ extern_var ^ extern_threadlocal1 ^ extern_threadlocal2 ^
676684 \\ param1 ^ param2 ^ param3 ^ param4 ^ param5 ^ param6 ^ param7 ^ param8;
677685 \\ var local_var: u64 = local_comptime_ptr[0] ^ local_const;
678686 \\ local_var = local_var;
......@@ -692,19 +700,37 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
692700 \\
693701 ,
694702 },
703 .{
704 .path = "externs.zig",
705 .source =
706 \\export const extern_const: u64 = 0x1b0c91ea0470b0b2;
707 \\export var extern_var: u64 = 0x19bc17b3f0b61ebc;
708 \\export threadlocal var extern_threadlocal1: u64 = 0x3034c4ce967ed64d;
709 \\export threadlocal var extern_threadlocal2: u64 = 0xfd330ab00b4bc5eb;
710 \\
711 ,
712 },
695713 },
696714 \\breakpoint set --file storage.zig --source-pattern-regexp 'local_var = local_var;'
697715 \\process launch
698 \\target variable --show-types --format hex -- global_const global_var global_threadlocal1 global_threadlocal2
716 \\target variable --show-types --format hex -- global_const global_var global_threadlocal1 global_threadlocal2 extern_const extern_var extern_threadlocal1 extern_threadlocal2
699717 \\frame variable --show-types --format hex -- param1 param2 param3 param4 param5 param6 param7 param8 local_comptime_val local_comptime_ptr.0 local_const local_var
700718 \\breakpoint delete --force 1
701719 ,
702720 &.{
703 \\(lldb) target variable --show-types --format hex -- global_const global_var global_threadlocal1 global_threadlocal2
721 \\(lldb) target variable --show-types --format hex -- global_const global_var global_threadlocal1 global_threadlocal2 extern_const extern_var extern_threadlocal1 extern_threadlocal2
704722 \\(u64) global_const = 0x19e50dc8d6002077
705723 \\(u64) global_var = 0xcc423cec08622e32
706724 \\(u64) global_threadlocal1 = 0xb4d643528c042121
707725 \\(u64) global_threadlocal2 = 0x43faea1cf5ad7a22
726 \\(u64) extern_const = 0x1b0c91ea0470b0b2
727 \\(u64) extern_const = 0x1b0c91ea0470b0b2
728 \\(u64) extern_var = 0x19bc17b3f0b61ebc
729 \\(u64) extern_var = 0x19bc17b3f0b61ebc
730 \\(u64) extern_threadlocal1 = 0x3034c4ce967ed64d
731 \\(u64) extern_threadlocal1 = 0x3034c4ce967ed64d
732 \\(u64) extern_threadlocal2 = 0xfd330ab00b4bc5eb
733 \\(u64) extern_threadlocal2 = 0xfd330ab00b4bc5eb
708734 \\(lldb) frame variable --show-types --format hex -- param1 param2 param3 param4 param5 param6 param7 param8 local_comptime_val local_comptime_ptr.0 local_const local_var
709735 \\(u64) param1 = 0x6a607e08125c7e00
710736 \\(u64) param2 = 0x98944cb2a45a8b51
......@@ -716,8 +742,8 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
716742 \\(u64) param8 = 0xc88533722601e481
717743 \\(u64) local_comptime_val = 0x69490636f81df751
718744 \\(u64) local_comptime_ptr.0 = 0x82e834dae74767a1
719 \\(u64) local_const = 0xdffceb8b2f41e205
720 \\(u64) local_var = 0x5d14df51c80685a4
745 \\(u64) local_const = 0x104ba3ac46b25fad
746 \\(u64) local_var = 0x92a39776a1f5380c
721747 \\(lldb) breakpoint delete --force 1
722748 \\1 breakpoints deleted; 0 breakpoint locations disabled.
723749 },