diff options
| author | Ondřej Surý <ondrej@sury.org> | 2011-09-13 13:13:40 +0200 | 
|---|---|---|
| committer | Ondřej Surý <ondrej@sury.org> | 2011-09-13 13:13:40 +0200 | 
| commit | 5ff4c17907d5b19510a62e08fd8d3b11e62b431d (patch) | |
| tree | c0650497e988f47be9c6f2324fa692a52dea82e1 /misc/arm/a | |
| parent | 80f18fc933cf3f3e829c5455a1023d69f7b86e52 (diff) | |
| download | golang-upstream/60.tar.gz | |
Imported Upstream version 60upstream/60
Diffstat (limited to 'misc/arm/a')
| -rwxr-xr-x | misc/arm/a | 58 | 
1 files changed, 58 insertions, 0 deletions
| diff --git a/misc/arm/a b/misc/arm/a new file mode 100755 index 000000000..701f4941f --- /dev/null +++ b/misc/arm/a @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +# Copyright 2010 The Go Authors.  All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# This is a small script for executing go binaries on the android platform. +# +# example: +# ./a 5.out foo bar baz +# +# The script exports the local values of GOARCH, GOTRACEBACK and GOGC +# to the android environment. +# +# Known issues: +# The script fails unless the last character output by the program is "\n" +# +# TODO(kaib): add gdb bridge support + +exp () +{ +	if [ ${!1} ]; then +		echo "export $1=\"${!1}\"; " +	fi +} + +# adb does not correctly return the exit value of the executed program. use this +# wrapper to manually extract the exit value +rloc=/data/local/tmp/retval +rsize=$(adb shell "ls -l $rloc"|tr -s ' '|cut -d' ' -f4) +rcheck=38 +if [ "$rsize" != "$rcheck" ]; then +#	echo "debug: retval size incorrect want $rcheck, got $rsize. uploading" +	echo  >/tmp/adb.retval '#!/system/bin/sh +"$@" +echo RETVAL: $?'  +	adb push /tmp/adb.retval $rloc >/dev/null 2>&1 +	adb shell chmod 755 $rloc +fi + +# run the main binary +if [ "-g" == "$1" ]; then +	adb forward tcp:$2 tcp:$2 +	args=$(echo $*| cut -d' ' -f4-) +	adb push $3 /data/local/tmp/$3 >/dev/null 2>&1 +	adb shell "$(exp GOARCH) $(exp GOTRACEBACK) $(exp GOGC) \ +		gdbserver :$2 /data/local/tmp/retval /data/local/tmp/$3 $args" \ +		2>&1|tr -d '\r' |tee /tmp/adb.out|grep -v RETVAL +else +	if [ "$*" != "$1" ]; then +		args=$(echo $*| cut -d' ' -f2-) +	fi +	adb push $1 /data/local/tmp/$1 >/dev/null 2>&1 +	adb shell "$(exp GOARCH) $(exp GOTRACEBACK) $(exp GOGC) \ +		/data/local/tmp/retval /data/local/tmp/$1 $args" \ +		2>&1|tr -d '\r' |tee /tmp/adb.out|grep -v RETVAL +fi +exit $(grep RETVAL /tmp/adb.out|tr -d '\n\r'| cut -d' ' -f2) | 
