| 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 | 10 # wrapper scripts like adb_gdb_content_shell |
| (...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 --libs-dir=<path> Specify system libraries extraction directory. | 333 --libs-dir=<path> Specify system libraries extraction directory. |
| 334 | 334 |
| 335 EOF | 335 EOF |
| 336 exit 0 | 336 exit 0 |
| 337 fi | 337 fi |
| 338 | 338 |
| 339 if [ -z "$PACKAGE_NAME" ]; then | 339 if [ -z "$PACKAGE_NAME" ]; then |
| 340 panic "Please specify a package name on the command line. See --help." | 340 panic "Please specify a package name on the command line. See --help." |
| 341 fi | 341 fi |
| 342 | 342 |
| 343 if [[ -z "$CHROMIUM_OUTPUT_DIR" ]]; then | 343 if [[ -z "$SYMBOL_DIR" && -z "$CHROMIUM_OUTPUT_DIR" ]]; then |
| 344 if [[ -e "build.ninja" ]]; then | 344 if [[ -e "build.ninja" ]]; then |
| 345 CHROMIUM_OUTPUT_DIR=$PWD | 345 CHROMIUM_OUTPUT_DIR=$PWD |
| 346 else | 346 else |
| 347 panic "Please specify an output directory by using one of: | 347 panic "Please specify an output directory by using one of: |
| 348 --output-directory=out/Debug | 348 --output-directory=out/Debug |
| 349 CHROMIUM_OUTPUT_DIR=out/Debug | 349 CHROMIUM_OUTPUT_DIR=out/Debug |
| 350 Setting working directory to an output directory. | 350 Setting working directory to an output directory. |
| 351 See --help." | 351 See --help." |
| 352 fi | 352 fi |
| 353 fi | 353 fi |
| 354 | 354 |
| 355 # Detect the build type and symbol directory. This is done by finding |
| 356 # the most recent sub-directory containing debug shared libraries under |
| 357 # $CHROMIUM_OUTPUT_DIR. |
| 358 # |
| 359 # Out: nothing, but this sets SYMBOL_DIR |
| 360 # |
| 361 detect_symbol_dir () { |
| 362 # GYP places unstripped libraries under out/lib |
| 363 # GN places them under out/lib.unstripped |
| 364 local PARENT_DIR="$CHROMIUM_OUTPUT_DIR" |
| 365 if [[ ! -e "$PARENT_DIR" ]]; then |
| 366 PARENT_DIR="$CHROMIUM_SRC/$PARENT_DIR" |
| 367 fi |
| 368 SYMBOL_DIR="$PARENT_DIR/lib.unstripped" |
| 369 if [[ -z "$(ls "$SYMBOL_DIR"/lib*.so 2>/dev/null)" ]]; then |
| 370 SYMBOL_DIR="$PARENT_DIR/lib" |
| 371 if [[ -z "$(ls "$SYMBOL_DIR"/lib*.so 2>/dev/null)" ]]; then |
| 372 panic "Could not find any symbols under \ |
| 373 $PARENT_DIR/lib{.unstripped}. Please build the program first!" |
| 374 fi |
| 375 fi |
| 376 log "Auto-config: --symbol-dir=$SYMBOL_DIR" |
| 377 } |
| 378 |
| 379 if [ -z "$SYMBOL_DIR" ]; then |
| 380 detect_symbol_dir |
| 381 elif [[ -z "$(ls "$SYMBOL_DIR"/lib*.so 2>/dev/null)" ]]; then |
| 382 panic "Could not find any symbols under $SYMBOL_DIR" |
| 383 fi |
| 384 |
| 355 if [ -z "$NDK_DIR" ]; then | 385 if [ -z "$NDK_DIR" ]; then |
| 356 ANDROID_NDK_ROOT=$(PYTHONPATH=$CHROMIUM_SRC/build/android python -c \ | 386 ANDROID_NDK_ROOT=$(PYTHONPATH=$CHROMIUM_SRC/build/android python -c \ |
| 357 'from pylib.constants import ANDROID_NDK_ROOT; print ANDROID_NDK_ROOT,') | 387 'from pylib.constants import ANDROID_NDK_ROOT; print ANDROID_NDK_ROOT,') |
| 358 else | 388 else |
| 359 if [ ! -d "$NDK_DIR" ]; then | 389 if [ ! -d "$NDK_DIR" ]; then |
| 360 panic "Invalid directory: $NDK_DIR" | 390 panic "Invalid directory: $NDK_DIR" |
| 361 fi | 391 fi |
| 362 if [ ! -f "$NDK_DIR/ndk-build" ]; then | 392 if [ ! -f "$NDK_DIR/ndk-build" ]; then |
| 363 panic "Not a valid NDK directory: $NDK_DIR" | 393 panic "Not a valid NDK directory: $NDK_DIR" |
| 364 fi | 394 fi |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 425 LASTLINE=$(echo "$LASTLINE" | \ | 455 LASTLINE=$(echo "$LASTLINE" | \ |
| 426 awk '{ if (match($0, "%%[0-9]+$")) { print substr($0,1,RSTART-1); } }') | 456 awk '{ if (match($0, "%%[0-9]+$")) { print substr($0,1,RSTART-1); } }') |
| 427 # The output itself: all lines except the status code. | 457 # The output itself: all lines except the status code. |
| 428 sed -e '$d' $TMPOUT && printf "%s" "$LASTLINE" | 458 sed -e '$d' $TMPOUT && printf "%s" "$LASTLINE" |
| 429 # Remove temp file. | 459 # Remove temp file. |
| 430 rm -f $TMPOUT | 460 rm -f $TMPOUT |
| 431 # Exit with the appropriate status. | 461 # Exit with the appropriate status. |
| 432 return $RET | 462 return $RET |
| 433 } | 463 } |
| 434 | 464 |
| 435 # Find the target architecture from the target device. | 465 # Find the target architecture from a local shared library. |
| 436 # This returns an NDK-compatible architecture name. | 466 # This returns an NDK-compatible architecture name. |
| 437 # out: NDK Architecture name, or empty string. | 467 # out: NDK Architecture name, or empty string. |
| 438 get_gyp_target_arch () { | 468 get_gyp_target_arch () { |
| 439 local ARCH=$(adb_shell getprop ro.product.cpu.abi) | 469 local RANDOM_LIB=$(ls "$SYMBOL_DIR"/lib*.so | head -n1) |
| 470 local SO_DESC=$(file $RANDOM_LIB) |
| 440 case $ARCH in | 471 case $ARCH in |
| 441 mips|x86|x86_64) echo "$ARCH";; | 472 *32-bit*ARM,*) echo "arm";; |
| 442 arm64*) echo "arm64";; | 473 *64-bit*ARM,*) echo "arm64";; |
| 443 arm*) echo "arm";; | 474 *32-bit*Intel,*) echo "x86";; |
| 475 *x86-64,*) echo "x86_64";; |
| 476 *32-bit*MIPS,*) echo "mips";; |
| 444 *) echo ""; | 477 *) echo ""; |
| 445 esac | 478 esac |
| 446 } | 479 } |
| 447 | 480 |
| 448 if [ -z "$TARGET_ARCH" ]; then | 481 if [ -z "$TARGET_ARCH" ]; then |
| 449 TARGET_ARCH=$(get_gyp_target_arch) | 482 TARGET_ARCH=$(get_gyp_target_arch) |
| 450 if [ -z "$TARGET_ARCH" ]; then | 483 if [ -z "$TARGET_ARCH" ]; then |
| 451 TARGET_ARCH=arm | 484 TARGET_ARCH=arm |
| 452 fi | 485 fi |
| 453 else | 486 else |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 688 package is installed?" | 721 package is installed?" |
| 689 fi | 722 fi |
| 690 | 723 |
| 691 # Return the timestamp of a given file, as number of seconds since epoch. | 724 # Return the timestamp of a given file, as number of seconds since epoch. |
| 692 # $1: file path | 725 # $1: file path |
| 693 # Out: file timestamp | 726 # Out: file timestamp |
| 694 get_file_timestamp () { | 727 get_file_timestamp () { |
| 695 stat -c %Y "$1" 2>/dev/null | 728 stat -c %Y "$1" 2>/dev/null |
| 696 } | 729 } |
| 697 | 730 |
| 698 # Detect the build type and symbol directory. This is done by finding | |
| 699 # the most recent sub-directory containing debug shared libraries under | |
| 700 # $CHROMIUM_OUTPUT_DIR. | |
| 701 # | |
| 702 # Out: nothing, but this sets SYMBOL_DIR | |
| 703 # | |
| 704 detect_symbol_dir () { | |
| 705 # GYP places unstripped libraries under out/lib | |
| 706 # GN places them under out/lib.unstripped | |
| 707 local PARENT_DIR="$CHROMIUM_OUTPUT_DIR" | |
| 708 if [[ ! -e "$PARENT_DIR" ]]; then | |
| 709 PARENT_DIR="$CHROMIUM_SRC/$PARENT_DIR" | |
| 710 fi | |
| 711 SYMBOL_DIR="$PARENT_DIR/lib.unstripped" | |
| 712 if [[ -z "$(ls "$SYMBOL_DIR"/lib*.so 2>/dev/null)" ]]; then | |
| 713 SYMBOL_DIR="$PARENT_DIR/lib" | |
| 714 if [[ -z "$(ls "$SYMBOL_DIR"/lib*.so 2>/dev/null)" ]]; then | |
| 715 panic "Could not find any symbols under \ | |
| 716 $PARENT_DIR/lib{.unstripped}. Please build the program first!" | |
| 717 fi | |
| 718 fi | |
| 719 log "Auto-config: --symbol-dir=$SYMBOL_DIR" | |
| 720 } | |
| 721 | |
| 722 if [ -z "$SYMBOL_DIR" ]; then | |
| 723 detect_symbol_dir | |
| 724 fi | |
| 725 | |
| 726 # Allow several concurrent debugging sessions | 731 # Allow several concurrent debugging sessions |
| 727 TARGET_GDBSERVER=/data/data/$PACKAGE_NAME/gdbserver-adb-gdb-$TMP_ID | 732 TARGET_GDBSERVER=/data/data/$PACKAGE_NAME/gdbserver-adb-gdb-$TMP_ID |
| 728 TMP_TARGET_GDBSERVER=/data/local/tmp/gdbserver-adb-gdb-$TMP_ID | 733 TMP_TARGET_GDBSERVER=/data/local/tmp/gdbserver-adb-gdb-$TMP_ID |
| 729 | 734 |
| 730 # Return the build fingerprint contained in a build.prop file. | 735 # Return the build fingerprint contained in a build.prop file. |
| 731 # $1: path to build.prop file | 736 # $1: path to build.prop file |
| 732 get_build_fingerprint_from () { | 737 get_build_fingerprint_from () { |
| 733 cat "$1" | grep -e '^ro.build.fingerprint=' | cut -d= -f2 | 738 cat "$1" | grep -e '^ro.build.fingerprint=' | cut -d= -f2 |
| 734 } | 739 } |
| 735 | 740 |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1018 | 1023 |
| 1019 if [ "$VERBOSE" -gt 0 ]; then | 1024 if [ "$VERBOSE" -gt 0 ]; then |
| 1020 echo "### START $COMMANDS" | 1025 echo "### START $COMMANDS" |
| 1021 cat $COMMANDS | 1026 cat $COMMANDS |
| 1022 echo "### END $COMMANDS" | 1027 echo "### END $COMMANDS" |
| 1023 fi | 1028 fi |
| 1024 | 1029 |
| 1025 log "Launching gdb client: $GDB $GDB_ARGS -x $COMMANDS" | 1030 log "Launching gdb client: $GDB $GDB_ARGS -x $COMMANDS" |
| 1026 $GDB $GDB_ARGS -x $COMMANDS && | 1031 $GDB $GDB_ARGS -x $COMMANDS && |
| 1027 rm -f "$GDBSERVER_PIDFILE" | 1032 rm -f "$GDBSERVER_PIDFILE" |
| OLD | NEW |