@@ -17,6 +17,7 @@ permissions:
1717
1818env :
1919 FORCE_COLOR : 1
20+ OPENSSL_VER : 3.5.7
2021
2122jobs :
2223 build-san-reusable :
@@ -45,28 +46,53 @@ jobs:
4546 sudo update-alternatives --set clang /usr/bin/clang-20
4647 sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-20 100
4748 sudo update-alternatives --set clang++ /usr/bin/clang++-20
48-
49- if [ "${SANITIZER}" = "TSan" ]; then
50- # Reduce ASLR to avoid TSan crashing
51- sudo sysctl -w vm.mmap_rnd_bits=28
52- fi
53-
54- - name : Sanitizer option setup
55- run : |
56- if [ "${SANITIZER}" = "TSan" ]; then
57- echo "TSAN_OPTIONS=${SAN_LOG_OPTION} suppressions=${GITHUB_WORKSPACE}/Tools/tsan/suppressions${{
58- fromJSON(inputs.free-threading)
59- && '_free_threading'
60- || ''
61- }}.txt handle_segv=0" >> "$GITHUB_ENV"
62- else
63- echo "UBSAN_OPTIONS=${SAN_LOG_OPTION}" >> "$GITHUB_ENV"
64- fi
6549 echo "CC=clang" >> "$GITHUB_ENV"
6650 echo "CXX=clang++" >> "$GITHUB_ENV"
51+ - name : TSan option setup
52+ if : inputs.sanitizer == 'TSan'
53+ run : |
54+ sudo sysctl -w vm.mmap_rnd_bits=28 # Reduce ASLR to avoid TSan crashing
55+
56+ echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> "$GITHUB_ENV"
57+ echo "OPENSSL_DIR=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}" >> "$GITHUB_ENV"
58+ echo "TSAN_OPTIONS=${SAN_LOG_OPTION} suppressions=${GITHUB_WORKSPACE}/Tools/tsan/suppressions${SUPPRESSIONS_SUFFIX}.txt handle_segv=0" >> "$GITHUB_ENV"
6759 env :
68- SANITIZER : ${{ inputs.sanitizer }}
6960 SAN_LOG_OPTION : log_path=${{ github.workspace }}/san_log
61+ SUPPRESSIONS_SUFFIX : >-
62+ ${{
63+ fromJSON(inputs.free-threading)
64+ && '_free_threading'
65+ || ''
66+ }}
67+ - name : UBSan option setup
68+ if : inputs.sanitizer != 'TSan'
69+ run : >-
70+ echo
71+ "UBSAN_OPTIONS=${SAN_LOG_OPTION}"
72+ >> "$GITHUB_ENV"
73+ env :
74+ SAN_LOG_OPTION : log_path=${{ github.workspace }}/san_log
75+ - name : Add ccache to PATH
76+ run : |
77+ echo "PATH=/usr/lib/ccache:$PATH" >> "$GITHUB_ENV"
78+ - name : ' Restore OpenSSL build (TSan)'
79+ id : cache-openssl
80+ if : inputs.sanitizer == 'TSan'
81+ uses : actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
82+ with :
83+ path : ./multissl/openssl/${{ env.OPENSSL_VER }}
84+ key : ${{ env.IMAGE_OS_VERSION }}-multissl-openssl-tsan-${{ env.OPENSSL_VER }}
85+ - name : Install OpenSSL (TSan)
86+ if : >-
87+ inputs.sanitizer == 'TSan'
88+ && steps.cache-openssl.outputs.cache-hit != 'true'
89+ run : >-
90+ python3 Tools/ssl/multissltests.py
91+ --steps=library
92+ --base-directory="${MULTISSL_DIR}"
93+ --openssl="${OPENSSL_VER}"
94+ --system=Linux
95+ --tsan
7096 - name : Configure CPython
7197 run : >-
7298 ./configure
77103 || '--with-undefined-behavior-sanitizer'
78104 }}
79105 --with-pydebug
106+ ${{ inputs.sanitizer == 'TSan' && '--with-openssl="$OPENSSL_DIR" --with-openssl-rpath=auto' || '' }}
80107 ${{ fromJSON(inputs.free-threading) && '--disable-gil' || '' }}
81108 - name : Build CPython
82109 run : make -j4
0 commit comments