authorgravatar for gwenzek@users.noreply.github.comGuillaume Wenzek <gwenzek@users.noreply.github.com> 2026-05-08 14:41:07+02:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-06-03 02:27:35+02:00
log0a3786d0c9e25b8597d7d348a792bcc9a4d1b9a9
tree7e7cb184c009096b09853d357b462c50074317b6
parent4f7170f8a34f39ce32abaa1d6d3357e597e3863a

improve DiFile


1 files changed, 43 insertions(+), 29 deletions(-)

src/codegen/llvm.zig+43-29
...@@ -1,5 +1,24 @@...@@ -1,5 +1,24 @@
1const std = @import("std");
2const Io = std.Io;
3const assert = std.debug.assert;
4const Allocator = std.mem.Allocator;
5const DW = std.dwarf;
6const Builder = std.zig.llvm.Builder;
1const builtin = @import("builtin");7const builtin = @import("builtin");
8const build_options = @import("build_options");
29
10const Air = @import("../Air.zig");
11const codegen = @import("../codegen.zig");
12const Compilation = @import("../Compilation.zig");
13const dev = @import("../dev.zig");
14const InternPool = @import("../InternPool.zig");
15const link = @import("../link.zig");
16const Package = @import("../Package.zig");
17const target_util = @import("../target.zig");
18const Type = @import("../Type.zig");
19const Value = @import("../Value.zig");
20const Zcu = @import("../Zcu.zig");
21const aarch64_c_abi = @import("aarch64/abi.zig");
3const FuncGen = @import("llvm/FuncGen.zig");22const FuncGen = @import("llvm/FuncGen.zig");
4const buildAllocaInner = FuncGen.buildAllocaInner;23const buildAllocaInner = FuncGen.buildAllocaInner;
5const isByRef = FuncGen.isByRef;24const isByRef = FuncGen.isByRef;
...@@ -7,35 +26,13 @@ const firstParamSRet = FuncGen.firstParamSRet;...@@ -7,35 +26,13 @@ const firstParamSRet = FuncGen.firstParamSRet;
7const lowerFnRetTy = FuncGen.lowerFnRetTy;26const lowerFnRetTy = FuncGen.lowerFnRetTy;
8const iterateParamTypes = FuncGen.iterateParamTypes;27const iterateParamTypes = FuncGen.iterateParamTypes;
9const ccAbiPromoteInt = FuncGen.ccAbiPromoteInt;28const ccAbiPromoteInt = FuncGen.ccAbiPromoteInt;
10const aarch64_c_abi = @import("aarch64/abi.zig");
1129
12const std = @import("std");
13const Io = std.Io;
14const assert = std.debug.assert;
15const Allocator = std.mem.Allocator;
16const log = std.log.scoped(.codegen);30const log = std.log.scoped(.codegen);
17const DW = std.dwarf;
18const Builder = std.zig.llvm.Builder;
19
20const build_options = @import("build_options");
21const bindings = if (build_options.have_llvm)31const bindings = if (build_options.have_llvm)
22 @import("llvm/bindings.zig")32 @import("llvm/bindings.zig")
23else33else
24 @compileError("LLVM unavailable");34 @compileError("LLVM unavailable");
2535
26const link = @import("../link.zig");
27const Compilation = @import("../Compilation.zig");
28const Zcu = @import("../Zcu.zig");
29const InternPool = @import("../InternPool.zig");
30const Package = @import("../Package.zig");
31const Air = @import("../Air.zig");
32const Value = @import("../Value.zig");
33const Type = @import("../Type.zig");
34const codegen = @import("../codegen.zig");
35const dev = @import("../dev.zig");
36
37const target_util = @import("../target.zig");
38
39pub fn legalizeFeatures(_: *const std.Target) ?*const Air.Legalize.Features {36pub fn legalizeFeatures(_: *const std.Target) ?*const Air.Legalize.Features {
40 return comptime &.initMany(&.{37 return comptime &.initMany(&.{
41 .expand_int_from_float_safe,38 .expand_int_from_float_safe,
...@@ -1946,15 +1943,32 @@ pub const Object = struct {...@@ -1946,15 +1943,32 @@ pub const Object = struct {
1946 const gop = try o.debug_file_map.getOrPut(gpa, file_index);1943 const gop = try o.debug_file_map.getOrPut(gpa, file_index);
1947 errdefer assert(o.debug_file_map.remove(file_index));1944 errdefer assert(o.debug_file_map.remove(file_index));
1948 if (gop.found_existing) return gop.value_ptr.*;1945 if (gop.found_existing) return gop.value_ptr.*;
1946
1947 const dirs = o.zcu.comp.dirs;
1949 const path = o.zcu.fileByIndex(file_index).path;1948 const path = o.zcu.fileByIndex(file_index).path;
1950 const abs_path = try path.toAbsolute(o.zcu.comp.dirs, gpa);1949 const root_path: ?[]const u8 = switch (path.root) {
1951 defer gpa.free(abs_path);1950 .zig_lib => dirs.zig_lib.path,
1951 .global_cache => dirs.global_cache.path,
1952 .local_cache => dirs.local_cache.path,
1953 .none => null,
1954 };
19521955
1953 gop.value_ptr.* = try o.builder.debugFile(1956 const file = if (root_path) |root|
1954 try o.builder.metadataString(std.fs.path.basename(abs_path)),1957 try o.builder.debugFile(
1955 try o.builder.metadataString(std.fs.path.dirname(abs_path) orelse ""),1958 try o.builder.metadataString(path.sub_path),
1956 );1959 try o.builder.metadataString(root),
1957 return gop.value_ptr.*;1960 )
1961 else blk: {
1962 const relative = try std.fs.path.relative(gpa, dirs.cwd, null, dirs.cwd, path.sub_path);
1963 defer gpa.free(relative);
1964 break :blk try o.builder.debugFile(
1965 try o.builder.metadataString(relative),
1966 try o.builder.metadataString(dirs.cwd),
1967 );
1968 };
1969
1970 gop.value_ptr.* = file;
1971 return file;
1958 }1972 }
19591973
1960 pub fn getDebugType(o: *Object, pt: Zcu.PerThread, ty: Type) Allocator.Error!Builder.Metadata {1974 pub fn getDebugType(o: *Object, pt: Zcu.PerThread, ty: Type) Allocator.Error!Builder.Metadata {