aboutsummaryrefslogtreecommitdiff
path: root/src/link
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2024-09-09 10:25:59 -0400
committerJacob Young <jacobly0@users.noreply.github.com>2024-09-10 12:27:57 -0400
commitcdaf3154eee467da887198d15558cb7d83296258 (patch)
tree43147ca7a17641eb35caa6d57af001cfcef0abdd /src/link
parente048e788862881a42304bff91c2f832a924d77c7 (diff)
downloadzig-cdaf3154eee467da887198d15558cb7d83296258.tar.gz
zig-cdaf3154eee467da887198d15558cb7d83296258.zip
Dwarf: implement variables without runtime bits
Diffstat (limited to 'src/link')
-rw-r--r--src/link/Dwarf.zig21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/link/Dwarf.zig b/src/link/Dwarf.zig
index 8fda9a38a3..1f780affde 100644
--- a/src/link/Dwarf.zig
+++ b/src/link/Dwarf.zig
@@ -2576,7 +2576,7 @@ pub fn updateComptimeNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool
const nav_gop = try dwarf.navs.getOrPut(dwarf.gpa, nav_index);
errdefer _ = dwarf.navs.pop();
- const tag: enum { done, decl_alias, decl_const } = switch (ip.indexToKey(nav_val.toIntern())) {
+ const tag: enum { done, decl_alias, decl_var, decl_const } = switch (ip.indexToKey(nav_val.toIntern())) {
.int_type,
.ptr_type,
.array_type,
@@ -2895,7 +2895,7 @@ pub fn updateComptimeNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool
.aggregate,
.un,
=> .decl_const,
- .variable => unreachable,
+ .variable => .decl_var,
.func => |func| tag: {
if (nav_gop.found_existing) {
const unit_ptr = dwarf.debug_info.section.getUnit(wip_nav.unit);
@@ -2966,6 +2966,23 @@ pub fn updateComptimeNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool
try wip_nav.strp(nav.name.toSlice(ip));
try wip_nav.refType(nav_val.toType());
},
+ .decl_var => {
+ const diw = wip_nav.debug_info.writer(dwarf.gpa);
+ try wip_nav.abbrevCode(.decl_var);
+ try wip_nav.refType(Type.fromInterned(parent_type));
+ assert(wip_nav.debug_info.items.len == DebugInfo.declEntryLineOff(dwarf));
+ try diw.writeInt(u32, @intCast(loc.line + 1), dwarf.endian);
+ try uleb128(diw, loc.column + 1);
+ try diw.writeByte(accessibility);
+ try wip_nav.strp(nav.name.toSlice(ip));
+ try wip_nav.strp(nav.fqn.toSlice(ip));
+ const nav_ty = nav_val.typeOf(zcu);
+ try wip_nav.refType(nav_ty);
+ try wip_nav.blockValue(nav_src_loc, nav_val);
+ try uleb128(diw, nav.status.resolved.alignment.toByteUnits() orelse
+ nav_ty.abiAlignment(zcu).toByteUnits().?);
+ try diw.writeByte(@intFromBool(false));
+ },
.decl_const => {
const diw = wip_nav.debug_info.writer(dwarf.gpa);
try wip_nav.abbrevCode(.decl_const);