Skip to content

[rtsan] Link in proper CXX ABI library #109715

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 25, 2024
Merged

[rtsan] Link in proper CXX ABI library #109715

merged 1 commit into from
Sep 25, 2024

Conversation

cjappl
Copy link
Contributor

@cjappl cjappl commented Sep 23, 2024

Based on an issue reported in #109529 (comment, build problem )

We seemingly were having issues with compiling/linking against different ABIs:

undefined symbol for arch arm64: std::__2::__libcpp_verbose_abort(
...
did you mean: std::__1::__libcpp_verbose_abort(

I cannot reproduce this issue locally, but this fix seems to be in the same general area.

This new pattern was found in all of the other sanitizer's cmakelists.txt, making me think this is our problem

nsan/CMakeLists.txt
44-
45-set(NSAN_DYNAMIC_LIBS
46:  ${COMPILER_RT_UNWINDER_LINK_LIBS}
47-  ${SANITIZER_CXX_ABI_LIBRARIES}
48-  ${SANITIZER_COMMON_LINK_LIBS})

ubsan/CMakeLists.txt
65-
66-set(UBSAN_DYNAMIC_LIBS
67:  ${COMPILER_RT_UNWINDER_LINK_LIBS}
68-  ${SANITIZER_CXX_ABI_LIBRARIES}
69-  ${SANITIZER_COMMON_LINK_LIBS})

tsan/rtl/CMakeLists.txt
14-
15-set(TSAN_DYNAMIC_LINK_LIBS
16:  ${COMPILER_RT_UNWINDER_LINK_LIBS}
17-  ${SANITIZER_CXX_ABI_LIBRARIES}
18-  ${SANITIZER_COMMON_LINK_LIBS})

asan/CMakeLists.txt
145-
146-set(ASAN_DYNAMIC_LIBS
147:  ${COMPILER_RT_UNWINDER_LINK_LIBS}
148-  ${SANITIZER_CXX_ABI_LIBRARIES}
149-  ${SANITIZER_COMMON_LINK_LIBS})

@llvmbot
Copy link
Member

llvmbot commented Sep 23, 2024

@llvm/pr-subscribers-compiler-rt-sanitizer

Author: Chris Apple (cjappl)

Changes

Based on an issue reported in #109529 (comment, build problem )

We seemingly were having issues with compiling/linking against different ABIs:

undefined symbol for arch arm64: std::__2::__libcpp_verbose_abort(
...
did you mean: std::__1::__libcpp_verbose_abort(

I cannot reproduce this issue locally, but this fix seems to be in the same general area.

This new pattern was found in all of the other sanitizer's cmakelists.txt, making me think this is our problem

nsan/CMakeLists.txt
44-
45-set(NSAN_DYNAMIC_LIBS
46:  ${COMPILER_RT_UNWINDER_LINK_LIBS}
47-  ${SANITIZER_CXX_ABI_LIBRARIES}
48-  ${SANITIZER_COMMON_LINK_LIBS})

ubsan/CMakeLists.txt
65-
66-set(UBSAN_DYNAMIC_LIBS
67:  ${COMPILER_RT_UNWINDER_LINK_LIBS}
68-  ${SANITIZER_CXX_ABI_LIBRARIES}
69-  ${SANITIZER_COMMON_LINK_LIBS})

tsan/rtl/CMakeLists.txt
14-
15-set(TSAN_DYNAMIC_LINK_LIBS
16:  ${COMPILER_RT_UNWINDER_LINK_LIBS}
17-  ${SANITIZER_CXX_ABI_LIBRARIES}
18-  ${SANITIZER_COMMON_LINK_LIBS})

asan/CMakeLists.txt
145-
146-set(ASAN_DYNAMIC_LIBS
147:  ${COMPILER_RT_UNWINDER_LINK_LIBS}
148-  ${SANITIZER_CXX_ABI_LIBRARIES}
149-  ${SANITIZER_COMMON_LINK_LIBS})

Full diff: https://github.com/llvm/llvm-project/pull/109715.diff

1 Files Affected:

  • (modified) compiler-rt/lib/rtsan/CMakeLists.txt (+2-1)
diff --git a/compiler-rt/lib/rtsan/CMakeLists.txt b/compiler-rt/lib/rtsan/CMakeLists.txt
index 0fc3a3f8f48960..d4296f56acd30d 100644
--- a/compiler-rt/lib/rtsan/CMakeLists.txt
+++ b/compiler-rt/lib/rtsan/CMakeLists.txt
@@ -27,7 +27,8 @@ set(RTSAN_CFLAGS
 set(RTSAN_LINK_FLAGS ${COMPILER_RT_COMMON_LINK_FLAGS})
 set(RTSAN_LINK_LIBS
   ${COMPILER_RT_UNWINDER_LINK_LIBS}
-  ${COMPILER_RT_CXX_LINK_LIBS})
+  ${SANITIZER_CXX_ABI_LIBRARIES}
+  ${SANITIZER_COMMON_LINK_LIBS})
 
 append_rtti_flag(OFF RTSAN_CFLAGS)
 

@cjappl
Copy link
Contributor Author

cjappl commented Sep 23, 2024

@zeroomega Can you please try this patch and see if it works to fix your issue? I cannot repro locally.

@cjappl
Copy link
Contributor Author

cjappl commented Sep 23, 2024

CC @davidtrevelyan for review

@cjappl
Copy link
Contributor Author

cjappl commented Sep 23, 2024

Also adding @petrhosek as it looks like he performed the original change to the sanitizers to use this version of CXX ABI linking

@zeroomega
Copy link
Contributor

zeroomega commented Sep 23, 2024

@zeroomega Can you please try this patch and see if it works to fix your issue? I cannot repro locally.

It still failed at the same spot. https://ci.chromium.org/ui/p/fuchsia/builders/toolchain.ci.shadow/clang-mac-x64/b8735970862707274593/overview

FAILED: /Volumes/Work/s/w/ir/x/w/llvm_build/lib/clang/20/lib/darwin/libclang_rt.rtsan_osx_dynamic.dylib 
: && /Volumes/Work/s/w/ir/x/w/llvm_build/./bin/clang++ --target=x86_64-apple-darwin22.6.0 --sysroot=/Volumes/Work/s/w/ir/cache/macos_sdk/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -fPIC -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffile-prefix-map=/Volumes/Work/s/w/ir/x/w/llvm_build/runtimes/runtimes-bins=../../../github-zeroomega-llvm-project -ffile-prefix-map=/Volumes/Work/s/w/ir/x/w/github-zeroomega-llvm-project/= -no-canonical-prefixes -Wall -Wno-unused-parameter -O3 -DNDEBUG -arch arm64 -arch x86_64 -isysroot /Volumes/Work/s/w/ir/cache/macos_sdk/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -dynamiclib -Wl,-headerpad_max_install_names -fuse-ld=lld -Wl,--color-diagnostics   -stdlib=libc++ -lc++ -lc++abi -fapplication-extension -mmacosx-version-min=10.13 -isysroot /Volumes/Work/s/w/ir/cache/macos_sdk/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk -nodefaultlibs -Wl,-U,___sanitizer_free_hook -Wl,-U,___sanitizer_get_dtls_size -Wl,-U,___sanitizer_malloc_hook -Wl,-U,___sanitizer_report_error_summary -Wl,-U,___sanitizer_sandbox_on_notify -Wl,-U,___sanitizer_symbolize_code -Wl,-U,___sanitizer_symbolize_data -Wl,-U,___sanitizer_symbolize_frame -Wl,-U,___sanitizer_symbolize_demangle -Wl,-U,___sanitizer_symbolize_flush -Wl,-U,___sanitizer_symbolize_set_demangle -Wl,-U,___sanitizer_symbolize_set_inline_frames -o /Volumes/Work/s/w/ir/x/w/llvm_build/lib/clang/20/lib/darwin/libclang_rt.rtsan_osx_dynamic.dylib -install_name @rpath/libclang_rt.rtsan_osx_dynamic.dylib compiler-rt/lib/rtsan/CMakeFiles/RTRtsan.osx.dir/rtsan.cpp.o compiler-rt/lib/rtsan/CMakeFiles/RTRtsan.osx.dir/rtsan_context.cpp.o compiler-rt/lib/rtsan/CMakeFiles/RTRtsan.osx.dir/rtsan_diagnostics.cpp.o compiler-rt/lib/rtsan/CMakeFiles/RTRtsan.osx.dir/rtsan_flags.cpp.o compiler-rt/lib/rtsan/CMakeFiles/RTRtsan.osx.dir/rtsan_interceptors.cpp.o compiler-rt/lib/interception/CMakeFiles/RTInterception.osx.dir/interception_linux.cpp.o compiler-rt/lib/interception/CMakeFiles/RTInterception.osx.dir/interception_mac.cpp.o compiler-rt/lib/interception/CMakeFiles/RTInterception.osx.dir/interception_win.cpp.o compiler-rt/lib/interception/CMakeFiles/RTInterception.osx.dir/interception_type_test.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_allocator.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_common.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_deadlock_detector1.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_deadlock_detector2.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_errno.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_file.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_flags.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_flag_parser.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_fuchsia.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_libc.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_libignore.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_linux.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_linux_s390.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_mac.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_mutex.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_netbsd.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_platform_limits_freebsd.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_platform_limits_linux.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_platform_limits_netbsd.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_platform_limits_posix.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_platform_limits_solaris.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_posix.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_printf.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_procmaps_common.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_procmaps_bsd.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_procmaps_fuchsia.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_procmaps_linux.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_procmaps_mac.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_procmaps_solaris.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_range.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_solaris.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_stoptheworld_fuchsia.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_stoptheworld_mac.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_stoptheworld_win.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_suppressions.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_tls_get_addr.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_thread_arg_retval.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_thread_registry.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_type_traits.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_win.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_win_interception.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.osx.dir/sanitizer_termination.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.osx.dir/sanitizer_common_libcdep.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.osx.dir/sanitizer_allocator_checks.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.osx.dir/sanitizer_dl.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.osx.dir/sanitizer_linux_libcdep.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.osx.dir/sanitizer_mac_libcdep.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.osx.dir/sanitizer_posix_libcdep.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.osx.dir/sanitizer_stoptheworld_linux_libcdep.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonLibc.osx.dir/sanitizer_stoptheworld_netbsd_libcdep.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonCoverage.osx.dir/sancov_flags.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonCoverage.osx.dir/sanitizer_coverage_fuchsia.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonCoverage.osx.dir/sanitizer_coverage_libcdep_new.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonCoverage.osx.dir/sanitizer_coverage_win_sections.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_allocator_report.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_chained_origin_depot.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_stack_store.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_stackdepot.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_stacktrace.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_stacktrace_libcdep.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_stacktrace_printer.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_stacktrace_sparc.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_symbolizer.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_symbolizer_libbacktrace.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_symbolizer_libcdep.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_symbolizer_mac.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_symbolizer_markup.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_symbolizer_markup_fuchsia.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_symbolizer_posix_libcdep.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_symbolizer_report.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_symbolizer_report_fuchsia.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_symbolizer_win.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_unwind_linux_libcdep.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_unwind_fuchsia.cpp.o compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommonSymbolizer.osx.dir/sanitizer_unwind_win.cpp.o  -lc++  -lc  -ldl  -lm  -lpthread && cd /Volumes/Work/s/w/ir/x/w/llvm_build/lib/clang/20/lib/darwin && codesign --sign - -o linker-signed /Volumes/Work/s/w/ir/x/w/llvm_build/lib/clang/20/lib/darwin/libclang_rt.rtsan_osx_dynamic.dylib
clang++: warning: argument unused during compilation: '-stdlib=libc++' [-Wunused-command-line-argument]
ld64.lld: error: undefined symbol for arch arm64: std::__2::__libcpp_verbose_abort(char const*, ...)
>>> referenced by variant:313 (/Volumes/Work/s/w/ir/x/w/llvm_build/./bin/../include/c++/v1/variant:313)
>>>               compiler-rt/lib/rtsan/CMakeFiles/RTRtsan.osx.dir/rtsan_diagnostics.cpp.o:(symbol std::__2::__throw_bad_variant_access[abi:nn200000]()+0x10)
>>> did you mean: std::__1::__libcpp_verbose_abort(char const*, ...)
>>> defined in: /Volumes/Work/s/w/ir/cache/macos_sdk/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX13.3.sdk/usr/lib/libc++.tbd(/usr/lib/libc++.1.dylib)
clang++: error: linker command failed with exit code 1 (use -v to see invocation)

@cjappl
Copy link
Contributor Author

cjappl commented Sep 23, 2024

Thanks for looking, I will continue investigating.

Is there any easy way for me to run builds against this system for me to verify any potential fixes without bugging you?

@zeroomega
Copy link
Contributor

Thanks for looking, I will continue investigating.

Is there any easy way for me to run builds against this system for me to verify any potential fixes without bugging you?

If you have a branch in your public repo, I can launch a build job for you. You can ping me on discord. I am 'zeroomega86' on discord. Please rebase your branch against upstream main branch.

e.g. I uses zeroomega@642d4c8 to instrument the build file. The build task is https://ci.chromium.org/ui/p/fuchsia/builders/toolchain.ci.shadow/clang-mac-x64/b8735967159680657121/overview

You can see output:

in asan RTSAN_LINK_LIBS is 
in asan SANITIZER_CXX_ABI_LIBRARIES is 
in asan SANITIZER_COMMON_LINK_LIBS is c
in rtsan RTSAN_LINK_LIBS is c++;c
in rtsan SANITIZER_CXX_ABI_LIBRARIES is c++;c
in rtsan SANITIZER_COMMON_LINK_LIBS is c

In https://logs.chromium.org/logs/fuchsia/buildbucket/cr-buildbucket/8735967159680657121/+/u/clang/build/stdout

@cjappl
Copy link
Contributor Author

cjappl commented Sep 24, 2024

Thanks @zeroomega - looking into this now a bit further. I will ping you when I have something to build.

@cjappl
Copy link
Contributor Author

cjappl commented Sep 24, 2024

I am stopping for the night with no significant progress, I'll pick it back up tomorrow.

@cjappl
Copy link
Contributor Author

cjappl commented Sep 24, 2024

@MaskRay or @vitalybuka should it be possible to use the STL, like std::variant in the sanitizer runtimes?

We introduced std::variant and std::visit to rtsan in this PR (https://github.com/llvm/llvm-project/pull/109529/files)

But after doing some searching, it seems like not many STL containers/algorithms are in compiler-rt.

I'm wondering if we made a mistake going this direction or if we just have some easily solvable configuration issue.

@zeroomega
Copy link
Contributor

@cjappl I did some experiment later and I discovered that if I change SHARED to STATIC at

(without applying #109715). The build step will pass without issue.

In our build setup, we set LIBCXXABI_ENABLE_SHARED to OFF for all platforms, including mac. I think what is happening is that when that line was set to SHARED, it was trying to find libc++.dylib from the build directory, which didn't exist, so it found the host's libc++.dylib instead, which uses a different ABI.

Is there a reason why on mac it requires to build rtsan as a shared library but static for other platform?

@vitalybuka
Copy link
Collaborator

vitalybuka commented Sep 24, 2024

@MaskRay or @vitalybuka should it be possible to use the STL, like std::variant in the sanitizer runtimes?

We introduced std::variant and std::visit to rtsan in this PR (https://github.com/llvm/llvm-project/pull/109529/files)

But after doing some searching, it seems like not many STL containers/algorithms are in compiler-rt.

I'm wondering if we made a mistake going this direction or if we just have some easily solvable configuration issue.

There could be multiple problems:

  1. Linking C++ runtime maybe be required even for C binaries.
  2. Also C++ binary can be linked with different vendor or version of stdlib.
  3. Allocator or interceptors can be triggered.

I'd suggest removing it.

@davidtrevelyan
Copy link
Contributor

Many thanks @vitalybuka - understood. Thanks everyone for the valuable inputs, I've drafted a PR for removing the std::variant in rtsan here: #109786

cjappl pushed a commit that referenced this pull request Sep 24, 2024
Following issue #109529 and PR
#109715, this PR removes the
`std::variant` in rtsan's diagnostics code, in favour of a solution by
`enum` without the C++ runtime.
@cjappl cjappl merged commit fd88121 into llvm:main Sep 25, 2024
10 checks passed
@cjappl cjappl deleted the fix_abi branch September 25, 2024 13:09
cjappl added a commit that referenced this pull request Sep 25, 2024
Follow on to #109715 

This better matches this same variable in asan, ubsan, hwasan, and nsan.
Shows the logical coupling, and describes them as "dynamic only" which
is their intent.
@llvm-ci
Copy link
Collaborator

llvm-ci commented Sep 28, 2024

LLVM Buildbot has detected a new failure on builder clang-ppc64-aix running on aix-ppc64 while building compiler-rt at step 3 "clean-build-dir".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/64/builds/1090

Here is the relevant piece of the build log for the reference
Step 3 (clean-build-dir) failure: Delete failed. (failure) (timed out)
Step 6 (test-build-unified-tree-check-all) failure: test (failure)
******************** TEST 'Clang :: ClangScanDeps/verbose.test' FAILED ********************
Exit Code: 1

Command Output (stderr):
--
RUN: at line 1: rm -rf /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/build/tools/clang/test/ClangScanDeps/Output/verbose.test.tmp
+ rm -rf /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/build/tools/clang/test/ClangScanDeps/Output/verbose.test.tmp
RUN: at line 2: split-file /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/llvm-project/clang/test/ClangScanDeps/verbose.test /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/build/tools/clang/test/ClangScanDeps/Output/verbose.test.tmp
+ split-file /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/llvm-project/clang/test/ClangScanDeps/verbose.test /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/build/tools/clang/test/ClangScanDeps/Output/verbose.test.tmp
RUN: at line 3: sed -e "s|DIR|/home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/build/tools/clang/test/ClangScanDeps/Output/verbose.test.tmp|g" /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/build/tools/clang/test/ClangScanDeps/Output/verbose.test.tmp/cdb.json.in > /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/build/tools/clang/test/ClangScanDeps/Output/verbose.test.tmp/cdb.json
+ sed -e 's|DIR|/home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/build/tools/clang/test/ClangScanDeps/Output/verbose.test.tmp|g' /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/build/tools/clang/test/ClangScanDeps/Output/verbose.test.tmp/cdb.json.in
RUN: at line 5: /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/build/bin/clang-scan-deps -compilation-database /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/build/tools/clang/test/ClangScanDeps/Output/verbose.test.tmp/cdb.json -v -o /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/build/tools/clang/test/ClangScanDeps/Output/verbose.test.tmp/result.json 2>&1 | /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/build/bin/FileCheck /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/llvm-project/clang/test/ClangScanDeps/verbose.test
+ /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/build/bin/clang-scan-deps -compilation-database /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/build/tools/clang/test/ClangScanDeps/Output/verbose.test.tmp/cdb.json -v -o /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/build/tools/clang/test/ClangScanDeps/Output/verbose.test.tmp/result.json
+ /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/build/bin/FileCheck /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/llvm-project/clang/test/ClangScanDeps/verbose.test
/home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/llvm-project/clang/test/ClangScanDeps/verbose.test:6:11: error: CHECK: expected string not found in input
// CHECK: *** Virtual File System Stats:
          ^
<stdin>:1:1: note: scanning from here
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
^
<stdin>:1:8: note: possible intended match here
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
       ^

Input file: <stdin>
Check file: /home/powerllvm/powerllvm_env/aix-ppc64/clang-ppc64-aix/llvm-project/clang/test/ClangScanDeps/verbose.test

-dump-input=help explains the following input dump.

Input was:
<<<<<<
           1: PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace. 
check:6'0     X~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match found
check:6'1            ?                                                                                                     possible intended match
>>>>>>

--

********************


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants