Stephen Hines | 2d1fdb2 | 2014-05-28 23:58:16 -0700 | [diff] [blame] | 1 | #!/usr/bin/python |
| 2 | |
| 3 | import os, sys, subprocess, tempfile |
| 4 | from android_common import * |
| 5 | |
| 6 | ANDROID_TMPDIR = '/data/local/tmp/Output' |
| 7 | |
| 8 | here = os.path.abspath(os.path.dirname(sys.argv[0])) |
| 9 | device_binary = os.path.join(ANDROID_TMPDIR, os.path.basename(sys.argv[0])) |
| 10 | |
| 11 | def build_env(): |
| 12 | args = [] |
| 13 | # Android linker ignores RPATH. Set LD_LIBRARY_PATH to Output dir. |
| 14 | args.append('LD_LIBRARY_PATH=%s:%s' % |
| 15 | (ANDROID_TMPDIR, os.environ.get('LD_LIBRARY_PATH', ''))) |
| 16 | for (key, value) in os.environ.items(): |
Stephen Hines | 86277eb | 2015-03-23 12:06:32 -0700 | [diff] [blame] | 17 | if key in ['ASAN_OPTIONS', 'ASAN_ACTIVATION_OPTIONS']: |
Stephen Hines | 2d1fdb2 | 2014-05-28 23:58:16 -0700 | [diff] [blame] | 18 | args.append('%s="%s"' % (key, value)) |
| 19 | return ' '.join(args) |
| 20 | |
| 21 | device_env = build_env() |
| 22 | device_args = ' '.join(sys.argv[1:]) # FIXME: escape? |
| 23 | device_stdout = device_binary + '.stdout' |
| 24 | device_stderr = device_binary + '.stderr' |
| 25 | device_exitcode = device_binary + '.exitcode' |
Stephen Hines | 6a211c5 | 2014-07-21 00:49:56 -0700 | [diff] [blame] | 26 | ret = adb(['shell', 'cd %s && %s asanwrapper %s %s >%s 2>%s ; echo $? >%s' % |
Stephen Hines | 2d1fdb2 | 2014-05-28 23:58:16 -0700 | [diff] [blame] | 27 | (ANDROID_TMPDIR, device_env, device_binary, device_args, |
| 28 | device_stdout, device_stderr, device_exitcode)]) |
| 29 | if ret != 0: |
| 30 | sys.exit(ret) |
| 31 | |
| 32 | sys.stdout.write(pull_from_device(device_stdout)) |
| 33 | sys.stderr.write(pull_from_device(device_stderr)) |
| 34 | sys.exit(int(pull_from_device(device_exitcode))) |