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...@@ -2358,7 +2358,9 @@ pub fn initWipNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool.Nav.In
2358 const nav_val = zcu.navValue(nav_index);2358 const nav_val = zcu.navValue(nav_index);
2359 const nav_key = ip.indexToKey(nav_val.toIntern());2359 const nav_key = ip.indexToKey(nav_val.toIntern());
2360 switch (nav_key) {2360 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,
2362 else => {},2364 else => {},
2363 }2365 }
23642366
test/src/Debugger.zig+30-4
...@@ -656,10 +656,17 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {...@@ -656,10 +656,17 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
656 .{656 .{
657 .path = "storage.zig",657 .path = "storage.zig",
658 .source =658 .source =
659 \\comptime {
660 \\ _ = @import("externs.zig");
661 \\}
659 \\const global_const: u64 = 0x19e50dc8d6002077;662 \\const global_const: u64 = 0x19e50dc8d6002077;
660 \\var global_var: u64 = 0xcc423cec08622e32;663 \\var global_var: u64 = 0xcc423cec08622e32;
661 \\threadlocal var global_threadlocal1: u64 = 0xb4d643528c042121;664 \\threadlocal var global_threadlocal1: u64 = 0xb4d643528c042121;
662 \\threadlocal var global_threadlocal2: u64 = 0x43faea1cf5ad7a22;665 \\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;
663 \\fn testStorage(670 \\fn testStorage(
664 \\ param1: u64,671 \\ param1: u64,
665 \\ param2: u64,672 \\ param2: u64,
...@@ -673,6 +680,7 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {...@@ -673,6 +680,7 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
673 \\ const local_comptime_val: u64 = global_const *% global_const;680 \\ const local_comptime_val: u64 = global_const *% global_const;
674 \\ const local_comptime_ptr: struct { u64 } = .{ local_comptime_val *% local_comptime_val };681 \\ const local_comptime_ptr: struct { u64 } = .{ local_comptime_val *% local_comptime_val };
675 \\ const local_const: u64 = global_var ^ global_threadlocal1 ^ global_threadlocal2 ^682 \\ const local_const: u64 = global_var ^ global_threadlocal1 ^ global_threadlocal2 ^
683 \\ extern_const ^ extern_var ^ extern_threadlocal1 ^ extern_threadlocal2 ^
676 \\ param1 ^ param2 ^ param3 ^ param4 ^ param5 ^ param6 ^ param7 ^ param8;684 \\ param1 ^ param2 ^ param3 ^ param4 ^ param5 ^ param6 ^ param7 ^ param8;
677 \\ var local_var: u64 = local_comptime_ptr[0] ^ local_const;685 \\ var local_var: u64 = local_comptime_ptr[0] ^ local_const;
678 \\ local_var = local_var;686 \\ local_var = local_var;
...@@ -692,19 +700,37 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {...@@ -692,19 +700,37 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
692 \\700 \\
693 ,701 ,
694 },702 },
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 },
695 },713 },
696 \\breakpoint set --file storage.zig --source-pattern-regexp 'local_var = local_var;'714 \\breakpoint set --file storage.zig --source-pattern-regexp 'local_var = local_var;'
697 \\process launch715 \\process launch
698 \\target variable --show-types --format hex -- global_const global_var global_threadlocal1 global_threadlocal2716 \\target variable --show-types --format hex -- global_const global_var global_threadlocal1 global_threadlocal2 extern_const extern_var extern_threadlocal1 extern_threadlocal2
699 \\frame variable --show-types --format hex -- param1 param2 param3 param4 param5 param6 param7 param8 local_comptime_val local_comptime_ptr.0 local_const local_var717 \\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
700 \\breakpoint delete --force 1718 \\breakpoint delete --force 1
701 ,719 ,
702 &.{720 &.{
703 \\(lldb) target variable --show-types --format hex -- global_const global_var global_threadlocal1 global_threadlocal2721 \\(lldb) target variable --show-types --format hex -- global_const global_var global_threadlocal1 global_threadlocal2 extern_const extern_var extern_threadlocal1 extern_threadlocal2
704 \\(u64) global_const = 0x19e50dc8d6002077722 \\(u64) global_const = 0x19e50dc8d6002077
705 \\(u64) global_var = 0xcc423cec08622e32723 \\(u64) global_var = 0xcc423cec08622e32
706 \\(u64) global_threadlocal1 = 0xb4d643528c042121724 \\(u64) global_threadlocal1 = 0xb4d643528c042121
707 \\(u64) global_threadlocal2 = 0x43faea1cf5ad7a22725 \\(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
708 \\(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_var734 \\(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
709 \\(u64) param1 = 0x6a607e08125c7e00735 \\(u64) param1 = 0x6a607e08125c7e00
710 \\(u64) param2 = 0x98944cb2a45a8b51736 \\(u64) param2 = 0x98944cb2a45a8b51
...@@ -716,8 +742,8 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {...@@ -716,8 +742,8 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void {
716 \\(u64) param8 = 0xc88533722601e481742 \\(u64) param8 = 0xc88533722601e481
717 \\(u64) local_comptime_val = 0x69490636f81df751743 \\(u64) local_comptime_val = 0x69490636f81df751
718 \\(u64) local_comptime_ptr.0 = 0x82e834dae74767a1744 \\(u64) local_comptime_ptr.0 = 0x82e834dae74767a1
719 \\(u64) local_const = 0xdffceb8b2f41e205745 \\(u64) local_const = 0x104ba3ac46b25fad
720 \\(u64) local_var = 0x5d14df51c80685a4746 \\(u64) local_var = 0x92a39776a1f5380c
721 \\(lldb) breakpoint delete --force 1747 \\(lldb) breakpoint delete --force 1
722 \\1 breakpoints deleted; 0 breakpoint locations disabled.748 \\1 breakpoints deleted; 0 breakpoint locations disabled.
723 },749 },