1#!/usr/bin/env bash 2 3# Copyright 2018 The Fuchsia Authors 4# 5# Use of this source code is governed by a MIT-style 6# license that can be found in the LICENSE file or at 7# https://opensource.org/licenses/MIT 8 9function usage { 10 echo "usage: $0 [options] [-- <symbolizer args>]" 11 echo "-a <arch> : arm64, or x64" 12 echo "-C : use Clang build" 13 echo "-A : use ASan build" 14 echo "-P : use profile build" 15 echo "-L : use LTO build" 16 echo "-l : use ThinLTO build" 17 echo "-o <dir> : build directory" 18 echo "-i <file> : ids.txt file" 19 echo "-h for help" 20 echo "all arguments after -- are passed to the symbolizer directly" 21 exit 1 22} 23 24ARCH=x64 25CLANG=0 26ASAN=0 27BUILDDIR= 28IDSTXT= 29LTO=0 30THINLTO=0 31PROFILE=0 32ZIRCON_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" 33PREBUILT_DIR="${ZIRCON_ROOT}/prebuilt/downloads" 34 35if [[ -z "$LLVM_SYMBOLIZER" ]]; then 36 readonly LLVM_SYMBOLIZER="${PREBUILT_DIR}/clang/bin/llvm-symbolizer" 37fi 38 39readonly SYMBOLIZE="${PREBUILT_DIR}/symbolize" 40 41 42while getopts "a:CAPLlo:i:h" FLAG 43do 44 case $FLAG in 45 a) ARCH=$OPTARG;; 46 C) CLANG=1;; 47 A) ASAN=1;; 48 P) PROFILE=1;; 49 L) LTO=1;; 50 l) THINLTO=1;; 51 o) BUILDDIR=$OPTARG;; 52 i) IDSTXT=$OPTARG;; 53 h) usage;; 54 [?]) echo unrecognized option 55 usage;; 56 esac 57done 58shift $((OPTIND-1)) 59 60if [[ -z "$IDSTXT" ]]; then 61 if [[ -n "$BUILDDIR" ]]; then 62 IDSTXT="${BUILDDIR}/ids.txt" 63 else 64 BUILD_SUFFIX= 65 if (( $ASAN )); then 66 BUILD_SUFFIX=-asan 67 elif (( $CLANG )); then 68 BUILD_SUFFIX=-clang 69 elif (( $LTO )); then 70 BUILD_SUFFIX=-lto 71 elif (( $THINLTO )); then 72 BUILD_SUFFIX=-thinlto 73 elif (( $PROFILE )); then 74 BUILD_SUFFIX=-profile 75 fi 76 IDSTXT="${ZIRCON_ROOT}/build-${ARCH}${BUILD_SUFFIX}/ids.txt" 77 fi 78fi 79 80exec "$SYMBOLIZE" -llvm-symbolizer "$LLVM_SYMBOLIZER" -ids "$IDSTXT" "$@" 81