@@ -6,6 +6,9 @@ set(CMAKE_C_STANDARD_REQUIRED ON)
6
6
set (CMAKE_CXX_STANDARD 11)
7
7
set (CMAKE_CXX_STANDARD_REQUIRED ON )
8
8
9
+ # All code we build should be compiled as position independent.
10
+ set (CMAKE_POSITION_INDEPENDENT_CODE ON )
11
+
9
12
set (CLR_DEFINES_DEBUG_INIT DEBUG _DEBUG _DBG URTBLDENV_FRIENDLY=Checked BUILDENV_CHECKED=1)
10
13
set (CLR_DEFINES_CHECKED_INIT DEBUG _DEBUG _DBG URTBLDENV_FRIENDLY=Checked BUILDENV_CHECKED=1)
11
14
set (CLR_DEFINES_RELEASE_INIT NDEBUG URTBLDENV_FRIENDLY=Retail)
@@ -322,10 +325,9 @@ elseif (CLR_CMAKE_PLATFORM_UNIX)
322
325
endif ()
323
326
324
327
# -fdata-sections -ffunction-sections: each function has own section instead of one per .o file (needed for --gc-sections)
325
- # -fPIC: enable Position Independent Code normally just for shared libraries but required when linking with address sanitizer
326
328
# -O1: optimization level used instead of -O0 to avoid compile error "invalid operand for inline asm constraint"
327
- set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${CLR_SANITIZE_CXX_FLAGS} -fdata-sections -ffunction-sections -fPIC - O1" )
328
- set (CMAKE_CXX_FLAGS_CHECKED "${CMAKE_CXX_FLAGS_CHECKED} ${CLR_SANITIZE_CXX_FLAGS} -fdata-sections -ffunction-sections -fPIC - O1" )
329
+ set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${CLR_SANITIZE_CXX_FLAGS} -fdata-sections -ffunction-sections -O1" )
330
+ set (CMAKE_CXX_FLAGS_CHECKED "${CMAKE_CXX_FLAGS_CHECKED} ${CLR_SANITIZE_CXX_FLAGS} -fdata-sections -ffunction-sections -O1" )
329
331
330
332
set (CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${CLR_SANITIZE_LINK_FLAGS} " )
331
333
set (CMAKE_EXE_LINKER_FLAGS_CHECKED "${CMAKE_EXE_LINKER_FLAGS_CHECKED} ${CLR_SANITIZE_LINK_FLAGS} " )
@@ -335,6 +337,13 @@ elseif (CLR_CMAKE_PLATFORM_UNIX)
335
337
set (CMAKE_SHARED_LINKER_FLAGS_CHECKED "${CMAKE_SHARED_LINKER_FLAGS_CHECKED} ${CLR_SANITIZE_LINK_FLAGS} -Wl,--gc-sections" )
336
338
endif ()
337
339
endif (UPPERCASE_CMAKE_BUILD_TYPE STREQUAL DEBUG OR UPPERCASE_CMAKE_BUILD_TYPE STREQUAL CHECKED)
340
+
341
+ # This linker option causes executables we build to be marked as containing
342
+ # position independent code.
343
+ # It is necessary to make ASLR work for executables.
344
+ set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--build-id=sha1 -Wl,-z,relro,-z,now" )
345
+ set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie -Wl,-z,relro,-z,now" )
346
+
338
347
endif (WIN32 )
339
348
340
349
# CLR_ADDITIONAL_LINKER_FLAGS - used for passing additional arguments to linker
0 commit comments