bryancall commented on code in PR #13610: URL: https://github.com/apache/trafficserver/pull/13610#discussion_r3918206896
########## CMakeLists.txt: ########## @@ -449,6 +450,43 @@ elseif(ENABLE_TSAN) add_link_options(-g -fsanitize=thread) endif() +# UndefinedBehaviorSanitizer. Deliberately not part of the either/or chain above: +# UBSan instruments arithmetic, shifts, and type loads rather than replacing the +# allocator or the thread runtime, so it composes with either of them as well as +# standing on its own: asan gives -fsanitize=address,undefined and tsan gives +# -fsanitize=thread,undefined. Only the asan pairing has a preset, since that is +# the combination developers ask for, but the option itself does not restrict it. +# +# vptr is excluded. It needs a matching type_info at every polymorphic access, and +# a plugin loaded with dlopen does not reliably share type identity with the main +# image, so the check reports the plugin boundary rather than a real bug. +# +# Findings recover, so a single run reports every distinct site instead of stopping +# at the first. That is the default for most checks, but which checks recover by +# default varies between compilers, so ask for it explicitly rather than inherit it. +# A few checks cannot recover by construction (unreachable, return) and still abort. +# Set UBSAN_OPTIONS=halt_on_error=1 at runtime to stop on the first finding, which +# is what a gating job would want. +if(ENABLE_UBSAN) + # This can fail two ways: the toolchain does not know -fsanitize=undefined at all, + # or it knows the flag but cannot link the runtime library, which some distributions + # package separately from the compiler. Without the check the second case surfaces as + # a bare "cannot find libubsan.so" from the linker after compiling hundreds of + # objects, so establish it here and let the message cover both. + include(CheckLinkerFlag) + check_linker_flag(CXX -fsanitize=undefined HAS_UBSAN_SUPPORT) + if(NOT HAS_UBSAN_SUPPORT) + message( + FATAL_ERROR + "ENABLE_UBSAN was requested, but this toolchain cannot link -fsanitize=undefined. Either the compiler does not support the flag, or it does and the sanitizer runtime is missing. If the compiler is GCC, that runtime is the libubsan package." Review Comment: Correct, that was the Fedora spelling. Fixed in 9cc894940a by dropping the package name rather than trying to enumerate distributions, since any specific name will be wrong somewhere. The message now says the GCC runtime ships separately under a name that varies by distribution, which stays actionable without making a claim that is false on some platform. The only remaining `libubsan` mention is inside a quoted linker error in the comment above, which is the actual output a developer sees rather than a package name. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
