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