From aeed721fccb1d51a702028d34ae2a428526a100e Mon Sep 17 00:00:00 2001 From: Michael Wright Date: Thu, 19 Jun 2014 19:58:12 -0700 Subject: [PATCH] Invoke debuggerd64 when appropriate with stacks. Read out the ELF header to see if the executable is 64-bit or 32-bit, then call the appropriate debuggerd. In bash. Ugh. Change-Id: I6550fe92e775659cd0370bcb70f40dd59238ad8f --- envsetup.sh | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/envsetup.sh b/envsetup.sh index 9689cce7c..c472f6408 100644 --- a/envsetup.sh +++ b/envsetup.sh @@ -932,7 +932,8 @@ function stacks() adb shell cat $TMP else # Dump stacks of native process - adb shell debuggerd -b $PID + local USE64BIT="$(is64bit $PID)" + adb shell debuggerd$USE64BIT -b $PID fi fi } @@ -949,17 +950,13 @@ function get_symbols_directory() echo $(get_abs_build_var TARGET_OUT_UNSTRIPPED) } -# process the symbolic link of /proc/$PID/exe and use the host file tool to -# determine whether it is a 32-bit or 64-bit executable. It returns "" or "64" -# which can be conveniently used as suffix. +# Read the ELF header from /proc/$PID/exe to determine if the process is +# 64-bit. function is64bit() { local PID="$1" if [ "$PID" ] ; then - local EXE=`adb shell readlink /proc/$PID/exe` - local EXE_DIR=`get_abs_build_var PRODUCT_OUT` - local IS64BIT=`file "$EXE_DIR$EXE" | grep "64-bit"` - if [ "$IS64BIT" != "" ]; then + if [[ "$(adb shell cat /proc/$PID/exe | xxd -l 1 -s 4 -ps)" -eq "02" ]] ; then echo "64" else echo ""