From 5de880c288b0f340b57442d68685c79cf515fc78 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Wed, 25 Dec 2024 14:25:21 -0500 Subject: [PATCH] Dwarf: emit debug info for extern globals --- src/link/Dwarf.zig | 4 +++- test/src/Debugger.zig | 34 ++++++++++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/link/Dwarf.zig b/src/link/Dwarf.zig index 81ebc00b1d..2aa04a5efd 100644 --- a/src/link/Dwarf.zig +++ b/src/link/Dwarf.zig @@ -2358,7 +2358,9 @@ pub fn initWipNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool.Nav.In const nav_val = zcu.navValue(nav_index); const nav_key = ip.indexToKey(nav_val.toIntern()); switch (nav_key) { - .@"extern" => return null, + // Ignore @extern + .@"extern" => |@"extern"| if (decl.linkage != .@"extern" or + !@"extern".name.eqlSlice(file.zir.nullTerminatedString(decl.name), ip)) return null, else => {}, } diff --git a/test/src/Debugger.zig b/test/src/Debugger.zig index e5fd8b20b3..d14ea8ecd5 100644 --- a/test/src/Debugger.zig +++ b/test/src/Debugger.zig @@ -656,10 +656,17 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void { .{ .path = "storage.zig", .source = + \\comptime { + \\ _ = @import("externs.zig"); + \\} \\const global_const: u64 = 0x19e50dc8d6002077; \\var global_var: u64 = 0xcc423cec08622e32; \\threadlocal var global_threadlocal1: u64 = 0xb4d643528c042121; \\threadlocal var global_threadlocal2: u64 = 0x43faea1cf5ad7a22; + \\extern const extern_const: u64; + \\extern var extern_var: u64; + \\extern threadlocal var extern_threadlocal1: u64; + \\extern threadlocal var extern_threadlocal2: u64; \\fn testStorage( \\ param1: u64, \\ param2: u64, @@ -673,6 +680,7 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void { \\ const local_comptime_val: u64 = global_const *% global_const; \\ const local_comptime_ptr: struct { u64 } = .{ local_comptime_val *% local_comptime_val }; \\ const local_const: u64 = global_var ^ global_threadlocal1 ^ global_threadlocal2 ^ + \\ extern_const ^ extern_var ^ extern_threadlocal1 ^ extern_threadlocal2 ^ \\ param1 ^ param2 ^ param3 ^ param4 ^ param5 ^ param6 ^ param7 ^ param8; \\ var local_var: u64 = local_comptime_ptr[0] ^ local_const; \\ local_var = local_var; @@ -692,19 +700,37 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void { \\ , }, + .{ + .path = "externs.zig", + .source = + \\export const extern_const: u64 = 0x1b0c91ea0470b0b2; + \\export var extern_var: u64 = 0x19bc17b3f0b61ebc; + \\export threadlocal var extern_threadlocal1: u64 = 0x3034c4ce967ed64d; + \\export threadlocal var extern_threadlocal2: u64 = 0xfd330ab00b4bc5eb; + \\ + , + }, }, \\breakpoint set --file storage.zig --source-pattern-regexp 'local_var = local_var;' \\process launch - \\target variable --show-types --format hex -- global_const global_var global_threadlocal1 global_threadlocal2 + \\target variable --show-types --format hex -- global_const global_var global_threadlocal1 global_threadlocal2 extern_const extern_var extern_threadlocal1 extern_threadlocal2 \\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 \\breakpoint delete --force 1 , &.{ - \\(lldb) target variable --show-types --format hex -- global_const global_var global_threadlocal1 global_threadlocal2 + \\(lldb) target variable --show-types --format hex -- global_const global_var global_threadlocal1 global_threadlocal2 extern_const extern_var extern_threadlocal1 extern_threadlocal2 \\(u64) global_const = 0x19e50dc8d6002077 \\(u64) global_var = 0xcc423cec08622e32 \\(u64) global_threadlocal1 = 0xb4d643528c042121 \\(u64) global_threadlocal2 = 0x43faea1cf5ad7a22 + \\(u64) extern_const = 0x1b0c91ea0470b0b2 + \\(u64) extern_const = 0x1b0c91ea0470b0b2 + \\(u64) extern_var = 0x19bc17b3f0b61ebc + \\(u64) extern_var = 0x19bc17b3f0b61ebc + \\(u64) extern_threadlocal1 = 0x3034c4ce967ed64d + \\(u64) extern_threadlocal1 = 0x3034c4ce967ed64d + \\(u64) extern_threadlocal2 = 0xfd330ab00b4bc5eb + \\(u64) extern_threadlocal2 = 0xfd330ab00b4bc5eb \\(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 \\(u64) param1 = 0x6a607e08125c7e00 \\(u64) param2 = 0x98944cb2a45a8b51 @@ -716,8 +742,8 @@ pub fn addTestsForTarget(db: *Debugger, target: Target) void { \\(u64) param8 = 0xc88533722601e481 \\(u64) local_comptime_val = 0x69490636f81df751 \\(u64) local_comptime_ptr.0 = 0x82e834dae74767a1 - \\(u64) local_const = 0xdffceb8b2f41e205 - \\(u64) local_var = 0x5d14df51c80685a4 + \\(u64) local_const = 0x104ba3ac46b25fad + \\(u64) local_var = 0x92a39776a1f5380c \\(lldb) breakpoint delete --force 1 \\1 breakpoints deleted; 0 breakpoint locations disabled. },