authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-09-09 10:25:59-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-09-10 12:27:57-04:00
logcdaf3154eee467da887198d15558cb7d83296258
tree43147ca7a17641eb35caa6d57af001cfcef0abdd
parente048e788862881a42304bff91c2f832a924d77c7

Dwarf: implement variables without runtime bits


1 files changed, 19 insertions(+), 2 deletions(-)

src/link/Dwarf.zig+19-2
......@@ -2576,7 +2576,7 @@ pub fn updateComptimeNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool
25762576 const nav_gop = try dwarf.navs.getOrPut(dwarf.gpa, nav_index);
25772577 errdefer _ = dwarf.navs.pop();
25782578
2579 const tag: enum { done, decl_alias, decl_const } = switch (ip.indexToKey(nav_val.toIntern())) {
2579 const tag: enum { done, decl_alias, decl_var, decl_const } = switch (ip.indexToKey(nav_val.toIntern())) {
25802580 .int_type,
25812581 .ptr_type,
25822582 .array_type,
......@@ -2895,7 +2895,7 @@ pub fn updateComptimeNav(dwarf: *Dwarf, pt: Zcu.PerThread, nav_index: InternPool
28952895 .aggregate,
28962896 .un,
28972897 => .decl_const,
2898 .variable => unreachable,
2898 .variable => .decl_var,
28992899 .func => |func| tag: {
29002900 if (nav_gop.found_existing) {
29012901 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
29662966 try wip_nav.strp(nav.name.toSlice(ip));
29672967 try wip_nav.refType(nav_val.toType());
29682968 },
2969 .decl_var => {
2970 const diw = wip_nav.debug_info.writer(dwarf.gpa);
2971 try wip_nav.abbrevCode(.decl_var);
2972 try wip_nav.refType(Type.fromInterned(parent_type));
2973 assert(wip_nav.debug_info.items.len == DebugInfo.declEntryLineOff(dwarf));
2974 try diw.writeInt(u32, @intCast(loc.line + 1), dwarf.endian);
2975 try uleb128(diw, loc.column + 1);
2976 try diw.writeByte(accessibility);
2977 try wip_nav.strp(nav.name.toSlice(ip));
2978 try wip_nav.strp(nav.fqn.toSlice(ip));
2979 const nav_ty = nav_val.typeOf(zcu);
2980 try wip_nav.refType(nav_ty);
2981 try wip_nav.blockValue(nav_src_loc, nav_val);
2982 try uleb128(diw, nav.status.resolved.alignment.toByteUnits() orelse
2983 nav_ty.abiAlignment(zcu).toByteUnits().?);
2984 try diw.writeByte(@intFromBool(false));
2985 },
29692986 .decl_const => {
29702987 const diw = wip_nav.debug_info.writer(dwarf.gpa);
29712988 try wip_nav.abbrevCode(.decl_const);