annotate contrib/compare-lto @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
131
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
1 #! /bin/sh
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
3 # Compare copies of two given object files.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
4
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
5 # Copyright (C) 2007, 2008, 2009, 2010, 2012 Free Software Foundation
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
6 # Originally by Alexandre Oliva <aoliva@redhat.com>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
7 # Modified for LTO bootstrap by Richard Biener <rguenther@suse.de>
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
8
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
9 # This file is part of GCC.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
10
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
11 # GCC is free software; you can redistribute it and/or modify it under
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
12 # the terms of the GNU General Public License as published by the Free
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
13 # Software Foundation; either version 3, or (at your option) any later
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
14 # version.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
15
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
16 # GCC is distributed in the hope that it will be useful, but WITHOUT
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
17 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
18 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
19 # License for more details.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
20
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
21 # You should have received a copy of the GNU General Public License
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
22 # along with GCC; see the file COPYING3. If not see
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
23 # <http://www.gnu.org/licenses/>.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
24
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
25 rm='rm -f'
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
26
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
27 case $1 in
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
28 -p | --preserve)
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
29 rm='echo preserving'
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
30 shift
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
31 ;;
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
32 esac
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
33
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
34 if test $# != 2; then
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
35 echo 'usage: compare-lto file1.o file2.o' >&2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
36 exit 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
37 fi
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
38
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
39 if test ! -f "$1"; then
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
40 echo "$1" does not exist >&2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
41 exit 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
42 fi
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
43
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
44 if test ! -f "$2"; then
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
45 echo "$2" does not exist >&2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
46 exit 1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
47 fi
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
48
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
49 suf1=stripped
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
50 while test -f "$1.$suf1"; do
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
51 suf1=$suf1.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
52 done
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
53
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
54 suf2=stripped
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
55 while test -f "$2.$suf2"; do
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
56 suf2=$suf2.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
57 done
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
58
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
59 trap 'rm -f "$1.$suf1" "$2.$suf2"' 0 1 2 15
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
60
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
61 if cmp "$1" "$2"; then
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
62 status=0
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
63 else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
64 status=1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
65
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
66 cmd=
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
67 for t in objdump readelf eu-readelf; do
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
68 if ($t --help) 2>&1 | grep ' --\[*section-\]*headers' > /dev/null; then
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
69 cmd=$t
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
70 break
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
71 fi
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
72 done
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
73
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
74 # If there are LTO option sections, try to strip them off.
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
75 if test "x$cmd" = "x" ||
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
76 $cmd --section-headers "$1" | grep '.gnu.lto_.opts' > /dev/null ||
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
77 $cmd --section-headers "$2" | grep '.gnu.lto_.opts' > /dev/null ; then
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
78
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
79 echo stripping off LTO option section, then retrying >&2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
80
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
81 seclist=".gnu.lto_.opts"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
82 rsopts=`for sec in $seclist; do echo " --remove-section $sec"; done`
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
83
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
84 if (objcopy -v) 2>&1 | grep ' --remove-section' > /dev/null; then
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
85 objcopy $rsopts "$1" "$1.$suf1"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
86 objcopy $rsopts "$2" "$2.$suf2"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
87 elif (strip --help) 2>&1 | grep ' --remove-section' > /dev/null; then
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
88 cp "$1" "$1.$suf1"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
89 strip $rsopts "$1.$suf1"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
90
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
91 cp "$2" "$2.$suf2"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
92 strip $rsopts "$2.$suf2"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
93 else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
94 echo failed to strip off LTO option section >&2
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
95 fi
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
96
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
97 trap 'rm -f "$1.$suf1" "$2.$suf2"' 0 1 2 15
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
98
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
99 if cmp "$1.$suf1" "$2.$suf2"; then
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
100 status=0
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
101 else
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
102 status=1
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
103 fi
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
104 fi
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
105 fi
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
106
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
107 $rm "$1.$suf1" "$2.$suf2"
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
108
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
109 trap "exit $status; exit" 0 1 2 15
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
110
84e7813d76e9 gcc-8.2
mir3636
parents:
diff changeset
111 exit $status