| author | |
| committer | |
| log | 2b99182e25e045109b090a794bb06295b09a0eeb |
| tree | 4cbb93210359b2b1f7e8359752807c8eb4dcf353 |
| parent | 1f410b500c8dbe33191a54a4ae02a6fb0febec46 |
* 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 { |
| 1688 | 1688 | .no_builtin = options.no_builtin, |
| 1689 | 1689 | .allow_shlib_undefined = options.linker_allow_shlib_undefined, |
| 1690 | 1690 | .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, | |
| 1692 | 1692 | .import_memory = options.linker_import_memory orelse false, |
| 1693 | 1693 | .import_table = options.linker_import_table, |
| 1694 | 1694 | .export_table = options.linker_export_table, |
| ... | ... | @@ -2461,7 +2461,7 @@ fn addNonIncrementalStuffToCacheManifest(comp: *Compilation, man: *Cache.Manifes |
| 2461 | 2461 | man.hash.add(comp.bin_file.options.z_now); |
| 2462 | 2462 | man.hash.add(comp.bin_file.options.z_relro); |
| 2463 | 2463 | 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); | |
| 2465 | 2465 | man.hash.add(comp.bin_file.options.include_compiler_rt); |
| 2466 | 2466 | if (comp.bin_file.options.link_libc) { |
| 2467 | 2467 | 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"), |
| 2308 | 2308 | .{ |
| 2309 | 2309 | .name = "compress-debug-sections", |
| 2310 | 2310 | .syntax = .flag, |
| 2311 | .zig_equivalent = .other, | |
| 2311 | .zig_equivalent = .compress_debug_sections, | |
| 2312 | 2312 | .pd1 = true, |
| 2313 | 2313 | .pd2 = true, |
| 2314 | 2314 | .psl = false, |
| ... | ... | @@ -3834,7 +3834,7 @@ m("mavx512cd"), |
| 3834 | 3834 | m("mavx512dq"), |
| 3835 | 3835 | m("mavx512er"), |
| 3836 | 3836 | m("mavx512f"), |
| 3837 | flagpd1("mavx512fp16"), | |
| 3837 | m("mavx512fp16"), | |
| 3838 | 3838 | m("mavx512ifma"), |
| 3839 | 3839 | m("mavx512pf"), |
| 3840 | 3840 | m("mavx512vbmi"), |
| ... | ... | @@ -3867,7 +3867,7 @@ flagpd1("mconstructor-aliases"), |
| 3867 | 3867 | flagpd1("mcpu=?"), |
| 3868 | 3868 | m("mcrbits"), |
| 3869 | 3869 | m("mcrc"), |
| 3870 | flagpd1("mcrc32"), | |
| 3870 | m("mcrc32"), | |
| 3871 | 3871 | m("mcumode"), |
| 3872 | 3872 | m("mcx16"), |
| 3873 | 3873 | sepd1("mdebug-pass"), |
| ... | ... | @@ -3892,8 +3892,8 @@ flagpd1("mfancy-math-387"), |
| 3892 | 3892 | flagpd1("mfentry"), |
| 3893 | 3893 | flagpd1("mfix4300"), |
| 3894 | 3894 | flagpd1("mfix-and-continue"), |
| 3895 | flagpd1("mfix-cmse-cve-2021-35465"), | |
| 3896 | flagpd1("mfix-cortex-a53-835769"), | |
| 3895 | m("mfix-cmse-cve-2021-35465"), | |
| 3896 | m("mfix-cortex-a53-835769"), | |
| 3897 | 3897 | m("mfloat128"), |
| 3898 | 3898 | sepd1("mfloat-abi"), |
| 3899 | 3899 | m("mfma"), |
| ... | ... | @@ -3913,8 +3913,8 @@ flagpd1("mglobal-merge"), |
| 3913 | 3913 | flagpd1("mgpopt"), |
| 3914 | 3914 | m("mhard-float"), |
| 3915 | 3915 | m("mhvx"), |
| 3916 | flagpd1("mhvx-ieee-fp"), | |
| 3917 | flagpd1("mhvx-qfloat"), | |
| 3916 | m("mhvx-ieee-fp"), | |
| 3917 | m("mhvx-qfloat"), | |
| 3918 | 3918 | m("mhreset"), |
| 3919 | 3919 | m("mhtm"), |
| 3920 | 3920 | flagpd1("miamcu"), |
| ... | ... | @@ -4005,7 +4005,7 @@ m("mno-avx512cd"), |
| 4005 | 4005 | m("mno-avx512dq"), |
| 4006 | 4006 | m("mno-avx512er"), |
| 4007 | 4007 | m("mno-avx512f"), |
| 4008 | flagpd1("mno-avx512fp16"), | |
| 4008 | m("mno-avx512fp16"), | |
| 4009 | 4009 | m("mno-avx512ifma"), |
| 4010 | 4010 | m("mno-avx512pf"), |
| 4011 | 4011 | m("mno-avx512vbmi"), |
| ... | ... | @@ -4019,7 +4019,7 @@ flagpd1("mno-backchain"), |
| 4019 | 4019 | m("mno-bmi"), |
| 4020 | 4020 | m("mno-bmi2"), |
| 4021 | 4021 | flagpd1("mno-branch-likely"), |
| 4022 | flagpd1("mno-bti-at-return-twice"), | |
| 4022 | m("mno-bti-at-return-twice"), | |
| 4023 | 4023 | m("mno-bulk-memory"), |
| 4024 | 4024 | flagpd1("mno-check-zero-division"), |
| 4025 | 4025 | m("mno-cldemote"), |
| ... | ... | @@ -4032,7 +4032,7 @@ flagpd1("mno-constant-cfstrings"), |
| 4032 | 4032 | flagpd1("mno-constructor-aliases"), |
| 4033 | 4033 | m("mno-crbits"), |
| 4034 | 4034 | m("mno-crc"), |
| 4035 | flagpd1("mno-crc32"), | |
| 4035 | m("mno-crc32"), | |
| 4036 | 4036 | m("mno-cumode"), |
| 4037 | 4037 | m("mno-cx16"), |
| 4038 | 4038 | m("mno-dsp"), |
| ... | ... | @@ -4044,8 +4044,8 @@ flagpd1("mnoexecstack"), |
| 4044 | 4044 | m("mno-execute-only"), |
| 4045 | 4045 | flagpd1("mno-extern-sdata"), |
| 4046 | 4046 | m("mno-f16c"), |
| 4047 | flagpd1("mno-fix-cmse-cve-2021-35465"), | |
| 4048 | flagpd1("mno-fix-cortex-a53-835769"), | |
| 4047 | m("mno-fix-cmse-cve-2021-35465"), | |
| 4048 | m("mno-fix-cortex-a53-835769"), | |
| 4049 | 4049 | m("mno-float128"), |
| 4050 | 4050 | m("mno-fma"), |
| 4051 | 4051 | m("mno-fma4"), |
| ... | ... | @@ -4058,8 +4058,8 @@ m("mno-ginv"), |
| 4058 | 4058 | flagpd1("mno-global-merge"), |
| 4059 | 4059 | flagpd1("mno-gpopt"), |
| 4060 | 4060 | m("mno-hvx"), |
| 4061 | flagpd1("mno-hvx-ieee-fp"), | |
| 4062 | flagpd1("mno-hvx-qfloat"), | |
| 4061 | m("mno-hvx-ieee-fp"), | |
| 4062 | m("mno-hvx-qfloat"), | |
| 4063 | 4063 | m("mno-hreset"), |
| 4064 | 4064 | m("mno-htm"), |
| 4065 | 4065 | flagpd1("mno-iamcu"), |
| ... | ... | @@ -4137,7 +4137,7 @@ m("mno-reference-types"), |
| 4137 | 4137 | m("mno-relax"), |
| 4138 | 4138 | flagpd1("mno-relax-all"), |
| 4139 | 4139 | flagpd1("mno-relax-pic-calls"), |
| 4140 | flagpd1("mno-relaxed-simd"), | |
| 4140 | m("mno-relaxed-simd"), | |
| 4141 | 4141 | flagpd1("mno-restrict-it"), |
| 4142 | 4142 | m("mno-retpoline"), |
| 4143 | 4143 | m("mno-retpoline-external-thunk"), |
| ... | ... | @@ -4259,7 +4259,7 @@ flagpd1("mrelax-pic-calls"), |
| 4259 | 4259 | .pd2 = true, |
| 4260 | 4260 | .psl = false, |
| 4261 | 4261 | }, |
| 4262 | flagpd1("mrelaxed-simd"), | |
| 4262 | m("mrelaxed-simd"), | |
| 4263 | 4263 | sepd1("mrelocation-model"), |
| 4264 | 4264 | flagpd1("mrestrict-it"), |
| 4265 | 4265 | m("mretpoline"), |
| ... | ... | @@ -4323,7 +4323,7 @@ m("mv66"), |
| 4323 | 4323 | m("mv67"), |
| 4324 | 4324 | flagpd1("mv67t"), |
| 4325 | 4325 | m("mv68"), |
| 4326 | flagpd1("mv69"), | |
| 4326 | m("mv69"), | |
| 4327 | 4327 | m("mvaes"), |
| 4328 | 4328 | m("mvirt"), |
| 4329 | 4329 | m("mvpclmulqdq"), |
| ... | ... | @@ -5087,7 +5087,7 @@ joinpd1("msign-return-address-key="), |
| 5087 | 5087 | .{ |
| 5088 | 5088 | .name = "compress-debug-sections=", |
| 5089 | 5089 | .syntax = .joined, |
| 5090 | .zig_equivalent = .other, | |
| 5090 | .zig_equivalent = .compress_debug_sections, | |
| 5091 | 5091 | .pd1 = true, |
| 5092 | 5092 | .pd2 = true, |
| 5093 | 5093 | .psl = false, |
src/link.zig+1-1| ... | ... | @@ -123,7 +123,7 @@ pub const Options = struct { |
| 123 | 123 | nxcompat: bool, |
| 124 | 124 | dynamicbase: bool, |
| 125 | 125 | linker_optimization: u8, |
| 126 | compress_debug_sections: ?CompressDebugSections, | |
| 126 | compress_debug_sections: CompressDebugSections, | |
| 127 | 127 | bind_global_refs_locally: bool, |
| 128 | 128 | import_memory: bool, |
| 129 | 129 | 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 |
| 1351 | 1351 | link.hashAddSystemLibs(&man.hash, self.base.options.system_libs); |
| 1352 | 1352 | man.hash.add(allow_shlib_undefined); |
| 1353 | 1353 | 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); | |
| 1355 | 1355 | man.hash.add(self.base.options.tsan); |
| 1356 | 1356 | man.hash.addOptionalBytes(self.base.options.sysroot); |
| 1357 | 1357 | man.hash.add(self.base.options.linker_optimization); |
| ... | ... | @@ -1755,9 +1755,9 @@ fn linkWithLLD(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node) !v |
| 1755 | 1755 | try argv.append("--allow-shlib-undefined"); |
| 1756 | 1756 | } |
| 1757 | 1757 | |
| 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"), | |
| 1761 | 1761 | } |
| 1762 | 1762 | |
| 1763 | 1763 | if (self.base.options.bind_global_refs_locally) { |
src/main.zig+15-2| ... | ... | @@ -443,8 +443,9 @@ const usage_build_generic = |
| 443 | 443 | \\ -dynamic Force output to be dynamically linked |
| 444 | 444 | \\ -static Force output to be statically linked |
| 445 | 445 | \\ -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 | |
| 448 | 449 | \\ --subsystem [subsystem] (Windows) /SUBSYSTEM:<subsystem> to the linker |
| 449 | 450 | \\ --stack [size] Override default stack size |
| 450 | 451 | \\ --image-base [addr] Set base address for executable image |
| ... | ... | @@ -946,6 +947,8 @@ fn buildOutputType( |
| 946 | 947 | linker_compress_debug_sections = std.meta.stringToEnum(link.CompressDebugSections, param) orelse { |
| 947 | 948 | fatal("expected --compress-debug-sections=[none|zlib], found '{s}'", .{param}); |
| 948 | 949 | }; |
| 950 | } else if (mem.eql(u8, arg, "--compress-debug-sections")) { | |
| 951 | linker_compress_debug_sections = link.CompressDebugSections.zlib; | |
| 949 | 952 | } else if (mem.eql(u8, arg, "-pagezero_size")) { |
| 950 | 953 | const next_arg = args_iter.next() orelse { |
| 951 | 954 | fatal("expected parameter after {s}", .{arg}); |
| ... | ... | @@ -1648,6 +1651,15 @@ fn buildOutputType( |
| 1648 | 1651 | .weak_library => try system_libs.put(it.only_arg, .{ .weak = true }), |
| 1649 | 1652 | .weak_framework => try frameworks.put(gpa, it.only_arg, .{ .weak = true }), |
| 1650 | 1653 | .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 | }, | |
| 1651 | 1663 | } |
| 1652 | 1664 | } |
| 1653 | 1665 | // Parse linker args. |
| ... | ... | @@ -4617,6 +4629,7 @@ pub const ClangArgIterator = struct { |
| 4617 | 4629 | weak_library, |
| 4618 | 4630 | weak_framework, |
| 4619 | 4631 | headerpad_max_install_names, |
| 4632 | compress_debug_sections, | |
| 4620 | 4633 | }; |
| 4621 | 4634 | |
| 4622 | 4635 | const Args = struct { |
tools/update_clang_options.zig+8| ... | ... | @@ -460,6 +460,14 @@ const known_options = [_]KnownOpt{ |
| 460 | 460 | .name = "headerpad_max_install_names", |
| 461 | 461 | .ident = "headerpad_max_install_names", |
| 462 | 462 | }, |
| 463 | .{ | |
| 464 | .name = "compress-debug-sections", | |
| 465 | .ident = "compress_debug_sections", | |
| 466 | }, | |
| 467 | .{ | |
| 468 | .name = "compress-debug-sections=", | |
| 469 | .ident = "compress_debug_sections", | |
| 470 | }, | |
| 463 | 471 | }; |
| 464 | 472 | |
| 465 | 473 | const blacklisted_options = [_][]const u8{}; |