authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-08-25 21:31:03-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-08-25 22:44:18-07:00
log237d9a105d5eec82aefc63da8e844c47d8990eea
tree24ebeba0e09b069f52871a8869fb8417e2544719
parente97157f71c79257ab575598d142f3caa785a2a76

stage2: support debug dumping zir as a build option

So that it's not needed to manually comment and uncomment the debug code.

2 files changed, 11 insertions(+), 5 deletions(-)

build.zig+2
...@@ -83,6 +83,7 @@ pub fn build(b: *Builder) !void {...@@ -83,6 +83,7 @@ pub fn build(b: *Builder) !void {
83 }83 }
8484
85 const log_scopes = b.option([]const []const u8, "log", "Which log scopes to enable") orelse &[0][]const u8{};85 const log_scopes = b.option([]const []const u8, "log", "Which log scopes to enable") orelse &[0][]const u8{};
86 const zir_dumps = b.option([]const []const u8, "dump-zir", "Which functions to dump ZIR for before codegen") orelse &[0][]const u8{};
8687
87 const opt_version_string = b.option([]const u8, "version-string", "Override Zig version string. Default is to find out with git.");88 const opt_version_string = b.option([]const u8, "version-string", "Override Zig version string. Default is to find out with git.");
88 const version = if (opt_version_string) |version| version else v: {89 const version = if (opt_version_string) |version| version else v: {
...@@ -103,6 +104,7 @@ pub fn build(b: *Builder) !void {...@@ -103,6 +104,7 @@ pub fn build(b: *Builder) !void {
103 exe.addBuildOption([]const u8, "version", version);104 exe.addBuildOption([]const u8, "version", version);
104105
105 exe.addBuildOption([]const []const u8, "log_scopes", log_scopes);106 exe.addBuildOption([]const []const u8, "log_scopes", log_scopes);
107 exe.addBuildOption([]const []const u8, "zir_dumps", zir_dumps);
106 exe.addBuildOption(bool, "enable_tracy", tracy != null);108 exe.addBuildOption(bool, "enable_tracy", tracy != null);
107 if (tracy) |tracy_path| {109 if (tracy) |tracy_path| {
108 const client_cpp = fs.path.join(110 const client_cpp = fs.path.join(
src-self-hosted/link/Elf.zig+9-5
...@@ -17,6 +17,7 @@ const Type = @import("../type.zig").Type;...@@ -17,6 +17,7 @@ const Type = @import("../type.zig").Type;
17const link = @import("../link.zig");17const link = @import("../link.zig");
18const File = link.File;18const File = link.File;
19const Elf = @This();19const Elf = @This();
20const build_options = @import("build_options");
2021
21const default_entry_addr = 0x8000000;22const default_entry_addr = 0x8000000;
2223
...@@ -1640,11 +1641,14 @@ pub fn updateDecl(self: *Elf, module: *Module, decl: *Module.Decl) !void {...@@ -1640,11 +1641,14 @@ pub fn updateDecl(self: *Elf, module: *Module, decl: *Module.Decl) !void {
1640 else => false,1641 else => false,
1641 };1642 };
1642 if (is_fn) {1643 if (is_fn) {
1643 {1644 const zir_dumps = if (std.builtin.is_test) &[0][]const u8{} else build_options.zir_dumps;
1644 //if (mem.eql(u8, mem.spanZ(decl.name), "add")) {1645 if (zir_dumps.len != 0) {
1645 //}1646 for (zir_dumps) |fn_name| {
1646 std.debug.print("\n{}\n", .{decl.name});1647 if (mem.eql(u8, mem.spanZ(decl.name), fn_name)) {
1647 typed_value.val.cast(Value.Payload.Function).?.func.dump(module.*);1648 std.debug.print("\n{}\n", .{decl.name});
1649 typed_value.val.cast(Value.Payload.Function).?.func.dump(module.*);
1650 }
1651 }
1648 }1652 }
16491653
1650 // For functions we need to add a prologue to the debug line program.1654 // For functions we need to add a prologue to the debug line program.