From da120986f17d4016b44fdc91741ae1d999083eeb Mon Sep 17 00:00:00 2001 Patch-Source: https://github.com/dotnet/runtime/pull/84443 From: Antoine Martin Date: Thu, 6 Apr 2023 15:46:31 -0400 Subject: [PATCH 1/2] Suppress clang-16 warnings (#81573) --- eng/native/configurecompiler.cmake | 9 +++++++++ eng/native/init-compiler.sh | 4 ++-- src/coreclr/dlls/mscordbi/CMakeLists.txt | 5 +---- src/coreclr/dlls/mscordbi/mscordbi.cpp | 15 +++++++++++++++ src/libraries/Native/Unix/CMakeLists.txt | 9 +++++++++ src/native/corehost/apphost/static/CMakeLists.txt | 4 ++-- .../apphost/static/singlefilehost_OSXexports.src | 11 ----------- .../apphost/static/singlefilehost_unixexports.src | 4 ---- 8 files changed, 38 insertions(+), 23 deletions(-) delete mode 100644 src/native/corehost/apphost/static/singlefilehost_OSXexports.src diff --git a/src/runtime/eng/native/configurecompiler.cmake b/src/runtime/eng/native/configurecompiler.cmake index f3526deb19fa0..1a43b710c618b 100644 --- a/src/runtime/eng/native/configurecompiler.cmake +++ b/src/runtime/eng/native/configurecompiler.cmake @@ -367,6 +367,15 @@ if (CLR_CMAKE_HOST_UNIX) add_compile_options(-Wno-incompatible-ms-struct) add_compile_options(-Wno-reserved-identifier) + + # clang 16.0 introduced buffer hardening https://discourse.llvm.org/t/rfc-c-buffer-hardening/65734 + # which we are not conforming to yet. + add_compile_options(-Wno-unsafe-buffer-usage) + + # other clang 16.0 suppressions + add_compile_options(-Wno-single-bit-bitfield-constant-conversion) + add_compile_options(-Wno-cast-function-type-strict) + add_compile_options(-Wno-incompatible-function-pointer-types-strict) else() add_compile_options(-Wno-unknown-pragmas) add_compile_options(-Wno-uninitialized) diff --git a/src/runtime/eng/native/init-compiler.sh b/src/runtime/eng/native/init-compiler.sh index 567d18da4747a..e215bd75ff158 100755 --- a/src/runtime/eng/native/init-compiler.sh +++ b/src/runtime/eng/native/init-compiler.sh @@ -46,8 +46,8 @@ if [[ -z "$CLR_CC" ]]; then # Set default versions if [[ -z "$majorVersion" ]]; then # note: gcc (all versions) and clang versions higher than 6 do not have minor version in file name, if it is zero. - if [[ "$compiler" == "clang" ]]; then versions=( 11 10 9 8 7 6.0 5.0 4.0 3.9 3.8 3.7 3.6 3.5 ) - elif [[ "$compiler" == "gcc" ]]; then versions=( 11 10 9 8 7 6 5 4.9 ); fi + if [[ "$compiler" == "clang" ]]; then versions=( 16 15 14 13 12 11 10 9 8 7 6.0 5.0 4.0 3.9 3.8 3.7 3.6 3.5 ) + elif [[ "$compiler" == "gcc" ]]; then versions=( 12 11 10 9 8 7 6 5 4.9 ); fi for version in "${versions[@]}"; do parts=(${version//./ }) diff --git a/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt b/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt index c7a23c9923fe1..4a03a788a71a5 100644 --- a/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt +++ b/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt @@ -99,10 +99,7 @@ elseif(CLR_CMAKE_HOST_UNIX) mscordaccore ) - # COREDBI_LIBRARIES is mentioned twice because ld is one pass linker and will not find symbols - # if they are defined after they are used. Having all libs twice makes sure that ld will actually - # find all symbols. - target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES}) + target_link_libraries(mscordbi ${COREDBI_LIBRARIES}) add_dependencies(mscordbi mscordaccore) diff --git a/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp b/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp index afd2cfe800225..489c552a0bd3e 100644 --- a/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp +++ b/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp @@ -26,3 +26,18 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) // Defer to the main debugging code. return DbgDllMain(hInstance, dwReason, lpReserved); } + +#if defined(HOST_LINUX) && defined(TARGET_LINUX) +PALIMPORT HINSTANCE PALAPI DAC_PAL_RegisterModule(IN LPCSTR lpLibFileName); +PALIMPORT VOID PALAPI DAC_PAL_UnregisterModule(IN HINSTANCE hInstance); + +HINSTANCE PALAPI PAL_RegisterModule(IN LPCSTR lpLibFileName) +{ + return DAC_PAL_RegisterModule(lpLibFileName); +} + +VOID PALAPI PAL_UnregisterModule(IN HINSTANCE hInstance) +{ + DAC_PAL_UnregisterModule(hInstance); +} +#endif diff --git a/src/runtime/src/libraries/Native/Unix/CMakeLists.txt b/src/runtime/src/libraries/Native/Unix/CMakeLists.txt index 6931f62d24c87..e9ebefcf8243a 100644 --- a/src/runtime/src/libraries/Native/Unix/CMakeLists.txt +++ b/src/runtime/src/libraries/Native/Unix/CMakeLists.txt @@ -51,6 +51,15 @@ if(CMAKE_C_COMPILER_ID STREQUAL Clang) add_compile_options(-Wthread-safety) add_compile_options(-Wno-thread-safety-analysis) add_compile_options(-Wno-reserved-identifier) + + # clang 16.0 introduced buffer hardening https://discourse.llvm.org/t/rfc-c-buffer-hardening/65734 + # which we are not conforming to yet. + add_compile_options(-Wno-unsafe-buffer-usage) + + # other clang 16.0 suppressions + add_compile_options(-Wno-single-bit-bitfield-constant-conversion) + add_compile_options(-Wno-cast-function-type-strict) + add_compile_options(-Wno-incompatible-function-pointer-types-strict) elseif(CMAKE_C_COMPILER_ID STREQUAL GNU) add_compile_options(-Wno-stringop-truncation) endif() diff --git a/src/runtime/src/native/corehost/apphost/static/CMakeLists.txt b/src/runtime/src/native/corehost/apphost/static/CMakeLists.txt index a00c79139863f..6d491c086da98 100644 --- a/src/runtime/src/native/corehost/apphost/static/CMakeLists.txt +++ b/src/runtime/src/native/corehost/apphost/static/CMakeLists.txt @@ -73,8 +73,8 @@ if(CLR_CMAKE_TARGET_WIN32) add_linker_flag("/DEF:${CMAKE_CURRENT_SOURCE_DIR}/singlefilehost.def") else() - if(CLR_CMAKE_TARGET_OSX) - set(DEF_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/singlefilehost_OSXexports.src) + if(CLR_CMAKE_TARGET_FREEBSD) + set(DEF_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/singlefilehost_freebsdexports.src) else() set(DEF_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/singlefilehost_unixexports.src) endif() diff --git a/src/runtime/src/native/corehost/apphost/static/singlefilehost_OSXexports.src b/src/runtime/src/native/corehost/apphost/static/singlefilehost_OSXexports.src deleted file mode 100644 index 18d5697e84580..0000000000000 --- a/src/runtime/src/native/corehost/apphost/static/singlefilehost_OSXexports.src +++ /dev/null @@ -1,11 +0,0 @@ -; Licensed to the .NET Foundation under one or more agreements. -; The .NET Foundation licenses this file to you under the MIT license. - -; needed by SOS -DotNetRuntimeInfo - -; DAC table export -g_dacTable - -; Used by profilers -MetaDataGetDispenser diff --git a/src/runtime/src/native/corehost/apphost/static/singlefilehost_unixexports.src b/src/runtime/src/native/corehost/apphost/static/singlefilehost_unixexports.src index 1f9c517821855..18d5697e84580 100644 --- a/src/runtime/src/native/corehost/apphost/static/singlefilehost_unixexports.src +++ b/src/runtime/src/native/corehost/apphost/static/singlefilehost_unixexports.src @@ -9,7 +9,3 @@ g_dacTable ; Used by profilers MetaDataGetDispenser - -; FreeBSD needs to reexport these -__progname -environ From a6d9fbff551de1164ec9cc14bdd48f2ffad77d81 Mon Sep 17 00:00:00 2001 From: Antoine Martin Date: Thu, 6 Apr 2023 16:39:27 -0400 Subject: [PATCH 2/2] Fix DBI loading problem on Linux (#82461) --- src/coreclr/dlls/mscordbi/CMakeLists.txt | 16 +++++++++++++++- src/coreclr/dlls/mscordbi/mscordbi.cpp | 15 --------------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt b/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt index 4a03a788a71a5..b7618b324c260 100644 --- a/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt +++ b/src/runtime/src/coreclr/dlls/mscordbi/CMakeLists.txt @@ -99,7 +99,21 @@ elseif(CLR_CMAKE_HOST_UNIX) mscordaccore ) - target_link_libraries(mscordbi ${COREDBI_LIBRARIES}) + # Before llvm 16, lld was setting `--undefined-version` by default. The default was + # flipped to `--no-undefined-version` in lld 16, so we will explicitly set it to + # `--undefined-version` for our use-case. + include(CheckLinkerFlag OPTIONAL) + if(COMMAND check_linker_flag) + check_linker_flag(CXX -Wl,--undefined-version LINKER_SUPPORTS_UNDEFINED_VERSION) + if (LINKER_SUPPORTS_UNDEFINED_VERSION) + add_linker_flag(-Wl,--undefined-version) + endif(LINKER_SUPPORTS_UNDEFINED_VERSION) + endif(COMMAND check_linker_flag) + + # COREDBI_LIBRARIES is mentioned twice because ld is one pass linker and will not find symbols + # if they are defined after they are used. Having all libs twice makes sure that ld will actually + # find all symbols. + target_link_libraries(mscordbi ${COREDBI_LIBRARIES} ${COREDBI_LIBRARIES}) add_dependencies(mscordbi mscordaccore) diff --git a/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp b/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp index 489c552a0bd3e..afd2cfe800225 100644 --- a/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp +++ b/src/runtime/src/coreclr/dlls/mscordbi/mscordbi.cpp @@ -26,18 +26,3 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) // Defer to the main debugging code. return DbgDllMain(hInstance, dwReason, lpReserved); } - -#if defined(HOST_LINUX) && defined(TARGET_LINUX) -PALIMPORT HINSTANCE PALAPI DAC_PAL_RegisterModule(IN LPCSTR lpLibFileName); -PALIMPORT VOID PALAPI DAC_PAL_UnregisterModule(IN HINSTANCE hInstance); - -HINSTANCE PALAPI PAL_RegisterModule(IN LPCSTR lpLibFileName) -{ - return DAC_PAL_RegisterModule(lpLibFileName); -} - -VOID PALAPI PAL_UnregisterModule(IN HINSTANCE hInstance) -{ - DAC_PAL_UnregisterModule(hInstance); -} -#endif