From 4e850c75d2fafd05d4e2e3f3ac1ac00c4b55d18a Mon Sep 17 00:00:00 2001 From: Koundinya Veluri Date: Wed, 11 Aug 2021 18:01:23 -0700 Subject: [PATCH] Enable `EHCONT` and `CETCOMPAT` for some binaries on Windows (#56173) * Enable `EHCONT` and `CETCOMPAT` for some binaries on Windows - Followup to https://github.com/dotnet/runtime/pull/55942 - Intended to be merged into a PR that updates to use new PGO profile data collected with the above change - Enabled `/guard:ehcont` as a linker option for EXEs and DLLs - Enabled `/cetcompat` as a linker option for DLLs --- eng/native/configurecompiler.cmake | 17 ++++++----------- src/coreclr/pgosupport.cmake | 7 ------- src/mono/dlls/dbgshim/CMakeLists.txt | 1 + src/mono/dlls/mscordbi/CMakeLists.txt | 1 + 4 files changed, 8 insertions(+), 18 deletions(-) diff --git a/eng/native/configurecompiler.cmake b/eng/native/configurecompiler.cmake index 39460f3..496384c 100644 --- a/eng/native/configurecompiler.cmake +++ b/eng/native/configurecompiler.cmake @@ -49,9 +49,6 @@ add_compile_definitions("$<$,$>:NDEB if (MSVC) add_linker_flag(/guard:cf) - #if (CLR_CMAKE_HOST_ARCH_AMD64) - # add_linker_flag(/guard:ehcont) - #endif (CLR_CMAKE_HOST_ARCH_AMD64) # Linker flags # @@ -74,10 +71,6 @@ if (MSVC) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /IGNORE:4197,4013,4254,4070,4221") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SUBSYSTEM:WINDOWS,${WINDOWS_SUBSYSTEM_VERSION}") - #if (CLR_CMAKE_HOST_ARCH_AMD64) - # set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /CETCOMPAT") - #endif (CLR_CMAKE_HOST_ARCH_AMD64) - set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /IGNORE:4221") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEBUG") @@ -572,12 +565,14 @@ if (MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /guard:cf") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /guard:cf") - # Enable EH-continuation table for native components for amd64 builds - # Added using variables instead of add_compile_options to let individual projects override it - if (CLR_CMAKE_HOST_ARCH_AMD64) + # Enable EH-continuation table and CET-compatibility for native components for amd64 builds except for components of the Mono + # runtime. Added some switches using variables instead of add_compile_options to let individual projects override it. + if (CLR_CMAKE_HOST_ARCH_AMD64 AND NOT CLR_CMAKE_RUNTIME_MONO) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /guard:ehcont") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /guard:ehcont") - set(CMAKE_ASM_MASM_FLAGS "${CMAKE_C_FLAGS} /guard:ehcont") + set(CMAKE_ASM_MASM_FLAGS "${CMAKE_ASM_MASM_FLAGS} /guard:ehcont") + add_linker_flag(/guard:ehcont) + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /CETCOMPAT") endif (CLR_CMAKE_HOST_ARCH_AMD64) # Statically linked CRT (libcmt[d].lib, libvcruntime[d].lib and libucrt[d].lib) by default. This is done to avoid diff --git a/src/coreclr/pgosupport.cmake b/src/coreclr/pgosupport.cmake index 7c20ca3..1c1ce53 100644 --- a/src/coreclr/pgosupport.cmake +++ b/src/coreclr/pgosupport.cmake @@ -20,13 +20,6 @@ function(add_pgo TargetName) if(CLR_CMAKE_HOST_WIN32) set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS_RELEASE " /LTCG /GENPROFILE") set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS_RELWITHDEBINFO " /LTCG /GENPROFILE") - - if (CLR_CMAKE_HOST_ARCH_AMD64) - # The /guard:ehcont and /CETCOMPAT switches here are temporary and will be moved to a more global location once - # new profile data is published - set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS_RELEASE " /guard:ehcont /CETCOMPAT") - set_property(TARGET ${TargetName} APPEND_STRING PROPERTY LINK_FLAGS_RELWITHDEBINFO " /guard:ehcont /CETCOMPAT") - endif (CLR_CMAKE_HOST_ARCH_AMD64) else(CLR_CMAKE_HOST_WIN32) if(UPPERCASE_CMAKE_BUILD_TYPE STREQUAL RELEASE OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL RELWITHDEBINFO) target_compile_options(${TargetName} PRIVATE -flto -fprofile-instr-generate) diff --git a/src/mono/dlls/dbgshim/CMakeLists.txt b/src/mono/dlls/dbgshim/CMakeLists.txt index 5e590af..40c36fc 100644 --- a/src/mono/dlls/dbgshim/CMakeLists.txt +++ b/src/mono/dlls/dbgshim/CMakeLists.txt @@ -6,6 +6,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CLR_CMAKE_RUNTIME_MONO 1) set(CLR_DIR ${PROJECT_SOURCE_DIR}/../../../coreclr) set(VM_DIR ${PROJECT_SOURCE_DIR}/../../../coreclr/vm) set(CMAKE_OSX_ARCHITECTURES ${CMAKE_SYSTEM_PROCESSOR}) diff --git a/src/mono/dlls/mscordbi/CMakeLists.txt b/src/mono/dlls/mscordbi/CMakeLists.txt index 47924e8..ea667c3 100644 --- a/src/mono/dlls/mscordbi/CMakeLists.txt +++ b/src/mono/dlls/mscordbi/CMakeLists.txt @@ -6,6 +6,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CLR_CMAKE_RUNTIME_MONO 1) set(CLR_DIR ${PROJECT_SOURCE_DIR}/../../../coreclr) set(VM_DIR ${PROJECT_SOURCE_DIR}/../../../coreclr/vm) set(CMAKE_OSX_ARCHITECTURES ${CMAKE_SYSTEM_PROCESSOR}) -- 2.7.4