1*c8dee2aaSAndroid Build Coastguard Worker 2*c8dee2aaSAndroid Build Coastguard Worker--- 3*c8dee2aaSAndroid Build Coastguard Workertitle: "MSAN, ASAN, & TSAN" 4*c8dee2aaSAndroid Build Coastguard WorkerlinkTitle: "MSAN, ASAN, & TSAN" 5*c8dee2aaSAndroid Build Coastguard Worker 6*c8dee2aaSAndroid Build Coastguard Worker--- 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker 9*c8dee2aaSAndroid Build Coastguard Worker*Testing Skia with memory, address, and thread santizers.* 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard WorkerCompiling Skia with ASAN, UBSAN, or TSAN can be done with the latest version of Clang. 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker- UBSAN works on Linux, Mac, Android, and Windows, though some checks are platform-specific. 14*c8dee2aaSAndroid Build Coastguard Worker- ASAN works on Linux, Mac, Android, and Windows. 15*c8dee2aaSAndroid Build Coastguard Worker- TSAN works on Linux and Mac. 16*c8dee2aaSAndroid Build Coastguard Worker- MSAN works on Linux[1]. 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard WorkerWe find that testing sanitizer builds with libc++ uncovers more issues than 19*c8dee2aaSAndroid Build Coastguard Workerwith the system-provided C++ standard library, which is usually libstdc++. 20*c8dee2aaSAndroid Build Coastguard Workerlibc++ proactively hooks into sanitizers to help their analyses. 21*c8dee2aaSAndroid Build Coastguard WorkerWe ship a copy of libc++ with our Linux toolchain in /lib. 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker[1]To compile and run with MSAN, an MSAN-instrumented version of libc++ is needed. 24*c8dee2aaSAndroid Build Coastguard WorkerIt's generally easiest to run one of the following 2 steps to build/download a recent version 25*c8dee2aaSAndroid Build Coastguard Workerof Clang and the instrumented libc++, located in /msan. 26*c8dee2aaSAndroid Build Coastguard Worker 27*c8dee2aaSAndroid Build Coastguard WorkerDownloading Clang binaries (Googlers Only) 28*c8dee2aaSAndroid Build Coastguard Worker------------------------------------------ 29*c8dee2aaSAndroid Build Coastguard WorkerThis requires gsutil, part of the [gcloud sdk](https://cloud.google.com/sdk/downloads). 30*c8dee2aaSAndroid Build Coastguard Worker 31*c8dee2aaSAndroid Build Coastguard Worker<!--?prettify lang=sh?--> 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker gcloud auth application-default login 34*c8dee2aaSAndroid Build Coastguard Worker CLANGDIR="${HOME}/clang" 35*c8dee2aaSAndroid Build Coastguard Worker ./bin/sk asset download clang_linux $CLANGDIR 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard WorkerBuilding Clang binaries from scratch (Other users) 38*c8dee2aaSAndroid Build Coastguard Worker--------------------------- 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Worker<!--?prettify lang=sh?--> 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard Worker CLANGDIR="${HOME}/clang" 43*c8dee2aaSAndroid Build Coastguard Worker 44*c8dee2aaSAndroid Build Coastguard Worker python3 tools/git-sync-deps 45*c8dee2aaSAndroid Build Coastguard Worker CC= CXX= infra/bots/assets/clang_linux/create.py -t "$CLANGDIR" 46*c8dee2aaSAndroid Build Coastguard Worker 47*c8dee2aaSAndroid Build Coastguard WorkerConfigure and Compile Skia with MSAN 48*c8dee2aaSAndroid Build Coastguard Worker------------------------------------ 49*c8dee2aaSAndroid Build Coastguard Worker 50*c8dee2aaSAndroid Build Coastguard Worker<!--?prettify lang=sh?--> 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Worker CLANGDIR="${HOME}/clang" 53*c8dee2aaSAndroid Build Coastguard Worker mkdir -p out/msan 54*c8dee2aaSAndroid Build Coastguard Worker cat > out/msan/args.gn <<- EOF 55*c8dee2aaSAndroid Build Coastguard Worker cc = "${CLANGDIR}/bin/clang" 56*c8dee2aaSAndroid Build Coastguard Worker cxx = "${CLANGDIR}/bin/clang++" 57*c8dee2aaSAndroid Build Coastguard Worker extra_cflags = [ "-B${CLANGDIR}/bin" ] 58*c8dee2aaSAndroid Build Coastguard Worker extra_ldflags = [ 59*c8dee2aaSAndroid Build Coastguard Worker "-B${CLANGDIR}/bin", 60*c8dee2aaSAndroid Build Coastguard Worker "-fuse-ld=lld", 61*c8dee2aaSAndroid Build Coastguard Worker "-L${CLANGDIR}/msan", 62*c8dee2aaSAndroid Build Coastguard Worker "-Wl,-rpath,${CLANGDIR}/msan" ] 63*c8dee2aaSAndroid Build Coastguard Worker sanitize = "MSAN" 64*c8dee2aaSAndroid Build Coastguard Worker skia_use_fontconfig = false 65*c8dee2aaSAndroid Build Coastguard Worker EOF 66*c8dee2aaSAndroid Build Coastguard Worker python3 tools/git-sync-deps 67*c8dee2aaSAndroid Build Coastguard Worker bin/gn gen out/msan 68*c8dee2aaSAndroid Build Coastguard Worker ninja -C out/msan 69*c8dee2aaSAndroid Build Coastguard Worker 70*c8dee2aaSAndroid Build Coastguard WorkerConfigure and Compile Skia with ASAN 71*c8dee2aaSAndroid Build Coastguard Worker------------------------------------ 72*c8dee2aaSAndroid Build Coastguard Worker 73*c8dee2aaSAndroid Build Coastguard Worker<!--?prettify lang=sh?--> 74*c8dee2aaSAndroid Build Coastguard Worker 75*c8dee2aaSAndroid Build Coastguard Worker CLANGDIR="${HOME}/clang" 76*c8dee2aaSAndroid Build Coastguard Worker mkdir -p out/asan 77*c8dee2aaSAndroid Build Coastguard Worker cat > out/asan/args.gn <<- EOF 78*c8dee2aaSAndroid Build Coastguard Worker cc = "${CLANGDIR}/bin/clang" 79*c8dee2aaSAndroid Build Coastguard Worker cxx = "${CLANGDIR}/bin/clang++" 80*c8dee2aaSAndroid Build Coastguard Worker sanitize = "ASAN" 81*c8dee2aaSAndroid Build Coastguard Worker extra_ldflags = [ "-fuse-ld=lld", "-Wl,-rpath,${CLANGDIR}/lib/x86_64-unknown-linux-gnu" ] 82*c8dee2aaSAndroid Build Coastguard Worker EOF 83*c8dee2aaSAndroid Build Coastguard Worker python3 tools/git-sync-deps 84*c8dee2aaSAndroid Build Coastguard Worker bin/gn gen out/asan 85*c8dee2aaSAndroid Build Coastguard Worker ninja -C out/asan 86*c8dee2aaSAndroid Build Coastguard Worker 87*c8dee2aaSAndroid Build Coastguard WorkerConfigure and Compile Skia with TSAN 88*c8dee2aaSAndroid Build Coastguard Worker------------------------------------ 89*c8dee2aaSAndroid Build Coastguard Worker 90*c8dee2aaSAndroid Build Coastguard Worker<!--?prettify lang=sh?--> 91*c8dee2aaSAndroid Build Coastguard Worker 92*c8dee2aaSAndroid Build Coastguard Worker CLANGDIR="${HOME}/clang" 93*c8dee2aaSAndroid Build Coastguard Worker mkdir -p out/tsan 94*c8dee2aaSAndroid Build Coastguard Worker cat > out/tsan/args.gn <<- EOF 95*c8dee2aaSAndroid Build Coastguard Worker cc = "${CLANGDIR}/bin/clang" 96*c8dee2aaSAndroid Build Coastguard Worker cxx = "${CLANGDIR}/bin/clang++" 97*c8dee2aaSAndroid Build Coastguard Worker sanitize = "TSAN" 98*c8dee2aaSAndroid Build Coastguard Worker is_debug = false 99*c8dee2aaSAndroid Build Coastguard Worker extra_ldflags = [ "-Wl,-rpath,${CLANGDIR}/lib" ] 100*c8dee2aaSAndroid Build Coastguard Worker EOF 101*c8dee2aaSAndroid Build Coastguard Worker python3 tools/git-sync-deps 102*c8dee2aaSAndroid Build Coastguard Worker bin/gn gen out/tsan 103*c8dee2aaSAndroid Build Coastguard Worker ninja -C out/tsan 104*c8dee2aaSAndroid Build Coastguard Worker 105*c8dee2aaSAndroid Build Coastguard Worker 106