blob: 868ea0845230abd3d8c8c99e4c531b23ed5b66a2 [file] [log] [blame]
#!/bin/bash
# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#### CATEGORY=Build
### manipulate the symbol-index file
## "symbol-index" is a file used by debugging tools (zxdb, fidlcat, symbolizer) to
## locate all debugging symbols from different source code checkouts on a local
## machine. It's normally located at ~/.fuchsia/debug/symbol-index.
##
## This script interacts with a symbol-index file.
##
## Usage: fx symbol-index <verb> [<arguments> ...]
##
## Available verbs:
##
## list
## Lists all paths in symbol-index.
##
## register
## Add all symbols in the current Fuchsia checkout to symbol-index.
##
## add <symbol path> [ <build directory> ]
## Adds a new symbol path to symbol-index. A symbol path could be either a
## a text file in "ids.txt" format, or a directory in ".build-id" structure.
## An optional build directory could be supplemented, which is used by zxdb
## to locate the source code. If the symbol path is already in symbol-index,
## no changes will be made regardless of the optional build directory.
##
## add-all [ <input file> ]
## Reads the input and adds all symbol paths with optional build directories.
## The input file can contain multiple lines, each describing a symbol path.
## An optional build directory could be supplemented and separated from the
## symbol path with whitespaces. Relative paths will be resolved based on
## the input file. Empty lines and lines starting with "#" will be ignored.
## If the input file is not specified, the input will be read from the stdin.
##
## remove <symbol path>
## Removes a symbol path from symbol-index.
##
## purge
## Removes all non-existent paths from symbol-index.
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/../lib/vars.sh || exit $?
fx-config-read
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/symbol-index.sh || exit $?
while [[ $# -gt 0 ]]; do
case "$1" in
--help|-h)
fx-command-help
exit 0
;;
-*)
fx-error "Unknown option ${$1}"
exit 1
;;
*)
break
;;
esac
shift
done
if [[ $# -eq 0 ]]; then
fx-command-help
exit 1
fi
if [[ $1 == "register" ]]; then
if [[ $# -gt 1 ]]; then
fx-error "Verb register requires 0 arguments, but 1 is given."
exit 1
fi
if ensure-symbol-index-registered; then
echo "Registered ${FUCHSIA_DIR} successfully!"
else
fx-error "Failed to register ${FUCHSIA_DIR}!"
exit 1
fi
else
symbol-index "$@"
exit $?
fi