123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- ## Copyright (c) 2018 The WebM project authors. All Rights Reserved.
- ##
- ## Use of this source code is governed by a BSD-style license
- ## that can be found in the LICENSE file in the root of the source
- ## tree. An additional intellectual property rights grant can be found
- ## in the file PATENTS. All contributing project authors may
- ## be found in the AUTHORS file in the root of the source tree.
- ##
- ## Sourcing this file sets environment variables to simplify setting up
- ## sanitizer builds and testing.
- sanitizer="${1}"
- case "${sanitizer}" in
- address) ;;
- cfi) ;;
- integer) ;;
- memory) ;;
- thread) ;;
- undefined) ;;
- clear)
- echo "Clearing environment:"
- set -x
- unset CC CXX LD AR
- unset CFLAGS CXXFLAGS LDFLAGS
- unset ASAN_OPTIONS MSAN_OPTIONS TSAN_OPTIONS UBSAN_OPTIONS
- set +x
- return
- ;;
- *)
- echo "Usage: source set_analyzer_env.sh [<sanitizer>|clear]"
- echo " Supported sanitizers:"
- echo " address cfi integer memory thread undefined"
- return 1
- ;;
- esac
- if [ ! $(which clang) ]; then
- # TODO(johannkoenig): Support gcc analyzers.
- echo "ERROR: 'clang' must be in your PATH"
- return 1
- fi
- # Warnings.
- if [ "${sanitizer}" = "undefined" -o "${sanitizer}" = "integer" ]; then
- echo "WARNING: When building the ${sanitizer} sanitizer for 32 bit targets"
- echo "you must run:"
- echo "export LDFLAGS=\"\${LDFLAGS} --rtlib=compiler-rt -lgcc_s\""
- echo "See http://llvm.org/bugs/show_bug.cgi?id=17693 for details."
- fi
- if [ "${sanitizer}" = "undefined" ]; then
- major_version=$(clang --version | head -n 1 \
- | grep -o -E "[[:digit:]]\.[[:digit:]]\.[[:digit:]]" | cut -f1 -d.)
- if [ ${major_version} -eq 5 ]; then
- echo "WARNING: clang v5 has a problem with vp9 x86_64 high bit depth"
- echo "configurations. It can take ~40 minutes to compile"
- echo "vpx_dsp/x86/fwd_txfm_sse2.c"
- echo "clang v4 did not have this issue."
- fi
- fi
- echo "It is recommended to configure with '--enable-debug' to improve stack"
- echo "traces. On mac builds, run 'dysmutil' on the output binaries (vpxenc,"
- echo "test_libvpx, etc) to link the stack traces to source code lines."
- # Build configuration.
- cflags="-fsanitize=${sanitizer}"
- ldflags="-fsanitize=${sanitizer}"
- # http://code.google.com/p/webm/issues/detail?id=570
- cflags="${cflags} -fno-strict-aliasing"
- # Useful backtraces.
- cflags="${cflags} -fno-omit-frame-pointer"
- # Exact backtraces.
- cflags="${cflags} -fno-optimize-sibling-calls"
- if [ "${sanitizer}" = "cfi" ]; then
- # https://clang.llvm.org/docs/ControlFlowIntegrity.html
- cflags="${cflags} -fno-sanitize-trap=cfi -flto -fvisibility=hidden"
- ldflags="${ldflags} -fno-sanitize-trap=cfi -flto -fuse-ld=gold"
- export AR="llvm-ar"
- fi
- # TODO(http://crbug.com/webm/1615): -fsanitize=implicit-integer-truncation
- # causes conversion warnings in many of the x86 intrinsics and elsewhere.
- if [ "${sanitizer}" = "integer" ]; then
- major_version=$(clang --version | head -n 1 \
- | grep -o -E "[[:digit:]]\.[[:digit:]]\.[[:digit:]]" | cut -f1 -d.)
- if [ ${major_version} -ge 7 ]; then
- cflags="${cflags} -fno-sanitize=implicit-integer-truncation"
- ldflags="${ldflags} -fno-sanitize=implicit-integer-truncation"
- fi
- fi
- set -x
- export CC="clang"
- export CXX="clang++"
- export LD="clang++"
- export CFLAGS="${cflags}"
- export CXXFLAGS="${cflags}"
- export LDFLAGS="${ldflags}"
- set +x
- # Execution configuration.
- sanitizer_options=""
- sanitizer_options="${sanitizer_options}:handle_segv=1"
- sanitizer_options="${sanitizer_options}:handle_abort=1"
- sanitizer_options="${sanitizer_options}:handle_sigfpe=1"
- sanitizer_options="${sanitizer_options}:fast_unwind_on_fatal=1"
- sanitizer_options="${sanitizer_options}:allocator_may_return_null=1"
- case "${sanitizer}" in
- address)
- sanitizer_options="${sanitizer_options}:detect_stack_use_after_return=1"
- sanitizer_options="${sanitizer_options}:max_uar_stack_size_log=17"
- set -x
- export ASAN_OPTIONS="${sanitizer_options}"
- set +x
- ;;
- cfi)
- # No environment settings
- ;;
- memory)
- set -x
- export MSAN_OPTIONS="${sanitizer_options}"
- set +x
- ;;
- thread)
- # The thread sanitizer uses an entirely independent set of options.
- set -x
- export TSAN_OPTIONS="halt_on_error=1"
- set +x
- ;;
- undefined|integer)
- sanitizer_options="${sanitizer_options}:print_stacktrace=1"
- set -x
- export UBSAN_OPTIONS="${sanitizer_options}"
- set +x
- ;;
- esac
|