From 874e17fe608a7b8d4324dada32664fcfe44978cd Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 20 Jan 2025 20:06:25 -0800 Subject: embrace the future slightly less Turns out that even modern Debian aarch64 glibc libc_nonshared.a has references to _init, meaning that the previous commit caused a regression when trying to build any -lc executable on that target. This commit backs out the changes to LibCInstallation. There is still a fork in the road coming up when the self-hosted ELF linker becomes load bearing on that target. --- src/Compilation.zig | 2 ++ src/link/Elf.zig | 2 ++ 2 files changed, 4 insertions(+) (limited to 'src') diff --git a/src/Compilation.zig b/src/Compilation.zig index a1fdc4fd1a..b85033264a 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -6743,8 +6743,10 @@ fn getCrtPathsInner( return .{ .crt0 = if (basenames.crt0) |basename| try crtFilePath(crt_files, basename) else null, + .crti = if (basenames.crti) |basename| try crtFilePath(crt_files, basename) else null, .crtbegin = if (basenames.crtbegin) |basename| try crtFilePath(crt_files, basename) else null, .crtend = if (basenames.crtend) |basename| try crtFilePath(crt_files, basename) else null, + .crtn = if (basenames.crtn) |basename| try crtFilePath(crt_files, basename) else null, }; } diff --git a/src/link/Elf.zig b/src/link/Elf.zig index 957675fb0e..ea2fa56a5d 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -1869,6 +1869,7 @@ fn linkWithLLD(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id, prog_node: s // csu prelude const csu = try comp.getCrtPaths(arena); if (csu.crt0) |p| try argv.append(try p.toString(arena)); + if (csu.crti) |p| try argv.append(try p.toString(arena)); if (csu.crtbegin) |p| try argv.append(try p.toString(arena)); for (self.rpath_table.keys()) |rpath| { @@ -2060,6 +2061,7 @@ fn linkWithLLD(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id, prog_node: s // crt postlude if (csu.crtend) |p| try argv.append(try p.toString(arena)); + if (csu.crtn) |p| try argv.append(try p.toString(arena)); if (self.base.allow_shlib_undefined) { try argv.append("--allow-shlib-undefined"); -- cgit v1.2.3