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