Index: build/android/adb_gdb |
diff --git a/build/android/adb_gdb b/build/android/adb_gdb |
index 16139c7176e44afc440e2cb5e7385e588576b458..66f58137c2a9cd1f03304b9f85ef734bcf9884d0 100755 |
--- a/build/android/adb_gdb |
+++ b/build/android/adb_gdb |
@@ -340,7 +340,7 @@ if [ -z "$PACKAGE_NAME" ]; then |
panic "Please specify a package name on the command line. See --help." |
fi |
-if [[ -z "$CHROMIUM_OUTPUT_DIR" ]]; then |
+if [[ -z "$SYMBOL_DIR" && -z "$CHROMIUM_OUTPUT_DIR" ]]; then |
if [[ -e "build.ninja" ]]; then |
CHROMIUM_OUTPUT_DIR=$PWD |
else |
@@ -352,6 +352,36 @@ if [[ -z "$CHROMIUM_OUTPUT_DIR" ]]; then |
fi |
fi |
+# Detect the build type and symbol directory. This is done by finding |
+# the most recent sub-directory containing debug shared libraries under |
+# $CHROMIUM_OUTPUT_DIR. |
+# |
+# Out: nothing, but this sets SYMBOL_DIR |
+# |
+detect_symbol_dir () { |
+ # GYP places unstripped libraries under out/lib |
+ # GN places them under out/lib.unstripped |
+ local PARENT_DIR="$CHROMIUM_OUTPUT_DIR" |
+ if [[ ! -e "$PARENT_DIR" ]]; then |
+ PARENT_DIR="$CHROMIUM_SRC/$PARENT_DIR" |
+ fi |
+ SYMBOL_DIR="$PARENT_DIR/lib.unstripped" |
+ if [[ -z "$(ls "$SYMBOL_DIR"/lib*.so 2>/dev/null)" ]]; then |
+ SYMBOL_DIR="$PARENT_DIR/lib" |
+ if [[ -z "$(ls "$SYMBOL_DIR"/lib*.so 2>/dev/null)" ]]; then |
+ panic "Could not find any symbols under \ |
+$PARENT_DIR/lib{.unstripped}. Please build the program first!" |
+ fi |
+ fi |
+ log "Auto-config: --symbol-dir=$SYMBOL_DIR" |
+} |
+ |
+if [ -z "$SYMBOL_DIR" ]; then |
+ detect_symbol_dir |
+elif [[ -z "$(ls "$SYMBOL_DIR"/lib*.so 2>/dev/null)" ]]; then |
+ panic "Could not find any symbols under $SYMBOL_DIR" |
+fi |
+ |
if [ -z "$NDK_DIR" ]; then |
ANDROID_NDK_ROOT=$(PYTHONPATH=$CHROMIUM_SRC/build/android python -c \ |
'from pylib.constants import ANDROID_NDK_ROOT; print ANDROID_NDK_ROOT,') |
@@ -432,15 +462,18 @@ adb_shell () { |
return $RET |
} |
-# Find the target architecture from the target device. |
+# Find the target architecture from a local shared library. |
# This returns an NDK-compatible architecture name. |
# out: NDK Architecture name, or empty string. |
get_gyp_target_arch () { |
- local ARCH=$(adb_shell getprop ro.product.cpu.abi) |
+ local RANDOM_LIB=$(ls "$SYMBOL_DIR"/lib*.so | head -n1) |
+ local SO_DESC=$(file $RANDOM_LIB) |
case $ARCH in |
- mips|x86|x86_64) echo "$ARCH";; |
- arm64*) echo "arm64";; |
- arm*) echo "arm";; |
+ *32-bit*ARM,*) echo "arm";; |
+ *64-bit*ARM,*) echo "arm64";; |
+ *32-bit*Intel,*) echo "x86";; |
+ *x86-64,*) echo "x86_64";; |
+ *32-bit*MIPS,*) echo "mips";; |
*) echo ""; |
esac |
} |
@@ -695,34 +728,6 @@ get_file_timestamp () { |
stat -c %Y "$1" 2>/dev/null |
} |
-# Detect the build type and symbol directory. This is done by finding |
-# the most recent sub-directory containing debug shared libraries under |
-# $CHROMIUM_OUTPUT_DIR. |
-# |
-# Out: nothing, but this sets SYMBOL_DIR |
-# |
-detect_symbol_dir () { |
- # GYP places unstripped libraries under out/lib |
- # GN places them under out/lib.unstripped |
- local PARENT_DIR="$CHROMIUM_OUTPUT_DIR" |
- if [[ ! -e "$PARENT_DIR" ]]; then |
- PARENT_DIR="$CHROMIUM_SRC/$PARENT_DIR" |
- fi |
- SYMBOL_DIR="$PARENT_DIR/lib.unstripped" |
- if [[ -z "$(ls "$SYMBOL_DIR"/lib*.so 2>/dev/null)" ]]; then |
- SYMBOL_DIR="$PARENT_DIR/lib" |
- if [[ -z "$(ls "$SYMBOL_DIR"/lib*.so 2>/dev/null)" ]]; then |
- panic "Could not find any symbols under \ |
-$PARENT_DIR/lib{.unstripped}. Please build the program first!" |
- fi |
- fi |
- log "Auto-config: --symbol-dir=$SYMBOL_DIR" |
-} |
- |
-if [ -z "$SYMBOL_DIR" ]; then |
- detect_symbol_dir |
-fi |
- |
# Allow several concurrent debugging sessions |
TARGET_GDBSERVER=/data/data/$PACKAGE_NAME/gdbserver-adb-gdb-$TMP_ID |
TMP_TARGET_GDBSERVER=/data/local/tmp/gdbserver-adb-gdb-$TMP_ID |