123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- #!/bin/bash
- # Copyright (c) 2012 The Chromium Authors. All rights reserved.
- # Use of this source code is governed by a BSD-style license that can be
- # found in the LICENSE file.
- #
- # Saves the gdb index for a given binary and its shared library dependencies.
- set -e
- if [[ ! $# == 1 ]]; then
- echo "Usage: $0 path-to-binary"
- exit 1
- fi
- FILENAME="$1"
- if [[ ! -f "$FILENAME" ]]; then
- echo "Path $FILENAME does not exist."
- exit 1
- fi
- # We're good to go! Create temp directory for index files.
- DIRECTORY=$(mktemp -d)
- echo "Made temp directory $DIRECTORY."
- # Always remove directory on exit.
- trap "{ echo -n Removing temp directory $DIRECTORY...;
- rm -rf $DIRECTORY; echo done; }" EXIT
- # Grab all the chromium shared library files.
- so_files=$(ldd "$FILENAME" 2>/dev/null \
- | grep $(dirname "$FILENAME") \
- | sed "s/.*[ \t]\(.*\) (.*/\1/")
- # Add index to binary and the shared library dependencies.
- for file in "$FILENAME" $so_files; do
- basename=$(basename "$file")
- echo -n "Adding index to $basename..."
- readelf_out=$(readelf -S "$file")
- if [[ $readelf_out =~ "gdb_index" ]]; then
- echo "already contains index. Skipped."
- else
- gdb -batch "$file" -ex "save gdb-index $DIRECTORY" -ex "quit"
- objcopy --add-section .gdb_index="$DIRECTORY"/$basename.gdb-index \
- --set-section-flags .gdb_index=readonly "$file" "$file"
- echo "done."
- fi
- done
|