1*8975f5c5SAndroid Build Coastguard Worker#! /usr/bin/env python3 2*8975f5c5SAndroid Build Coastguard Worker# Copyright 2024 The Chromium Authors 3*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 4*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file. 5*8975f5c5SAndroid Build Coastguard Worker 6*8975f5c5SAndroid Build Coastguard Workerimport argparse 7*8975f5c5SAndroid Build Coastguard Workerimport pathlib 8*8975f5c5SAndroid Build Coastguard Worker 9*8975f5c5SAndroid Build Coastguard Worker 10*8975f5c5SAndroid Build Coastguard Workerdef _generate(arch): 11*8975f5c5SAndroid Build Coastguard Worker return f"""\ 12*8975f5c5SAndroid Build Coastguard Worker#!/system/bin/sh 13*8975f5c5SAndroid Build Coastguard Worker# See: https://github.com/google/sanitizers/wiki/AddressSanitizerOnAndroid/\ 14*8975f5c5SAndroid Build Coastguard Worker01f8df1ac1a447a8475cdfcb03e8b13140042dbd#running-with-wrapsh-recommended 15*8975f5c5SAndroid Build Coastguard WorkerHERE="$(cd "$(dirname "$0")" && pwd)" 16*8975f5c5SAndroid Build Coastguard Worker# Options suggested by wiki docs: 17*8975f5c5SAndroid Build Coastguard Worker_ASAN_OPTIONS="log_to_syslog=false,allow_user_segv_handler=1" 18*8975f5c5SAndroid Build Coastguard Worker# Chromium-specific option (supposedly for graphics drivers): 19*8975f5c5SAndroid Build Coastguard Worker_ASAN_OPTIONS="$_ASAN_OPTIONS,strict_memcmp=0,use_sigaltstack=1" 20*8975f5c5SAndroid Build Coastguard Worker_LD_PRELOAD="$HERE/libclang_rt.asan-{arch}-android.so" 21*8975f5c5SAndroid Build Coastguard Workerlog -t cr_wrap.sh -- "Launching with ASAN enabled." 22*8975f5c5SAndroid Build Coastguard Workerlog -t cr_wrap.sh -- "LD_PRELOAD=$_LD_PRELOAD" 23*8975f5c5SAndroid Build Coastguard Workerlog -t cr_wrap.sh -- "ASAN_OPTIONS=$_ASAN_OPTIONS" 24*8975f5c5SAndroid Build Coastguard Workerlog -t cr_wrap.sh -- "Command: $0 $@" 25*8975f5c5SAndroid Build Coastguard Worker# Export LD_PRELOAD after running "log" commands to not risk it affecting 26*8975f5c5SAndroid Build Coastguard Worker# them. 27*8975f5c5SAndroid Build Coastguard Workerexport LD_PRELOAD=$_LD_PRELOAD 28*8975f5c5SAndroid Build Coastguard Workerexport ASAN_OPTIONS=$_ASAN_OPTIONS 29*8975f5c5SAndroid Build Coastguard Workerexec "$@" 30*8975f5c5SAndroid Build Coastguard Worker""" 31*8975f5c5SAndroid Build Coastguard Worker 32*8975f5c5SAndroid Build Coastguard Worker 33*8975f5c5SAndroid Build Coastguard Workerdef main(): 34*8975f5c5SAndroid Build Coastguard Worker parser = argparse.ArgumentParser() 35*8975f5c5SAndroid Build Coastguard Worker parser.add_argument('--arch', required=True) 36*8975f5c5SAndroid Build Coastguard Worker parser.add_argument('--output', required=True) 37*8975f5c5SAndroid Build Coastguard Worker args = parser.parse_args() 38*8975f5c5SAndroid Build Coastguard Worker 39*8975f5c5SAndroid Build Coastguard Worker pathlib.Path(args.output).write_text(_generate(args.arch)) 40*8975f5c5SAndroid Build Coastguard Worker 41*8975f5c5SAndroid Build Coastguard Worker 42*8975f5c5SAndroid Build Coastguard Workerif __name__ == '__main__': 43*8975f5c5SAndroid Build Coastguard Worker main() 44