Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/common/bin/compare-objects.sh
32278 views
1
#!/bin/bash
2
#
3
# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
4
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5
#
6
# This code is free software; you can redistribute it and/or modify it
7
# under the terms of the GNU General Public License version 2 only, as
8
# published by the Free Software Foundation.
9
#
10
# This code is distributed in the hope that it will be useful, but WITHOUT
11
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13
# version 2 for more details (a copy is included in the LICENSE file that
14
# accompanied this code).
15
#
16
# You should have received a copy of the GNU General Public License version
17
# 2 along with this work; if not, write to the Free Software Foundation,
18
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19
#
20
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21
# or visit www.oracle.com if you need additional information or have any
22
# questions.
23
#
24
25
# MANUAL
26
#
27
# ./common/bin/compare-objects.sh old_jdk_build_dir new_jdk_build_dir
28
#
29
# Compares object files
30
#
31
32
if [ "x$1" = "x-h" ] || [ "x$1" = "x--help" ] || [ "x$1" == "x" ]; then
33
echo "bash ./common/bin/compare-objects.sh old_jdk_build_dir new_jdk_build_dir <pattern>"
34
echo ""
35
echo "Compare object files"
36
echo ""
37
exit 10
38
fi
39
40
#######
41
#
42
# List of files (grep patterns) that are ignored
43
#
44
# 1) hotspot object files
45
IGNORE="-e hotspot"
46
47
# 2) various build artifacts: sizer.32.o sizer.64.o dummyodbc.o
48
# these are produced during build and then e.g run to produce other data
49
# i.e not directly put into build => safe to ignore
50
IGNORE="${IGNORE} -e sizer.32.o -e sizer.64.o"
51
IGNORE="${IGNORE} -e dummyodbc.o"
52
IGNORE="${IGNORE} -e genSolarisConstants.o"
53
IGNORE="${IGNORE} -e genUnixConstants.o"
54
55
OLD="$1"
56
NEW="$2"
57
shift; shift
58
PATTERN="$*"
59
60
if [ -f $NEW/spec.sh ]; then
61
. $NEW/spec.sh
62
elif [ -f $NEW/../../spec.sh ]; then
63
. $NEW/../../spec.sh
64
elif [ -f $OLD/spec.sh ]; then
65
. $OLD/spec.sh
66
elif [ -f $OLD/../../spec.sh ]; then
67
. $OLD/../../spec.sh
68
else
69
echo "Unable to find spec.sh"
70
echo "Giving up"
71
exit 1
72
fi
73
74
export COMPARE_ROOT=/tmp/cimages.$USER/objects
75
mkdir -p $COMPARE_ROOT
76
77
(${CD} $OLD && ${FIND} . -name '*.o') > $COMPARE_ROOT/list.old
78
(${CD} $NEW && ${FIND} . -name '*.o') > $COMPARE_ROOT/list.new
79
80
# On macosx JobjC is build in both i386 and x86_64 variant (universial binary)
81
# but new build only builds the x86_64
82
# Remove the 386 variants from comparison...to avoid "false" positives
83
${GREP} -v 'JObjC.dst/Objects-normal/i386' $COMPARE_ROOT/list.old > $COMPARE_ROOT/list.old.new
84
${CP} $COMPARE_ROOT/list.old $COMPARE_ROOT/list.old.full
85
${CP} $COMPARE_ROOT/list.old.new $COMPARE_ROOT/list.old
86
87
findnew() {
88
arg_1=$1
89
arg_2=$2
90
91
# special case 1 unpack-cmd => unpackexe
92
arg_1=`${ECHO} $arg_1 | ${SED} 's!unpack-cmd!unpackexe!g'`
93
arg_2=`${ECHO} $arg_2 | ${SED} 's!unpack-cmd!unpackexe!g'`
94
95
# special case 2 /JObjC.dst/ => /libjobjc/
96
arg_1=`${ECHO} $arg_1 | ${SED} 's!/JObjC.dst/!/libjobjc/!g'`
97
arg_2=`${ECHO} $arg_2 | ${SED} 's!/JObjC.dst/!/libjobjc/!g'`
98
99
full=`${ECHO} $arg_1 | ${SED} 's!\.!\\\.!g'`
100
medium=`${ECHO} $arg_1 | ${SED} 's!.*/\([^/]*/[^/]*\)!\1!'`
101
short=`${ECHO} $arg_2 | ${SED} 's!\.!\\\.!g'`
102
if [ "`${GREP} -c "/$full" $COMPARE_ROOT/list.new`" -eq 1 ]
103
then
104
${ECHO} $NEW/$arg_1
105
return
106
fi
107
108
if [ "`${GREP} -c "$medium" $COMPARE_ROOT/list.new`" -eq 1 ]
109
then
110
${GREP} "$medium" $COMPARE_ROOT/list.new
111
return
112
fi
113
114
if [ "`${GREP} -c "/$short" $COMPARE_ROOT/list.new`" -eq 1 ]
115
then
116
${GREP} "/$short" $COMPARE_ROOT/list.new
117
return
118
fi
119
120
# old style has "dir" before obj{64}
121
dir=`${ECHO} $arg_1 | ${SED} 's!.*/\([^/]*\)/obj[64]*.*!\1!g'`
122
if [ -n "$dir" -a "$dir" != "$arg_1" ]
123
then
124
if [ "`${GREP} $dir $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ]
125
then
126
${GREP} $dir $COMPARE_ROOT/list.new | ${GREP} "/$short"
127
return
128
fi
129
130
# Try with lib$dir/
131
if [ "`${GREP} "lib$dir/" $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ]
132
then
133
${GREP} "lib$dir/" $COMPARE_ROOT/list.new | ${GREP} "/$short"
134
return
135
fi
136
137
# Try with $dir_objs
138
if [ "`${GREP} "${dir}_objs" $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ]
139
then
140
${GREP} "${dir}_objs" $COMPARE_ROOT/list.new | ${GREP} "/$short"
141
return
142
fi
143
fi
144
145
# check for some specifics...
146
for i in demo hotspot jobjc
147
do
148
if [ "`${ECHO} $full | ${GREP} -c $i`" -gt 0 ]
149
then
150
if [ "`${GREP} $i $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ]
151
then
152
${GREP} $i $COMPARE_ROOT/list.new | ${GREP} "/$short"
153
return
154
fi
155
fi
156
done
157
158
# check for specific demo
159
demo=`${ECHO} $arg_1 | ${SED} 's!.*/demo/jvmti/\([^/]*\)/.*!\1!g'`
160
if [ -n "$demo" -a "$dir" != "$demo" ]
161
then
162
if [ "`${GREP} $demo $COMPARE_ROOT/list.new | ${GREP} -c "/$short"`" -eq 1 ]
163
then
164
${GREP} $demo $COMPARE_ROOT/list.new | ${GREP} "/$short"
165
return
166
fi
167
fi
168
169
return
170
}
171
172
compare() {
173
old=$1
174
new=$2
175
${DIFF} $old $new > /dev/null
176
res=$?
177
if [ $res -eq 0 ]
178
then
179
${ECHO} 0
180
return
181
fi
182
183
# check if stripped objects gives equality
184
${CP} $old $COMPARE_ROOT/`basename $old`.old
185
${CP} $new $COMPARE_ROOT/`basename $old`.new
186
${POST_STRIP_CMD} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new > /dev/null 2>&1
187
${DIFF} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new > /dev/null
188
res=$?
189
${RM} $COMPARE_ROOT/`basename $old`.old $COMPARE_ROOT/`basename $old`.new
190
if [ $res -eq 0 ]
191
then
192
${ECHO} S
193
return
194
fi
195
196
name=`basename $1 | ${SED} 's!\.o!!'`
197
cntold=`strings $old | ${GREP} -c $name`
198
cntnew=`strings $new | ${GREP} -c $name`
199
200
if [ $cntold -gt 0 -a $cntnew -gt 0 ]
201
then
202
${ECHO} F
203
return
204
fi
205
206
${ECHO} 1
207
}
208
209
for F in `${CAT} $COMPARE_ROOT/list.old`
210
do
211
if [ "${IGNORE}" ] && [ "`${ECHO} $F | ${GREP} ${IGNORE}`" ]
212
then
213
#
214
# skip ignored files
215
#
216
continue;
217
fi
218
219
if [ "$PATTERN" ] && [ `${ECHO} $F | ${GREP} -c $PATTERN` -eq 0 ]
220
then
221
continue;
222
fi
223
224
f=`basename $F`
225
o=$OLD/$F
226
n=`findnew $F $f`
227
228
if [ "$n" ]
229
then
230
n="$NEW/$n"
231
${ECHO} `compare $o $n` : $f : $o : $n
232
else
233
${ECHO} "- : $f : $o "
234
fi
235
done
236
237