make/solaris/reorder.sh

Thu, 18 Feb 2010 13:31:31 -0800

author
mikejwre
date
Thu, 18 Feb 2010 13:31:31 -0800
changeset 1678
125eb6a9fccf
parent 631
d1605aabd0a1
child 1907
c18cbe5936b8
permissions
-rw-r--r--

Added tag jdk7-b84 for changeset ffc8d176b84b

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

mercurial