From 247b35360900367c3678f2d8a6dd0d0693f17072 Mon Sep 17 00:00:00 2001 From: Michael Dusan Date: Sat, 29 Apr 2023 13:14:49 -0400 Subject: [PATCH 1/2] netbsd: restrict PT_LOAD workaround to dlibs only NetBSD supports executables with > 2 PT_LOAD segments but dynamic libraries continue to expect exactly 2 PT_LOAD segments. --- src/link/Elf.zig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/link/Elf.zig b/src/link/Elf.zig index 724ec76500..2e3c2f637e 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -1654,10 +1654,10 @@ fn linkWithLLD(self: *Elf, comp: *Compilation, prog_node: *std.Progress.Node) !v try argv.append("-pie"); } - if (self.base.options.link_mode == .Dynamic and target.os.tag == .netbsd) { + if (is_dyn_lib 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. + // ld.elf_so fails loading dynamic libraries with "not found" error. // See https://github.com/ziglang/zig/issues/9109 . try argv.append("--no-rosegment"); try argv.append("-znorelro"); From 8eaf2ff207242bdac5092b262079543274a72f75 Mon Sep 17 00:00:00 2001 From: Michael Dusan Date: Sat, 29 Apr 2023 13:14:51 -0400 Subject: [PATCH 2/2] cmake: add ZIG_PIE toggle for -Dpie - add pkg-maintainer-friendly option to enable PIE when building zig - fix `ZIG_PIE_ARG` syntax --- CMakeLists.txt | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c3d16f7b8..16c7dd3d0e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,6 +120,8 @@ if(ZIG_AR_WORKAROUND) string(REPLACE "" " ar" CMAKE_CXX_ARCHIVE_CREATE ${CMAKE_CXX_ARCHIVE_CREATE}) endif() +set(ZIG_PIE off CACHE BOOL "produce a position independent zig executable") + find_package(llvm 16) find_package(clang 16) find_package(lld 16) @@ -671,7 +673,12 @@ if(ZIG_STATIC) endif() add_library(zigcpp STATIC ${ZIG_CPP_SOURCES}) -set_target_properties(zigcpp PROPERTIES COMPILE_FLAGS ${EXE_CXX_FLAGS}) +if(ZIG_PIE) + set(ZIGCPP_CXX_FLAGS "${EXE_CXX_FLAGS} -fPIC") +else() + set(ZIGCPP_CXX_FLAGS "${EXE_CXX_FLAGS}") +endif() +set_target_properties(zigcpp PROPERTIES COMPILE_FLAGS ${ZIGCPP_CXX_FLAGS}) target_link_libraries(zigcpp LINK_PUBLIC ${CLANG_LIBRARIES} @@ -823,10 +830,10 @@ else() set(ZIG_STATIC_ARG "") endif() -if(CMAKE_POSITION_INDEPENDENT_CODE) - set(ZIG_PIE_ARG="-Dpie") +if(CMAKE_POSITION_INDEPENDENT_CODE OR ZIG_PIE) + set(ZIG_PIE_ARG "-Dpie") else() - set(ZIG_PIE_ARG="") + set(ZIG_PIE_ARG "") endif() set(ZIG_BUILD_ARGS