diff options
author | ajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-21 00:09:19 +0000 |
---|---|---|
committer | ajwong@chromium.org <ajwong@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-21 00:09:19 +0000 |
commit | d43a9fbd3c95eaef27d4decf4ae1a2d5ae66b805 (patch) | |
tree | 631630d01776dae78efbca0ce295b18e9b07f466 /build/gdb-add-index | |
parent | aa172edf2acbf8b2594014c2a201d916a0fbb450 (diff) | |
download | chromium_src-d43a9fbd3c95eaef27d4decf4ae1a2d5ae66b805.zip chromium_src-d43a9fbd3c95eaef27d4decf4ae1a2d5ae66b805.tar.gz chromium_src-d43a9fbd3c95eaef27d4decf4ae1a2d5ae66b805.tar.bz2 |
Replace gdb-add-index with cleanroom rewrite from vrk@
This CL takes add-index.sh and overwrites gdb-add-index.
BUG=none
Review URL: https://chromiumcodereview.appspot.com/10827427
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@152443 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'build/gdb-add-index')
-rwxr-xr-x | build/gdb-add-index | 96 |
1 files changed, 40 insertions, 56 deletions
diff --git a/build/gdb-add-index b/build/gdb-add-index index 4eadaec..fa3e726 100755 --- a/build/gdb-add-index +++ b/build/gdb-add-index @@ -1,63 +1,47 @@ -#!/bin/sh - +#!/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. # -# Copyright (C) 2010 Free Software Foundation, Inc. -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# This is a modification of gdb-add-index that recursively adds an index -# to the shared libraries dependencies from the same build. - -target="$1" -target_dir="${target%/*}" - -OLDIFS=$IFS -IFS=$'\n' - -shared_libraries=$( - ldd -d "$target" | grep "$target_dir" | cut -d '>' -f2 | cut -d ' ' -f2 - ) - -# This function is basically the RedHat's gdb-add-index script and is why -# we have the FSF copyright above. -function index_one_file { - local file="$1" - local dir="${file%/*}" - - # We don't care if gdb gives an error. - gdb -nx --batch-silent -ex "file $file" -ex "save gdb-index $dir" - - if test -f "${file}.gdb-index"; then - objcopy --add-section .gdb_index="${file}.gdb-index" --set-section-flags \ - .gdb_index=readonly "$file" "$file" - rm -f "${file}.gdb-index" - fi -} - -function maybe_index { - readelf -e "$1" | grep '.gdb_index' > /dev/null 2>&1 - if [[ "$?" != 0 ]]; then - echo "Adding .gdb_index to $1" - index_one_file "$1" +# 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 $(pwd) \ + | 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 - echo "Skipping $1 (already has .gdb_index)" + 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 -} - -maybe_index "$target" -for lib in $shared_libraries; do - maybe_index "$lib" done |