From 8d6f41350af108d357dbf4210400b3bc51fd1968 Mon Sep 17 00:00:00 2001 From: Gefei Jiang Date: Fri, 9 Oct 2020 18:00:02 -0700 Subject: [PATCH 01/10] CMakeList.txt -- Support Address Sanitize ROCMOPS-1249 append address sanitize flag Change-Id: Ie5d1e5b8b93022b80e0ca74106a16d53d52e41af Signed-off-by: Gefei Jiang [ROCm/ROCR-Runtime commit: f0e6e7ae17a5c1ccbebafea0e800d6eafc796f49] --- projects/rocr-runtime/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/projects/rocr-runtime/CMakeLists.txt b/projects/rocr-runtime/CMakeLists.txt index 01b02dbf8d..c868d8f9ff 100644 --- a/projects/rocr-runtime/CMakeLists.txt +++ b/projects/rocr-runtime/CMakeLists.txt @@ -90,6 +90,11 @@ else () set ( HSAKMT_C_FLAGS "${HSAKMT_C_FLAGS}" -g ) endif () +## Address Sanitize Flag +if (DEFINED $ENV{ADDRESS_SANITIZER}) + set ( HSAKMT_C_FLAGS "${HSAKMT_C_FLAGS}" -fsanitizer=address ) +endif () + set ( HSAKMT_LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/src/libhsakmt.ver" ) ## Linker Flags From e93ba06265b3268aca8bbd387544ffe341f92b31 Mon Sep 17 00:00:00 2001 From: Gefei Jiang Date: Wed, 14 Oct 2020 06:13:39 -0700 Subject: [PATCH 02/10] CMakeLists.txt: Address Sanitize Support ROCMOPS-1249 correct if statement and -f flag name Change-Id: I92e9aa30b1c81f855ad269c0c686ec1e136a85fd Signed-off-by: Gefei Jiang [ROCm/ROCR-Runtime commit: b92d28bd71d7427768fa7cdcae0125ebdf3eb37e] --- projects/rocr-runtime/CMakeLists.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/projects/rocr-runtime/CMakeLists.txt b/projects/rocr-runtime/CMakeLists.txt index c868d8f9ff..58f8f2ee9f 100644 --- a/projects/rocr-runtime/CMakeLists.txt +++ b/projects/rocr-runtime/CMakeLists.txt @@ -91,8 +91,11 @@ else () endif () ## Address Sanitize Flag -if (DEFINED $ENV{ADDRESS_SANITIZER}) - set ( HSAKMT_C_FLAGS "${HSAKMT_C_FLAGS}" -fsanitizer=address ) +if (DEFINED ADDRESS_SANITIZER) + set ( HSAKMT_C_FLAGS "${HSAKMT_C_FLAGS}" -fsanitize=address ) + # for debugging + # toDo: remove this line when merging to mainline + message( STATUS "ADDRESS_SANITIZE: HSAKMT_C_FLAGS=: ${HSAKMT_C_FLAGS}" ) endif () set ( HSAKMT_LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/src/libhsakmt.ver" ) From 4b5fa5bb42a1a96d4d29a26ac8237a075b764cf3 Mon Sep 17 00:00:00 2001 From: Gefei Jiang Date: Fri, 16 Oct 2020 12:49:26 -0700 Subject: [PATCH 03/10] CMakeLists.txt: Address Sanitizer Support 1. add sanitize flag to link flags 2. use ${ADDRESS_SANITIZER} as a condition to turn on/off instead of (DEFINED ADDRESS_SANITIZER). The latter will always turn the feature on regardless of the value as long as there is "-DADDRESS_SANITIZER in cmake command line,which will be an issue when merging to the mainline Amended: put -fsanitize=address at the begining in link flags Change-Id: I84df0e5b6d7fb8f02f18bf7961f25f15cac10443 Signed-off-by: Gefei Jiang [ROCm/ROCR-Runtime commit: d3bc75d22968f5c12dfc988b8b1a5e7ebb3bc3c8] --- projects/rocr-runtime/CMakeLists.txt | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/projects/rocr-runtime/CMakeLists.txt b/projects/rocr-runtime/CMakeLists.txt index 58f8f2ee9f..b397ead855 100644 --- a/projects/rocr-runtime/CMakeLists.txt +++ b/projects/rocr-runtime/CMakeLists.txt @@ -90,19 +90,21 @@ else () set ( HSAKMT_C_FLAGS "${HSAKMT_C_FLAGS}" -g ) endif () -## Address Sanitize Flag -if (DEFINED ADDRESS_SANITIZER) - set ( HSAKMT_C_FLAGS "${HSAKMT_C_FLAGS}" -fsanitize=address ) - # for debugging - # toDo: remove this line when merging to mainline - message( STATUS "ADDRESS_SANITIZE: HSAKMT_C_FLAGS=: ${HSAKMT_C_FLAGS}" ) -endif () - set ( HSAKMT_LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/src/libhsakmt.ver" ) +## Address Sanitize Flag +if ( ${ADDRESS_SANITIZER} ) + set ( HSAKMT_C_FLAGS "${HSAKMT_C_FLAGS}" -fsanitize=address ) + message( STATUS "ADDRESS_SANITIZE: HSAKMT_C_FLAGS=: ${HSAKMT_C_FLAGS}" ) + set ( HSAKMT_LINK_FLAGS "-fsanitize=address" ) +endif () + ## Linker Flags ## Add --enable-new-dtags to generate DT_RUNPATH -set (HSAKMT_LINK_FLAGS "-Wl,--enable-new-dtags -Wl,--version-script=${HSAKMT_LINKER_SCRIPT} -Wl,-soname=${HSAKMT_COMPONENT}.so.${LIB_VERSION_MAJOR} -Wl,-z,nodelete -Wl,-no-undefined" ) +set (HSAKMT_LINK_FLAGS "${HSAKMT_LINK_FLAGS} -Wl,--enable-new-dtags -Wl,--version-script=${HSAKMT_LINKER_SCRIPT} -Wl,-soname=${HSAKMT_COMPONENT}.so.${LIB_VERSION_MAJOR} -Wl,-z,nodelete -Wl,-no-undefined" ) + +# for debug +message( STATUS "ADDRESS_SANITIZE: HSAKMT_LINK_FLAGS=: ${HSAKMT_LINK_FLAGS}" ) ## Source files set ( HSAKMT_SRC "src/debug.c" From 5b7549331fb90fb35ce5ca55e9de79f76a640074 Mon Sep 17 00:00:00 2001 From: Kent Russell Date: Fri, 23 Oct 2020 13:43:43 -0400 Subject: [PATCH 04/10] CMakeLists: Address-sanitizer fix and cleanup Move all the logic into 1 spot, and make sure -fsanitize=address is also passed to the library flags Change-Id: I7b60629d32df6436b5c7ad37997fe14ea48f5d72 [ROCm/ROCR-Runtime commit: 3d9f60d7fe3f918685e04a5e8b10ec5016810176] --- projects/rocr-runtime/CMakeLists.txt | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/projects/rocr-runtime/CMakeLists.txt b/projects/rocr-runtime/CMakeLists.txt index b397ead855..7970114c2d 100644 --- a/projects/rocr-runtime/CMakeLists.txt +++ b/projects/rocr-runtime/CMakeLists.txt @@ -92,20 +92,18 @@ endif () set ( HSAKMT_LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/src/libhsakmt.ver" ) +## Linker Flags +## Add --enable-new-dtags to generate DT_RUNPATH +set (HSAKMT_LINK_FLAGS "${HSAKMT_LINK_FLAGS} -Wl,--enable-new-dtags -Wl,--version-script=${HSAKMT_LINKER_SCRIPT} -Wl,-soname=${HSAKMT_COMPONENT}.so.${LIB_VERSION_MAJOR} -Wl,-z,nodelete -Wl,-no-undefined") + ## Address Sanitize Flag if ( ${ADDRESS_SANITIZER} ) set ( HSAKMT_C_FLAGS "${HSAKMT_C_FLAGS}" -fsanitize=address ) + set ( HSAKMT_LINK_FLAGS "${HSAKMT_LINK_FLAGS}" -fsanitize=address ) message( STATUS "ADDRESS_SANITIZE: HSAKMT_C_FLAGS=: ${HSAKMT_C_FLAGS}" ) - set ( HSAKMT_LINK_FLAGS "-fsanitize=address" ) + message( STATUS "ADDRESS_SANITIZE: HSAKMT_LINK_FLAGS=: ${HSAKMT_LINK_FLAGS}" ) endif () -## Linker Flags -## Add --enable-new-dtags to generate DT_RUNPATH -set (HSAKMT_LINK_FLAGS "${HSAKMT_LINK_FLAGS} -Wl,--enable-new-dtags -Wl,--version-script=${HSAKMT_LINKER_SCRIPT} -Wl,-soname=${HSAKMT_COMPONENT}.so.${LIB_VERSION_MAJOR} -Wl,-z,nodelete -Wl,-no-undefined" ) - -# for debug -message( STATUS "ADDRESS_SANITIZE: HSAKMT_LINK_FLAGS=: ${HSAKMT_LINK_FLAGS}" ) - ## Source files set ( HSAKMT_SRC "src/debug.c" "src/events.c" From 0682ddc56a0993e868feb38073632060d60ddb22 Mon Sep 17 00:00:00 2001 From: Kent Russell Date: Mon, 26 Oct 2020 13:49:01 -0400 Subject: [PATCH 05/10] Set -no-undefined properly if it's CC Address-sanitizer doesn't like it at all. And it's called differently under clang than gcc, so adjust accordingly Change-Id: Iebe8cd68618d3f7a4c310419c64b4f73d7ecfda4 [ROCm/ROCR-Runtime commit: 8e0a9aa417f119d62d21ba270fde014d982cd747] --- projects/rocr-runtime/CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/projects/rocr-runtime/CMakeLists.txt b/projects/rocr-runtime/CMakeLists.txt index 7970114c2d..398cbfe272 100644 --- a/projects/rocr-runtime/CMakeLists.txt +++ b/projects/rocr-runtime/CMakeLists.txt @@ -94,7 +94,7 @@ set ( HSAKMT_LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/src/libhsakmt.ver" ) ## Linker Flags ## Add --enable-new-dtags to generate DT_RUNPATH -set (HSAKMT_LINK_FLAGS "${HSAKMT_LINK_FLAGS} -Wl,--enable-new-dtags -Wl,--version-script=${HSAKMT_LINKER_SCRIPT} -Wl,-soname=${HSAKMT_COMPONENT}.so.${LIB_VERSION_MAJOR} -Wl,-z,nodelete -Wl,-no-undefined") +set (HSAKMT_LINK_FLAGS "${HSAKMT_LINK_FLAGS} -Wl,--enable-new-dtags -Wl,--version-script=${HSAKMT_LINKER_SCRIPT} -Wl,-soname=${HSAKMT_COMPONENT}.so.${LIB_VERSION_MAJOR} -Wl,-z,nodelete") ## Address Sanitize Flag if ( ${ADDRESS_SANITIZER} ) @@ -102,6 +102,12 @@ if ( ${ADDRESS_SANITIZER} ) set ( HSAKMT_LINK_FLAGS "${HSAKMT_LINK_FLAGS}" -fsanitize=address ) message( STATUS "ADDRESS_SANITIZE: HSAKMT_C_FLAGS=: ${HSAKMT_C_FLAGS}" ) message( STATUS "ADDRESS_SANITIZE: HSAKMT_LINK_FLAGS=: ${HSAKMT_LINK_FLAGS}" ) +else () + if ( CMAKE_COMPILER_IS_GNUCC ) + set ( HSAKMT_LINK_FLAGS "${HSAKMT_LINK_FLAGS}" -Wl,-no-undefined ) + else () + set ( HSAKMT_LINK_FLAGS "${HSAKMT_LINK_FLAGS}" -Wl,-undefined,error ) + endif () endif () ## Source files From 8a95a2d5845a905fb652df28dc161afe9b926430 Mon Sep 17 00:00:00 2001 From: Kent Russell Date: Tue, 27 Oct 2020 12:15:16 -0400 Subject: [PATCH 06/10] kfdtest: Support address sanitizer in KFDTest Change-Id: Iee1182608ddc9896c82feb5004b3fe078d3d3223 [ROCm/ROCR-Runtime commit: 9cca1216e9f00649e1848044ddae0aadf0949dcb] --- projects/rocr-runtime/tests/kfdtest/CMakeLists.txt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/projects/rocr-runtime/tests/kfdtest/CMakeLists.txt b/projects/rocr-runtime/tests/kfdtest/CMakeLists.txt index 9a0ac90960..c8b2823c45 100644 --- a/projects/rocr-runtime/tests/kfdtest/CMakeLists.txt +++ b/projects/rocr-runtime/tests/kfdtest/CMakeLists.txt @@ -24,7 +24,7 @@ # If environment variable DRM_DIR or LIBHSAKMT_PATH is set, the script # will pick up the corresponding libraries from those pathes. -cmake_minimum_required(VERSION 2.8 FATAL_ERROR) +cmake_minimum_required(VERSION 3.5 FATAL_ERROR) project(KFDTest) @@ -100,6 +100,15 @@ include_directories(${SP3_DIR}) include_directories(${DRM_INCLUDE_DIRS}) +## Address Sanitize Flag +if ( ${ADDRESS_SANITIZER} ) + set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" -fsanitize=address ) + set ( CMAKE_EXE_LINKER_FLAGS -fsanitize=address ) + message( STATUS "ADDRESS_SANITIZE: CMAKE_CXX_FLAGS=: ${CMAKE_CXX_FLAGS}" ) + message( STATUS "ADDRESS_SANITIZE: CMAKE_EXE_LINKER_FLAGS=: ${CMAKE_EXE_LINKER_FLAGS}" ) +endif () + + set (SRC_FILES gtest-1.6.0/gtest-all.cpp src/AqlQueue.cpp From 17a83e8e69bc1a1a4d135bace263e315f1d30d96 Mon Sep 17 00:00:00 2001 From: Kent Russell Date: Fri, 30 Oct 2020 07:16:49 -0400 Subject: [PATCH 07/10] Remove address-sanitizer debug messages Change-Id: I08509aaed36459329f0a65264e42f287c27f4a18 [ROCm/ROCR-Runtime commit: f6f47aa43d803c9d8f86af6c24757604449d5c82] --- projects/rocr-runtime/CMakeLists.txt | 2 -- projects/rocr-runtime/tests/kfdtest/CMakeLists.txt | 2 -- 2 files changed, 4 deletions(-) diff --git a/projects/rocr-runtime/CMakeLists.txt b/projects/rocr-runtime/CMakeLists.txt index 398cbfe272..9cf0994b2c 100644 --- a/projects/rocr-runtime/CMakeLists.txt +++ b/projects/rocr-runtime/CMakeLists.txt @@ -100,8 +100,6 @@ set (HSAKMT_LINK_FLAGS "${HSAKMT_LINK_FLAGS} -Wl,--enable-new-dtags -Wl,--versio if ( ${ADDRESS_SANITIZER} ) set ( HSAKMT_C_FLAGS "${HSAKMT_C_FLAGS}" -fsanitize=address ) set ( HSAKMT_LINK_FLAGS "${HSAKMT_LINK_FLAGS}" -fsanitize=address ) - message( STATUS "ADDRESS_SANITIZE: HSAKMT_C_FLAGS=: ${HSAKMT_C_FLAGS}" ) - message( STATUS "ADDRESS_SANITIZE: HSAKMT_LINK_FLAGS=: ${HSAKMT_LINK_FLAGS}" ) else () if ( CMAKE_COMPILER_IS_GNUCC ) set ( HSAKMT_LINK_FLAGS "${HSAKMT_LINK_FLAGS}" -Wl,-no-undefined ) diff --git a/projects/rocr-runtime/tests/kfdtest/CMakeLists.txt b/projects/rocr-runtime/tests/kfdtest/CMakeLists.txt index c8b2823c45..9b1624148e 100644 --- a/projects/rocr-runtime/tests/kfdtest/CMakeLists.txt +++ b/projects/rocr-runtime/tests/kfdtest/CMakeLists.txt @@ -104,8 +104,6 @@ include_directories(${DRM_INCLUDE_DIRS}) if ( ${ADDRESS_SANITIZER} ) set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" -fsanitize=address ) set ( CMAKE_EXE_LINKER_FLAGS -fsanitize=address ) - message( STATUS "ADDRESS_SANITIZE: CMAKE_CXX_FLAGS=: ${CMAKE_CXX_FLAGS}" ) - message( STATUS "ADDRESS_SANITIZE: CMAKE_EXE_LINKER_FLAGS=: ${CMAKE_EXE_LINKER_FLAGS}" ) endif () From 08bded0cb32a9bad04ba06cbab26ffc52f7e24df Mon Sep 17 00:00:00 2001 From: Kent Russell Date: Mon, 2 Nov 2020 06:30:51 -0500 Subject: [PATCH 08/10] kfdtest: Add sanitizer flags after C flags are set Otherwise they get overwritten Change-Id: I9042422d4515e7ac812ed34779906b0b2c44545c [ROCm/ROCR-Runtime commit: 92ad039915a807c80edc812bad007097fafaa23e] --- projects/rocr-runtime/tests/kfdtest/CMakeLists.txt | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/projects/rocr-runtime/tests/kfdtest/CMakeLists.txt b/projects/rocr-runtime/tests/kfdtest/CMakeLists.txt index 9b1624148e..ae96fdc0cc 100644 --- a/projects/rocr-runtime/tests/kfdtest/CMakeLists.txt +++ b/projects/rocr-runtime/tests/kfdtest/CMakeLists.txt @@ -100,13 +100,6 @@ include_directories(${SP3_DIR}) include_directories(${DRM_INCLUDE_DIRS}) -## Address Sanitize Flag -if ( ${ADDRESS_SANITIZER} ) - set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" -fsanitize=address ) - set ( CMAKE_EXE_LINKER_FLAGS -fsanitize=address ) -endif () - - set (SRC_FILES gtest-1.6.0/gtest-all.cpp src/AqlQueue.cpp @@ -172,6 +165,12 @@ else () set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g" ) endif () +## Address Sanitize Flag +if ( ${ADDRESS_SANITIZER} ) + set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" -fsanitize=address ) + set ( CMAKE_EXE_LINKER_FLAGS -fsanitize=address ) +endif () + # link_directories() has to be put before add_executable() # The modules found by pkg_check_modules() in the default pkg config # path do not need to use link_directories() here. From cb32d371bca38cc2ed6603acba49bdb12e8c30c0 Mon Sep 17 00:00:00 2001 From: Kent Russell Date: Tue, 3 Nov 2020 09:24:14 -0500 Subject: [PATCH 09/10] kfdtest: Quote all CXX flags Otherwise it doesn't play nicely with -O2 Change-Id: I2e5b60c73ee1ec668b186088a4e2e3a03af65033 [ROCm/ROCR-Runtime commit: 323bab073492d9c5bd39a9cc93eac067139ba05a] --- projects/rocr-runtime/tests/kfdtest/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/rocr-runtime/tests/kfdtest/CMakeLists.txt b/projects/rocr-runtime/tests/kfdtest/CMakeLists.txt index ae96fdc0cc..17d4b9bf4a 100644 --- a/projects/rocr-runtime/tests/kfdtest/CMakeLists.txt +++ b/projects/rocr-runtime/tests/kfdtest/CMakeLists.txt @@ -167,7 +167,7 @@ endif () ## Address Sanitize Flag if ( ${ADDRESS_SANITIZER} ) - set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" -fsanitize=address ) + set ( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address" ) set ( CMAKE_EXE_LINKER_FLAGS -fsanitize=address ) endif () From 3b67730e188e1a9986e8b7a36752b4a32c97367f Mon Sep 17 00:00:00 2001 From: Kent Russell Date: Tue, 10 Nov 2020 07:26:51 -0500 Subject: [PATCH 10/10] libhsakmt: Explicitly set shared/static sanitizer flags Don't rely on default values for static/shared sanitizer flags, set them explicitly based on whether BUILD_SHARED_LIBS is defined or not Change-Id: Ifbfe95269d1cf184237643176a033a3ce98b62f9 [ROCm/ROCR-Runtime commit: 3c8273c57bff9b9b081d690f75038e8369edeb5a] --- projects/rocr-runtime/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/projects/rocr-runtime/CMakeLists.txt b/projects/rocr-runtime/CMakeLists.txt index 9cf0994b2c..02e9e59715 100644 --- a/projects/rocr-runtime/CMakeLists.txt +++ b/projects/rocr-runtime/CMakeLists.txt @@ -100,6 +100,11 @@ set (HSAKMT_LINK_FLAGS "${HSAKMT_LINK_FLAGS} -Wl,--enable-new-dtags -Wl,--versio if ( ${ADDRESS_SANITIZER} ) set ( HSAKMT_C_FLAGS "${HSAKMT_C_FLAGS}" -fsanitize=address ) set ( HSAKMT_LINK_FLAGS "${HSAKMT_LINK_FLAGS}" -fsanitize=address ) + if ( BUILD_SHARED_LIBS} ) + set ( HSAKMT_LINK_FLAGS "${HSAKMT_LINK_FLAGS}" -shared-libasan ) + else () + set ( HSAKMT_LINK_FLAGS "${HSAKMT_LINK_FLAGS}" -static-libasan ) + endif () else () if ( CMAKE_COMPILER_IS_GNUCC ) set ( HSAKMT_LINK_FLAGS "${HSAKMT_LINK_FLAGS}" -Wl,-no-undefined )