--- a/hotspot/make/bsd/Makefile Tue Jan 24 20:15:56 2012 -0800
+++ b/hotspot/make/bsd/Makefile Wed Jan 25 01:16:03 2012 -0800
@@ -208,7 +208,7 @@
TARGETS_SHARK = $(addsuffix shark,$(TARGETS))
BUILDTREE_MAKE = $(GAMMADIR)/make/$(OSNAME)/makefiles/buildtree.make
-BUILDTREE_VARS = GAMMADIR=$(GAMMADIR) OS_FAMILY=$(OSNAME) SRCARCH=$(SRCARCH) BUILDARCH=$(BUILDARCH) LIBARCH=$(LIBARCH)
+BUILDTREE_VARS = GAMMADIR=$(GAMMADIR) OS_FAMILY=$(OSNAME) SRCARCH=$(SRCARCH) BUILDARCH=$(BUILDARCH) LIBARCH=$(LIBARCH) LIBRARY_SUFFIX=$(LIBRARY_SUFFIX)
BUILDTREE_VARS += HOTSPOT_RELEASE_VERSION=$(HOTSPOT_RELEASE_VERSION) HOTSPOT_BUILD_VERSION=$(HOTSPOT_BUILD_VERSION) JRE_RELEASE_VERSION=$(JRE_RELEASE_VERSION)
BUILDTREE = $(MAKE) -f $(BUILDTREE_MAKE) $(BUILDTREE_VARS)
--- a/hotspot/make/bsd/makefiles/buildtree.make Tue Jan 24 20:15:56 2012 -0800
+++ b/hotspot/make/bsd/makefiles/buildtree.make Wed Jan 25 01:16:03 2012 -0800
@@ -162,20 +162,6 @@
endif
endif
-ifeq ($(OS_VENDOR), Darwin)
- # MACOSX FIXME: we should be able to run test_gamma (see MACOSX_PORT-214)
- ifeq ($(ALWAYS_PASS_TEST_GAMMA),)
- # ALWAYS_PASS_TEST_GAMMA wasn't set so we default to true on MacOS X
- # until MACOSX_PORT-214 is fixed
- ALWAYS_PASS_TEST_GAMMA=true
- endif
-endif
-ifeq ($(ALWAYS_PASS_TEST_GAMMA), true)
- TEST_GAMMA_STATUS= echo 'exit 0';
-else
- TEST_GAMMA_STATUS=
-endif
-
BUILDTREE_VARS += HOTSPOT_RELEASE_VERSION=$(HS_BUILD_VER) HOTSPOT_BUILD_VERSION= JRE_RELEASE_VERSION=$(JRE_RELEASE_VERSION)
BUILDTREE = \
@@ -353,12 +339,10 @@
$(BUILDTREE_COMMENT); \
[ -n "$$JAVA_HOME" ] && { echo ": \$${JAVA_HOME:=$${JAVA_HOME}}"; }; \
{ \
- echo "LD_LIBRARY_PATH=.:$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}\$${JAVA_HOME}/jre/lib/${LIBARCH}/native_threads:\$${JAVA_HOME}/jre/lib/${LIBARCH}:${GCC_LIB}"; \
- echo "DYLD_LIBRARY_PATH=.:$${DYLD_LIBRARY_PATH:+$$DYLD_LIBRARY_PATH:}\$${JAVA_HOME}/jre/lib/${LIBARCH}/native_threads:\$${JAVA_HOME}/jre/lib/${LIBARCH}:${GCC_LIB}"; \
echo "CLASSPATH=$${CLASSPATH:+$$CLASSPATH:}.:\$${JAVA_HOME}/jre/lib/rt.jar:\$${JAVA_HOME}/jre/lib/i18n.jar"; \
} | sed s:$${JAVA_HOME:--------}:\$${JAVA_HOME}:g; \
echo "HOTSPOT_BUILD_USER=\"$${LOGNAME:-$$USER} in `basename $(GAMMADIR)`\""; \
- echo "export JAVA_HOME LD_LIBRARY_PATH DYLD_LIBRARY_PATH CLASSPATH HOTSPOT_BUILD_USER"; \
+ echo "export JAVA_HOME CLASSPATH HOTSPOT_BUILD_USER"; \
) > $@
env.csh: env.sh
@@ -412,7 +396,7 @@
JAVA_FLAG/64 = -d64
WRONG_DATA_MODE_MSG = \
- echo "JAVA_HOME must point to $(DATA_MODE)bit JDK."
+ echo "JAVA_HOME must point to a $(DATA_MODE)-bit OpenJDK."
CROSS_COMPILING_MSG = \
echo "Cross compiling for ARCH $(CROSS_COMPILE_ARCH), skipping gamma run."
@@ -420,20 +404,78 @@
test_gamma: $(BUILDTREE_MAKE) $(GAMMADIR)/make/test/Queens.java
@echo Creating $@ ...
$(QUIETLY) ( \
- echo '#!/bin/sh'; \
+ echo "#!/bin/sh"; \
+ echo ""; \
$(BUILDTREE_COMMENT); \
- echo '. ./env.sh'; \
- echo "if [ \"$(CROSS_COMPILE_ARCH)\" != \"\" ]; then { $(CROSS_COMPILING_MSG); exit 0; }; fi"; \
- echo "if [ -z \$$JAVA_HOME ]; then { $(NO_JAVA_HOME_MSG); exit 0; }; fi"; \
- echo "if ! \$${JAVA_HOME}/bin/java $(JAVA_FLAG) -fullversion 2>&1 > /dev/null"; \
- echo "then"; \
- echo " $(WRONG_DATA_MODE_MSG); exit 0;"; \
+ echo ""; \
+ echo "# Include environment settings for gamma run"; \
+ echo ""; \
+ echo ". ./env.sh"; \
+ echo ""; \
+ echo "# Do not run gamma test for cross compiles"; \
+ echo ""; \
+ echo "if [ -n \"$(CROSS_COMPILE_ARCH)\" ]; then "; \
+ echo " $(CROSS_COMPILING_MSG)"; \
+ echo " exit 0"; \
+ echo "fi"; \
+ echo ""; \
+ echo "# Make sure JAVA_HOME is set as it is required for gamma"; \
+ echo ""; \
+ echo "if [ -z \"\$${JAVA_HOME}\" ]; then "; \
+ echo " $(NO_JAVA_HOME_MSG)"; \
+ echo " exit 0"; \
+ echo "fi"; \
+ echo ""; \
+ echo "# Check JAVA_HOME version to be used for the test"; \
+ echo ""; \
+ echo "\$${JAVA_HOME}/bin/java $(JAVA_FLAG) -fullversion > /dev/null 2>&1"; \
+ echo "if [ \$$? -ne 0 ]; then "; \
+ echo " $(WRONG_DATA_MODE_MSG)"; \
+ echo " exit 0"; \
echo "fi"; \
+ echo ""; \
+ echo "# Use gamma_g if it exists"; \
+ echo ""; \
+ echo "GAMMA_PROG=gamma"; \
+ echo "if [ -f gamma_g ]; then "; \
+ echo " GAMMA_PROG=gamma_g"; \
+ echo "fi"; \
+ echo ""; \
+ echo "if [ \"$(OS_VENDOR)\" = \"Darwin\" ]; then "; \
+ echo " # Ensure architecture for gamma and JAVA_HOME is the same."; \
+ echo " # NOTE: gamma assumes the OpenJDK directory layout."; \
+ echo ""; \
+ echo " GAMMA_ARCH=\"\`file \$${GAMMA_PROG} | awk '{print \$$NF}'\`\""; \
+ echo " JVM_LIB=\"\$${JAVA_HOME}/jre/lib/libjava.$(LIBRARY_SUFFIX)\""; \
+ echo " if [ ! -f \$${JVM_LIB} ]; then"; \
+ echo " JVM_LIB=\"\$${JAVA_HOME}/jre/lib/$${LIBARCH}/libjava.$(LIBRARY_SUFFIX)\""; \
+ echo " fi"; \
+ echo " if [ ! -f \$${JVM_LIB} ] || [ -z \"\`file \$${JVM_LIB} | grep \$${GAMMA_ARCH}\`\" ]; then "; \
+ echo " $(WRONG_DATA_MODE_MSG)"; \
+ echo " exit 0"; \
+ echo " fi"; \
+ echo "fi"; \
+ echo ""; \
+ echo "# Compile Queens program for test"; \
+ echo ""; \
echo "rm -f Queens.class"; \
echo "\$${JAVA_HOME}/bin/javac -d . $(GAMMADIR)/make/test/Queens.java"; \
- echo '[ -f gamma_g ] && { gamma=gamma_g; }'; \
- echo './$${gamma:-gamma} $(TESTFLAGS) Queens < /dev/null'; \
- $(TEST_GAMMA_STATUS) \
+ echo ""; \
+ echo "# Set library path solely for gamma launcher test run"; \
+ echo ""; \
+ echo "LD_LIBRARY_PATH=.:$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}\$${JAVA_HOME}/jre/lib/${LIBARCH}/native_threads:\$${JAVA_HOME}/jre/lib/${LIBARCH}:${GCC_LIB}"; \
+ echo "export LD_LIBRARY_PATH"; \
+ echo "unset LD_LIBRARY_PATH_32"; \
+ echo "unset LD_LIBRARY_PATH_64"; \
+ echo ""; \
+ echo "if [ \"$(OS_VENDOR)\" = \"Darwin\" ]; then "; \
+ echo " DYLD_LIBRARY_PATH=.:$${DYLD_LIBRARY_PATH:+$$DYLD_LIBRARY_PATH:}\$${JAVA_HOME}/jre/lib/native_threads:\$${JAVA_HOME}/jre/lib:$${DYLD_LIBRARY_PATH:+$$DYLD_LIBRARY_PATH:}\$${JAVA_HOME}/jre/lib/${LIBARCH}/native_threads:\$${JAVA_HOME}/jre/lib/${LIBARCH}:${GCC_LIB}"; \
+ echo " export DYLD_LIBRARY_PATH"; \
+ echo "fi"; \
+ echo ""; \
+ echo "# Use the gamma launcher and JAVA_HOME to run the test"; \
+ echo ""; \
+ echo "./\$${GAMMA_PROG} $(TESTFLAGS) Queens < /dev/null"; \
) > $@
$(QUIETLY) chmod +x $@
--- a/hotspot/make/bsd/makefiles/defs.make Tue Jan 24 20:15:56 2012 -0800
+++ b/hotspot/make/bsd/makefiles/defs.make Wed Jan 25 01:16:03 2012 -0800
@@ -142,6 +142,7 @@
# client and server subdirectories have symbolic links to ../libjsig.so
EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.$(LIBRARY_SUFFIX)
EXPORT_SERVER_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/server
+EXPORT_CLIENT_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/client
ifndef BUILD_CLIENT_ONLY
EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt
@@ -150,7 +151,6 @@
ifneq ($(ZERO_BUILD), true)
ifeq ($(ARCH_DATA_MODEL), 32)
- EXPORT_CLIENT_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/client
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.$(LIBRARY_SUFFIX)
endif
--- a/hotspot/make/bsd/makefiles/launcher.make Tue Jan 24 20:15:56 2012 -0800
+++ b/hotspot/make/bsd/makefiles/launcher.make Wed Jan 25 01:16:03 2012 -0800
@@ -50,7 +50,24 @@
LIBS_LAUNCHER += $(STATIC_STDCXX) $(LIBS)
else
LAUNCHER.o = launcher.o
- LFLAGS_LAUNCHER += -L`pwd`
+ LFLAGS_LAUNCHER += -L`pwd`
+
+ # The gamma launcher runs the JDK from $JAVA_HOME, overriding the JVM with a
+ # freshly built JVM at ./libjvm.{so|dylib}. This is accomplished by setting
+ # the library searchpath using ({DY}LD_LIBRARY_PATH) to find the local JVM
+ # first. Gamma dlopen()s libjava from $JAVA_HOME/jre/lib{/$arch}, which is
+ # statically linked with CoreFoundation framework libs. Unfortunately, gamma's
+ # unique searchpath results in some unresolved symbols in the framework
+ # libraries, because JDK libraries are inadvertently discovered first on the
+ # searchpath, e.g. libjpeg. On Mac OS X, filenames are case *insensitive*.
+ # So, the actual filename collision is libjpeg.dylib and libJPEG.dylib.
+ # To resolve this, gamma needs to also statically link with the CoreFoundation
+ # framework libraries.
+
+ ifeq ($(OS_VENDOR),Darwin)
+ LFLAGS_LAUNCHER += -framework CoreFoundation
+ endif
+
LIBS_LAUNCHER += -l$(JVM) $(LIBS)
endif
--- a/hotspot/make/bsd/makefiles/vm.make Tue Jan 24 20:15:56 2012 -0800
+++ b/hotspot/make/bsd/makefiles/vm.make Wed Jan 25 01:16:03 2012 -0800
@@ -337,8 +337,8 @@
$(LIBJVM).dSYM: $(LIBJVM)
dsymutil $(LIBJVM)
-# no launcher or libjvm_db for macosx
-build: $(LIBJVM) $(LIBJSIG) $(BUILDLIBSAPROC) dtraceCheck $(LIBJVM).dSYM
+# no libjvm_db for macosx
+build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(BUILDLIBSAPROC) dtraceCheck $(LIBJVM).dSYM
echo "Doing vm.make build:"
else
build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(BUILDLIBSAPROC)
--- a/hotspot/make/linux/makefiles/buildtree.make Tue Jan 24 20:15:56 2012 -0800
+++ b/hotspot/make/linux/makefiles/buildtree.make Wed Jan 25 01:16:03 2012 -0800
@@ -326,11 +326,10 @@
$(BUILDTREE_COMMENT); \
[ -n "$$JAVA_HOME" ] && { echo ": \$${JAVA_HOME:=$${JAVA_HOME}}"; }; \
{ \
- echo "LD_LIBRARY_PATH=.:$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}\$${JAVA_HOME}/jre/lib/${LIBARCH}/native_threads:\$${JAVA_HOME}/jre/lib/${LIBARCH}:${GCC_LIB}"; \
echo "CLASSPATH=$${CLASSPATH:+$$CLASSPATH:}.:\$${JAVA_HOME}/jre/lib/rt.jar:\$${JAVA_HOME}/jre/lib/i18n.jar"; \
} | sed s:$${JAVA_HOME:--------}:\$${JAVA_HOME}:g; \
echo "HOTSPOT_BUILD_USER=\"$${LOGNAME:-$$USER} in `basename $(GAMMADIR)`\""; \
- echo "export JAVA_HOME LD_LIBRARY_PATH CLASSPATH HOTSPOT_BUILD_USER"; \
+ echo "export JAVA_HOME CLASSPATH HOTSPOT_BUILD_USER"; \
) > $@
env.csh: env.sh
@@ -384,7 +383,7 @@
JAVA_FLAG/64 = -d64
WRONG_DATA_MODE_MSG = \
- echo "JAVA_HOME must point to $(DATA_MODE)bit JDK."
+ echo "JAVA_HOME must point to a $(DATA_MODE)-bit OpenJDK."
CROSS_COMPILING_MSG = \
echo "Cross compiling for ARCH $(CROSS_COMPILE_ARCH), skipping gamma run."
@@ -392,19 +391,78 @@
test_gamma: $(BUILDTREE_MAKE) $(GAMMADIR)/make/test/Queens.java
@echo Creating $@ ...
$(QUIETLY) ( \
- echo '#!/bin/sh'; \
+ echo "#!/bin/sh"; \
+ echo ""; \
$(BUILDTREE_COMMENT); \
- echo '. ./env.sh'; \
- echo "if [ \"$(CROSS_COMPILE_ARCH)\" != \"\" ]; then { $(CROSS_COMPILING_MSG); exit 0; }; fi"; \
- echo "if [ -z \$$JAVA_HOME ]; then { $(NO_JAVA_HOME_MSG); exit 0; }; fi"; \
- echo "if ! \$${JAVA_HOME}/bin/java $(JAVA_FLAG) -fullversion 2>&1 > /dev/null"; \
- echo "then"; \
- echo " $(WRONG_DATA_MODE_MSG); exit 0;"; \
+ echo ""; \
+ echo "# Include environment settings for gamma run"; \
+ echo ""; \
+ echo ". ./env.sh"; \
+ echo ""; \
+ echo "# Do not run gamma test for cross compiles"; \
+ echo ""; \
+ echo "if [ -n \"$(CROSS_COMPILE_ARCH)\" ]; then "; \
+ echo " $(CROSS_COMPILING_MSG)"; \
+ echo " exit 0"; \
+ echo "fi"; \
+ echo ""; \
+ echo "# Make sure JAVA_HOME is set as it is required for gamma"; \
+ echo ""; \
+ echo "if [ -z \"\$${JAVA_HOME}\" ]; then "; \
+ echo " $(NO_JAVA_HOME_MSG)"; \
+ echo " exit 0"; \
+ echo "fi"; \
+ echo ""; \
+ echo "# Check JAVA_HOME version to be used for the test"; \
+ echo ""; \
+ echo "\$${JAVA_HOME}/bin/java $(JAVA_FLAG) -fullversion > /dev/null 2>&1"; \
+ echo "if [ \$$? -ne 0 ]; then "; \
+ echo " $(WRONG_DATA_MODE_MSG)"; \
+ echo " exit 0"; \
echo "fi"; \
+ echo ""; \
+ echo "# Use gamma_g if it exists"; \
+ echo ""; \
+ echo "GAMMA_PROG=gamma"; \
+ echo "if [ -f gamma_g ]; then "; \
+ echo " GAMMA_PROG=gamma_g"; \
+ echo "fi"; \
+ echo ""; \
+ echo "if [ \"$(OS_VENDOR)\" = \"Darwin\" ]; then "; \
+ echo " # Ensure architecture for gamma and JAVA_HOME is the same."; \
+ echo " # NOTE: gamma assumes the OpenJDK directory layout."; \
+ echo ""; \
+ echo " GAMMA_ARCH=\"\`file \$${GAMMA_PROG} | awk '{print \$$NF}'\`\""; \
+ echo " JVM_LIB=\"\$${JAVA_HOME}/jre/lib/libjava.$(LIBRARY_SUFFIX)\""; \
+ echo " if [ ! -f \$${JVM_LIB} ]; then"; \
+ echo " JVM_LIB=\"\$${JAVA_HOME}/jre/lib/$${LIBARCH}/libjava.$(LIBRARY_SUFFIX)\""; \
+ echo " fi"; \
+ echo " if [ ! -f \$${JVM_LIB} ] || [ -z \"\`file \$${JVM_LIB} | grep \$${GAMMA_ARCH}\`\" ]; then "; \
+ echo " $(WRONG_DATA_MODE_MSG)"; \
+ echo " exit 0"; \
+ echo " fi"; \
+ echo "fi"; \
+ echo ""; \
+ echo "# Compile Queens program for test"; \
+ echo ""; \
echo "rm -f Queens.class"; \
echo "\$${JAVA_HOME}/bin/javac -d . $(GAMMADIR)/make/test/Queens.java"; \
- echo '[ -f gamma_g ] && { gamma=gamma_g; }'; \
- echo './$${gamma:-gamma} $(TESTFLAGS) Queens < /dev/null'; \
+ echo ""; \
+ echo "# Set library path solely for gamma launcher test run"; \
+ echo ""; \
+ echo "LD_LIBRARY_PATH=.:$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}\$${JAVA_HOME}/jre/lib/${LIBARCH}/native_threads:\$${JAVA_HOME}/jre/lib/${LIBARCH}:${GCC_LIB}"; \
+ echo "export LD_LIBRARY_PATH"; \
+ echo "unset LD_LIBRARY_PATH_32"; \
+ echo "unset LD_LIBRARY_PATH_64"; \
+ echo ""; \
+ echo "if [ \"$(OS_VENDOR)\" = \"Darwin\" ]; then "; \
+ echo " DYLD_LIBRARY_PATH=.:$${DYLD_LIBRARY_PATH:+$$DYLD_LIBRARY_PATH:}\$${JAVA_HOME}/jre/lib/native_threads:\$${JAVA_HOME}/jre/lib:$${DYLD_LIBRARY_PATH:+$$DYLD_LIBRARY_PATH:}\$${JAVA_HOME}/jre/lib/${LIBARCH}/native_threads:\$${JAVA_HOME}/jre/lib/${LIBARCH}:${GCC_LIB}"; \
+ echo " export DYLD_LIBRARY_PATH"; \
+ echo "fi"; \
+ echo ""; \
+ echo "# Use the gamma launcher and JAVA_HOME to run the test"; \
+ echo ""; \
+ echo "./\$${GAMMA_PROG} $(TESTFLAGS) Queens < /dev/null"; \
) > $@
$(QUIETLY) chmod +x $@
--- a/hotspot/make/solaris/makefiles/buildtree.make Tue Jan 24 20:15:56 2012 -0800
+++ b/hotspot/make/solaris/makefiles/buildtree.make Wed Jan 25 01:16:03 2012 -0800
@@ -118,7 +118,7 @@
BUILDTREE_MAKE = $(GAMMADIR)/make/$(OS_FAMILY)/makefiles/buildtree.make
BUILDTREE_TARGETS = Makefile flags.make flags_vm.make vm.make adlc.make jvmti.make sa.make \
- env.ksh env.csh jdkpath.sh .dbxrc test_gamma
+ env.sh env.csh jdkpath.sh .dbxrc test_gamma
BUILDTREE_VARS = GAMMADIR=$(GAMMADIR) OS_FAMILY=$(OS_FAMILY) \
ARCH=$(ARCH) BUILDARCH=$(BUILDARCH) LIBARCH=$(LIBARCH) VARIANT=$(VARIANT)
@@ -313,22 +313,19 @@
echo "include \$$(GAMMADIR)/make/$(OS_FAMILY)/makefiles/$(@F)"; \
) > $@
-env.ksh: $(BUILDTREE_MAKE)
+env.sh: $(BUILDTREE_MAKE)
@echo Creating $@ ...
$(QUIETLY) ( \
$(BUILDTREE_COMMENT); \
[ -n "$$JAVA_HOME" ] && { echo ": \$${JAVA_HOME:=$${JAVA_HOME}}"; }; \
{ \
- echo "LD_LIBRARY_PATH=.:$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}\$${JAVA_HOME}/jre/lib/${LIBARCH}/native_threads:\$${JAVA_HOME}/jre/lib/${LIBARCH}:${GCC_LIB}"; \
- echo "unset LD_LIBRARY_PATH_32"; \
- echo "unset LD_LIBRARY_PATH_64"; \
echo "CLASSPATH=$${CLASSPATH:+$$CLASSPATH:}.:\$${JAVA_HOME}/jre/lib/rt.jar:\$${JAVA_HOME}/jre/lib/i18n.jar"; \
} | sed s:$${JAVA_HOME:--------}:\$${JAVA_HOME}:g; \
echo "HOTSPOT_BUILD_USER=\"$${LOGNAME:-$$USER} in `basename $(GAMMADIR)`\""; \
echo "export JAVA_HOME LD_LIBRARY_PATH CLASSPATH HOTSPOT_BUILD_USER"; \
) > $@
-env.csh: env.ksh
+env.csh: env.sh
@echo Creating $@ ...
$(QUIETLY) ( \
$(BUILDTREE_COMMENT); \
@@ -384,23 +381,86 @@
JAVA_FLAG/64 = -d64
WRONG_DATA_MODE_MSG = \
- echo "JAVA_HOME must point to $(DATA_MODE)bit JDK."
+ echo "JAVA_HOME must point to a $(DATA_MODE)-bit OpenJDK."
+
+CROSS_COMPILING_MSG = \
+ echo "Cross compiling for ARCH $(CROSS_COMPILE_ARCH), skipping gamma run."
test_gamma: $(BUILDTREE_MAKE) $(GAMMADIR)/make/test/Queens.java
@echo Creating $@ ...
$(QUIETLY) ( \
- echo '#!/bin/ksh'; \
+ echo "#!/bin/sh"; \
+ echo ""; \
$(BUILDTREE_COMMENT); \
- echo '. ./env.ksh'; \
- echo "if [ -z \$$JAVA_HOME ]; then { $(NO_JAVA_HOME_MSG); exit 0; }; fi"; \
- echo "if ! \$${JAVA_HOME}/bin/java $(JAVA_FLAG) -fullversion 2>&1 > /dev/null"; \
- echo "then"; \
- echo " $(WRONG_DATA_MODE_MSG); exit 0;"; \
+ echo ""; \
+ echo "# Include environment settings for gamma run"; \
+ echo ""; \
+ echo ". ./env.sh"; \
+ echo ""; \
+ echo "# Do not run gamma test for cross compiles"; \
+ echo ""; \
+ echo "if [ -n \"$(CROSS_COMPILE_ARCH)\" ]; then "; \
+ echo " $(CROSS_COMPILING_MSG)"; \
+ echo " exit 0"; \
+ echo "fi"; \
+ echo ""; \
+ echo "# Make sure JAVA_HOME is set as it is required for gamma"; \
+ echo ""; \
+ echo "if [ -z \"\$${JAVA_HOME}\" ]; then "; \
+ echo " $(NO_JAVA_HOME_MSG)"; \
+ echo " exit 0"; \
+ echo "fi"; \
+ echo ""; \
+ echo "# Check JAVA_HOME version to be used for the test"; \
+ echo ""; \
+ echo "\$${JAVA_HOME}/bin/java $(JAVA_FLAG) -fullversion > /dev/null 2>&1"; \
+ echo "if [ \$$? -ne 0 ]; then "; \
+ echo " $(WRONG_DATA_MODE_MSG)"; \
+ echo " exit 0"; \
echo "fi"; \
+ echo ""; \
+ echo "# Use gamma_g if it exists"; \
+ echo ""; \
+ echo "GAMMA_PROG=gamma"; \
+ echo "if [ -f gamma_g ]; then "; \
+ echo " GAMMA_PROG=gamma_g"; \
+ echo "fi"; \
+ echo ""; \
+ echo "if [ \"$(OS_VENDOR)\" = \"Darwin\" ]; then "; \
+ echo " # Ensure architecture for gamma and JAVA_HOME is the same."; \
+ echo " # NOTE: gamma assumes the OpenJDK directory layout."; \
+ echo ""; \
+ echo " GAMMA_ARCH=\"\`file \$${GAMMA_PROG} | awk '{print \$$NF}'\`\""; \
+ echo " JVM_LIB=\"\$${JAVA_HOME}/jre/lib/libjava.$(LIBRARY_SUFFIX)\""; \
+ echo " if [ ! -f \$${JVM_LIB} ]; then"; \
+ echo " JVM_LIB=\"\$${JAVA_HOME}/jre/lib/$${LIBARCH}/libjava.$(LIBRARY_SUFFIX)\""; \
+ echo " fi"; \
+ echo " if [ ! -f \$${JVM_LIB} ] || [ -z \"\`file \$${JVM_LIB} | grep \$${GAMMA_ARCH}\`\" ]; then "; \
+ echo " $(WRONG_DATA_MODE_MSG)"; \
+ echo " exit 0"; \
+ echo " fi"; \
+ echo "fi"; \
+ echo ""; \
+ echo "# Compile Queens program for test"; \
+ echo ""; \
echo "rm -f Queens.class"; \
echo "\$${JAVA_HOME}/bin/javac -d . $(GAMMADIR)/make/test/Queens.java"; \
- echo '[ -f gamma_g ] && { gamma=gamma_g; }'; \
- echo './$${gamma:-gamma} $(TESTFLAGS) Queens < /dev/null'; \
+ echo ""; \
+ echo "# Set library path solely for gamma launcher test run"; \
+ echo ""; \
+ echo "LD_LIBRARY_PATH=.:$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}\$${JAVA_HOME}/jre/lib/${LIBARCH}/native_threads:\$${JAVA_HOME}/jre/lib/${LIBARCH}:${GCC_LIB}"; \
+ echo "export LD_LIBRARY_PATH"; \
+ echo "unset LD_LIBRARY_PATH_32"; \
+ echo "unset LD_LIBRARY_PATH_64"; \
+ echo ""; \
+ echo "if [ \"$(OS_VENDOR)\" = \"Darwin\" ]; then "; \
+ echo " DYLD_LIBRARY_PATH=.:$${DYLD_LIBRARY_PATH:+$$DYLD_LIBRARY_PATH:}\$${JAVA_HOME}/jre/lib/native_threads:\$${JAVA_HOME}/jre/lib:$${DYLD_LIBRARY_PATH:+$$DYLD_LIBRARY_PATH:}\$${JAVA_HOME}/jre/lib/${LIBARCH}/native_threads:\$${JAVA_HOME}/jre/lib/${LIBARCH}:${GCC_LIB}"; \
+ echo " export DYLD_LIBRARY_PATH"; \
+ echo "fi"; \
+ echo ""; \
+ echo "# Use the gamma launcher and JAVA_HOME to run the test"; \
+ echo ""; \
+ echo "./\$${GAMMA_PROG} $(TESTFLAGS) Queens < /dev/null"; \
) > $@
$(QUIETLY) chmod +x $@
--- a/hotspot/src/os/bsd/vm/os_bsd.cpp Tue Jan 24 20:15:56 2012 -0800
+++ b/hotspot/src/os/bsd/vm/os_bsd.cpp Wed Jan 25 01:16:03 2012 -0800
@@ -301,6 +301,12 @@
#error Add appropriate cpu_arch setting
#endif
+// Compiler variant
+#ifdef COMPILER2
+#define COMPILER_VARIANT "server"
+#else
+#define COMPILER_VARIANT "client"
+#endif
#ifndef _ALLBSD_SOURCE
// pid_t gettid()
@@ -2507,7 +2513,7 @@
static char saved_jvm_path[MAXPATHLEN] = {0};
-// Find the full path to the current module, libjvm.so or libjvm_g.so
+// Find the full path to the current module, libjvm or libjvm_g
void os::jvm_path(char *buf, jint buflen) {
// Error checking.
if (buflen < MAXPATHLEN) {
@@ -2532,11 +2538,11 @@
if (Arguments::created_by_gamma_launcher()) {
// Support for the gamma launcher. Typical value for buf is
- // "<JAVA_HOME>/jre/lib/<arch>/<vmtype>/libjvm.so". If "/jre/lib/" appears at
+ // "<JAVA_HOME>/jre/lib/<arch>/<vmtype>/libjvm". If "/jre/lib/" appears at
// the right place in the string, then assume we are installed in a JDK and
- // we're done. Otherwise, check for a JAVA_HOME environment variable and fix
- // up the path so it looks like libjvm.so is installed there (append a
- // fake suffix hotspot/libjvm.so).
+ // we're done. Otherwise, check for a JAVA_HOME environment variable and
+ // construct a path to the JVM being overridden.
+
const char *p = buf + strlen(buf) - 1;
for (int count = 0; p > buf && count < 5; ++count) {
for (--p; p > buf && *p != '/'; --p)
@@ -2550,7 +2556,7 @@
char* jrelib_p;
int len;
- // Check the current module name "libjvm.so" or "libjvm_g.so".
+ // Check the current module name "libjvm" or "libjvm_g".
p = strrchr(buf, '/');
assert(strstr(p, "/libjvm") == p, "invalid library name");
p = strstr(p, "_g") ? "_g" : "";
@@ -2563,19 +2569,32 @@
// modules image doesn't have "jre" subdirectory
len = strlen(buf);
jrelib_p = buf + len;
- snprintf(jrelib_p, buflen-len, "/jre/lib/%s", cpu_arch);
+
+ // Add the appropriate library subdir
+ snprintf(jrelib_p, buflen-len, "/jre/lib");
if (0 != access(buf, F_OK)) {
- snprintf(jrelib_p, buflen-len, "/lib/%s", cpu_arch);
+ snprintf(jrelib_p, buflen-len, "/lib");
}
+ // Add the appropriate client or server subdir
+ len = strlen(buf);
+ jrelib_p = buf + len;
+ snprintf(jrelib_p, buflen-len, "/%s", COMPILER_VARIANT);
+ if (0 != access(buf, F_OK)) {
+ snprintf(jrelib_p, buflen-len, "");
+ }
+
+ // If the path exists within JAVA_HOME, add the JVM library name
+ // to complete the path to JVM being overridden. Otherwise fallback
+ // to the path to the current library.
if (0 == access(buf, F_OK)) {
- // Use current module name "libjvm[_g].so" instead of
- // "libjvm"debug_only("_g")".so" since for fastdebug version
- // we should have "libjvm.so" but debug_only("_g") adds "_g"!
+ // Use current module name "libjvm[_g]" instead of
+ // "libjvm"debug_only("_g")"" since for fastdebug version
+ // we should have "libjvm" but debug_only("_g") adds "_g"!
len = strlen(buf);
- snprintf(buf + len, buflen-len, "/hotspot/libjvm%s.so", p);
+ snprintf(buf + len, buflen-len, "/libjvm%s%s", p, JNI_LIB_SUFFIX);
} else {
- // Go back to path of .so
+ // Fall back to path of current library
rp = realpath(dli_fname, buf);
if (rp == NULL)
return;
--- a/hotspot/src/os/posix/launcher/java_md.c Tue Jan 24 20:15:56 2012 -0800
+++ b/hotspot/src/os/posix/launcher/java_md.c Wed Jan 25 01:16:03 2012 -0800
@@ -701,6 +701,14 @@
char libjava[MAXPATHLEN];
if (GetApplicationHome(path, pathsize)) {
+
+ /* Is the JRE universal, i.e. no arch dir? */
+ sprintf(libjava, "%s/jre/lib/" JAVA_DLL, path);
+ if (access(libjava, F_OK) == 0) {
+ strcat(path, "/jre");
+ goto found;
+ }
+
/* Is JRE co-located with the application? */
sprintf(libjava, "%s/lib/%s/" JAVA_DLL, path, arch);
if (access(libjava, F_OK) == 0) {
@@ -734,7 +742,7 @@
ifn->GetDefaultJavaVMInitArgs = JNI_GetDefaultJavaVMInitArgs;
return JNI_TRUE;
#else
- Dl_info dlinfo;
+ Dl_info dlinfo;
void *libjvm;
if (_launcher_debug) {