This is an archive of the discontinued LLVM Phabricator instance.

sanitizer_common: trap on CHECK failure
ClosedPublic

Authored by dvyukov on Oct 25 2021, 5:19 AM.

Details

Summary

Trapping on CHECK failure makes it more convinient to use with gdb
(no need to set a breakpoint each time). Without a debugger attached
trap should terminate the program as well.

Diff Detail

Event Timeline

dvyukov requested review of this revision.Oct 25 2021, 5:19 AM
dvyukov created this revision.
Herald added a project: Restricted Project. · View Herald TranscriptOct 25 2021, 5:19 AM
Herald added a subscriber: Restricted Project. · View Herald Transcript
melver accepted this revision.Oct 25 2021, 5:46 AM
This revision is now accepted and ready to land.Oct 25 2021, 5:46 AM
This revision was landed with ongoing or failed builds.Oct 25 2021, 5:51 AM
This revision was automatically updated to reflect the committed changes.

PPC64 buildbot failed with:

https://lab.llvm.org/buildbot#builders/52/builds/11770

  • TEST 'MemorySanitizer-POWERPC64 :: check-handler.cpp' FAILED ****

Script:

: 'RUN: at line 1'; /home/buildbots/ppc64be-clang-test/clang-ppc64be/stage1/./bin/clang --driver-mode=g++ -fsanitize=memory -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer -fno-optimize-sibling-calls -m64 -gline-tables-only -O0 -g /home/buildbots/ppc64be-clang-test/clang-ppc64be/llvm/compiler-rt/test/msan/check-handler.cpp -o /home/buildbots/ppc64be-clang-test/clang-ppc64be/stage1/projects/compiler-rt/test/msan/POWERPC64/Output/check-handler.cpp.tmp && not /home/buildbots/ppc64be-clang-test/clang-ppc64be/stage1/projects/compiler-rt/test/msan/POWERPC64/Output/check-handler.cpp.tmp 2>&1 | FileCheck /home/buildbots/ppc64be-clang-test/clang-ppc64be/llvm/compiler-rt/test/msan/check-handler.cpp

I wonder if Trap causes 0 exit status on PPC somehow? That would be wrong, but I am not sure how to check/fix.
I've checked x86_64 and I see that Trap still causes non-0 exit status. For this test I am getting:

$ ./a.out && echo ok
MemorySanitizer: bad pointer 0x7f25541fc001
MemorySanitizer: CHECK failed: sanitizer_allocator_secondary.h:177 "((IsAligned(reinterpret_cast<uptr>(p), page_size_))) != (0)" (0x0, 0x0) (tid=654327)

#0 0x444a09 in CheckUnwind() /usr/local/google/home/dvyukov/src/llvm/compiler-rt/lib/msan/msan.cpp:415:3
#1 0x431507 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) /usr/local/google/home/dvyukov/src/llvm/compiler-rt/lib/sanitizer_common/sanitizer_termination.cpp:86:5
#2 0x445cc1 in GetMetaData /usr/local/google/home/dvyukov/src/llvm/compiler-rt/lib/msan/../sanitizer_common/sanitizer_allocator_secondary.h
#3 0x445cc1 in __sanitizer::CombinedAllocator<__sanitizer::SizeClassAllocator64<__msan::AP64>, __sanitizer::LargeMmapAllocatorPtrArrayDynamic>::GetMetaData(void const*) /usr/local/google/home/dvyukov/src/llvm/compiler-rt/lib/msan/../sanitizer_common/sanitizer_allocator_combined.h:128:23
#4 0x4459b9 in __msan::MsanDeallocate(__sanitizer::StackTrace*, void*) /usr/local/google/home/dvyukov/src/llvm/compiler-rt/lib/msan/msan_allocator.cpp:199:59
#5 0x4499b4 in free /usr/local/google/home/dvyukov/src/llvm/compiler-rt/lib/msan/msan_interceptors.cpp:225:3
#6 0x4a00ab in main /usr/local/google/home/dvyukov/src/llvm/compiler-rt/lib/tsan/rtl/../../../test/msan/check-handler.cpp:11:3
#7 0x7f2555ca4e49 in __libc_start_main csu/../csu/libc-start.c:314:16
#8 0x41f229 in _start (/usr/local/google/home/dvyukov/src/llvm/compiler-rt/lib/tsan/rtl/a.out+0x41f229)

Illegal instruction
$

FTR, sent https://reviews.llvm.org/D112455 which is the proposed "fix" until somebody with ppc access debugs this.