hotspot.script revision 5776:de6a9e811145
1#!/bin/sh 2 3# Copyright (c) 2010, 2013, 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# This script launches HotSpot. 26# 27# If the first parameter is either "-gdb" or "-gud", HotSpot will be 28# launched inside gdb. "-gud" means "open an Emacs window and run gdb 29# inside Emacs". 30# 31# If the first parameter is "-dbx", HotSpot will be launched inside dbx. 32# 33# If the first parameter is "-valgrind", HotSpot will be launched 34# inside Valgrind (http://valgrind.kde.org) using the Memcheck skin, 35# and with memory leak detection enabled. This currently (2005jan19) 36# requires at least Valgrind 2.3.0. -Xmx16m will also be passed as 37# the first parameter to HotSpot, since lowering HotSpot's memory 38# consumption makes execution inside of Valgrind *a lot* faster. 39# 40 41 42# 43# User changeable parameters ------------------------------------------------ 44# 45 46# This is the name of the gdb binary to use 47if [ ! "$GDB" ] 48then 49 GDB=gdb 50fi 51 52# This is the name of the gdb binary to use 53if [ ! "$DBX" ] 54then 55 DBX=dbx 56fi 57 58# This is the name of the Valgrind binary to use 59if [ ! "$VALGRIND" ] 60then 61 VALGRIND=valgrind 62fi 63 64# This is the name of Emacs for running GUD 65EMACS=emacs 66 67# 68# End of user changeable parameters ----------------------------------------- 69# 70 71# Make sure the paths are fully specified, i.e. they must begin with /. 72REL_MYDIR=`dirname $0` 73MYDIR=`cd $REL_MYDIR && pwd` 74 75# 76# Look whether the user wants to run inside gdb 77case "$1" in 78 -gdb) 79 MODE=gdb 80 shift 81 ;; 82 -gud) 83 MODE=gud 84 shift 85 ;; 86 -dbx) 87 MODE=dbx 88 shift 89 ;; 90 -valgrind) 91 MODE=valgrind 92 shift 93 ;; 94 *) 95 MODE=run 96 ;; 97esac 98 99if [ "${ALT_JAVA_HOME}" != "" ]; then 100 JDK=${ALT_JAVA_HOME%%/jre} 101else 102 JDK=@@JDK_IMPORT_PATH@@ 103fi 104 105if [ "${JDK}" = "" ]; then 106 echo "Failed to find JDK. Either ALT_JAVA_HOME is not set or JDK_IMPORT_PATH is empty." 107fi 108 109# We will set the LD_LIBRARY_PATH as follows: 110# o $JVMPATH (directory portion only) 111# o $JRE/lib/$ARCH 112# followed by the user's previous effective LD_LIBRARY_PATH, if 113# any. 114JRE=$JDK/jre 115JAVA_HOME=$JDK 116export JAVA_HOME 117 118ARCH=@@LIBARCH@@ 119SBP=${MYDIR}:${JRE}/lib/${ARCH} 120 121 122# Set up a suitable LD_LIBRARY_PATH or DYLD_LIBRARY_PATH 123OS=`uname -s` 124if [ "${OS}" = "Darwin" ] 125then 126 if [ -z "$DYLD_LIBRARY_PATH" ] 127 then 128 DYLD_LIBRARY_PATH="$SBP" 129 else 130 DYLD_LIBRARY_PATH="$SBP:$DYLD_LIBRARY_PATH" 131 fi 132 export DYLD_LIBRARY_PATH 133else 134 # not 'Darwin' 135 if [ -z "$LD_LIBRARY_PATH" ] 136 then 137 LD_LIBRARY_PATH="$SBP" 138 else 139 LD_LIBRARY_PATH="$SBP:$LD_LIBRARY_PATH" 140 fi 141 export LD_LIBRARY_PATH 142fi 143 144JPARMS="-Dsun.java.launcher=gamma -XXaltjvm=$MYDIR $@ $JAVA_ARGS"; 145 146# Locate the java launcher 147LAUNCHER=$JDK/bin/java 148if [ ! -x $LAUNCHER ] ; then 149 echo Error: Cannot find the java launcher \"$LAUNCHER\" 150 exit 1 151fi 152 153GDBSRCDIR=$MYDIR 154BASEDIR=`cd $MYDIR/../../.. && pwd` 155 156init_gdb() { 157# Create a gdb script in case we should run inside gdb 158 GDBSCR=/tmp/hsl.$$ 159 rm -f $GDBSCR 160 cat >>$GDBSCR <<EOF 161cd `pwd` 162handle SIGUSR1 nostop noprint 163handle SIGUSR2 nostop noprint 164set args $JPARMS 165file $LAUNCHER 166directory $GDBSRCDIR 167# Get us to a point where we can set breakpoints in libjvm.so 168set breakpoint pending on 169break JNI_CreateJavaVM 170run 171# Stop in JNI_CreateJavaVM 172delete 1 173# We can now set breakpoints wherever we like 174EOF 175} 176 177 178case "$MODE" in 179 gdb) 180 init_gdb 181 $GDB -x $GDBSCR 182 rm -f $GDBSCR 183 ;; 184 gud) 185 init_gdb 186# First find out what emacs version we're using, so that we can 187# use the new pretty GDB mode if emacs -version >= 22.1 188 case `$EMACS -version 2> /dev/null` in 189 *GNU\ Emacs\ 2[23]*) 190 emacs_gud_cmd="gdba" 191 emacs_gud_args="--annotate=3" 192 ;; 193 *) 194 emacs_gud_cmd="gdb" 195 emacs_gud_args= 196 ;; 197 esac 198 $EMACS --eval "($emacs_gud_cmd \"$GDB $emacs_gud_args -x $GDBSCR\")"; 199 rm -f $GDBSCR 200 ;; 201 dbx) 202 $DBX -s $HOME/.dbxrc -c "loadobject -load libjvm.so; stop in JNI_CreateJavaVM; run $JPARMS; delete all" $LAUNCHER 203 ;; 204 valgrind) 205 echo Warning: Defaulting to 16Mb heap to make Valgrind run faster, use -Xmx for larger heap 206 echo 207 $VALGRIND --tool=memcheck --leak-check=yes --num-callers=50 $LAUNCHER -Xmx16m $JPARMS 208 ;; 209 run) 210 LD_PRELOAD=$PRELOADING exec $LAUNCHER $JPARMS 211 ;; 212 *) 213 echo Error: Internal error, unknown launch mode \"$MODE\" 214 exit 1 215 ;; 216esac 217RETVAL=$? 218exit $RETVAL 219