authorgravatar for ryan@zinascii.comRyan Zezeski <ryan@zinascii.com> 2023-09-26 16:15:00-06:00
committergravatar for ryan@zinascii.comRyan Zezeski <ryan@zinascii.com> 2023-09-30 11:38:56-06:00
log54ad5f31c6efd150406111620a14e56cf1bae1cd
tree73473a485a263137e6fdef81bbdfd9dadefcbf40
parent68bcd7ddd44422b228852cd36158048becfbeea8

solaris: hard-code ABI and dynamic linker

Solaris/illumos is multi-lib, so you can't rely on an arbitrary executable to give you the correct dynamic linker. Besides, it's always the same path.

2 files changed, 5 insertions(+), 3 deletions(-)

lib/std/target.zig+2-2
......@@ -526,7 +526,6 @@ pub const Target = struct {
526526 .cloudabi,
527527 .dragonfly,
528528 .lv2,
529 .solaris,
530529 .zos,
531530 .minix,
532531 .rtems,
......@@ -569,6 +568,7 @@ pub const Target = struct {
569568 .driverkit,
570569 .shadermodel,
571570 .liteos, // TODO: audit this
571 .solaris,
572572 => return .none,
573573 }
574574 }
......@@ -1575,7 +1575,7 @@ pub const Target = struct {
15751575 .netbsd => return copy(&result, "/libexec/ld.elf_so"),
15761576 .openbsd => return copy(&result, "/usr/libexec/ld.so"),
15771577 .dragonfly => return copy(&result, "/libexec/ld-elf.so.2"),
1578 .solaris => return copy(&result, "/lib/64/ld.so.1"),
1578 .solaris => return copy(&result, "/usr/lib/amd64/ld.so.1"),
15791579 .linux => switch (self.cpu.arch) {
15801580 .x86,
15811581 .sparc,
lib/std/zig/system/NativeTargetInfo.zig+3-1
......@@ -257,10 +257,12 @@ fn detectAbiAndDynamicLinker(
257257) DetectError!NativeTargetInfo {
258258 const native_target_has_ld = comptime builtin.target.hasDynamicLinker();
259259 const is_linux = builtin.target.os.tag == .linux;
260 const is_solaris = builtin.target.os.tag == .solaris;
260261 const have_all_info = cross_target.dynamic_linker.get() != null and
261262 cross_target.abi != null and (!is_linux or cross_target.abi.?.isGnu());
262263 const os_is_non_native = cross_target.os_tag != null;
263 if (!native_target_has_ld or have_all_info or os_is_non_native) {
264 // The Solaris/illumos environment is always the same.
265 if (!native_target_has_ld or have_all_info or os_is_non_native or is_solaris) {
264266 return defaultAbiAndDynamicLinker(cpu, os, cross_target);
265267 }
266268 if (cross_target.abi) |abi| {