Merge
This commit is contained in:
commit
99b0a598c8
@ -151,3 +151,4 @@ cc771d92284f71765eca14d6d08703c4af254c04 jdk8-b21
|
||||
1533dfab9903e4edcfead3b0192643f38c418b9b jdk8-b27
|
||||
6e2541d60f4e342b5b67140271d7611643929dc3 jdk8-b28
|
||||
41460de042580bc4a4ce3f863779c66f39cb8578 jdk8-b29
|
||||
6cea54809b51db92979c22fd8aa8fcb1cb13d12e jdk8-b30
|
||||
|
@ -229,3 +229,6 @@ f92a171cf0071ca6c3fa8231d7d570377f8b2f4d hs23-b16
|
||||
b183b0863611b85dbac16f3b08b40ba978756d19 jdk8-b28
|
||||
030b5306d60f140e822e4a6d301744cb110ff0c8 hs24-b02
|
||||
b45b5c564098c58ea69e7cff3f7d341f0254dd1d jdk8-b29
|
||||
d61761bf305031c94f7f8eca49abd978b7d3c5da jdk8-b30
|
||||
dfae0140457cfb2c381d7679735fbedbae862c62 hs24-b03
|
||||
f4767e53d6e0d5da7e3f1775904076cce54247c1 hs24-b04
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -217,8 +217,8 @@ abstract class ConnectorImpl implements Connector {
|
||||
}
|
||||
|
||||
protected void checkNativeLink(SecurityManager sm, String os) {
|
||||
if (os.equals("SunOS") || os.equals("Linux")) {
|
||||
// link "saproc" - SA native library on SunOS and Linux?
|
||||
if (os.equals("SunOS") || os.equals("Linux") || os.contains("OS X")) {
|
||||
// link "saproc" - SA native library on SunOS, Linux, and Mac OS X
|
||||
sm.checkLink("saproc");
|
||||
} else if (os.startsWith("Windows")) {
|
||||
// link "sawindbg" - SA native library on Windows.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -43,7 +43,7 @@ public class PlatformInfo {
|
||||
return "bsd";
|
||||
} else if (os.equals("OpenBSD")) {
|
||||
return "bsd";
|
||||
} else if (os.equals("Darwin") || os.startsWith("Mac OS X")) {
|
||||
} else if (os.equals("Darwin") || os.contains("OS X")) {
|
||||
return "bsd";
|
||||
} else if (os.startsWith("Windows")) {
|
||||
return "win32";
|
||||
@ -52,17 +52,17 @@ public class PlatformInfo {
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns "sparc" if on SPARC, "x86" if on x86. */
|
||||
/* Returns "sparc" for SPARC based platforms and "x86" for x86 based
|
||||
platforms. Otherwise returns the value of os.arch. If the value
|
||||
is not recognized as supported, an exception is thrown instead. */
|
||||
public static String getCPU() throws UnsupportedPlatformException {
|
||||
String cpu = System.getProperty("os.arch");
|
||||
if (cpu.equals("i386")) {
|
||||
if (cpu.equals("i386") || cpu.equals("x86")) {
|
||||
return "x86";
|
||||
} else if (cpu.equals("sparc") || cpu.equals("x86") || cpu.equals("ia64")) {
|
||||
return cpu;
|
||||
} else if (cpu.equals("sparcv9")) {
|
||||
} else if (cpu.equals("sparc") || cpu.equals("sparcv9")) {
|
||||
return "sparc";
|
||||
} else if (cpu.equals("x86_64") || cpu.equals("amd64")) {
|
||||
return "amd64";
|
||||
} else if (cpu.equals("ia64") || cpu.equals("amd64") || cpu.equals("x86_64")) {
|
||||
return cpu;
|
||||
} else {
|
||||
throw new UnsupportedPlatformException("CPU type " + cpu + " not yet supported");
|
||||
}
|
||||
|
@ -378,6 +378,9 @@ endif
|
||||
$(EXPORT_LIB_DIR)/%.jar: $(GEN_DIR)/%.jar
|
||||
$(install-file)
|
||||
|
||||
$(EXPORT_JRE_LIB_DIR)/%.jar: $(GEN_DIR)/%.jar
|
||||
$(install-file)
|
||||
|
||||
# Include files (jvmti.h, jvmticmlr.h, jni.h, $(JDK_INCLUDE_SUBDIR)/jni_md.h, jmm.h, jfr.h)
|
||||
$(EXPORT_INCLUDE_DIR)/%: $(GEN_DIR)/jvmtifiles/%
|
||||
$(install-file)
|
||||
|
@ -144,6 +144,8 @@ 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
|
||||
|
||||
EXPORT_LIST += $(EXPORT_JRE_LIB_DIR)/wb.jar
|
||||
|
||||
ifndef BUILD_CLIENT_ONLY
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.$(LIBRARY_SUFFIX)
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -335,6 +335,9 @@ include $(MAKEFILES_DIR)/jsig.make
|
||||
# Serviceability agent
|
||||
include $(MAKEFILES_DIR)/saproc.make
|
||||
|
||||
# Whitebox testing API
|
||||
include $(MAKEFILES_DIR)/wb.make
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
ifeq ($(OS_VENDOR), Darwin)
|
||||
@ -342,10 +345,10 @@ $(LIBJVM).dSYM: $(LIBJVM)
|
||||
dsymutil $(LIBJVM)
|
||||
|
||||
# no libjvm_db for macosx
|
||||
build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(BUILDLIBSAPROC) dtraceCheck $(LIBJVM).dSYM
|
||||
build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(BUILDLIBSAPROC) dtraceCheck $(LIBJVM).dSYM $(WB_JAR)
|
||||
echo "Doing vm.make build:"
|
||||
else
|
||||
build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(BUILDLIBSAPROC)
|
||||
build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(BUILDLIBSAPROC) $(WB_JAR)
|
||||
endif
|
||||
|
||||
install: install_jvm install_jsig install_saproc
|
||||
|
46
hotspot/make/bsd/makefiles/wb.make
Normal file
46
hotspot/make/bsd/makefiles/wb.make
Normal file
@ -0,0 +1,46 @@
|
||||
#
|
||||
# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation.
|
||||
#
|
||||
# This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
#
|
||||
|
||||
# Rules to build whitebox testing library, used by vm.make
|
||||
WB = wb
|
||||
|
||||
WBSRCDIR = $(GAMMADIR)/src/share/tools/whitebox
|
||||
|
||||
WB_JAR = $(GENERATED)/$(WB).jar
|
||||
|
||||
WB_JAVA_SRCS = $(shell find $(WBSRCDIR) -name '*.java')
|
||||
WB_JAVA_CLASSDIR = $(GENERATED)/wb/classes
|
||||
|
||||
WB_JAVA_CLASSES = $(patsubst $(WBSRCDIR)/%,$(WB_JAVA_CLASSDIR)/%, \
|
||||
$(patsubst %.java,%.class,$(WB_JAVA_SRCS)))
|
||||
|
||||
$(WB_JAVA_CLASSDIR)/%.class: $(WBSRCDIR)/%.java $(WB_JAVA_CLASSDIR)
|
||||
$(REMOTE) $(COMPILE.JAVAC) -nowarn -d $(WB_JAVA_CLASSDIR) $<
|
||||
|
||||
$(WB_JAR): $(WB_JAVA_CLASSES)
|
||||
$(QUIETLY) $(REMOTE) $(RUN.JAR) cf $@ -C $(WB_JAVA_CLASSDIR)/ .
|
||||
|
||||
$(WB_JAVA_CLASSDIR):
|
||||
$(QUIETLY) mkdir -p $@
|
||||
|
@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2011
|
||||
|
||||
HS_MAJOR_VER=24
|
||||
HS_MINOR_VER=0
|
||||
HS_BUILD_NUMBER=02
|
||||
HS_BUILD_NUMBER=04
|
||||
|
||||
JDK_MAJOR_VER=1
|
||||
JDK_MINOR_VER=8
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -54,58 +54,72 @@ jprt.sync.push=false
|
||||
# Define the Solaris platforms we want for the various releases
|
||||
jprt.my.solaris.sparc.jdk8=solaris_sparc_5.10
|
||||
jprt.my.solaris.sparc.jdk7=solaris_sparc_5.10
|
||||
jprt.my.solaris.sparc.jdk7u4=${jprt.my.solaris.sparc.jdk7}
|
||||
jprt.my.solaris.sparc=${jprt.my.solaris.sparc.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.solaris.sparcv9.jdk8=solaris_sparcv9_5.10
|
||||
jprt.my.solaris.sparcv9.jdk7=solaris_sparcv9_5.10
|
||||
jprt.my.solaris.sparcv9.jdk7u4=${jprt.my.solaris.sparcv9.jdk7}
|
||||
jprt.my.solaris.sparcv9=${jprt.my.solaris.sparcv9.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.solaris.i586.jdk8=solaris_i586_5.10
|
||||
jprt.my.solaris.i586.jdk7=solaris_i586_5.10
|
||||
jprt.my.solaris.i586.jdk7u4=${jprt.my.solaris.i586.jdk7}
|
||||
jprt.my.solaris.i586=${jprt.my.solaris.i586.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.solaris.x64.jdk8=solaris_x64_5.10
|
||||
jprt.my.solaris.x64.jdk7=solaris_x64_5.10
|
||||
jprt.my.solaris.x64.jdk7u4=${jprt.my.solaris.x64.jdk7}
|
||||
jprt.my.solaris.x64=${jprt.my.solaris.x64.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.linux.i586.jdk8=linux_i586_2.6
|
||||
jprt.my.linux.i586.jdk7=linux_i586_2.6
|
||||
jprt.my.linux.i586.jdk7u4=${jprt.my.linux.i586.jdk7}
|
||||
jprt.my.linux.i586=${jprt.my.linux.i586.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.linux.x64.jdk8=linux_x64_2.6
|
||||
jprt.my.linux.x64.jdk7=linux_x64_2.6
|
||||
jprt.my.linux.x64.jdk7u4=${jprt.my.linux.x64.jdk7}
|
||||
jprt.my.linux.x64=${jprt.my.linux.x64.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.linux.ppc.jdk8=linux_ppc_2.6
|
||||
jprt.my.linux.ppc.jdk7=linux_ppc_2.6
|
||||
jprt.my.linux.ppc.jdk7u4=${jprt.my.linux.ppc.jdk7}
|
||||
jprt.my.linux.ppc=${jprt.my.linux.ppc.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.linux.ppcv2.jdk8=linux_ppcv2_2.6
|
||||
jprt.my.linux.ppcv2.jdk7=linux_ppcv2_2.6
|
||||
jprt.my.linux.ppcv2.jdk7u4=${jprt.my.linux.ppcv2.jdk7}
|
||||
jprt.my.linux.ppcv2=${jprt.my.linux.ppcv2.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.linux.ppcsflt.jdk8=linux_ppcsflt_2.6
|
||||
jprt.my.linux.ppcsflt.jdk7=linux_ppcsflt_2.6
|
||||
jprt.my.linux.ppcsflt.jdk7u4=${jprt.my.linux.ppcsflt.jdk7}
|
||||
jprt.my.linux.ppcsflt=${jprt.my.linux.ppcsflt.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.linux.armvfp.jdk8=linux_armvfp_2.6
|
||||
jprt.my.linux.armvfp.jdk7=linux_armvfp_2.6
|
||||
jprt.my.linux.armvfp.jdk7u4=${jprt.my.linux.armvfp.jdk7}
|
||||
jprt.my.linux.armvfp=${jprt.my.linux.armvfp.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.linux.armsflt.jdk8=linux_armsflt_2.6
|
||||
jprt.my.linux.armsflt.jdk7=linux_armsflt_2.6
|
||||
jprt.my.linux.armsflt.jdk7u4=${jprt.my.linux.armsflt.jdk7}
|
||||
jprt.my.linux.armsflt=${jprt.my.linux.armsflt.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.macosx.x64.jdk8=macosx_x64_10.7
|
||||
jprt.my.macosx.x64.jdk7=macosx_x64_10.7
|
||||
jprt.my.macosx.x64.jdk7u4=${jprt.my.macosx.x64.jdk7}
|
||||
jprt.my.macosx.x64=${jprt.my.macosx.x64.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.windows.i586.jdk8=windows_i586_5.1
|
||||
jprt.my.windows.i586.jdk7=windows_i586_5.1
|
||||
jprt.my.windows.i586.jdk7u4=${jprt.my.windows.i586.jdk7}
|
||||
jprt.my.windows.i586=${jprt.my.windows.i586.${jprt.tools.default.release}}
|
||||
|
||||
jprt.my.windows.x64.jdk8=windows_x64_5.2
|
||||
jprt.my.windows.x64.jdk7=windows_x64_5.2
|
||||
jprt.my.windows.x64.jdk7u4=${jprt.my.windows.x64.jdk7}
|
||||
jprt.my.windows.x64=${jprt.my.windows.x64.${jprt.tools.default.release}}
|
||||
|
||||
# Standard list of jprt build targets for this source tree
|
||||
@ -139,16 +153,7 @@ jprt.build.targets.all=${jprt.build.targets.standard}, \
|
||||
|
||||
jprt.build.targets.jdk8=${jprt.build.targets.all}
|
||||
jprt.build.targets.jdk7=${jprt.build.targets.all}
|
||||
jprt.build.targets.jdk7temp=${jprt.build.targets.all}
|
||||
jprt.build.targets.jdk7b107=${jprt.build.targets.all}
|
||||
jprt.build.targets.jdk6=${jprt.build.targets.standard}
|
||||
jprt.build.targets.jdk6perf=${jprt.build.targets.standard}
|
||||
jprt.build.targets.jdk6u10=${jprt.build.targets.standard}
|
||||
jprt.build.targets.jdk6u14=${jprt.build.targets.standard}
|
||||
jprt.build.targets.jdk6u18=${jprt.build.targets.standard}
|
||||
jprt.build.targets.jdk6u20=${jprt.build.targets.standard}
|
||||
jprt.build.targets.ejdk6=${jprt.build.targets.all}
|
||||
jprt.build.targets.ejdk7=${jprt.build.targets.all}
|
||||
jprt.build.targets.jdk7u4=${jprt.build.targets.all}
|
||||
jprt.build.targets=${jprt.build.targets.${jprt.tools.default.release}}
|
||||
|
||||
# Subset lists of test targets for this source tree
|
||||
@ -474,11 +479,26 @@ jprt.make.rule.test.targets.standard.internalvmtests = \
|
||||
${jprt.my.macosx.x64}-fastdebug-c2-internalvmtests, \
|
||||
${jprt.my.windows.i586}-fastdebug-c2-internalvmtests, \
|
||||
${jprt.my.windows.x64}-fastdebug-c2-internalvmtests
|
||||
|
||||
|
||||
jprt.make.rule.test.targets.standard.wbapi = \
|
||||
${jprt.my.solaris.sparc}-{product|fastdebug}-c2-wbapitest, \
|
||||
${jprt.my.solaris.sparcv9}-{product|fastdebug}-c2-wbapitest, \
|
||||
${jprt.my.solaris.i586}-{product|fastdebug}-c2-wbapitest, \
|
||||
${jprt.my.solaris.x64}-{product|fastdebug}-c2-wbapitest, \
|
||||
${jprt.my.linux.i586}-{product|fastdebug}-c2-wbapitest, \
|
||||
${jprt.my.linux.x64}-{product|fastdebug}-c2-wbapitest, \
|
||||
${jprt.my.windows.i586}-{product|fastdebug}-c2-wbapitest, \
|
||||
${jprt.my.windows.x64}-{product|fastdebug}-c2-wbapitest, \
|
||||
${jprt.my.solaris.sparc}-{product|fastdebug}-c1-wbapitest, \
|
||||
${jprt.my.solaris.i586}-{product|fastdebug}-c1-wbapitest, \
|
||||
${jprt.my.linux.i586}-{product|fastdebug}-c1-wbapitest, \
|
||||
${jprt.my.windows.i586}-{product|fastdebug}-c1-wbapitest
|
||||
|
||||
jprt.make.rule.test.targets.standard = \
|
||||
${jprt.make.rule.test.targets.standard.client}, \
|
||||
${jprt.make.rule.test.targets.standard.server}, \
|
||||
${jprt.make.rule.test.targets.standard.internalvmtests}
|
||||
${jprt.make.rule.test.targets.standard.internalvmtests}, \
|
||||
${jprt.make.rule.test.targets.standard.wbapi}
|
||||
|
||||
jprt.make.rule.test.targets.embedded = \
|
||||
${jprt.make.rule.test.targets.standard.client}
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -193,6 +193,8 @@ endif
|
||||
EXPORT_SERVER_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/server
|
||||
EXPORT_CLIENT_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/client
|
||||
|
||||
EXPORT_LIST += $(EXPORT_JRE_LIB_DIR)/wb.jar
|
||||
|
||||
ifndef BUILD_CLIENT_ONLY
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt
|
||||
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.$(LIBRARY_SUFFIX)
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -368,9 +368,12 @@ include $(MAKEFILES_DIR)/jsig.make
|
||||
# Serviceability agent
|
||||
include $(MAKEFILES_DIR)/saproc.make
|
||||
|
||||
# Whitebox testing API
|
||||
include $(MAKEFILES_DIR)/wb.make
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(BUILDLIBSAPROC)
|
||||
build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(BUILDLIBSAPROC) $(WB_JAR)
|
||||
|
||||
install: install_jvm install_jsig install_saproc
|
||||
|
||||
|
46
hotspot/make/linux/makefiles/wb.make
Normal file
46
hotspot/make/linux/makefiles/wb.make
Normal file
@ -0,0 +1,46 @@
|
||||
#
|
||||
# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation.
|
||||
#
|
||||
# This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
#
|
||||
|
||||
# Rules to build whitebox testing library, used by vm.make
|
||||
WB = wb
|
||||
|
||||
WBSRCDIR = $(GAMMADIR)/src/share/tools/whitebox
|
||||
|
||||
WB_JAR = $(GENERATED)/$(WB).jar
|
||||
|
||||
WB_JAVA_SRCS = $(shell find $(WBSRCDIR) -name '*.java')
|
||||
WB_JAVA_CLASSDIR = $(GENERATED)/wb/classes
|
||||
|
||||
WB_JAVA_CLASSES = $(patsubst $(WBSRCDIR)/%,$(WB_JAVA_CLASSDIR)/%, \
|
||||
$(patsubst %.java,%.class,$(WB_JAVA_SRCS)))
|
||||
|
||||
$(WB_JAVA_CLASSDIR)/%.class: $(WBSRCDIR)/%.java $(WB_JAVA_CLASSDIR)
|
||||
$(REMOTE) $(COMPILE.JAVAC) -nowarn -d $(WB_JAVA_CLASSDIR) $<
|
||||
|
||||
$(WB_JAR): $(WB_JAVA_CLASSES)
|
||||
$(QUIETLY) $(REMOTE) $(RUN.JAR) cf $@ -C $(WB_JAVA_CLASSDIR)/ .
|
||||
|
||||
$(WB_JAVA_CLASSDIR):
|
||||
$(QUIETLY) mkdir -p $@
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2006, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -148,6 +148,8 @@ ifneq ($(OBJCOPY),)
|
||||
EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.debuginfo
|
||||
endif
|
||||
|
||||
EXPORT_LIST += $(EXPORT_JRE_LIB_DIR)/wb.jar
|
||||
|
||||
EXPORT_SERVER_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/server
|
||||
EXPORT_CLIENT_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/client
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -321,9 +321,12 @@ include $(MAKEFILES_DIR)/jsig.make
|
||||
# Serviceability agent
|
||||
include $(MAKEFILES_DIR)/saproc.make
|
||||
|
||||
# Whitebox testing API
|
||||
include $(MAKEFILES_DIR)/wb.make
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(LIBJVM_DTRACE) $(BUILDLIBSAPROC) dtraceCheck
|
||||
build: $(LIBJVM) $(LAUNCHER) $(LIBJSIG) $(LIBJVM_DB) $(LIBJVM_DTRACE) $(BUILDLIBSAPROC) dtraceCheck $(WB_JAR)
|
||||
|
||||
install: install_jvm install_jsig install_saproc
|
||||
|
||||
|
46
hotspot/make/solaris/makefiles/wb.make
Normal file
46
hotspot/make/solaris/makefiles/wb.make
Normal file
@ -0,0 +1,46 @@
|
||||
#
|
||||
# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation.
|
||||
#
|
||||
# This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
|
||||
# Rules to build whitebox testing library, used by vm.make
|
||||
|
||||
WB = wb
|
||||
|
||||
WBSRCDIR = $(GAMMADIR)/src/share/tools/whitebox
|
||||
|
||||
WB_JAR = $(GENERATED)/$(WB).jar
|
||||
|
||||
WB_JAVA_SRCS = $(shell find $(WBSRCDIR) -name '*.java')
|
||||
WB_JAVA_CLASSDIR = $(GENERATED)/wb/classes
|
||||
|
||||
WB_JAVA_CLASSES = $(patsubst $(WBSRCDIR)/%,$(WB_JAVA_CLASSDIR)/%, \
|
||||
$(patsubst %.java,%.class,$(WB_JAVA_SRCS)))
|
||||
|
||||
$(WB_JAVA_CLASSDIR)/%.class: $(WBSRCDIR)/%.java $(WB_JAVA_CLASSDIR)
|
||||
$(REMOTE) $(COMPILE.JAVAC) -nowarn -d $(WB_JAVA_CLASSDIR) $<
|
||||
|
||||
$(WB_JAR): $(WB_JAVA_CLASSES)
|
||||
$(QUIETLY) $(REMOTE) $(RUN.JAR) cf $@ -C $(WB_JAVA_CLASSDIR)/ .
|
||||
|
||||
$(WB_JAVA_CLASSDIR):
|
||||
$(QUIETLY) mkdir -p $@
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -33,7 +33,7 @@ GENERATED=../generated
|
||||
BUILD_PCH_FILE=_build_pch_file.obj
|
||||
!endif
|
||||
|
||||
default:: $(BUILD_PCH_FILE) $(AOUT) launcher checkAndBuildSA
|
||||
default:: $(BUILD_PCH_FILE) $(AOUT) launcher checkAndBuildSA wb
|
||||
|
||||
!include ../local.make
|
||||
!include compile.make
|
||||
@ -65,3 +65,4 @@ $(AOUT): $(Res_Files) $(Obj_Files) vm.def
|
||||
!include $(WorkSpace)/make/windows/makefiles/shared.make
|
||||
!include $(WorkSpace)/make/windows/makefiles/sa.make
|
||||
!include $(WorkSpace)/make/windows/makefiles/launcher.make
|
||||
!include $(WorkSpace)/make/windows/makefiles/wb.make
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -194,6 +194,8 @@ ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
EXPORT_LIST += $(EXPORT_KERNEL_DIR)/jvm.map
|
||||
endif
|
||||
|
||||
EXPORT_LIST += $(EXPORT_JRE_LIB_DIR)/wb.jar
|
||||
|
||||
ifeq ($(BUILD_WIN_SA), 1)
|
||||
EXPORT_LIST += $(EXPORT_JRE_BIN_DIR)/sawindbg.$(LIBRARY_SUFFIX)
|
||||
EXPORT_LIST += $(EXPORT_JRE_BIN_DIR)/sawindbg.pdb
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -33,7 +33,7 @@ GENERATED=../generated
|
||||
BUILD_PCH_FILE=_build_pch_file.obj
|
||||
!endif
|
||||
|
||||
default:: $(BUILD_PCH_FILE) $(AOUT) launcher checkAndBuildSA
|
||||
default:: $(BUILD_PCH_FILE) $(AOUT) launcher checkAndBuildSA wb
|
||||
|
||||
!include ../local.make
|
||||
!include compile.make
|
||||
@ -65,3 +65,4 @@ $(AOUT): $(Res_Files) $(Obj_Files) vm.def
|
||||
!include $(WorkSpace)/make/windows/makefiles/shared.make
|
||||
!include $(WorkSpace)/make/windows/makefiles/sa.make
|
||||
!include $(WorkSpace)/make/windows/makefiles/launcher.make
|
||||
!include $(WorkSpace)/make/windows/makefiles/wb.make
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -32,7 +32,7 @@ GENERATED=../generated
|
||||
BUILD_PCH_FILE=_build_pch_file.obj
|
||||
!endif
|
||||
|
||||
default:: $(BUILD_PCH_FILE) $(AOUT) launcher checkAndBuildSA
|
||||
default:: $(BUILD_PCH_FILE) $(AOUT) launcher checkAndBuildSA wb
|
||||
|
||||
!include ../local.make
|
||||
!include compile.make
|
||||
@ -76,3 +76,4 @@ $(AOUT): $(Res_Files) $(Obj_Files) vm.def
|
||||
!include $(WorkSpace)/make/windows/makefiles/shared.make
|
||||
!include $(WorkSpace)/make/windows/makefiles/sa.make
|
||||
!include $(WorkSpace)/make/windows/makefiles/launcher.make
|
||||
!include $(WorkSpace)/make/windows/makefiles/wb.make
|
||||
|
54
hotspot/make/windows/makefiles/wb.make
Normal file
54
hotspot/make/windows/makefiles/wb.make
Normal file
@ -0,0 +1,54 @@
|
||||
#
|
||||
# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License version 2 only, as
|
||||
# published by the Free Software Foundation.
|
||||
#
|
||||
# This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
# version 2 for more details (a copy is included in the LICENSE file that
|
||||
# accompanied this code).
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License version
|
||||
# 2 along with this work; if not, write to the Free Software Foundation,
|
||||
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
# or visit www.oracle.com if you need additional information or have any
|
||||
# questions.
|
||||
#
|
||||
#
|
||||
|
||||
# This makefile is used to build the whitebox testing lib
|
||||
# and compile the tests which use it
|
||||
|
||||
!include $(WorkSpace)/make/windows/makefiles/rules.make
|
||||
|
||||
WBSRCDIR = $(WorkSpace)/src/share/tools/whitebox
|
||||
|
||||
# turn GENERATED into a windows path to get sane dependencies
|
||||
WB_CLASSES=$(GENERATED:/=\)\wb\classes
|
||||
WB_JAR=$(GENERATED:/=\)\wb.jar
|
||||
|
||||
# call recursive make to do wildcard expansion
|
||||
.SUFFIXES : .java .class
|
||||
wb_java_srcs: $(WorkSpace)\src\share\tools\whitebox\sun\hotspot\*.java $(WB_CLASSES)
|
||||
$(MAKE) -f $(WorkSpace)\make\windows\makefiles\$(BUILD_FLAVOR).make $(**:.java=.class)
|
||||
|
||||
|
||||
{$(WorkSpace)\src\share\tools\whitebox\sun\hotspot}.java.class::
|
||||
$(COMPILE_JAVAC) -d $(WB_CLASSES) $<
|
||||
|
||||
$(WB_JAR): wb_java_srcs
|
||||
$(RUN_JAR) cf $@ -C $(WB_CLASSES) .
|
||||
|
||||
# turn $@ to a unix path because mkdir in PATH is cygwin/mks mkdir
|
||||
$(WB_CLASSES):
|
||||
mkdir -p $(@:\=/)
|
||||
|
||||
# main target to build wb
|
||||
wb: $(WB_JAR)
|
||||
|
@ -2221,7 +2221,7 @@ public:
|
||||
// traps as per trap.h (SPARC ABI?)
|
||||
|
||||
void breakpoint_trap();
|
||||
void breakpoint_trap(Condition c, CC cc = icc);
|
||||
void breakpoint_trap(Condition c, CC cc);
|
||||
void flush_windows_trap();
|
||||
void clean_windows_trap();
|
||||
void get_psr_trap();
|
||||
|
@ -1187,7 +1187,7 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(const Register
|
||||
|
||||
#ifdef ASSERT
|
||||
__ tst(O1);
|
||||
__ breakpoint_trap(Assembler::zero);
|
||||
__ breakpoint_trap(Assembler::zero, Assembler::ptr_cc);
|
||||
#endif // ASSERT
|
||||
|
||||
const int entry_size = frame::interpreter_frame_monitor_size() * wordSize;
|
||||
|
@ -3325,7 +3325,7 @@ static void gen_new_frame(MacroAssembler* masm, bool deopt) {
|
||||
// make sure that the frames are aligned properly
|
||||
#ifndef _LP64
|
||||
__ btst(wordSize*2-1, SP);
|
||||
__ breakpoint_trap(Assembler::notZero);
|
||||
__ breakpoint_trap(Assembler::notZero, Assembler::ptr_cc);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@ -3407,7 +3407,7 @@ static void make_new_frames(MacroAssembler* masm, bool deopt) {
|
||||
#ifdef ASSERT
|
||||
// make sure that there is at least one entry in the array
|
||||
__ tst(O4array_size);
|
||||
__ breakpoint_trap(Assembler::zero);
|
||||
__ breakpoint_trap(Assembler::zero, Assembler::icc);
|
||||
#endif
|
||||
|
||||
// Now push the new interpreter frames
|
||||
|
@ -1832,6 +1832,8 @@ const bool Matcher::match_rule_supported(int opcode) {
|
||||
case Op_CountLeadingZerosL:
|
||||
case Op_CountTrailingZerosI:
|
||||
case Op_CountTrailingZerosL:
|
||||
case Op_PopCountI:
|
||||
case Op_PopCountL:
|
||||
if (!UsePopCountInstruction)
|
||||
return false;
|
||||
break;
|
||||
|
@ -379,7 +379,7 @@ void InterpreterGenerator::lock_method(void) {
|
||||
|
||||
#ifdef ASSERT
|
||||
__ tst(O0);
|
||||
__ breakpoint_trap(Assembler::zero);
|
||||
__ breakpoint_trap(Assembler::zero, Assembler::ptr_cc);
|
||||
#endif // ASSERT
|
||||
|
||||
__ bind(done);
|
||||
@ -2050,7 +2050,7 @@ void TemplateInterpreterGenerator::stop_interpreter_at() {
|
||||
AddressLiteral stop_at(&StopInterpreterAt);
|
||||
__ load_ptr_contents(stop_at, G4_scratch);
|
||||
__ cmp(G3_scratch, G4_scratch);
|
||||
__ breakpoint_trap(Assembler::equal);
|
||||
__ breakpoint_trap(Assembler::equal, Assembler::icc);
|
||||
}
|
||||
#endif // not PRODUCT
|
||||
#endif // !CC_INTERP
|
||||
|
@ -1293,6 +1293,14 @@ const bool Matcher::match_rule_supported(int opcode) {
|
||||
if (!has_match_rule(opcode))
|
||||
return false;
|
||||
|
||||
switch (opcode) {
|
||||
case Op_PopCountI:
|
||||
case Op_PopCountL:
|
||||
if (!UsePopCountInstruction)
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
||||
return true; // Per default match rules are supported.
|
||||
}
|
||||
|
||||
|
@ -1714,6 +1714,14 @@ const bool Matcher::match_rule_supported(int opcode) {
|
||||
if (!has_match_rule(opcode))
|
||||
return false;
|
||||
|
||||
switch (opcode) {
|
||||
case Op_PopCountI:
|
||||
case Op_PopCountL:
|
||||
if (!UsePopCountInstruction)
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
||||
return true; // Per default match rules are supported.
|
||||
}
|
||||
|
||||
|
@ -2547,7 +2547,14 @@ void os::realign_memory(char *addr, size_t bytes, size_t alignment_hint) {
|
||||
}
|
||||
|
||||
void os::free_memory(char *addr, size_t bytes, size_t alignment_hint) {
|
||||
commit_memory(addr, bytes, alignment_hint, false);
|
||||
// This method works by doing an mmap over an existing mmaping and effectively discarding
|
||||
// the existing pages. However it won't work for SHM-based large pages that cannot be
|
||||
// uncommitted at all. We don't do anything in this case to avoid creating a segment with
|
||||
// small pages on top of the SHM segment. This method always works for small pages, so we
|
||||
// allow that in any case.
|
||||
if (alignment_hint <= (size_t)os::vm_page_size() || !UseSHM) {
|
||||
commit_memory(addr, bytes, alignment_hint, false);
|
||||
}
|
||||
}
|
||||
|
||||
void os::numa_make_global(char *addr, size_t bytes) {
|
||||
|
70
hotspot/src/share/tools/whitebox/sun/hotspot/WhiteBox.java
Normal file
70
hotspot/src/share/tools/whitebox/sun/hotspot/WhiteBox.java
Normal file
@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*
|
||||
*/
|
||||
|
||||
package sun.hotspot;
|
||||
import java.security.BasicPermission;
|
||||
|
||||
public class WhiteBox {
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public static class WhiteBoxPermission extends BasicPermission {
|
||||
public WhiteBoxPermission(String s) {
|
||||
super(s);
|
||||
}
|
||||
}
|
||||
|
||||
private WhiteBox() {}
|
||||
private static final WhiteBox instance = new WhiteBox();
|
||||
private static native void registerNatives();
|
||||
|
||||
/**
|
||||
* Returns the singleton WhiteBox instance.
|
||||
*
|
||||
* The returned WhiteBox object should be carefully guarded
|
||||
* by the caller, since it can be used to read and write data
|
||||
* at arbitrary memory addresses. It must never be passed to
|
||||
* untrusted code.
|
||||
*/
|
||||
public synchronized static WhiteBox getWhiteBox() {
|
||||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null) {
|
||||
sm.checkPermission(new WhiteBoxPermission("getInstance"));
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
static {
|
||||
registerNatives();
|
||||
}
|
||||
|
||||
// Memory
|
||||
public native long getObjectAddress(Object o);
|
||||
public native int getHeapOopSize();
|
||||
|
||||
// G1
|
||||
public native boolean g1InConcurrentMark();
|
||||
public native boolean g1IsHumongous(Object o);
|
||||
public native long g1NumFreeRegions();
|
||||
public native int g1RegionSize();
|
||||
}
|
@ -1306,6 +1306,7 @@ void GraphBuilder::table_switch() {
|
||||
if (sw.dest_offset_at(i) < 0) has_bb = true;
|
||||
}
|
||||
// add default successor
|
||||
if (sw.default_offset() < 0) has_bb = true;
|
||||
sux->at_put(i, block_at(bci() + sw.default_offset()));
|
||||
ValueStack* state_before = has_bb ? copy_state_before() : NULL;
|
||||
Instruction* res = append(new TableSwitch(ipop(), sux, sw.low_key(), state_before, has_bb));
|
||||
@ -1350,6 +1351,7 @@ void GraphBuilder::lookup_switch() {
|
||||
keys->at_put(i, pair.match());
|
||||
}
|
||||
// add default successor
|
||||
if (sw.default_offset() < 0) has_bb = true;
|
||||
sux->at_put(i, block_at(bci() + sw.default_offset()));
|
||||
ValueStack* state_before = has_bb ? copy_state_before() : NULL;
|
||||
Instruction* res = append(new LookupSwitch(ipop(), sux, keys, state_before, has_bb));
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2011, 2012 Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -44,7 +44,9 @@ G1YoungGenerationCounters::G1YoungGenerationCounters(G1MonitoringSupport* g1mm,
|
||||
G1MonitoringSupport::pad_capacity(0, 3) /* min_capacity */,
|
||||
G1MonitoringSupport::pad_capacity(g1mm->young_gen_max(), 3),
|
||||
G1MonitoringSupport::pad_capacity(0, 3) /* curr_capacity */) {
|
||||
update_all();
|
||||
if (UsePerfData) {
|
||||
update_all();
|
||||
}
|
||||
}
|
||||
|
||||
G1OldGenerationCounters::G1OldGenerationCounters(G1MonitoringSupport* g1mm,
|
||||
@ -53,7 +55,9 @@ G1OldGenerationCounters::G1OldGenerationCounters(G1MonitoringSupport* g1mm,
|
||||
G1MonitoringSupport::pad_capacity(0) /* min_capacity */,
|
||||
G1MonitoringSupport::pad_capacity(g1mm->old_gen_max()),
|
||||
G1MonitoringSupport::pad_capacity(0) /* curr_capacity */) {
|
||||
update_all();
|
||||
if (UsePerfData) {
|
||||
update_all();
|
||||
}
|
||||
}
|
||||
|
||||
void G1YoungGenerationCounters::update_all() {
|
||||
@ -149,10 +153,6 @@ G1MonitoringSupport::G1MonitoringSupport(G1CollectedHeap* g1h) :
|
||||
pad_capacity(0) /* max_capacity */,
|
||||
pad_capacity(0) /* init_capacity */,
|
||||
_young_collection_counters);
|
||||
// Given that this survivor space is not used, we update it here
|
||||
// once to reflect that its used space is 0 so that we don't have to
|
||||
// worry about updating it again later.
|
||||
_from_counters->update_used(0);
|
||||
|
||||
// name "generation.0.space.2"
|
||||
// See _old_space_counters for additional counters
|
||||
@ -160,6 +160,13 @@ G1MonitoringSupport::G1MonitoringSupport(G1CollectedHeap* g1h) :
|
||||
pad_capacity(overall_reserved()) /* max_capacity */,
|
||||
pad_capacity(survivor_space_committed()) /* init_capacity */,
|
||||
_young_collection_counters);
|
||||
|
||||
if (UsePerfData) {
|
||||
// Given that this survivor space is not used, we update it here
|
||||
// once to reflect that its used space is 0 so that we don't have to
|
||||
// worry about updating it again later.
|
||||
_from_counters->update_used(0);
|
||||
}
|
||||
}
|
||||
|
||||
void G1MonitoringSupport::recalculate_sizes() {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -38,33 +38,36 @@ SurvRateGroup::SurvRateGroup(G1CollectorPolicy* g1p,
|
||||
_summary_surv_rates(NULL),
|
||||
_surv_rate(NULL),
|
||||
_accum_surv_rate_pred(NULL),
|
||||
_surv_rate_pred(NULL)
|
||||
{
|
||||
_surv_rate_pred(NULL),
|
||||
_stats_arrays_length(0) {
|
||||
reset();
|
||||
if (summary_surv_rates_len > 0) {
|
||||
size_t length = summary_surv_rates_len;
|
||||
_summary_surv_rates = NEW_C_HEAP_ARRAY(NumberSeq*, length);
|
||||
if (_summary_surv_rates == NULL) {
|
||||
vm_exit_out_of_memory(sizeof(NumberSeq*) * length,
|
||||
"Not enough space for surv rate summary");
|
||||
}
|
||||
for (size_t i = 0; i < length; ++i)
|
||||
_summary_surv_rates = NEW_C_HEAP_ARRAY(NumberSeq*, length);
|
||||
for (size_t i = 0; i < length; ++i) {
|
||||
_summary_surv_rates[i] = new NumberSeq();
|
||||
}
|
||||
}
|
||||
|
||||
start_adding_regions();
|
||||
}
|
||||
|
||||
|
||||
void SurvRateGroup::reset()
|
||||
{
|
||||
void SurvRateGroup::reset() {
|
||||
_all_regions_allocated = 0;
|
||||
_setup_seq_num = 0;
|
||||
_stats_arrays_length = 0;
|
||||
_accum_surv_rate = 0.0;
|
||||
_last_pred = 0.0;
|
||||
// the following will set up the arrays with length 1
|
||||
_region_num = 1;
|
||||
|
||||
// The call to stop_adding_regions() will use "new" to refill
|
||||
// the _surv_rate_pred array, so we need to make sure to call
|
||||
// "delete".
|
||||
for (size_t i = 0; i < _stats_arrays_length; ++i) {
|
||||
delete _surv_rate_pred[i];
|
||||
}
|
||||
_stats_arrays_length = 0;
|
||||
|
||||
stop_adding_regions();
|
||||
guarantee( _stats_arrays_length == 1, "invariant" );
|
||||
guarantee( _surv_rate_pred[0] != NULL, "invariant" );
|
||||
@ -73,72 +76,47 @@ void SurvRateGroup::reset()
|
||||
_region_num = 0;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
SurvRateGroup::start_adding_regions() {
|
||||
_setup_seq_num = _stats_arrays_length;
|
||||
_region_num = 0;
|
||||
_accum_surv_rate = 0.0;
|
||||
|
||||
#if 0
|
||||
gclog_or_tty->print_cr("[%s] start adding regions, seq num %d, length %d",
|
||||
_name, _setup_seq_num, _region_num);
|
||||
#endif // 0
|
||||
}
|
||||
|
||||
void
|
||||
SurvRateGroup::stop_adding_regions() {
|
||||
|
||||
#if 0
|
||||
gclog_or_tty->print_cr("[%s] stop adding regions, length %d", _name, _region_num);
|
||||
#endif // 0
|
||||
|
||||
if (_region_num > _stats_arrays_length) {
|
||||
double* old_surv_rate = _surv_rate;
|
||||
double* old_accum_surv_rate_pred = _accum_surv_rate_pred;
|
||||
TruncatedSeq** old_surv_rate_pred = _surv_rate_pred;
|
||||
|
||||
_surv_rate = NEW_C_HEAP_ARRAY(double, _region_num);
|
||||
if (_surv_rate == NULL) {
|
||||
vm_exit_out_of_memory(sizeof(double) * _region_num,
|
||||
"Not enough space for surv rate array.");
|
||||
}
|
||||
_accum_surv_rate_pred = NEW_C_HEAP_ARRAY(double, _region_num);
|
||||
if (_accum_surv_rate_pred == NULL) {
|
||||
vm_exit_out_of_memory(sizeof(double) * _region_num,
|
||||
"Not enough space for accum surv rate pred array.");
|
||||
}
|
||||
_surv_rate_pred = NEW_C_HEAP_ARRAY(TruncatedSeq*, _region_num);
|
||||
if (_surv_rate == NULL) {
|
||||
vm_exit_out_of_memory(sizeof(TruncatedSeq*) * _region_num,
|
||||
"Not enough space for surv rate pred array.");
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < _stats_arrays_length; ++i)
|
||||
for (size_t i = 0; i < _stats_arrays_length; ++i) {
|
||||
_surv_rate_pred[i] = old_surv_rate_pred[i];
|
||||
|
||||
#if 0
|
||||
gclog_or_tty->print_cr("[%s] stop adding regions, new seqs %d to %d",
|
||||
_name, _array_length, _region_num - 1);
|
||||
#endif // 0
|
||||
|
||||
}
|
||||
for (size_t i = _stats_arrays_length; i < _region_num; ++i) {
|
||||
_surv_rate_pred[i] = new TruncatedSeq(10);
|
||||
// _surv_rate_pred[i]->add(last_pred);
|
||||
}
|
||||
|
||||
_stats_arrays_length = _region_num;
|
||||
|
||||
if (old_surv_rate != NULL)
|
||||
if (old_surv_rate != NULL) {
|
||||
FREE_C_HEAP_ARRAY(double, old_surv_rate);
|
||||
if (old_accum_surv_rate_pred != NULL)
|
||||
}
|
||||
if (old_accum_surv_rate_pred != NULL) {
|
||||
FREE_C_HEAP_ARRAY(double, old_accum_surv_rate_pred);
|
||||
if (old_surv_rate_pred != NULL)
|
||||
FREE_C_HEAP_ARRAY(NumberSeq*, old_surv_rate_pred);
|
||||
}
|
||||
if (old_surv_rate_pred != NULL) {
|
||||
FREE_C_HEAP_ARRAY(TruncatedSeq*, old_surv_rate_pred);
|
||||
}
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < _stats_arrays_length; ++i)
|
||||
for (size_t i = 0; i < _stats_arrays_length; ++i) {
|
||||
_surv_rate[i] = 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
double
|
||||
@ -187,12 +165,6 @@ void
|
||||
SurvRateGroup::all_surviving_words_recorded(bool propagate) {
|
||||
if (propagate && _region_num > 0) { // conservative
|
||||
double surv_rate = _surv_rate_pred[_region_num-1]->last();
|
||||
|
||||
#if 0
|
||||
gclog_or_tty->print_cr("propagating %1.2lf from %d to %d",
|
||||
surv_rate, _curr_length, _array_length - 1);
|
||||
#endif // 0
|
||||
|
||||
for (size_t i = _region_num; i < _stats_arrays_length; ++i) {
|
||||
guarantee( _surv_rate[i] <= 0.00001,
|
||||
"the slot should not have been updated" );
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -72,6 +72,9 @@ class CardTableModRefBS: public ModRefBarrierSet {
|
||||
CT_MR_BS_last_reserved = 16
|
||||
};
|
||||
|
||||
// a word's worth (row) of clean card values
|
||||
static const intptr_t clean_card_row = (intptr_t)(-1);
|
||||
|
||||
// dirty and precleaned are equivalent wrt younger_refs_iter.
|
||||
static bool card_is_dirty_wrt_gen_iter(jbyte cv) {
|
||||
return cv == dirty_card || cv == precleaned_card;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -173,6 +173,10 @@ ClearNoncleanCardWrapper::ClearNoncleanCardWrapper(
|
||||
SharedHeap::heap()->workers()->active_workers()), "Mismatch");
|
||||
}
|
||||
|
||||
bool ClearNoncleanCardWrapper::is_word_aligned(jbyte* entry) {
|
||||
return (((intptr_t)entry) & (BytesPerWord-1)) == 0;
|
||||
}
|
||||
|
||||
void ClearNoncleanCardWrapper::do_MemRegion(MemRegion mr) {
|
||||
assert(mr.word_size() > 0, "Error");
|
||||
assert(_ct->is_aligned(mr.start()), "mr.start() should be card aligned");
|
||||
@ -194,6 +198,17 @@ void ClearNoncleanCardWrapper::do_MemRegion(MemRegion mr) {
|
||||
const MemRegion mrd(start_of_non_clean, end_of_non_clean);
|
||||
_dirty_card_closure->do_MemRegion(mrd);
|
||||
}
|
||||
|
||||
// fast forward through potential continuous whole-word range of clean cards beginning at a word-boundary
|
||||
if (is_word_aligned(cur_entry)) {
|
||||
jbyte* cur_row = cur_entry - BytesPerWord;
|
||||
while (cur_row >= limit && *((intptr_t*)cur_row) == CardTableRS::clean_card_row()) {
|
||||
cur_row -= BytesPerWord;
|
||||
}
|
||||
cur_entry = cur_row + BytesPerWord;
|
||||
cur_hw = _ct->addr_for(cur_entry);
|
||||
}
|
||||
|
||||
// Reset the dirty window, while continuing to look
|
||||
// for the next dirty card that will start a
|
||||
// new dirty window.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -45,6 +45,10 @@ class CardTableRS: public GenRemSet {
|
||||
return CardTableModRefBS::clean_card;
|
||||
}
|
||||
|
||||
static intptr_t clean_card_row() {
|
||||
return CardTableModRefBS::clean_card_row;
|
||||
}
|
||||
|
||||
static bool
|
||||
card_is_dirty_wrt_gen_iter(jbyte cv) {
|
||||
return CardTableModRefBS::card_is_dirty_wrt_gen_iter(cv);
|
||||
@ -176,6 +180,8 @@ private:
|
||||
// Work methods called by the clear_card()
|
||||
inline bool clear_card_serial(jbyte* entry);
|
||||
inline bool clear_card_parallel(jbyte* entry);
|
||||
// check alignment of pointer
|
||||
bool is_word_aligned(jbyte* entry);
|
||||
|
||||
public:
|
||||
ClearNoncleanCardWrapper(DirtyCardToOopClosure* dirty_card_closure, CardTableRS* ct);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -153,6 +153,7 @@ objArrayOop arrayKlass::allocate_arrayArray(int n, int length, TRAPS) {
|
||||
}
|
||||
if (length > arrayOopDesc::max_array_length(T_ARRAY)) {
|
||||
report_java_out_of_memory("Requested array size exceeds VM limit");
|
||||
JvmtiExport::post_array_size_exhausted();
|
||||
THROW_OOP_0(Universe::out_of_memory_error_array_size());
|
||||
}
|
||||
int size = objArrayOopDesc::object_size(length);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -669,6 +669,7 @@ objArrayOop instanceKlass::allocate_objArray(int n, int length, TRAPS) {
|
||||
if (length < 0) THROW_0(vmSymbols::java_lang_NegativeArraySizeException());
|
||||
if (length > arrayOopDesc::max_array_length(T_OBJECT)) {
|
||||
report_java_out_of_memory("Requested array size exceeds VM limit");
|
||||
JvmtiExport::post_array_size_exhausted();
|
||||
THROW_OOP_0(Universe::out_of_memory_error_array_size());
|
||||
}
|
||||
int size = objArrayOopDesc::object_size(length);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -68,6 +68,7 @@ objArrayOop objArrayKlass::allocate(int length, TRAPS) {
|
||||
return a;
|
||||
} else {
|
||||
report_java_out_of_memory("Requested array size exceeds VM limit");
|
||||
JvmtiExport::post_array_size_exhausted();
|
||||
THROW_OOP_0(Universe::out_of_memory_error_array_size());
|
||||
}
|
||||
} else {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -93,6 +93,7 @@ typeArrayOop typeArrayKlass::allocate_common(int length, bool do_zero, TRAPS) {
|
||||
return t;
|
||||
} else {
|
||||
report_java_out_of_memory("Requested array size exceeds VM limit");
|
||||
JvmtiExport::post_array_size_exhausted();
|
||||
THROW_OOP_0(Universe::out_of_memory_error_array_size());
|
||||
}
|
||||
} else {
|
||||
|
@ -631,7 +631,7 @@ class Compile : public Phase {
|
||||
|
||||
// Decide how to build a call.
|
||||
// The profile factor is a discount to apply to this site's interp. profile.
|
||||
CallGenerator* call_generator(ciMethod* call_method, int vtable_index, bool call_is_virtual, JVMState* jvms, bool allow_inline, float profile_factor);
|
||||
CallGenerator* call_generator(ciMethod* call_method, int vtable_index, bool call_is_virtual, JVMState* jvms, bool allow_inline, float profile_factor, bool allow_intrinsics = true);
|
||||
bool should_delay_inlining(ciMethod* call_method, JVMState* jvms);
|
||||
|
||||
// Report if there were too many traps at a current method and bci.
|
||||
|
@ -61,7 +61,7 @@ void trace_type_profile(ciMethod *method, int depth, int bci, ciMethod *prof_met
|
||||
|
||||
CallGenerator* Compile::call_generator(ciMethod* call_method, int vtable_index, bool call_is_virtual,
|
||||
JVMState* jvms, bool allow_inline,
|
||||
float prof_factor) {
|
||||
float prof_factor, bool allow_intrinsics) {
|
||||
ciMethod* caller = jvms->method();
|
||||
int bci = jvms->bci();
|
||||
Bytecodes::Code bytecode = caller->java_code_at_bci(bci);
|
||||
@ -108,7 +108,7 @@ CallGenerator* Compile::call_generator(ciMethod* call_method, int vtable_index,
|
||||
// then we return it as the inlined version of the call.
|
||||
// We do this before the strict f.p. check below because the
|
||||
// intrinsics handle strict f.p. correctly.
|
||||
if (allow_inline) {
|
||||
if (allow_inline && allow_intrinsics) {
|
||||
CallGenerator* cg = find_intrinsic(call_method, call_is_virtual);
|
||||
if (cg != NULL) return cg;
|
||||
}
|
||||
@ -455,21 +455,12 @@ void Parse::do_call() {
|
||||
// cg->generate(), we are committed. If it fails, the whole
|
||||
// compilation task is compromised.
|
||||
if (failing()) return;
|
||||
#ifndef PRODUCT
|
||||
if (PrintOpto || PrintOptoInlining || PrintInlining) {
|
||||
// Only one fall-back, so if an intrinsic fails, ignore any bytecodes.
|
||||
if (cg->is_intrinsic() && call_method->code_size() > 0) {
|
||||
tty->print("Bailed out of intrinsic, will not inline: ");
|
||||
call_method->print_name(); tty->cr();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// This can happen if a library intrinsic is available, but refuses
|
||||
// the call site, perhaps because it did not match a pattern the
|
||||
// intrinsic was expecting to optimize. The fallback position is
|
||||
// to call out-of-line.
|
||||
try_inline = false; // Inline tactic bailed out.
|
||||
cg = C->call_generator(call_method, vtable_index, call_is_virtual, jvms, try_inline, prof_factor());
|
||||
// intrinsic was expecting to optimize. Should always be possible to
|
||||
// get a normal java call that may inline in that case
|
||||
cg = C->call_generator(call_method, vtable_index, call_is_virtual, jvms, try_inline, prof_factor(), /* allow_intrinsics= */ false);
|
||||
if ((new_jvms = cg->generate(jvms)) == NULL) {
|
||||
guarantee(failing(), "call failed to generate: calls should work");
|
||||
return;
|
||||
|
@ -338,8 +338,27 @@ CallGenerator* Compile::make_vm_intrinsic(ciMethod* m, bool is_virtual) {
|
||||
break;
|
||||
|
||||
case vmIntrinsics::_bitCount_i:
|
||||
if (!Matcher::match_rule_supported(Op_PopCountI)) return NULL;
|
||||
break;
|
||||
|
||||
case vmIntrinsics::_bitCount_l:
|
||||
if (!UsePopCountInstruction) return NULL;
|
||||
if (!Matcher::match_rule_supported(Op_PopCountL)) return NULL;
|
||||
break;
|
||||
|
||||
case vmIntrinsics::_numberOfLeadingZeros_i:
|
||||
if (!Matcher::match_rule_supported(Op_CountLeadingZerosI)) return NULL;
|
||||
break;
|
||||
|
||||
case vmIntrinsics::_numberOfLeadingZeros_l:
|
||||
if (!Matcher::match_rule_supported(Op_CountLeadingZerosL)) return NULL;
|
||||
break;
|
||||
|
||||
case vmIntrinsics::_numberOfTrailingZeros_i:
|
||||
if (!Matcher::match_rule_supported(Op_CountTrailingZerosI)) return NULL;
|
||||
break;
|
||||
|
||||
case vmIntrinsics::_numberOfTrailingZeros_l:
|
||||
if (!Matcher::match_rule_supported(Op_CountTrailingZerosL)) return NULL;
|
||||
break;
|
||||
|
||||
case vmIntrinsics::_Reference_get:
|
||||
@ -416,14 +435,12 @@ JVMState* LibraryIntrinsic::generate(JVMState* jvms) {
|
||||
return kit.transfer_exceptions_into_jvms();
|
||||
}
|
||||
|
||||
if (PrintIntrinsics) {
|
||||
// The intrinsic bailed out
|
||||
if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) {
|
||||
if (jvms->has_method()) {
|
||||
// Not a root compile.
|
||||
tty->print("Did not inline intrinsic %s%s at bci:%d in",
|
||||
vmIntrinsics::name_at(intrinsic_id()),
|
||||
(is_virtual() ? " (virtual)" : ""), kit.bci());
|
||||
kit.caller()->print_short_name(tty);
|
||||
tty->print_cr(" (%d bytes)", kit.caller()->code_size());
|
||||
const char* msg = is_virtual() ? "failed to inline (intrinsic, virtual)" : "failed to inline (intrinsic)";
|
||||
CompileTask::print_inlining(kit.callee(), jvms->depth() - 1, kit.bci(), msg);
|
||||
} else {
|
||||
// Root compile
|
||||
tty->print("Did not generate intrinsic %s%s at bci:%d in",
|
||||
@ -5453,4 +5470,3 @@ bool LibraryCallKit::inline_reference_get() {
|
||||
push(result);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -727,8 +727,11 @@ void JvmtiClassFileReconstituter::copy_bytecodes(methodHandle mh,
|
||||
case Bytecodes::_invokestatic : // fall through
|
||||
case Bytecodes::_invokedynamic : // fall through
|
||||
case Bytecodes::_invokeinterface :
|
||||
assert(len == 3 || (code == Bytecodes::_invokeinterface && len ==5),
|
||||
assert(len == 3 ||
|
||||
(code == Bytecodes::_invokeinterface && len == 5) ||
|
||||
(code == Bytecodes::_invokedynamic && len == 5),
|
||||
"sanity check");
|
||||
|
||||
int cpci = Bytes::get_native_u2(bcp+1);
|
||||
bool is_invokedynamic = (EnableInvokeDynamic && code == Bytecodes::_invokedynamic);
|
||||
if (is_invokedynamic)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -324,6 +324,12 @@ class JvmtiExport : public AllStatic {
|
||||
record_vm_internal_object_allocation(object);
|
||||
}
|
||||
}
|
||||
inline static void post_array_size_exhausted() {
|
||||
if (should_post_resource_exhausted()) {
|
||||
post_resource_exhausted(JVMTI_RESOURCE_EXHAUSTED_OOM_ERROR,
|
||||
"Requested array size exceeds VM limit");
|
||||
}
|
||||
}
|
||||
|
||||
static void cleanup_thread (JavaThread* thread) KERNEL_RETURN;
|
||||
|
||||
|
@ -121,6 +121,7 @@ extern "C" {
|
||||
void JNICALL JVM_RegisterUnsafeMethods(JNIEnv *env, jclass unsafecls);
|
||||
void JNICALL JVM_RegisterMethodHandleMethods(JNIEnv *env, jclass unsafecls);
|
||||
void JNICALL JVM_RegisterPerfMethods(JNIEnv *env, jclass perfclass);
|
||||
void JNICALL JVM_RegisterWhiteBoxMethods(JNIEnv *env, jclass wbclass);
|
||||
}
|
||||
|
||||
#define CC (char*) /* cast a literal from (const char*) */
|
||||
@ -133,7 +134,8 @@ static JNINativeMethod lookup_special_native_methods[] = {
|
||||
|
||||
{ CC"Java_sun_misc_Unsafe_registerNatives", NULL, FN_PTR(JVM_RegisterUnsafeMethods) },
|
||||
{ CC"Java_java_lang_invoke_MethodHandleNatives_registerNatives", NULL, FN_PTR(JVM_RegisterMethodHandleMethods) },
|
||||
{ CC"Java_sun_misc_Perf_registerNatives", NULL, FN_PTR(JVM_RegisterPerfMethods) }
|
||||
{ CC"Java_sun_misc_Perf_registerNatives", NULL, FN_PTR(JVM_RegisterPerfMethods) },
|
||||
{ CC"Java_sun_hotspot_WhiteBox_registerNatives", NULL, FN_PTR(JVM_RegisterWhiteBoxMethods) },
|
||||
};
|
||||
|
||||
static address lookup_special_native(char* jni_name) {
|
||||
|
114
hotspot/src/share/vm/prims/whitebox.cpp
Normal file
114
hotspot/src/share/vm/prims/whitebox.cpp
Normal file
@ -0,0 +1,114 @@
|
||||
/*
|
||||
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "precompiled.hpp"
|
||||
|
||||
#include "jni.h"
|
||||
|
||||
#include "memory/universe.hpp"
|
||||
#include "oops/oop.inline.hpp"
|
||||
#include "prims/whitebox.hpp"
|
||||
#include "runtime/interfaceSupport.hpp"
|
||||
#include "runtime/os.hpp"
|
||||
#include "utilities/debug.hpp"
|
||||
|
||||
#ifndef SERIALGC
|
||||
#include "gc_implementation/g1/concurrentMark.hpp"
|
||||
#include "gc_implementation/g1/g1CollectedHeap.inline.hpp"
|
||||
#include "gc_implementation/g1/heapRegionRemSet.hpp"
|
||||
#endif // !SERIALGC
|
||||
|
||||
bool WhiteBox::_used = false;
|
||||
|
||||
// Entry macro to transition from JNI to VM state.
|
||||
|
||||
#define WB_ENTRY(result_type, header) JNI_ENTRY(result_type, header)
|
||||
#define WB_END JNI_END
|
||||
|
||||
// Definitions of functions exposed via Whitebox API
|
||||
|
||||
WB_ENTRY(jlong, WB_GetObjectAddress(JNIEnv* env, jobject o, jobject obj))
|
||||
return (jlong)(void*)JNIHandles::resolve(obj);
|
||||
WB_END
|
||||
|
||||
WB_ENTRY(jint, WB_GetHeapOopSize(JNIEnv* env, jobject o))
|
||||
return heapOopSize;
|
||||
WB_END
|
||||
|
||||
#ifndef SERIALGC
|
||||
WB_ENTRY(jboolean, WB_G1IsHumongous(JNIEnv* env, jobject o, jobject obj))
|
||||
G1CollectedHeap* g1 = G1CollectedHeap::heap();
|
||||
oop result = JNIHandles::resolve(obj);
|
||||
const HeapRegion* hr = g1->heap_region_containing(result);
|
||||
return hr->isHumongous();
|
||||
WB_END
|
||||
|
||||
WB_ENTRY(jlong, WB_G1NumFreeRegions(JNIEnv* env, jobject o))
|
||||
G1CollectedHeap* g1 = G1CollectedHeap::heap();
|
||||
size_t nr = g1->free_regions();
|
||||
return (jlong)nr;
|
||||
WB_END
|
||||
|
||||
WB_ENTRY(jboolean, WB_G1InConcurrentMark(JNIEnv* env, jobject o))
|
||||
G1CollectedHeap* g1 = G1CollectedHeap::heap();
|
||||
ConcurrentMark* cm = g1->concurrent_mark();
|
||||
return cm->concurrent_marking_in_progress();
|
||||
WB_END
|
||||
|
||||
WB_ENTRY(jint, WB_G1RegionSize(JNIEnv* env, jobject o))
|
||||
return (jint)HeapRegion::GrainBytes;
|
||||
WB_END
|
||||
#endif // !SERIALGC
|
||||
|
||||
#define CC (char*)
|
||||
|
||||
static JNINativeMethod methods[] = {
|
||||
{CC"getObjectAddress", CC"(Ljava/lang/Object;)J", (void*)&WB_GetObjectAddress },
|
||||
{CC"getHeapOopSize", CC"()I", (void*)&WB_GetHeapOopSize },
|
||||
#ifndef SERIALGC
|
||||
{CC"g1InConcurrentMark", CC"()Z", (void*)&WB_G1InConcurrentMark},
|
||||
{CC"g1IsHumongous", CC"(Ljava/lang/Object;)Z", (void*)&WB_G1IsHumongous },
|
||||
{CC"g1NumFreeRegions", CC"()J", (void*)&WB_G1NumFreeRegions },
|
||||
{CC"g1RegionSize", CC"()I", (void*)&WB_G1RegionSize },
|
||||
#endif // !SERIALGC
|
||||
};
|
||||
|
||||
#undef CC
|
||||
|
||||
JVM_ENTRY(void, JVM_RegisterWhiteBoxMethods(JNIEnv* env, jclass wbclass))
|
||||
{
|
||||
if (WhiteBoxAPI) {
|
||||
// Make sure that wbclass is loaded by the null classloader
|
||||
instanceKlassHandle ikh = instanceKlassHandle(JNIHandles::resolve(wbclass)->klass());
|
||||
Handle loader(ikh->class_loader());
|
||||
if (loader.is_null()) {
|
||||
ThreadToNativeFromVM ttnfv(thread); // can't be in VM when we call JNI
|
||||
jint result = env->RegisterNatives(wbclass, methods, sizeof(methods)/sizeof(methods[0]));
|
||||
if (result == 0) {
|
||||
WhiteBox::set_used();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
JVM_END
|
36
hotspot/src/share/vm/prims/whitebox.hpp
Normal file
36
hotspot/src/share/vm/prims/whitebox.hpp
Normal file
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef SHARE_VM_PRIMS_WHITEBOX_HPP
|
||||
#define SHARE_VM_PRIMS_WHITEBOX_HPP
|
||||
|
||||
class WhiteBox : public AllStatic {
|
||||
private:
|
||||
static bool _used;
|
||||
public:
|
||||
static bool used() { return _used; }
|
||||
static void set_used() { _used = true; }
|
||||
};
|
||||
|
||||
#endif // SHARE_VM_PRIMS_WHITEBOX_HPP
|
@ -2050,6 +2050,19 @@ jint Arguments::parse_vm_init_args(const JavaVMInitArgs* args) {
|
||||
FREE_C_HEAP_ARRAY(char, altclasses_path);
|
||||
}
|
||||
|
||||
if (WhiteBoxAPI) {
|
||||
// Append wb.jar to bootclasspath if enabled
|
||||
const char* wb_jar = "wb.jar";
|
||||
size_t wb_path_len = strlen(get_meta_index_dir()) + 1 +
|
||||
strlen(wb_jar);
|
||||
char* wb_path = NEW_C_HEAP_ARRAY(char, wb_path_len);
|
||||
strcpy(wb_path, get_meta_index_dir());
|
||||
strcat(wb_path, wb_jar);
|
||||
scp.add_suffix(wb_path);
|
||||
scp_assembly_required = true;
|
||||
FREE_C_HEAP_ARRAY(char, wb_path);
|
||||
}
|
||||
|
||||
// Parse _JAVA_OPTIONS environment variable (if present) (mimics classic VM)
|
||||
result = parse_java_options_environment_variable(&scp, &scp_assembly_required);
|
||||
if (result != JNI_OK) {
|
||||
|
@ -3896,7 +3896,10 @@ class CommandLineFlags {
|
||||
product(bool, UseVMInterruptibleIO, false, \
|
||||
"(Unstable, Solaris-specific) Thread interrupt before or with " \
|
||||
"EINTR for I/O operations results in OS_INTRPT. The default value"\
|
||||
" of this flag is true for JDK 6 and earlier")
|
||||
" of this flag is true for JDK 6 and earlier") \
|
||||
\
|
||||
diagnostic(bool, WhiteBoxAPI, false, \
|
||||
"Enable internal testing APIs")
|
||||
|
||||
/*
|
||||
* Macros for factoring of globals
|
||||
|
@ -219,6 +219,8 @@ void SafepointSynchronize::begin() {
|
||||
#ifdef ASSERT
|
||||
for (JavaThread *cur = Threads::first(); cur != NULL; cur = cur->next()) {
|
||||
assert(cur->safepoint_state()->is_running(), "Illegal initial state");
|
||||
// Clear the visited flag to ensure that the critical counts are collected properly.
|
||||
cur->set_visited_for_critical_count(false);
|
||||
}
|
||||
#endif // ASSERT
|
||||
|
||||
@ -378,6 +380,13 @@ void SafepointSynchronize::begin() {
|
||||
|
||||
OrderAccess::fence();
|
||||
|
||||
#ifdef ASSERT
|
||||
for (JavaThread *cur = Threads::first(); cur != NULL; cur = cur->next()) {
|
||||
// make sure all the threads were visited
|
||||
assert(cur->was_visited_for_critical_count(), "missed a thread");
|
||||
}
|
||||
#endif // ASSERT
|
||||
|
||||
// Update the count of active JNI critical regions
|
||||
GC_locker::set_jni_lock_count(_current_jni_active_count);
|
||||
|
||||
@ -626,6 +635,7 @@ void SafepointSynchronize::block(JavaThread *thread) {
|
||||
_waiting_to_block--;
|
||||
thread->safepoint_state()->set_has_called_back(true);
|
||||
|
||||
DEBUG_ONLY(thread->set_visited_for_critical_count(true));
|
||||
if (thread->in_critical()) {
|
||||
// Notice that this thread is in a critical section
|
||||
increment_jni_active_count();
|
||||
@ -907,12 +917,8 @@ void ThreadSafepointState::examine_state_of_thread() {
|
||||
// running, but are actually at a safepoint. We will happily
|
||||
// agree and update the safepoint state here.
|
||||
if (SafepointSynchronize::safepoint_safe(_thread, state)) {
|
||||
roll_forward(_at_safepoint);
|
||||
SafepointSynchronize::check_for_lazy_critical_native(_thread, state);
|
||||
if (_thread->in_critical()) {
|
||||
// Notice that this thread is in a critical section
|
||||
SafepointSynchronize::increment_jni_active_count();
|
||||
}
|
||||
roll_forward(_at_safepoint);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -937,6 +943,11 @@ void ThreadSafepointState::roll_forward(suspend_type type) {
|
||||
switch(_type) {
|
||||
case _at_safepoint:
|
||||
SafepointSynchronize::signal_thread_at_safepoint();
|
||||
DEBUG_ONLY(_thread->set_visited_for_critical_count(true));
|
||||
if (_thread->in_critical()) {
|
||||
// Notice that this thread is in a critical section
|
||||
SafepointSynchronize::increment_jni_active_count();
|
||||
}
|
||||
break;
|
||||
|
||||
case _call_back:
|
||||
|
@ -247,6 +247,10 @@ Thread::Thread() {
|
||||
omInUseList = NULL ;
|
||||
omInUseCount = 0 ;
|
||||
|
||||
#ifdef ASSERT
|
||||
_visited_for_critical_count = false;
|
||||
#endif
|
||||
|
||||
_SR_lock = new Monitor(Mutex::suspend_resume, "SR_lock", true);
|
||||
_suspend_flags = 0;
|
||||
|
||||
|
@ -268,6 +268,15 @@ class Thread: public ThreadShadow {
|
||||
ObjectMonitor* omInUseList; // SLL to track monitors in circulation
|
||||
int omInUseCount; // length of omInUseList
|
||||
|
||||
#ifdef ASSERT
|
||||
private:
|
||||
bool _visited_for_critical_count;
|
||||
|
||||
public:
|
||||
void set_visited_for_critical_count(bool z) { _visited_for_critical_count = z; }
|
||||
bool was_visited_for_critical_count() const { return _visited_for_critical_count; }
|
||||
#endif
|
||||
|
||||
public:
|
||||
enum {
|
||||
is_definitely_current_thread = true
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -156,6 +156,10 @@ TruncatedSeq::TruncatedSeq(int length, double alpha):
|
||||
_sequence[i] = 0.0;
|
||||
}
|
||||
|
||||
TruncatedSeq::~TruncatedSeq() {
|
||||
FREE_C_HEAP_ARRAY(double, _sequence);
|
||||
}
|
||||
|
||||
void TruncatedSeq::add(double val) {
|
||||
AbsSeq::add(val);
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -118,6 +118,7 @@ public:
|
||||
// accepts a value for L
|
||||
TruncatedSeq(int length = DefaultSeqLength,
|
||||
double alpha = DEFAULT_ALPHA_VALUE);
|
||||
~TruncatedSeq();
|
||||
virtual void add(double val);
|
||||
virtual double maximum() const;
|
||||
virtual double last() const; // the last value added to the sequence
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include "precompiled.hpp"
|
||||
#include "compiler/compileBroker.hpp"
|
||||
#include "gc_interface/collectedHeap.hpp"
|
||||
#include "prims/whitebox.hpp"
|
||||
#include "runtime/arguments.hpp"
|
||||
#include "runtime/frame.inline.hpp"
|
||||
#include "runtime/init.hpp"
|
||||
@ -717,6 +718,13 @@ void VMError::report(outputStream* st) {
|
||||
st->cr();
|
||||
}
|
||||
|
||||
STEP(215, "(printing warning if internal testing API used)" )
|
||||
|
||||
if (WhiteBox::used()) {
|
||||
st->print_cr("Unsupported internal testing APIs have been used.");
|
||||
st->cr();
|
||||
}
|
||||
|
||||
STEP(220, "(printing environment variables)" )
|
||||
|
||||
if (_verbose) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -228,6 +228,24 @@ PHONY_LIST += internalvmtests
|
||||
|
||||
################################################################
|
||||
|
||||
# wbapitest (make sure the whitebox testing api classes work
|
||||
|
||||
wbapitest: prep $(JT_HOME) $(PRODUCT_HOME) $(JTREG)
|
||||
$(JTREG) -a -v:fail,error \
|
||||
$(JTREG_KEY_OPTION) \
|
||||
$(EXTRA_JTREG_OPTIONS) \
|
||||
-r:$(ABS_TEST_OUTPUT_DIR)/JTreport \
|
||||
-w:$(ABS_TEST_OUTPUT_DIR)/JTwork \
|
||||
-jdk:$(PRODUCT_HOME) \
|
||||
$(JAVA_OPTIONS:%=-vmoption:%) \
|
||||
$(TEST_ROOT)/sanity \
|
||||
|| $(BUNDLE_UP_FAILED)
|
||||
$(BUNDLE_UP)
|
||||
|
||||
PHONY_LIST += wbapitest
|
||||
|
||||
################################################################
|
||||
|
||||
# packtest
|
||||
|
||||
# Expect JPRT to set JPRT_PACKTEST_HOME.
|
||||
|
13
hotspot/test/sanity/WBApi.java
Normal file
13
hotspot/test/sanity/WBApi.java
Normal file
@ -0,0 +1,13 @@
|
||||
/*
|
||||
* @test WBApi
|
||||
* @summary verify that whitebox functions can be linked and executed
|
||||
* @run compile -J-XX:+UnlockDiagnosticVMOptions -J-XX:+WhiteBoxAPI WBApi.java
|
||||
* @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI WBApi
|
||||
*/
|
||||
|
||||
import sun.hotspot.WhiteBox;
|
||||
public class WBApi {
|
||||
public static void main(String... args) {
|
||||
System.out.printf("args at: %x\n",WhiteBox.getWhiteBox().getObjectAddress(args));
|
||||
}
|
||||
}
|
@ -151,3 +151,4 @@ ec17fbe5b8fbc52da070eec43b4711d9354b2ab8 jdk8-b25
|
||||
c68342532e2e7deb3a25fc04ed3e4c142278f747 jdk8-b27
|
||||
1e1d41daaded291ab3a370ca6a27f7325701978e jdk8-b28
|
||||
c5b882dce0fe27e05dc64debc92b1fb9ebf880ec jdk8-b29
|
||||
cdbb33303ea344d5e9013e2dd642e7a6e7768db6 jdk8-b30
|
||||
|
@ -26,8 +26,7 @@
|
||||
formatVersion=1
|
||||
|
||||
# Version of the currency code information in this class.
|
||||
# It is a serial number that accompanies with each amendment, such as
|
||||
# 'MAxxx.doc'
|
||||
# It is a serial number that accompanies with each amendment.
|
||||
|
||||
dataVersion=153
|
||||
|
||||
@ -49,7 +48,7 @@ all=ADP020-AED784-AFA004-AFN971-ALL008-AMD051-ANG532-AOA973-ARS032-ATS040-AUD036
|
||||
NIO558-NLG528-NOK578-NPR524-NZD554-OMR512-PAB590-PEN604-PGK598-PHP608-\
|
||||
PKR586-PLN985-PTE620-PYG600-QAR634-ROL946-RON946-RSD941-RUB643-RUR810-RWF646-SAR682-\
|
||||
SBD090-SCR690-SDD736-SDG938-SEK752-SGD702-SHP654-SIT705-SKK703-SLL694-SOS706-\
|
||||
SRD968-SRG740-STD678-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TMT934-TND788-TOP776-\
|
||||
SRD968-SRG740-SSP728-STD678-SVC222-SYP760-SZL748-THB764-TJS972-TMM795-TMT934-TND788-TOP776-\
|
||||
TPE626-TRL792-TRY949-TTD780-TWD901-TZS834-UAH980-UGX800-USD840-USN997-USS998-\
|
||||
UYU858-UZS860-VEB862-VEF937-VND704-VUV548-WST882-XAF950-XAG961-XAU959-XBA955-\
|
||||
XBB956-XBC957-XBD958-XCD951-XDR960-XFO000-XFU000-XOF952-XPD964-XPF953-\
|
||||
@ -463,6 +462,8 @@ VC=XCD
|
||||
WS=WST
|
||||
# SAN MARINO
|
||||
SM=EUR
|
||||
# SOUTH SUDAN
|
||||
SS=SSP
|
||||
# SAO TOME AND PRINCIPE
|
||||
ST=STD
|
||||
# SAUDI ARABIA
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -433,6 +433,7 @@ class LocaleISOData {
|
||||
+ "SN" + "SEN" // Senegal, Republic of
|
||||
+ "SO" + "SOM" // Somalia, Somali Republic
|
||||
+ "SR" + "SUR" // Suriname, Republic of
|
||||
+ "SS" + "SSD" // South Sudan
|
||||
+ "ST" + "STP" // Sao Tome and Principe, Democratic Republic of
|
||||
+ "SV" + "SLV" // El Salvador, Republic of
|
||||
+ "SX" + "SXM" // Sint Maarten (Dutch part)
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -26,7 +26,7 @@
|
||||
#
|
||||
# COPYRIGHT AND PERMISSION NOTICE
|
||||
#
|
||||
# Copyright (C) 1991-2011 Unicode, Inc. All rights reserved.
|
||||
# Copyright (C) 1991-2012 Unicode, Inc. All rights reserved.
|
||||
# Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
@ -226,6 +226,7 @@ SLL=SLL
|
||||
SOS=SOS
|
||||
SRD=SRD
|
||||
SRG=SRG
|
||||
SSP=SSP
|
||||
STD=STD
|
||||
SVC=SVC
|
||||
SYP=SYP
|
||||
@ -443,6 +444,7 @@ sll=Sierra Leonean Leone
|
||||
sos=Somali Shilling
|
||||
srd=Surinamese Dollar
|
||||
srg=Surinamese Guilder
|
||||
ssp=South Sudanese Pound
|
||||
std=S\u00e3o Tom\u00e9 and Pr\u00edncipe Dobra
|
||||
svc=Salvadoran Col\u00f3n
|
||||
syp=Syrian Pound
|
||||
@ -486,7 +488,9 @@ xof=CFA Franc BCEAO
|
||||
xpd=Palladium
|
||||
xpf=CFP Franc
|
||||
xpt=Platinum
|
||||
xsu=Sucre
|
||||
xts=Testing Currency Code
|
||||
xua=ADB Unit of Account
|
||||
xxx=Unknown Currency
|
||||
yer=Yemeni Rial
|
||||
yum=Yugoslavian New Dinar (1994-2002)
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
#
|
||||
# This code is free software; you can redistribute it and/or modify it
|
||||
@ -1077,6 +1077,7 @@ SM=San Marino
|
||||
SN=Senegal
|
||||
SO=Somalia
|
||||
SR=Suriname
|
||||
SS=South Sudan
|
||||
ST=Sao Tome And Principe
|
||||
SV=El Salvador
|
||||
SX=Sint Maarten (Dutch part)
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
#
|
||||
# Based on BSi's ISO4217 data - "TABLE A1.doc" + amendments up until MA153.doc
|
||||
# Amendments up until ISO 4217 AMENDMENT NUMBER 153
|
||||
# (As of 12 January 2012)
|
||||
#
|
||||
|
||||
@ -227,6 +227,7 @@ SI EUR 978 2
|
||||
SB SBD 90 2
|
||||
SO SOS 706 2
|
||||
ZA ZAR 710 2
|
||||
SS SSP 728 2
|
||||
ES EUR 978 2
|
||||
LK LKR 144 2
|
||||
SD SDG 938 2
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -25,7 +25,7 @@
|
||||
* @bug 4052404 4052440 4084688 4092475 4101316 4105828 4107014 4107953 4110613
|
||||
* 4118587 4118595 4122371 4126371 4126880 4135316 4135752 4139504 4139940 4143951
|
||||
* 4147315 4147317 4147552 4335196 4778440 4940539 5010672 6475525 6544471 6627549
|
||||
* 6786276 7066203
|
||||
* 6786276 7066203 7085757
|
||||
* @summary test Locales
|
||||
*/
|
||||
/*
|
||||
@ -400,7 +400,7 @@ public class LocaleTest extends LocaleTestFmwk {
|
||||
}
|
||||
|
||||
/**
|
||||
* @bug 4106155 4118587 7066203
|
||||
* @bug 4106155 4118587 7066203 7085757
|
||||
*/
|
||||
public void TestGetLangsAndCountries() {
|
||||
// It didn't seem right to just do an exhaustive test of everything here, so I check
|
||||
@ -440,8 +440,8 @@ public class LocaleTest extends LocaleTestFmwk {
|
||||
String[] spotCheck2 = { "US", "CA", "GB", "FR", "DE", "IT", "JP", "KR", "CN", "TW", "TH" };
|
||||
|
||||
|
||||
if (test.length != 249)
|
||||
errln("Expected getISOCountries to return 249 countries; it returned " + test.length);
|
||||
if (test.length != 250)
|
||||
errln("Expected getISOCountries to return 250 countries; it returned " + test.length);
|
||||
else {
|
||||
for (int i = 0; i < spotCheck2.length; i++) {
|
||||
int j;
|
||||
|
@ -7019,3 +7019,11 @@ FormatData/bg/DateTimePatterns/4=dd MMMM y, EEEE
|
||||
FormatData/bg/DateTimePatterns/5=dd MMMM y
|
||||
FormatData/bg/DateTimePatterns/6=dd.MM.yyyy
|
||||
FormatData/bg/DateTimePatterns/7=dd.MM.yy
|
||||
|
||||
# bug 7085757
|
||||
CurrencyNames//SSP=SSP
|
||||
CurrencyNames//ssp=South Sudanese Pound
|
||||
CurrencyNames//xsu=Sucre
|
||||
CurrencyNames//xua=ADB Unit of Account
|
||||
LocaleNames//SS=South Sudan
|
||||
LocaleNames/en/SS=South Sudan
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -34,7 +34,7 @@
|
||||
* 6509039 6609737 6610748 6645271 6507067 6873931 6450945 6645268 6646611
|
||||
* 6645405 6650730 6910489 6573250 6870908 6585666 6716626 6914413 6916787
|
||||
* 6919624 6998391 7019267 7020960 7025837 7020583 7036905 7066203 7101495
|
||||
* 7003124
|
||||
* 7003124 7085757
|
||||
* @summary Verify locale data
|
||||
*
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user