| OLD | NEW |
| 1 #!/bin/bash | 1 #!/bin/bash |
| 2 # | 2 # |
| 3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 3 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
| 5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
| 6 # | 6 # |
| 7 | 7 |
| 8 # A generic script used to attach to a running Chromium process and | 8 # A generic script used to attach to a running Chromium process and |
| 9 # debug it. Most users should not use this directly, but one of the | 9 # debug it. Most users should not use this directly, but one of the |
| 10 # wrapper scripts like adb_gdb_content_shell, or adb_gdb_drt | 10 # wrapper scripts like adb_gdb_content_shell, or adb_gdb_drt |
| (...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 else | 351 else |
| 352 # Nit: accept Chromium's 'ia32' as a valid target architecture. This | 352 # Nit: accept Chromium's 'ia32' as a valid target architecture. This |
| 353 # script prefers the NDK 'x86' name instead because it uses it to find | 353 # script prefers the NDK 'x86' name instead because it uses it to find |
| 354 # NDK-specific files (host gdb) with it. | 354 # NDK-specific files (host gdb) with it. |
| 355 if [ "$TARGET_ARCH" = "ia32" ]; then | 355 if [ "$TARGET_ARCH" = "ia32" ]; then |
| 356 TARGET_ARCH=x86 | 356 TARGET_ARCH=x86 |
| 357 log "Auto-config: --arch=$TARGET_ARCH (equivalent to ia32)" | 357 log "Auto-config: --arch=$TARGET_ARCH (equivalent to ia32)" |
| 358 fi | 358 fi |
| 359 fi | 359 fi |
| 360 | 360 |
| 361 # Detect the NDK system tag, i.e. the name used to identify the host. | |
| 362 # out: NDK system tag (e.g. 'linux-x86_64'). | |
| 363 get_ndk_host_tag () { | |
| 364 if [ -z "$NDK_HOST_TAG" ]; then | |
| 365 case $(uname -s) in | |
| 366 Linux) NDK_HOST_TAG=linux-x86_64;; | |
| 367 Darwin) NDK_HOST_TAG=darwin-x86;; | |
| 368 *) panic "You can't run this script on this system: $uname -a";; | |
| 369 esac | |
| 370 fi | |
| 371 echo "$NDK_HOST_TAG" | |
| 372 } | |
| 373 | |
| 374 # Convert an NDK architecture name into a GNU configure triplet. | 361 # Convert an NDK architecture name into a GNU configure triplet. |
| 375 # $1: NDK architecture name (e.g. 'arm') | 362 # $1: NDK architecture name (e.g. 'arm') |
| 376 # Out: Android GNU configure triplet (e.g. 'arm-linux-androideabi') | 363 # Out: Android GNU configure triplet (e.g. 'arm-linux-androideabi') |
| 377 get_arch_gnu_config () { | 364 get_arch_gnu_config () { |
| 378 case $1 in | 365 case $1 in |
| 379 arm) | 366 arm) |
| 380 echo "arm-linux-androideabi" | 367 echo "arm-linux-androideabi" |
| 381 ;; | 368 ;; |
| 382 x86) | 369 x86) |
| 383 echo "i686-linux-android" | 370 echo "i686-linux-android" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 419 FILE=$NDK_DIR/toolchains/$NAME-4.6/prebuilt/$SUBPATH | 406 FILE=$NDK_DIR/toolchains/$NAME-4.6/prebuilt/$SUBPATH |
| 420 if [ ! -f "$FILE" ]; then | 407 if [ ! -f "$FILE" ]; then |
| 421 FILE=$NDK_DIR/toolchains/$NAME-4.4.3/prebuilt/$SUBPATH | 408 FILE=$NDK_DIR/toolchains/$NAME-4.4.3/prebuilt/$SUBPATH |
| 422 if [ ! -f "$FILE" ]; then | 409 if [ ! -f "$FILE" ]; then |
| 423 FILE= | 410 FILE= |
| 424 fi | 411 fi |
| 425 fi | 412 fi |
| 426 echo "$FILE" | 413 echo "$FILE" |
| 427 } | 414 } |
| 428 | 415 |
| 429 # Find the path to an NDK's toolchain full prefix for a given architecture | |
| 430 # $1: NDK install path | |
| 431 # $2: NDK architecture name | |
| 432 # Out: install path + binary prefix (e.g. | |
| 433 # ".../path/to/bin/arm-linux-androideabi-") | |
| 434 get_ndk_toolchain_fullprefix () { | |
| 435 local NDK_DIR="$1" | |
| 436 local ARCH="$2" | |
| 437 local TARGET NAME HOST GCC CONFIG | |
| 438 | |
| 439 # NOTE: This will need to be updated if the NDK changes the names or moves | |
| 440 # the location of its prebuilt toolchains. | |
| 441 # | |
| 442 GCC= | |
| 443 HOST=$(get_ndk_host_tag) | |
| 444 CONFIG=$(get_arch_gnu_config $ARCH) | |
| 445 GCC=$(get_ndk_toolchain_prebuilt \ | |
| 446 "$NDK_DIR" "$ARCH" "$HOST/bin/$CONFIG-gcc") | |
| 447 if [ ! -f "$GCC" -a "$ARCH" = "x86" ]; then | |
| 448 # Special case, the x86 toolchain used to be incorrectly | |
| 449 # named i686-android-linux-gcc! | |
| 450 GCC=$(get_ndk_toolchain_prebuilt \ | |
| 451 "$NDK_DIR" "$ARCH" "$HOST/bin/i686-android-linux-gcc") | |
| 452 fi | |
| 453 if [ -z "$GCC" ]; then | |
| 454 panic "Cannot find Android NDK toolchain for '$ARCH' architecture. \ | |
| 455 Please verify your NDK installation!" | |
| 456 fi | |
| 457 echo "${GCC%%gcc}" | |
| 458 } | |
| 459 | |
| 460 # $1: NDK install path | 416 # $1: NDK install path |
| 461 # $2: target architecture. | 417 # $2: target architecture. |
| 462 get_ndk_gdbserver () { | 418 get_ndk_gdbserver () { |
| 463 local NDK_DIR="$1" | 419 local NDK_DIR="$1" |
| 464 local ARCH=$2 | 420 local ARCH=$2 |
| 465 local HOST=$(get_ndk_host_tag) | |
| 466 local BINARY | 421 local BINARY |
| 467 | 422 |
| 468 # The location has moved after NDK r8 | 423 # The location has moved after NDK r8 |
| 469 BINARY=$NDK_DIR/prebuilt/android-$ARCH/gdbserver/gdbserver | 424 BINARY=$NDK_DIR/prebuilt/android-$ARCH/gdbserver/gdbserver |
| 470 if [ ! -f "$BINARY" ]; then | 425 if [ ! -f "$BINARY" ]; then |
| 471 BINARY=$(get_ndk_toolchain_prebuilt "$NDK_DIR" "$ARCH" gdbserver) | 426 BINARY=$(get_ndk_toolchain_prebuilt "$NDK_DIR" "$ARCH" gdbserver) |
| 472 fi | 427 fi |
| 473 echo "$BINARY" | 428 echo "$BINARY" |
| 474 } | 429 } |
| 475 | 430 |
| 476 # Check/probe the path to the Android toolchain installation. Always | 431 # Check/probe the path to the Android toolchain installation. Always |
| 477 # use the NDK versions of gdb and gdbserver. They must match to avoid | 432 # use the NDK versions of gdb and gdbserver. They must match to avoid |
| 478 # issues when both binaries do not speak the same wire protocol. | 433 # issues when both binaries do not speak the same wire protocol. |
| 479 # | 434 # |
| 480 if [ -z "$TOOLCHAIN" ]; then | 435 if [ -z "$TOOLCHAIN" ]; then |
| 481 ANDROID_TOOLCHAIN=$(get_ndk_toolchain_fullprefix \ | |
| 482 "$ANDROID_NDK_ROOT" "$TARGET_ARCH") | |
| 483 ANDROID_TOOLCHAIN=$(dirname "$ANDROID_TOOLCHAIN") | |
| 484 log "Auto-config: --toolchain=$ANDROID_TOOLCHAIN" | 436 log "Auto-config: --toolchain=$ANDROID_TOOLCHAIN" |
| 485 else | 437 else |
| 486 # Be flexible, allow one to specify either the install path or the bin | 438 # Be flexible, allow one to specify either the install path or the bin |
| 487 # sub-directory in --toolchain: | 439 # sub-directory in --toolchain: |
| 488 # | 440 # |
| 489 if [ -d "$TOOLCHAIN/bin" ]; then | 441 if [ -d "$TOOLCHAIN/bin" ]; then |
| 490 TOOLCHAIN=$TOOLCHAIN/bin | 442 TOOLCHAIN=$TOOLCHAIN/bin |
| 491 fi | 443 fi |
| 492 ANDROID_TOOLCHAIN=$TOOLCHAIN | 444 ANDROID_TOOLCHAIN=$TOOLCHAIN |
| 493 fi | 445 fi |
| (...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 886 echo "### START $COMMANDS" | 838 echo "### START $COMMANDS" |
| 887 cat $COMMANDS | 839 cat $COMMANDS |
| 888 echo "### END $COMMANDS" | 840 echo "### END $COMMANDS" |
| 889 fi | 841 fi |
| 890 | 842 |
| 891 log "Launching gdb client: $GDB $GDBARGS -x $COMMANDS" | 843 log "Launching gdb client: $GDB $GDBARGS -x $COMMANDS" |
| 892 $GDB $GDBARGS -x $COMMANDS && | 844 $GDB $GDBARGS -x $COMMANDS && |
| 893 rm -f "$GDBSERVER_PIDFILE" | 845 rm -f "$GDBSERVER_PIDFILE" |
| 894 | 846 |
| 895 clean_exit $? | 847 clean_exit $? |
| OLD | NEW |