xref: /aosp_15_r20/external/skia/site/docs/dev/testing/xsan.md (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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