tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

sanitizers.sh (1992B)


      1 #!/usr/bin/env bash
      2 # This file is used by build.sh to setup sanitizers.
      3 
      4 sanitizer_flags=""
      5 sanitizers=()
      6 
      7 # This tracks what sanitizers are enabled so they don't get enabled twice.  This
      8 # means that doing things that enable the same sanitizer twice (such as enabling
      9 # both --asan and --fuzz) is order-dependent: only the first is used.
     10 enable_sanitizer()
     11 {
     12    local san="$1"
     13    for i in "${sanitizers[@]}"; do
     14        [ "$san" = "$i" ] && return
     15    done
     16    sanitizers+=("$san")
     17 
     18    if [ -z "$sanitizer_flags" ]; then
     19        gyp_params+=(-Dno_zdefs=1)
     20    fi
     21 
     22    local cflags
     23    cflags=$(${python:-python3} "${cwd}/coreconf/sanitizers.py" "$@")
     24    if [ $? -ne 0 ]; then
     25        exit 1
     26    fi
     27    sanitizer_flags="$sanitizer_flags $cflags"
     28 }
     29 
     30 enable_sancov()
     31 {
     32    local clang_version
     33    clang_version=$($CC --version | grep -oE '([0-9]{1,}\.)+[0-9]{1,}')
     34    if [[ ${clang_version:0:1} -lt 4 && ${clang_version:0:1} -eq 3 && ${clang_version:2:1} -lt 9 ]]; then
     35        echo "Need at least clang-3.9 (better 4.0) for sancov." 1>&2
     36        exit 1
     37    fi
     38 
     39    local sancov
     40    if [ -n "$1" ]; then
     41        sancov="$1"
     42    elif [ "${clang_version:0:3}" = "3.9" ]; then
     43        sancov=edge,indirect-calls,8bit-counters
     44    else
     45        sancov=trace-pc-guard,trace-cmp
     46    fi
     47    enable_sanitizer sancov "$sancov"
     48 }
     49 
     50 enable_sourcecov()
     51 {
     52    enable_sanitizer sourcecov
     53 }
     54 
     55 enable_ubsan()
     56 {
     57    local ubsan
     58    if [ -n "$1" ]; then
     59        ubsan="$1"
     60    else
     61        ubsan=undefined,local-bounds
     62    fi
     63    enable_sanitizer ubsan "$ubsan"
     64 }
     65 
     66 # Not strictly a sanitizer, but the pattern fits
     67 scanbuild=()
     68 enable_scanbuild()
     69 {
     70    [ "${#scanbuild[@]}" -gt 0 ] && return
     71 
     72    scanbuild=(scan-build)
     73    if [ -n "$1" ]; then
     74        scanbuild+=(-o "$1")
     75    fi
     76    # pass on CC and CCC to scanbuild
     77    if [ -n "$CC" ]; then
     78        scanbuild+=(--use-cc="$CC")
     79    fi
     80    if [ -n "$CCC" ]; then
     81        scanbuild+=(--use-c++="$CCC")
     82    fi
     83 }
     84 
     85 run_scanbuild()
     86 {
     87    "${scanbuild[@]}" "$@"
     88 }