aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMotiejus Jakštys <motiejus@jakstys.lt>2022-05-09 09:44:14 +0300
committerAndrew Kelley <andrew@ziglang.org>2022-09-08 22:30:32 -0400
commita833bdcd7e6fcfee6e9cc33a3f7de78b16a36941 (patch)
tree5b45c1662789e9743d328356167b3dce72495bfd
parentab4b26d8a6a36ccf75af8e25f0a1f7b88063b76f (diff)
downloadzig-a833bdcd7e6fcfee6e9cc33a3f7de78b16a36941.tar.gz
zig-a833bdcd7e6fcfee6e9cc33a3f7de78b16a36941.zip
[ld] add --print-* for diagnostics
This adds the following for passthrough to lld: - `--print-gc-sections` - `--print-icf-sections` - `--print-map` I am not adding these to the cache manifest, since it does not change the produced artifacts. Tested with an example from #11398: it successfully prints the resulting map and the GC'd sections.
-rw-r--r--src/Compilation.zig6
-rw-r--r--src/link.zig3
-rw-r--r--src/link/Elf.zig12
-rw-r--r--src/main.zig12
4 files changed, 33 insertions, 0 deletions
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,