summaryrefslogtreecommitdiff
path: root/functions.cmake
diff options
context:
space:
mode:
authorJan Vorlicek <janvorli@microsoft.com>2017-09-13 19:19:20 +0200
committerGitHub <noreply@github.com>2017-09-13 19:19:20 +0200
commitf5b7f8ba68688382e57999e33ae39f46ddadd47a (patch)
treee04f7e5ccf1b7d7924ad3023a2a834d4af91ed10 /functions.cmake
parentc81f37210cd1fec54cb409c76290a82bd1a1865e (diff)
downloadcoreclr-f5b7f8ba68688382e57999e33ae39f46ddadd47a.tar.gz
coreclr-f5b7f8ba68688382e57999e33ae39f46ddadd47a.tar.bz2
coreclr-f5b7f8ba68688382e57999e33ae39f46ddadd47a.zip
Disable PAX mprotect for native executables (#13940)
This change adds marking native executables that coreclr build produces (corerun, coreconsole, crossgen, ilasm, ildasm, crashdump) to using the paxctl tool to allow them running on systems with PAX configured so that creating executable memory mappings by applications is prohibited.
Diffstat (limited to 'functions.cmake')
-rw-r--r--functions.cmake39
1 files changed, 21 insertions, 18 deletions
diff --git a/functions.cmake b/functions.cmake
index 3ed9536621..182a69b2f5 100644
--- a/functions.cmake
+++ b/functions.cmake
@@ -192,9 +192,28 @@ function(install_clr targetName)
endif()
endfunction()
+# Disable PAX mprotect that would prevent JIT and other codegen in coreclr from working.
+# PAX mprotect prevents:
+# - changing the executable status of memory pages that were
+# not originally created as executable,
+# - making read-only executable pages writable again,
+# - creating executable pages from anonymous memory,
+# - making read-only-after-relocations (RELRO) data pages writable again.
+function(disable_pax_mprotect targetName)
+ if (NOT PAXCTL STREQUAL "PAXCTL-NOTFOUND")
+ add_custom_command(
+ TARGET ${targetName}
+ POST_BUILD
+ VERBATIM
+ COMMAND ${PAXCTL} -c -m $<TARGET_FILE:${targetName}>
+ )
+ endif()
+endfunction()
+
function(_add_executable)
if(NOT WIN32)
add_executable(${ARGV} ${VERSION_FILE_PATH})
+ disable_pax_mprotect(${ARGV})
else()
add_executable(${ARGV})
endif(NOT WIN32)
@@ -239,28 +258,12 @@ function(verify_dependencies targetName errorMessage)
endfunction()
function(add_library_clr)
- if(NOT WIN32)
- add_library(${ARGV} ${VERSION_FILE_PATH})
- else()
- add_library(${ARGV})
- endif(NOT WIN32)
add_dependencies(${ARGV0} GeneratedEventingFiles)
- list(FIND CLR_CROSS_COMPONENTS_LIST ${ARGV0} INDEX)
- if (DEFINED CLR_CROSS_COMPONENTS_LIST AND ${INDEX} EQUAL -1)
- set_target_properties(${ARGV0} PROPERTIES EXCLUDE_FROM_ALL 1)
- endif()
+ _add_library(${ARGV})
endfunction()
function(add_executable_clr)
- if(NOT WIN32)
- add_executable(${ARGV} ${VERSION_FILE_PATH})
- else()
- add_executable(${ARGV})
- endif(NOT WIN32)
add_dependencies(${ARGV0} GeneratedEventingFiles)
- list(FIND CLR_CROSS_COMPONENTS_LIST ${ARGV0} INDEX)
- if (DEFINED CLR_CROSS_COMPONENTS_LIST AND ${INDEX} EQUAL -1)
- set_target_properties(${ARGV0} PROPERTIES EXCLUDE_FROM_ALL 1)
- endif()
+ _add_executable(${ARGV})
endfunction()