source: trunk/openjdk/hotspot/make/solaris/reorder.sh

Last change on this file was 278, checked in by dmik, 14 years ago

trunk: Merged in openjdk6 b22 from branches/vendor/oracle.

File size: 9.9 KB
Line 
1#!/bin/sh -x
2#
3# Copyright (c) 2000, 2008, 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
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
50test_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:-../../../make/solaris-$arch5}/reorder
59 libabsdir=${ALT_OUTPUTDIR:-$sdk_ws/make/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
120test_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
190test_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
225copy_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
247if [ $# != 3 ] ; then
248 echo ""
249 echo "Usage:"
250 echo " sh reorder.sh <test_sdk_workspace> <test_sdk> <jbb_dir>"
251 echo ""
252 exit 1
253fi
254
255sdk_ws=$1
256if [ ! -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
261fi
262
263sdk=$2
264jre=$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
271arch3=`uname -p`
272
273# Arch name as used in Hotspot build: (eg. i486)
274# /export/hotspot/make/solaris/solaris_${arch4}_compiler1
275arch4=$arch3
276
277# Arch name as used in SDK build (eg. i586):
278# /export/tiger/make/solaris-${arch3}
279arch5=$arch3
280
281# Tweak for 64-bit sparc builds. At least they all agree.
282if [ $arch3 = sparc -a "X$LP64" != "X" ] ; then
283 arch3=sparcv9
284 arch4=sparcv9
285 arch5=sparcv9
286fi
287
288# Tweak for 64-bit i386 == amd64 builds. At least they all agree.
289if [ $arch3 = i386 -a "X$LP64" != "X" ] ; then
290 arch3=amd64
291 arch4=amd64
292 arch5=amd64
293fi
294
295# Tweak for x86 builds. All different.
296if [ $arch3 = i386 ] ; then
297 arch4=i486
298 arch5=i586
299fi
300
301lib=$jre/lib/$arch3
302if [ ! -r $jre/lib/rt.jar ] ; then
303 echo ""
304 echo "test SDK "$sdk" is not a suitable SDK."
305 echo ""
306 exit 1
307fi
308
309jbb_dir=$3
310if [ ! -r $jbb_dir/jbb.jar ] ; then
311 echo ""
312 echo "jbb.jar not present in $jbb_dir"
313 echo ""
314 exit 1
315fi
316
317
318# Were profiled VMs built?
319
320if [ "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
328else
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
336fi
337
338
339# Compiler1 - not supported in 64-bit (b69 java launcher rejects it).
340
341if [ "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
348fi
349
350#gnumake profiled
351echo Using profiled server VM.
352echo
353copy_and_test server \
354 reorder_COMPILER2_$arch4 \
355 solaris_${arch4}_compiler2/profiled/libjvm.so
Note: See TracBrowser for help on using the repository browser.