comparison build/solaris/reorder.sh @ 0:a61af66fc99e jdk7-b24

Initial load
author duke
date Sat, 01 Dec 2007 00:00:00 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:a61af66fc99e
1 #!/bin/sh -x
2 #
3 # Copyright 2000-2004 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
21 # CA 95054 USA or visit www.sun.com if you need additional information or
22 # have any questions.
23 #
24 #
25
26 # Generate the reorder data for hotspot.
27 #
28 # Usage:
29 #
30 # sh reorder.sh <test_sdk_workspace> <test_sdk> <jbb_dir>
31 #
32 # <test_sdk_workspace> is a *built* SDK workspace which contains the
33 # reordering tools for the SDK. This script relies on lib_mcount.so
34 # from this workspace.
35 #
36 # <test_sdk> is a working SDK which you can use to run the profiled
37 # JVMs in to collect data. You must be able to write to this SDK.
38 #
39 # <jbb_dir> is a directory containing JBB test jar files and properties
40 # which will be used to run the JBB test to provide reordering data
41 # for the server VM.
42 #
43 # Profiled builds of the VM are needed (before running this script),
44 # build with PROFILE_PRODUCT=1:
45 #
46 # gnumake profiled1 profiled PROFILE_PRODUCT=1
47 #
48 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
49
50 test_setup() {
51
52 # $1 = "client" or "server"
53 # $2 = name of reorder file to be generated.
54
55 echo ""
56 echo "TEST_SETUP $1 $2"
57 echo ""
58 libreldir=${ALT_OUTPUTDIR:-../../../build/solaris-$arch5}/reorder
59 libabsdir=${ALT_OUTPUTDIR:-$sdk_ws/build/solaris-$arch5}/reorder
60 ( cd $sdk_ws/make/tools/reorder ; gnumake $libreldir/$arch5/libmcount.so )
61 if [ "${arch3}" = "i386" ] ; then
62 # On Solaris/x86 we need to remove the symbol _mcount from the command
63 ( cd $sdk_ws/make/tools/reorder ; \
64 gnumake $libreldir/$arch5/remove_mcount )
65 echo Remove _mcount from java command.
66 $libabsdir/$arch5/remove_mcount $jre/bin/java
67 fi
68 ( cd $sdk_ws/make/tools/reorder ; gnumake tool_classes )
69 ( cd $sdk_ws/make/tools/reorder ; gnumake test_classes )
70
71 tests="Null Exit Hello Sleep IntToString \
72 LoadToolkit LoadFrame LoadJFrame JHello"
73 swingset=$sdk/demo/jfc/SwingSet2/SwingSet2.jar
74 java=$jre/bin/java
75 if [ "X$LP64" != "X" ] ; then
76 testjava="$jre/bin/${arch3}/java"
77 else
78 testjava="$jre/bin/java"
79 fi
80 mcount=$libabsdir/$arch5/libmcount.so
81
82 if [ ! -x $mcount ] ; then
83 echo $mcount is missing!
84 exit 1
85 fi
86
87 if [ "X$1" = "client" ] ; then
88 if [ "X$NO_SHARING" = "X" ] ; then
89 echo "Dumping shared file."
90 LD_PRELOAD=$mcount \
91 JDK_ALTERNATE_VM=jvm_profiled \
92 $testjava -Xshare:dump -Xint -XX:PermSize=16m -version 2> /dev/null
93 shared_client="-Xshare:on"
94 echo "Shared file dump completed."
95 else
96 shared_client="-Xshare:off"
97 echo "NO_SHARING defined, not using sharing."
98 fi
99 else
100 echo "Server: no sharing"
101 shared_server="-Xshare:off"
102 fi
103
104 testpath=$libabsdir/classes
105
106 reorder_file=$2
107
108 rm -f ${reorder_file}
109 rm -f ${reorder_file}_tmp2
110 rm -f ${reorder_file}_tmp1
111
112 echo "data = R0x2000;" > ${reorder_file}
113 echo "text = LOAD ?RXO;" >> ${reorder_file}
114 echo "" >> ${reorder_file}
115 echo "" >> ${reorder_file}
116 }
117
118 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
119
120 test_client() {
121
122 # Run each of a set of tests, extract the methods called,
123 # append the new functions to the reorder list.
124 # $1 = "client" or "server"
125 # $2 = name of reorder file to be generated.
126
127 echo "TEST_CLIENT $1 $2."
128 test_setup $1 $2
129 echo "TEST_CLIENT $1 $2."
130
131 for f in $tests ; do
132 echo Running test $f.
133 rm -f ${reorder_file}_tmp1
134 echo "# Test $f" >> ${reorder_file}
135
136 echo "Using LD_PRELOAD=$mcount"
137 echo $testjava ${shared_client} -classpath $testpath $f
138
139 LD_PRELOAD=$mcount \
140 JDK_ALTERNATE_VM=jvm_profiled \
141 $testjava ${shared_client} -classpath $testpath $f 2> ${reorder_file}_tmp1
142
143 echo "Done."
144 sed -n -e '/^text:/p' ${reorder_file}_tmp1 > ${reorder_file}_tmp2
145 sed -e '/^text:/d' ${reorder_file}_tmp1
146 LD_LIBRARY_PATH=$lib/server \
147 $java -classpath $testpath Combine ${reorder_file} \
148 ${reorder_file}_tmp2 \
149 > ${reorder_file}_tmp3
150 mv ${reorder_file}_tmp3 ${reorder_file}
151 rm -f ${reorder_file}_tmp2
152 rm -f ${reorder_file}_tmp1
153 done
154
155 # Run SwingSet, extract the methods called,
156 # append the new functions to the reorder list.
157
158 echo "# SwingSet" >> ${reorder_file}
159
160 echo ""
161 echo ""
162 echo "When SwingSet has finished drawing, " \
163 "you may terminate it (with your mouse)."
164 echo "Otherwise, it should be automatically terminated in 3 minutes."
165 echo ""
166 echo ""
167
168 echo "Using LD_PRELOAD=$mcount, JDK_ALTERNATE=jvm_profiled."
169 echo $testjava ${shared_client} -classpath $testpath MaxTime $swingset 60
170 LD_PRELOAD=$mcount \
171 JDK_ALTERNATE_VM=jvm_profiled \
172 $testjava ${shared_client} -classpath $testpath MaxTime \
173 $swingset 60 2> ${reorder_file}_tmp1
174
175 sed -n -e '/^text:/p' ${reorder_file}_tmp1 > ${reorder_file}_tmp2
176
177 LD_LIBRARY_PATH=$lib/server \
178 $java -server -classpath $testpath Combine ${reorder_file} ${reorder_file}_tmp2 \
179 > ${reorder_file}_tmp3
180 echo mv ${reorder_file}_tmp3 ${reorder_file}
181 mv ${reorder_file}_tmp3 ${reorder_file}
182 echo rm -f ${reorder_file}_tmp2
183 rm -f ${reorder_file}_tmp2
184 echo rm -f ${reorder_file}_tmp1
185 rm -f ${reorder_file}_tmp1
186 }
187
188 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
189
190 test_server() {
191
192 # Run the JBB script, collecting data on the way.
193 # $1 = "client" or "server"
194 # $2 = name of reorder file to be generated.
195
196 echo "TEST_SERVER $1 $2."
197 test_setup $1 $2
198 echo "TEST_SERVER $1 $2."
199
200 echo Running JBB.
201
202 rm -f ${reorder_file}_tmp1
203 rm -f ${reorder_file}_tmp2
204 heap=200m
205
206 CLASSPATH=jbb.jar:jbb_no_precompile.jar:check.jar:reporter.jar
207
208 ( cd $jbb_dir; LD_PRELOAD=$mcount MCOUNT_ORDER_BY_COUNT=1 \
209 JDK_ALTERNATE_VM=jvm_profiled \
210 $testjava ${shared_server} -classpath $CLASSPATH -Xms${heap} -Xmx${heap} \
211 spec.jbb.JBBmain -propfile SPECjbb.props ) 2> ${reorder_file}_tmp1
212
213 sed -n -e '/^text:/p' ${reorder_file}_tmp1 > ${reorder_file}_tmp2
214 sed -e '/^text:/d' ${reorder_file}_tmp1
215 cat ${reorder_file}_tmp2 >> ${reorder_file}
216 rm -f ${reorder_file}_tmp2
217 rm -f ${reorder_file}_tmp1
218 }
219
220 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
221
222 # Rename the old VMs, copy the new in, run the test, and put the
223 # old one back.
224
225 copy_and_test() {
226
227 # $1 = "client" or "server"
228 # $2 = name of reorder file to be generated.
229 # $3 = profiled jvm to copy in
230
231 echo "COPY_AND_TEST ($1, $2, $3)."
232 # $2 = name of reorder file to be generated.
233 # $3 = profiled jvm to copy in
234
235 rm -rf $lib/jvm_profiled
236 mkdir $lib/jvm_profiled
237 cp $3 $lib/jvm_profiled
238 test_$1 $1 $2
239 rm -rf $lib/jvm_profiled
240 }
241
242 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
243
244
245 # Check arguments:
246
247 if [ $# != 3 ] ; then
248 echo ""
249 echo "Usage:"
250 echo " sh reorder.sh <test_sdk_workspace> <test_sdk> <jbb_dir>"
251 echo ""
252 exit 1
253 fi
254
255 sdk_ws=$1
256 if [ ! -r $sdk_ws/make/tools/reorder/Makefile ] ; then
257 echo ""
258 echo "test workspace "$sdk_ws" does not contain the reordering tools."
259 echo ""
260 exit 1
261 fi
262
263 sdk=$2
264 jre=$sdk/jre
265
266 # Set up architecture names as needed by various components.
267 # Why couldn't we just use x86 for everything?
268
269 # Arch name as used in JRE runtime (eg. i386):
270 # .../jre/lib/${arch3}/server
271 arch3=`uname -p`
272
273 # Arch name as used in Hotspot build: (eg. i486)
274 # /export/hotspot/build/solaris/solaris_${arch4}_compiler1
275 arch4=$arch3
276
277 # Arch name as used in SDK build (eg. i586):
278 # /export/tiger/build/solaris-${arch3}
279 arch5=$arch3
280
281 # Tweak for 64-bit sparc builds. At least they all agree.
282 if [ $arch3 = sparc -a "X$LP64" != "X" ] ; then
283 arch3=sparcv9
284 arch4=sparcv9
285 arch5=sparcv9
286 fi
287
288 # Tweak for 64-bit i386 == amd64 builds. At least they all agree.
289 if [ $arch3 = i386 -a "X$LP64" != "X" ] ; then
290 arch3=amd64
291 arch4=amd64
292 arch5=amd64
293 fi
294
295 # Tweak for x86 builds. All different.
296 if [ $arch3 = i386 ] ; then
297 arch4=i486
298 arch5=i586
299 fi
300
301 lib=$jre/lib/$arch3
302 if [ ! -r $jre/lib/rt.jar ] ; then
303 echo ""
304 echo "test SDK "$sdk" is not a suitable SDK."
305 echo ""
306 exit 1
307 fi
308
309 jbb_dir=$3
310 if [ ! -r $jbb_dir/jbb.jar ] ; then
311 echo ""
312 echo "jbb.jar not present in $jbb_dir"
313 echo ""
314 exit 1
315 fi
316
317
318 # Were profiled VMs built?
319
320 if [ "X$LP64" != "X" ] ; then
321 if [ ! -r solaris_${arch4}_compiler2/profiled/libjvm.so ] ; then
322 echo ""
323 echo "Profiled builds of compiler2 are needed first."
324 echo ' -- build with "make profiled PROFILE_PRODUCT=1" -- '
325 echo "<solaris_${arch4}_compiler2/profiled/libjvm.so>"
326 exit 1
327 fi
328 else
329 if [ ! -r solaris_${arch4}_compiler1/profiled/libjvm.so \
330 -o ! -r solaris_${arch4}_compiler2/profiled/libjvm.so ] ; then
331 echo ""
332 echo "Profiled builds of compiler1 and compiler2 are needed first."
333 echo ' -- build with "make profiled{,1} PROFILE_PRODUCT=1" -- '
334 exit 1
335 fi
336 fi
337
338
339 # Compiler1 - not supported in 64-bit (b69 java launcher rejects it).
340
341 if [ "X$LP64" = "X" ] ; then
342 #gnumake profiled1
343 echo Using profiled client VM.
344 echo
345 copy_and_test client \
346 reorder_COMPILER1_$arch4 \
347 solaris_${arch4}_compiler1/profiled/libjvm.so
348 fi
349
350 #gnumake profiled
351 echo Using profiled server VM.
352 echo
353 copy_and_test server \
354 reorder_COMPILER2_$arch4 \
355 solaris_${arch4}_compiler2/profiled/libjvm.so