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