From a6e65f3a0ea4f8315be50f91338e4526b006f9d8 Mon Sep 17 00:00:00 2001 From: xavier Date: Sun, 23 May 2021 16:53:47 +0200 Subject: [PATCH] keep statically linked libc++ symbols hidden. --- src/libcxx.zig | 5 ++++- src/libunwind.zig | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/libcxx.zig b/src/libcxx.zig index 39c5fabedd..4816637e2d 100644 --- a/src/libcxx.zig +++ b/src/libcxx.zig @@ -129,6 +129,8 @@ pub fn buildLibCXX(comp: *Compilation) !void { try cflags.append("-D_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS"); try cflags.append("-D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS"); try cflags.append("-D_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS"); + try cflags.append("-fvisibility=hidden"); + try cflags.append("-fvisibility-inlines-hidden"); if (target.abi.isMusl()) { try cflags.append("-D_LIBCPP_HAS_MUSL_LIBC"); @@ -144,7 +146,6 @@ pub fn buildLibCXX(comp: *Compilation) !void { try cflags.append("-fPIC"); } try cflags.append("-nostdinc++"); - try cflags.append("-fvisibility-inlines-hidden"); try cflags.append("-std=c++14"); try cflags.append("-Wno-user-defined-literals"); @@ -249,6 +250,8 @@ pub fn buildLibCXXABI(comp: *Compilation) !void { try cflags.append("-D_LIBCXXABI_BUILDING_LIBRARY"); try cflags.append("-D_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS"); try cflags.append("-D_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS"); + try cflags.append("-fvisibility=hidden"); + try cflags.append("-fvisibility-inlines-hidden"); if (target.abi.isMusl()) { try cflags.append("-D_LIBCPP_HAS_MUSL_LIBC"); diff --git a/src/libunwind.zig b/src/libunwind.zig index 7e1fe3f9b7..d918249544 100644 --- a/src/libunwind.zig +++ b/src/libunwind.zig @@ -69,6 +69,8 @@ pub fn buildStaticLib(comp: *Compilation) !void { } try cflags.append("-D_LIBUNWIND_DISABLE_VISIBILITY_ANNOTATIONS"); try cflags.append("-Wa,--noexecstack"); + try cflags.append("-fvisibility=hidden"); + try cflags.append("-fvisibility-inlines-hidden"); // This is intentionally always defined because the macro definition means, should it only // build for the target specified by compiler defines. Since we pass -target the compiler