| ... | ... | @@ -1936,9 +1936,8 @@ pub fn updateComptimeNav( |
| 1936 | 1936 | log.debug("updateComptimeNav({f})", .{nav.fqn.fmt(ip)}); |
| 1937 | 1937 | const inst_info = nav.srcInst(ip).resolveFull(ip).?; |
| 1938 | 1938 | const nav_val: Value = .fromInterned(nav.resolved.?.value); |
| 1939 | | const file = zcu.fileByIndex(inst_info.file); |
| 1940 | | const zir = &file.zir.?; |
| 1941 | | const decl = zir.getDeclaration(inst_info.inst); |
| 1939 | const zf = zcu.fileByIndex(inst_info.file); |
| 1940 | const decl = zf.zir.?.getDeclaration(inst_info.inst); |
| 1942 | 1941 | switch (decl.kind) { |
| 1943 | 1942 | .unnamed_test, .@"test", .decltest => return, |
| 1944 | 1943 | .@"comptime", .@"const", .@"var" => {}, |
| ... | ... | @@ -1977,31 +1976,8 @@ pub fn updateComptimeNav( |
| 1977 | 1976 | return; |
| 1978 | 1977 | }, |
| 1979 | 1978 | .func => |func| if (func.owner_nav == nav_index and func.generic_owner == .none) { |
| 1980 | | const fi = try dwarf.getFunc(func.owner_nav); |
| 1981 | | const f = fi.get(dwarf); |
| 1982 | | switch (f.state) { |
| 1983 | | .unresolved => {}, |
| 1984 | | .resolved => return, |
| 1985 | | } |
| 1986 | | const elf = dwarf.lf.cast(.elf2).?; |
| 1987 | | const debug_info_ni = f.debug_info_ni.unwrap().?; |
| 1988 | | var di_nw: MappedFile.Node.Writer = undefined; |
| 1989 | | debug_info_ni.writer(zcu.gpa, &elf.mf, &di_nw); |
| 1990 | | defer di_nw.deinit(); |
| 1991 | | elf.resetNodeRelocs(debug_info_ni); |
| 1992 | | dwarf.genDeclFuncGeneric( |
| 1993 | | pt, |
| 1994 | | &di_nw, |
| 1995 | | zir, |
| 1996 | | .fromInterned(ip.namespacePtr(nav.analysis.?.namespace).owner_type), |
| 1997 | | &decl, |
| 1998 | | &ip.indexToKey(func.ty).func_type, |
| 1999 | | nav.name.toSlice(ip), |
| 2000 | | zir.getParamBody(func.zir_body_inst.resolve(ip).?), |
| 2001 | | ) catch |err| switch (err) { |
| 2002 | | else => |e| return e, |
| 2003 | | error.WriteFailed => return dwarf.reportWriteError(&di_nw), |
| 2004 | | }; |
| 1979 | _ = try dwarf.const_pool.get(pt, .{ .elf2 = dwarf.lf.cast(.elf2).? }, nav_val.toIntern()); |
| 1980 | break :done; |
| 2005 | 1981 | } else return, |
| 2006 | 1982 | |
| 2007 | 1983 | else => return, |
| ... | ... | @@ -2011,42 +1987,6 @@ pub fn updateComptimeNav( |
| 2011 | 1987 | } |
| 2012 | 1988 | try dwarf.const_pool.flushPending(pt, .{ .elf2 = dwarf.lf.cast(.elf2).? }); |
| 2013 | 1989 | } |
| 2014 | | fn genDeclFuncGeneric( |
| 2015 | | dwarf: *Dwarf, |
| 2016 | | pt: Zcu.PerThread, |
| 2017 | | di_nw: *MappedFile.Node.Writer, |
| 2018 | | zir: *const std.zig.Zir, |
| 2019 | | parent_ty: Type, |
| 2020 | | decl: *const std.zig.Zir.Inst.Declaration.Unwrapped, |
| 2021 | | fn_ty: *const InternPool.Key.FuncType, |
| 2022 | | name: []const u8, |
| 2023 | | param_body: []const std.zig.Zir.Inst.Index, |
| 2024 | | ) link.EmitError!void { |
| 2025 | | const zcu = pt.zcu; |
| 2026 | | const diw = &di_nw.interface; |
| 2027 | | try diw.writeUleb128(try dwarf.refAbbrevCode(.decl_func_generic)); |
| 2028 | | try dwarf.refType(pt, di_nw, parent_ty); |
| 2029 | | try diw.writeInt(u32, decl.src_line + 1, dwarf.endian); |
| 2030 | | try diw.writeUleb128(decl.src_column + 1); |
| 2031 | | try diw.writeByte(if (decl.is_pub) DW.ACCESS.public else DW.ACCESS.private); |
| 2032 | | try dwarf.strp(&dwarf.debug_str, di_nw, name); |
| 2033 | | try dwarf.refType(pt, di_nw, .fromInterned(fn_ty.return_type)); |
| 2034 | | var param_index: u32 = 0; |
| 2035 | | for (param_body) |param_inst| { |
| 2036 | | switch (zir.getParamName(param_inst) orelse break) { |
| 2037 | | .empty => try diw.writeUleb128(try dwarf.refAbbrevCode(.unnamed_param)), |
| 2038 | | else => |param_name| { |
| 2039 | | try diw.writeUleb128(try dwarf.refAbbrevCode(.param)); |
| 2040 | | try dwarf.strp(&dwarf.debug_str, di_nw, zir.nullTerminatedString(param_name)); |
| 2041 | | }, |
| 2042 | | } |
| 2043 | | try dwarf.refType(pt, di_nw, .fromInterned(fn_ty.param_types.get(&zcu.intern_pool)[param_index])); |
| 2044 | | param_index += 1; |
| 2045 | | } |
| 2046 | | if (fn_ty.is_var_args) try diw.writeUleb128(try dwarf.refAbbrevCode(.is_var_args)); |
| 2047 | | try diw.writeUleb128(@backingInt(AbbrevCode.null)); |
| 2048 | | try dwarf.genDebugInfoPadding(diw, diw.unusedCapacityLen()); |
| 2049 | | } |
| 2050 | 1990 | |
| 2051 | 1991 | pub fn addConst( |
| 2052 | 1992 | dwarf: *Dwarf, |
| ... | ... | @@ -2858,6 +2798,40 @@ fn updateConstInner( |
| 2858 | 2798 | }, |
| 2859 | 2799 | |
| 2860 | 2800 | else => return, |
| 2801 | .func => |func| { |
| 2802 | const fi = try dwarf.getFunc(func.owner_nav); |
| 2803 | switch (fi.get(dwarf).state) { |
| 2804 | .unresolved => {}, |
| 2805 | .resolved => return, |
| 2806 | } |
| 2807 | const fn_ty = ip.indexToKey(func.ty).func_type; |
| 2808 | const nav = ip.getNav(func.owner_nav); |
| 2809 | const inst_info = nav.srcInst(ip).resolveFull(ip).?; |
| 2810 | const zf = zcu.fileByIndex(inst_info.file); |
| 2811 | const decl = zf.zir.?.getDeclaration(inst_info.inst); |
| 2812 | const parent_ty: Type = .fromInterned(ip.namespacePtr(nav.analysis.?.namespace).owner_type); |
| 2813 | try diw.writeUleb128(try dwarf.refAbbrevCode(.decl_func_generic)); |
| 2814 | try dwarf.refType(pt, di_nw, parent_ty); |
| 2815 | try diw.writeInt(u32, decl.src_line + 1, dwarf.endian); |
| 2816 | try diw.writeUleb128(decl.src_column + 1); |
| 2817 | try diw.writeByte(if (decl.is_pub) DW.ACCESS.public else DW.ACCESS.private); |
| 2818 | try dwarf.strp(&dwarf.debug_str, di_nw, nav.name.toSlice(ip)); |
| 2819 | try dwarf.refType(pt, di_nw, .fromInterned(fn_ty.return_type)); |
| 2820 | var param_index: u32 = 0; |
| 2821 | for (zf.zir.?.getParamBody(func.zir_body_inst.resolve(ip).?)) |param_inst| { |
| 2822 | switch (zf.zir.?.getParamName(param_inst) orelse break) { |
| 2823 | .empty => try diw.writeUleb128(try dwarf.refAbbrevCode(.unnamed_param)), |
| 2824 | else => |param_name| { |
| 2825 | try diw.writeUleb128(try dwarf.refAbbrevCode(.param)); |
| 2826 | try dwarf.strp(&dwarf.debug_str, di_nw, zf.zir.?.nullTerminatedString(param_name)); |
| 2827 | }, |
| 2828 | } |
| 2829 | try dwarf.refType(pt, di_nw, .fromInterned(fn_ty.param_types.get(&zcu.intern_pool)[param_index])); |
| 2830 | param_index += 1; |
| 2831 | } |
| 2832 | if (fn_ty.is_var_args) try diw.writeUleb128(try dwarf.refAbbrevCode(.is_var_args)); |
| 2833 | try diw.writeUleb128(@backingInt(AbbrevCode.null)); |
| 2834 | }, |
| 2861 | 2835 | |
| 2862 | 2836 | .memoized_call => unreachable, // not a value |
| 2863 | 2837 | } |