Skip to content

Commit 83f16ff

Browse files
dmitrii-galantsevcharis-poag-amd
authored andcommitted
Fix warnings on CXX/linker flags (#12)
1) When `clang` is used as system compiler, libraries were built without respecting LDFLAGS. For example, this affected LTO flags, if any (and it only affected clang, not gcc). 2) Linker flags are registered as CXX flags, which produces warnings during compilation: ``` clang++: warning: -Wl,-z,noexecstack: 'linker' input unused [-Wunused-command-line-argument] clang++: warning: -Wl,-znoexecheap: 'linker' input unused [-Wunused-command-line-argument] clang++: warning: -Wl,-z,relro: 'linker' input unused [-Wunused-command-line-argument] clang++: warning: -Wl,-z,now: 'linker' input unused [-Wunused-command-line-argument] ``` 3) Clang does not support `-Wtrampolines` flag: ``` warning: unknown warning option '-Wtrampolines' [-Wunknown-warning-option] ``` 4) No linkers support `noexecheap` anymore. `noexecheap` linker flag was a part of PaX patches to GNU ld, (which were dropped in 2017)[https://www.gentoo.org/support/news-items/2017-08-19-hardened-sources-removal.html]. Now ld/ld.lld/ld.gold don't support it and protection of heap is managed by NX bit. Therefore every compiler produces this warning: ``` ld.lld: warning: unknown -z value: noexecheap ``` Closes #210. Co-authored-by: Sv. Lockal <lockalsash@gmail.com> [ROCm/rocm_smi_lib commit: 59cbeb5]
1 parent 957699f commit 83f16ff

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

projects/rocm-smi-lib/CMakeLists.txt

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ set(CMAKE_CXX_FLAGS
9595

9696
# Clang does not set the build-id
9797
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
98-
set (CMAKE_SHARED_LINKER_FLAGS "-Wl,--build-id=sha1")
98+
set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--build-id=sha1")
9999
endif()
100100

101101
# Use this instead of above for 32 bit
@@ -129,10 +129,16 @@ else ()
129129
set(CMAKE_CXX_FLAGS
130130
"${CMAKE_CXX_FLAGS} -DFORTIFY_SOURCE=2 -fstack-protector-all -Wcast-align")
131131
## More security breach mitigation flags
132-
set(CMAKE_CXX_FLAGS
133-
"${CMAKE_CXX_FLAGS} -Wl,-z,noexecstack -Wl,-znoexecheap -Wl,-z,relro ")
134-
set(CMAKE_CXX_FLAGS
135-
"${CMAKE_CXX_FLAGS} -Wtrampolines -Wl,-z,now")
132+
set(HARDENING_LDFLAGS
133+
"${HARDENING_LDFLAGS} -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now")
134+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${HARDENING_LDFLAGS}")
135+
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${HARDENING_LDFLAGS}")
136+
137+
include(CheckCXXCompilerFlag)
138+
check_cxx_compiler_flag("-Wtrampolines" CXX_SUPPORTS_WTRAMPOLINES)
139+
if (CXX_SUPPORTS_WTRAMPOLINES)
140+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wtrampolines")
141+
endif ()
136142
endif ()
137143

138144
set(COMMON_SRC_DIR "${PROJECT_SOURCE_DIR}/src")

0 commit comments

Comments
 (0)