1#! /bin/sh 2 3# Add a .gdb_index section to a file. 4 5# Copyright (C) 2010-2016 Free Software Foundation, Inc. 6# This program is free software; you can redistribute it and/or modify 7# it under the terms of the GNU General Public License as published by 8# the Free Software Foundation; either version 3 of the License, or 9# (at your option) any later version. 10# 11# This program is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14# GNU General Public License for more details. 15# 16# You should have received a copy of the GNU General Public License 17# along with this program. If not, see <http://www.gnu.org/licenses/>. 18 19# This program assumes gdb and objcopy are in $PATH. 20# If not, or you want others, pass the following in the environment 21GDB=${GDB:=gdb} 22OBJCOPY=${OBJCOPY:=objcopy} 23 24myname="${0##*/}" 25 26if test $# != 1; then 27 echo "usage: $myname FILE" 1>&2 28 exit 1 29fi 30 31file="$1" 32 33if test ! -r "$file"; then 34 echo "$myname: unable to access: $file" 1>&2 35 exit 1 36fi 37 38dir="${file%/*}" 39test "$dir" = "$file" && dir="." 40index="${file}.gdb-index" 41 42rm -f $index 43# Ensure intermediate index file is removed when we exit. 44trap "rm -f $index" 0 45 46$GDB --batch -nx -iex 'set auto-load no' \ 47 -ex "file $file" -ex "save gdb-index $dir" || { 48 # Just in case. 49 status=$? 50 echo "$myname: gdb error generating index for $file" 1>&2 51 exit $status 52} 53 54# In some situations gdb can exit without creating an index. This is 55# not an error. 56# E.g., if $file is stripped. This behaviour is akin to stripping an 57# already stripped binary, it's a no-op. 58status=0 59 60if test -f "$index"; then 61 $OBJCOPY --add-section .gdb_index="$index" \ 62 --set-section-flags .gdb_index=readonly "$file" "$file" 63 status=$? 64else 65 echo "$myname: No index was created for $file" 1>&2 66 echo "$myname: [Was there no debuginfo? Was there already an index?]" 1>&2 67fi 68 69exit $status 70