URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [contrib/] [compare-debug] - Rev 723
Compare with Previous | Blame | View Log
#! /bin/sh# Compare stripped copies of two given object files.# Copyright (C) 2007, 2008, 2009, 2010 Free Software Foundation# Originally by Alexandre Oliva <aoliva@redhat.com># This file is part of GCC.# GCC 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, or (at your option) any later# version.# GCC 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 GCC; see the file COPYING3. If not see# <http://www.gnu.org/licenses/>.rm='rm -f'case $1 in-p | --preserve)rm='echo preserving'shift;;esacif test $# != 2; thenecho 'usage: compare-debug file1.o file2.o' >&2exit 1fiif test ! -f "$1"; thenecho "$1" does not exist >&2exit 1fiif test ! -f "$2"; thenecho "$2" does not exist >&2exit 1fisuf1=strippedwhile test -f "$1.$suf1"; dosuf1=$suf1.donesuf2=strippedwhile test -f "$2.$suf2"; dosuf2=$suf2.donetrap 'rm -f "$1.$suf1" "$2.$suf2"' 0 1 2 15case `uname -s` inDarwin)# The strip command on darwin does not remove all debug info.# Fortunately, we can use ld to do it instead.ld -S -r -no_uuid "$1" -o "$1.$suf1"ld -S -r -no_uuid "$2" -o "$2.$suf2";;*)cp "$1" "$1.$suf1"strip "$1.$suf1"cp "$2" "$2.$suf2"strip "$2.$suf2";;esacif cmp "$1.$suf1" "$2.$suf2"; thenstatus=0elsestatus=1# Assembler-generated CFI will add an .eh_frame section for -g not# present in -g0. Try to cope with it by checking that an .eh_frame# section is present in either object file, and then stripping it# off before re-comparing.cmd=cmp1=cmp2=for t in objdump readelf eu-readelf; doif ($t --help) 2>&1 | grep ' --\[*section-\]*headers' > /dev/null; thencmd=$t$cmd --section-headers "$1.$suf1" | grep '\.eh_frame' > /dev/nullcmp1=$?$cmd --section-headers "$2.$suf2" | grep '\.eh_frame' > /dev/nullcmp2=$?breakfidone# If we found .eh_frame in one but not the other, or if we could not# find a command to tell, or if there are LTO sections, try to strip# off the .eh_frame and LTO sections from both.if test "x$cmp1" != "x$cmp2" || test "x$cmd" = "x" ||$cmd --section-headers "$1.$suf1" | grep '.gnu.lto_' > /dev/null ||$cmd --section-headers "$2.$suf2" | grep '.gnu.lto_' > /dev/null ; thensuf3=$suf1.while test -f "$1.$suf3"; dosuf3=$suf3.donesuf4=$suf2.while test -f "$2.$suf4"; dosuf4=$suf4.donetrap 'rm -f "$1.$suf1" "$2.$suf2" "$1.$suf3" "$2.$suf4"' 0 1 2 15echo stripping off .eh_frame and LTO sections, then retrying >&2seclist=".eh_frame .rel.eh_frame .rela.eh_frame"if test "x$cmd" != "x"; thenseclist="$seclist "`{ $cmd --section-headers "$1.$suf1"; $cmd --section-headers "$2.$suf2"; } | sed -n 's,.* \(\.gnu\.lto_[^ ]*\).*,\1,p' | sort -u`firsopts=`for sec in $seclist; do echo " --remove-section $sec"; done`if (objcopy -v) 2>&1 | grep ' --remove-section' > /dev/null; thenobjcopy $rsopts "$1.$suf1" "$1.$suf3"mv "$1.$suf3" "$1.$suf1"objcopy $rsopts "$2.$suf2" "$2.$suf4"mv "$2.$suf4" "$2.$suf2"elif (strip --help) 2>&1 | grep ' --remove-section' > /dev/null; thencp "$1.$suf1" "$1.$suf3"strip $rsopts "$1.$suf3"mv "$1.$suf3" "$1.$suf1"cp "$2.$suf2" "$2.$suf4"strip $rsopts "$2.$suf4"mv "$2.$suf4" "$2.$suf2"elseecho failed to strip off .eh_frame >&2fitrap 'rm -f "$1.$suf1" "$2.$suf2"' 0 1 2 15if cmp "$1.$suf1" "$2.$suf2"; thenstatus=0elsestatus=1fififi$rm "$1.$suf1" "$2.$suf2"trap "exit $status; exit" 0 1 2 15if test -f "$1".gkd || test -f "$2".gkd; thenif cmp "$1".gkd "$2".gkd; then:elsestatus=$?fifiexit $status
