3 import os
, signal
, sys
, subprocess
, tempfile
4 from android_common
import *
6 ANDROID_TMPDIR
= "/data/local/tmp/Output"
8 device_binary
= host_to_device_path(sys
.argv
[0])
13 # Android linker ignores RPATH. Set LD_LIBRARY_PATH to Output dir.
14 args
.append("LD_LIBRARY_PATH=%s" % (ANDROID_TMPDIR
,))
15 for (key
, value
) in list(os
.environ
.items()):
16 if key
in ["ASAN_ACTIVATION_OPTIONS", "SCUDO_OPTIONS"] or key
.endswith(
19 args
.append('%s="%s"' % (key
, value
.replace('"', '\\"')))
24 str(subprocess
.check_output(["file", sys
.argv
[0] + ".real"])).find("64-bit") != -1
27 device_env
= build_env()
28 device_args
= " ".join(sys
.argv
[1:]) # FIXME: escape?
29 device_stdout
= device_binary
+ ".stdout"
30 device_stderr
= device_binary
+ ".stderr"
31 device_exitcode
= device_binary
+ ".exitcode"
35 "cd %s && %s %s %s >%s 2>%s ; echo $? >%s"
50 sys
.stdout
.write(pull_from_device(device_stdout
))
51 sys
.stderr
.write(pull_from_device(device_stderr
))
52 retcode
= int(pull_from_device(device_exitcode
))
53 # If the device process died with a signal, do abort().
54 # Not exactly the same, but good enough to fool "not --crash".
56 os
.kill(os
.getpid(), signal
.SIGABRT
)