From a7aa3ca66c271bc6f2905e4c3f0dd78763584d5b Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Wed, 12 May 2021 22:25:20 -0700 Subject: stage2: build and provide libunwind when compiling for native libc 5ac91794cce8bd53916a378815be01e4365d53d9 made Zig link against the system libc when targeting the native C ABI. However this made it stop putting libunwind.a on the linker line when it needed to sometimes, causing undefined symbols when linking against C++ code. --- src/Compilation.zig | 1 - src/link/Elf.zig | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/Compilation.zig b/src/Compilation.zig index 992b1685df..70a61af57a 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -3278,7 +3278,6 @@ fn wantBuildLibUnwindFromSource(comp: *Compilation) bool { .Exe => true, }; return comp.bin_file.options.link_libc and is_exe_or_dyn_lib and - comp.bin_file.options.libc_installation == null and comp.bin_file.options.object_format != .c and target_util.libcNeedsLibUnwind(comp.getTarget()); } diff --git a/src/link/Elf.zig b/src/link/Elf.zig index 7b1c5474a7..83b35cf12c 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -1648,6 +1648,9 @@ fn linkWithLLD(self: *Elf, comp: *Compilation) !void { // libc dep if (self.base.options.link_libc) { if (self.base.options.libc_installation != null) { + if (target_util.libcNeedsLibUnwind(target)) { + try argv.append(comp.libunwind_static_lib.?.full_object_path); + } const needs_grouping = self.base.options.link_mode == .Static; if (needs_grouping) try argv.append("--start-group"); // This matches the order of glibc.libs -- cgit v1.2.3