diff options
author | aoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-06-02 08:11:31 +0000 |
---|---|---|
committer | aoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-06-02 08:11:31 +0000 |
commit | e1f3b609ce1d5082c5a9ddf9f3d32f55bb941f3f (patch) | |
tree | 3d8772916292064a0011e4f3af9cf255792a4385 /contrib | |
parent | c3771ec9d5d1a86cf591ccdc286261b5d9f6b0d6 (diff) | |
download | gcc-e1f3b609ce1d5082c5a9ddf9f3d32f55bb941f3f.tar.gz |
* compare-debug: Don't fail just because of .eh_frame differences.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@148079 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/ChangeLog | 4 | ||||
-rwxr-xr-x | contrib/compare-debug | 78 |
2 files changed, 81 insertions, 1 deletions
diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 6ab29eb71d9..072c904b067 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,7 @@ +2009-06-02 Alexandre Oliva <aoliva@redhat.com> + + * compare-debug: Don't fail just because of .eh_frame differences. + 2009-04-27 Jakub Jelinek <jakub@redhat.com> PR testsuite/39807 diff --git a/contrib/compare-debug b/contrib/compare-debug index 6e979e9d786..e91e05d576e 100755 --- a/contrib/compare-debug +++ b/contrib/compare-debug @@ -2,7 +2,7 @@ # Compare stripped copies of two given object files. -# Copyright (C) 2007 Free Software Foundation +# Copyright (C) 2007, 2008, 2009 Free Software Foundation # Originally by Alexandre Oliva <aoliva@redhat.com> # This file is part of GCC. @@ -67,6 +67,82 @@ if cmp "$1.$suf1" "$2.$suf2"; then status=0 else status=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; do + if ($t --help) 2>&1 | grep -e '--\[*section-\]*headers' > /dev/null; then + cmd=$t + + $cmd --section-headers "$1.$suf1" | grep '\.eh_frame' > /dev/null + cmp1=$? + + $cmd --section-headers "$2.$suf2" | grep '\.eh_frame' > /dev/null + cmp2=$? + + break + fi + done + + # If we found .eh_frame in one but not the other, or if we could not + # find a command to tell, try to strip off the .eh_frame section + # from both. + if test "x$cmp1" != "x$cmp2" || test "x$cmd" = "x"; then + suf3=$suf1. + while test -f "$1.$suf3"; do + suf3=$suf3. + done + + suf4=$suf2. + while test -f "$2.$suf4"; do + suf4=$suf4. + done + + trap 'rm -f "$1.$suf1" "$2.$suf2" "$1.$suf3" "$2.$suf4"' 0 1 2 15 + + if (objcopy -v) 2>&1 | grep -e "--remove-section" > /dev/null; then + objcopy --remove-section .eh_frame "$1.$suf1" "$1.$suf3" + cmp "$1.$suf1" "$1.$suf3" > /dev/null + cmp1=$? + + objcopy --remove-section .eh_frame "$2.$suf2" "$2.$suf4" + cmp "$2.$suf2" "$2.$suf4" > /dev/null + cmp2=$? + + mv "$1.$suf3" "$1.$suf1" + mv "$2.$suf4" "$2.$suf2" + elif (strip --help) 2>&1 | grep -e --remove-section > /dev/null; then + cp "$1.$suf1" "$1.$suf3" + strip --remove-section .eh_frame "$1.$suf3" + + cp "$2.$suf2" "$2.$suf4" + strip --remove-section .eh_frame "$2.$suf4" + + cmp "$1.$suf1" "$1.$suf3" > /dev/null + cmp1=$? + + cmp "$2.$suf2" "$2.$suf4" > /dev/null + cmp2=$? + + mv "$1.$suf3" "$1.$suf1" + mv "$2.$suf4" "$2.$suf2" + fi + + trap 'rm -f "$1.$suf1" "$2.$suf2"' 0 1 2 15 + fi + + if test "x$cmp1" != "x$cmp2" && cmp "$1.$suf1" "$2.$suf2"; then + status=0 + else + status=1 + fi fi $rm "$1.$suf1" "$2.$suf2" |