diff --git a/src/Compilation.zig b/src/Compilation.zig index c1321e40cf..597f5cffff 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -878,6 +878,9 @@ pub const InitOptions = struct { linker_shared_memory: bool = false, linker_global_base: ?u64 = null, linker_export_symbol_names: []const []const u8 = &.{}, + linker_print_gc_sections: bool = false, + linker_print_icf_sections: bool = false, + linker_print_map: bool = false, each_lib_rpath: ?bool = null, build_id: ?bool = null, disable_c_depfile: bool = false, @@ -1727,6 +1730,9 @@ pub fn create(gpa: Allocator, options: InitOptions) !*Compilation { .shared_memory = options.linker_shared_memory, .global_base = options.linker_global_base, .export_symbol_names = options.linker_export_symbol_names, + .print_gc_sections = options.linker_print_gc_sections, + .print_icf_sections = options.linker_print_icf_sections, + .print_map = options.linker_print_map, .z_nodelete = options.linker_z_nodelete, .z_notext = options.linker_z_notext, .z_defs = options.linker_z_defs, diff --git a/src/link.zig b/src/link.zig index a8845a0d57..7439f8d59e 100644 --- a/src/link.zig +++ b/src/link.zig @@ -166,6 +166,9 @@ pub const Options = struct { version_script: ?[]const u8, soname: ?[]const u8, llvm_cpu_features: ?[*:0]const u8, + print_gc_sections: bool, + print_icf_sections: bool, + print_map: bool, objects: []Compilation.LinkObject, framework_dirs: []const []const u8, diff --git a/src/link/Elf.zig b/src/link/Elf.zig index e63fa07187..1d49198937 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -1482,6 +1482,18 @@ fn linkWithLLD(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node) !v try argv.append("--gc-sections"); } + if (self.base.options.print_gc_sections) { + try argv.append("--print-gc-sections"); + } + + if (self.base.options.print_icf_sections) { + try argv.append("--print-icf-sections"); + } + + if (self.base.options.print_map) { + try argv.append("--print-map"); + } + if (self.base.options.eh_frame_hdr) { try argv.append("--eh-frame-hdr"); } diff --git a/src/main.zig b/src/main.zig index 6263a6a402..039dacc877 100644 --- a/src/main.zig +++ b/src/main.zig @@ -691,6 +691,9 @@ fn buildOutputType( var linker_max_memory: ?u64 = null; var linker_shared_memory: bool = false; var linker_global_base: ?u64 = null; + var linker_print_gc_sections: bool = false; + var linker_print_icf_sections: bool = false; + var linker_print_map: bool = false; var linker_z_nodelete = false; var linker_z_notext = false; var linker_z_defs = false; @@ -1816,6 +1819,12 @@ fn buildOutputType( linker_gc_sections = true; } else if (mem.eql(u8, arg, "--no-gc-sections")) { linker_gc_sections = false; + } else if (mem.eql(u8, arg, "--print-gc-sections")) { + linker_print_gc_sections = true; + } else if (mem.eql(u8, arg, "--print-icf-sections")) { + linker_print_icf_sections = true; + } else if (mem.eql(u8, arg, "--print-map")) { + linker_print_map = true; } else if (mem.eql(u8, arg, "--allow-shlib-undefined") or mem.eql(u8, arg, "-allow-shlib-undefined")) { @@ -2911,6 +2920,9 @@ fn buildOutputType( .linker_initial_memory = linker_initial_memory, .linker_max_memory = linker_max_memory, .linker_shared_memory = linker_shared_memory, + .linker_print_gc_sections = linker_print_gc_sections, + .linker_print_icf_sections = linker_print_icf_sections, + .linker_print_map = linker_print_map, .linker_global_base = linker_global_base, .linker_export_symbol_names = linker_export_symbol_names.items, .linker_z_nodelete = linker_z_nodelete,