authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-04-20 15:09:33-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-04-20 15:17:07-07:00
logceff2782029672714ac2e04a7b3e25af23eb9a9b
tree959bfcee9176e487dfcd4488ada99364658f9a37
parentd026202a26e56e7e2ea20ca49509fdcf8b937020

fixes to the previous commit

* CompileStep: Avoid calling producesPdbFile() to determine whether the option should be respected. If the user asks for it, put it on the command line and let the Zig CLI deal with it appropriately. * Make the namespace of `std.dwarf.Format.dwarf32` no longer have a redundant "dwarf" in it. * Add `zig cc` integration for `-gdwarf32` and `-gdwarf64`. * Toss in a bonus bug fix for `-gdwarf-2`, `-gdwarf-3`, etc. * Avoid using default init values for struct fields unnecessarily. * Add missing cache hash addition for the new option.

8 files changed, 98 insertions(+), 35 deletions(-)

lib/std/Build/CompileStep.zig+6-7
......@@ -1450,13 +1450,12 @@ fn make(step: *Step, prog_node: *std.Progress.Node) !void {
14501450
14511451 try addFlag(&zig_args, "strip", self.strip);
14521452 try addFlag(&zig_args, "unwind-tables", self.unwind_tables);
1453 if (!self.producesPdbFile()) {
1454 if (self.dwarf_format) |dwarf_format| {
1455 try zig_args.append(switch (dwarf_format) {
1456 .dwarf32 => "-gdwarf32",
1457 .dwarf64 => "-gdwarf64",
1458 });
1459 }
1453
1454 if (self.dwarf_format) |dwarf_format| {
1455 try zig_args.append(switch (dwarf_format) {
1456 .@"32" => "-gdwarf32",
1457 .@"64" => "-gdwarf64",
1458 });
14601459 }
14611460
14621461 switch (self.compress_debug_sections) {
lib/std/dwarf.zig+1-4
......@@ -147,10 +147,7 @@ pub const CC = enum(u8) {
147147 GNU_borland_fastcall_i386 = 0x41,
148148};
149149
150pub const Format = enum {
151 dwarf32,
152 dwarf64,
153};
150pub const Format = enum { @"32", @"64" };
154151
155152const PcRange = struct {
156153 start: u64,
src/Compilation.zig+8-1
......@@ -1112,6 +1112,7 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation {
11121112 cache.hash.add(link_libunwind);
11131113 cache.hash.add(options.output_mode);
11141114 cache.hash.add(options.machine_code_model);
1115 cache.hash.addOptional(options.dwarf_format);
11151116 cache_helpers.addOptionalEmitLoc(&cache.hash, options.emit_bin);
11161117 cache_helpers.addOptionalEmitLoc(&cache.hash, options.emit_implib);
11171118 cache.hash.addBytes(options.root_name);
......@@ -4490,7 +4491,13 @@ pub fn addCCArgs(
44904491 // generation, it only changes the type of information generated.
44914492 try argv.appendSlice(&.{ "-g", "-gcodeview" });
44924493 },
4493 .elf, .macho => try argv.append("-gdwarf-4"),
4494 .elf, .macho => {
4495 try argv.append("-gdwarf-4");
4496 if (comp.bin_file.options.dwarf_format) |f| switch (f) {
4497 .@"32" => try argv.append("-gdwarf32"),
4498 .@"64" => try argv.append("-gdwarf64"),
4499 };
4500 },
44944501 else => try argv.append("-g"),
44954502 }
44964503 }
src/clang_options_data.zig+56-7
......@@ -3870,13 +3870,62 @@ flagpd1("gcodeview-command-line"),
38703870flagpd1("gcodeview-ghash"),
38713871flagpd1("gcolumn-info"),
38723872flagpd1("gdbx"),
3873flagpd1("gdwarf"),
3874flagpd1("gdwarf32"),
3875flagpd1("gdwarf64"),
3876flagpd1("gdwarf-2"),
3877flagpd1("gdwarf-3"),
3878flagpd1("gdwarf-4"),
3879flagpd1("gdwarf-5"),
3873.{
3874 .name = "gdwarf",
3875 .syntax = .flag,
3876 .zig_equivalent = .debug,
3877 .pd1 = true,
3878 .pd2 = false,
3879 .psl = false,
3880},
3881.{
3882 .name = "gdwarf32",
3883 .syntax = .flag,
3884 .zig_equivalent = .gdwarf32,
3885 .pd1 = true,
3886 .pd2 = false,
3887 .psl = false,
3888},
3889.{
3890 .name = "gdwarf64",
3891 .syntax = .flag,
3892 .zig_equivalent = .gdwarf64,
3893 .pd1 = true,
3894 .pd2 = false,
3895 .psl = false,
3896},
3897.{
3898 .name = "gdwarf-2",
3899 .syntax = .flag,
3900 .zig_equivalent = .debug,
3901 .pd1 = true,
3902 .pd2 = false,
3903 .psl = false,
3904},
3905.{
3906 .name = "gdwarf-3",
3907 .syntax = .flag,
3908 .zig_equivalent = .debug,
3909 .pd1 = true,
3910 .pd2 = false,
3911 .psl = false,
3912},
3913.{
3914 .name = "gdwarf-4",
3915 .syntax = .flag,
3916 .zig_equivalent = .debug,
3917 .pd1 = true,
3918 .pd2 = false,
3919 .psl = false,
3920},
3921.{
3922 .name = "gdwarf-5",
3923 .syntax = .flag,
3924 .zig_equivalent = .debug,
3925 .pd1 = true,
3926 .pd2 = false,
3927 .psl = false,
3928},
38803929flagpd1("gdwarf-aranges"),
38813930flagpd1("gembed-source"),
38823931sepd1("gen-cdb-fragment-path"),
src/codegen/llvm.zig+1-8
......@@ -433,14 +433,7 @@ pub const Object = struct {
433433 if (!options.strip) {
434434 switch (options.target.ofmt) {
435435 .coff => llvm_module.addModuleCodeViewFlag(),
436 else => {
437 const dwarf_format = options.dwarf_format orelse .dwarf32;
438 const produce_dwarf64 = switch (dwarf_format) {
439 .dwarf32 => false,
440 .dwarf64 => true,
441 };
442 llvm_module.addModuleDebugInfoFlag(produce_dwarf64);
443 },
436 else => llvm_module.addModuleDebugInfoFlag(options.dwarf_format == std.dwarf.Format.@"64"),
444437 }
445438 const di_builder = llvm_module.createDIBuilder(true);
446439 opt_di_builder = di_builder;
src/link.zig+1-1
......@@ -200,7 +200,7 @@ pub const Options = struct {
200200 compatibility_version: ?std.builtin.Version,
201201 libc_installation: ?*const LibCInstallation,
202202
203 dwarf_format: ?std.dwarf.Format = null,
203 dwarf_format: ?std.dwarf.Format,
204204
205205 /// WASI-only. Type of WASI execution model ("command" or "reactor").
206206 wasi_exec_model: std.builtin.WasiExecModel = undefined,
src/main.zig+12-2
......@@ -1357,9 +1357,9 @@ fn buildOutputType(
13571357 } else if (mem.eql(u8, arg, "-fno-strip")) {
13581358 strip = false;
13591359 } else if (mem.eql(u8, arg, "-gdwarf32")) {
1360 dwarf_format = .dwarf32;
1360 dwarf_format = .@"32";
13611361 } else if (mem.eql(u8, arg, "-gdwarf64")) {
1362 dwarf_format = .dwarf64;
1362 dwarf_format = .@"64";
13631363 } else if (mem.eql(u8, arg, "-fformatted-panics")) {
13641364 formatted_panics = true;
13651365 } else if (mem.eql(u8, arg, "-fno-formatted-panics")) {
......@@ -1767,6 +1767,14 @@ fn buildOutputType(
17671767 try clang_argv.appendSlice(it.other_args);
17681768 }
17691769 },
1770 .gdwarf32 => {
1771 strip = false;
1772 dwarf_format = .@"32";
1773 },
1774 .gdwarf64 => {
1775 strip = false;
1776 dwarf_format = .@"64";
1777 },
17701778 .sanitize => {
17711779 if (mem.eql(u8, it.only_arg, "undefined")) {
17721780 want_sanitize_c = true;
......@@ -5108,6 +5116,8 @@ pub const ClangArgIterator = struct {
51085116 asm_only,
51095117 optimize,
51105118 debug,
5119 gdwarf32,
5120 gdwarf64,
51115121 sanitize,
51125122 linker_script,
51135123 dry_run,
tools/update_clang_options.zig+13-5
......@@ -241,23 +241,31 @@ const known_options = [_]KnownOpt{
241241 .ident = "debug",
242242 },
243243 .{
244 .name = "g-dwarf",
244 .name = "gdwarf32",
245 .ident = "gdwarf32",
246 },
247 .{
248 .name = "gdwarf64",
249 .ident = "gdwarf64",
250 },
251 .{
252 .name = "gdwarf",
245253 .ident = "debug",
246254 },
247255 .{
248 .name = "g-dwarf-2",
256 .name = "gdwarf-2",
249257 .ident = "debug",
250258 },
251259 .{
252 .name = "g-dwarf-3",
260 .name = "gdwarf-3",
253261 .ident = "debug",
254262 },
255263 .{
256 .name = "g-dwarf-4",
264 .name = "gdwarf-4",
257265 .ident = "debug",
258266 },
259267 .{
260 .name = "g-dwarf-5",
268 .name = "gdwarf-5",
261269 .ident = "debug",
262270 },
263271 .{