@@ -325,9 +325,18 @@ if(CLR_CMAKE_HOST_LINUX)
325325 add_compile_options ($<$<COMPILE_LANGUAGE :ASM >:-Wa ,--noexecstack >)
326326 add_linker_flag (-Wl,--build-id=sha1 )
327327 add_linker_flag (-Wl,-z,relro,-z,now )
328- elseif (CLR_CMAKE_HOST_FREEBSD OR CLR_CMAKE_HOST_OPENBSD )
328+ elseif (CLR_CMAKE_HOST_FREEBSD)
329329 add_compile_options ($<$<COMPILE_LANGUAGE :ASM >:-Wa ,--noexecstack >)
330330 add_linker_flag ("-Wl,--build-id=sha1" )
331+ elseif (CLR_CMAKE_HOST_OPENBSD)
332+ add_compile_options ($<$<COMPILE_LANGUAGE :ASM >:-Wa ,--noexecstack >)
333+ add_linker_flag ("-Wl,--build-id=sha1" )
334+ # OpenBSD's ld.so can't resolve native TLS relocs in a .so; rely on clang's default
335+ # emulated TLS (don't pass -fno-emulated-tls).
336+ # Allow W+X mappings (JIT) via the PT_OPENBSD_WXNEEDED note; needs a wxallowed mount.
337+ add_linker_flag ("-Wl,-z,wxneeded" )
338+ # The PAL's hand-written asm lacks endbr64 landing pads, so disable branch-target CFI.
339+ add_linker_flag ("-Wl,-z,nobtcfi" )
331340elseif (CLR_CMAKE_HOST_SUNOS)
332341 add_compile_options ($<$<COMPILE_LANGUAGE :ASM >:-Wa ,--noexecstack >)
333342 set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector" )
@@ -847,6 +856,20 @@ else(CLR_CMAKE_TARGET_UNIX)
847856 add_compile_definitions ($<$<NOT :$<BOOL :$<TARGET_PROPERTY :IGNORE_DEFAULT_TARGET_OS >>>:TARGET_WINDOWS >)
848857endif (CLR_CMAKE_TARGET_UNIX )
849858
859+ # OpenBSD only exposes its libunwind symbols through the LLVM C++ runtime
860+ # (libc++/libc++abi), so default to those there. An explicit selection via
861+ # CLR_CMAKE_CXX_STANDARD_LIBRARY/CLR_CMAKE_CXX_ABI_LIBRARY (applied by the cross
862+ # toolchain file) still takes precedence.
863+ if (CLR_CMAKE_TARGET_OPENBSD)
864+ if (NOT CLR_CMAKE_CXX_STANDARD_LIBRARY)
865+ add_compile_options ($<$<COMPILE_LANG_AND_ID :CXX ,Clang >:--stdlib =libc ++>)
866+ add_link_options ($<$<LINK_LANG_AND_ID :CXX ,Clang >:--stdlib =libc ++>)
867+ endif ()
868+ if (NOT CLR_CMAKE_CXX_ABI_LIBRARY)
869+ add_link_options ("LINKER:-lc++abi" )
870+ endif ()
871+ endif ()
872+
850873if (CLR_CMAKE_HOST_UNIX_ARM)
851874 if (NOT DEFINED CLR_ARM_FPU_TYPE)
852875 set (CLR_ARM_FPU_TYPE vfpv3)
0 commit comments