authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-11 14:18:56-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-07-11 14:18:56-07:00
log2b99182e25e045109b090a794bb06295b09a0eeb
tree4cbb93210359b2b1f7e8359752807c8eb4dcf353
parent1f410b500c8dbe33191a54a4ae02a6fb0febec46

stage2: cleanups to --compress-debug-sections

* make the setting in the linker backend be non-optional; by this time all defaults are supposed to be resolved. * integrate with `zig cc` * change the CLI parsing to match C compiler parsing, allowing `--compress-debug-sections` alone to choose a default encoding of zlib.

6 files changed, 48 insertions(+), 27 deletions(-)

src/Compilation.zig+2-2
......@@ -1688,7 +1688,7 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation {
16881688 .no_builtin = options.no_builtin,
16891689 .allow_shlib_undefined = options.linker_allow_shlib_undefined,
16901690 .bind_global_refs_locally = options.linker_bind_global_refs_locally orelse false,
1691 .compress_debug_sections = options.linker_compress_debug_sections,
1691 .compress_debug_sections = options.linker_compress_debug_sections orelse .none,
16921692 .import_memory = options.linker_import_memory orelse false,
16931693 .import_table = options.linker_import_table,
16941694 .export_table = options.linker_export_table,
......@@ -2461,7 +2461,7 @@ fn addNonIncrementalStuffToCacheManifest(comp: *Compilation, man: *Cache.Manifes
24612461 man.hash.add(comp.bin_file.options.z_now);
24622462 man.hash.add(comp.bin_file.options.z_relro);
24632463 man.hash.add(comp.bin_file.options.hash_style);
2464 man.hash.addOptional(comp.bin_file.options.compress_debug_sections);
2464 man.hash.add(comp.bin_file.options.compress_debug_sections);
24652465 man.hash.add(comp.bin_file.options.include_compiler_rt);
24662466 if (comp.bin_file.options.link_libc) {
24672467 man.hash.add(comp.bin_file.options.libc_installation != null);
src/clang_options_data.zig+18-18
......@@ -2308,7 +2308,7 @@ flagpd1("compiler-options-dump"),
23082308.{
23092309 .name = "compress-debug-sections",
23102310 .syntax = .flag,
2311 .zig_equivalent = .other,
2311 .zig_equivalent = .compress_debug_sections,
23122312 .pd1 = true,
23132313 .pd2 = true,
23142314 .psl = false,
......@@ -3834,7 +3834,7 @@ m("mavx512cd"),
38343834m("mavx512dq"),
38353835m("mavx512er"),
38363836m("mavx512f"),
3837flagpd1("mavx512fp16"),
3837m("mavx512fp16"),
38383838m("mavx512ifma"),
38393839m("mavx512pf"),
38403840m("mavx512vbmi"),
......@@ -3867,7 +3867,7 @@ flagpd1("mconstructor-aliases"),
38673867flagpd1("mcpu=?"),
38683868m("mcrbits"),
38693869m("mcrc"),
3870flagpd1("mcrc32"),
3870m("mcrc32"),
38713871m("mcumode"),
38723872m("mcx16"),
38733873sepd1("mdebug-pass"),
......@@ -3892,8 +3892,8 @@ flagpd1("mfancy-math-387"),
38923892flagpd1("mfentry"),
38933893flagpd1("mfix4300"),
38943894flagpd1("mfix-and-continue"),
3895flagpd1("mfix-cmse-cve-2021-35465"),
3896flagpd1("mfix-cortex-a53-835769"),
3895m("mfix-cmse-cve-2021-35465"),
3896m("mfix-cortex-a53-835769"),
38973897m("mfloat128"),
38983898sepd1("mfloat-abi"),
38993899m("mfma"),
......@@ -3913,8 +3913,8 @@ flagpd1("mglobal-merge"),
39133913flagpd1("mgpopt"),
39143914m("mhard-float"),
39153915m("mhvx"),
3916flagpd1("mhvx-ieee-fp"),
3917flagpd1("mhvx-qfloat"),
3916m("mhvx-ieee-fp"),
3917m("mhvx-qfloat"),
39183918m("mhreset"),
39193919m("mhtm"),
39203920flagpd1("miamcu"),
......@@ -4005,7 +4005,7 @@ m("mno-avx512cd"),
40054005m("mno-avx512dq"),
40064006m("mno-avx512er"),
40074007m("mno-avx512f"),
4008flagpd1("mno-avx512fp16"),
4008m("mno-avx512fp16"),
40094009m("mno-avx512ifma"),
40104010m("mno-avx512pf"),
40114011m("mno-avx512vbmi"),
......@@ -4019,7 +4019,7 @@ flagpd1("mno-backchain"),
40194019m("mno-bmi"),
40204020m("mno-bmi2"),
40214021flagpd1("mno-branch-likely"),
4022flagpd1("mno-bti-at-return-twice"),
4022m("mno-bti-at-return-twice"),
40234023m("mno-bulk-memory"),
40244024flagpd1("mno-check-zero-division"),
40254025m("mno-cldemote"),
......@@ -4032,7 +4032,7 @@ flagpd1("mno-constant-cfstrings"),
40324032flagpd1("mno-constructor-aliases"),
40334033m("mno-crbits"),
40344034m("mno-crc"),
4035flagpd1("mno-crc32"),
4035m("mno-crc32"),
40364036m("mno-cumode"),
40374037m("mno-cx16"),
40384038m("mno-dsp"),
......@@ -4044,8 +4044,8 @@ flagpd1("mnoexecstack"),
40444044m("mno-execute-only"),
40454045flagpd1("mno-extern-sdata"),
40464046m("mno-f16c"),
4047flagpd1("mno-fix-cmse-cve-2021-35465"),
4048flagpd1("mno-fix-cortex-a53-835769"),
4047m("mno-fix-cmse-cve-2021-35465"),
4048m("mno-fix-cortex-a53-835769"),
40494049m("mno-float128"),
40504050m("mno-fma"),
40514051m("mno-fma4"),
......@@ -4058,8 +4058,8 @@ m("mno-ginv"),
40584058flagpd1("mno-global-merge"),
40594059flagpd1("mno-gpopt"),
40604060m("mno-hvx"),
4061flagpd1("mno-hvx-ieee-fp"),
4062flagpd1("mno-hvx-qfloat"),
4061m("mno-hvx-ieee-fp"),
4062m("mno-hvx-qfloat"),
40634063m("mno-hreset"),
40644064m("mno-htm"),
40654065flagpd1("mno-iamcu"),
......@@ -4137,7 +4137,7 @@ m("mno-reference-types"),
41374137m("mno-relax"),
41384138flagpd1("mno-relax-all"),
41394139flagpd1("mno-relax-pic-calls"),
4140flagpd1("mno-relaxed-simd"),
4140m("mno-relaxed-simd"),
41414141flagpd1("mno-restrict-it"),
41424142m("mno-retpoline"),
41434143m("mno-retpoline-external-thunk"),
......@@ -4259,7 +4259,7 @@ flagpd1("mrelax-pic-calls"),
42594259 .pd2 = true,
42604260 .psl = false,
42614261},
4262flagpd1("mrelaxed-simd"),
4262m("mrelaxed-simd"),
42634263sepd1("mrelocation-model"),
42644264flagpd1("mrestrict-it"),
42654265m("mretpoline"),
......@@ -4323,7 +4323,7 @@ m("mv66"),
43234323m("mv67"),
43244324flagpd1("mv67t"),
43254325m("mv68"),
4326flagpd1("mv69"),
4326m("mv69"),
43274327m("mvaes"),
43284328m("mvirt"),
43294329m("mvpclmulqdq"),
......@@ -5087,7 +5087,7 @@ joinpd1("msign-return-address-key="),
50875087.{
50885088 .name = "compress-debug-sections=",
50895089 .syntax = .joined,
5090 .zig_equivalent = .other,
5090 .zig_equivalent = .compress_debug_sections,
50915091 .pd1 = true,
50925092 .pd2 = true,
50935093 .psl = false,
src/link.zig+1-1
......@@ -123,7 +123,7 @@ pub const Options = struct {
123123 nxcompat: bool,
124124 dynamicbase: bool,
125125 linker_optimization: u8,
126 compress_debug_sections: ?CompressDebugSections,
126 compress_debug_sections: CompressDebugSections,
127127 bind_global_refs_locally: bool,
128128 import_memory: bool,
129129 import_table: bool,
src/link/Elf.zig+4-4
......@@ -1351,7 +1351,7 @@ fn linkWithLLD(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node) !v
13511351 link.hashAddSystemLibs(&man.hash, self.base.options.system_libs);
13521352 man.hash.add(allow_shlib_undefined);
13531353 man.hash.add(self.base.options.bind_global_refs_locally);
1354 man.hash.addOptional(self.base.options.compress_debug_sections);
1354 man.hash.add(self.base.options.compress_debug_sections);
13551355 man.hash.add(self.base.options.tsan);
13561356 man.hash.addOptionalBytes(self.base.options.sysroot);
13571357 man.hash.add(self.base.options.linker_optimization);
......@@ -1755,9 +1755,9 @@ fn linkWithLLD(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node) !v
17551755 try argv.append("--allow-shlib-undefined");
17561756 }
17571757
1758 if (self.base.options.compress_debug_sections) |how| {
1759 const arg = try std.fmt.allocPrint(arena, "--compress-debug-sections={s}", .{@tagName(how)});
1760 try argv.append(arg);
1758 switch (self.base.options.compress_debug_sections) {
1759 .none => {},
1760 .zlib => try argv.append("--compress-debug-sections=zlib"),
17611761 }
17621762
17631763 if (self.base.options.bind_global_refs_locally) {
src/main.zig+15-2
......@@ -443,8 +443,9 @@ const usage_build_generic =
443443 \\ -dynamic Force output to be dynamically linked
444444 \\ -static Force output to be statically linked
445445 \\ -Bsymbolic Bind global references locally
446 \\ --compress-debug-sections= Compress DWARF debug sections
447 \\ none|zlib
446 \\ --compress-debug-sections=[e] Debug section compression settings
447 \\ none No compression
448 \\ zlib Compression with deflate/inflate
448449 \\ --subsystem [subsystem] (Windows) /SUBSYSTEM:<subsystem> to the linker
449450 \\ --stack [size] Override default stack size
450451 \\ --image-base [addr] Set base address for executable image
......@@ -946,6 +947,8 @@ fn buildOutputType(
946947 linker_compress_debug_sections = std.meta.stringToEnum(link.CompressDebugSections, param) orelse {
947948 fatal("expected --compress-debug-sections=[none|zlib], found '{s}'", .{param});
948949 };
950 } else if (mem.eql(u8, arg, "--compress-debug-sections")) {
951 linker_compress_debug_sections = link.CompressDebugSections.zlib;
949952 } else if (mem.eql(u8, arg, "-pagezero_size")) {
950953 const next_arg = args_iter.next() orelse {
951954 fatal("expected parameter after {s}", .{arg});
......@@ -1648,6 +1651,15 @@ fn buildOutputType(
16481651 .weak_library => try system_libs.put(it.only_arg, .{ .weak = true }),
16491652 .weak_framework => try frameworks.put(gpa, it.only_arg, .{ .weak = true }),
16501653 .headerpad_max_install_names => headerpad_max_install_names = true,
1654 .compress_debug_sections => {
1655 if (it.only_arg.len == 0) {
1656 linker_compress_debug_sections = .zlib;
1657 } else {
1658 linker_compress_debug_sections = std.meta.stringToEnum(link.CompressDebugSections, it.only_arg) orelse {
1659 fatal("expected [none|zlib] after --compress-debug-sections, found '{s}'", .{it.only_arg});
1660 };
1661 }
1662 },
16511663 }
16521664 }
16531665 // Parse linker args.
......@@ -4617,6 +4629,7 @@ pub const ClangArgIterator = struct {
46174629 weak_library,
46184630 weak_framework,
46194631 headerpad_max_install_names,
4632 compress_debug_sections,
46204633 };
46214634
46224635 const Args = struct {
tools/update_clang_options.zig+8
......@@ -460,6 +460,14 @@ const known_options = [_]KnownOpt{
460460 .name = "headerpad_max_install_names",
461461 .ident = "headerpad_max_install_names",
462462 },
463 .{
464 .name = "compress-debug-sections",
465 .ident = "compress_debug_sections",
466 },
467 .{
468 .name = "compress-debug-sections=",
469 .ident = "compress_debug_sections",
470 },
463471};
464472
465473const blacklisted_options = [_][]const u8{};