| Index: build/android/adb_gdb
|
| diff --git a/build/android/adb_gdb b/build/android/adb_gdb
|
| index 150eb5eba4adee17da7ee376ef9c5b197ab2c853..97d37db3abc8c9d936d028bc15aac5c297a6e7ea 100755
|
| --- a/build/android/adb_gdb
|
| +++ b/build/android/adb_gdb
|
| @@ -36,7 +36,7 @@ clean_exit () {
|
| fi
|
| if [ "$TARGET_GDBSERVER" ]; then
|
| log "Removing target gdbserver binary: $TARGET_GDBSERVER."
|
| - "$ADB" shell rm "$TARGET_GDBSERVER" >/dev/null 2>&1
|
| + "$ADB" shell run-as "$PACKAGE_NAME" rm "$TARGET_GDBSERVER" >/dev/null 2>&1
|
| fi
|
| log "Cleaning up: $TMPDIR"
|
| rm -rf "$TMPDIR"
|
| @@ -734,7 +734,8 @@ if [ -z "$SYMBOL_DIR" ]; then
|
| fi
|
|
|
| # Allow several concurrent debugging sessions
|
| -TARGET_GDBSERVER=/data/local/tmp/gdbserver-adb-gdb-$TMP_ID
|
| +TARGET_GDBSERVER=/data/data/$PACKAGE_NAME/gdbserver-adb-gdb-$TMP_ID
|
| +TMP_TARGET_GDBSERVER=/data/local/tmp/gdbserver-adb-gdb-$TMP_ID
|
|
|
| # Return the build fingerprint contained in a build.prop file.
|
| # $1: path to build.prop file
|
| @@ -844,22 +845,26 @@ if [ "$SU_PREFIX" ]; then
|
| adb_shell $SU_PREFIX \"echo "foo"\" > $SU_PREFIX_TEST_LOG 2>&1
|
| if [ $? != 0 -o "$(cat $SU_PREFIX_TEST_LOG)" != "foo" ]; then
|
| echo "ERROR: Cannot use '$SU_PREFIX' as a valid su prefix:"
|
| - echo "$ adb shell $SU_PREFIX echo foo"
|
| + echo "$ adb shell $SU_PREFIX \"echo foo\""
|
| cat $SU_PREFIX_TEST_LOG
|
| exit 1
|
| fi
|
| - COMMAND_PREFIX="$SU_PREFIX"
|
| + COMMAND_PREFIX="$SU_PREFIX \""
|
| + COMMAND_SUFFIX="\""
|
| else
|
| SHELL_UID=$(adb shell cat /proc/self/status | \
|
| awk '$1 == "Uid:" { print $2; }')
|
| log "Shell UID: $SHELL_UID"
|
| if [ "$SHELL_UID" != 0 -o -n "$NO_ROOT" ]; then
|
| COMMAND_PREFIX="run-as $PACKAGE_NAME"
|
| + COMMAND_SUFFIX=
|
| else
|
| COMMAND_PREFIX=
|
| + COMMAND_SUFFIX=
|
| fi
|
| fi
|
| log "Command prefix: '$COMMAND_PREFIX'"
|
| +log "Command suffix: '$COMMAND_SUFFIX'"
|
|
|
| # Pull device's system libraries that are mapped by our process.
|
| # Pulling all system libraries is too long, so determine which ones
|
| @@ -867,7 +872,7 @@ log "Command prefix: '$COMMAND_PREFIX'"
|
| if [ "$PULL_LIBS" -a -z "$NO_PULL_LIBS" ]; then
|
| echo "Extracting system libraries into: $PULL_LIBS_DIR"
|
| rm -f $PULL_LIBS_DIR/build.prop
|
| - MAPPINGS=$(adb_shell $COMMAND_PREFIX \"cat /proc/$PID/maps\")
|
| + MAPPINGS=$(adb_shell $COMMAND_PREFIX cat /proc/$PID/maps $COMMAND_SUFFIX)
|
| if [ $? != 0 ]; then
|
| echo "ERROR: Could not list process's memory mappings."
|
| if [ "$SU_PREFIX" ]; then
|
| @@ -902,7 +907,9 @@ SOLIB_DIRS=$(find $PULL_LIBS_DIR -mindepth 1 -maxdepth 4 -type d | \
|
|
|
| # Push gdbserver to the device
|
| log "Pushing gdbserver $GDBSERVER to $TARGET_GDBSERVER"
|
| -adb push $GDBSERVER $TARGET_GDBSERVER &>/dev/null
|
| +adb push $GDBSERVER $TMP_TARGET_GDBSERVER &>/dev/null
|
| +adb shell run-as $PACKAGE_NAME cp $TMP_TARGET_GDBSERVER .
|
| +adb shell rm $TMP_TARGET_GDBSERVER
|
| fail_panic "Could not copy gdbserver to the device!"
|
|
|
| PORT=5039
|
| @@ -944,10 +951,10 @@ host:localhost:$HOST_PORT to device:localhost:$TARGET_PORT!"
|
| #
|
| log "Starting gdbserver in the background:"
|
| GDBSERVER_LOG=$TMPDIR/gdbserver-$TMP_ID.log
|
| -log "adb shell $COMMAND_PREFIX \"$TARGET_GDBSERVER :$TARGET_PORT \
|
| ---attach $PID"\"
|
| -("$ADB" shell $COMMAND_PREFIX \"$TARGET_GDBSERVER :$TARGET_PORT \
|
| - --attach $PID\" > $GDBSERVER_LOG 2>&1) &
|
| +log "adb shell $COMMAND_PREFIX $TARGET_GDBSERVER :$TARGET_PORT \
|
| +--attach $PID $COMMAND_SUFFIX"
|
| +("$ADB" shell $COMMAND_PREFIX $TARGET_GDBSERVER :$TARGET_PORT \
|
| + --attach $PID $COMMAND_SUFFIX > $GDBSERVER_LOG 2>&1) &
|
| GDBSERVER_PID=$!
|
| echo "$GDBSERVER_PID" > $GDBSERVER_PIDFILE
|
| log "background job pid: $GDBSERVER_PID"
|
|
|