From 162b92c93ee36ab8c8668cb22f63a298cadd6d38 Mon Sep 17 00:00:00 2001 From: Michael Dusan Date: Wed, 16 Jun 2021 00:35:20 -0400 Subject: [PATCH] netbsd: add args to limit number of PT_LOAD segs NetBSD expects 2 PT_LOAD segments in a shared object, otherwise ld.elf_so fails to load, emitting a general "not found" error. Workaround issue by adding args `--no-rosegment` and `-znorelro`. see #9109 --- src/link/Elf.zig | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/link/Elf.zig b/src/link/Elf.zig index 5d99a4c3f6..5bf20fdd2c 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -1496,6 +1496,15 @@ fn linkWithLLD(self: *Elf, comp: *Compilation) !void { try argv.append("-pie"); } + if (self.base.options.link_mode == .Dynamic and target.os.tag == .netbsd) { + // Add options to produce shared objects with only 2 PT_LOAD segments. + // NetBSD expects 2 PT_LOAD segments in a shared object, otherwise + // ld.elf_so fails to load, emitting a general "not found" error. + // See https://github.com/ziglang/zig/issues/9109 . + try argv.append("--no-rosegment"); + try argv.append("-znorelro"); + } + try argv.append("-o"); try argv.append(full_out_path);