#!/bin/bash

# Copyright 2020 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

# Reads text from stdin containing stack frames in the format
# `#3 0x5b09835a14  (/data/local/tmp/iree-benchmark-module+0x18aa14)`
# and symbolizes such lines and prints them to stdout.
#
# The approach is to pull the files out of the device and use the host
# build of llvm-symbolizer provided in the NDK.
#
# Other lines are just echo'd to stdout.
# This is meant to be used like this:
# ANDROID_NDK=~/android-ndk-r21d ./scripts/android_symbolize.sh < /tmp/asan.txt
# Where one has previously stored e.g. some ASan report to a file, here /tmp/asan.txt.
#
# See docs/developing_iree/sanitizers.md.
#
# Discussion of alternatives: https://github.com/android/ndk/issues/753

# Provide the location of your Android NDK in the ANDROID_NDK env var.
: ${ANDROID_NDK:=""}

if [ -z "${ANDROID_NDK}" ]
then
  echo "Please define ANDROID_NDK to point to your Android NDK."
  exit 1
fi

tmpdir="$(mktemp -d)"

while read line
do
  header="$(echo "$line" | grep -o '^\s*#[0-9]\+')"
  if [ -z "$header" ]
  then
    echo "$line"
    continue
  fi

  location_with_parentheses="$(echo "$line" | grep -o '(/[^)]*)$')"
  location="$(echo "$location_with_parentheses" | tr -d '()' )"
  file="$(echo "$location" | cut -d '+' -f 1)"
  address="$(echo "$location" | cut -d '+' -f 2)"
  if [[ -z "$file" || -z "$address" ]]
  then
    echo "$line"
    continue
  fi

  file_basename="$(basename "$file")"
  pulled_file="$tmpdir/$file_basename"
  if [ ! -f "$pulled_file" ]
  then
    adb pull "$file" "$pulled_file" 1>/dev/null 2>/dev/null
  fi
  llvm_symbolizer_output="$($ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-symbolizer -obj "$pulled_file" "$address")"
  if [ -z "$llvm_symbolizer_output" ]
  then
    echo "$line"
    continue
  fi

  function="$(echo "$llvm_symbolizer_output" | head -n1)"
  source_location="$(echo "$llvm_symbolizer_output" | tail -n1)"
  echo "$header $source_location $function"
done

rm -rf "$tmpdir"
