Index: build/gdb-add-index |
diff --git a/build/gdb-add-index b/build/gdb-add-index |
deleted file mode 100755 |
index 992ac16159794685cdf2f233aad43e5883a107e2..0000000000000000000000000000000000000000 |
--- a/build/gdb-add-index |
+++ /dev/null |
@@ -1,162 +0,0 @@ |
-#!/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. |
-# |
-# This will run gdb index in parallel on a number of binaries using SIGUSR1 |
-# as the communication mechanism to simulate a semaphore. Because of the |
-# nature of this technique, using "set -e" is very difficult. The SIGUSR1 |
-# terminates a "wait" with an error which we need to interpret. |
-# |
-# When modifying this code, most of the real logic is in the index_one_file |
-# function. The rest is cleanup + sempahore plumbing. |
- |
-# Cleanup temp directory and ensure all child jobs are dead-dead. |
-function on_exit { |
- trap "" EXIT USR1 # Avoid reentrancy. |
- |
- local jobs=$(jobs -p) |
- if [ -n "$jobs" ]; then |
- echo -n "Killing outstanding index jobs..." |
- kill -KILL $(jobs -p) |
- wait |
- echo "done" |
- fi |
- |
- if [ -f "$DIRECTORY" ]; then |
- echo -n "Removing temp directory $DIRECTORY..." |
- rm -rf $DIRECTORY |
- echo done |
- fi |
-} |
- |
-# Add index to one binary. |
-function index_one_file { |
- local file=$1 |
- local basename=$(basename "$file") |
- local should_index="${SHOULD_INDEX}" |
- |
- local readelf_out=$(${TOOLCHAIN_PREFIX}readelf -S "$file") |
- if [[ $readelf_out =~ "gdb_index" ]]; then |
- if [ "${REMOVE_INDEX}" = 1 ]; then |
- ${TOOLCHAIN_PREFIX}objcopy --remove-section .gdb_index "$file" |
- echo "Removed index from $basename." |
- else |
- echo "Skipped $basename -- already contains index." |
- should_index=0 |
- fi |
- fi |
- |
- if [ "${should_index}" = 1 ]; then |
- local start=$(date +"%s%N") |
- echo "Adding index to $basename..." |
- |
- ${TOOLCHAIN_PREFIX}gdb -batch "$file" -ex "save gdb-index $DIRECTORY" \ |
- -ex "quit" |
- local index_file="$DIRECTORY/$basename.gdb-index" |
- if [ -f "$index_file" ]; then |
- ${TOOLCHAIN_PREFIX}objcopy --add-section .gdb_index="$index_file" \ |
- --set-section-flags .gdb_index=readonly "$file" "$file" |
- local finish=$(date +"%s%N") |
- local elapsed=$(((finish - start)/1000000)) |
- echo " ...$basename indexed. [${elapsed}ms]" |
- else |
- echo " ...$basename unindexable." |
- fi |
- fi |
-} |
- |
-# Functions that when combined, concurrently index all files in FILES_TO_INDEX |
-# array. The global FILES_TO_INDEX is declared in the main body of the script. |
-function async_index { |
- # Start a background subshell to run the index command. |
- { |
- index_one_file $1 |
- kill -SIGUSR1 $$ # $$ resolves to the parent script. |
- exit 129 # See comment above wait loop at bottom. |
- } & |
-} |
- |
-CUR_FILE_NUM=0 |
-function index_next { |
- if (( CUR_FILE_NUM >= ${#FILES_TO_INDEX[@]} )); then |
- return |
- fi |
- |
- async_index "${FILES_TO_INDEX[CUR_FILE_NUM]}" |
- ((CUR_FILE_NUM += 1)) || true |
-} |
- |
- |
-######## |
-### Main body of the script. |
- |
-REMOVE_INDEX=0 |
-SHOULD_INDEX=1 |
-while getopts ":f:r" opt; do |
- case $opt in |
- f) |
- REMOVE_INDEX=1 |
- shift |
- ;; |
- r) |
- REMOVE_INDEX=1 |
- SHOULD_INDEX=0 |
- shift |
- ;; |
- *) |
- echo "Invalid option: -$OPTARG" >&2 |
- ;; |
- esac |
-done |
- |
-if [[ ! $# == 1 ]]; then |
- echo "Usage: $0 [-f] [-r] path-to-binary" |
- echo " -f forces replacement of an existing index." |
- echo " -r removes the index section." |
- exit 1 |
-fi |
- |
-FILENAME="$1" |
-if [[ ! -f "$FILENAME" ]]; then |
- echo "Path $FILENAME does not exist." |
- exit 1 |
-fi |
- |
-# Ensure we cleanup on on exit. |
-trap on_exit EXIT |
- |
-# We're good to go! Create temp directory for index files. |
-DIRECTORY=$(mktemp -d) |
-echo "Made temp directory $DIRECTORY." |
- |
-# Create array with the filename and all shared libraries that |
-# have the same dirname. The dirname is a signal that these |
-# shared libraries were part of the same build as the binary. |
-declare -a FILES_TO_INDEX=($FILENAME |
- $(ldd "$FILENAME" 2>/dev/null \ |
- | grep $(dirname "$FILENAME") \ |
- | sed "s/.*[ \t]\(.*\) (.*/\1/") |
-) |
- |
-# Start concurrent indexing. |
-trap index_next USR1 |
- |
-# 4 is an arbitrary default. When changing, remember we are likely IO bound |
-# so basing this off the number of cores is not sensible. |
-INDEX_TASKS=${INDEX_TASKS:-4} |
-for ((i=0;i<${INDEX_TASKS};i++)); do |
- index_next |
-done |
- |
-# Do a wait loop. Bash waits that terminate due a trap have an exit |
-# code > 128. We also ensure that our subshell's "normal" exit occurs with |
-# an exit code > 128. This allows us to do consider a > 128 exit code as |
-# an indication that the loop should continue. Unfortunately, it also means |
-# we cannot use set -e since technically the "wait" is failing. |
-wait |
-while (( $? > 128 )); do |
- wait |
-done |