diff --git a/.hgtags b/.hgtags index 44629768555..6a29a55b9a1 100644 --- a/.hgtags +++ b/.hgtags @@ -85,3 +85,5 @@ c4c8a5bc54f66abc68cd185d9294042121922154 jdk7-b99 044d31b99ef5609389fc771c422e722e5e224228 jdk7-b108 e02b4d709e177d08d56130a4bc68061e4bbacc7d jdk7-b109 a6442d6bc38a44152e0662688213ce4d2701f42a jdk7-b110 +69f3edf083477955b5bd2f754252c7504167d8e1 jdk7-b111 +f960f117f1623629f64203e2b09a92a8f6f14ff5 jdk7-b112 diff --git a/.hgtags-top-repo b/.hgtags-top-repo index ed1b0e1d28d..ea876d36fc7 100644 --- a/.hgtags-top-repo +++ b/.hgtags-top-repo @@ -85,3 +85,5 @@ f8be576feefce0c6695f188ef97ec16b73ad9cfd jdk7-b104 140fdef4ddf52244013b6157dc542cd9f677bb6f jdk7-b108 81dfc728d7bb7e1fff4a4dc6d0f7cea5a3315667 jdk7-b109 2a02d4a6955c7c078aee9a604cb3be409800d82c jdk7-b110 +9702d6fef68e17533ee7fcf5923b11ead3e912ce jdk7-b111 +b852103caf73da70068473777ae867a457bb3ae1 jdk7-b112 diff --git a/corba/.hgtags b/corba/.hgtags index ed251e3bdc2..8e9d2589f9a 100644 --- a/corba/.hgtags +++ b/corba/.hgtags @@ -85,3 +85,5 @@ a56d734a1e970e1a21a8f4feb13053e9a33674c7 jdk7-b100 8d810527b499a67153365db74421a03c12b46f35 jdk7-b108 c3dd858e09b20206459d9e7b0ead99d27ab00eab jdk7-b109 0e1f80fda2271f53d4bbb59ec3f301dfbcef6a0a jdk7-b110 +640fa4d4e2ad4c2d7e4815c955026740d8c52b7a jdk7-b111 +cc67fdc4fee9a5b25caee4e71b51a8ff24ae7d1a jdk7-b112 diff --git a/corba/make/Makefile b/corba/make/Makefile index 8501686c411..b8a71915079 100644 --- a/corba/make/Makefile +++ b/corba/make/Makefile @@ -61,7 +61,6 @@ ABS_OUTPUTDIR = $(call FullPath,$(OUTPUTDIR)) CLASSES_DIR = $(BUILD_DIR)/classes GENSRC_DIR = $(BUILD_DIR)/gensrc -BIN_DIR = $(DIST_DIR)/bin LIB_DIR = $(DIST_DIR)/lib #----- diff --git a/corba/make/common/Defs-linux.gmk b/corba/make/common/Defs-linux.gmk index 785cd205302..a5ef1d36b29 100644 --- a/corba/make/common/Defs-linux.gmk +++ b/corba/make/common/Defs-linux.gmk @@ -28,306 +28,10 @@ # targeted to Linux. Should not contain any rules. # -# Warning: the following variables are overriden by Defs.gmk. Set -# values will be silently ignored: -# CFLAGS (set $(OTHER_CFLAGS) instead) -# CPPFLAGS (set $(OTHER_CPPFLAGS) instead) -# CXXFLAGS (set $(OTHER_CXXFLAGS) instead) -# LDFLAGS (set $(OTHER_LDFAGS) instead) -# LDLIBS (set $(EXTRA_LIBS) instead) -# LDLIBS_COMMON (set $(EXTRA_LIBS) instead) - # Get shared JDK settings include $(BUILDDIR)/common/shared/Defs.gmk -# Part of INCREMENTAL_BUILD mechanism. -# Compiler emits things like: path/file.o: file.h -# We want something like: relative_path/file.o relative_path/file.d: file.h -CC_DEPEND = -MM -CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g' - ifndef PLATFORM_SRC PLATFORM_SRC = $(TOPDIR)/src/solaris endif # PLATFORM_SRC -# platform specific include files -PLATFORM_INCLUDE_NAME = $(PLATFORM) -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME) - -# suffix used for make dependencies files. -DEPEND_SUFFIX = d -# The suffix applied to the library name for FDLIBM -FDDLIBM_SUFFIX = a -# The suffix applied to scripts (.bat for windows, nothing for unix) -SCRIPT_SUFFIX = -# CC compiler object code output directive flag value -CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required! -CC_PROGRAM_OUTPUT_FLAG = -o #trailing blank required! - -# -# Default HPI libraries. Build will build only native, unless -# overriden at the make command line. This makes it convenient for -# people doing, say, a pthreads port -- they can create a posix -# directory here, and say "gnumake HPIS=posix" at the top -# level. -# -HPIS = native - -# -# Default optimization -# -CC_HIGHEST_OPT = -O3 -CC_HIGHER_OPT = -O3 -CC_LOWER_OPT = -O2 -CC_NO_OPT = - -ifeq ($(PRODUCT), java) - _OPT = $(CC_HIGHER_OPT) -else - _OPT = $(CC_LOWER_OPT) - CPPFLAGS_DBG += -DLOGGING -endif - -# For all platforms, do not omit the frame pointer register usage. -# We need this frame pointer to make it easy to walk the stacks. -# This should be the default on X86, but ia64 and amd64 may not have this -# as the default. -CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_ia64 += -fno-omit-frame-pointer -D_LITTLE_ENDIAN -CFLAGS_REQUIRED_sparcv9 += -m64 -mcpu=v9 -LDFLAGS_COMMON_sparcv9 += -m64 -mcpu=v9 -CFLAGS_REQUIRED_sparc += -m32 -mcpu=v9 -LDFLAGS_COMMON_sparc += -m32 -mcpu=v9 -ifeq ($(ZERO_BUILD), true) - CFLAGS_REQUIRED = $(ZERO_ARCHFLAG) - ifeq ($(ZERO_ENDIANNESS), little) - CFLAGS_REQUIRED += -D_LITTLE_ENDIAN - endif - LDFLAGS_COMMON += $(ZERO_ARCHFLAG) -else - CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH)) - LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH)) -endif - -# Add in platform specific optimizations for all opt levels -CC_HIGHEST_OPT += $(_OPT_$(ARCH)) -CC_HIGHER_OPT += $(_OPT_$(ARCH)) -CC_LOWER_OPT += $(_OPT_$(ARCH)) - -# If NO_OPTIMIZATIONS is defined in the environment, turn all optimzations off -ifdef NO_OPTIMIZATIONS - CC_HIGHEST_OPT = $(CC_NO_OPT) - CC_HIGHER_OPT = $(CC_NO_OPT) - CC_LOWER_OPT = $(CC_NO_OPT) -endif - -# -# Selection of warning messages -# -GCC_INHIBIT = -Wno-unused -Wno-parentheses -GCC_STYLE = -GCC_WARNINGS = -W -Wall $(GCC_STYLE) $(GCC_INHIBIT) - -# -# Treat compiler warnings as errors, if warnings not allowed -# -ifeq ($(COMPILER_WARNINGS_FATAL),true) - GCC_WARNINGS += -Werror -endif - -# -# Misc compiler options -# -ifeq ($(ARCH),ppc) - CFLAGS_COMMON = -fsigned-char -else # ARCH - CFLAGS_COMMON = -fno-strict-aliasing -endif # ARCH -PIC_CODE_LARGE = -fPIC -PIC_CODE_SMALL = -fpic -GLOBAL_KPIC = $(PIC_CODE_LARGE) -ifeq ($(ARCH), amd64) - CFLAGS_COMMON += $(GLOBAL_KPIC) $(GCC_WARNINGS) -pipe -else - CFLAGS_COMMON += $(GLOBAL_KPIC) $(GCC_WARNINGS) -endif - -# Linux 64bit machines use Dwarf2, which can be HUGE, have fastdebug use -g1 -DEBUG_FLAG = -g -ifeq ($(FASTDEBUG), true) - ifeq ($(ARCH_DATA_MODEL), 64) - DEBUG_FLAG = -g1 - endif -endif - -CFLAGS_OPT = $(POPT) -CFLAGS_DBG = $(DEBUG_FLAG) -CFLAGS_COMMON += $(CFLAGS_REQUIRED) - -CXXFLAGS_COMMON = $(GLOBAL_KPIC) -DCC_NOEX $(GCC_WARNINGS) -CXXFLAGS_OPT = $(POPT) -CXXFLAGS_DBG = $(DEBUG_FLAG) -CXXFLAGS_COMMON += $(CFLAGS_REQUIRED) - -# FASTDEBUG: Optimize the code in the -g versions, gives us a faster debug java -ifeq ($(FASTDEBUG), true) - CFLAGS_DBG += $(CC_LOWER_OPT) - CXXFLAGS_DBG += $(CC_LOWER_OPT) -endif - -CPP_ARCH_FLAGS = -DARCH='"$(ARCH)"' - -# Alpha arch does not like "alpha" defined (potential general arch cleanup issue here) -ifneq ($(ARCH),alpha) - CPP_ARCH_FLAGS += -D$(ARCH) -else - CPP_ARCH_FLAGS += -D_$(ARCH)_ -endif - -CPPFLAGS_COMMON = $(CPP_ARCH_FLAGS) -DLINUX $(VERSION_DEFINES) \ - -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT - -ifeq ($(ARCH_DATA_MODEL), 64) -CPPFLAGS_COMMON += -D_LP64=1 -endif - -CPPFLAGS_OPT = -CPPFLAGS_DBG = -DDEBUG - -ifdef LIBRARY - # Libraries need to locate other libraries at runtime, and you can tell - # a library where to look by way of the dynamic runpaths (RPATH or RUNPATH) - # buried inside the .so. The $ORIGIN says to look relative to where - # the library itself is and it can be followed with relative paths from - # that. By default we always look in $ORIGIN, optionally we add relative - # paths if the Makefile sets LD_RUNPATH_EXTRAS to those relative paths. - # On Linux we add a flag -z origin, not sure if this is necessary, but - # doesn't seem to hurt. - # The environment variable LD_LIBRARY_PATH will over-ride these runpaths. - # Try: 'readelf -d lib*.so' to see these settings in a library. - # - LDFLAGS_COMMON += -Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$ORIGIN - LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=-Xlinker -z -Xlinker origin -Xlinker -rpath -Xlinker \$$ORIGIN/%) -endif - -EXTRA_LIBS += -lc - -LDFLAGS_DEFS_OPTION = -Xlinker -z -Xlinker defs -LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION) - -# -# -L paths for finding and -ljava -# -LDFLAGS_OPT = -Xlinker -O1 -LDFLAGS_COMMON += -L$(LIBDIR)/$(LIBARCH) -LDFLAGS_COMMON += -Wl,-soname=$(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX) - -# -# -static-libgcc is a gcc-3 flag to statically link libgcc, gcc-2.9x always -# statically link libgcc but will print a warning with the flag. We don't -# want the warning, so check gcc version first. -# -CC_VER_MAJOR := $(shell $(CC) -dumpversion | $(SED) 's/egcs-//' | $(CUT) -d'.' -f1) -ifeq ("$(CC_VER_MAJOR)", "3") -OTHER_LDFLAGS += -static-libgcc -endif - -# Automatic precompiled header option to use (if COMPILE_APPROACH=batch) -# (See Rules.gmk) The gcc 5 compiler might have an option for this? -AUTOMATIC_PCH_OPTION = - -# -# Post Processing of libraries/executables -# -ifeq ($(VARIANT), OPT) - ifneq ($(NO_STRIP), true) - # Debug 'strip -g' leaves local function Elf symbols (better stack traces) - POST_STRIP_PROCESS = $(STRIP) -g - endif -endif - -# -# Use: ld $(LD_MAPFILE_FLAG) mapfile *.o -# -LD_MAPFILE_FLAG = -Xlinker --version-script -Xlinker - -# -# Support for Quantify. -# -ifdef QUANTIFY -QUANTIFY_CMD = quantify -QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes -LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS) -endif - -# -# Path and option to link against the VM, if you have to. Note that -# there are libraries that link against only -ljava, but they do get -# -L to the -ljvm, this is because -ljava depends on -ljvm, whereas -# the library itself should not. -# -VM_NAME = server -JVMLIB = -L$(BOOTDIR)/jre/lib/$(LIBARCH)/$(VM_NAME) -ljvm -JAVALIB = -L$(BOOTDIR)/jre/lib/$(LIBARCH) -ljava $(JVMLIB) - -# -# We want to privatize JVM symbols on Solaris. This is so the user can -# write a function called FindClass and this should not override the -# FindClass that is inside the JVM. At this point in time we are not -# concerned with other JNI libraries because we hope that there will -# not be as many clashes there. -# -PRIVATIZE_JVM_SYMBOLS = false - -USE_PTHREADS = true -override ALT_CODESET_KEY = _NL_CTYPE_CODESET_NAME -override AWT_RUNPATH = -override HAVE_ALTZONE = false -override HAVE_FILIOH = false -override HAVE_GETHRTIME = false -override HAVE_GETHRVTIME = false -override HAVE_SIGIGNORE = true -override LEX_LIBRARY = -lfl -ifeq ($(STATIC_CXX),true) -override LIBCXX = -Wl,-Bstatic -lstdc++ -lgcc -Wl,-Bdynamic -else -override LIBCXX = -lstdc++ -endif -override LIBPOSIX4 = -override LIBSOCKET = -override LIBTHREAD = -override MOOT_PRIORITIES = true -override NO_INTERRUPTIBLE_IO = true -override OPENWIN_HOME = /usr/X11R6 -ifeq ($(ARCH), amd64) -override OPENWIN_LIB = $(OPENWIN_HOME)/lib64 -else -override OPENWIN_LIB = $(OPENWIN_HOME)/lib -endif -override OTHER_M4FLAGS = -D__GLIBC__ -DGNU_ASSEMBLER -override SUN_CMM_SUBDIR = -override THREADS_FLAG = native -override USE_GNU_M4 = true -override USING_GNU_TAR = true -override WRITE_LIBVERSION = false - -# USE_EXECNAME forces the launcher to look up argv[0] on $PATH, and put the -# resulting resolved absolute name of the executable in the environment -# variable EXECNAME. That executable name is then used that to locate the -# installation area. -override USE_EXECNAME = true - -# If your platform has DPS, it will have Type1 fonts too, in which case -# it is best to enable DPS support until such time as 2D's rasteriser -# can fully handle Type1 fonts in all cases. Default is "yes". -# HAVE_DPS should only be "no" if the platform has no DPS headers or libs -# DPS (Displayable PostScript) is available on Solaris machines -HAVE_DPS = no - -# -# Japanese manpages -# -JA_SOURCE_ENCODING = eucJP -JA_TARGET_ENCODINGS = eucJP - diff --git a/corba/make/common/Defs-solaris.gmk b/corba/make/common/Defs-solaris.gmk index d7c5a42362c..eb38771dfab 100644 --- a/corba/make/common/Defs-solaris.gmk +++ b/corba/make/common/Defs-solaris.gmk @@ -28,16 +28,6 @@ # targeted to Solaris. Should not contain any rules. # -# Warning: the following variables are overridden by Defs.gmk. Set -# values will be silently ignored: -# CFLAGS (set $(OTHER_CFLAGS) instead) -# CPPFLAGS (set $(OTHER_CPPFLAGS) instead) -# CXXFLAGS (set $(OTHER_CXXFLAGS) instead) -# LDFLAGS (set $(OTHER_LDFAGS) instead) -# LDLIBS (set $(EXTRA_LIBS) instead) -# LDLIBS_COMMON (set $(EXTRA_LIBS) instead) -# LINTFLAGS (set $(OTHER_LINTFLAGS) instead) - # Get shared JDK settings include $(BUILDDIR)/common/shared/Defs.gmk @@ -45,600 +35,3 @@ ifndef PLATFORM_SRC PLATFORM_SRC = $(TOPDIR)/src/solaris endif # PLATFORM_SRC -# platform specific include files -PLATFORM_INCLUDE_NAME = $(PLATFORM) -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME) - -# suffix used for make dependencies files -DEPEND_SUFFIX = d -# suffix used for lint files -LINT_SUFFIX = ln -# The suffix applied to the library name for FDLIBM -FDDLIBM_SUFFIX = a -# The suffix applied to scripts (.bat for windows, nothing for unix) -SCRIPT_SUFFIX = -# CC compiler object code output directive flag value -CC_OBJECT_OUTPUT_FLAG = -o #trailing blank required! -CC_PROGRAM_OUTPUT_FLAG = -o #trailing blank required! - -# -# Default HPI libraries. Build will build only native unless -# overriden at the make command line. This makes it convenient for -# people doing, say, a pthreads port -- they can create a posix -# directory here, and say "gnumake HPIS=posix" at the top -# level. -# -HPIS = native - -# -# Java default optimization (-x04/-O2) etc. Applies to the VM. -# -ifeq ($(PRODUCT), java) - _OPT = $(CC_HIGHER_OPT) -else - _OPT = $(CC_LOWER_OPT) - CPPFLAGS_DBG += -DLOGGING -DDBINFO -endif - -# -# If -Xa is in CFLAGS_COMMON it will end up ahead of $(POPT) for the -# optimized build, and that ordering of the flags completely freaks -# out cc. Hence, -Xa is instead in each CFLAGS variant. -# -# The more unusual options to the Sun C compiler: -# -v Stricter type checking, more error checking -# (To turn ALL warnings into fatals, use -errwarn=%all) -# -xstrconst Place string literals and constants in read-only area -# (means you can't write on your string literals) -# -xs Force debug information (stabs) into the .so or a.out -# (makes the library/executable debuggable without the -# .o files needing to be around, but at a space cost) -# -g & -O If you add the -g option to the optimized compiles -# you will get better stack retraces, the code is -# still optimized. This includes a space cost too. -# -xc99=%none Do NOT allow for c99 extensions to be used. -# e.g. declarations must precede statements -# -xCC Allow the C++ style of comments in C: // -# Required with many of the source files. -# -mt Assume multi-threaded (important) -# - -# -# Debug flag for C and C++ compiler -# -CFLAGS_DEBUG_OPTION=-g -CXXFLAGS_DEBUG_OPTION=-g - -# Turn off -g if we are doing tcov build -ifdef TCOV_BUILD - CFLAGS_DEBUG_OPTION= - CXXFLAGS_DEBUG_OPTION= -endif - -# FASTDEBUG: Optimize the -g builds, gives us a faster debug java -# If true adds -O to the debug compiles. This allows for any assert -# tests to remain and debug checking. The resulting code is faster -# but less debuggable. Stack traces are still valid, although only -# approximate line numbers are given. Printing of local variables -# during a debugging session is not possible, but stepping and -# printing of global or static variables should be possible. -# Performance/size of files should be about the same, maybe smaller. -# -ifeq ($(FASTDEBUG), true) - CC_FASTDEBUG_OPT = $(CC_LOWER_OPT) - CFLAGS_DEBUG_OPTION = -g $(CC_FASTDEBUG_OPT) - CXXFLAGS_DEBUG_OPTION = -g0 $(CC_FASTDEBUG_OPT) -endif - -CFLAGS_COMMON = -v -mt -L$(OBJDIR) -xc99=%none -CFLAGS_COMMON += -xCC -CFLAGS_COMMON += -errshort=tags -CFLAGS_OPT = $(POPT) -CFLAGS_DBG = $(CFLAGS_DEBUG_OPTION) -CFLAGS_COMMON += -Xa $(CFLAGS_REQUIRED) - -# Assume MT behavior all the time (important) -CXXFLAGS_COMMON = -mt - -# Assume no C++ exceptions are used -CXXFLAGS_COMMON += -features=no%except -DCC_NOEX - -# For C++, these options tell it to assume nothing about locating libraries -# either at compile time, or at runtime. Use of these options will likely -# require the use of -L and -R options to indicate where libraries will -# be found at compile time (-L) and at runtime (-R). -# The /usr/lib location comes for free, so no need to specify that one. -# Note: C is much simplier and there is no need for these options. This -# is mostly needed to avoid dependencies on libraries in the -# Compiler install area, also see LIBCXX and LIBM. -CXXFLAGS_COMMON += -norunpath -xnolib - -# -# Treat compiler warnings as errors, if requested -# -ifeq ($(COMPILER_WARNINGS_FATAL),true) - CFLAGS_COMMON += -errwarn=%all - CXXFLAGS_COMMON += -errwarn=%all -endif - -CXXFLAGS_OPT = $(POPT) -CXXFLAGS_DBG = $(CXXFLAGS_DEBUG_OPTION) -CXXFLAGS_COMMON += $(CFLAGS_REQUIRED) - -# Add -xstrconst to the library compiles. This forces all string -# literals into the read-only data section, which prevents them from -# being written to and increases the runtime pages shared on the system. -# -ifdef LIBRARY - CFLAGS_COMMON +=-xstrconst -endif - -# Source browser database -# -# COMPILE_WITH_SB -# If defined adds -xsb to compiles and creates a -# source browsing database during compilation. -# -ifdef COMPILE_WITH_SB - ifeq ($(LIBRARY), java) - CFLAGS_DBG += -xsb - endif -endif - -# Lint Flags: -# -Xa ANSI C plus K&R, favor ANSI rules -# -Xarch=XXX Same as 'cc -xarch=XXX' -# -fd report on old style func defs -# -errchk=structarg report on 64bit struct args by value -# -errchk=longptr64 report on 64bit to 32bit issues (ignores casts) -# -errchk=parentheses report on suggested use of extra parens -# -v suppress unused args -# -x suppress unused externs -# -u suppress extern func/vars used/defined -# -errfmt=simple use one line errors with position info - -LINTFLAGS_COMMON = -Xa -LINTFLAGS_COMMON += -fd -LINTFLAGS_COMMON += -errchk=structarg,longptr64,parentheses -LINTFLAGS_COMMON += -v -LINTFLAGS_COMMON += -x -LINTFLAGS_COMMON += -u -LINTFLAGS_COMMON += -errfmt=simple -LINTFLAGS_OPT = -LINTFLAGS_DBG = - -# The -W0,-noglobal tells the compiler to NOT generate mangled global -# ELF data symbols for file local static data. -# This can break fix&continue, but we'd rather do the same compilations -# for deliverable bits as we do for non-deliverable bits -# Tell the compilers to never generate globalized names, all the time. -CFLAGS_COMMON += -W0,-noglobal - -# Arch specific settings (determines type of .o files and instruction set) -ifeq ($(ARCH_FAMILY), sparc) - ifdef VIS_NEEDED - XARCH_VALUE/32=v8plusa - XARCH_VALUE/64=v9a - else - # Someday this should change to improve optimization on UltraSPARC - # and abandon the old v8-only machines like the SPARCstation 10. - # Indications with Mustang is that alacrity runs do not show a - # big improvement using v8plus over v8, but other benchmarks might. - XARCH_VALUE/32=v8 - XARCH_VALUE/64=v9 - endif -endif -ifeq ($(ARCH_FAMILY), i586) - XARCH_VALUE/64=amd64 - XARCH_VALUE/32= -endif - -# Arch value based on current data model being built -XARCH_VALUE=$(XARCH_VALUE/$(ARCH_DATA_MODEL)) -ifneq ($(XARCH_VALUE), ) - # The actual compiler -xarch options to use - XARCH_OPTION/32 = -xarch=$(XARCH_VALUE/32) - XARCH_OPTION/64 = -xarch=$(XARCH_VALUE/64) - XARCH_OPTION = $(XARCH_OPTION/$(ARCH_DATA_MODEL)) -endif - -# If we have a specific -xarch value to use, add it -ifdef XARCH_OPTION - CFLAGS_COMMON += $(XARCH_OPTION) - CXXFLAGS_COMMON += $(XARCH_OPTION) - ASFLAGS_COMMON += $(XARCH_OPTION) - EXTRA_LIBS += $(XARCH_OPTION) - LINTFLAGS_COMMON += -Xarch=$(XARCH_VALUE) -endif - -# -# uncomment the following to build with PERTURBALOT set -# -# OTHER_CFLAGS += -DPERTURBALOT -# - -CPPFLAGS_COMMON = -D$(ARCH_FAMILY) -D__solaris__ -D_REENTRANT -CPPFLAGS_OPT = -CPPFLAGS_DBG = -DDEBUG - -ifeq ($(ARCH_FAMILY), i586) - # The macro _LITTLE_ENDIAN needs to be defined the same to avoid the - # Sun C compiler warning message: warning: macro redefined: _LITTLE_ENDIAN - # (The Solaris X86 system defines this in file /usr/include/sys/isa_defs.h). - # Note: -Dmacro is the same as #define macro 1 - # -Dmacro= is the same as #define macro - # - CPPFLAGS_COMMON += -DcpuIntel -D_LITTLE_ENDIAN= -D$(LIBARCH) - # Turn off a superfluous compiler error message on Intel - CFLAGS_COMMON += -erroff=E_BAD_PRAGMA_PACK_VALUE -endif - -# Java memory management is based on memory mapping by default, but a -# system only assuming malloc/free can be built by adding -DUSE_MALLOC - -CPPFLAGS_COMMON += -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS -CPPFLAGS_OPT += -DTRIMMED - -LDFLAGS_DEFS_OPTION = -z defs -LDFLAGS_COMMON += $(LDFLAGS_DEFS_OPTION) - -# -# -L paths for finding and -ljava -# -LDFLAGS_COMMON += -L$(LIBDIR)/$(LIBARCH) -LDFLAGS_OPT = -LDFLAGS_DBG = - -# -# We never really want the incremental linker, ever -# The -xildoff option tells Sun's compilers to NOT use incremental linker -# -LDFLAGS_COMMON += -xildoff - -ifdef LIBRARY - # Libraries need to locate other libraries at runtime, and you can tell - # a library where to look by way of the dynamic runpaths (RPATH or RUNPATH) - # buried inside the .so. The $ORIGIN says to look relative to where - # the library itself is and it can be followed with relative paths from - # that. By default we always look in $ORIGIN, optionally we add relative - # paths if the Makefile sets LD_RUNPATH_EXTRAS to those relative paths. - # The environment variable LD_LIBRARY_PATH will over-ride these runpaths. - # Try: 'dump -Lv lib*.so' to see these settings in a library. - # - LDFLAGS_COMMON += -R\$$ORIGIN - LDFLAGS_COMMON += $(LD_RUNPATH_EXTRAS:%=-R\$$ORIGIN/%) -endif - -EXTRA_LIBS += -lc - -# Postprocessing is done on the images directories only -# -ifeq ($(VARIANT), OPT) - ifeq ($(PARTIAL_GPROF), true) - NO_STRIP = true - endif - ifeq ($(GPROF), true) - NO_STRIP = true - endif - ifneq ($(NO_STRIP), true) - # Debug 'strip -x' leaves local function Elf symbols (better stack traces) - POST_STRIP_PROCESS = $(STRIP) -x - endif -endif -POST_MCS_PROCESS=$(MCS) -d -a "JDK $(FULL_VERSION)" - -# -# Sun C compiler will take -M and pass it on to ld. -# Usage: ld $(LD_MAPFILE_FLAG) mapfile *.o -# -ifeq ($(CC_VERSION),gcc) -LD_MAPFILE_FLAG = -Xlinker -M -Xlinker -else -LD_MAPFILE_FLAG = -M -endif - -# -# Variables globally settable from the make command line (default -# values in brackets): -# GPROF (false) -# Eg: % gnumake GPROF=true -GPROF = false -ifeq ($(GPROF), true) - CFLAGS_COMMON += -DGPROF -xpg - EXTRA_LIBS += -xpg -endif - -# PARTIAL_GPROF is to be used ONLY during compilation - it should not -# appear during linking of libraries or programs. It also should -# prevent linking with -z defs to allow a symbol to remain undefined. -# -PARTIAL_GPROF = false -ifeq ($(PARTIAL_GPROF), true) - CFLAGS_GPROF += -xpg - LDFLAGS_DEFS_OPTION = -z nodefs -endif - -# -# For a TCOV build we add in the TCOV_OPTION -# -ifdef TCOV_BUILD - TCOV_OPTION = -xprofile=tcov - LDFLAGS_COMMON += $(TCOV_OPTION) -Kpic - CFLAGS_COMMON += $(TCOV_OPTION) - CXXFLAGS_COMMON += $(TCOV_OPTION) - EXTRA_LIBS += $(TCOV_OPTION) - LDNOMAP=true -endif - -# -# Solaris only uses native threads. -# -THREADS_FLAG= native -THREADS_DIR= threads - -# -# Support for Quantify. -# -ifdef QUANTIFY - QUANTIFY_CMD = quantify - QUANTIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes - LINK_PRE_CMD = $(QUANTIFY_CMD) $(QUANTIFY_OPTIONS) - ifdef LIBRARY - CFLAGS_COMMON += -K PIC - endif -endif - -# -# Support for Purify. -# -ifdef PURIFY - PURIFY_CMD = /net/suntools.eng/export/tools/sparc/bin/purify - PURIFY_OPTIONS = -cache-dir=/tmp/quantify -always-use-cache-dir=yes - LINK_PRE_CMD = $(PURIFY_CMD) $(PURIFY_OPTIONS) - ifdef LIBRARY - CFLAGS_COMMON += -K PIC - endif -endif - -# -# Different "levels" of optimization. -# -ifeq ($(CC_VERSION),gcc) - CC_HIGHEST_OPT = -O3 - CC_HIGHER_OPT = -O3 - CC_LOWER_OPT = -O2 - CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer - CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer - # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) - # (See Rules.gmk) May need to wait for gcc 5? - AUTOMATIC_PCH_OPTION = -else - # Highest could be -xO5, but indications are that -xO5 should be reserved - # for a per-file use, on sources with known performance impacts. - CC_HIGHEST_OPT = -xO4 - CC_HIGHER_OPT = -xO4 - CC_LOWER_OPT = -xO2 - # - # WARNING: Use of _OPT=$(CC_HIGHEST_OPT) in your Makefile needs to be - # done with care, there are some assumptions below that need to - # be understood about the use of pointers, and IEEE behavior. - # - # Use non-standard floating point mode (not IEEE 754) - CC_HIGHEST_OPT += -fns - # Do some simplification of floating point arithmetic (not IEEE 754) - CC_HIGHEST_OPT += -fsimple - # Use single precision floating point with 'float' - CC_HIGHEST_OPT += -fsingle - # Assume memory references via basic pointer types do not alias - # (Source with excessing pointer casting and data access with mixed - # pointer types are not recommended) - CC_HIGHEST_OPT += -xalias_level=basic - # Use intrinsic or inline versions for math/std functions - # (If you expect perfect errno behavior, do not use this) - CC_HIGHEST_OPT += -xbuiltin=%all - # Loop data dependency optimizations (need -xO3 or higher) - CC_HIGHEST_OPT += -xdepend - # Pointer parameters to functions do not overlap - # (Similar to -xalias_level=basic usage, but less obvious sometimes. - # If you pass in multiple pointers to the same data, do not use this) - CC_HIGHEST_OPT += -xrestrict - # Inline some library routines - # (If you expect perfect errno behavior, do not use this) - CC_HIGHEST_OPT += -xlibmil - # Use optimized math routines - # (If you expect perfect errno behavior, do not use this) - # Can cause undefined external on Solaris 8 X86 on __sincos, removing for now - # CC_HIGHEST_OPT += -xlibmopt - ifeq ($(ARCH_FAMILY), sparc) - # Assume at most 8byte alignment, raise SIGBUS on error - ### Presents an ABI issue with customer JNI libs? - ####CC_HIGHEST_OPT += -xmemalign=8s - # Automatic prefetch instructions, explicit prefetch macros - CC_HIGHEST_OPT += -xprefetch=auto,explicit - # Pick ultra as the chip to optimize to - CC_HIGHEST_OPT += -xchip=ultra - endif - ifeq ($(ARCH), i586) - # Pick pentium as the chip to optimize to - CC_HIGHEST_OPT += -xchip=pentium - endif - ifdef LIBRARY - # The Solaris CBE (Common Build Environment) requires that the use - # of appl registers be disabled when compiling a public library (or - # a library that's loaded by a public library) on sparc. - CFLAGS_REQUIRED_sparc += -xregs=no%appl - CFLAGS_REQUIRED_sparcv9 += -xregs=no%appl - endif - ifeq ($(shell $(EXPR) $(CC_VER) \> 5.6), 1) - # Do NOT use the frame pointer register as a general purpose opt register - CFLAGS_REQUIRED_i586 += -xregs=no%frameptr - CFLAGS_REQUIRED_amd64 += -xregs=no%frameptr - # We MUST allow data alignment of 4 for sparc V8 (32bit) - # Presents an ABI issue with customer JNI libs? We must be able to - # to handle 4byte aligned objects? (rare occurance, but possible?) - CFLAGS_REQUIRED_sparc += -xmemalign=4s - endif - # Just incase someone trys to use the SOS9 compilers - ifeq ($(CC_VER), 5.6) - # We MUST allow data alignment of 4 for sparc (sparcv9 is ok at 8s) - CFLAGS_REQUIRED_sparc += -xmemalign=4s - endif - # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) - # (See Rules.gmk) The SS11 -xpch=auto* options appear to be broken. - AUTOMATIC_PCH_OPTION = -endif -CC_NO_OPT = - -# If NO_OPTIMIZATIONS is defined in the environment, turn all optimzations off -ifdef NO_OPTIMIZATIONS - CC_HIGHEST_OPT = $(CC_NO_OPT) - CC_HIGHER_OPT = $(CC_NO_OPT) - CC_LOWER_OPT = $(CC_NO_OPT) -endif - -# Flags required all the time -CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH)) - -# Add processor specific options for optimizations -CC_HIGHEST_OPT += $(_OPT_$(ARCH)) -CC_HIGHER_OPT += $(_OPT_$(ARCH)) -CC_LOWER_OPT += $(_OPT_$(ARCH)) - -# Secret compiler optimization options that should be in the above macros -# but since they differ in format from C to C++, are added into the C or -# C++ specific macros for compiler flags. -# -# On i586 we need to tell the code generator to ALWAYS use a -# frame pointer. -ifeq ($(ARCH_FAMILY), i586) - # Note that in 5.7, this is done with -xregs=no%frameptr - ifeq ($(CC_VER), 5.5) - # It's not exactly clear when this optimization kicks in, the - # current assumption is -xO4 or greater and for C++ with - # the -features=no%except option and -xO4 and greater. - # Bottom line is, we ALWAYS want a frame pointer! - CXXFLAGS_OPT += -Qoption ube -Z~B - CFLAGS_OPT += -Wu,-Z~B - ifeq ($(FASTDEBUG), true) - CXXFLAGS_DBG += -Qoption ube -Z~B - CFLAGS_DBG += -Wu,-Z~B - endif - endif -endif -# -# Optimizer for sparc needs to be told not to do certain things -# related to frames or save instructions. -ifeq ($(ARCH_FAMILY), sparc) - # NOTE: Someday the compilers will provide a high-level option for this. - # Use save instructions instead of add instructions - # This was an optimization starting in SC5.0 that made it hard for us to - # find the "save" instruction (which got turned into an "add") - CXXFLAGS_OPT += -Qoption cg -Qrm-s - CFLAGS_OPT += -Wc,-Qrm-s - ifeq ($(FASTDEBUG), true) - CXXFLAGS_DBG += -Qoption cg -Qrm-s - CFLAGS_DBG += -Wc,-Qrm-s - endif - # - # NOTE: Someday the compilers will provide a high-level option for this. - # Don't allow tail call code optimization. Started in SC5.0. - # We don't like code of this form: - # save - # - # call foo - # restore - # because we can't tell if the method will have a stack frame - # and register windows or not. - CXXFLAGS_OPT += -Qoption cg -Qiselect-T0 - CFLAGS_OPT += -Wc,-Qiselect-T0 - ifeq ($(FASTDEBUG), true) - CXXFLAGS_DBG += -Qoption cg -Qiselect-T0 - CFLAGS_DBG += -Wc,-Qiselect-T0 - endif -endif - -# -# Path and option to link against the VM, if you have to. Note that -# there are libraries that link against only -ljava, but they do get -# -L to the -ljvm, this is because -ljava depends on -ljvm, whereas -# the library itself should not. -# -VM_NAME = server -JVMLIB = -L$(BOOTDIR)/jre/lib/$(LIBARCH)/server -ljvm -JAVALIB = - -# Part of INCREMENTAL_BUILD mechanism. -# Compiler emits things like: path/file.o: file.h -# We want something like: relative_path/file.o relative_path/file.d: file.h -# In addition on Solaris, any include file starting with / is deleted, -# this gets rid of things like /usr/include files, which never change. -CC_DEPEND = -xM1 -CC_DEPEND_FILTER = $(SED) -e '/:[ ]*[/]/d' -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)& $(dir $@)$*.$(DEPEND_SUFFIX)!g' | $(SORT) -u - -# Location of openwin libraries (do we really need this anymore?) -OPENWIN_HOME = /usr/openwin -OPENWIN_LIB = $(OPENWIN_HOME)/lib$(ISA_DIR) - -# Runtime graphics library search paths... -OPENWIN_RUNTIME_LIB = /usr/openwin/lib$(ISA_DIR) -AWT_RUNPATH = -R/usr/dt/lib$(ISA_DIR) -R$(OPENWIN_RUNTIME_LIB) - -# C++ Runtime library (libCrun.so), use instead of -lCrun. -# Originally used instead of -lCrun to guarantee use of the system -# .so version and not the .a or .so that came with the compilers. -# With the newer compilers this could probably change back to -lCrun but -# in general this is ok to continue to do. -LIBCXX = /usr/lib$(ISA_DIR)/libCrun.so.1 - -# Math Library (libm.so), do not use -lm. -# There might be two versions of libm.so on the build system: -# libm.so.1 and libm.so.2, and we want libm.so.1. -# Depending on the Solaris release being used to build with, -# /usr/lib/libm.so could point at a libm.so.2, so we are -# explicit here so that the libjvm.so you have built will work on an -# older Solaris release that might not have libm.so.2. -# This is a critical factor in allowing builds on Solaris 10 or newer -# to run on Solaris 8 or 9. -# -# Note: Historically there was also a problem picking up a static version -# of libm.a from the compiler area, but that problem has gone away -# with the newer compilers. Use of libm.a would cause .so bloat. -# -LIBM = /usr/lib$(ISA_DIR)/libm.so.1 - -# Socket library -LIBSOCKET = -lsocket - -# GLOBAL_KPIC: If set means all libraries are PIC, position independent code -# EXCEPT for select compiles -# If a .o file is compiled non-PIC then it should be forced -# into the RW data segment with a mapfile option. This is done -# with object files which generated from .s files. -# The -ztext enforces that no relocations remain in the text segment -# so that it remains purely read-only for optimum system performance. -# Some libraries may use a smaller size (13bit -Kpic) on sparc instead of -# (32 bit -KPIC) and will override GLOBAL_KPIC appropriately. -# -PIC_CODE_LARGE = -KPIC -PIC_CODE_SMALL = -Kpic -ifndef TCOV_BUILD - GLOBAL_KPIC = $(PIC_CODE_LARGE) - CXXFLAGS_COMMON += $(GLOBAL_KPIC) - CFLAGS_COMMON += $(GLOBAL_KPIC) - LDFLAGS_COMMON += -ztext -endif # TCOV_BUILD - -# If your platform has DPS, it will have Type1 fonts too, in which case -# it is best to enable DPS support until such time as 2D's rasteriser -# can fully handle Type1 fonts in all cases. Default is "yes". -# HAVE_DPS should only be "no" if the platform has no DPS headers or libs -# DPS (Displayable PostScript) is available on Solaris machines - -HAVE_DPS = yes - -# -# Japanese manpages -# -JA_SOURCE_ENCODING = eucJP -JA_TARGET_ENCODINGS = eucJP UTF-8 PCK - diff --git a/corba/make/common/Defs-windows.gmk b/corba/make/common/Defs-windows.gmk index 7dc24d975da..cef6c6c60b8 100644 --- a/corba/make/common/Defs-windows.gmk +++ b/corba/make/common/Defs-windows.gmk @@ -31,363 +31,7 @@ # Get shared JDK settings include $(BUILDDIR)/common/shared/Defs.gmk -# CC compiler object code output directive flag value -CC_OBJECT_OUTPUT_FLAG = -Fo -CC_PROGRAM_OUTPUT_FLAG = -Fe - -# The suffix applied to the library name for FDLIBM -FDDLIBM_SUFFIX = lib -# The suffix applied to scripts (.bat for windows, nothing for unix) -SCRIPT_SUFFIX = .bat - -HPIS = windows -# LIB_LOCATION, which for windows identifies where .exe files go, may be -# set by each GNUmakefile. The default is BINDIR. -ifndef LIB_LOCATION - LIB_LOCATION = $(BINDIR) -endif # LIB_LOCATION - ifndef PLATFORM_SRC PLATFORM_SRC = $(TOPDIR)/src/windows endif # PLATFORM_SRC -# for backwards compatability, the old "win32" is used here instead of -# the more proper "windows" -PLATFORM_INCLUDE_NAME = win32 -PLATFORM_INCLUDE = $(INCLUDEDIR)/$(PLATFORM_INCLUDE_NAME) - -# The following DLL's are considered MS runtime libraries and should -# not to be REBASEd, see deploy/make/common/Release.gmk. -# msvcrt.dll, msvcrnn.dll [msvcr71 or msvcr80 or msvcr90] : Microsoft runtimes -MS_RUNTIME_LIBRARIES = msvcrt.dll -MSVCRNN_DLL = -ifeq ($(ARCH_DATA_MODEL), 32) - ifeq ($(COMPILER_VERSION), VS2003) - MSVCRNN_DLL = msvcr71.dll - MSVCPNN_DLL = msvcp71.dll - MS_RUNTIME_LIBRARIES += $(MSVCRNN_DLL) - endif - ifeq ($(COMPILER_VERSION), VS2005) - MSVCRNN_DLL = msvcr80.dll - MSVCPNN_DLL = msvcp80.dll - MS_RUNTIME_LIBRARIES += $(MSVCRNN_DLL) - endif - ifeq ($(COMPILER_VERSION), VS2008) - MSVCRNN_DLL = msvcr90.dll - MSVCPNN_DLL = msvcp90.dll - MS_RUNTIME_LIBRARIES += $(MSVCRNN_DLL) - endif - ifeq ($(COMPILER_VERSION), VS2010) - MSVCRNN_DLL = msvcr100.dll - MSVCPNN_DLL = msvcp100.dll - MS_RUNTIME_LIBRARIES += $(MSVCRNN_DLL) - endif -endif - -# C Compiler flag definitions - -# -# Default optimization -# -ifeq ($(CC_VERSION),msvc) - # Visual Studio .NET 2003 or VS2003 compiler option definitions: - # -O1 Favors reduced size over speed (-Og -Os -Oy -Ob2 -Gs -GF -Gy) - # -O2 Favors speed over reduced size (-Og -Oi -Ot -Oy -Ob2 -Gs -GF -Gy) - # -Ox Full optimization (use -O2) (-Og -Oi -Ot -Oy -Ob2) - # (Removed in Visual Studio 2005 or VS2005) - # -Ob2 More aggressive inlining - # -Og Global optimizations - # -Oi Replace some functions with intrinsic or special forms - # -Op Improve floating point calculations (disables some optimizations) - # (Replaced with -fp:precise in VS2005, /Op is default now) - # -Os Favor small code - # -Ot Favor faster code - # -Oy Frame pointer omission - # -GB Optimize for pentium (old VC6 option?) - # -G6 VS2003 version of -GB? - # -GF Pool strings in read-only memory - # -Gf Pool strings in read-write memory (the default) - # -Gs Controls stack probess - # -GS Adds buffer overflow checks on stacks - # (Default in VS2005) - # -GX Enables exception handling - # (Replaced with /EHsc in VS2005) - # -Gy Function level linking only - # - # NOTE: With VC6, -Ox included -Gs. - # NOTE: With VC6, -Ox, -O1, and -O2 used -Ob1, not -Ob2. - # NOTE: With VC6, -O1 and -O2 used -Gf, not -GF. - # - ifeq ($(COMPILER_VERSION), VC6) - # VC6 (6.2) msvc compiler (the way Tiger and early Mustang were built) - # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) - AUTOMATIC_PCH_OPTION = - GX_OPTION = -GX - ifeq ($(ARCH_DATA_MODEL), 32) - CC_HIGHEST_OPT = -Ox -Gy -Os -GB - CC_HIGHER_OPT = -Ox -Gy -Os -GB - CC_LOWER_OPT = -Ox -Gy -Os -GB - else - CC_HIGHEST_OPT = -Ox -Gy -Op - CC_HIGHER_OPT = -Ox -Gy -Op - CC_LOWER_OPT = -Ox -Gy -Op - endif - endif - ifeq ($(COMPILER_VERSION), VS2003) - # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) - AUTOMATIC_PCH_OPTION = -YX - # Also known as VC7 compiler - GX_OPTION = -GX - ifeq ($(ARCH_DATA_MODEL), 32) - # Lowered opt level to try and reduce footprint, dll size especially. - # Was: CC_HIGHEST_OPT = -O2 -G6 - # Was: CC_HIGHER_OPT = -O2 - CC_HIGHEST_OPT = -O2 - CC_HIGHER_OPT = -O1 - CC_LOWER_OPT = -O1 - else - CC_HIGHEST_OPT = -O2 -Op - CC_HIGHER_OPT = -O2 -Op - CC_LOWER_OPT = -O1 -Op - endif - endif - ifeq ($(COMPILER_VERSION), VS2005) - # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) - AUTOMATIC_PCH_OPTION = - # VS2005 compiler, only with Platform SDK right now? - GX_OPTION = -EHsc - ifeq ($(ARCH_DATA_MODEL), 32) - CC_HIGHEST_OPT = -O2 - CC_HIGHER_OPT = -O1 - CC_LOWER_OPT = -O1 - else - CC_HIGHEST_OPT = -O2 - CC_HIGHER_OPT = -O1 - CC_LOWER_OPT = -O1 - endif - endif - ifeq ($(COMPILER_VERSION), VS2008) - # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) - AUTOMATIC_PCH_OPTION = - GX_OPTION = -EHsc - ifeq ($(ARCH_DATA_MODEL), 32) - CC_HIGHEST_OPT = -O2 - CC_HIGHER_OPT = -O1 - CC_LOWER_OPT = -O1 - else - CC_HIGHEST_OPT = -O2 - CC_HIGHER_OPT = -O1 - CC_LOWER_OPT = -O1 - endif - endif - ifeq ($(COMPILER_VERSION), VS2010) - # Automatic precompiled header option to use (if COMPILE_APPROACH=batch) - AUTOMATIC_PCH_OPTION = - GX_OPTION = -EHsc - ifeq ($(ARCH_DATA_MODEL), 32) - CC_HIGHEST_OPT = -O2 - CC_HIGHER_OPT = -O1 - CC_LOWER_OPT = -O1 - else - CC_HIGHEST_OPT = -O2 - CC_HIGHER_OPT = -O1 - CC_LOWER_OPT = -O1 - endif - endif - CC_NO_OPT = -Od -else # CC_VERSION - # GCC not supported, but left for historical reference... - CC_HIGHEST_OPT = -O3 - CC_HIGHER_OPT = -O2 - CC_LOWER_OPT = -O2 - CC_NO_OPT = -endif - -# If NO_OPTIMIZATIONS is defined in the environment, turn all optimzations off -ifdef NO_OPTIMIZATIONS - CC_HIGHEST_OPT = $(CC_NO_OPT) - CC_HIGHER_OPT = $(CC_NO_OPT) - CC_LOWER_OPT = $(CC_NO_OPT) -endif - -ifeq ($(PRODUCT), java) - _OPT = $(CC_HIGHER_OPT) -else - _OPT = $(CC_LOWER_OPT) -endif - -# Select the runtime support library carefully, need to be consistent -# -# VS2003 compiler option definitions: -# -MD Use dynamic multi-threaded runtime library -# -MDd Use debug version (don't use, doesn't mix with -MD DLL's) -# -MT Use static multi-threaded runtime library (-ML is going away) -# -MTd Use static debug version (better than -MDd, no runtime issues) -# -D_DEBUG Change use of malloc/free/etc to use special debug ones (-MTd) -# -# NOTE: We also will use /D _STATIC_CPPLIB so we don't need msvcpnn.dll -# -ifeq ($(MS_RUNTIME_STATIC),true) - MS_RUNTIME_OPTION=-MT -else - MS_RUNTIME_OPTION=-MD -endif -# The _DEBUG macro option (changes things like malloc to use debug version) -MS_RUNTIME_DEBUG_OPTION= -MS_RC_DEBUG_OPTION= -# Externally set environment variable can force any build to use the debug vers -ifeq ($(MFC_DEBUG), true) - ifeq ($(MS_RUNTIME_STATIC),true) - MS_RUNTIME_OPTION=-MTd - else - # This MS debugging flag forces a dependence on the debug - # version of the runtime library (MSVCRTD.DLL), as does -MDd. - # We cannot re-distribute this debug runtime. - MS_RUNTIME_OPTION=-MDd - endif - MS_RUNTIME_DEBUG_OPTION= -D_DEBUG - MS_RC_DEBUG_OPTION= -d _DEBUG -endif - -# Always add _STATIC_CPPLIB definition -STATIC_CPPLIB_OPTION = /D _STATIC_CPPLIB -MS_RUNTIME_OPTION += $(STATIC_CPPLIB_OPTION) - -ifeq ($(CC_VERSION),msvc) - # VS2003 compiler option definitions: - # -Zi Cause *.pdb file to be created, full debug information - # -Z7 Full debug inside the .obj, no .pdb - # -Zd Basic debug, no local variables? In the .obj - # -Zl Don't add runtime library name to obj file? - # -Od Turns off optimization and speeds compilation - # -YX -Fp/.../foobar.pch Use precompiled headers (try someday?) - # -nologo Don't print out startup message - # /D _STATIC_CPPLIB - # Use static link for the C++ runtime (so msvcpnn.dll not needed) - # - CFLAGS_COMMON += -Zi -nologo - CFLAGS_OPT = $(POPT) - CFLAGS_DBG = -Od $(MS_RUNTIME_DEBUG_OPTION) - - # Starting from VS2005 the wchar_t is handled as a built-in C/C++ data type - # by default. However, we expect the wchar_t to be a typedef to the - # unsigned short data type. The -Zc:wchar_t- option restores the old - # behavior (as seen in VS2003) to avoid massive code modifications. - # When/if our code will be "C/C++ Standard"-compliant (at least in the area - # of handling the wchar_t type), the option won't be necessary. - ifeq ($(ARCH_DATA_MODEL), 32) - CFLAGS_VS2005 += -Zc:wchar_t- - else - # The 64bit Platform SDK we use (April 2005) doesn't like this option - ifneq ($(CC_VER), 14.00.40310.41) - CFLAGS_VS2005 += -Zc:wchar_t- - endif - endif - - # All builds get the same runtime setting - CFLAGS_COMMON += $(MS_RUNTIME_OPTION) $(CFLAGS_$(COMPILER_VERSION)) - - - LDEBUG = /debug - - ifeq ($(VTUNE_SUPPORT), true) - OTHER_CFLAGS = -Z7 -Ox - LDEBUG += /pdb:NONE - endif - - # The new Platform SDK and VS2005 has /GS as a default and requires - # bufferoverflowU.lib on the link command line, otherwise - # we get missing __security_check_cookie externals at link time. - BUFFEROVERFLOWLIB = bufferoverflowU.lib - # Always add bufferoverflowU.lib to VS2005 link commands (pack uses LDDFLAGS) - LFLAGS_VS2005 = $(BUFFEROVERFLOWLIB) - - # LFLAGS are the flags given to $(LINK) and used to build the actual DLL file - BASELFLAGS = -nologo /opt:REF /incremental:no - LFLAGS = $(BASELFLAGS) $(LDEBUG) $(EXTRA_LFLAGS) $(LFLAGS_$(COMPILER_VERSION)) - LDDFLAGS += $(LFLAGS_$(COMPILER_VERSION)) - -endif - -# -# Preprocessor macro definitions -# -CPPFLAGS_COMMON = -DWIN32 -DIAL -D_LITTLE_ENDIAN -ifeq ($(ARCH), amd64) - CPPFLAGS_COMMON += -D_AMD64_ -Damd64 -else - CPPFLAGS_COMMON += -DWIN32 -D_X86_ -Dx86 -endif -CPPFLAGS_COMMON += -DWIN32_LEAN_AND_MEAN - -# -# Output options (use specific filenames to avoid parallel compile errors) -# -CFLAGS_COMMON += -Fd$(OBJDIR)/$(basename $(@F)).pdb -Fm$(OBJDIR)/$(basename $(@F)).map - -# -# Add warnings and extra on 64bit issues -# -ifeq ($(ARCH_DATA_MODEL), 64) - CFLAGS_COMMON += -Wp64 -endif -CFLAGS_COMMON += -W$(COMPILER_WARNING_LEVEL) - -# -# Treat compiler warnings as errors, if requested -# -ifeq ($(COMPILER_WARNINGS_FATAL),true) - CFLAGS_COMMON += -WX -endif - -CPPFLAGS_OPT = -CPPFLAGS_DBG = -DDEBUG -DLOGGING - -CXXFLAGS_COMMON = $(CFLAGS_COMMON) -CXXFLAGS_OPT = $(CFLAGS_OPT) -CXXFLAGS_DBG = $(CFLAGS_DBG) - -ifneq ($(LIBRARY),fdlibm) - EXTRA_LIBS += advapi32.lib -endif - -# -# Path and option to link against the VM, if you have to. -# -JVMLIB = $(BOOTDIR)/lib/jvm.lib -JAVALIB = - -ifeq ($(CC_VERSION), msvc) - CC_DEPEND = -FD - CC_DEPEND_FILTER = -else # CC_VERSION -# not supported, but left for historical reference... - CC_DEPEND = -MM - CC_DEPEND_FILTER = $(SED) -e 's!$*\.$(OBJECT_SUFFIX)!$(dir $@)&!g' -endif # CC_VERSION - -LIBRARY_SUFFIX = dll -LIB_SUFFIX = lib - -# Settings for the VERSIONINFO tap on windows. -VERSIONINFO_RESOURCE = $(TOPDIR)/src/windows/resource/version.rc - -RC_FLAGS = /l 0x409 /r - -ifeq ($(VARIANT), OPT) - RC_FLAGS += -d NDEBUG -else - RC_FLAGS += $(MS_RC_DEBUG_OPTION) -endif - -ifndef COPYRIGHT_YEAR - COPYRIGHT_YEAR = 2007 -endif - -RC_FLAGS += -d "JDK_BUILD_ID=$(FULL_VERSION)" \ - -d "JDK_COMPANY=$(COMPANY_NAME)" \ - -d "JDK_COMPONENT=$(PRODUCT_NAME) Platform SE binary" \ - -d "JDK_VER=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION).$(JDK_UPDATE_VER).$(COOKED_BUILD_NUMBER)" \ - -d "JDK_COPYRIGHT=Copyright \xA9 $(COPYRIGHT_YEAR)" \ - -d "JDK_NAME=$(PRODUCT_NAME) Platform SE $(JDK_MINOR_VERSION) $(JDK_UPDATE_META_TAG)" \ - -d "JDK_FVER=$(JDK_VERSION)" diff --git a/corba/make/common/Defs.gmk b/corba/make/common/Defs.gmk index 2c2d03c48ce..2d5c83db6e0 100644 --- a/corba/make/common/Defs.gmk +++ b/corba/make/common/Defs.gmk @@ -73,54 +73,10 @@ JDK_LOCALES = ja zh_CN # JRE_NONEXIST_LOCALES = en en_US de_DE es_ES fr_FR it_IT ja_JP ko_KR sv_SE zh -# -# All libraries except libjava and libjvm itself link against libjvm and -# libjava, the latter for its exported common utilities. libjava only links -# against libjvm. Programs' makefiles take their own responsibility for -# adding other libs. -# -ifdef PACKAGE -# put JAVALIB first, but do not lose any platform specific values.... - LDLIBS_COMMON = $(JAVALIB) -endif # PACKAGE - -# -# Libraries that must appear ahead of libc.so on the link command line -# -ifdef PROGRAM - - ifeq ($(PLATFORM), solaris) - LDLIBS_COMMON = -lthread -ldl - endif - - ifeq ($(PLATFORM), linux) - LDLIBS_COMMON = -ldl - endif - -endif # PROGRAM - -LDLIBS_COMMON += $(EXTRA_LIBS) - -# -# Default is to build, not import native binaries -# -ifndef IMPORT_NATIVE_BINARIES - IMPORT_NATIVE_BINARIES=false -endif -# If importing libraries in, no incremental builds -ifeq ($(IMPORT_NATIVE_BINARIES),true) - INCREMENTAL_BUILD=false -endif - -# for generated libraries LIBDIR = $(OUTPUTDIR)/lib ABS_LIBDIR = $(ABS_OUTPUTDIR)/lib -# Optional place to save the windows .lib files -LIBFILES_DIR = $(OUTPUTDIR)/libfiles # for ext jre files EXTDIR = $(LIBDIR)/ext -# for generated include files -INCLUDEDIR = $(OUTPUTDIR)/include # for generated class files CLASSBINDIR = $(OUTPUTDIR)/classes DEMOCLASSDIR = $(OUTPUTDIR)/democlasses @@ -131,8 +87,6 @@ BUILDTOOLJARDIR = $(OUTPUTDIR)/btjars ABS_BUILDTOOLJARDIR = $(ABS_OUTPUTDIR)/btjars # for generated java source files GENSRCDIR = $(OUTPUTDIR)/gensrc -# for generated C source files (not javah) -GENNATIVESRCDIR = $(OUTPUTDIR)/gennativesrc # for imported source files IMPORTSRCDIR = $(OUTPUTDIR)/impsrc # for imported documents @@ -196,19 +150,6 @@ override ABS_TEMPDIR = $(ABS_OUTPUTDIR)/$(UNIQUE_PATH) dummy1:=$(shell $(MKDIR) -p $(TEMPDIR)) dummy2:=$(shell $(MKDIR) -p $(TEMP_DISK)) -# OBJDIRNAME is the name of the directory where the object code is to -# be placed. It's name depends on whether the data model architecture -# is 32-bit or not. -ifneq ($(ARCH_DATA_MODEL), 32) - OBJDIRNAME = obj$(ARCH_DATA_MODEL)$(OBJDIRNAME_SUFFIX) -else - OBJDIRNAME = obj$(OBJDIRNAME_SUFFIX) -endif -OBJDIR = $(TEMPDIR)/$(OBJDIRNAME) - -# CLASSHDRDIR is where the generated C Class Header files go. -CLASSHDRDIR = $(TEMPDIR)/CClassHeaders - # # CLASSDESTDIR can be used to specify the directory where generated classes # are to be placed. The default is CLASSBINDIR. @@ -217,11 +158,6 @@ ifndef CLASSDESTDIR CLASSDESTDIR = $(CLASSBINDIR) endif -INCLUDES = -I. -I$(CLASSHDRDIR) \ - $(patsubst %,-I%,$(subst $(CLASSPATH_SEPARATOR), ,$(VPATH.h))) $(OTHER_INCLUDES) -OTHER_CPPFLAGS = $(INCLUDES) - - # # vpaths. These are the default locations searched for source files. # GNUmakefiles of individual areas often override the default settings. @@ -235,35 +171,6 @@ VPATH0.java = $(GENSRCDIR)$(CLASSPATH_SEPARATOR)$(PLATFORM_SRC)/classes$(CLASSPA VPATH.java = $(VPATH0.java) vpath %.java $(VPATH.java) vpath %.class $(CLASSBINDIR) -vpath %.$(OBJECT_SUFFIX) $(OBJDIR) - -# -# VPATH.h is used elsewhere to generate include flags. By default, -# anyone has access to the include files that the JVM area exports, -# namely jni.h, jvm.h, and jni_utils.h, plus their platform-specific -# relatives. -# -ifeq ($(PLATFORM), windows) - VPATH.h = $(BOOTDIR)/include;$(BOOTDIR)/include/$(PLATFORM_INCLUDE_NAME) -else - VPATH.h = $(PLATFORM_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/javavm/export$(CLASSPATH_SEPARATOR)$(SHARE_SRC)/javavm/include$(CLASSPATH_SEPARATOR)$(PLATFORM_SRC)/javavm/include -endif -vpath %.h $(VPATH.h) - -# -# Used in two ways: helps link against libjava.so. Also if overridden -# determines where your shared library is installed. -# -ifndef LIB_LOCATION - LIB_LOCATION = $(LIBDIR)/$(LIBARCH) -endif - -# -# Java header and stub variables -# -CLASSHDRS = $(patsubst %,$(CLASSHDRDIR)/%.h,$(subst .,_,$(CLASSES.export))) -CLASSSTUBOBJS = classstubs.$(OBJECT_SUFFIX) -STUBPREAMBLE = $(INCLUDEDIR)/StubPreamble.h # # Classpath seen by javac (different from the one seen by the VM @@ -338,38 +245,9 @@ define OTHERSUBDIRS-loop done endef -# -# Create BYFILE OPT and DBG settings, if CFLAGS_OPT/foobar.o is set then it is -# used for this file, otherwise the default settings are used. -# -CFLAGS_$(VARIANT)/BYFILE = $(CFLAGS_$(VARIANT)/$(@F)) \ - $(CFLAGS_$(VARIANT)$(CFLAGS_$(VARIANT)/$(@F))) -CXXFLAGS_$(VARIANT)/BYFILE = $(CXXFLAGS_$(VARIANT)/$(@F)) \ - $(CXXFLAGS_$(VARIANT)$(CXXFLAGS_$(VARIANT)/$(@F))) - -# -# Tool flags -# -ASFLAGS = $(ASFLAGS_$(VARIANT)) $(ASFLAGS_COMMON) $(OTHER_ASFLAGS) -CFLAGS = $(CFLAGS_$(VARIANT)/BYFILE) $(CFLAGS_COMMON) $(OTHER_CFLAGS) -CXXFLAGS = $(CXXFLAGS_$(VARIANT)/BYFILE) $(CXXFLAGS_COMMON) $(OTHER_CXXFLAGS) -CPPFLAGS = $(CPPFLAGS_$(VARIANT)) $(CPPFLAGS_COMMON) $(OTHER_CPPFLAGS) \ - $(DEFINES) $(OPTIONS:%=-D%) -LDFLAGS = $(LDFLAGS_$(VARIANT)) $(LDFLAGS_COMMON) $(OTHER_LDFLAGS) -LDLIBS = $(OTHER_LDLIBS) $(LDLIBS_$(VARIANT)) $(LDLIBS_COMMON) -LINTFLAGS = $(LINTFLAGS_$(VARIANT)) $(LINTFLAGS_COMMON) \ - $(OTHER_LINTFLAGS) - -# this should be moved into Defs-.gmk..... -ifeq ($(PLATFORM), windows) - VERSION_DEFINES = -DRELEASE="\"$(RELEASE)\"" -else - VERSION_DEFINES = -DRELEASE='"$(RELEASE)"' -endif - # Prevent the use of many default suffix rules we do not need .SUFFIXES: -.SUFFIXES: .c .o .h .obj .cpp .hpp .java .class +.SUFFIXES: .java .class # Make sure we are all insane ifdef INSANE diff --git a/corba/make/common/Library.gmk b/corba/make/common/Library.gmk deleted file mode 100644 index ffd3a3ab701..00000000000 --- a/corba/make/common/Library.gmk +++ /dev/null @@ -1,275 +0,0 @@ -# -# Copyright (c) 1995, 2009, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Generic makefile for building shared libraries. -# - -include $(TOPDIR)/make/common/Classes.gmk - -# -# It is important to define these *after* including Classes.gmk -# in order to override the values defined inthat makefile. -# - -ACTUAL_LIBRARY_NAME = $(LIB_PREFIX)$(LIBRARY).$(LIBRARY_SUFFIX) -ACTUAL_LIBRARY_DIR = $(LIB_LOCATION) -ACTUAL_LIBRARY = $(ACTUAL_LIBRARY_DIR)/$(ACTUAL_LIBRARY_NAME) - -library:: $(ACTUAL_LIBRARY) - -FILES_o = $(patsubst %.c, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c)))) -FILES_o += $(patsubst %.s, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_s)))) -FILES_o += $(patsubst %.cpp, %.$(OBJECT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_cpp)))) - -ifeq ($(INCREMENTAL_BUILD),true) -FILES_d = $(patsubst %.c, %.$(DEPEND_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c)))) -FILES_d += $(patsubst %.cpp, %.$(DEPEND_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_cpp)))) -endif # INCREMENTAL_BUILD - -ifeq ($(PLATFORM),solaris) -# List of all lint files, one for each .c file (only for C) -FILES_ln = $(patsubst %.c, %.$(LINT_SUFFIX), $(addprefix $(OBJDIR)/, $(notdir $(FILES_c)))) -endif - -# -# C++ libraries must be linked with CC. -# -ifdef CPLUSPLUSLIBRARY -LINKER=$(LINK.cc) -else -LINKER=$(LINK.c) -endif - -# We either need to import (copy) libraries in, or build them -$(ACTUAL_LIBRARY):: $(INIT) $(TEMPDIR) $(LIBDIR) $(BINDIR) $(EXTDIR) classheaders - -# -# COMPILE_APPROACH: Different approaches to compile up the native object -# files as quickly as possible. -# The setting of parallel works best on Unix, batch on Windows. -# - -COMPILE_FILES_o = $(OBJDIR)/.files_compiled -$(COMPILE_FILES_o): $(FILES_d) $(FILES_o) - @$(ECHO) "$<" >> $@ -clean:: - $(RM) $(COMPILE_FILES_o) - -# -# COMPILE_APPROACH=parallel: Will trigger compilations (just compilations) to -# happen in parallel. Greatly decreases Unix build time, even on single CPU -# machines, more so on multiple CPU machines. Default is 2 compiles -# at a time, but can be adjusted with ALT_PARALLEL_COMPILE_JOBS. -# Note that each .d file will also be dependent on it's .o file, see -# Rules.gmk. -# Note this does not depend on Rules.gmk to work like batch (below) -# and this technique doesn't seem to help Windows build time nor does -# it work very well, it's possible the Windows Visual Studio compilers -# don't work well in a parallel situation, this needs investigation. -# - -ifeq ($(COMPILE_APPROACH),parallel) - -.PHONY: library_parallel_compile - -library_parallel_compile: - @$(ECHO) "Begin parallel compiles: $(shell $(PWD))" - @$(MAKE) -j $(PARALLEL_COMPILE_JOBS) $(COMPILE_FILES_o) - @$(ECHO) "Done with parallel compiles: $(shell $(PWD))" - -$(ACTUAL_LIBRARY):: library_parallel_compile - -endif - -# -# COMPILE_APPROACH=batch: Will trigger compilations (just compilations) to -# happen in batch mode. Greatly decreases Windows build time. -# See logic in Rules.gmk for how compiles happen, the $(MAKE) in -# library_batch_compile below triggers the actions in Rules.gmk. -# Note that each .d file will also be dependent on it's .o file, see -# Rules.gmk. -# -ifeq ($(COMPILE_APPROACH),batch) - -.PHONY: library_batch_compile - -library_batch_compile: - @$(ECHO) "Begin BATCH compiles: $(shell $(PWD))" - $(MAKE) $(COMPILE_FILES_o) - $(MAKE) batch_compile - @$(ECHO) "Done with BATCH compiles: $(shell $(PWD))" - $(MAKE) COMPILE_APPROACH=normal $(COMPILE_FILES_o) - -$(ACTUAL_LIBRARY):: library_batch_compile - -endif - -ifeq ($(PLATFORM), windows) - -# -# Library building rules. -# - -$(LIBRARY).lib:: $(OBJDIR) - -# build it into $(OBJDIR) so that the other generated files get put -# there, then copy just the DLL (and MAP file) to the requested directory. -# -$(ACTUAL_LIBRARY):: $(OBJDIR)/$(LIBRARY).lcf - @$(prep-target) - @$(MKDIR) -p $(OBJDIR) - $(LINK) -dll -out:$(OBJDIR)/$(@F) \ - -map:$(OBJDIR)/$(LIBRARY).map \ - $(LFLAGS) @$(OBJDIR)/$(LIBRARY).lcf \ - $(OTHER_LCF) $(JAVALIB) $(LDLIBS) - $(CP) $(OBJDIR)/$(@F) $@ - $(CP) $(OBJDIR)/$(LIBRARY).map $(@D) - $(CP) $(OBJDIR)/$(LIBRARY).pdb $(@D) - -$(OBJDIR)/$(LIBRARY).lcf: $(OBJDIR)/$(LIBRARY).res $(COMPILE_FILES_o) $(FILES_m) - @$(prep-target) - @$(MKDIR) -p $(TEMPDIR) - @$(ECHO) $(FILES_o) > $@ -ifndef LOCAL_RESOURCE_FILE - @$(ECHO) $(OBJDIR)/$(LIBRARY).res >> $@ -endif - @$(ECHO) Created $@ - -RC_FLAGS += /D "JDK_FNAME=$(LIBRARY).dll" \ - /D "JDK_INTERNAL_NAME=$(LIBRARY)" \ - /D "JDK_FTYPE=0x2L" - -$(OBJDIR)/$(LIBRARY).res: $(VERSIONINFO_RESOURCE) -ifndef LOCAL_RESOURCE_FILE - @$(prep-target) - $(RC) $(RC_FLAGS) $(CC_OBJECT_OUTPUT_FLAG)$(@) $(VERSIONINFO_RESOURCE) -endif - -# -# Install a .lib file if required. -# -ifeq ($(INSTALL_DOT_LIB), true) -$(ACTUAL_LIBRARY):: $(LIBDIR)/$(LIBRARY).lib - -clean:: - -$(RM) $(LIBDIR)/$(LIBRARY).lib - -$(LIBDIR)/$(LIBRARY).lib:: $(OBJDIR)/$(LIBRARY).lib - $(install-file) - -$(LIBDIR)/$(LIBRARY).dll:: $(OBJDIR)/$(LIBRARY).dll - $(install-file) - -endif # INSTALL_DOT_LIB - -else # PLATFORM - -# -# On Solaris, use mcs to write the version into the comment section of -# the shared library. On other platforms set this to false at the -# make command line. -# -$(ACTUAL_LIBRARY):: $(COMPILE_FILES_o) $(FILES_m) $(FILES_reorder) - @$(prep-target) - @$(ECHO) "STATS: LIBRARY=$(LIBRARY), PRODUCT=$(PRODUCT), _OPT=$(_OPT)" - @$(ECHO) "Rebuilding $@ because of $?" - $(LINKER) $(SHARED_LIBRARY_FLAG) -o $@ $(FILES_o) $(LDLIBS) -ifeq ($(WRITE_LIBVERSION),true) - $(MCS) -d -a "$(FULL_VERSION)" $@ -endif # WRITE_LIBVERSION - -endif # PLATFORM - -# -# Cross check all linted files against each other -# -ifeq ($(PLATFORM),solaris) -lint.errors : $(FILES_ln) - $(LINT.c) $(FILES_ln) $(LDLIBS) -endif - -# -# Class libraries with JNI native methods get a include to the package. -# -ifdef PACKAGE -vpath %.c $(PLATFORM_SRC)/native/$(PKGDIR) -vpath %.c $(SHARE_SRC)/native/$(PKGDIR) -OTHER_INCLUDES += -I$(SHARE_SRC)/native/common -I$(PLATFORM_SRC)/native/common -OTHER_INCLUDES += -I$(SHARE_SRC)/native/$(PKGDIR) \ - -I$(PLATFORM_SRC)/native/$(PKGDIR) -endif - -# -# Clean/clobber rules -# -clean:: - $(RM) -r $(ACTUAL_LIBRARY) - -clobber:: clean - -# -# INCREMENTAL_BUILD means that this workspace will be built over and over -# possibly incrementally. This means tracking the object file dependencies -# on include files so that sources get re-compiled when the include files -# change. When building from scratch and doing a one time build (like -# release engineering or nightly builds) set INCREMENTAL_BUILD=false. -# - -ifeq ($(INCREMENTAL_BUILD),true) - -# -# Workaround: gnumake sometimes says files is empty when it shouldn't -# was: files := $(foreach file, $(wildcard $(OBJDIR)/*.$(DEPEND_SUFFIX)), $(file)) -# -files := $(shell $(LS) $(OBJDIR)/*.$(DEPEND_SUFFIX) 2>/dev/null) - -# -# Only include these files if we have any. -# -ifneq ($(strip $(files)),) - -include $(files) - -endif # files - -endif # INCREMENTAL_BUILD - -# -# Default dependencies -# - -all: build - -build: library - -debug: - $(MAKE) VARIANT=DBG build - -fastdebug: - $(MAKE) VARIANT=DBG FASTDEBUG=true build - -.PHONY: all build debug fastdebug - diff --git a/corba/make/common/Mapfile-vers.gmk b/corba/make/common/Mapfile-vers.gmk deleted file mode 100644 index e4e151f3214..00000000000 --- a/corba/make/common/Mapfile-vers.gmk +++ /dev/null @@ -1,98 +0,0 @@ -# -# Copyright (c) 1998, 2005, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Makefile for linking with mapfiles. -# -# NOTE: Not using a mapfile will expose all your extern functions and -# extern data symbols as part of your interface, so unless your -# extern names are safe from being mistaken as names from other -# libraries, you better use a mapfile, or use a unique naming -# convention on all your extern symbols. -# -# The mapfile will establish versioning by defining the exported interface. -# -# The mapfile can also force certain .o files or elf sections into the -# the different segments of the resulting library/program image. -# -# The macro FILES_m can contain any number of mapfiles. -# - -# Always make sure 'all' is the default rule -mapfile_default_rule: all - -ifeq ($(PLATFORM), solaris) - -ifeq ($(VARIANT), OPT) - # OPT build MUST have a mapfile? - ifndef FILES_m - FILES_m = mapfile-vers - endif - - # If we are re-ordering functions in this solaris library, we need to make - # sure that -xF is added to the compile lines. This option is critical and - # enables the functions to be reordered. - ifdef FILES_reorder - CFLAGS_OPT += -xF - CXXFLAGS_OPT += -xF - endif - -INIT += $(TEMPDIR)/mapfile-vers - -$(TEMPDIR)/mapfile-vers : $(FILES_m) $(FILES_reorder) - $(prep-target) - $(CAT) $(FILES_m) > $@ - ifdef FILES_reorder - $(SED) -e 's=OUTPUTDIR=$(OUTPUTDIR)=' $(FILES_reorder) >> $@ - endif -endif # VARIANT - -ifndef LDNOMAP - LDMAPFLAGS_OPT = -M$(TEMPDIR)/mapfile-vers - LDMAPFLAGS_DBG = $(FILES_m:%=-M%) -endif - -endif # PLATFORM - - -ifeq ($(PLATFORM), linux) - -ifeq ($(VARIANT), OPT) - # OPT build MUST have a mapfile? - ifndef FILES_m - FILES_m = mapfile-vers - endif -endif # VARIANT - -ifndef LDNOMAP - LDMAPFLAGS_OPT = $(FILES_m:%=-Xlinker -version-script=%) - LDMAPFLAGS_DBG = $(FILES_m:%=-Xlinker -version-script=%) -endif - -endif # PLATFORM - -LDFLAGS_OPT += $(LDMAPFLAGS_OPT) -LDFLAGS_DBG += $(LDMAPFLAGS_DBG) - diff --git a/corba/make/common/Rules.gmk b/corba/make/common/Rules.gmk index ae4633de512..a18978697b4 100644 --- a/corba/make/common/Rules.gmk +++ b/corba/make/common/Rules.gmk @@ -34,7 +34,7 @@ rules_default_rule: all # # Directory set up. (Needed by deploy workspace) # -$(CLASSDESTDIR) $(CLASSHDRDIR) $(OBJDIR) $(OUTPUTDIR) $(BINDIR) $(LIBDIR) $(LIBDIR)/$(LIBARCH) $(TEMPDIR) $(EXTDIR): +$(CLASSDESTDIR) $(OUTPUTDIR) $(TEMPDIR) $(EXTDIR): $(MKDIR) -p $@ # @@ -163,9 +163,6 @@ $(CLASSDESTDIR)/%.class: $(SHARE_SRC)/classes/%.java # List of class files needed FILES_class = $(FILES_java:%.java=$(CLASSDESTDIR)/%.class) -# Got to include exported files. -FILES_class += $(FILES_export:%.java=$(CLASSDESTDIR)/%.class) - # Construct list of java sources we need to compile source_list_prime: @$(MKDIR) -p $(TEMPDIR) @@ -214,50 +211,7 @@ endif classes.clean: packages.clean $(RM) $(JAVA_SOURCE_LIST) -# -# C and C++ make dependencies -# -include $(TOPDIR)/make/common/internal/NativeCompileRules.gmk - -# -# Running Javah to generate stuff into CClassHeaders. -# - -ifdef FILES_export - -CLASSES.export = $(subst /,.,$(FILES_export:%.java=%)) -CLASSES.export += $(subst /,.,$(FILES_export2:%.java=%)) -CLASSES.export += $(subst /,.,$(FILES_export3:%.java=%)) -CLASSES_export = $(FILES_export:%.java=$(CLASSDESTDIR)/%.class) -CLASSES_export += $(FILES_export2:%.java=$(CLASSDESTDIR)/%.class) -CLASSES_export += $(FILES_export3:%.java=$(CLASSDESTDIR)/%.class) - -# Fix when deploy workspace makefiles don't depend on this name -#CLASSHDR_DOTFILE=$(CLASSHDRDIR)/.classheaders - -CLASSHDR_DOTFILE=$(OBJDIR)/.class.headers.$(ARCH) - -classheaders: classes $(CLASSHDR_DOTFILE) - -$(CLASSHDR_DOTFILE): $(CLASSES_export) - $(prep-target) - $(JAVAH_CMD) -d $(CLASSHDRDIR)/ \ - $(CLASSES.export) $(subst $$,\$$,$(EXPORTED_inner)) - @$(java-vm-cleanup) - @$(TOUCH) $@ - -classheaders.clean: - $(RM) -r $(CLASSHDRDIR) $(CLASSHDR_DOTFILE) - -else # FILES_export - -classheaders: classes - -classheaders.clean: - -endif # FILES_export - -clean clobber:: classheaders.clean classes.clean .delete.classlist +clean clobber:: classes.clean .delete.classlist # # Default dependencies @@ -265,12 +219,11 @@ clean clobber:: classheaders.clean classes.clean .delete.classlist all: build -build: classheaders +build: classes default: all .PHONY: all build clean clobber \ .delete.classlist classes .compile.classlist classes.clean \ - classheaders classheaders.clean \ batch_compile diff --git a/corba/make/common/internal/NativeCompileRules.gmk b/corba/make/common/internal/NativeCompileRules.gmk deleted file mode 100644 index 5d9cf729ea6..00000000000 --- a/corba/make/common/internal/NativeCompileRules.gmk +++ /dev/null @@ -1,214 +0,0 @@ -# -# Copyright (c) 1995, 2007, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Native C/C++ Compile Rules -# - -# -# INCREMENTAL_BUILD: Record the #include file dependencies. -# -# NOTE: We build make include files with the suffix -# $(DEPEND_SUFFIX) on every compilation. These are initially -# created as temp files just in case a ^C kills it in the middle. -# Compiler is smart enough to handle ^C and not create the .o file, or -# is supposed to be that smart, but the .$(DEPEND_SUFFIX) file -# creation here isn't. -# These .$(DEPEND_SUFFIX) files are included by Library.gmk and -# Program.gmk, when they exist (Search for 'make dependencies'). -# - -ifeq ($(INCREMENTAL_BUILD),true) - -$(OBJDIR)/%.$(DEPEND_SUFFIX): %.c - @$(prep-target) - @$(ECHO) "Creating $@" - @$(RM) $@.temp - @$(CC) $(CC_DEPEND) $(CPPFLAGS) $< 2> $(DEV_NULL) | \ - $(CC_DEPEND_FILTER) > $@.temp - @$(MV) $@.temp $@ - -$(OBJDIR)/%.$(DEPEND_SUFFIX): %.cpp - @$(prep-target) - @$(ECHO) "Creating $@" - @$(RM) $@.temp - @$(CXX) $(CC_DEPEND) $(CPPFLAGS) $(CXXFLAGS) $< 2> $(DEV_NULL) | \ - $(CC_DEPEND_FILTER) > $@.temp - @$(MV) $@.temp $@ - -endif # INCREMENTAL_BUILD - -# -# C, C++, asm files. -# -# Normal or parallel compile rule is the same, but batch compiles require -# we save up the sources files that use the same compile line so that we -# can do one compile line. -# - -ifneq ($(COMPILE_APPROACH), batch) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< - @$(check-conventions) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.cpp - @$(prep-target) - $(COMPILE.cc) $(CC_OBJECT_OUTPUT_FLAG)$@ $(CFLAGS_GPROF) $< - @$(check-conventions) - -else - - # - # Batch compiling might be faster if the compiler was smart about recognizing - # optimization opportunities available when all files are being compiled - # the same way. Unfortunately this is rare. - # Automatic pre-compiled headers (pch) might be a possibility so we - # add any auto pch options here. - # So we save all the source files that have the same compile line as the - # first file. A normal compile pass is made after the batch compile - # to catch anything missed. - # If the compilers had a -o option that allowed us to direct where to - # write the object files to, then we would not need to save the object - # file list or move them from the make directory to the build directory. - # - - # Source names - COMPILE_LIST.c = $(OBJDIR)/.source_names_c - COMPILE_LIST.cpp = $(OBJDIR)/.source_names_cpp - - # Object file list - COMPILE_OBJ_LIST.c = $(OBJDIR)/.obj_names_c - COMPILE_OBJ_LIST.cpp = $(OBJDIR)/.obj_names_cpp - - # The compile line - COMPILE_BATCH.c = $(OBJDIR)/.compile_c - COMPILE_BATCH.cpp = $(OBJDIR)/.compile_cpp - - # The compile line for the current target - THIS_COMPILE_BATCH.c = $(COMPILE_BATCH.c)-$(@F) - THIS_COMPILE_BATCH.cpp = $(COMPILE_BATCH.cpp)-$(@F) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.c - @$(prep-target) - @$(ECHO) "$(COMPILE.c) $(CFLAGS_GPROF)" > $(THIS_COMPILE_BATCH.c) - @if [ ! -s $(COMPILE_BATCH.c) ] ; then \ - $(CP) $(THIS_COMPILE_BATCH.c) $(COMPILE_BATCH.c) ; \ - $(ECHO) $< > $(COMPILE_LIST.c); \ - $(ECHO) $(@F) > $(COMPILE_OBJ_LIST.c); \ - elif [ "`$(DIFF) -w -b $(THIS_COMPILE_BATCH.c) $(COMPILE_BATCH.c)`" \ - = "" ] ; then \ - $(ECHO) $< >> $(COMPILE_LIST.c); \ - $(ECHO) $(@F) >> $(COMPILE_OBJ_LIST.c); \ - fi - @$(RM) $(THIS_COMPILE_BATCH.c) - @$(check-conventions) - -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.cpp - @$(prep-target) - @$(ECHO) "$(COMPILE.cpp) $(CFLAGS_GPROF)" > $(THIS_COMPILE_BATCH.cpp) - @if [ ! -s $(COMPILE_BATCH.cpp) ] ; then \ - $(CP) $(THIS_COMPILE_BATCH.cpp) $(COMPILE_BATCH.cpp) ; \ - $(ECHO) $< > $(COMPILE_LIST.cpp); \ - $(ECHO) $(@F) > $(COMPILE_OBJ_LIST.cpp); \ - elif [ "`$(DIFF) -w -b $(THIS_COMPILE_BATCH.cpp) $(COMPILE_BATCH.cpp)`"\ - = "" ] ; then \ - $(ECHO) $< >> $(COMPILE_LIST.cpp); \ - $(ECHO) $(@F) >> $(COMPILE_OBJ_LIST.cpp); \ - fi - @$(RM) $(THIS_COMPILE_BATCH.cpp) - @$(check-conventions) - -batch_compile: $(FILES_o) - @$(ECHO) "Doing batch compilations" - @if [ -s $(COMPILE_LIST.c) ] ; then \ - $(ECHO) "$(COMPILE.c) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \ - `$(CAT) $(COMPILE_LIST.c)`" ; \ - ( $(COMPILE.c) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \ - `$(CAT) $(COMPILE_LIST.c)` && \ - $(ECHO) "$(MV) `$(CAT) $(COMPILE_OBJ_LIST.c)` $(OBJDIR)" && \ - $(MV) `$(CAT) $(COMPILE_OBJ_LIST.c)` $(OBJDIR) ) || exit 1 ; \ - fi - @if [ -s $(COMPILE_LIST.cpp) ] ; then \ - $(ECHO) "$(COMPILE.cpp) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \ - `$(CAT) $(COMPILE_LIST.cpp)`" ; \ - ( $(COMPILE.cpp) $(CFLAGS_GPROF) $(AUTOMATIC_PCH_OPTION) \ - `$(CAT) $(COMPILE_LIST.cpp)` && \ - $(ECHO) "$(MV) `$(CAT) $(COMPILE_OBJ_LIST.cpp)` $(OBJDIR)" && \ - $(MV) `$(CAT) $(COMPILE_OBJ_LIST.cpp)` $(OBJDIR) ) || exit 1 ; \ - fi - @$(RM) $(COMPILE_BATCH.c) $(COMPILE_LIST.c) $(COMPILE_OBJ_LIST.c) - @$(RM) $(COMPILE_BATCH.cpp) $(COMPILE_LIST.cpp) $(COMPILE_OBJ_LIST.cpp) - -endif - -# newer as does not handle c++ style comments -$(OBJDIR)/%.$(OBJECT_SUFFIX): %.s - ifneq ($(CC_VERSION), gcc) - @$(prep-target) - $(COMPILE.s) $(CC_OBJECT_OUTPUT_FLAG)$@ $< - else - @$(prep-target) - $(CPP) -x assembler-with-cpp $< | $(COMPILE.s) -o $@ - endif - @$(check-conventions) - -# -# Quick hack for making the compiler generate just the assembly file. -# $ gnumake obj/sparc/myfile.s -# -$(OBJDIR)/%.s: %.c - @$(prep-target) - $(COMPILE.c) $(CC_OBJECT_OUTPUT_FLAG)$@ -S $< - @$(check-conventions) - -# remove the intermediate files from the directories. -# (If VARIANT=OPT, this removes all debug and fastdebug files too) -clobber clean:: - $(RM) -r $(OBJDIR) - $(RM) -r $(OBJDIR)_* - -# -# Lint support -# (The 'lint' rule below is an older rule not using the .$(LINT_SUFFIX) files) -# - -ifeq ($(PLATFORM), solaris) -$(OBJDIR)/%.$(LINT_SUFFIX): %.c - @$(prep-target) - $(LINT.c) -dirout=$(OBJDIR) -c $< -lint.clean: - $(RM) $(OBJDIR)/*.$(LINT_SUFFIX) -# Old rule -lint: $(FILES_c) - ifneq ($(FILES_c),) - $(LINT.c) -Ncheck -Nlevel=3 $? $(LDLIBS) > lint.$(ARCH) 2>&1 - endif -endif - -.PHONY: batch_compile - - diff --git a/corba/make/common/shared/Compiler-gcc.gmk b/corba/make/common/shared/Compiler-gcc.gmk deleted file mode 100644 index 3c3604b3c72..00000000000 --- a/corba/make/common/shared/Compiler-gcc.gmk +++ /dev/null @@ -1,119 +0,0 @@ -# -# Copyright (c) 2005, 2009, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# GCC Compiler settings -# - -COMPILER_NAME=GCC - -ifeq ($(PLATFORM), windows) - - # Settings specific to Windows, pretty stale, hasn't been used - CC = $(COMPILER_PATH)gcc - CPP = $(COMPILER_PATH)gcc -E - CXX = $(COMPILER_PATH)g++ - CCC = $(COMPILER_PATH)g++ - LIBEXE = $(COMPILER_PATH)lib - LINK = $(COMPILER_PATH)link - RC = $(MSDEVTOOLS_PATH)link - LINK32 = $(LINK) - RSC = $(RC) - # unset any GNU Make settings of MFLAGS and MAKEFLAGS which may mess up nmake - NMAKE = MFLAGS= MAKEFLAGS= $(COMPILER_PATH)nmake -nologo - ifeq ($(ARCH_DATA_MODEL), 32) - CC_VER = UNKNOWN - CC_TYPE = UNKNOWN - else - CC_VER = UNKNOWN - CC_TYPE = UNKNOWN - endif - _LINK_VER :=$(shell $(LINK) 2>&1 | $(HEAD) -n 1) - LINK_VER :=$(call GetVersion,"$(_LINK_VER)") - -endif - -ifeq ($(PLATFORM), linux) - - # Settings specific to Linux - CC = $(COMPILER_PATH)gcc - CPP = $(COMPILER_PATH)gcc -E - # statically link libstdc++ before C++ ABI is stablized on Linux - STATIC_CXX = true - ifeq ($(STATIC_CXX),true) - # g++ always dynamically links libstdc++, even we use "-Wl,-Bstatic -lstdc++" - # We need to use gcc to statically link the C++ runtime. gcc and g++ use - # the same subprocess to compile C++ files, so it is OK to build using gcc. - CXX = $(COMPILER_PATH)gcc - else - CXX = $(COMPILER_PATH)g++ - endif - ifeq ($(ZERO_BUILD), true) - # zero - REQUIRED_CC_VER = 3.2 - REQUIRED_GCC_VER = 3.2.* - else - ifneq ("$(findstring sparc,$(ARCH))", "") - # sparc or sparcv9 - REQUIRED_CC_VER = 4.0 - else - ifeq ($(ARCH_DATA_MODEL), 32) - # i586 - REQUIRED_CC_VER = 3.2 - else - ifeq ($(ARCH), amd64) - # amd64 - REQUIRED_CC_VER = 3.2 - endif - ifeq ($(ARCH), ia64) - # ia64 - REQUIRED_CC_VER = 3.2 - endif - endif - endif - endif - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -shared -mimpure-text - SUN_COMP_VER := $(shell $(CC) --verbose 2>&1 ) - -endif - -ifeq ($(PLATFORM), solaris) - - # Settings specific to Solaris - CC = $(COMPILER_PATH)gcc - CPP = $(COMPILER_PATH)gcc -E - CXX = $(COMPILER_PATH)g++ - REQUIRED_CC_VER = 3.2 - - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -G - -endif - -# Get gcc version -_CC_VER :=$(shell $(CC) -dumpversion 2>&1 ) -CC_VER :=$(call GetVersion,"$(_CC_VER)") - diff --git a/corba/make/common/shared/Compiler-msvc.gmk b/corba/make/common/shared/Compiler-msvc.gmk deleted file mode 100644 index ed7c281f714..00000000000 --- a/corba/make/common/shared/Compiler-msvc.gmk +++ /dev/null @@ -1,186 +0,0 @@ -# -# Copyright (c) 2005, 2009, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# MSVC Compiler settings -# - -ifeq ($(PLATFORM), windows) - CC = $(COMPILER_PATH)cl - CPP = $(COMPILER_PATH)cl - CXX = $(COMPILER_PATH)cl - CCC = $(COMPILER_PATH)cl - LIBEXE = $(COMPILER_PATH)lib - LINK = $(COMPILER_PATH)link - RC = $(MSDEVTOOLS_PATH)rc - LINK32 = $(LINK) - RSC = $(RC) - - # Fill in unknown values - COMPILER_NAME=Unknown MSVC Compiler - COMPILER_VERSION= - REQUIRED_CC_VER= - REQUIRED_LINK_VER= - - # unset any GNU Make settings of MFLAGS and MAKEFLAGS which may mess up nmake - NMAKE = MFLAGS= MAKEFLAGS= $(COMPILER_PATH)nmake -nologo - - # Compiler version and type (Always get word after "Version") - ifndef CC_VER - CC_VER := $(shell $(CC) 2>&1 | $(HEAD) -n 1 | $(SED) 's/.*\(Version.*\)/\1/' | $(NAWK) '{print $$2}') - export CC_VER - endif - - # SDK-64 and MSVC6 put REBASE.EXE in a different places - go figure... - ifeq ($(ARCH_DATA_MODEL), 32) - ifndef LINK_VER - LINK_VER := $(shell $(LINK) | $(HEAD) -n 1 | $(NAWK) '{print $$6}') - export LINK_VER - endif - CC_MAJORVER :=$(call MajorVersion,$(CC_VER)) - ifeq ($(CC_MAJORVER), 13) - # This should be: CC_VER=13.10.3077 LINK_VER=7.10.3077 - REQUIRED_CC_VER = 13.10.3077 - REQUIRED_LINK_VER = 7.10.3077 - COMPILER_NAME=Visual Studio .NET 2003 Professional C++ - COMPILER_VERSION=VS2003 - REBASE = $(COMPILER_PATH)../../Common7/Tools/Bin/rebase - MTL = $(COMPILER_PATH)../../Common7/Tools/Bin/midl - ifndef COMPILER_PATH - COMPILER_PATH := $(error COMPILER_PATH cannot be empty here) - endif - endif - ifeq ($(CC_MAJORVER), 14) - # This should be: CC_VER=14.00.50727.42 LINK_VER=8.00.50727.42 - REQUIRED_CC_VER = 14.00.50727.42 - REQUIRED_LINK_VER = 8.00.50727.42 - COMPILER_NAME=Visual Studio 8 - COMPILER_VERSION=VS2005 - REBASE = $(COMPILER_PATH)../../Common8/Tools/Bin/rebase - MTL = $(COMPILER_PATH)../../Common8/Tools/Bin/midl - ifndef COMPILER_PATH - COMPILER_PATH := $(error COMPILER_PATH cannot be empty here) - endif - endif - ifeq ($(CC_MAJORVER), 15) - # This should be: CC_VER=15.00.21022.08 LINK_VER=9.00.21022.08 - REQUIRED_CC_VER = 15.00.21022.08 - REQUIRED_LINK_VER = 9.00.21022.08 - COMPILER_NAME=Visual Studio 9 - COMPILER_VERSION=VS2008 - #rebase and midl moved out of Visual Studio into the SDK: - REBASE = $(MSDEVTOOLS_PATH)/rebase - MTL = $(MSDEVTOOLS_PATH)/midl.exe - ifndef COMPILER_PATH - COMPILER_PATH := $(error COMPILER_PATH cannot be empty here) - endif - endif - ifeq ($(CC_MAJORVER), 16) - # This should be: CC_VER=16.00.30319.01 LINK_VER=10.00.30319.01 - REQUIRED_CC_VER = 16.00.30319.01 - REQUIRED_LINK_VER = 10.00.30319.01 - COMPILER_NAME=Visual Studio 10 - COMPILER_VERSION=VS2010 - #rebase and midl moved out of Visual Studio into the SDK: - REBASE = $(MSDEVTOOLS_PATH)/rebase - MTL = $(MSDEVTOOLS_PATH)/midl.exe - ifndef COMPILER_PATH - COMPILER_PATH := $(error COMPILER_PATH cannot be empty here) - endif - endif - else - # else ARCH_DATA_MODEL is 64 - ifndef LINK_VER - LINK_VER := $(shell $(LINK) | $(HEAD) -n 1 | $(NAWK) '{print $$6}') - export LINK_VER - endif - CC_MAJORVER :=$(call MajorVersion,$(CC_VER)) - CC_MINORVER :=$(call MinorVersion,$(CC_VER)) - CC_MICROVER :=$(call MicroVersion,$(CC_VER)) - ifeq ($(ARCH), ia64) - REQUIRED_CC_VER = 13.00.9337.7 - REQUIRED_LINK_VER = 7.00.9337.7 - endif - ifeq ($(ARCH), amd64) - REQUIRED_CC_VER = 14.00.40310.41 - REQUIRED_LINK_VER = 8.00.40310.39 - endif - ifeq ($(CC_MAJORVER), 13) - ifeq ($(ARCH), ia64) - # This should be: CC_VER=13.00.9337.7 LINK_VER=7.00.9337.7 - COMPILER_NAME=Microsoft Platform SDK - November 2001 Edition - COMPILER_VERSION=VS2003 - endif - endif - ifeq ($(CC_MAJORVER), 14) - ifeq ($(ARCH), amd64) - ifeq ($(CC_MICROVER), 30701) - # This should be: CC_VER=14.00.30701 LINK_VER=8.00.30701 - # WARNING: it says 14, but it is such an early build it doesn't - # have all the VS2005 compiler option changes, so treat - # this like a VS2003 compiler. - COMPILER_NAME=Microsoft Platform SDK - February 2003 Edition - COMPILER_VERSION=VS2003 - else - # This should be: CC_VER=14.00.40310.41 LINK_VER=8.00.40310.39 - COMPILER_NAME=Microsoft Platform SDK - April 2005 Edition (3790.1830) - COMPILER_VERSION=VS2005 - endif - endif - endif - ifeq ($(CC_MAJORVER), 15) - # This should be: CC_VER=15.00.21022.8 LINK_VER=9.00.21022.8 - REQUIRED_CC_VER = 15.00.21022.8 - REQUIRED_LINK_VER = 9.00.21022.8 - COMPILER_NAME=Windows SDK 6.1 Visual Studio 9 - COMPILER_VERSION=VS2008 - RC = $(MSSDK61)/bin/x64/rc - REBASE = $(MSSDK61)/bin/x64/rebase - else - ifeq ($(CC_MAJORVER), 16) - # This should be: CC_VER=16.00.30319.01 LINK_VER=9.00.30319.01 - REQUIRED_CC_VER = 16.00.30319.01 - REQUIRED_LINK_VER = 10.00.30319.01 - COMPILER_NAME=Microsoft Visual Studio 10 - COMPILER_VERSION=VS2010 - RC = $(MSSDK7)/bin/x64/rc - REBASE = $(MSSDK7)/bin/x64/rebase - else - # This will cause problems if ALT_COMPILER_PATH is defined to "" - # which is a directive to use the PATH. - REBASE = $(COMPILER_PATH)../REBASE - endif - endif - ifndef COMPILER_PATH - COMPILER_PATH := $(error COMPILER_PATH cannot be empty here) - endif - endif - ifndef COMPILER_VERSION - COMPILER_VERSION := $(error COMPILER_VERSION cannot be empty here) - endif - # Shared library generation flag - SHARED_LIBRARY_FLAG = -LD -endif - diff --git a/corba/make/common/shared/Compiler-sun.gmk b/corba/make/common/shared/Compiler-sun.gmk deleted file mode 100644 index 3e4e6879691..00000000000 --- a/corba/make/common/shared/Compiler-sun.gmk +++ /dev/null @@ -1,69 +0,0 @@ -# -# Copyright (c) 2005, 2009, 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. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# 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. -# - -# -# Sun Studio Compiler settings -# - -COMPILER_NAME=Sun Studio - -# Sun Studio Compiler settings specific to Solaris -ifeq ($(PLATFORM), solaris) - COMPILER_VERSION=SS12 - REQUIRED_CC_VER=5.9 - CC = $(COMPILER_PATH)cc - CPP = $(COMPILER_PATH)cc -E - CXX = $(COMPILER_PATH)CC - LINT = $(COMPILER_PATH)lint - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -G -endif - -# Sun Studio Compiler settings specific to Linux -ifeq ($(PLATFORM), linux) - # This has not been tested - COMPILER_VERSION=SS12 - REQUIRED_CC_VER=5.9 - CC = $(COMPILER_PATH)cc - CPP = $(COMPILER_PATH)cc -E - CXX = $(COMPILER_PATH)CC - LINT = $(COMPILER_PATH)lint - # statically link libstdc++ before C++ ABI is stablized on Linux - STATIC_CXX = true - ifeq ($(STATIC_CXX),true) - # CC always dynamically links libstdc++, even we use "-Wl,-Bstatic -lstdc++" - # We need to use cc to statically link the C++ runtime. - CXX = $(COMPILER_PATH)cc - else - CXX = $(COMPILER_PATH)CC - endif - # Option used to create a shared library - SHARED_LIBRARY_FLAG = -G -endif - -# Get compiler version -_CC_VER :=$(shell $(CC) -V 2>&1 | $(HEAD) -n 1) -CC_VER :=$(call GetVersion,"$(_CC_VER)") - diff --git a/corba/make/common/shared/Defs-java.gmk b/corba/make/common/shared/Defs-java.gmk index 57e8642a52f..8d7531fe3e4 100644 --- a/corba/make/common/shared/Defs-java.gmk +++ b/corba/make/common/shared/Defs-java.gmk @@ -42,7 +42,7 @@ else endif # -# All java tools (javac, javah, and javadoc) run faster with certain java +# All java tools (javac and javadoc) run faster with certain java # options, this macro should be used with all these tools. # In particular, the client VM makes these tools run faster when # it's available. @@ -134,21 +134,14 @@ JAVACFLAGS += -encoding ascii JAVACFLAGS += -classpath $(BOOTDIR)/lib/tools.jar JAVACFLAGS += $(OTHER_JAVACFLAGS) -# Needed for javah -JAVAHFLAGS += -classpath $(CLASSBINDIR) - # Langtools ifdef LANGTOOLS_DIST JAVAC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javac.jar - JAVAH_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javah.jar JAVADOC_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/javadoc.jar DOCLETS_JAR = $(LANGTOOLS_DIST)/bootstrap/lib/doclets.jar JAVAC_CMD = $(BOOT_JAVA_CMD) \ "-Xbootclasspath/p:$(JAVAC_JAR)" \ -jar $(JAVAC_JAR) $(JAVACFLAGS) - JAVAH_CMD = $(BOOT_JAVA_CMD) \ - "-Xbootclasspath/p:$(JAVAH_JAR)$(CLASSPATH_SEPARATOR)$(JAVADOC_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)" \ - -jar $(JAVAH_JAR) $(JAVAHFLAGS) JAVADOC_CMD = $(BOOT_JAVA_CMD) \ "-Xbootclasspath/p:$(JAVADOC_JAR)$(CLASSPATH_SEPARATOR)$(JAVAC_JAR)$(CLASSPATH_SEPARATOR)$(DOCLETS_JAR)" \ -jar $(JAVADOC_JAR) @@ -156,8 +149,6 @@ else # If no explicit tools, use boot tools (add VM flags in this case) JAVAC_CMD = $(JAVA_TOOLS_DIR)/javac $(JAVAC_JVM_FLAGS) \ $(JAVACFLAGS) - JAVAH_CMD = $(JAVA_TOOLS_DIR)/javah \ - $(JAVAHFLAGS) JAVADOC_CMD = $(JAVA_TOOLS_DIR)/javadoc $(JAVA_TOOLS_FLAGS:%=-J%) endif diff --git a/corba/make/common/shared/Defs-linux.gmk b/corba/make/common/shared/Defs-linux.gmk index c9b931f6b08..9db85a39ba7 100644 --- a/corba/make/common/shared/Defs-linux.gmk +++ b/corba/make/common/shared/Defs-linux.gmk @@ -94,14 +94,6 @@ else JDK_DEVTOOLS_DIR =$(SLASH_JAVA)/devtools endif -# COMPILER_PATH: path to where the compiler and tools are installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_COMPILER_PATH)" "undefined" - COMPILER_PATH :=$(call PrefixPath,$(ALT_COMPILER_PATH)) -else - COMPILER_PATH =/usr/bin/ -endif - # DEVTOOLS_PATH: for other tools required for building (such as zip, etc.) # NOTE: Must end with / so that it could be empty, allowing PATH usage. ifneq "$(origin ALT_DEVTOOLS_PATH)" "undefined" diff --git a/corba/make/common/shared/Defs-solaris.gmk b/corba/make/common/shared/Defs-solaris.gmk index 61d218c635c..7f0abf6a790 100644 --- a/corba/make/common/shared/Defs-solaris.gmk +++ b/corba/make/common/shared/Defs-solaris.gmk @@ -86,24 +86,6 @@ else JDK_DEVTOOLS_DIR =$(SLASH_JAVA)/devtools endif -# COMPILER_PATH: path to where the compiler and tools are installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifneq "$(origin ALT_COMPILER_PATH)" "undefined" - COMPILER_PATH :=$(call PrefixPath,$(ALT_COMPILER_PATH)) -else - # Careful here, COMPILER_VERSION may not be defined yet (see Compiler.gmk) - # If the place where we keep a set of Sun Studio compilers doesn't exist, - # try and use /opt/SUNWspro, the default location for the SS compilers. - # (DirExists checks for this path twice, an automount double check) - _SUNSTUDIO_SET_ROOT=$(JDK_DEVTOOLS_DIR)/$(ARCH_FAMILY)/SUNWspro - SUNSTUDIO_SET_ROOT:=$(call DirExists,$(_SUNSTUDIO_SET_ROOT),$(_SUNSTUDIO_SET_ROOT),) - ifneq ($(SUNSTUDIO_SET_ROOT),) - COMPILER_PATH =$(SUNSTUDIO_SET_ROOT)/$(COMPILER_VERSION)/bin/ - else - COMPILER_PATH =/opt/SUNWspro/bin/ - endif -endif - # DEVTOOLS_PATH: for other tools required for building (such as zip, etc.) # NOTE: Must end with / so that it could be empty, allowing PATH usage. ifneq "$(origin ALT_DEVTOOLS_PATH)" "undefined" diff --git a/corba/make/common/shared/Defs-windows.gmk b/corba/make/common/shared/Defs-windows.gmk index 41fcce6ce7b..559317a744e 100644 --- a/corba/make/common/shared/Defs-windows.gmk +++ b/corba/make/common/shared/Defs-windows.gmk @@ -31,7 +31,6 @@ # Level: Default is 3, 0 means none, 4 is the most but may be unreliable # Some makefiles may have set this to 0 to turn off warnings completely, # which also effectively creates a COMPILER_WARNINGS_FATAL=false situation. -# Program.gmk may turn this down to 2 (building .exe's). # Windows 64bit platforms are less likely to be warning free. # Historically, Windows 32bit builds should be mostly warning free. ifndef COMPILER_WARNING_LEVEL @@ -74,7 +73,7 @@ override INCREMENTAL_BUILD = false # The ALT values should never really have spaces or use \. # Suspect these environment variables to have spaces and/or \ characters: # SYSTEMROOT, SystemRoot, WINDIR, windir, PROGRAMFILES, ProgramFiles, -# MSTOOLS, Mstools, MSSDK, MSSdk, VC71COMNTOOLS, +# VC71COMNTOOLS, # MSVCDIR, MSVCDir. # So use $(subst \,/,) on them first adding quotes and placing them in # their own variable assigned with :=, then use FullPath. @@ -201,124 +200,6 @@ ifndef SHORTPROGRAMFILES export SHORTPROGRAMFILES endif -# Compilers, SDK, and Visual Studio (MSDEV) [32bit is different from 64bit] -ifeq ($(ARCH_DATA_MODEL), 32) - ifndef SHORTMSVCDIR - # Try looking in MSVCDIR or MSVCDir area first (set by vcvars32.bat) - ifdef MSVCDIR - xMSVCDIR :="$(subst \,/,$(MSVCDIR))" - SHORTMSVCDIR :=$(call FullPath,$(xMSVCDIR)) - else - ifdef MSVCDir - xMSVCDIR :="$(subst \,/,$(MSVCDir))" - SHORTMSVCDIR :=$(call FullPath,$(xMSVCDIR)) - else - ifneq ($(SHORTPROGRAMFILES),) - xMSVCDIR :="$(SHORTPROGRAMFILES)/Microsoft Visual Studio .NET 2003/Vc7" - SHORTMSVCDIR :=$(call FullPath,$(xMSVCDIR)) - endif - endif - endif - ifneq ($(subst MSDev98,OLDOLDOLD,$(SHORTMSVCDIR)),$(SHORTMSVCDIR)) - SHORTMSVCDIR := - endif - # If we still don't have it, look for VS100COMNTOOLS, setup by installer? - ifeq ($(SHORTMSVCDIR),) - ifdef VS100COMNTOOLS # /Common/Tools directory, use ../../Vc - xVS100COMNTOOLS :="$(subst \,/,$(VS100COMNTOOLS))" - _vs100tools :=$(call FullPath,$(xVS100COMNTOOLS)) - endif - ifneq ($(_vs100tools),) - SHORTMSVCDIR :=$(_vs100tools)/../../Vc - endif - endif - export SHORTMSVCDIR - # If we still don't have it, look for VS71COMNTOOLS, setup by installer? - ifeq ($(SHORTMSVCDIR),) - ifdef VS71COMNTOOLS # /Common/Tools directory, use ../../Vc7 - xVS71COMNTOOLS :="$(subst \,/,$(VS71COMNTOOLS))" - _vs71tools :=$(call FullPath,$(xVS71COMNTOOLS)) - endif - ifneq ($(_vs71tools),) - SHORTMSVCDIR :=$(_vs71tools)/../../Vc7 - endif - endif - export SHORTMSVCDIR - endif - ifneq ($(SHORTMSVCDIR),) - SHORTCOMPILERBIN :=$(SHORTMSVCDIR)/Bin - SHORTPSDK :=$(SHORTMSVCDIR)/PlatformSDK - export SHORTCOMPILERBIN - export SHORTPSDK - endif -endif - -# The Microsoft Platform SDK installed by itself -ifneq ($(SHORTPROGRAMFILES),) - ifndef SHORTPSDK - xPSDK :="$(SHORTPROGRAMFILES)/Microsoft Platform SDK" - SHORTPSDK :=$(call FullPath,$(xPSDK)) - ifeq ($(SHORTPSDK),) - xPSDK :="$(SHORTPROGRAMFILES)/Microsoft SDK" - SHORTPSDK :=$(call FullPath,$(xMSSDK)) - endif - export SHORTPSDK - endif -endif - -# If no SDK found yet, look in other places -ifndef SHORTPSDK - ifdef MSSDK - xMSSDK :="$(subst \,/,$(MSSDK))" - SHORTPSDK :=$(call FullPath,$(xMSSDK)) - else - ifdef MSSdk - xMSSDK :="$(subst \,/,$(MSSdk))" - SHORTPSDK :=$(call FullPath,$(xMSSDK)) - endif - endif - export SHORTPSDK -endif - -# Compilers for 64bit are from SDK -ifeq ($(ARCH_DATA_MODEL), 64) - ifndef SHORTCOMPILERBIN - ifdef VS100COMNTOOLS # /Common7/Tools directory, use ../../Vc - xVS100COMNTOOLS :="$(subst \,/,$(VS100COMNTOOLS))" - _vs100tools :=$(call FullPath,$(xVS100COMNTOOLS)) - endif - ifneq ($(_vs100tools),) - SHORTCOMPILERBIN :=$(_vs100tools)/../../Vc/bin/amd64 - xMSSDK70 :="C:/Program Files (x86)/Microsoft SDKs/Windows/v7.0A/" - MSSDK7 :=$(call FullPath,$(xMSSDK70)) - export MSSDK7 - else - xMSSDK61 :="C:/Program Files/Microsoft SDKs/Windows/v6.1/" - MSSDK61 :=$(call FullPath,$(xMSSDK61)) - xVS2008 :="C:/Program Files (x86)/Microsoft Visual Studio 9.0/" - _vs2008 :=$(call FullPath,$(xVS2008)) - ifneq ($(_vs2008),) - ifeq ($(ARCH), ia64) - SHORTCOMPILERBIN :=$(_vs2008)/VC/Bin/x86_ia64 - endif - ifeq ($(ARCH), amd64) - SHORTCOMPILERBIN :=$(_vs2008)/VC/Bin/$(ARCH) - endif - else - ifneq ($(SHORTPSDK),) - ifeq ($(ARCH), ia64) - SHORTCOMPILERBIN :=$(SHORTPSDK)/Bin/Win64 - endif - ifeq ($(ARCH), amd64) - SHORTCOMPILERBIN :=$(SHORTPSDK)/Bin/Win64/x86/$(ARCH) - endif - endif - endif - endif - export SHORTCOMPILERBIN - endif -endif - # Location on system where jdk installs might be ifneq ($(SHORTPROGRAMFILES),) USRJDKINSTANCES_PATH =$(SHORTPROGRAMFILES)/Java @@ -356,55 +237,6 @@ ifndef JDK_DEVTOOLS_DIR export JDK_DEVTOOLS_DIR endif -# COMPILER_PATH: path to where the compiler and tools are installed. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifndef COMPILER_PATH - ifdef ALT_COMPILER_PATH - xALT_COMPILER_PATH :="$(subst \,/,$(ALT_COMPILER_PATH))" - fxALT_COMPILER_PATH :=$(call FullPath,$(xALT_COMPILER_PATH)) - COMPILER_PATH :=$(call PrefixPath,$(fxALT_COMPILER_PATH)) - else - COMPILER_PATH :=$(call PrefixPath,$(SHORTCOMPILERBIN)) - endif - COMPILER_PATH :=$(call AltCheckSpaces,COMPILER_PATH) - export COMPILER_PATH -endif - -# MSDEVTOOLS_PATH: path to where the additional MS Compiler tools are. -# NOTE: Must end with / so that it could be empty, allowing PATH usage. -ifndef MSDEVTOOLS_PATH - ifdef ALT_MSDEVTOOLS_PATH - xALT_MSDEVTOOLS_PATH :="$(subst \,/,$(ALT_MSDEVTOOLS_PATH))" - fxALT_MSDEVTOOLS_PATH :=$(call FullPath,$(xALT_MSDEVTOOLS_PATH)) - MSDEVTOOLS_PATH :=$(call PrefixPath,$(fxALT_MSDEVTOOLS_PATH)) - else - ifeq ($(ARCH_DATA_MODEL), 64) - ifdef MSTOOLS - xMSTOOLS :="$(subst \,/,$(MSTOOLS))" - _ms_tools :=$(call FullPath,$(xMSTOOLS)) - else - ifdef Mstools - xMSTOOLS :="$(subst \,/,$(Mstools))" - _ms_tools :=$(call FullPath,$(xMSTOOLS)) - else - _ms_tools := - endif - endif - ifneq ($(_ms_tools),) - _ms_tools_bin :=$(_ms_tools)/Bin - else - # Assumes compiler bin is .../Bin/win64/x86/AMD64, rc.exe is 3 levels up - _ms_tools_bin :=$(SHORTCOMPILERBIN)/../../.. - endif - else - _ms_tools_bin :=$(SHORTCOMPILERBIN) - endif - MSDEVTOOLS_PATH :=$(call PrefixPath,$(_ms_tools_bin)) - endif - MSDEVTOOLS_PATH:=$(call AltCheckSpaces,MSDEVTOOLS_PATH) - export MSDEVTOOLS_PATH -endif - # DEVTOOLS_PATH: for other tools required for building (such as zip, etc.) # NOTE: Must end with / so that it could be empty, allowing PATH usage. ifndef DEVTOOLS_PATH diff --git a/corba/make/common/shared/Defs.gmk b/corba/make/common/shared/Defs.gmk index 1875bd95fd7..af1456bab97 100644 --- a/corba/make/common/shared/Defs.gmk +++ b/corba/make/common/shared/Defs.gmk @@ -51,7 +51,7 @@ # Get shared system utilities macros defined include $(BUILDDIR)/common/shared/Defs-utils.gmk -# Assumes ARCH, PLATFORM, ARCH_VM_SUBDIR, etc. have been defined. +# Assumes ARCH, PLATFORM, etc. have been defined. # Simple pwd path define PwdPath @@ -157,7 +157,6 @@ endef _check_values:=\ $(call CheckValue,ARCH,),\ $(call CheckValue,ARCH_DATA_MODEL,),\ -$(call CheckValue,ARCH_VM_SUBDIR,),\ $(call CheckValue,VARIANT,),\ $(call CheckValue,PLATFORM,) @@ -194,21 +193,15 @@ endif # can be OPT or DBG, default is OPT # Determine the extra pattern to add to the release name for debug/fastdebug. # Determine the JDK_IMPORT_VARIANT, so we get the right VM files copied over. -# Determine suffix for obj directory or OBJDIR, for .o files. -# (by keeping .o files separate, just .o files, they don't clobber each -# other, however, the library files will clobber each other). # ifeq ($(VARIANT), DBG) BUILD_VARIANT_RELEASE=-debug - OBJDIRNAME_SUFFIX=_g else BUILD_VARIANT_RELEASE= - OBJDIRNAME_SUFFIX= endif ifeq ($(FASTDEBUG), true) VARIANT=DBG BUILD_VARIANT_RELEASE=-fastdebug - OBJDIRNAME_SUFFIX=_gO _JDK_IMPORT_VARIANT=/fastdebug endif @@ -330,6 +323,4 @@ BINDIR = $(OUTPUTDIR)/bin$(ISA_DIR) # Absolute path to output directory ABS_OUTPUTDIR:=$(call FullPath,$(OUTPUTDIR)) -# Get shared compiler settings -include $(BUILDDIR)/common/shared/Compiler.gmk diff --git a/corba/make/common/shared/Platform.gmk b/corba/make/common/shared/Platform.gmk index edaf8582fde..e1bb4466531 100644 --- a/corba/make/common/shared/Platform.gmk +++ b/corba/make/common/shared/Platform.gmk @@ -58,19 +58,10 @@ PLATFORM_SHARED=done # ARCH sparc, sparcv9, i586, amd64, or ia64 # ARCH_FAMILY sparc or i586 # ARCHPROP sparc or x86 -# ARCH_VM_SUBDIR jre/bin, jre/lib/sparc, etc. -# LIBARCH sparc, sparcv9, i386, amd64, or ia64 # DEV_NULL destination of /dev/null, NUL or /dev/NULL # CLASSPATH_SEPARATOR separator in classpath, ; or : -# LIB_PREFIX dynamic or static library prefix, lib or empty -# LIB_SUFFIX static library file suffix, .lib or .a? -# LIBRARY_SUFFIX dynamic library file suffix, .dll or .so -# OBJECT_SUFFIX object file suffix, .o or .obj -# EXE_SUFFIX executable file suffix, .exe or empty # BUNDLE_FILE_SUFFIX suffix for bundles: .tar or .tar.gz # ISA_DIR solaris only: /sparcv9 or /amd64 -# LIBARCH32 solaris only: sparc or i386 -# LIBARCH64 solaris only: sparcv9 or amd64 # REQUIRED_WINDOWS_NAME windows only: basic name of windows # REQUIRED_WINDOWS_VERSION windows only: specific version of windows # USING_CYGWIN windows only: true or false @@ -129,7 +120,6 @@ ifeq ($(SYSTEM_UNAME), SunOS) # Need to maintain the jre/lib/i386 location for 32-bit Intel ifeq ($(ARCH), i586) ARCH_FAMILY = $(ARCH) - LIBARCH = i386 # Value of Java os.arch property ARCHPROP = x86 else @@ -138,17 +128,8 @@ ifeq ($(SYSTEM_UNAME), SunOS) else ARCH_FAMILY = sparc endif - LIBARCH = $(ARCH) # Value of Java os.arch property - ARCHPROP = $(LIBARCH) - endif - # The two LIBARCH names - ifeq ($(ARCH_FAMILY), sparc) - LIBARCH32 = sparc - LIBARCH64 = sparcv9 - else - LIBARCH32 = i386 - LIBARCH64 = amd64 + ARCHPROP = $(ARCH) endif # Suffix for file bundles used in previous release BUNDLE_FILE_SUFFIX=.tar @@ -218,16 +199,12 @@ ifeq ($(SYSTEM_UNAME), Linux) endif endif - # Need to maintain the jre/lib/i386 location for 32-bit Intel ifeq ($(ARCH), i586) - LIBARCH = i386 + ARCHPROP = i386 else - LIBARCH = $(ARCH) + ARCHPROP = $(ARCH) endif - # Value of Java os.arch property - ARCHPROP = $(LIBARCH) - # Suffix for file bundles used in previous release BUNDLE_FILE_SUFFIX=.tar.gz # Minimum disk space needed as determined by running 'du -sk' on @@ -303,9 +280,7 @@ ifeq ($(PLATFORM), windows) endif endif export ARCH_DATA_MODEL - # LIBARCH is used to preserve the jre/lib/i386 directory name for 32-bit intel ARCH=i586 - LIBARCH=i386 # Value of Java os.arch property ARCHPROP=x86 REQUIRED_WINDOWS_NAME=Windows Professional 2000 @@ -323,9 +298,8 @@ ifeq ($(PLATFORM), windows) ARCH=ia64 endif endif - LIBARCH=$(ARCH) # Value of Java os.arch property - ARCHPROP=$(LIBARCH) + ARCHPROP=$(ARCH) endif ARCH_FAMILY = $(ARCH) # Where is unwanted output to be delivered? @@ -337,14 +311,6 @@ ifeq ($(PLATFORM), windows) export DEV_NULL # Classpath separator CLASSPATH_SEPARATOR = ; - # The suffix used for object file (.o for unix .obj for windows) - OBJECT_SUFFIX = obj - # The suffix applied to executables (.exe for windows, nothing for solaris) - EXE_SUFFIX = .exe - # The prefix applied to library files (lib for solaris, nothing for windows) - LIB_PREFIX= - LIBRARY_SUFFIX = dll - LIB_SUFFIX = lib # User name determination (set _USER) ifndef USER ifdef USERNAME @@ -359,8 +325,6 @@ ifeq ($(PLATFORM), windows) else _USER:=$(USER) endif - # Location of client/server directories - ARCH_VM_SUBDIR=jre/bin # Suffix for file bundles used in previous release BUNDLE_FILE_SUFFIX=.tar # Minimum disk space needed as determined by running 'du -sk' on @@ -430,16 +394,6 @@ ifneq ($(PLATFORM), windows) export DEV_NULL # Character used between entries in classpath CLASSPATH_SEPARATOR = : - # suffix used for object file (.o for unix .obj for windows) - OBJECT_SUFFIX = o - # The suffix applied to runtime libraries - LIBRARY_SUFFIX = so - # The suffix applied to link libraries - LIB_SUFFIX = so - # The suffix applied to executables (.exe for windows, nothing for solaris) - EXE_SUFFIX = - # The prefix applied to library files (lib for solaris, nothing for windows) - LIB_PREFIX = lib # User name determination (set _USER) ifndef USER ifdef LOGNAME @@ -450,8 +404,6 @@ ifneq ($(PLATFORM), windows) else _USER:=$(USER) endif - # Location of client/server directories - ARCH_VM_SUBDIR=jre/lib/$(LIBARCH) endif # If blanks in the username, use the first 4 words and pack them together diff --git a/corba/make/org/omg/idl/Makefile b/corba/make/org/omg/idl/Makefile index 27a8cfa897f..87ad9db55a9 100644 --- a/corba/make/org/omg/idl/Makefile +++ b/corba/make/org/omg/idl/Makefile @@ -32,12 +32,6 @@ PACKAGE = com.sun.tools.corba.se.idl PRODUCT = sun include $(BUILDDIR)/common/Defs.gmk -# This program must contain a manifest that defines the execution level -# needed to follow standard Vista User Access Control Guidelines -# This must be set before Program.gmk is included -# -BUILD_MANIFEST=true - # # Files # diff --git a/hotspot/.hgtags b/hotspot/.hgtags index 71539d8e572..8dabba4e817 100644 --- a/hotspot/.hgtags +++ b/hotspot/.hgtags @@ -121,3 +121,5 @@ e44a93947ccbfce712b51725f313163606f15486 jdk7-b108 cc4bb3022b3144dc5db0805b9ef6c7eff2aa3b81 jdk7-b109 2f25f2b8de2700a1822463b1bd3d02b5e218018f jdk7-b110 07b042e13dde4f3479ba9ec55120fcd5e8623323 jdk7-b111 +5511edd5d719f3fc9fdd04879482026a3d2c8652 jdk7-b112 +5511edd5d719f3fc9fdd04879482026a3d2c8652 hs20-b01 diff --git a/hotspot/make/linux/adlc_updater b/hotspot/make/linux/adlc_updater index b54f783d6ee..6d31b792c05 100644 --- a/hotspot/make/linux/adlc_updater +++ b/hotspot/make/linux/adlc_updater @@ -15,5 +15,6 @@ fix_lines() { ' F2=$2 mv $1+ $1 } -[ -f $3/$1 ] && (fix_lines $2/$1 $3/$1; cmp -s $2/$1 $3/$1) || \ +fix_lines $2/$1 $3/$1 +[ -f $3/$1 ] && cmp -s $2/$1 $3/$1 || \ ( [ -f $3/$1 ] && echo Updating $3/$1 ; touch $2/made-change ; mv $2/$1 $3/$1 ) diff --git a/hotspot/make/solaris/adlc_updater b/hotspot/make/solaris/adlc_updater index b54f783d6ee..6d31b792c05 100644 --- a/hotspot/make/solaris/adlc_updater +++ b/hotspot/make/solaris/adlc_updater @@ -15,5 +15,6 @@ fix_lines() { ' F2=$2 mv $1+ $1 } -[ -f $3/$1 ] && (fix_lines $2/$1 $3/$1; cmp -s $2/$1 $3/$1) || \ +fix_lines $2/$1 $3/$1 +[ -f $3/$1 ] && cmp -s $2/$1 $3/$1 || \ ( [ -f $3/$1 ] && echo Updating $3/$1 ; touch $2/made-change ; mv $2/$1 $3/$1 ) diff --git a/hotspot/make/solaris/makefiles/amd64.make b/hotspot/make/solaris/makefiles/amd64.make index d9ca84a6e67..4c6afaad702 100644 --- a/hotspot/make/solaris/makefiles/amd64.make +++ b/hotspot/make/solaris/makefiles/amd64.make @@ -35,7 +35,8 @@ ifeq ("${Platform_compiler}", "sparcWorks") # Temporary until SS10 C++ compiler is fixed OPT_CFLAGS/generateOptoStub.o = -xO2 - +# Temporary util SS12u1 C++ compiler is fixed +OPT_CFLAGS/c1_LinearScan.o = -xO2 else ifeq ("${Platform_compiler}", "gcc") diff --git a/hotspot/make/solaris/makefiles/reorder_COMPILER1_i486 b/hotspot/make/solaris/makefiles/reorder_COMPILER1_i486 index e920dcefec7..47553eb36cc 100644 --- a/hotspot/make/solaris/makefiles/reorder_COMPILER1_i486 +++ b/hotspot/make/solaris/makefiles/reorder_COMPILER1_i486 @@ -18,7 +18,6 @@ text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compilationPolicy.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compileBroker.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: fprofiler.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: genCollectedHeap.o; -text: .text%__1cTAssertIsPermClosure2t6M_v_: genCollectedHeap.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: generateOopMap.o; text: .text%__1cNCellTypeStateLmake_bottom6F_0_: generateOopMap.o; text: .text%__1cNCellTypeStateImake_any6Fi_0_: generateOopMap.o; @@ -34,23 +33,15 @@ text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiTagMap.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: management.o; text: .text%__1cJTimeStamp2t6M_v_: management.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: markSweep.o; -text: .text%__1cJMarkSweepSMarkAndPushClosure2t6M_v_: markSweep.o; -text: .text%__1cJMarkSweepRFollowRootClosure2t6M_v_: markSweep.o; -text: .text%__1cJMarkSweepSFollowStackClosure2t6M_v_: markSweep.o; -text: .text%__1cJMarkSweepOIsAliveClosure2t6M_v_: markSweep.o; -text: .text%__1cJMarkSweepQKeepAliveClosure2t6M_v_: markSweep.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: memoryService.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: oopMap.o; -text: .text%__1cQDoNothingClosure2t6M_v_: oopMap.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: parGCAllocBuffer.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psMarkSweep.o; -text: .text%__1cTPSAlwaysTrueClosure2t6M_v_: psMarkSweep.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psScavenge.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: relocInfo.o; text: .text%__1cQRelocationHolder2t6M_v_: relocInfo.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: runtimeService.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: sharedHeap.o; -text: .text%__1cTAssertIsPermClosure2t6M_v_: sharedHeap.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vmStructs.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vm_version.o; text: .text%__1cTAbstract_VM_VersionKvm_release6F_pkc_; @@ -94,7 +85,6 @@ text: .text%__1cCosXnon_memory_address_word6F_pc_; text: .text%__1cCosHSolarisOlibthread_init6F_v_; text: .text%__1cRlwp_priocntl_init6F_i_: os_solaris.o; text: .text%__1cNpriocntl_stub6FinGidtype_lipc_l_: os_solaris.o; -text: .text%__1cOresolve_symbol6Fpkc_pC_: os_solaris.o; text: .text%__1cCosHSolarisQsignal_sets_init6F_v_; text: .text%__1cCosHSolarisPinit_signal_mem6F_v_; text: .text%__1cCosHSolarisXinstall_signal_handlers6F_v_; @@ -107,7 +97,6 @@ text: .text%__1cSThreadLocalStorageEinit6F_v_; text: .text%__1cSThreadLocalStorageHpd_init6F_v_; text: .text%__1cCosbDallocate_thread_local_storage6F_i_; text: .text%__1cSThreadLocalStoragebCgenerate_code_for_get_thread6F_v_; -text: .text%__1cRAllocateTLSOffset6F_v_: threadLS_solaris_x86.o; text: .text%__1cPvm_init_globals6F_v_; text: .text%__1cScheck_ThreadShadow6F_v_; text: .text%__1cNeventlog_init6F_v_; @@ -119,17 +108,8 @@ text: .text%__1cPperfMemory_init6F_v_; text: .text%__1cKPerfMemoryKinitialize6F_v_; text: .text%__1cCosZvm_allocation_granularity6F_i_; text: .text%__1cKPerfMemoryUcreate_memory_region6FI_v_; -text: .text%__1cUcreate_shared_memory6FI_pc_: perfMemory_solaris.o; -text: .text%__1cSmmap_create_shared6FI_pc_: perfMemory_solaris.o; text: .text%__1cCosScurrent_process_id6F_i_; -text: .text%__1cNget_user_name6Fl_pc_: perfMemory_solaris.o; -text: .text%__1cQget_user_tmp_dir6Fpkc_pc_: perfMemory_solaris.o; text: .text%__1cCosSget_temp_directory6F_pkc_; -text: .text%__1cWget_sharedmem_filename6Fpkci_pc_: perfMemory_solaris.o; -text: .text%__1cbBcleanup_sharedmem_resources6Fpkc_v_: perfMemory_solaris.o; -text: .text%lstat: perfMemory_solaris.o; -text: .text%__1cPfilename_to_pid6Fpkc_l_: perfMemory_solaris.o; -text: .text%__1cbAcreate_sharedmem_resources6Fpkc1I_i_: perfMemory_solaris.o; text: .text%__1cGThread2t6M_v_; text: .text%__1cFArena2t6M_v_; text: .text%__1cFChunk2n6FII_pv_; @@ -161,7 +141,6 @@ text: .text%__1cCosRinitialize_thread6F_v_; text: .text%__1cNReservedSpaceUpage_align_size_down6FI_I_; text: .text%__1cCosHSolarisVinit_thread_fpu_state6F_v_; text: .text%__1cOJNIHandleBlockOallocate_block6FpnGThread__p0_; -text: .text%__1cQcreate_os_thread6FpnGThread_I_pnIOSThread__: os_solaris.o; text: .text%__1cIOSThread2t6MpFpv_i1_v_; text: .text%__1cIOSThreadNpd_initialize6M_v_; text: .text%__1cCosHSolarisPhotspot_sigmask6FpnGThread__v_; @@ -186,7 +165,6 @@ text: .text%__1cNThreadServiceEinit6F_v_; text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnPPerfLongCounter__; text: .text%__1cORuntimeServiceEinit6F_v_; text: .text%__1cTClassLoadingServiceEinit6F_v_; -text: .text%__1cKvtune_init6F_v_; text: .text%__1cObytecodes_init6F_v_; text: .text%__1cJBytecodesKinitialize6F_v_; text: .text%__1cJBytecodesNpd_initialize6F_v_; @@ -200,7 +178,6 @@ text: .text%__1cKHandleMark2T6M_v_; text: .text%__1cLClassLoaderbBsetup_bootstrap_search_path6F_v_; text: .text%__1cCosGstrdup6Fpkc_pc_; text: .text%__1cCosEstat6FpkcpnEstat__i_; -text: .text%stat: os_solaris.o; text: .text%JVM_RawMonitorCreate; text: .text%JVM_NativePath; text: .text%JVM_RawMonitorEnter; @@ -216,7 +193,6 @@ text: .text%__1cNReservedSpace2t6MI_v_; text: .text%__1cMVirtualSpaceQuncommitted_size6kM_I_; text: .text%__1cMVirtualSpaceNreserved_size6kM_I_; text: .text%__1cMVirtualSpaceOcommitted_size6kM_I_; -text: .text%__1cSalign_to_page_size6FI_I_: heap.o; text: .text%__1cICodeHeapFclear6M_v_; text: .text%__1cICodeHeapTmark_segmap_as_free6MII_v_; text: .text%__1cNMemoryServiceZadd_code_heap_memory_pool6FpnICodeHeap__v_; @@ -244,9 +220,7 @@ text: .text%__1cKMemoryPoolYrecord_peak_memory_usage6M_v_; text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__; text: .text%__1cMCodeHeapPoolNused_in_bytes6M_I_: memoryPool.o; text: .text%__1cICodeHeapSallocated_capacity6kM_I_; -text: .text%__1cKMemoryPoolImax_size6kM_I_: memoryPool.o; text: .text%__1cXresource_allocate_bytes6FI_pc_; -text: .text%__1cKCodeBuffer2t6MpCi_v_; text: .text%__1cRAbstractAssembler2t6MpnKCodeBuffer__v_; text: .text%__1cYVM_Version_StubGeneratorTgenerate_getPsrInfo6M_pC_: vm_version_x86.o; text: .text%__1cMStubCodeMark2t6MpnRStubCodeGenerator_pkc4_v_; @@ -269,10 +243,8 @@ text: .text%__1cJAssemblerDret6Mi_v_; text: .text%__1cMStubCodeMark2T6M_v_; text: .text%__1cRAbstractAssemblerFflush6M_v_; text: .text%__1cRStubCodeGeneratorLstub_epilog6MpnMStubCodeDesc__v_; -text: .text%__1cFVTuneNregister_stub6FpkcpC3_v_; text: .text%__1cFForteNregister_stub6FpkcpC3_v_; text: .text%__1cKVM_VersionWget_processor_features6F_v_; -text: .text%__1cVcheck_for_sse_support6F_v_: os_solaris_x86.o; text: .text%jio_snprintf; text: .text%jio_vsnprintf; text: .text%__1cPlocal_vsnprintf6FpcIpkcpv_i_; @@ -651,7 +623,6 @@ text: .text%__1cZInterpreterMacroAssemblerWprofile_switch_default6MpnMRegisterIm text: .text%__1cNTemplateTableMlookupswitch6F_v_; text: .text%__1cNTemplateTableH_return6FnITosState__v_; text: .text%__1cNTemplateTableJgetstatic6Fi_v_; -text: .text%__1cNTemplateTableXresolve_cache_and_index6FipnMRegisterImpl_2_v_; text: .text%__1cJAssemblerHfistp_d6MnHAddress__v_; text: .text%__1cNTemplateTableJputstatic6Fi_v_; text: .text%__1cOMacroAssemblerLstore_check6MpnMRegisterImpl_nHAddress__v_; @@ -735,7 +706,6 @@ text: .text%__1cbBBlockOffsetArrayContigSpaceQalloc_block_work6MpnIHeapWord_2_v_ text: .text%__1cLsymbolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; text: .text%__1cLsymbolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: symbolKlass.o; text: .text%__1cLsymbolKlassOset_alloc_size6MI_v_: symbolKlass.o; -text: .text%__1cKoopFactoryKnew_symbol6FpkcipnGThread__pnNsymbolOopDesc__; text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__; text: .text%__1cJHashtableLhash_symbol6Fpkci_I_: symbolTable.o; text: .text%__1cLSymbolTableGlookup6MipkciI_pnNsymbolOopDesc__; @@ -806,7 +776,6 @@ text: .text%__1cQSystemDictionaryRload_shared_class6FnMsymbolHandle_nGHandle_pnG text: .text%__1cQSystemDictionaryRfind_shared_class6FnMsymbolHandle__pnMklassOopDesc__; text: .text%__1cQSystemDictionaryRload_shared_class6FnTinstanceKlassHandle_nGHandle_pnGThread__1_; text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cFVTuneQstart_class_load6F_v_; text: .text%__1cJEventMark2t6MpkcE_v_: classLoader.o; text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_; text: .text%__1cMstringStream2t6MI_v_; @@ -854,7 +823,6 @@ text: .text%__1cPClassFileParserYparse_checked_exceptions6MpHInSconstantPoolHand text: .text%__1cPClassFileStreamHskip_u26MipnGThread__v_; text: .text%__1cSconstMethodOopDescbEchecked_exceptions_length_addr6kM_pH_; text: .text%__1cSconstMethodOopDescYchecked_exceptions_start6kM_pnXCheckedExceptionElement__; -text: .text%__1cXcopy_u2_with_conversion6FpH0i_v_: classFileParser.o; text: .text%__1cPClassFileParserbDcompute_transitive_interfaces6MnTinstanceKlassHandle_nOobjArrayHandle_pnGThread__2_; text: .text%__1cPClassFileParserMsort_methods6MnOobjArrayHandle_111pnGThread__nPtypeArrayHandle__; text: .text%method_compare: methodOop.o; @@ -862,9 +830,6 @@ text: .text%__1cLklassVtableQget_num_mirandas6FpnMklassOopDesc_pnPobjArrayOopDes text: .text%__1cLklassVtableMget_mirandas6FpnNGrowableArray4CpnNmethodOopDesc___pnMklassOopDesc_pnPobjArrayOopDesc_8_v_; text: .text%__1cLklassItableTcompute_itable_size6FnOobjArrayHandle__i_; text: .text%__1cUvisit_all_interfaces6FpnPobjArrayOopDesc_pnXInterfaceVisiterClosure__v_; -text: .text%__1cPClassFileParserUcompute_oop_map_size6MnTinstanceKlassHandle_ii_i_; -text: .text%__1cKoopFactoryRnew_instanceKlass6FiiiinNReferenceType_pnGThread__pnMklassOopDesc__; -text: .text%__1cSinstanceKlassKlassXallocate_instance_klass6MiiiinNReferenceType_pnGThread__pnMklassOopDesc__; text: .text%__1cNinstanceKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlass.o; text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_: instanceKlass.o; text: .text%__1cNinstanceKlassQinit_implementor6M_v_; @@ -878,7 +843,6 @@ text: .text%__1cNinstanceKlassYcompute_secondary_supers6MipnGThread__pnPobjArray text: .text%__1cLklassItableZsetup_itable_offset_table6FnTinstanceKlassHandle__v_; text: .text%__1cFKlassKsuperklass6kM_pnNinstanceKlass__; text: .text%__1cPClassFileParserVset_precomputed_flags6MnTinstanceKlassHandle__v_; -text: .text%__1cFKlassNlookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; text: .text%__1cNinstanceKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; text: .text%__1cNinstanceKlassLfind_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; text: .text%__1cNinstanceKlassLfind_method6FpnPobjArrayOopDesc_pnNsymbolOopDesc_4_pnNmethodOopDesc__; @@ -893,7 +857,6 @@ text: .text%__1cQPackageHashtableMcompute_hash6Mpkci_I_: classLoader.o; text: .text%__1cQPackageHashtableJget_entry6MiIpkcI_pnLPackageInfo__: classLoader.o; text: .text%__1cMstringStream2T6M_v_; text: .text%__1cSThreadProfilerMark2T6M_v_; -text: .text%__1cFVTuneOend_class_load6F_v_; text: .text%__1cQSystemDictionaryVdefine_instance_class6FnTinstanceKlassHandle_pnGThread__v_; text: .text%__1cVLoaderConstraintTableWfind_loader_constraint6MnMsymbolHandle_nGHandle__ppnVLoaderConstraintEntry__; text: .text%__1cQSystemDictionaryQadd_to_hierarchy6FnTinstanceKlassHandle_pnGThread__v_; @@ -970,8 +933,6 @@ text: .text%__1cbBjava_lang_ref_SoftReferenceJset_clock6Fx_v_; text: .text%__1cQjni_handles_init6F_v_; text: .text%__1cKJNIHandlesKinitialize6F_v_; text: .text%__1cOvmStructs_init6F_v_; -text: .text%__1cIFrameMapEinit6F_v_; -text: .text%__1cIRuntime1Kinitialize6F_v_; text: .text%__1cIRuntime1Ninitialize_pd6F_v_; text: .text%__1cNSharedRuntimeTgenerate_deopt_blob6F_v_; text: .text%__1cJOopMapSet2t6M_v_; @@ -996,7 +957,6 @@ text: .text%__1cJOopMapSetJheap_size6kM_i_; text: .text%__1cGOopMapJheap_size6kM_i_; text: .text%__1cJOopMapSetHcopy_to6MpC_v_; text: .text%__1cGOopMapHcopy_to6MpC_v_; -text: .text%__1cIRuntime1Rgenerate_blob_for6Fn0AGStubID__v_; text: .text%__1cLOopRecorder2t6MpnFArena__v_; text: .text%__1cIRuntime1Iname_for6Fn0AGStubID__pkc_; text: .text%__1cLRuntimeStub2n6FII_pv_; @@ -1004,7 +964,6 @@ text: .text%__1cNStubAssemblerHcall_RT6MpnMRegisterImpl_2pC2_i_; text: .text%__1cNStubAssemblerHcall_RT6MpnMRegisterImpl_2pCi_i_; text: .text%__1cJStubFrame2T6M_v_; text: .text%__1cOMacroAssemblerLtlab_refill6MrnFLabel_22_v_; -text: .text%__1cLlog2_intptr6Fi_i_: assembler_x86.o; text: .text%__1cOMacroAssemblerNeden_allocate6MpnMRegisterImpl_2i2rnFLabel__v_; text: .text%__1cOMacroAssemblerLverify_tlab6M_v_; text: .text%__1cOMacroAssemblerNtlab_allocate6MpnMRegisterImpl_2i22rnFLabel__v_; @@ -1033,7 +992,6 @@ text: .text%__1cPICStubInterfaceRcode_size_to_size6kMi_i_: icBuffer.o; text: .text%__1cPICStubInterfaceKinitialize6MpnEStub_i_v_: icBuffer.o; text: .text%__1cTcompilerOracle_init6F_v_; text: .text%__1cOCompilerOraclePparse_from_file6F_v_; -text: .text%__1cHcc_file6F_pkc_: compilerOracle.o; text: .text%__1cWcompilationPolicy_init6F_v_; text: .text%__1cNinstanceKlassGvtable6kM_pnLklassVtable__; text: .text%__1cNinstanceKlassKjava_super6kM_pnMklassOopDesc__: instanceKlass.o; @@ -1076,18 +1034,14 @@ text: .text%__1cNinstanceKlassKlink_class6MpnGThread__v_; text: .text%__1cNinstanceKlassNrewrite_class6MpnGThread__v_; text: .text%__1cIRewriterHrewrite6FnTinstanceKlassHandle_pnGThread__v_; text: .text%__1cYconstantPoolCacheOopDescKinitialize6MrnIintArray__v_; -text: .text%__1cWConstantPoolCacheEntryRset_initial_state6Mi_v_; text: .text%__1cTAbstractInterpreterLmethod_kind6FnMmethodHandle__n0AKMethodKind__; text: .text%__1cMNativeLookupTbase_library_lookup6Fpkc22_pC_; text: .text%__1cMNativeLookupNpure_jni_name6FnMmethodHandle__pc_; text: .text%__1cMoutputStreamFprint6MpkcE_v_; text: .text%__1cNmethodOopDescKklass_name6kM_pnNsymbolOopDesc__; -text: .text%__1cOmangle_name_on6FpnMoutputStream_pnNsymbolOopDesc__v_: nativeLookup.o; -text: .text%__1cOmangle_name_on6FpnMoutputStream_pnNsymbolOopDesc_ii_v_: nativeLookup.o; text: .text%__1cMoutputStreamDput6Mc_v_; text: .text%__1cCosYprint_jni_name_prefix_on6FpnMoutputStream_i_v_; text: .text%__1cCosYprint_jni_name_suffix_on6FpnMoutputStream_i_v_; -text: .text%__1cVlookup_special_native6Fpc_pC_: nativeLookup.o; text: .text%__1cbEinitialize_converter_functions6F_v_; text: .text%__1cIUniverseWupdate_heap_info_at_gc6F_v_; text: .text%__1cQGenCollectedHeapIcapacity6kM_I_; @@ -1137,7 +1091,6 @@ text: .text%__1cCosMstart_thread6FpnGThread__v_; text: .text%__1cCosPpd_start_thread6FpnGThread__v_; text: .text%__1cCosTset_native_priority6FpnGThread_i_nIOSReturn__; text: .text%__1cQset_lwp_priority6Fiii_i_; -text: .text%__1cVscale_to_lwp_priority6Fiii_i_: os_solaris.o; text: .text%__1cIVMThreadDrun6M_v_; text: .text%__1cIVMThreadEloop6M_v_; text: .text%__1cQVMOperationQdDueueLremove_next6M_pnMVM_Operation__; @@ -1154,7 +1107,6 @@ text: .text%__1cNinstanceKlassRclass_initializer6M_pnNmethodOopDesc__; text: .text%__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_; text: .text%__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_; text: .text%__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cRruntime_type_from6FpnJJavaValue__nJBasicType__: javaCalls.o; text: .text%__1cTAbstractInterpreterbFsize_top_interpreter_activation6FpnNmethodOopDesc__i_; text: .text%__1cPJavaCallWrapper2t6MnMmethodHandle_nGHandle_pnJJavaValue_pnGThread__v_; text: .text%__1cRJavaCallArgumentsKparameters6M_pi_; @@ -1192,7 +1144,6 @@ text: .text%__1cXSignatureHandlerLibraryLset_handler6FpnKCodeBuffer__pC_; text: .text%__1cXSignatureHandlerLibraryOpd_set_handler6FpC_v_; text: .text%jni_RegisterNatives: jni.o; text: .text%__1cPjava_lang_ClassLas_klassOop6FpnHoopDesc__pnMklassOopDesc__; -text: .text%__1cLSymbolTableFprobe6Fpkci_pnNsymbolOopDesc__; text: .text%__1cPJavaCallWrapper2T6M_v_; text: .text%__1cOJNIHandleBlockNrelease_block6Fp0pnGThread__v_; text: .text%__1cNinstanceKlassbJset_initialization_state_and_notify6Mn0AKClassState_pnGThread__v_; @@ -1206,7 +1157,6 @@ text: .text%__1cPFieldAccessInfoDset6MnLKlassHandle_nMsymbolHandle_iinJBasicType text: .text%__1cWConstantPoolCacheEntryOset_bytecode_26MnJBytecodesECode__v_; text: .text%__1cSInterpreterRuntimeE_new6FpnKJavaThread_pnTconstantPoolOopDesc_i_v_; text: .text%__1cMLinkResolverVresolve_invokespecial6FrnICallInfo_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cWConstantPoolCacheEntryPbytecode_number6FnJBytecodesECode__i_: cpCacheOop.o; text: .text%__1cNSignatureInfoJdo_object6Mii_v_: bytecode.o; text: .text%__1cNSignatureInfoHdo_long6M_v_: bytecode.o; text: .text%JVM_CurrentTimeMillis; @@ -1225,8 +1175,6 @@ text: .text%__1cQjava_lang_StringbBcreate_tenured_from_unicode6FpHipnGThread__nG text: .text%__1cKoopFactoryXnew_permanent_charArray6FipnGThread__pnQtypeArrayOopDesc__; text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; text: .text%__1cNmethodOopDescIbci_from6kMpC_i_; -text: .text%__1cPBytecode_invokeJsignature6kM_pnNsymbolOopDesc__; -text: .text%__1cPBytecode_invokeFindex6kM_i_; text: .text%__1cNmethodOopDescIbcp_from6kMi_pC_; text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__; text: .text%__1cMLinkResolverVresolve_invokevirtual6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; @@ -1258,7 +1206,6 @@ text: .text%jni_GetStringUTFChars: jni.o; text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc__pc_; text: .text%__1cHUNICODEHas_utf86FpHi_pc_; text: .text%__1cHUNICODELutf8_length6FpHi_i_; -text: .text%__1cKutf8_write6FpCH_0_: utf8.o; text: .text%JVM_FindPrimitiveClass; text: .text%__1cJname2type6Fpkc_nJBasicType__; text: .text%jni_ReleaseStringUTFChars; @@ -1300,7 +1247,6 @@ text: .text%__1cKJavaThreadRthread_main_inner6M_v_; text: .text%__1cMthread_entry6FpnKJavaThread_pnGThread__v_: jvm.o; text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cIBytecodeIset_code6MnJBytecodesECode__v_; text: .text%__1cNFingerprinterHdo_long6M_v_: dump.o; text: .text%JVM_MonitorWait; text: .text%__1cQjava_lang_ThreadRget_thread_status6FpnHoopDesc__n0AMThreadStatus__; @@ -1314,23 +1260,19 @@ text: .text%__1cNmethodOopDescKjmethod_id6M_pnK_jmethodID__; text: .text%jni_NewStringUTF: jni.o; text: .text%jni_CallObjectMethod: jni.o; text: .text%__1cRSignatureIterator2t6MpnGThread_pnNsymbolOopDesc__v_; -text: .text%__1cUjni_invoke_nonstatic6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o; text: .text%__1cXJNI_ArgumentPusherVaArgHiterate6MX_v_: jni.o; text: .text%__1cXJNI_ArgumentPusherVaArgKget_object6M_v_: jni.o; text: .text%jni_ExceptionOccurred: jni.o; -text: .text%__1cbAjni_check_async_exceptions6FpnKJavaThread__v_: jni.o; text: .text%jni_DeleteLocalRef: jni.o; text: .text%__1cOJNIHandleBlockRrebuild_free_list6M_v_; text: .text%jni_EnsureLocalCapacity; text: .text%jni_GetStaticMethodID: jni.o; text: .text%jni_CallStaticObjectMethodV: jni.o; -text: .text%__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o; text: .text%__1cMLinkResolverbHlookup_instance_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; text: .text%jni_ExceptionCheck: jni.o; text: .text%jni_NewString: jni.o; text: .text%__1cQjava_lang_StringXcreate_oop_from_unicode6FpHipnGThread__pnHoopDesc__; text: .text%JVM_InitProperties; -text: .text%__1cMset_property6FnGHandle_pkc2pnGThread__v_: jvm.o; text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; text: .text%__1cYNoJvmtiVMObjectAllocMark2t6M_v_; text: .text%__1cYNoJvmtiVMObjectAllocMark2T6M_v_; @@ -1394,7 +1336,6 @@ text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_: text: .text%jni_GetStringUTFLength: jni.o; text: .text%__1cQjava_lang_StringLutf8_length6FpnHoopDesc__i_; text: .text%jni_GetStringLength: jni.o; -text: .text%__1cQjava_lang_StringGlength6FpnHoopDesc__i_; text: .text%jni_GetStringUTFRegion: jni.o; text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc_ii_pc_; text: .text%JVM_FindClassFromClassLoader; @@ -1445,13 +1386,9 @@ text: .text%Unsafe_FreeMemory; text: .text%__1cNSignatureInfoIdo_float6M_v_: bytecode.o; text: .text%__1cFJNIidEfind6Mi_p0_; text: .text%jni_NewObjectV: jni.o; -text: .text%__1cMalloc_object6FpnH_jclass_pnGThread__pnPinstanceOopDesc__: jni.o; text: .text%jni_GetStringRegion: jni.o; -text: .text%__1cQjava_lang_StringGoffset6FpnHoopDesc__i_; -text: .text%__1cQjava_lang_StringFvalue6FpnHoopDesc__pnQtypeArrayOopDesc__; text: .text%jni_GetObjectField: jni.o; text: .text%jni_GetStringCritical: jni.o; -text: .text%__1cJGC_lockerNlock_critical6FpnKJavaThread__v_: jni.o; text: .text%jni_ReleaseStringCritical: jni.o; text: .text%JVM_LoadLibrary; text: .text%JVM_FindLibraryEntry; @@ -1496,10 +1433,7 @@ text: .text%__1cNobjArrayKlassIallocate6MipnGThread__pnPobjArrayOopDesc__; text: .text%jni_SetObjectArrayElement: jni.o; text: .text%jni_GetObjectArrayElement: jni.o; text: .text%__1cQSimpleCompPolicyXmethod_invocation_event6MnMmethodHandle_pnGThread__v_; -text: .text%__1cRCompilationPolicybIreset_counter_for_invocation_event6MnMmethodHandle__v_; text: .text%__1cRInvocationCounterJset_carry6M_v_; -text: .text%__1cNCompileBrokerOcompile_method6FnMmethodHandle_i1ipkcpnGThread__pnHnmethod__; -text: .text%__1cQSimpleCompPolicyRcompilation_level6MnMmethodHandle_i_i_; text: .text%__1cNobjArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; text: .text%__1cLJvmtiExportQenter_live_phase6F_v_; text: .text%__1cLJvmtiExportTpost_vm_initialized6F_v_; @@ -1512,7 +1446,6 @@ text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMs text: .text%__1cCosOsignal_init_pd6F_v_; text: .text%__1cQjava_lang_ThreadKset_daemon6FpnHoopDesc__v_; text: .text%__1cICompiler2t6M_v_; -text: .text%__1cNCompileBrokerVinit_compiler_threads6Fi_v_; text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_; text: .text%__1cNCompileBrokerUmake_compiler_thread6FpkcpnMCompileQdDueue_pnQCompilerCounters_pnGThread__pnOCompilerThread__; text: .text%__1cOCompilerThread2t6MpnMCompileQdDueue_pnQCompilerCounters__v_; @@ -1570,10 +1503,7 @@ text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle_pnGThread__v_ text: .text%__1cTjava_lang_ThrowableNset_backtrace6FpnHoopDesc_2_v_; text: .text%__1cTjava_lang_ThrowableQclear_stacktrace6FpnHoopDesc__v_; text: .text%__1cVPreserveExceptionMark2T6M_v_; -text: .text%__1cKExceptionsG_throw6FpnGThread_pkcinGHandle__v_; text: .text%__1cSInterpreterRuntimeXthrow_pending_exception6FpnKJavaThread__v_; -text: .text%__1cNSharedRuntimebKexception_handler_for_return_address6FpC_1_; -text: .text%__1cNSharedRuntimebOraw_exception_handler_for_return_address6FpC_1_; text: .text%__1cSInterpreterRuntimebFexception_handler_for_exception6FpnKJavaThread_pnHoopDesc__pC_; text: .text%__1cNmethodOopDescbEfast_exception_handler_bci_for6MnLKlassHandle_ipnGThread__i_; text: .text%__1cSInterpreterRuntimePset_bcp_and_mdp6FpCpnKJavaThread__v_; @@ -1588,7 +1518,6 @@ text: .text%__1cNCompileBrokerZinvoke_compiler_on_method6FpnLCompileTask__v_; text: .text%__1cNCompileBrokerVpush_jni_handle_block6F_v_; text: .text%__1cPciObjectFactory2t6MpnFArena_i_v_; text: .text%__1cPciObjectFactoryTinit_shared_objects6M_v_; -text: .text%__1cIciSymbol2t6MnMsymbolHandle__v_; text: .text%__1cIciObject2t6MnGHandle__v_; text: .text%__1cPciObjectFactoryEfind6MpnHoopDesc_pnNGrowableArray4CpnIciObject____i_; text: .text%__1cPciObjectFactoryNinit_ident_of6MpnIciObject__v_; @@ -1675,14 +1604,12 @@ text: .text%__1cOGenerateOopMapYrewrite_refval_conflicts6M_v_; text: .text%__1cOGenerateOopMapNreport_result6M_v_; text: .text%__1cLCompilationJbuild_hir6M_v_; text: .text%__1cCIR2t6MpnLCompilation_pnIciMethod_i_v_; -text: .text%__1cJValueTypeKinitialize6F_v_; text: .text%__1cMciNullObjectEmake6F_p0_; text: .text%__1cMGraphBuilderKinitialize6F_v_; text: .text%__1cJXHandlers2t6MpnIciMethod__v_; text: .text%__1cIciMethodJload_code6M_v_; text: .text%__1cHIRScopeLbuild_graph6MpnLCompilation_i_pnKBlockBegin__; text: .text%__1cQBlockListBuilderLset_leaders6M_v_; -text: .text%__1cKValueStack2t6MpnHIRScope_ii_v_; text: .text%__1cMGraphBuilderPpush_root_scope6MpnHIRScope_pnJBlockList_pnKBlockBegin__v_; text: .text%__1cMGraphBuilderJScopeDataJset_scope6MpnHIRScope__v_; text: .text%__1cIValueMap2t6M_v_; @@ -1690,7 +1617,6 @@ text: .text%__1cMGraphBuilderJScopeDataQadd_to_work_list6MpnKBlockBegin__v_; text: .text%__1cNResourceArrayGexpand6MIiri_v_; text: .text%__1cMGraphBuilderJScopeDataVremove_from_work_list6M_pnKBlockBegin__; text: .text%__1cIValueMapIkill_all6M_v_; -text: .text%__1cKValueStackEcopy6M_p0_; text: .text%__1cGValuesIpush_all6Mpk0_v_: c1_ValueStack.o; text: .text%__1cMGraphBuilderbBiterate_bytecodes_for_block6Mi_pnIBlockEnd__; text: .text%__1cMGraphBuilderJScopeDataIblock_at6Mi_pnKBlockBegin__; @@ -1709,8 +1635,6 @@ text: .text%__1cHciFieldPinitialize_from6MpnPfieldDescriptor__v_; text: .text%__1cMas_ValueType6FnJBasicType__pnJValueType__; text: .text%__1cMLinkResolverXresolve_klass_no_update6FrnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; text: .text%__1cTconstantPoolOopDescbCklass_ref_at_if_loaded_check6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cMGraphBuilderKlock_stack6M_pnKValueStack__; -text: .text%__1cKValueStackKcopy_locks6M_p0_; text: .text%__1cJLoadFieldFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; text: .text%__1cNCanonicalizerMdo_LoadField6MpnJLoadField__v_; text: .text%__1cJLoadFieldEhash6kM_i_: c1_Instruction.o; @@ -1738,7 +1662,6 @@ text: .text%__1cMGraphBuilderNmethod_return6MpnLInstruction__v_; text: .text%__1cGReturnFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; text: .text%__1cNCanonicalizerJdo_Return6MpnGReturn__v_; text: .text%__1cGReturnJas_Return6M_p0_: c1_GraphBuilder.o; -text: .text%__1cKValueStackMcaller_state6kM_p0_; text: .text%__1cQSystemDictionarybOfind_constrained_instance_or_array_klass6FnMsymbolHandle_nGHandle_pnGThread__pnMklassOopDesc__; text: .text%__1cMGraphBuilderHif_same6MpnJValueType_nLInstructionJCondition__v_; text: .text%__1cNCanonicalizerNdo_StoreField6MpnKStoreField__v_; @@ -1781,24 +1704,17 @@ text: .text%__1cTNullCheckEliminatorLiterate_one6MpnKBlockBegin__v_; text: .text%__1cGBitMapIset_from6M0_v_; text: .text%__1cQNullCheckVisitorNdo_BlockBegin6MpnKBlockBegin__v_; text: .text%__1cQNullCheckVisitorHdo_Base6MpnEBase__v_; -text: .text%__1cKStateSplitPinput_values_do6MpFppnLInstruction__v_v_: c1_Canonicalizer.o; text: .text%__1cQNullCheckVisitorHdo_Goto6MpnEGoto__v_; -text: .text%__1cTNullCheckEliminatorIdo_value6FppnLInstruction__v_; -text: .text%__1cFLocalPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cFLocalFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorIdo_Local6MpnFLocal__v_; -text: .text%__1cLAccessFieldPinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; text: .text%__1cQNullCheckVisitorMdo_LoadField6MpnJLoadField__v_; text: .text%__1cTNullCheckEliminatorShandle_AccessField6MpnLAccessField__v_; -text: .text%__1cCIfPinput_values_do6MpFppnLInstruction__v_v_: c1_Canonicalizer.o; -text: .text%__1cIConstantPinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; text: .text%__1cQNullCheckVisitorLdo_Constant6MpnIConstant__v_; text: .text%__1cQNullCheckVisitorFdo_If6MpnCIf__v_; text: .text%__1cQNullCheckVisitorPdo_ArithmeticOp6MpnMArithmeticOp__v_; text: .text%__1cQNullCheckVisitorOdo_LoadIndexed6MpnLLoadIndexed__v_; text: .text%__1cTNullCheckEliminatorShandle_LoadIndexed6MpnLLoadIndexed__v_; text: .text%__1cQNullCheckVisitorNdo_StoreField6MpnKStoreField__v_; -text: .text%__1cGReturnPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorJdo_Return6MpnGReturn__v_; text: .text%__1cGBitMapQset_intersection6M0_v_; text: .text%__1cLInstructionJas_Invoke6M_pnGInvoke__: c1_Canonicalizer.o; @@ -1811,11 +1727,7 @@ text: .text%__1cKStateSplitFscope6kM_pnHIRScope__; text: .text%__1cIBlockEndOsubstitute_sux6MpnKBlockBegin_2_v_; text: .text%__1cCIRMcompute_code6M_v_; text: .text%__1cJBlockListJblocks_do6MpFpnKBlockBegin__v_v_; -text: .text%__1cQUseCountComputerXbasic_compute_use_count6FpnKBlockBegin__v_: c1_IR.o; -text: .text%__1cQUseCountComputerQupdate_use_count6FppnLInstruction__v_: c1_IR.o; text: .text%__1cFLocalIas_Local6M_p0_: c1_GraphBuilder.o; -text: .text%__1cKStateSplitPstate_values_do6MpFppnLInstruction__v_v_; -text: .text%__1cKValueStackJvalues_do6MpFppnLInstruction__v_v_; text: .text%__1cLCompilationIemit_lir6M_v_; text: .text%__1cLInstructionGas_Phi6M_pnDPhi__: c1_Canonicalizer.o; text: .text%__1cMas_BasicType6FpnJValueType__nJBasicType__; @@ -1888,14 +1800,11 @@ text: .text%__1cLOopRecorderIoop_size6M_i_; text: .text%__1cYDebugInformationRecorderIpcs_size6M_i_; text: .text%__1cYDebugInformationRecorderJdata_size6M_i_; text: .text%__1cHnmethod2n6FIi_pv_; -text: .text%__1cHnmFlagsFclear6M_v_; text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_; -text: .text%__1cLOopRecorderHcopy_to6MpnICodeBlob__v_; text: .text%__1cIUniverseMnon_oop_word6F_pv_; text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_; text: .text%__1cGPcDesc2t6Miii_v_; text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_; -text: .text%__1cFVTuneOcreate_nmethod6FpnHnmethod__v_; text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_; text: .text%__1cKNativeJumpbEcheck_verified_entry_alignment6FpC1_v_; text: .text%__1cFciEnvKcompile_id6M_I_; @@ -1938,8 +1847,6 @@ text: .text%__1cNCanonicalizerOdo_NewInstance6MpnLNewInstance__v_; text: .text%__1cKValueStackMclear_locals6M_v_; text: .text%__1cMGraphBuilderIstack_op6MnJBytecodesECode__v_; text: .text%__1cMGraphBuilderGinvoke6MnJBytecodesECode__v_; -text: .text%__1cFciEnvTget_method_by_index6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; -text: .text%__1cFciEnvYget_method_by_index_impl6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; text: .text%__1cFciEnvbTget_instance_klass_for_declared_method_holder6FpnHciKlass__pnPciInstanceKlass__; text: .text%__1cPciObjectFactoryTget_unloaded_method6MpnPciInstanceKlass_pnIciSymbol_4_pnIciMethod__; text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_; @@ -1951,18 +1858,13 @@ text: .text%__1cKValueStackNpop_arguments6Mi_pnGValues__; text: .text%__1cGInvokeFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; text: .text%__1cNCanonicalizerJdo_Invoke6MpnGInvoke__v_; text: .text%__1cGInvokeJas_Invoke6M_p0_: c1_Instruction.o; -text: .text%__1cFThrowFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; text: .text%__1cNCanonicalizerIdo_Throw6MpnFThrow__v_; -text: .text%__1cFThrowIas_Throw6M_p0_: c1_Instruction.o; text: .text%__1cQNullCheckVisitorOdo_NewInstance6MpnLNewInstance__v_; text: .text%__1cTNullCheckEliminatorShandle_NewInstance6MpnLNewInstance__v_; -text: .text%__1cGInvokePinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; text: .text%__1cQNullCheckVisitorJdo_Invoke6MpnGInvoke__v_; text: .text%__1cTNullCheckEliminatorNhandle_Invoke6MpnGInvoke__v_; -text: .text%__1cFThrowPinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; text: .text%__1cQNullCheckVisitorIdo_Throw6MpnFThrow__v_; text: .text%__1cLInstructionGnegate6Fn0AJCondition__1_; -text: .text%__1cFThrowPstate_values_do6MpFppnLInstruction__v_v_; text: .text%__1cIVoidTypeLas_VoidType6M_p0_: c1_ValueType.o; text: .text%__1cLNewInstanceKexact_type6kM_pnGciType__; text: .text%__1cLNewInstanceOas_NewInstance6M_p0_: c1_Instruction.o; @@ -1975,7 +1877,6 @@ text: .text%__1cPNewInstanceStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; text: .text%__1cNLIR_AssemblerJemit_call6MpnOLIR_OpJavaCall__v_; text: .text%__1cNLIR_AssemblerKalign_call6MnILIR_Code__v_; text: .text%__1cICodeStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerEcall6MpCnJrelocInfoJrelocType_pnMCodeEmitInfo__v_; text: .text%__1cbBopt_virtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; text: .text%__1cYinternal_word_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; text: .text%__1cJrelocInfoKset_format6Mi_v_; @@ -2021,9 +1922,6 @@ text: .text%__1cMGraphBuilderUclear_inline_bailout6M_v_; text: .text%__1cMGraphBuilderWrecursive_inline_level6kMpnIciMethod__i_; text: .text%__1cPciObjectFactoryMvm_symbol_at6Fi_pnIciSymbol__; text: .text%__1cNCanonicalizerMdo_NullCheck6MpnJNullCheck__v_; -text: .text%__1cKValueStackKpush_scope6MpnHIRScope__p0_; -text: .text%__1cHIRScopeXcompute_lock_stack_size6M_v_; -text: .text%__1cMGraphBuilderJScopeDataRcaller_stack_size6kM_i_; text: .text%__1cMGraphBuilderJScopeDataLnum_returns6M_i_; text: .text%__1cMGraphBuilderJScopeDataXset_inline_cleanup_info6MpnKBlockBegin_pnLInstruction_pnKValueStack__v_; text: .text%__1cMGraphBuilderJScopeDataQincr_num_returns6M_v_; @@ -2033,12 +1931,8 @@ text: .text%__1cFciEnvVnotice_inlined_method6MpnIciMethod__v_; text: .text%__1cMLinkResolverbCresolve_special_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; text: .text%__1cMGraphBuilderOinline_bailout6Mpkc_v_; text: .text%__1cLInstructionEprev6MpnKBlockBegin__p0_; -text: .text%__1cKBlockBeginPblock_values_do6MpFppnLInstruction__v_v_; -text: .text%__1cIConstantPother_values_do6MpFppnLInstruction__v_v_; -text: .text%__1cIBlockEndPother_values_do6MpFppnLInstruction__v_v_; text: .text%__1cQNullCheckVisitorMdo_NullCheck6MpnJNullCheck__v_; text: .text%__1cTNullCheckEliminatorQhandle_NullCheck6MpnJNullCheck__v_; -text: .text%__1cHIRScopeNtop_scope_bci6kM_i_; text: .text%__1cNSharedRuntimeQfind_callee_info6FpnKJavaThread_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; text: .text%__1cGPcDescHreal_pc6kMpknHnmethod__pC_; text: .text%__1cLPcDescCacheLadd_pc_desc6MpnGPcDesc__v_; @@ -2055,14 +1949,11 @@ text: .text%__1cKNativeCallXset_destination_mt_safe6MpC_v_; text: .text%__1cNmethodOopDescTverified_code_entry6M_pC_; text: .text%jni_GetByteArrayRegion: jni.o; text: .text%JVM_DefineClassWithSource; -text: .text%__1cXjvm_define_class_common6FpnHJNIEnv__pkcpnI_jobject_pkWi53pnGThread__pnH_jclass__: jvm.o; -text: .text%__1cQSystemDictionaryTresolve_from_stream6FnMsymbolHandle_nGHandle_2pnPClassFileStream_pnGThread__pnMklassOopDesc__; text: .text%__1cPClassFileParserbDverify_legal_method_signature6MnMsymbolHandle_1pnGThread__i_; text: .text%__1cPClassFileParserXverify_legal_class_name6MnMsymbolHandle_pnGThread__v_; text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_; text: .text%__1cKDictionaryVadd_protection_domain6MiInTinstanceKlassHandle_nGHandle_2pnGThread__v_; text: .text%__1cPDictionaryEntryVadd_protection_domain6MpnHoopDesc__v_; -text: .text%__1cUverify_byte_codes_fn6F_pv_: verifier.o; text: .text%JVM_GetClassCPEntriesCount; text: .text%JVM_GetClassCPTypes; text: .text%JVM_GetClassNameUTF; @@ -2124,7 +2015,6 @@ text: .text%__1cIOSThread2T6M_v_; text: .text%__1cIOSThreadKpd_destroy6M_v_; text: .text%jni_DestroyJavaVM; text: .text%jni_AttachCurrentThread; -text: .text%attach_current_thread: jni.o; text: .text%__1cKJavaThreadVinvoke_shutdown_hooks6M_v_; text: .text%__1cLbefore_exit6FpnKJavaThread__v_; text: .text%__1cNWatcherThreadEstop6F_v_; @@ -2139,7 +2029,6 @@ text: .text%__1cCosXterminate_signal_thread6F_v_; text: .text%__1cCosNsigexitnum_pd6F_i_; text: .text%__1cCosNsignal_notify6Fi_v_; text: .text%__1cQprint_statistics6F_v_; -text: .text%__1cFVTuneEexit6F_v_; text: .text%__1cIVMThreadXwait_for_vm_thread_exit6F_v_; text: .text%__1cUSafepointSynchronizeFbegin6F_v_; text: .text%__1cORuntimeServiceWrecord_safepoint_begin6F_v_; @@ -2158,7 +2047,6 @@ text: .text%__1cQSystemDictionaryRnumber_of_classes6F_i_; text: .text%__1cQSystemDictionaryStry_get_next_class6F_pnMklassOopDesc__; text: .text%__1cKDictionaryStry_get_next_class6M_pnMklassOopDesc__; text: .text%__1cNinstanceKlassKmethods_do6MpFpnNmethodOopDesc__v_v_; -text: .text%__1cONMethodSweeperFsweep6F_v_; text: .text%__1cNCompileBrokerQset_should_block6F_v_; text: .text%__1cHVM_ExitbJwait_for_threads_in_native_to_block6F_i_; text: .text%__1cIVMThreadHdestroy6F_v_; @@ -2171,8 +2059,6 @@ text: .text%__1cPPerfDataManagerHdestroy6F_v_; text: .text%__1cIPerfData2T6M_v_; text: .text%__1cKPerfMemoryHdestroy6F_v_; text: .text%__1cKPerfMemoryUdelete_memory_region6F_v_; -text: .text%__1cUdelete_shared_memory6FpcI_v_: perfMemory_solaris.o; -text: .text%__1cLremove_file6Fpkc_v_: perfMemory_solaris.o; text: .text%__1cMostream_exit6F_v_; text: .text%__SLIP.DELETER__C: ostream.o; text: .text%JVM_Halt; @@ -2206,14 +2092,10 @@ text: .text%jni_IsAssignableFrom: jni.o; text: .text%__1cOGenerateOopMapGdo_ldc6Mii_v_; text: .text%__1cQComputeCallStackIdo_array6Mii_v_: generateOopMap.o; text: .text%__1cMGraphBuilderNload_constant6M_v_; -text: .text%__1cQciBytecodeStreamSget_constant_index6kM_i_; -text: .text%__1cFciEnvVget_constant_by_index6MpnPciInstanceKlass_i_nKciConstant__; -text: .text%__1cFciEnvbAget_constant_by_index_impl6MpnPciInstanceKlass_i_nKciConstant__; text: .text%__1cMLinkResolverbBresolve_static_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; text: .text%__1cJValueTypeLas_VoidType6M_pnIVoidType__: c1_Canonicalizer.o; text: .text%__1cWstatic_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; text: .text%__1cRComputeEntryStackIdo_array6Mii_v_: generateOopMap.o; -text: .text%__1cEIfOpPinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; text: .text%__1cEIfOpFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; text: .text%__1cQNullCheckVisitorHdo_IfOp6MpnEIfOp__v_; text: .text%__1cOGenerateOopMapMdo_checkcast6M_v_; @@ -2223,12 +2105,10 @@ text: .text%__1cNCanonicalizerNdo_InstanceOf6MpnKInstanceOf__v_; text: .text%__1cKInstanceOfNas_InstanceOf6M_p0_: c1_GraphBuilder.o; text: .text%__1cMGraphBuilderKcheck_cast6Mi_v_; text: .text%__1cNCanonicalizerMdo_CheckCast6MpnJCheckCast__v_; -text: .text%__1cJTypeCheckPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorNdo_InstanceOf6MpnKInstanceOf__v_; text: .text%__1cQNullCheckVisitorMdo_CheckCast6MpnJCheckCast__v_; text: .text%__1cTSimpleExceptionStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; text: .text%__1cNLIR_AssemblerQemit_opTypeCheck6MpnPLIR_OpTypeCheck__v_; -text: .text%__1cIciObjectIencoding6M_pnI_jobject__; text: .text%__1cTSimpleExceptionStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_x86.o; text: .text%__1cTSimpleExceptionStubJemit_code6MpnNLIR_Assembler__v_; text: .text%__1cJLoadFieldMas_LoadField6M_p0_: c1_Instruction.o; @@ -2266,8 +2146,6 @@ text: .text%__1cHConvertEname6kM_pkc_: c1_GraphBuilder.o; text: .text%__1cMGraphBuilderNstore_indexed6MnJBasicType__v_; text: .text%__1cIValueMapKkill_array6MpnJValueType__v_; text: .text%__1cNCanonicalizerPdo_StoreIndexed6MpnMStoreIndexed__v_; -text: .text%__1cLAccessFieldPother_values_do6MpFppnLInstruction__v_v_; -text: .text%__1cHConvertPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorKdo_LogicOp6MpnHLogicOp__v_; text: .text%__1cQNullCheckVisitorKdo_Convert6MpnHConvert__v_; text: .text%__1cQNullCheckVisitorPdo_StoreIndexed6MpnMStoreIndexed__v_; @@ -2294,10 +2172,8 @@ text: .text%__1cMGraphBuilderOnew_type_array6M_v_; text: .text%__1cMNewTypeArrayFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; text: .text%__1cNCanonicalizerPdo_NewTypeArray6MpnMNewTypeArray__v_; text: .text%__1cNCanonicalizerMdo_Intrinsic6MpnJIntrinsic__v_; -text: .text%__1cLAccessArrayPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorOdo_ArrayLength6MpnLArrayLength__v_; text: .text%__1cTNullCheckEliminatorShandle_ArrayLength6MpnLArrayLength__v_; -text: .text%__1cINewArrayPinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; text: .text%__1cQNullCheckVisitorPdo_NewTypeArray6MpnMNewTypeArray__v_; text: .text%__1cTNullCheckEliminatorPhandle_NewArray6MpnINewArray__v_; text: .text%__1cQNullCheckVisitorMdo_Intrinsic6MpnJIntrinsic__v_; @@ -2309,7 +2185,6 @@ text: .text%__1cMNewTypeArrayKexact_type6kM_pnGciType__; text: .text%__1cLArrayLengthOas_ArrayLength6M_p0_: c1_GraphBuilder.o; text: .text%__1cILIR_ListUunsigned_shift_right6MpnLLIR_OprDesc_222_v_; text: .text%__1cQNewTypeArrayStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; -text: .text%__1cNLIR_AssemblerHic_call6MpCpnMCodeEmitInfo__v_; text: .text%__1cXvirtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; text: .text%__1cNLIR_AssemblerQemit_alloc_array6MpnQLIR_OpAllocArray__v_; text: .text%__1cNLIR_AssemblerSarray_element_size6kMnJBasicType__nHAddressLScaleFactor__; @@ -2335,8 +2210,6 @@ text: .text%__1cRInlineCacheBufferLnew_ic_stub6F_pnGICStub__; text: .text%JVM_NewArray; text: .text%__1cKReflectionRreflect_new_array6FpnHoopDesc_ipnGThread__pnMarrayOopDesc__; text: .text%__1cSInterpreterRuntimeOmultianewarray6FpnKJavaThread_pi_v_; -text: .text%__1cNinstanceKlassSlookup_osr_nmethod6kMkpnNmethodOopDesc_i_pnHnmethod__; -text: .text%__1cQSimpleCompPolicyYmethod_back_branch_event6MnMmethodHandle_iipnGThread__v_; text: .text%__1cMGraphBuilderQnew_object_array6M_v_; text: .text%__1cONewObjectArrayFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; text: .text%__1cNCanonicalizerRdo_NewObjectArray6MpnONewObjectArray__v_; @@ -2349,7 +2222,6 @@ text: .text%__1cHShiftOpEhash6kM_i_: c1_GraphBuilder.o; text: .text%__1cHShiftOpEname6kM_pkc_: c1_GraphBuilder.o; text: .text%__1cLLoadIndexedOas_LoadIndexed6M_p0_: c1_Instruction.o; text: .text%__1cQNullCheckVisitorRdo_NewObjectArray6MpnONewObjectArray__v_; -text: .text%__1cDOp2Pinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorKdo_ShiftOp6MpnHShiftOp__v_; text: .text%__1cHciKlassMaccess_flags6M_i_; text: .text%__1cPciObjArrayKlassEmake6FpnHciKlass__p0_; @@ -2413,7 +2285,6 @@ text: .text%__1cQDefNewGenerationTallocate_from_space6MI_pnIHeapWord__; text: .text%__1cPVM_GC_OperationZacquire_pending_list_lock6M_v_; text: .text%__1cQinstanceRefKlassZacquire_pending_list_lock6FpnJBasicLock__v_; text: .text%__1cbAVM_GenCollectForAllocationEdoit6M_v_; -text: .text%__1cPGCMemoryManagerIgc_begin6M_v_; text: .text%__1cKManagementJtimestamp6F_x_; text: .text%__1cTContiguousSpacePoolQget_memory_usage6M_nLMemoryUsage__; text: .text%__1cTContiguousSpacePoolNused_in_bytes6M_I_: memoryPool.o; @@ -2441,11 +2312,7 @@ text: .text%__1cKSharedHeapbAchange_strong_roots_parity6M_v_; text: .text%__1cPFastScanClosureGdo_oop6MppnHoopDesc__v_: defNewGeneration.o; text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_; text: .text%__1cOJNIHandleBlockHoops_do6MpnKOopClosure__v_; -text: .text%__1cHThreadsHoops_do6FpnKOopClosure__v_; -text: .text%__1cKJavaThreadHoops_do6MpnKOopClosure__v_; -text: .text%__1cGThreadHoops_do6MpnKOopClosure__v_; text: .text%__1cKHandleAreaHoops_do6MpnKOopClosure__v_; -text: .text%__1cNchunk_oops_do6FpnKOopClosure_pnFChunk_pc_I_: handles.o; text: .text%__1cFframeVinterpreter_frame_bci6kM_i_; text: .text%__1cFframebDinterpreter_frame_monitor_end6kM_pnPBasicObjectLock__; text: .text%__1cFframebFinterpreter_frame_monitor_begin6kM_pnPBasicObjectLock__; @@ -2483,7 +2350,6 @@ text: .text%__1cQComputeCallStackHdo_long6M_v_: generateOopMap.o; text: .text%__1cOGenerateOopMapOdo_monitorexit6Mi_v_; text: .text%__1cOGenerateOopMapLmonitor_pop6M_nNCellTypeState__; text: .text%__1cRComputeEntryStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cIVMThreadHoops_do6MpnKOopClosure__v_; text: .text%__1cQVMOperationQdDueueHoops_do6MpnKOopClosure__v_; text: .text%__1cQVMOperationQdDueueNqueue_oops_do6MipnKOopClosure__v_; text: .text%__1cSObjectSynchronizerHoops_do6FpnKOopClosure__v_; @@ -2584,7 +2450,6 @@ text: .text%__1cUGenGCEpilogueClosureNdo_generation6MpnKGeneration__v_: genColle text: .text%__1cRTenuredGenerationPupdate_counters6M_v_; text: .text%__1cUCompactingPermGenGenPupdate_counters6M_v_; text: .text%__1cXTraceMemoryManagerStats2T6M_v_; -text: .text%__1cPGCMemoryManagerGgc_end6M_v_; text: .text%__1cRLowMemoryDetectorWdetect_after_gc_memory6FpnKMemoryPool__v_; text: .text%__1cNJvmtiGCMarker2T6M_v_; text: .text%__1cPVM_GC_OperationNdoit_epilogue6M_v_; @@ -2597,7 +2462,6 @@ text: .text%jni_PopLocalFrame: jni.o; text: .text%__1cMGraphBuilderJnegate_op6MpnJValueType__v_; text: .text%__1cINegateOpFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; text: .text%__1cNCanonicalizerLdo_NegateOp6MpnINegateOp__v_; -text: .text%__1cINegateOpPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorLdo_NegateOp6MpnINegateOp__v_; text: .text%__1cILIR_ListLstore_check6MpnLLIR_OprDesc_2222pnMCodeEmitInfo__v_; text: .text%__1cXArrayStoreExceptionStub2t6MpnMCodeEmitInfo__v_; @@ -2637,7 +2501,6 @@ text: .text%__1cYjava_lang_reflect_MethodLreturn_type6FpnHoopDesc__2_; text: .text%JVM_IsInterrupted; text: .text%__1cTresource_free_bytes6FpcI_v_; text: .text%__1cRComputeEntryStackHdo_bool6M_v_: generateOopMap.o; -text: .text%__1cMArithmeticOpKlock_stack6kM_pnKValueStack__: c1_Instruction.o; text: .text%__1cJAssemblerGfist_s6MnHAddress__v_; text: .text%__1cNLIR_AssemblerJreset_FPU6M_v_; text: .text%__1cNLIR_AssemblerIemit_op36MpnHLIR_Op3__v_; @@ -2659,7 +2522,6 @@ text: .text%__1cUBytecode_tableswitchOdest_offset_at6kMi_i_; text: .text%__1cMGraphBuilderMtable_switch6M_v_; text: .text%__1cLTableSwitchFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; text: .text%__1cNCanonicalizerOdo_TableSwitch6MpnLTableSwitch__v_; -text: .text%__1cGSwitchPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorOdo_TableSwitch6MpnLTableSwitch__v_; text: .text%__1cWstatic_call_RelocationLstatic_stub6M_pC_; text: .text%__1cSCompiledStaticCallMset_to_clean6M_v_; @@ -2672,7 +2534,6 @@ text: .text%__1cNFingerprinterHdo_byte6M_v_: dump.o; text: .text%Unsafe_SetMemory; text: .text%__1cNSharedRuntimeElrem6Fxx_x_; text: .text%Unsafe_DefineClass1; -text: .text%__1cSUnsafe_DefineClass6FpnHJNIEnv__pnI_jstring_pnL_jbyteArray_iipnI_jobject_7_pnH_jclass__: unsafe.o; text: .text%JVM_DefineClass; text: .text%__1cVLoaderConstraintTableYextend_loader_constraint6MpnVLoaderConstraintEntry_nGHandle_pnMklassOopDesc__v_; text: .text%__1cVLoaderConstraintTablebHensure_loader_constraint_capacity6MpnVLoaderConstraintEntry_i_v_; @@ -2680,7 +2541,6 @@ text: .text%__1cIRuntime1Tprimitive_arraycopy6FpnIHeapWord_2i_v_; text: .text%__1cRComputeEntryStackHdo_char6M_v_: generateOopMap.o; text: .text%jni_NewDirectByteBuffer; text: .text%lookupDirectBufferClasses: jni.o; -text: .text%__1cJlookupOne6FpnHJNIEnv__pkcpnGThread__pnH_jclass__: jni.o; text: .text%__1cHJNIEnv_JNewObject6MpnH_jclass_pnK_jmethodID_E_pnI_jobject__: jni.o; text: .text%jni_GetDoubleArrayRegion: jni.o; text: .text%__1cNSignatureInfoJdo_double6M_v_: bytecode.o; @@ -2701,7 +2561,6 @@ text: .text%JVM_GetCPFieldModifiers; text: .text%__1cPClassFileParserUverify_constantvalue6MiinSconstantPoolHandle_pnGThread__v_; text: .text%JVM_MonitorNotify; text: .text%__1cSObjectSynchronizerGnotify6FnGHandle_pnGThread__v_; -text: .text%__1cKValueStackElock6MpnHIRScope_pnLInstruction__i_; text: .text%__1cKValueStackGunlock6M_i_; text: .text%__1cQMonitorEnterStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_x86.o; text: .text%__1cNLIR_AssemblerJemit_lock6MpnKLIR_OpLock__v_; @@ -2726,8 +2585,6 @@ text: .text%__1cbCOneContigSpaceCardGenerationLused_region6kM_nJMemRegion__; text: .text%__1cMGenMarkSweepPallocate_stacks6F_v_; text: .text%__1cQGenCollectedHeapOgather_scratch6MpnKGeneration_I_pnMScratchBlock__; text: .text%__1cQDefNewGenerationScontribute_scratch6MrpnMScratchBlock_pnKGeneration_I_v_; -text: .text%__1cRsort_scratch_list6FrpnMScratchBlock__v_: genCollectedHeap.o; -text: .text%__1cVremoveSmallestScratch6FppnMScratchBlock__1_: genCollectedHeap.o; text: .text%__1cJMarkSweepRFollowRootClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; text: .text%__1cParrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cLklassVtableToop_follow_contents6M_v_; @@ -2784,12 +2641,6 @@ text: .text%__1cbCOneContigSpaceCardGenerationWfirst_compaction_space6kM_pnQComp text: .text%__1cMGenMarkSweepRmark_sweep_phase36Fi_v_; text: .text%__1cUCompactingPermGenGenTpre_adjust_pointers6M_v_; text: .text%__1cJMarkSweepUAdjustPointerClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; -text: .text%__1cJCodeCacheHoops_do6FpnKOopClosure__v_; -text: .text%__1cKBufferBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cSDeoptimizationBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cLRuntimeStubHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cNSafepointBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cHnmethodHoops_do6MpnKOopClosure__v_; text: .text%__1cJHashtableHoops_do6MpnKOopClosure__v_; text: .text%__1cJMarkSweepMadjust_marks6F_v_; text: .text%__1cYGenAdjustPointersClosureNdo_generation6MpnKGeneration__v_: genMarkSweep.o; @@ -2840,7 +2691,6 @@ text: .text%Unsafe_CompareAndSwapObject; text: .text%__1cMLinkResolverbEvtable_index_of_miranda_method6FnLKlassHandle_nMsymbolHandle_2pnGThread__i_; text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_; text: .text%__1cRPrivilegedElementHoops_do6MpnKOopClosure__v_; -text: .text%__1cFframeRoops_code_blob_do6MpnKOopClosure_pknLRegisterMap__v_; text: .text%__1cMOopMapStream2t6MpnGOopMap_i_v_; text: .text%__1cQComputeCallStackIdo_float6M_v_: generateOopMap.o; text: .text%jni_DeleteWeakGlobalRef: jni.o; @@ -2849,7 +2699,6 @@ text: .text%JVM_IsSameClassPackage; text: .text%__1cNCanonicalizerPdo_MonitorEnter6MpnMMonitorEnter__v_; text: .text%__1cLMonitorExitFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; text: .text%__1cNCanonicalizerOdo_MonitorExit6MpnLMonitorExit__v_; -text: .text%__1cNAccessMonitorPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorPdo_MonitorEnter6MpnMMonitorEnter__v_; text: .text%__1cTNullCheckEliminatorUhandle_AccessMonitor6MpnNAccessMonitor__v_; text: .text%__1cQNullCheckVisitorOdo_MonitorExit6MpnLMonitorExit__v_; @@ -2867,7 +2716,6 @@ text: .text%Unsafe_AllocateInstance; text: .text%jni_AllocObject: jni.o; text: .text%__1cQinstanceRefKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_; text: .text%__1cNCanonicalizerMset_constant6Mi_v_: c1_Canonicalizer.o; -text: .text%__1cJTypeCheckPother_values_do6MpFppnLInstruction__v_v_; text: .text%__1cNLIR_AssemblerMcheck_icache6M_i_; text: .text%__1cNLIR_AssemblerZjobject2reg_with_patching6MpnMRegisterImpl_pnMCodeEmitInfo__v_; text: .text%__1cIRuntime1Mnew_instance6FpnKJavaThread_pnMklassOopDesc__v_; @@ -2878,7 +2726,6 @@ text: .text%__1cNFloatConstantQas_FloatConstant6M_p0_: c1_Canonicalizer.o; text: .text%__1cJFloatTypeMas_FloatType6M_p0_: c1_Canonicalizer.o; text: .text%__1cRAbstractAssemblerGa_long6Mi_v_; text: .text%__1cNObjectMonitorGnotify6MpnGThread__v_; -text: .text%__1cINewArrayPother_values_do6MpFppnLInstruction__v_v_; text: .text%__1cIRuntime1Mmonitorenter6FpnKJavaThread_pnHoopDesc_pnPBasicObjectLock__v_; text: .text%__1cIRuntime1Lmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; text: .text%__1cNVM_DeoptimizeEdoit6M_v_; @@ -2887,14 +2734,8 @@ text: .text%__1cHThreadsbFdeoptimized_wrt_marked_nmethods6F_v_; text: .text%__1cKJavaThreadbFdeoptimized_wrt_marked_nmethods6M_v_; text: .text%__1cJCodeCachebGmake_marked_nmethods_not_entrant6F_v_; text: .text%__1cJCodeCacheNalive_nmethod6FpnICodeBlob__pnHnmethod__; -text: .text%__1cHnmethodbAmake_not_entrant_or_zombie6Mi_v_; text: .text%__1cKNativeJumpUpatch_verified_entry6FpC11_v_; text: .text%__1cHnmethodVmark_as_seen_on_stack6M_v_; -text: .text%__1cHThreadsLnmethods_do6F_v_; -text: .text%__1cKJavaThreadLnmethods_do6M_v_; -text: .text%__1cGThreadLnmethods_do6M_v_; -text: .text%__1cFframeLnmethods_do6M_v_; -text: .text%__1cFframeVnmethods_code_blob_do6M_v_; text: .text%__1cONMethodSweeperPprocess_nmethod6FpnHnmethod__v_; text: .text%__1cHnmethodVcleanup_inline_caches6M_v_; text: .text%__1cKCompiledIC2t6MpnKRelocation__v_; @@ -2902,14 +2743,9 @@ text: .text%JVM_HoldsLock; text: .text%__1cTMaskFillerForNativeIpass_int6M_v_: oopMapCache.o; text: .text%__1cNSharedRuntimeDf2l6Ff_x_; text: .text%__1cMGraphBuilderKcompare_op6MpnJValueType_nJBytecodesECode__v_; -text: .text%__1cJCompareOpFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; text: .text%__1cNCanonicalizerMdo_CompareOp6MpnJCompareOp__v_; -text: .text%__1cJCompareOpEhash6kM_i_: c1_Instruction.o; -text: .text%__1cJCompareOpEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cJCompareOpMas_CompareOp6M_p0_: c1_Instruction.o; text: .text%__1cHnmethodSflush_dependencies6MpnRBoolObjectClosure__v_; text: .text%__1cNinstanceKlassYremove_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cFVTuneOdelete_nmethod6FpnHnmethod__v_; text: .text%__1cQPlaceholderEntryHoops_do6MpnKOopClosure__v_; text: .text%__1cHnmethodFflush6M_v_; text: .text%__1cICodeBlobFflush6M_v_; @@ -2951,9 +2787,7 @@ text: .text%__1cNCanonicalizerPdo_UnsafeGetRaw6MpnMUnsafeGetRaw__v_; text: .text%__1cMGraphBuilderNlookup_switch6M_v_; text: .text%__1cMLookupSwitchFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; text: .text%__1cNCanonicalizerPdo_LookupSwitch6MpnMLookupSwitch__v_; -text: .text%__1cMUnsafePutRawPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorPdo_UnsafePutRaw6MpnMUnsafePutRaw__v_; -text: .text%__1cLUnsafeRawOpPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorPdo_UnsafeGetRaw6MpnMUnsafeGetRaw__v_; text: .text%__1cQNullCheckVisitorPdo_LookupSwitch6MpnMLookupSwitch__v_; text: .text%__1cNSharedRuntimeEldiv6Fxx_x_; diff --git a/hotspot/make/solaris/makefiles/reorder_COMPILER1_sparc b/hotspot/make/solaris/makefiles/reorder_COMPILER1_sparc index 541227310a6..45c02b4e690 100644 --- a/hotspot/make/solaris/makefiles/reorder_COMPILER1_sparc +++ b/hotspot/make/solaris/makefiles/reorder_COMPILER1_sparc @@ -135,7 +135,6 @@ text: .text%__1cNThreadServiceEinit6F_v_; text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnPPerfLongCounter__; text: .text%__1cORuntimeServiceEinit6F_v_; text: .text%__1cTClassLoadingServiceEinit6F_v_; -text: .text%__1cKvtune_init6F_v_; text: .text%__1cObytecodes_init6F_v_; text: .text%__1cJBytecodesKinitialize6F_v_; text: .text%__1cJBytecodesNpd_initialize6F_v_; @@ -181,9 +180,7 @@ text: .text%__1cKMemoryPoolYrecord_peak_memory_usage6M_v_; text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__; text: .text%__1cMCodeHeapPoolNused_in_bytes6M_I_: memoryPool.o; text: .text%__1cICodeHeapSallocated_capacity6kM_I_; -text: .text%__1cKMemoryPoolImax_size6kM_I_: memoryPool.o; text: .text%__1cXresource_allocate_bytes6FI_pc_; -text: .text%__1cKCodeBuffer2t6MpCi_v_; text: .text%__1cRAbstractAssembler2t6MpnKCodeBuffer__v_; text: .text%__1cTICacheStubGeneratorVgenerate_icache_flush6MppFpCii_i_v_; text: .text%__1cMStubCodeMark2t6MpnRStubCodeGenerator_pkc4_v_; @@ -194,7 +191,6 @@ text: .text%__1cMStubCodeMark2T6M_v_; text: .text%__1cRAbstractAssemblerFflush6M_v_; text: .text%__1cOAbstractICacheQinvalidate_range6FpCi_v_; text: .text%__1cRStubCodeGeneratorLstub_epilog6MpnMStubCodeDesc__v_; -text: .text%__1cFVTuneNregister_stub6FpkcpC3_v_; text: .text%__1cFForteNregister_stub6FpkcpC3_v_; text: .text%__1cPVM_Version_init6F_v_; text: .text%jio_snprintf; @@ -314,10 +310,8 @@ text: .text%__1cLReadClosureGdo_ptr6MppnIHeapWord__v_: restore.o; text: .text%__1cLReadClosureGdo_ptr6Mppv_v_: restore.o; text: .text%__1cLReadClosureJdo_size_t6MpI_v_: restore.o; text: .text%__1cLReadClosureGdo_oop6MppnHoopDesc__v_: restore.o; -text: .text%__1cJCodeCacheHoops_do6FpnKOopClosure__v_; text: .text%__1cICodeHeapLfirst_block6kM_pnJHeapBlock__; text: .text%__1cICodeHeapJnext_free6kMpnJHeapBlock__pv_; -text: .text%__1cKBufferBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; text: .text%__1cICodeHeapLblock_start6kMpv_pnJHeapBlock__; text: .text%__1cICodeHeapKfind_start6kMpv_1_; text: .text%__1cICodeHeapKnext_block6kMpnJHeapBlock__2_; @@ -334,7 +328,6 @@ text: .text%__1cbCAbstractInterpreterGenerator2t6MpnJStubQdDueue__v_; text: .text%__1cbCAbstractInterpreterGeneratorMgenerate_all6M_v_; text: .text%__1cJStubQdDueueHrequest6Mi_pnEStub__; text: .text%__1cJStubQdDueueGcommit6Mi_v_; -text: .text%__1cZInterpreterMacroAssemblerbAget_cache_and_index_at_bcp6MpnMRegisterImpl_2i_v_; text: .text%__1cZInterpreterMacroAssemblerZget_2_byte_integer_at_bcp6MipnMRegisterImpl_2n0ALsignedOrNot_n0AKsetCCOrNot__v_; text: .text%__1cZInterpreterMacroAssemblerNdispatch_next6MnITosState_i_v_; text: .text%__1cOMacroAssemblerKverify_FPU6Mipkc_v_; @@ -357,7 +350,6 @@ text: .text%__1cZInterpreterMacroAssemblerNunlock_object6MpnMRegisterImpl__v_; text: .text%__1cQRelocationHolderEplus6kMi_0_; text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC222_v_; text: .text%__1cOMacroAssemblerNset_vm_result6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpnMRegisterImpl_pC2_v_; text: .text%__1cOMacroAssemblerRcall_VM_leaf_base6MpnMRegisterImpl_pCi_v_; text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_method_entry6MnTAbstractInterpreterKMethodKind__pC_; text: .text%__1cUInterpreterGeneratorVgenerate_counter_incr6MpnFLabel_22_v_; @@ -513,7 +505,6 @@ text: .text%__1cZInterpreterMacroAssemblerWprofile_switch_default6MpnMRegisterIm text: .text%__1cNTemplateTableMlookupswitch6F_v_; text: .text%__1cNTemplateTableH_return6FnITosState__v_; text: .text%__1cNTemplateTableJgetstatic6Fi_v_; -text: .text%__1cNTemplateTableXresolve_cache_and_index6FipnMRegisterImpl_2_v_; text: .text%__1cNTemplateTableJputstatic6Fi_v_; text: .text%__1cNTemplateTableIgetfield6Fi_v_; text: .text%__1cOMacroAssemblerKnull_check6MpnMRegisterImpl_i_v_; @@ -521,7 +512,6 @@ text: .text%__1cNTemplateTableIputfield6Fi_v_; text: .text%__1cNTemplateTableNinvokevirtual6Fi_v_; text: .text%__1cNTemplateTableTinvokevfinal_helper6FpnMRegisterImpl_2_v_; text: .text%__1cZInterpreterMacroAssemblerSprofile_final_call6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerUprofile_virtual_call6MpnMRegisterImpl_2_v_; text: .text%__1cNTemplateTableUgenerate_vtable_call6FpnMRegisterImpl_22_v_; text: .text%__1cNTemplateTableNinvokespecial6Fi_v_; text: .text%__1cZInterpreterMacroAssemblerMprofile_call6MpnMRegisterImpl__v_; @@ -629,8 +619,6 @@ text: .text%__1cQjni_handles_init6F_v_; text: .text%__1cOvmStructs_init6F_v_; text: .text%__1cMRegisterImplEname6kM_pkc_; text: .text%__1cRFloatRegisterImplEname6kM_pkc_; -text: .text%__1cIFrameMapEinit6F_v_; -text: .text%__1cIRuntime1Kinitialize6F_v_; text: .text%__1cIRuntime1Ninitialize_pd6F_v_; text: .text%__1cNSharedRuntimeTgenerate_deopt_blob6F_v_; text: .text%__1cOMacroAssemblerZtotal_frame_size_in_bytes6Mi_i_; @@ -689,7 +677,6 @@ text: .text%__1cEUTF8Sconvert_to_unicode6FpkcpHi_v_; text: .text%__1cNinstanceKlassRallocate_instance6MpnGThread__pnPinstanceOopDesc__; text: .text%__1cTjava_lang_ThrowableLset_message6FpnHoopDesc_2_v_; text: .text%__1cMNativeLookupTbase_library_lookup6Fpkc22_pC_; -text: .text%__1cKoopFactoryKnew_symbol6FpkcipnGThread__pnNsymbolOopDesc__; text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__; text: .text%__1cNinstanceKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; text: .text%__1cMstringStream2t6MI_v_; @@ -788,8 +775,6 @@ text: .text%__1cXSignatureHandlerLibraryOpd_set_handler6FpC_v_; text: .text%__1cNmethodOopDescVset_signature_handler6MpC_v_; text: .text%jni_RegisterNatives: jni.o; text: .text%__1cPjava_lang_ClassLas_klassOop6FpnHoopDesc__pnMklassOopDesc__; -text: .text%__1cLSymbolTableFprobe6Fpkci_pnNsymbolOopDesc__; -text: .text%__1cFKlassNlookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; text: .text%__1cOJNIHandleBlockNrelease_block6Fp0pnGThread__v_; text: .text%__1cSObjectSynchronizerJnotifyall6FnGHandle_pnGThread__v_; text: .text%__1cSInterpreterRuntimeJanewarray6FpnKJavaThread_pnTconstantPoolOopDesc_ii_v_; @@ -829,7 +814,6 @@ text: .text%__1cbBcreate_initial_thread_group6FpnGThread__nGHandle__: thread.o; text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; text: .text%__1cNmethodOopDescIbci_from6kMpC_i_; -text: .text%__1cPBytecode_invokeJsignature6kM_pnNsymbolOopDesc__; text: .text%__1cNmethodOopDescIbcp_from6kMi_pC_; text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__; text: .text%__1cRSignatureIteratorSiterate_parameters6M_v_; @@ -983,7 +967,6 @@ text: .text%jni_GetStringUTFLength: jni.o; text: .text%__1cQjava_lang_StringLutf8_length6FpnHoopDesc__i_; text: .text%__1cHUNICODELutf8_length6FpHi_i_; text: .text%jni_GetStringLength: jni.o; -text: .text%__1cQjava_lang_StringGlength6FpnHoopDesc__i_; text: .text%jni_GetStringUTFRegion: jni.o; text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc_ii_pc_; text: .text%JVM_FindClassFromClassLoader; @@ -1022,7 +1005,6 @@ text: .text%__1cbDjava_lang_reflect_ConstructorEslot6FpnHoopDesc__i_; text: .text%__1cbIjava_lang_reflect_AccessibleObjectIoverride6FpnHoopDesc__C_; text: .text%__1cbDjava_lang_reflect_ConstructorPparameter_types6FpnHoopDesc__2_; text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cFVTuneQstart_class_load6F_v_; text: .text%__1cJEventMark2t6MpkcE_v_: classLoader.o; text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_; text: .text%__1cRClassPathZipEntryLopen_stream6Mpkc_pnPClassFileStream__; @@ -1060,8 +1042,6 @@ text: .text%__1cPClassFileParserMsort_methods6MnOobjArrayHandle_111pnGThread__nP text: .text%method_compare: methodOop.o; text: .text%__1cLklassItableTcompute_itable_size6FnOobjArrayHandle__i_; text: .text%__1cUvisit_all_interfaces6FpnPobjArrayOopDesc_pnXInterfaceVisiterClosure__v_; -text: .text%__1cKoopFactoryRnew_instanceKlass6FiiiinNReferenceType_pnGThread__pnMklassOopDesc__; -text: .text%__1cSinstanceKlassKlassXallocate_instance_klass6MiiiinNReferenceType_pnGThread__pnMklassOopDesc__; text: .text%__1cNinstanceKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlass.o; text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_: instanceKlass.o; text: .text%__1cNinstanceKlassQinit_implementor6M_v_; @@ -1077,7 +1057,6 @@ text: .text%__1cPClassFileParserVset_precomputed_flags6MnTinstanceKlassHandle__v text: .text%__1cPClassFileParserbCcheck_super_interface_access6FnTinstanceKlassHandle_pnGThread__v_; text: .text%__1cPClassFileParserbBcheck_final_method_override6FnTinstanceKlassHandle_pnGThread__v_; text: .text%__1cSThreadProfilerMark2T6M_v_; -text: .text%__1cFVTuneOend_class_load6F_v_; text: .text%__1cIRewriterHrewrite6FnTinstanceKlassHandle_pnGThread__v_; text: .text%__1cYconstantPoolCacheOopDescKinitialize6MrnIintArray__v_; text: .text%JVM_MaxMemory; @@ -1091,15 +1070,11 @@ text: .text%Unsafe_FreeMemory; text: .text%__1cNSignatureInfoIdo_float6M_v_: bytecode.o; text: .text%jni_NewObjectV: jni.o; text: .text%jni_GetStringRegion: jni.o; -text: .text%__1cQjava_lang_StringGoffset6FpnHoopDesc__i_; -text: .text%__1cQjava_lang_StringFvalue6FpnHoopDesc__pnQtypeArrayOopDesc__; text: .text%jni_GetObjectField: jni.o; text: .text%jni_GetStringCritical: jni.o; text: .text%jni_ReleaseStringCritical: jni.o; text: .text%__1cQSimpleCompPolicyXmethod_invocation_event6MnMmethodHandle_pnGThread__v_; text: .text%__1cRInvocationCounterJset_carry6M_v_; -text: .text%__1cNCompileBrokerOcompile_method6FnMmethodHandle_i1ipkcpnGThread__pnHnmethod__; -text: .text%__1cQSimpleCompPolicyRcompilation_level6MnMmethodHandle_i_i_; text: .text%__1cNinstanceKlassUfind_interface_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; text: .text%JVM_LoadLibrary; text: .text%JVM_FindLibraryEntry; @@ -1153,7 +1128,6 @@ text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMs text: .text%__1cCosOsignal_init_pd6F_v_; text: .text%__1cQjava_lang_ThreadKset_daemon6FpnHoopDesc__v_; text: .text%__1cICompiler2t6M_v_; -text: .text%__1cNCompileBrokerVinit_compiler_threads6Fi_v_; text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_; text: .text%__1cNCompileBrokerUmake_compiler_thread6FpkcpnMCompileQdDueue_pnQCompilerCounters_pnGThread__pnOCompilerThread__; text: .text%__1cTsignal_thread_entry6FpnKJavaThread_pnGThread__v_: os.o; @@ -1188,7 +1162,6 @@ text: .text%__1cRLowMemoryDetectorbGlow_memory_detector_thread_entry6FpnKJavaThr text: .text%__1cKPerfStringKset_string6Mpkc_v_; text: .text%__1cPciObjectFactory2t6MpnFArena_i_v_; text: .text%__1cPciObjectFactoryTinit_shared_objects6M_v_; -text: .text%__1cIciSymbol2t6MnMsymbolHandle__v_; text: .text%__1cIciObject2t6MnGHandle__v_; text: .text%__1cIciObjectJset_ident6MI_v_; text: .text%__1cGciType2t6MnJBasicType__v_; @@ -1267,7 +1240,6 @@ text: .text%__1cOGenerateOopMapYrewrite_refval_conflicts6M_v_; text: .text%__1cOGenerateOopMapNreport_result6M_v_; text: .text%__1cLCompilationJbuild_hir6M_v_; text: .text%__1cCIR2t6MpnLCompilation_pnIciMethod_i_v_; -text: .text%__1cJValueTypeKinitialize6F_v_; text: .text%__1cMciNullObjectEmake6F_p0_; text: .text%__1cMGraphBuilderKinitialize6F_v_; text: .text%__1cJXHandlers2t6MpnIciMethod__v_; @@ -1275,13 +1247,11 @@ text: .text%__1cIciMethodJload_code6M_v_; text: .text%__1cLCompilationTdebug_info_recorder6kM_pnYDebugInformationRecorder__; text: .text%__1cHIRScopeLbuild_graph6MpnLCompilation_i_pnKBlockBegin__; text: .text%__1cQBlockListBuilderLset_leaders6M_v_; -text: .text%__1cKValueStack2t6MpnHIRScope_ii_v_; text: .text%__1cLciSignatureHtype_at6kMi_pnGciType__; text: .text%__1cMas_ValueType6FnJBasicType__pnJValueType__; text: .text%__1cIValueMap2t6M_v_; text: .text%__1cNResourceArrayGexpand6MIiri_v_; text: .text%__1cIValueMapIkill_all6M_v_; -text: .text%__1cKValueStackEcopy6M_p0_; text: .text%__1cMGraphBuilderbBiterate_bytecodes_for_block6Mi_pnIBlockEnd__; text: .text%__1cMGraphBuilderJScopeDataIblock_at6Mi_pnKBlockBegin__; text: .text%__1cMGraphBuilderKload_local6MpnJValueType_i_v_; @@ -1322,7 +1292,6 @@ text: .text%__1cPciInstanceKlassLfield_cache6M_pnTciConstantPoolCache__; text: .text%__1cHciField2t6MpnPciInstanceKlass_i_v_; text: .text%__1cHciFieldPinitialize_from6MpnPfieldDescriptor__v_; text: .text%__1cTconstantPoolOopDescbCklass_ref_at_if_loaded_check6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cKValueStackKcopy_locks6M_p0_; text: .text%__1cJLoadFieldFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; text: .text%__1cNCanonicalizerMdo_LoadField6MpnJLoadField__v_; text: .text%__1cJLoadFieldEhash6kM_i_: c1_Instruction.o; @@ -1365,27 +1334,18 @@ text: .text%__1cTNullCheckEliminatorLiterate_one6MpnKBlockBegin__v_; text: .text%__1cGBitMapIset_from6M0_v_; text: .text%__1cQNullCheckVisitorNdo_BlockBegin6MpnKBlockBegin__v_; text: .text%__1cQNullCheckVisitorHdo_Base6MpnEBase__v_; -text: .text%__1cKStateSplitPinput_values_do6MpFppnLInstruction__v_v_: c1_Canonicalizer.o; text: .text%__1cEGotoFvisit6MpnSInstructionVisitor__v_: c1_Canonicalizer.o; text: .text%__1cQNullCheckVisitorHdo_Goto6MpnEGoto__v_; -text: .text%__1cCIfPinput_values_do6MpFppnLInstruction__v_v_: c1_Canonicalizer.o; -text: .text%__1cTNullCheckEliminatorIdo_value6FppnLInstruction__v_; -text: .text%__1cFLocalPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cFLocalFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorIdo_Local6MpnFLocal__v_; text: .text%__1cQNullCheckVisitorFdo_If6MpnCIf__v_; -text: .text%__1cGReturnPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; -text: .text%__1cIConstantPinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; text: .text%__1cQNullCheckVisitorLdo_Constant6MpnIConstant__v_; text: .text%__1cQNullCheckVisitorJdo_Return6MpnGReturn__v_; -text: .text%__1cJTypeCheckPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorNdo_InstanceOf6MpnKInstanceOf__v_; text: .text%__1cQNullCheckVisitorMdo_CheckCast6MpnJCheckCast__v_; -text: .text%__1cLAccessFieldPinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; text: .text%__1cQNullCheckVisitorMdo_LoadField6MpnJLoadField__v_; text: .text%__1cTNullCheckEliminatorShandle_AccessField6MpnLAccessField__v_; text: .text%__1cQNullCheckVisitorPdo_ArithmeticOp6MpnMArithmeticOp__v_; -text: .text%__1cLAccessArrayPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorOdo_ArrayLength6MpnLArrayLength__v_; text: .text%__1cTNullCheckEliminatorShandle_ArrayLength6MpnLArrayLength__v_; text: .text%__1cQNullCheckVisitorOdo_LoadIndexed6MpnLLoadIndexed__v_; @@ -1403,16 +1363,12 @@ text: .text%__1cIBlockEndOsubstitute_sux6MpnKBlockBegin_2_v_; text: .text%__1cCIRMcompute_code6M_v_; text: .text%__1cLInstructionGnegate6Fn0AJCondition__1_; text: .text%__1cJBlockListJblocks_do6MpFpnKBlockBegin__v_v_; -text: .text%__1cQUseCountComputerQupdate_use_count6FppnLInstruction__v_: c1_IR.o; -text: .text%__1cKStateSplitPstate_values_do6MpFppnLInstruction__v_v_; -text: .text%__1cKValueStackJvalues_do6MpFppnLInstruction__v_v_; text: .text%__1cFLocalIas_Local6M_p0_: c1_GraphBuilder.o; text: .text%__1cLCompilationIemit_lir6M_v_; text: .text%__1cLInstructionGas_Phi6M_pnDPhi__: c1_Canonicalizer.o; text: .text%__1cMas_BasicType6FpnJValueType__nJBasicType__; text: .text%__1cJValueTypeRas_ObjectConstant6M_pnOObjectConstant__: c1_Canonicalizer.o; text: .text%__1cLLIR_OprFactKvalue_type6FpnJValueType__pnLLIR_OprDesc__; -text: .text%__1cKValueStackMcaller_state6kM_p0_; text: .text%__1cJArrayTypeMas_ArrayType6M_p0_: c1_ValueType.o; text: .text%__1cILIR_ListKshift_left6MpnLLIR_OprDesc_222_v_; text: .text%__1cJValueTypeLas_VoidType6M_pnIVoidType__: c1_Canonicalizer.o; @@ -1442,7 +1398,6 @@ text: .text%__1cNLIR_AssemblerNemit_opBranch6MpnMLIR_OpBranch__v_; text: .text%__1cNLIR_AssemblerKemit_delay6MpnLLIR_OpDelay__v_; text: .text%__1cNLIR_AssemblerLcode_offset6kM_i_; text: .text%__1cNLIR_AssemblerQemit_opTypeCheck6MpnPLIR_OpTypeCheck__v_; -text: .text%__1cIciObjectIencoding6M_pnI_jobject__; text: .text%__1cOoop_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; text: .text%__1cNLIR_AssemblerEload6MpnMRegisterImpl_i2nJBasicType_pnMCodeEmitInfo__i_; text: .text%__1cNLIR_AssemblerIemit_op16MpnHLIR_Op1__v_; @@ -1477,7 +1432,6 @@ text: .text%__1cYDebugInformationRecorderJdata_size6M_i_; text: .text%__1cNRelocIteratorTadvance_over_prefix6M_v_; text: .text%__1cOoop_RelocationLunpack_data6M_v_; text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_; -text: .text%__1cLOopRecorderHcopy_to6MpnICodeBlob__v_; text: .text%__1cIUniverseMnon_oop_word6F_pv_; text: .text%__1cCosXnon_memory_address_word6F_pc_; text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_; @@ -1487,7 +1441,6 @@ text: .text%__1cODataRelocationJset_value6MpC_v_: relocInfo.o; text: .text%__1cOoop_RelocationGoffset6M_i_: relocInfo.o; text: .text%__1cKRelocationRpd_set_data_value6MpCi_v_; text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_; -text: .text%__1cFVTuneOcreate_nmethod6FpnHnmethod__v_; text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_; text: .text%__1cLCompilation2T6M_v_; text: .text%__1cFArena2T6M_v_; @@ -1512,7 +1465,6 @@ text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle_pnGThread__v_ text: .text%__1cVPreserveExceptionMark2T6M_v_; text: .text%__1cSInterpreterRuntimeXthrow_pending_exception6FpnKJavaThread__v_; text: .text%__1cSThreadLocalStorageGthread6F_pnGThread__: assembler_sparc.o; -text: .text%__1cNSharedRuntimebKexception_handler_for_return_address6FpC_1_; text: .text%__1cSInterpreterRuntimebFexception_handler_for_exception6FpnKJavaThread_pnHoopDesc__pC_; text: .text%__1cNmethodOopDescbEfast_exception_handler_bci_for6MnLKlassHandle_ipnGThread__i_; text: .text%__1cFframeZinterpreter_frame_set_bcp6MpC_v_; @@ -1530,8 +1482,6 @@ text: .text%__1cPciInstanceKlassYprotection_domain_handle6M_pnI_jobject__; text: .text%__1cLNewInstanceFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; text: .text%__1cNCanonicalizerOdo_NewInstance6MpnLNewInstance__v_; text: .text%__1cMGraphBuilderGinvoke6MnJBytecodesECode__v_; -text: .text%__1cFciEnvTget_method_by_index6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; -text: .text%__1cFciEnvYget_method_by_index_impl6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; text: .text%__1cPciObjectFactoryTget_unloaded_method6MpnPciInstanceKlass_pnIciSymbol_4_pnIciMethod__; text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_; text: .text%__1cNciMethodKlassEmake6F_p0_; @@ -1542,16 +1492,11 @@ text: .text%__1cKValueStackNpop_arguments6Mi_pnGValues__; text: .text%__1cGInvokeFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; text: .text%__1cNCanonicalizerJdo_Invoke6MpnGInvoke__v_; text: .text%__1cGInvokeJas_Invoke6M_p0_: c1_Instruction.o; -text: .text%__1cFThrowFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; text: .text%__1cNCanonicalizerIdo_Throw6MpnFThrow__v_; -text: .text%__1cFThrowIas_Throw6M_p0_: c1_Instruction.o; text: .text%__1cQNullCheckVisitorOdo_NewInstance6MpnLNewInstance__v_; -text: .text%__1cGInvokePinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; text: .text%__1cQNullCheckVisitorJdo_Invoke6MpnGInvoke__v_; text: .text%__1cTNullCheckEliminatorNhandle_Invoke6MpnGInvoke__v_; -text: .text%__1cFThrowPinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; text: .text%__1cQNullCheckVisitorIdo_Throw6MpnFThrow__v_; -text: .text%__1cFThrowPstate_values_do6MpFppnLInstruction__v_v_; text: .text%__1cIVoidTypeLas_VoidType6M_p0_: c1_ValueType.o; text: .text%__1cLNewInstanceKexact_type6kM_pnGciType__; text: .text%__1cLNewInstanceOas_NewInstance6M_p0_: c1_Instruction.o; @@ -1562,7 +1507,6 @@ text: .text%__1cPNewInstanceStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_sparc.o text: .text%__1cNLIR_AssemblerJemit_call6MpnOLIR_OpJavaCall__v_; text: .text%__1cNLIR_AssemblerKalign_call6MnILIR_Code__v_; text: .text%__1cICodeStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_sparc.o; -text: .text%__1cNLIR_AssemblerEcall6MpCnJrelocInfoJrelocType_pnMCodeEmitInfo__v_; text: .text%__1cbBopt_virtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; text: .text%__1cYinternal_word_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; text: .text%__1cMPatchingStubJemit_code6MpnNLIR_Assembler__v_; @@ -1586,8 +1530,6 @@ text: .text%__1cFciEnvNlookup_method6MpnNinstanceKlass_2pnNsymbolOopDesc_4nJByte text: .text%__1cMLinkResolverbCresolve_virtual_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; text: .text%__1cPciObjectFactoryMvm_symbol_at6Fi_pnIciSymbol__; text: .text%__1cNCanonicalizerMdo_NullCheck6MpnJNullCheck__v_; -text: .text%__1cKValueStackKpush_scope6MpnHIRScope__p0_; -text: .text%__1cHIRScopeXcompute_lock_stack_size6M_v_; text: .text%__1cMGraphBuilderJScopeDataLnum_returns6M_i_; text: .text%__1cNCanonicalizerHdo_Goto6MpnEGoto__v_; text: .text%__1cMGraphBuilderJScopeDataQincr_num_returns6M_v_; @@ -1596,10 +1538,7 @@ text: .text%__1cLCompilationVnotice_inlined_method6MpnIciMethod__v_; text: .text%__1cFciEnvVnotice_inlined_method6MpnIciMethod__v_; text: .text%__1cMLinkResolverbCresolve_special_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; text: .text%__1cLInstructionEprev6MpnKBlockBegin__p0_; -text: .text%__1cIConstantPother_values_do6MpFppnLInstruction__v_v_; -text: .text%__1cIBlockEndPother_values_do6MpFppnLInstruction__v_v_; text: .text%__1cQNullCheckVisitorMdo_NullCheck6MpnJNullCheck__v_; -text: .text%__1cHIRScopeNtop_scope_bci6kM_i_; text: .text%__1cIFrameMapQmake_new_address6kMi_nHAddress__; text: .text%__1cNLIR_AssemblerFstore6MpnMRegisterImpl_2inJBasicType_pnMCodeEmitInfo__v_; text: .text%__1cNLIR_AssemblerJstack2reg6MpnLLIR_OprDesc_2nJBasicType__v_; @@ -1610,7 +1549,6 @@ text: .text%__1cXNativeSignatureIteratorIdo_float6M_v_: interpreterRT_sparc.o; text: .text%JVM_IsNaN; text: .text%__1cXNativeSignatureIteratorJdo_double6M_v_: interpreterRT_sparc.o; text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_double6M_v_; -text: .text%__1cEIfOpPinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; text: .text%__1cEIfOpFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; text: .text%__1cQNullCheckVisitorHdo_IfOp6MpnEIfOp__v_; text: .text%__1cOGenerateOopMapIcopy_cts6MpnNCellTypeState_2_i_; @@ -1642,8 +1580,6 @@ text: .text%__1cHLogicOpEhash6kM_i_: c1_Instruction.o; text: .text%__1cHLogicOpEname6kM_pkc_: c1_Instruction.o; text: .text%__1cMLinkResolverbBresolve_static_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; text: .text%__1cQNullCheckVisitorNdo_StoreField6MpnKStoreField__v_; -text: .text%__1cINewArrayPinput_values_do6MpFppnLInstruction__v_v_: c1_Instruction.o; -text: .text%__1cHConvertPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorKdo_Convert6MpnHConvert__v_; text: .text%__1cQNullCheckVisitorPdo_NewTypeArray6MpnMNewTypeArray__v_; text: .text%__1cJLoadFieldMas_LoadField6M_p0_: c1_Instruction.o; @@ -1665,7 +1601,6 @@ text: .text%__1cRC1_MacroAssemblerPallocate_object6MpnMRegisterImpl_222ii2rnFLab text: .text%__1cNLIR_AssemblerOmembar_release6M_v_; text: .text%__1cNLIR_AssemblerGmembar6M_v_; text: .text%__1cNLIR_AssemblerOmembar_acquire6M_v_; -text: .text%__1cNLIR_AssemblerHic_call6MpCpnMCodeEmitInfo__v_; text: .text%__1cNLIR_AssemblerCpc6kM_pC_; text: .text%__1cXvirtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; text: .text%__1cNLIR_AssemblerIlogic_op6MnILIR_Code_pnLLIR_OprDesc_33_v_; @@ -1675,7 +1610,6 @@ text: .text%__1cXvirtual_call_RelocationLunpack_data6M_v_; text: .text%__1cNinstanceKlassVadd_dependent_nmethod6MpnHnmethod__v_; text: .text%__1cGPcDescHreal_pc6kMpknHnmethod__pC_; text: .text%__1cNSharedRuntimeXfind_callee_info_helper6FpnKJavaThread_rnMvframeStream_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cPBytecode_invokeFindex6kM_i_; text: .text%__1cLRegisterMapIpd_clear6M_v_; text: .text%__1cPBytecode_invokeNstatic_target6MpnGThread__nMmethodHandle__; text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; @@ -1690,8 +1624,6 @@ text: .text%__1cKNativeCallXset_destination_mt_safe6MpC_v_; text: .text%__1cNmethodOopDescTverified_code_entry6M_pC_; text: .text%__1cOGenerateOopMapGdo_ldc6Mii_v_; text: .text%__1cMGraphBuilderNload_constant6M_v_; -text: .text%__1cFciEnvVget_constant_by_index6MpnPciInstanceKlass_i_nKciConstant__; -text: .text%__1cFciEnvbAget_constant_by_index_impl6MpnPciInstanceKlass_i_nKciConstant__; text: .text%__1cWstatic_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; text: .text%__1cKExceptionsL_throw_args6FpnGThread_pkcinMsymbolHandle_5pnRJavaCallArguments__v_; text: .text%__1cMPeriodicTaskOreal_time_tick6FI_v_; @@ -1700,7 +1632,6 @@ text: .text%jni_GetArrayLength: jni.o; text: .text%JVM_Read; text: .text%jni_GetByteArrayRegion: jni.o; text: .text%JVM_DefineClassWithSource; -text: .text%__1cQSystemDictionaryTresolve_from_stream6FnMsymbolHandle_nGHandle_2pnPClassFileStream_pnGThread__pnMklassOopDesc__; text: .text%__1cPClassFileParserbDverify_legal_method_signature6MnMsymbolHandle_1pnGThread__i_; text: .text%__1cPClassFileParserXverify_legal_class_name6MnMsymbolHandle_pnGThread__v_; text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_; @@ -1780,7 +1711,6 @@ text: .text%__1cUJvmtiEventControllerIvm_death6F_v_; text: .text%__1cCosXterminate_signal_thread6F_v_; text: .text%__1cCosNsigexitnum_pd6F_i_; text: .text%__1cCosNsignal_notify6Fi_v_; -text: .text%__1cFVTuneEexit6F_v_; text: .text%__1cIVMThreadXwait_for_vm_thread_exit6F_v_; text: .text%__1cUSafepointSynchronizeFbegin6F_v_; text: .text%__1cORuntimeServiceWrecord_safepoint_begin6F_v_; @@ -1795,7 +1725,6 @@ text: .text%__1cQSystemDictionaryRnumber_of_classes6F_i_; text: .text%__1cQSystemDictionaryStry_get_next_class6F_pnMklassOopDesc__; text: .text%__1cKDictionaryStry_get_next_class6M_pnMklassOopDesc__; text: .text%__1cNinstanceKlassKmethods_do6MpFpnNmethodOopDesc__v_v_; -text: .text%__1cONMethodSweeperFsweep6F_v_; text: .text%__1cNCompileBrokerQset_should_block6F_v_; text: .text%__1cHVM_ExitbJwait_for_threads_in_native_to_block6F_i_; text: .text%__1cIVMThreadHdestroy6F_v_; @@ -1839,7 +1768,6 @@ text: .text%__1cMGraphBuilderNstore_indexed6MnJBasicType__v_; text: .text%__1cIValueMapKkill_array6MpnJValueType__v_; text: .text%__1cNCanonicalizerPdo_StoreIndexed6MpnMStoreIndexed__v_; text: .text%__1cQNullCheckVisitorPdo_StoreIndexed6MpnMStoreIndexed__v_; -text: .text%__1cKValueStackElock6MpnHIRScope_pnLInstruction__i_; text: .text%__1cKValueStackGunlock6M_i_; text: .text%__1cQMonitorEnterStubFvisit6MpnQLIR_OpVisitState__v_: c1_CodeStubs_sparc.o; text: .text%__1cNLIR_AssemblerJemit_lock6MpnKLIR_OpLock__v_; @@ -1859,7 +1787,6 @@ text: .text%__1cTconstantPoolOopDescbCverify_constant_pool_resolve6FnSconstantPo text: .text%__1cNCanonicalizerMdo_Intrinsic6MpnJIntrinsic__v_; text: .text%__1cMas_ValueType6FnKciConstant__pnJValueType__; text: .text%__1cQNullCheckVisitorMdo_Intrinsic6MpnJIntrinsic__v_; -text: .text%__1cDOp2Pinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorKdo_ShiftOp6MpnHShiftOp__v_; text: .text%__1cILIR_ListLshift_right6MpnLLIR_OprDesc_222_v_; text: .text%__1cMNewTypeArrayKexact_type6kM_pnGciType__; @@ -1876,7 +1803,6 @@ text: .text%__1cYciExceptionHandlerStreamEnext6M_v_: c1_IR.o; text: .text%__1cLInstructionGmirror6Fn0AJCondition__1_; text: .text%__1cKBlockBeginVadd_exception_handler6Mp0_v_; text: .text%__1cIciObjectEhash6M_i_; -text: .text%__1cLAccessFieldPother_values_do6MpFppnLInstruction__v_v_; text: .text%__1cFChunk2n6FII_pv_; text: .text%jni_CallStaticVoidMethodV: jni.o; text: .text%JVM_GetLastErrorString; @@ -1899,8 +1825,6 @@ text: .text%__1cWCountInterfacesClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable. text: .text%__1cPfieldDescriptorRint_initial_value6kM_i_; text: .text%__1cSSetupItableClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; text: .text%__1cSInterpreterRuntimeOmultianewarray6FpnKJavaThread_pi_v_; -text: .text%__1cNinstanceKlassSlookup_osr_nmethod6kMkpnNmethodOopDesc_i_pnHnmethod__; -text: .text%__1cQSimpleCompPolicyYmethod_back_branch_event6MnMmethodHandle_iipnGThread__v_; text: .text%__1cMGraphBuilderQnew_object_array6M_v_; text: .text%__1cONewObjectArrayFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; text: .text%__1cNCanonicalizerRdo_NewObjectArray6MpnONewObjectArray__v_; @@ -1919,7 +1843,6 @@ text: .text%__1cUBytecode_tableswitchOdest_offset_at6kMi_i_; text: .text%__1cMGraphBuilderMtable_switch6M_v_; text: .text%__1cLTableSwitchFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; text: .text%__1cNCanonicalizerOdo_TableSwitch6MpnLTableSwitch__v_; -text: .text%__1cGSwitchPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorOdo_TableSwitch6MpnLTableSwitch__v_; text: .text%__1cSCompiledStaticCallNcompute_entry6FnMmethodHandle_rnOStaticCallInfo__v_; text: .text%__1cSCompiledStaticCallDset6MrknOStaticCallInfo__v_; @@ -1972,7 +1895,6 @@ text: .text%jni_GetStaticObjectField: jni.o; text: .text%__1cXJNI_ArgumentPusherVaArgIget_long6M_v_: jni.o; text: .text%__1cINegateOpFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; text: .text%__1cNCanonicalizerLdo_NegateOp6MpnINegateOp__v_; -text: .text%__1cINegateOpPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorLdo_NegateOp6MpnINegateOp__v_; text: .text%__1cILIR_ListLstore_check6MpnLLIR_OprDesc_2222pnMCodeEmitInfo__v_; text: .text%__1cXArrayStoreExceptionStub2t6MpnMCodeEmitInfo__v_; @@ -2008,13 +1930,11 @@ text: .text%__1cYjava_lang_reflect_MethodEslot6FpnHoopDesc__i_; text: .text%__1cYjava_lang_reflect_MethodPparameter_types6FpnHoopDesc__2_; text: .text%__1cYjava_lang_reflect_MethodLreturn_type6FpnHoopDesc__2_; text: .text%JVM_IsInterrupted; -text: .text%__1cMArithmeticOpKlock_stack6kM_pnKValueStack__: c1_Instruction.o; text: .text%__1cNLIR_AssemblerIemit_op36MpnHLIR_Op3__v_; text: .text%__1cNLIR_AssemblerbCadd_debug_info_for_div0_here6MpnMCodeEmitInfo__v_; text: .text%__1cNDivByZeroStubEinfo6kM_pnMCodeEmitInfo__: c1_CodeStubs_sparc.o; text: .text%__1cNDivByZeroStubJemit_code6MpnNLIR_Assembler__v_; text: .text%__1cIFrameMapLnr2floatreg6Fi_pnRFloatRegisterImpl__; -text: .text%__1cRCompilationPolicybIreset_counter_for_invocation_event6MnMmethodHandle__v_; text: .text%Unsafe_EnsureClassInitialized; text: .text%__1cPClassFileParserYparse_checked_exceptions6MpHInSconstantPoolHandle_pnGThread__1_; text: .text%__1cPClassFileStreamHskip_u26MipnGThread__v_; @@ -2070,7 +1990,6 @@ text: .text%jni_NewIntArray: jni.o; text: .text%__1cKGenerationInext_gen6kM_p0_; text: .text%__1cQinstanceRefKlassZacquire_pending_list_lock6FpnJBasicLock__v_; text: .text%__1cbAVM_GenCollectForAllocationEdoit6M_v_; -text: .text%__1cPGCMemoryManagerIgc_begin6M_v_; text: .text%__1cKManagementJtimestamp6F_x_; text: .text%__1cTContiguousSpacePoolQget_memory_usage6M_nLMemoryUsage__; text: .text%__1cTContiguousSpacePoolNused_in_bytes6M_I_: memoryPool.o; @@ -2094,8 +2013,6 @@ text: .text%__1cKSharedHeapbAchange_strong_roots_parity6M_v_; text: .text%__1cPFastScanClosureGdo_oop6MppnHoopDesc__v_: defNewGeneration.o; text: .text%__1cPContiguousSpaceIallocate6MI_pnIHeapWord__; text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_; -text: .text%__1cHThreadsHoops_do6FpnKOopClosure__v_; -text: .text%__1cKJavaThreadHoops_do6MpnKOopClosure__v_; text: .text%__1cOJNIHandleBlockHoops_do6MpnKOopClosure__v_; text: .text%__1cKHandleAreaHoops_do6MpnKOopClosure__v_; text: .text%__1cFframeVinterpreter_frame_bci6kM_i_; @@ -2124,8 +2041,6 @@ text: .text%__1cTMaskFillerForNative2t6MnMmethodHandle_pIi_v_: oopMapCache.o; text: .text%__1cTMaskFillerForNativeLpass_object6M_v_: oopMapCache.o; text: .text%__1cTMaskFillerForNativeJpass_long6M_v_: oopMapCache.o; text: .text%__1cRComputeEntryStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cIVMThreadHoops_do6MpnKOopClosure__v_; -text: .text%__1cGThreadHoops_do6MpnKOopClosure__v_; text: .text%__1cSObjectSynchronizerHoops_do6FpnKOopClosure__v_; text: .text%__1cMFlatProfilerHoops_do6FpnKOopClosure__v_; text: .text%__1cKManagementHoops_do6FpnKOopClosure__v_; @@ -2221,7 +2136,6 @@ text: .text%__1cUGenGCEpilogueClosureNdo_generation6MpnKGeneration__v_: genColle text: .text%__1cRTenuredGenerationPupdate_counters6M_v_; text: .text%__1cUCompactingPermGenGenPupdate_counters6M_v_; text: .text%__1cXTraceMemoryManagerStats2T6M_v_; -text: .text%__1cPGCMemoryManagerGgc_end6M_v_; text: .text%__1cRLowMemoryDetectorWdetect_after_gc_memory6FpnKMemoryPool__v_; text: .text%__1cNJvmtiGCMarker2T6M_v_; text: .text%__1cPVM_GC_OperationNdoit_epilogue6M_v_; @@ -2232,7 +2146,6 @@ text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_; text: .text%__1cNCanonicalizerPdo_MonitorEnter6MpnMMonitorEnter__v_; text: .text%__1cLMonitorExitFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; text: .text%__1cNCanonicalizerOdo_MonitorExit6MpnLMonitorExit__v_; -text: .text%__1cNAccessMonitorPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorPdo_MonitorEnter6MpnMMonitorEnter__v_; text: .text%__1cQNullCheckVisitorOdo_MonitorExit6MpnLMonitorExit__v_; text: .text%__1cMLongConstantPas_LongConstant6M_p0_: c1_Canonicalizer.o; @@ -2246,10 +2159,7 @@ text: .text%__1cRComputeEntryStackIdo_short6M_v_: generateOopMap.o; text: .text%Unsafe_AllocateInstance; text: .text%jni_AllocObject: jni.o; text: .text%__1cNCanonicalizerMset_constant6Mi_v_: c1_Canonicalizer.o; -text: .text%__1cJTypeCheckPother_values_do6MpFppnLInstruction__v_v_; -text: .text%__1cIBytecodeIset_code6MnJBytecodesECode__v_; text: .text%__1cQComputeCallStackIdo_float6M_v_: generateOopMap.o; -text: .text%__1cFframeRoops_code_blob_do6MpnKOopClosure_pknLRegisterMap__v_; text: .text%__1cMOopMapStreamJfind_next6M_v_; text: .text%__1cQinstanceRefKlassSoop_oop_iterate_nv6MpnHoopDesc_pnQFilteringClosure__i_; text: .text%__1cQinstanceRefKlassUoop_oop_iterate_nv_m6MpnHoopDesc_pnQFilteringClosure_nJMemRegion__i_; @@ -2284,7 +2194,6 @@ text: .text%__1cLsymbolKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cQinstanceRefKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cQconstMethodKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cFJNIidHoops_do6MpnKOopClosure__v_; -text: .text%__1cHnmethodHoops_do6MpnKOopClosure__v_; text: .text%__1cQSystemDictionaryValways_strong_oops_do6FpnKOopClosure__v_; text: .text%__1cKDictionaryYalways_strong_classes_do6MpnKOopClosure__v_; text: .text%__1cVLoaderConstraintTableYalways_strong_classes_do6MpnKOopClosure__v_; @@ -2341,9 +2250,6 @@ text: .text%__1cVcompiledICHolderKlassOklass_oop_size6kM_i_: compiledICHolderKla text: .text%__1cJHashtableHoops_do6MpnKOopClosure__v_; text: .text%__1cQSystemDictionaryYalways_strong_classes_do6FpnKOopClosure__v_; text: .text%__1cQSystemDictionaryPplaceholders_do6FpnKOopClosure__v_; -text: .text%__1cSDeoptimizationBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cLRuntimeStubHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cNSafepointBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; text: .text%__1cJMarkSweepMadjust_marks6F_v_; text: .text%__1cYGenAdjustPointersClosureNdo_generation6MpnKGeneration__v_: genMarkSweep.o; text: .text%__1cKGenerationPadjust_pointers6M_v_; @@ -2379,32 +2285,24 @@ text: .text%__1cIRuntime1Onew_type_array6FpnKJavaThread_pnMklassOopDesc_i_v_; text: .text%__1cVcompiledICHolderKlassRoop_oop_iterate_m6MpnHoopDesc_pnKOopClosure_nJMemRegion__i_; text: .text%__1cNObjectMonitorGnotify6MpnGThread__v_; text: .text%__1cOMacroAssemblerEmult6MpnMRegisterImpl_22_v_; -text: .text%__1cINewArrayPother_values_do6MpFppnLInstruction__v_v_; text: .text%__1cJValueTypeLas_LongType6M_pnILongType__: c1_Canonicalizer.o; text: .text%__1cNVM_DeoptimizeEdoit6M_v_; text: .text%__1cODeoptimizationVdeoptimize_dependents6F_i_; text: .text%__1cHThreadsbFdeoptimized_wrt_marked_nmethods6F_v_; text: .text%__1cKJavaThreadbFdeoptimized_wrt_marked_nmethods6M_v_; text: .text%__1cJCodeCachebGmake_marked_nmethods_not_entrant6F_v_; -text: .text%__1cHnmethodbAmake_not_entrant_or_zombie6Mi_v_; text: .text%__1cKNativeJumpUpatch_verified_entry6FpC11_v_; text: .text%signalHandler; text: .text%JVM_handle_solaris_signal; text: .text%JVM_HoldsLock; text: .text%__1cQinstanceRefKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceRefKlass.o; text: .text%__1cJCodeCacheFfirst6F_pnICodeBlob__; -text: .text%__1cHThreadsLnmethods_do6F_v_; -text: .text%__1cFframeLnmethods_do6M_v_; text: .text%__1cJCodeCacheEnext6FpnICodeBlob__2_; text: .text%__1cONewObjectArrayKexact_type6kM_pnGciType__; text: .text%__1cPciObjArrayKlassNelement_klass6M_pnHciKlass__; text: .text%__1cIRuntime1Noop_arraycopy6FpnIHeapWord_2i_v_; text: .text%__1cMGraphBuilderKcompare_op6MpnJValueType_nJBytecodesECode__v_; -text: .text%__1cJCompareOpFvisit6MpnSInstructionVisitor__v_: c1_Instruction.o; text: .text%__1cNCanonicalizerMdo_CompareOp6MpnJCompareOp__v_; -text: .text%__1cJCompareOpEhash6kM_i_: c1_Instruction.o; -text: .text%__1cJCompareOpEname6kM_pkc_: c1_Instruction.o; -text: .text%__1cJCompareOpMas_CompareOp6M_p0_: c1_Instruction.o; text: .text%__1cJValueTypeOas_IntConstant6M_pnLIntConstant__: c1_Canonicalizer.o; text: .text%__1cHIntTypeKas_IntType6M_p0_: c1_Canonicalizer.o; text: .text%__1cNSharedRuntimeDf2l6Ff_x_; @@ -2422,7 +2320,6 @@ text: .text%__1cRComputeEntryStackIdo_float6M_v_: generateOopMap.o; text: .text%__1cTMaskFillerForNativeIpass_int6M_v_: oopMapCache.o; text: .text%__1cHnmethodSflush_dependencies6MpnRBoolObjectClosure__v_; text: .text%__1cNinstanceKlassYremove_dependent_nmethod6MpnHnmethod__v_; -text: .text%__1cFVTuneOdelete_nmethod6FpnHnmethod__v_; text: .text%__1cLCardTableRSFclear6MnJMemRegion__v_: cardTableRS.o; text: .text%__1cRCardTableModRefBSFclear6MnJMemRegion__v_; text: .text%__1cHnmethodFflush6M_v_; @@ -2445,9 +2342,7 @@ text: .text%__1cNCanonicalizerPdo_UnsafeGetRaw6MpnMUnsafeGetRaw__v_; text: .text%__1cMGraphBuilderNlookup_switch6M_v_; text: .text%__1cMLookupSwitchFvisit6MpnSInstructionVisitor__v_: c1_GraphBuilder.o; text: .text%__1cNCanonicalizerPdo_LookupSwitch6MpnMLookupSwitch__v_; -text: .text%__1cMUnsafePutRawPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorPdo_UnsafePutRaw6MpnMUnsafePutRaw__v_; -text: .text%__1cLUnsafeRawOpPinput_values_do6MpFppnLInstruction__v_v_: c1_GraphBuilder.o; text: .text%__1cQNullCheckVisitorPdo_UnsafeGetRaw6MpnMUnsafeGetRaw__v_; text: .text%__1cQNullCheckVisitorPdo_LookupSwitch6MpnMLookupSwitch__v_; text: .text%__1cIRuntime1Mnew_instance6FpnKJavaThread_pnMklassOopDesc__v_; diff --git a/hotspot/make/solaris/makefiles/reorder_TIERED_amd64 b/hotspot/make/solaris/makefiles/reorder_TIERED_amd64 index 4531671c613..8aa944c7adf 100644 --- a/hotspot/make/solaris/makefiles/reorder_TIERED_amd64 +++ b/hotspot/make/solaris/makefiles/reorder_TIERED_amd64 @@ -4,38 +4,22 @@ text = LOAD ?RXO; text: .text%__1cECopyRpd_disjoint_words6FpnIHeapWord_2L_v_; text: .text%__1cSPSPromotionManagerWcopy_to_survivor_space6MpnHoopDesc__2_; -text: .text%__1cNinstanceKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cJMarkSweepO_mark_and_push6FppnHoopDesc__v_; text: .text%__1cNinstanceKlassToop_adjust_pointers6MpnHoopDesc__i_; text: .text%__1cNinstanceKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cOtypeArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; text: .text%__1cOtypeArrayKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cQIndexSetIteratorEnext6M_I_; -text: .text%__1cJMarkSweepPmark_and_follow6FppnHoopDesc__v_; -text: .text%__1cCosOjavaTimeMillis6F_x_; -text: .text%__1cNRelocIteratorEnext6M_i_; text: .text%__1cQIndexSetIteratorQadvance_and_next6M_I_; text: .text%__1cIUniverseMnon_oop_word6F_pv_; -text: .text%__1cNobjArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cNobjArrayKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cNobjArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; text: .text%__1cQObjectStartArrayMobject_start6kMpnIHeapWord__2_; text: .text%__1cJMarkSweepUAdjustPointerClosureGdo_oop6MppnHoopDesc__v_; -text: .text%__1cJMarkSweepOIsAliveClosureLdo_object_b6MpnHoopDesc__i_; -text: .text%__1cENodeGis_Phi6M_pnHPhiNode__; text: .text%__1cIPhaseIFGIadd_edge6MII_i_; -text: .text%__1cPBoundRelocationLunpack_data6MnJrelocInfoJrelocType__v_; -text: .text%__1cIMachNodeHis_Mach6M_p0_; -text: .text%__1cENodeHis_Copy6kM_I_; -text: .text%__1cUCompressedReadStreamIread_int6M_i_; text: .text%__1cQIndexSetIterator2t6MpnIIndexSet__v_; text: .text%__1cOPhaseIdealLoopOidom_no_update6kMpnENode__2_; -text: .text%__1cHnmethodKcan_unload6MpnRBoolObjectClosure_pnKOopClosure_ppnHoopDesc_i_i_; -text: .text%__1cIMachNodeNrematerialize6kM_i_; -text: .text%__1cHRegMaskFis_UP6kM_i_; text: .text%__1cXresource_allocate_bytes6FL_pc_; text: .text%__1cNRelocIteratorFreloc6M_pnKRelocation__; -text: .text%__1cENodeHis_Mach6M_pnIMachNode__; text: .text%__1cHRegMaskESize6kM_I_; text: .text%__1cIIndexSetLalloc_block6M_pn0AIBitBlock__; text: .text%__1cWConstantPoolCacheEntryPadjust_pointers6M_v_; @@ -48,7 +32,6 @@ text: .text%__1cLsymbolKlassToop_adjust_pointers6MpnHoopDesc__i_; text: .text%__1cLsymbolKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cYPSPromotionFailedClosureJdo_object6MpnHoopDesc__v_; text: .text%__1cENodeEjvms6kM_pnIJVMState__; -text: .text%__1cKRelocationSfix_oop_relocation6M_v_; text: .text%__1cIIndexSetWalloc_block_containing6MI_pn0AIBitBlock__; text: .text%__1cENodeHdel_out6Mp0_v_; text: .text%__1cKRelocationLunpack_data6M_v_; @@ -56,18 +39,11 @@ text: .text%__1cIMachNodeJideal_reg6kM_I_; text: .text%__1cJAssemblerOlocate_operand6FpCn0AMWhichOperand__1_; text: .text%__1cKRelocationSpd_address_in_code6M_ppC_; text: .text%__1cOoop_RelocationIoop_addr6M_ppnHoopDesc__; -text: .text%__1cRMachSpillCopyNodeMis_SpillCopy6M_p0_; text: .text%__1cOPhaseIdealLoopSget_ctrl_no_update6kMpnENode__2_; text: .text%__1cJCProjNodeNis_block_proj6kM_pknENode__; -text: .text%__1cENodeGis_CFG6kM_i_; -text: .text%__1cKRelocationNunpack_2_ints6Mri1_v_; text: .text%__1cETypeDcmp6Fpk02_i_; -text: .text%__1cQObjectStartArrayWobject_starts_in_range6kMpnIHeapWord_2_i_; text: .text%__1cOoop_RelocationLunpack_data6M_v_; text: .text%__1cHRegMaskJis_bound16kM_i_; -text: .text%__1cENodeHis_Proj6M_pnIProjNode__; -text: .text%__1cENodeMis_SpillCopy6M_pnRMachSpillCopyNode__; -text: .text%__1cOtypeArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cHRegMaskJis_bound26kM_i_; text: .text%__1cRmethodDataOopDescHdata_at6Mi_pnLProfileData__; text: .text%__1cNGrowableArray4CI_Hat_grow6MirkI_I_; @@ -78,126 +54,74 @@ text: .text%__1cQconstMethodKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cQconstMethodKlassToop_adjust_pointers6MpnHoopDesc__i_; text: .text%__1cLmethodKlassToop_adjust_pointers6MpnHoopDesc__i_; text: .text%__1cRmethodDataOopDescJnext_data6MpnLProfileData__2_; -text: .text%__1cMOopTaskQdDueueOpop_local_slow6MInOTaskQdDueueSuperDAge__i_; -text: .text%__1cRMachSpillCopyNodeHis_Copy6kM_I_; -text: .text%__1cENodeGpinned6kM_i_; text: .text%__1cOoop_RelocationJoop_value6M_pnHoopDesc__; text: .text%__1cJrRegPOperEtype6kM_pknEType__; text: .text%__1cECopyQpd_fill_to_words6FpnIHeapWord_LI_v_; -text: .text%__1cMOopTaskQdDueueKpop_global6MrpnHoopDesc__i_; -text: .text%__1cPOopTaskQdDueueSetPsteal_best_of_26MipirpnHoopDesc__i_; text: .text%__1cJVectorSet2R6MI_rnDSet__; text: .text%__1cNRelocIteratorTadvance_over_prefix6M_v_; -text: .text%__1cSPSPromotionManagerUflush_prefetch_queue6M_v_; -text: .text%__1cIProjNodeHis_Proj6M_p0_; text: .text%__1cPDictionaryEntrybDprotection_domain_set_oops_do6MpnKOopClosure__v_; text: .text%__1cMOopMapStreamJfind_next6M_v_; -text: .text%__1cMloadConPNodePoper_input_base6kM_I_; -text: .text%__1cMloadConPNodeHtwo_adr6kM_I_; text: .text%__1cMloadConPNodeErule6kM_I_; -text: .text%__1cHPhiNodeGis_Phi6M_p0_; text: .text%__1cITypeNodeLbottom_type6kM_pknEType__; -text: .text%__1cENodeGis_Cmp6kM_pknHCmpNode__; text: .text%__1cDff16FI_i_; -text: .text%__1cENodeNrematerialize6kM_i_; text: .text%__1cRLowMemoryDetectorbLdetect_low_memory_for_collected_pools6F_v_; -text: .text%__1cFframeVoopmapreg_to_location6kMipknLRegisterMap__ppnHoopDesc__; text: .text%__1cIIndexSetKinitialize6MI_v_; -text: .text%__1cENodeJis_Region6kM_pknKRegionNode__; text: .text%__1cMMutableSpaceMcas_allocate6ML_pnIHeapWord__; text: .text%__1cIMachNodeGOpcode6kM_i_; -text: .text%__1cMget_live_bit6Fpii_i_: buildOopMap.o; -text: .text%__1cNSafePointNodeGis_CFG6kM_i_; -text: .text%__1cIMachNodeQis_MachNullCheck6M_pnRMachNullCheckNode__; text: .text%__1cENodeHadd_req6Mp0_v_; text: .text%__1cENodeIout_grow6MI_v_; -text: .text%__1cMset_live_bit6Fpii_v_: buildOopMap.o; text: .text%__1cKTypeOopPtrFklass6kM_pnHciKlass__; text: .text%__1cIIndexSetKfree_block6MI_v_; -text: .text%__1cJCProjNodeGis_CFG6kM_i_; text: .text%__1cETypeFuhash6Fpk0_i_; text: .text%__1cJrRegIOperEtype6kM_pknEType__; text: .text%__1cMPhaseChaitinLskip_copies6MpnENode__2_; -text: .text%__1cIMachNodeMcisc_operand6kM_i_; -text: .text%__1cVCompressedWriteStreamJwrite_int6Mi_v_; text: .text%__1cICallNodeKmatch_edge6kMI_I_; -text: .text%__1cENodeHis_Call6M_pnICallNode__; text: .text%__1cNCollectedHeapbDcheck_for_bad_heap_word_value6MpnIHeapWord_L_v_; -text: .text%__1cEDictGInsert6Mpv1i_1_; text: .text%JVM_CurrentTimeMillis; -text: .text%__1cINodeHashLhash_delete6MpknENode__i_; -text: .text%__1cETypeJtype_dict6F_pnEDict__; text: .text%__1cOPSPromotionLABKinitialize6MnJMemRegion__v_; text: .text%__1cOPSPromotionLABFflush6M_v_; -text: .text%__1cIrc_class6Fi_nCRC__: ad_amd64.o; text: .text%__1cMPhaseChaitinTinterfere_with_live6MIpnIIndexSet__v_; text: .text%__1cINodeHashQhash_find_insert6MpnENode__2_; -text: .text%__1cNCollectedHeapbAcommon_mem_allocate_noinit6FLipnGThread__pnIHeapWord__; -text: .text%__1cENodeHis_Load6M_pnILoadNode__; -text: .text%__1cFArenaIcontains6kMpkv_i_; -text: .text%__1cJMultiNodeGis_CFG6kM_i_; text: .text%__1cHPhiNodeGOpcode6kM_i_; -text: .text%__1cMPhaseChaitinKelide_copy6MpnENode_ipnFBlock_rnJNode_List_6i_i_; text: .text%__1cKjmpDirNodeNis_block_proj6kM_pknENode__; -text: .text%__1cIProjNodeGis_CFG6kM_i_; text: .text%__1cRMachSpillCopyNodeJideal_reg6kM_I_; text: .text%__1cETypeIhashcons6M_pk0_; text: .text%__1cENodeEhash6kM_I_; -text: .text%__1cNMachIdealNodeMideal_Opcode6kM_i_; -text: .text%__1cOlower_pressure6FpnDLRG_IpnFBlock_pI4_v_: ifg.o; -text: .text%__1cPOopTaskQdDueueSetFsteal6MipirpnHoopDesc__i_; -text: .text%__1cENodeZcheck_for_anti_dependence6kM_i_; -text: .text%__1cKRegionNodeGis_CFG6kM_i_; -text: .text%__1cHCompileRvalid_bundle_info6MpknENode__i_; text: .text%__1cIProjNodeGOpcode6kM_i_; -text: .text%__1cENodeLis_MergeMem6M_pnMMergeMemNode__; text: .text%__1cOoop_RelocationSfix_oop_relocation6M_v_; text: .text%__1cPClassFileStreamGget_u26MpnGThread__H_; -text: .text%__1cENodeIis_Store6kM_pknJStoreNode__; text: .text%__1cPVirtualCallDataKcell_count6M_i_; -text: .text%__1cIProjNodeGpinned6kM_i_; text: .text%__1cENodeMcisc_operand6kM_i_; text: .text%__1cRInterpreterOopMapLoop_iterate6MpnKOopClosure__v_; text: .text%__1cMMachCallNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cMloadConINodePoper_input_base6kM_I_; -text: .text%__1cMloadConINodeHtwo_adr6kM_I_; text: .text%__1cHNTarjanEEVAL6M_p0_; text: .text%__1cNMachIdealNodeErule6kM_I_; text: .text%__1cKHandleMarkKinitialize6MpnGThread__v_; text: .text%__1cKHandleMark2T6M_v_; -text: .text%__1cETypeLisa_oop_ptr6kM_i_; -text: .text%__1cOPhaseIdealLoopUbuild_loop_late_post6MpnENode_pk0_v_; text: .text%__1cENode2t6MI_v_; text: .text%__1cJloadPNodeErule6kM_I_; -text: .text%__1cIMachNodeLis_MachCall6M_pnMMachCallNode__; text: .text%__1cMloadConINodeErule6kM_I_; text: .text%__1cICodeHeapKfind_start6kMpv_1_; text: .text%__1cWShouldNotReachHereNodeNis_block_proj6kM_pknENode__; -text: .text%__1cHTypeIntCeq6kMpknEType__i_; text: .text%__1cLProfileDataPfollow_contents6M_v_; text: .text%__1cLProfileDataPadjust_pointers6M_v_; -text: .text%__1cIMachNodeQis_MachSafePoint6M_pnRMachSafePointNode__; text: .text%__1cHRegMaskMClearToPairs6M_v_; text: .text%__1cJPhaseLiveLadd_liveout6MpnFBlock_IrnJVectorSet__v_; text: .text%__1cLemit_opcode6FrnKCodeBuffer_i_v_; text: .text%__1cIPhaseIFGQeffective_degree6kMI_i_; -text: .text%__1cENodeIis_Catch6kM_pknJCatchNode__; text: .text%__1cFArenaIArealloc6MpvLL_1_; text: .text%__1cGIfNodeGOpcode6kM_i_; text: .text%__1cHTypePtrEhash6kM_i_; text: .text%__1cIPhaseIFGLremove_node6MI_pnIIndexSet__; text: .text%__1cIPhaseIFGJre_insert6MI_v_; text: .text%__1cRMachSpillCopyNodeLbottom_type6kM_pknEType__; -text: .text%__1cMclr_live_bit6Fpii_v_: buildOopMap.o; text: .text%__1cETypeEmeet6kMpk0_2_; -text: .text%__1cMPhaseChaitinQis_high_pressure6MpnFBlock_pnDLRG_I_i_; text: .text%__1cKBranchDataKcell_count6M_i_; text: .text%__1cNCollectedHeapOarray_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__; text: .text%__1cOPhaseIdealLoopYsplit_if_with_blocks_pre6MpnENode__2_; text: .text%__1cNIdealLoopTreeJis_member6kMpk0_i_; text: .text%__1cOPhaseIdealLoopZsplit_if_with_blocks_post6MpnENode__v_; text: .text%__1cDfh16FI_i_; -text: .text%__1cJraw_score6Fdd_d_: chaitin.o; text: .text%__1cDLRGFscore6kM_d_; text: .text%__1cKTypeOopPtrEhash6kM_i_; text: .text%__1cIAddPNodeGOpcode6kM_i_; @@ -205,11 +129,8 @@ text: .text%__1cKIfTrueNodeGOpcode6kM_i_; text: .text%__1cMPhaseChaitinMchoose_color6MrnDLRG_i_i_; text: .text%__1cMPhaseIterGVNNtransform_old6MpnENode__2_; text: .text%__1cGcmpkey6Fpkv1_i_; -text: .text%__1cETypeJsingleton6kM_i_; text: .text%__1cIMachNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cSPSPromotionManagerMdrain_stacks6M_v_; text: .text%__1cHConNodeGOpcode6kM_i_; -text: .text%__1cITypeLongCeq6kMpknEType__i_; text: .text%__1cUParallelScavengeHeapVlarge_typearray_limit6M_L_; text: .text%__1cOtypeArrayKlassIallocate6MipnGThread__pnQtypeArrayOopDesc__; text: .text%__1cKoopFactoryNnew_typeArray6FnJBasicType_ipnGThread__pnQtypeArrayOopDesc__; @@ -220,133 +141,90 @@ text: .text%__1cICodeHeapLblock_start6kMpv_pnJHeapBlock__; text: .text%__1cJCodeCacheEnext6FpnICodeBlob__2_; text: .text%__1cRMachSpillCopyNodeKin_RegMask6kMI_rknHRegMask__; text: .text%__1cMMachProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cLOptoRuntimeXdeoptimize_caller_frame6FpnKJavaThread_i_v_; text: .text%__1cSCallStaticJavaNodeGOpcode6kM_i_; text: .text%__1cYCallStaticJavaDirectNodeMideal_Opcode6kM_i_; text: .text%__1cJCodeCacheFalive6FpnICodeBlob__2_; -text: .text%__1cHRegMaskQis_aligned_Pairs6kM_i_; -text: .text%__1cSis_single_register6FI_i_: postaloc.o; text: .text%__1cRMachSpillCopyNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cMPhaseIterGVNWadd_users_to_worklist06MpnENode__v_; text: .text%__1cECopyYconjoint_words_to_higher6FpnIHeapWord_2L_v_; text: .text%__1cILRG_ListGextend6MII_v_; text: .text%__1cWstatic_stub_RelocationLunpack_data6M_v_; -text: .text%__1cIciObjectGequals6Mp0_i_; text: .text%__1cJPhaseLiveGgetset6MpnFBlock__pnIIndexSet__; text: .text%__1cIConINodeGOpcode6kM_i_; -text: .text%__1cENodeRis_cisc_alternate6kM_i_; text: .text%__1cLIfFalseNodeGOpcode6kM_i_; text: .text%__1cKNode_ArrayGinsert6MIpnENode__v_; text: .text%__1cLCounterDataKcell_count6M_i_; -text: .text%__1cWThreadLocalAllocBufferFreset6M_v_; text: .text%__1cMMachProjNodeGOpcode6kM_i_; text: .text%__1cENodeEgrow6MI_v_; text: .text%__1cIMachNodePcompute_padding6kMi_i_; -text: .text%__1cKup_one_dom6FpnENode__1_: ifnode.o; text: .text%__1cIMachNodeSalignment_required6kM_i_; text: .text%__1cOPhaseIdealLoopEsort6MpnNIdealLoopTree_2_2_; -text: .text%__1cFframeOis_entry_frame6kM_i_; text: .text%__1cNCollectedHeapXallocate_from_tlab_slow6FpnGThread_L_pnIHeapWord__; -text: .text%__1cUParallelScavengeHeapVunsafe_max_tlab_alloc6kM_L_; text: .text%__1cHNTarjanICOMPRESS6M_v_; text: .text%__1cWThreadLocalAllocBufferXclear_before_allocation6M_v_; -text: .text%__1cFMutexGunlock6M_v_; -text: .text%__1cJMultiNodeIis_Multi6M_p0_; text: .text%__1cIBoolNodeGOpcode6kM_i_; text: .text%__1cSInterpreterRuntimeInewarray6FpnKJavaThread_nJBasicType_i_v_; text: .text%__1cUParallelScavengeHeapRallocate_new_tlab6ML_pnIHeapWord__; -text: .text%__1cKSharedHeapXfill_region_with_object6FnJMemRegion__v_; text: .text%__1cWThreadLocalAllocBufferKinitialize6MpnIHeapWord_22_v_; text: .text%__1cYNoJvmtiVMObjectAllocMark2t6M_v_; text: .text%__1cWThreadLocalAllocBufferEfill6MpnIHeapWord_2L_v_; text: .text%__1cYNoJvmtiVMObjectAllocMark2T6M_v_; -text: .text%__1cKTypeOopPtrCeq6kMpknEType__i_; -text: .text%__1cHTypePtrCeq6kMpknEType__i_; text: .text%__1cRMachSpillCopyNodePoper_input_base6kM_I_; text: .text%__1cIIndexSetFclear6M_v_; -text: .text%__1cHTypeIntJsingleton6kM_i_; text: .text%__1cJPhaseLiveLadd_liveout6MpnFBlock_pnIIndexSet_rnJVectorSet__v_; text: .text%__1cECopyXconjoint_words_to_lower6FpnIHeapWord_2L_v_; text: .text%__1cNRelocIteratorKset_limits6MpC1_v_; -text: .text%__1cNRelocIteratorKinitialize6MlpnICodeBlob_pC3_v_; text: .text%__1cNinstanceKlassGvtable6kM_pnLklassVtable__; text: .text%__1cSinstanceKlassKlassIoop_size6kMpnHoopDesc__i_; text: .text%__1cITypeNodeJideal_reg6kM_I_; -text: .text%__1cFframeUis_interpreted_frame6kM_i_; text: .text%__1cHTypeIntEhash6kM_i_; text: .text%__1cIPhaseGVNJtransform6MpnENode__2_; text: .text%__1cNinstanceKlassGitable6kM_pnLklassItable__; text: .text%__1cLklassItable2t6MnTinstanceKlassHandle__v_; -text: .text%__1cIMachNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cIciObjectEhash6M_i_; -text: .text%__1cENodeIis_Multi6M_pnJMultiNode__; -text: .text%__1cFState2T6M_v_; -text: .text%__1cPVirtualCallDataPfollow_contents6M_v_; -text: .text%__1cPVirtualCallDataPadjust_pointers6M_v_; -text: .text%__1cENodeGis_Con6kM_I_; -text: .text%__1cJrRegIOperJnum_edges6kM_I_; -text: .text%__1cENodeIget_long6kM_x_; text: .text%__1cNCellTypeStateFmerge6kM0i_0_; text: .text%__1cOPhaseIdealLoopUbuild_loop_tree_impl6MpnENode_i_i_; text: .text%__1cWNode_Backward_IteratorEnext6M_pnENode__; text: .text%__1cHemit_rm6FrnKCodeBuffer_iii_v_; -text: .text%__1cHPhiNodeGpinned6kM_i_; text: .text%__1cITypeNodeEhash6kM_I_; text: .text%__1cIIndexSetKinitialize6MIpnFArena__v_; text: .text%__1cJPhaseLiveKgetfreeset6M_pnIIndexSet__; text: .text%__1cMMachProjNodeJideal_reg6kM_I_; text: .text%__1cHPhiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIParmNodeGis_CFG6kM_i_; text: .text%__1cENodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cNCollectedHeapMobj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__; text: .text%__1cNinstanceKlassRallocate_instance6MpnGThread__pnPinstanceOopDesc__; text: .text%__1cKRegionNodeGOpcode6kM_i_; text: .text%__1cMMachProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLOptoRuntimeFnew_C6FpnMklassOopDesc_pnKJavaThread__v_; text: .text%__1cOBytecodeStreamEnext6M_nJBytecodesECode__; text: .text%__1cIProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cIJVMStateOis_monitor_use6kMI_i_; text: .text%__1cLTypeInstPtrEhash6kM_i_; -text: .text%__1cLuse_dom_lca6FpnFBlock_pnENode_3rnLBlock_Array__1_: gcm.o; text: .text%__1cITypeLongEhash6kM_i_; -text: .text%__1cIBoolNodeHis_Bool6M_p0_; text: .text%__1cOPhaseIdealLoopOget_early_ctrl6MpnENode__2_; text: .text%__1cOPhaseIdealLoopOset_early_ctrl6MpnENode__v_; -text: .text%__1cENodeHis_Loop6M_pnILoopNode__; text: .text%__1cIJumpDataKcell_count6M_i_; text: .text%__1cHNTarjanELINK6Mp01_v_; text: .text%__1cENodeIIdentity6MpnOPhaseTransform__p0_; -text: .text%__1cIMachNode2t6M_v_; -text: .text%__1cFStateRMachOperGenerator6MipnIMachNode_pnHCompile__pnIMachOper__; text: .text%__1cRPSOldPromotionLABFflush6M_v_; -text: .text%__1cICallNodeHis_Call6M_p0_; -text: .text%__1cENodeFIdeal6MpnIPhaseGVN_i_p0_; text: .text%__1cENodeRraise_bottom_type6MpknEType__v_; text: .text%__1cOJNIHandleBlockPallocate_handle6MpnHoopDesc__pnI_jobject__; text: .text%__1cENodeNis_block_proj6kM_pk0_; -text: .text%__1cUParallelScavengeHeapPis_in_permanent6kMpkv_i_; -text: .text%__1cHdom_lca6FpnFBlock_1_1_: gcm.o; text: .text%__1cOPhaseIdealLoopThas_local_phi_input6MpnENode__2_; text: .text%__1cJVectorSet2F6kMI_i_; text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cICallNodeLbottom_type6kM_pknEType__; text: .text%JVM_ArrayCopy; -text: .text%__1cOtypeArrayKlassQoop_is_typeArray6kM_i_; text: .text%__1cOtypeArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; text: .text%__1cIMachNodeLbottom_type6kM_pknEType__; -text: .text%__1cPClassFileParserOcheck_property6MipkcipnGThread__v_; text: .text%__1cFState2t6M_v_; -text: .text%__1cFStateDDFA6MipknENode__i_; text: .text%__1cJPhaseLiveHfreeset6MpknFBlock__v_; text: .text%__1cOPhaseIdealLoopbIdom_lca_for_get_late_ctrl_internal6MpnENode_22_2_; -text: .text%__1cKRegionNodeGpinned6kM_i_; text: .text%__1cPjava_lang_ClassLas_klassOop6FpnHoopDesc__pnMklassOopDesc__; text: .text%__1cRSignatureIteratorGexpect6Mc_v_; text: .text%__1cIProjNodeEhash6kM_I_; text: .text%__1cENodeFclone6kM_p0_; text: .text%__1cILocationIwrite_on6MpnUDebugInfoWriteStream__v_; text: .text%__1cIPhaseCCPOtransform_once6MpnENode__2_; -text: .text%__1cHCompileMFillLocArray6MpnENode_pnNGrowableArray4CpnKScopeValue____i_; text: .text%__1cHRegMaskPfind_first_pair6kM_i_; text: .text%__1cENodeKmatch_edge6kMI_I_; text: .text%__1cKJNIHandlesKmake_local6FpnHJNIEnv__pnHoopDesc__pnI_jobject__; @@ -355,41 +233,27 @@ text: .text%__1cNPhaseRegAllocKreg2offset6kMi_i_; text: .text%__1cNPhaseRegAllocUreg2offset_unchecked6kMi_i_; text: .text%__1cbAfinal_graph_reshaping_impl6FpnENode_rnUFinal_Reshape_Counts__v_: compile.o; text: .text%__1cETypeFxmeet6kMpk0_2_; -text: .text%__1cENodeFis_If6M_pnGIfNode__; text: .text%__1cJStartNodeLbottom_type6kM_pknEType__; text: .text%__1cICmpPNodeGOpcode6kM_i_; text: .text%__1cOMethodLivenessKBasicBlockXcompute_gen_kill_single6MpnQciBytecodeStream__v_; text: .text%__1cKjmpDirNodeMideal_Opcode6kM_i_; text: .text%__1cOPhaseIdealLoopZremix_address_expressions6MpnENode__2_; -text: .text%__1cFMutexElock6MpnGThread__v_; -text: .text%__1cILoadNodeHis_Load6M_p0_; text: .text%__1cGciTypeEmake6FnJBasicType__p0_; text: .text%__1cQUnique_Node_ListGremove6MpnENode__v_; text: .text%__1cKNode_Array2t6MpnFArena__v_; text: .text%__1cRMachSafePointNodeEjvms6kM_pnIJVMState__; text: .text%__1cNinstanceKlassMclass_loader6kM_pnHoopDesc__; text: .text%__1cOPhaseIdealLoopNget_late_ctrl6MpnENode_2_2_; -text: .text%__1cRMachSpillCopyNodeOimplementation6kMpnKCodeBuffer_pnNPhaseRegAlloc_i_I_; text: .text%__1cKTypeAryPtrEhash6kM_i_; text: .text%__1cIIndexSet2t6Mp0_v_; text: .text%__1cNrFlagsRegOperEtype6kM_pknEType__; text: .text%__1cHTypeInt2t6Miii_v_; -text: .text%__1cTconstantPoolOopDescbAname_and_type_ref_index_at6Mi_i_; text: .text%__1cMPhaseChaitinSuse_prior_register6MpnENode_I2pnFBlock_rnJNode_List_6_i_; -text: .text%__1cIGraphKitHstopped6M_i_; -text: .text%__1cKTypeOopPtrJsingleton6kM_i_; text: .text%__1cENodeQIdeal_DU_postCCP6MpnIPhaseCCP__p0_; -text: .text%__1cNSafePointNodeGpinned6kM_i_; -text: .text%__1cQCompressedStream2t6MpCi_v_; text: .text%__1cIConLNodeGOpcode6kM_i_; text: .text%__1cHPhiNodeEhash6kM_I_; -text: .text%__1cGIfNodeGpinned6kM_i_; -text: .text%__1cOis_diamond_phi6FpnENode__i_: cfgnode.o; -text: .text%__1cLTypeInstPtrCeq6kMpknEType__i_; text: .text%__1cENodeHsize_of6kM_I_; -text: .text%__1cENodeSremove_dead_region6MpnIPhaseGVN_i_i_; text: .text%__1cHRegMaskMSmearToPairs6M_v_; -text: .text%__1cSCallStaticJavaNodeEhash6kM_I_; text: .text%jni_GetObjectField: jni.o; text: .text%__1cJMarkSweepXrevisit_weak_klass_link6FpnFKlass__v_; text: .text%__1cKklassKlassToop_follow_contents6MpnHoopDesc__v_; @@ -398,53 +262,33 @@ text: .text%__1cFKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosu text: .text%__1cKNode_ArrayEgrow6MI_v_; text: .text%__1cLklassVtableToop_adjust_pointers6M_v_; text: .text%__1cLklassVtableToop_follow_contents6M_v_; -text: .text%__1cCosOis_interrupted6FpnGThread_i_i_; text: .text%__1cICmpINodeGOpcode6kM_i_; -text: .text%__1cHMatcherKLabel_Root6MpknENode_pnFState_p16_6_; text: .text%__1cMPhaseChaitinHnew_lrg6MpknENode_I_v_; text: .text%__1cFframeYinterpreter_frame_method6kM_pnNmethodOopDesc__; text: .text%__1cUGenericGrowableArrayMraw_allocate6Mi_pv_; text: .text%__1cJMarkSweepNpreserve_mark6FpnHoopDesc_pnLmarkOopDesc__v_; text: .text%__1cIMachNodeKconst_size6kM_i_; -text: .text%__1cGIfNodeFis_If6M_p0_; text: .text%__1cINodeHashLhash_insert6MpnENode__v_; -text: .text%__1cOPhaseIdealLoopMis_dominator6MpnENode_2_i_; -text: .text%__1cKTypeOopPtrLxadd_offset6kMi_i_; text: .text%JVM_Read; text: .text%__1cDhpiEread6FipvI_L_; -text: .text%__1cIMachNodeIpeephole6MpnFBlock_ipnNPhaseRegAlloc_ri_p0_; text: .text%__1cMPhaseIterGVNVadd_users_to_worklist6MpnENode__v_; -text: .text%__1cIHaltNodeGis_CFG6kM_i_; -text: .text%__1cENodeKis_PCTable6kM_pknLPCTableNode__; text: .text%__1cPClassFileStreamGget_u16MpnGThread__C_; text: .text%__1cMMergeMemNodeGOpcode6kM_i_; text: .text%__1cPciObjectFactoryEfind6MpnHoopDesc_pnNGrowableArray4CpnIciObject____i_; -text: .text%__1cJCodeCacheQfind_blob_unsafe6Fpv_pnICodeBlob__; text: .text%__1cHemit_d86FrnKCodeBuffer_i_v_; -text: .text%__1cKCodeBuffer2t6MiiiiiipnKBufferBlob_pnJrelocInfo_pnORelocateBuffer_ipnLOopRecorder_pkcii_v_; text: .text%__1cLOopRecorder2t6MpnFArena__v_; text: .text%__1cKCodeBuffer2T6M_v_; -text: .text%__1cKCodeBufferQalloc_relocation6MI_v_; text: .text%__1cIMachNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cIMachNodeJemit_size6kMpnNPhaseRegAlloc__I_; -text: .text%__1cLTypeInstPtr2t6MnHTypePtrDPTR_pnHciKlass_ipnIciObject_i_v_; -text: .text%__1cLOptoRuntimeKjbyte_copy6FpW1L_v_; text: .text%__1cJloadINodeErule6kM_I_; text: .text%__1cMOopMapStream2t6MpnGOopMap_i_v_; -text: .text%__1cPciObjectFactoryLis_found_at6MipnHoopDesc_pnNGrowableArray4CpnIciObject____i_; text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode__i_; text: .text%__1cIAddINodeGOpcode6kM_i_; text: .text%__1cWShouldNotReachHereNodeMideal_Opcode6kM_i_; -text: .text%__1cOmatch_into_reg6FpnENode_iii1_i_: matcher.o; -text: .text%__1cENodeJis_Branch6kM_I_; -text: .text%__1cITypeLong2t6Mxxi_v_; text: .text%__1cRconstantPoolKlassIoop_size6kMpnHoopDesc__i_; text: .text%__1cIJVMStateIof_depth6kMi_p0_; -text: .text%__1cFMutexElock6M_v_; text: .text%__1cJrRegLOperEtype6kM_pknEType__; text: .text%__1cENode2t6Mp0_v_; -text: .text%__1cLTypeInstPtrEmake6FnHTypePtrDPTR_pnHciKlass_ipnIciObject_i_pk0_; -text: .text%__1cJStartNodeGpinned6kM_i_; text: .text%__1cHhashptr6Fpkv_i_; text: .text%__1cLklassItableToop_adjust_pointers6M_v_; text: .text%__1cLklassItableToop_follow_contents6M_v_; @@ -455,62 +299,39 @@ text: .text%__1cSinstanceKlassKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cNinstanceKlassXfollow_weak_klass_links6MpnRBoolObjectClosure_pnKOopClosure__v_; text: .text%__1cNinstanceKlassUadjust_static_fields6M_v_; text: .text%__1cNinstanceKlassUfollow_static_fields6M_v_; -text: .text%__1cFBlockLis_uncommon6kMrnLBlock_Array__i_; text: .text%__1cEDict2F6kMpkv_pv_; text: .text%__1cIProjNodeLbottom_type6kM_pknEType__; text: .text%__1cNCatchProjNodeGOpcode6kM_i_; text: .text%__1cJCodeCacheJfind_blob6Fpv_pnICodeBlob__; text: .text%__1cICallNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJdo_method6FpnNmethodOopDesc__v_: recompilationMonitor.o; text: .text%__1cWconstantPoolCacheKlassIoop_size6kMpnHoopDesc__i_; text: .text%__1cKjmpConNodeMideal_Opcode6kM_i_; text: .text%__1cJLoadPNodeGOpcode6kM_i_; text: .text%__1cLSymbolTableGlookup6MipkciI_pnNsymbolOopDesc__; text: .text%__1cWconstantPoolCacheKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cWconstantPoolCacheKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cOindOffset8OperJnum_edges6kM_I_; -text: .text%__1cKBufferBlobIis_alive6kM_i_; -text: .text%__1cFframeGsender6kMpnLRegisterMap_pnICodeBlob__0_; -text: .text%__1cJTypeTupleJsingleton6kM_i_; -text: .text%__1cKTypeAryPtrCeq6kMpknEType__i_; text: .text%__1cHPhiNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cETypeKhas_memory6kM_i_; -text: .text%__1cHMatcherKReduceOper6MpnFState_ipnIMachNode_rpnENode__v_; text: .text%__1cGIfNodeLbottom_type6kM_pknEType__; text: .text%__1cENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIMachNodeFreloc6kM_i_; text: .text%__1cPciObjectFactoryDget6MpnHoopDesc__pnIciObject__; text: .text%__1cOThreadCritical2T6M_v_; text: .text%__1cOThreadCritical2t6M_v_; -text: .text%__1cFframeOis_first_frame6kM_i_; -text: .text%__1cICodeBlobOis_osr_adapter6kM_i_; -text: .text%__1cHConNodeGis_Con6kM_I_; text: .text%__1cIAddPNodeKmatch_edge6kMI_I_; text: .text%__1cILoadNodeEhash6kM_I_; text: .text%__1cRMachSpillCopyNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cICodeBlobTfix_oop_relocations6MpC1_v_; -text: .text%__1cICodeBlobTfix_oop_relocations6M_v_; text: .text%__1cIimmIOperIconstant6kM_l_; -text: .text%__1cHCmpNodeGis_Cmp6kM_pk0_; -text: .text%__1cFMutexbClock_without_safepoint_check6M_v_; text: .text%__1cENodeHdel_req6MI_v_; text: .text%__1cJCProjNodeEhash6kM_I_; -text: .text%__1cHCompileJcan_alias6MpknHTypePtr_i_i_; text: .text%__1cJMultiNodeEhash6kM_I_; text: .text%__1cRSignatureIteratorKparse_type6M_i_; -text: .text%__1cHnmethodIis_alive6kM_i_; text: .text%__1cIHaltNodeGOpcode6kM_i_; -text: .text%__1cMMergeMemNodeLis_MergeMem6M_p0_; -text: .text%__1cUPSMarkSweepDecoratorQinsert_deadspace6MrlpnIHeapWord_L_i_; text: .text%__1cHPhiNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cMPhaseIterGVNZremove_globally_dead_node6MpnENode__v_; text: .text%__1cETypeEhash6kM_i_; text: .text%__1cJHashtableLhash_symbol6Fpkci_I_; -text: .text%__1cKTypeAryPtrEmake6FnHTypePtrDPTR_pnIciObject_pknHTypeAry_pnHciKlass_ii_pk0_; -text: .text%__1cYDebugInformationRecorderLcheck_phase6Mn0AFPhase__v_; text: .text%__1cOMachReturnNodeKin_RegMask6kMI_rknHRegMask__; text: .text%__1cFframeVinterpreter_frame_bcp6kM_pC_; -text: .text%__1cICodeBlobKis_nmethod6kM_i_; text: .text%__1cICmpUNodeGOpcode6kM_i_; text: .text%__1cJOopMapSetSfind_map_at_offset6kMi_pnGOopMap__; text: .text%__1cICodeBlobbAoop_map_for_return_address6MpC_pnGOopMap__; @@ -519,91 +340,53 @@ text: .text%__1cIMachNodeHtwo_adr6kM_I_; text: .text%__1cIParmNodeGOpcode6kM_i_; text: .text%__1cTconvI2L_reg_regNodeErule6kM_I_; text: .text%__1cHTypeIntFxmeet6kMpknEType__3_; -text: .text%__1cLAdapterInfoFequal6kMp0_i_; -text: .text%__1cGOopMapbEmap_compiler_reg_to_oopmap_reg6Miii_i_; -text: .text%__1cTconstantPoolOopDescSklass_ref_index_at6Mi_i_; text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cKoopFactoryKnew_symbol6FpkcipnGThread__pnNsymbolOopDesc__; text: .text%__1cMloadConINodeMideal_Opcode6kM_i_; text: .text%__1cGTarjanEEVAL6M_p0_; -text: .text%__1cKRelocationYindex_to_runtime_address6Fl_pC_; text: .text%__1cYexternal_word_RelocationLunpack_data6M_v_; text: .text%__1cJCatchNodeGOpcode6kM_i_; text: .text%__1cZPhaseConservativeCoalesceIcoalesce6MpnFBlock__v_; -text: .text%__1cITypeLongJsingleton6kM_i_; -text: .text%__1cNencode_RegMem6FrnKCodeBuffer_iiiiii_v_; -text: .text%__1cFBlockGselect6MrnJNode_List_rnLBlock_Array_pirnJVectorSet_IrnNGrowableArray4CI___pnENode__; -text: .text%__1cGOopMapHset_xxx6MinLOopMapValueJoop_types_iii_v_; -text: .text%__1cFMutexNowned_by_self6kM_i_; text: .text%__1cTCreateExceptionNodeErule6kM_I_; text: .text%__1cIJVMStateLdebug_start6kM_I_; -text: .text%__1cRCardTableModRefBSEkind6M_nKBarrierSetEName__; text: .text%__1cMloadConPNodeMideal_Opcode6kM_i_; text: .text%__1cIMachNodeNoperand_index6kMI_i_; -text: .text%__1cKMachIfNodeJis_MachIf6kM_pk0_; text: .text%__1cFBlockIis_Empty6kM_i_; text: .text%__1cMMachTypeNodeLbottom_type6kM_pknEType__; text: .text%__1cIAddPNodeLbottom_type6kM_pknEType__; text: .text%__1cFBlockOcode_alignment6M_I_; -text: .text%__1cKRegionNodeJis_Region6kM_pk0_; text: .text%__1cGBitMapUclear_range_of_words6MLL_v_; -text: .text%__1cGBitMapFclear6M_v_; -text: .text%__1cSinstanceKlassKlassMoop_is_klass6kM_i_; text: .text%__1cJrRegIOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cKCastPPNodeGOpcode6kM_i_; text: .text%__1cIPhaseIFGMtest_edge_sq6kMII_i_; -text: .text%__1cFframeQoops_do_internal6MpnKOopClosure_pnLRegisterMap_i_v_; text: .text%__1cNinstanceKlassLfind_method6FpnPobjArrayOopDesc_pnNsymbolOopDesc_4_pnNmethodOopDesc__; text: .text%__1cFStateRMachNodeGenerator6MipnHCompile__pnIMachNode__; text: .text%__1cHMatcherKReduceInst6MpnFState_irpnENode__pnIMachNode__; -text: .text%__1cENodeOis_CountedLoop6M_pnPCountedLoopNode__; text: .text%__1cPClassFileStreamHskip_u16MipnGThread__v_; -text: .text%__1cMMachCallNodeGpinned6kM_i_; -text: .text%__1cHnmethodJis_zombie6kM_i_; text: .text%__1cMMergeMemNodeLbottom_type6kM_pknEType__; text: .text%__1cNinstanceKlassLfind_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cKTypeAryPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cKCodeBufferIrelocate6MpCrknQRelocationHolder_i_v_; text: .text%__1cILoadNodeLbottom_type6kM_pknEType__; text: .text%__1cLConvI2LNodeGOpcode6kM_i_; text: .text%__1cHTypeIntEmake6Fi_pk0_; -text: .text%__1cbFCompressedLineNumberWriteStreamKwrite_pair6Mii_v_; text: .text%__1cJMultiNodeIproj_out6kMI_pnIProjNode__; -text: .text%__1cFKlassMoop_is_array6kM_i_; text: .text%__1cIBoolNodeEhash6kM_I_; text: .text%__1cIimmPOperEtype6kM_pknEType__; text: .text%__1cMloadConPNodeLbottom_type6kM_pknEType__; -text: .text%__1cJrRegPOperJnum_edges6kM_I_; text: .text%__1cOrFlagsRegUOperEtype6kM_pknEType__; text: .text%__1cGIfNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cNsymbolOopDescLas_C_string6kM_pc_; text: .text%__1cNsymbolOopDescLas_C_string6kMpci_1_; -text: .text%__1cGOopMapJset_value6Miii_v_; text: .text%__1cITypeLongFxmeet6kMpknEType__3_; text: .text%__1cNCollectedHeapbHcheck_for_non_bad_heap_word_value6MpnIHeapWord_L_v_; -text: .text%__1cHMatcherTReduceInst_Interior6MpnFState_ipnIMachNode_IrpnENode__I_; -text: .text%__1cNsymbolOopDescGequals6kMpkci_i_; text: .text%__1cMPhaseChaitinLinsert_proj6MpnFBlock_IpnENode_I_v_; -text: .text%__1cKjmpConNodeGpinned6kM_i_; -text: .text%__1cNSafePointNodebBneeds_polling_address_input6F_i_; text: .text%__1cHCompileRprobe_alias_cache6MpknHTypePtr__pn0APAliasCacheEntry__; -text: .text%__1cHnmethodOis_not_entrant6kM_i_; -text: .text%__1cIAddPNodeHis_AddP6M_p0_; -text: .text%__1cNobjArrayKlassQarray_klass_impl6MiipnGThread__pnMklassOopDesc__; -text: .text%__1cNobjArrayKlassQarray_klass_impl6FnTobjArrayKlassHandle_iipnGThread__pnMklassOopDesc__; -text: .text%__1cIMachNodeGExpand6MpnFState_rnJNode_List__p0_; text: .text%__1cXInterpreterFrameClosureJoffset_do6Mi_v_; -text: .text%__1cNinstanceKlassQarray_klass_impl6FnTinstanceKlassHandle_iipnGThread__pnMklassOopDesc__; -text: .text%__1cNinstanceKlassQarray_klass_impl6MiipnGThread__pnMklassOopDesc__; text: .text%__1cENodeIdestruct6M_v_; text: .text%__1cIAddPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPClassFileParserbEparse_constant_pool_utf8_entry6MnSconstantPoolHandle_ipnGThread__v_; text: .text%__1cPClassFileParserRverify_legal_utf86MpkCipnGThread__v_; text: .text%__1cMMachHaltNodeEjvms6kM_pnIJVMState__; text: .text%__1cKoopFactoryMnew_objArray6FpnMklassOopDesc_ipnGThread__pnPobjArrayOopDesc__; text: .text%__1cNinstanceKlassRallocate_objArray6MiipnGThread__pnPobjArrayOopDesc__; text: .text%__1cGBitMapJset_union6M0_v_; -text: .text%__1cPciInstanceKlassMis_interface6M_i_; text: .text%__1cHTypeIntEmake6Fiii_pk0_; text: .text%__1cJTypeTupleEhash6kM_i_; text: .text%__1cFParsePdo_one_bytecode6M_v_; @@ -614,27 +397,14 @@ text: .text%__1cUParallelScavengeHeapWpermanent_mem_allocate6ML_pnIHeapWord__; text: .text%__1cJPSPermGenSallocate_permanent6ML_pnIHeapWord__; text: .text%__1cPmethodDataKlassIoop_size6kMpnHoopDesc__i_; text: .text%__1cIHaltNodeKmatch_edge6kMI_I_; -text: .text%__1cENodeOis_block_start6kM_i_; -text: .text%__1cHMatcherQis_save_on_entry6Mi_i_; -text: .text%__1cLsymbolKlassNoop_is_symbol6kM_i_; -text: .text%__1cITypeLongEmake6Fxxi_pk0_; text: .text%__1cPmethodDataKlassToop_adjust_pointers6MpnHoopDesc__i_; text: .text%__1cPmethodDataKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cMPhaseIterGVNKis_IterGVN6M_p0_; text: .text%__1cGBitMap2t6MpLL_v_; -text: .text%__1cLOptoRuntimePnew_typeArray_C6FnJBasicType_ipnKJavaThread__v_; -text: .text%__1cHCompilePfind_alias_type6MpknHTypePtr_i_pn0AJAliasType__; text: .text%__1cNnew_loc_value6FpnNPhaseRegAlloc_inILocationEType__pnNLocationValue__: output.o; -text: .text%__1cKjmpDirNodePoper_input_base6kM_I_; -text: .text%__1cMMachCallNodeLis_MachCall6M_p0_; -text: .text%__1cHPhiNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cXjava_lang_ref_ReferenceNreferent_addr6FpnHoopDesc__p2_; text: .text%__1cOindOffset8OperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cOindOffset8OperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cZPhaseConservativeCoalesceJcopy_copy6MpnENode_2pnFBlock_I_i_; -text: .text%__1cKutf8_write6FpCH_0_: utf8.o; text: .text%__1cKNode_ArrayGremove6MI_v_; -text: .text%__1cTconstantPoolOopDescQsignature_ref_at6Mi_pnNsymbolOopDesc__; text: .text%__1cHPhiNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cRSignatureIterator2t6MnMsymbolHandle__v_; text: .text%__1cJloadPNodeMideal_Opcode6kM_i_; @@ -642,17 +412,11 @@ text: .text%__1cPSignatureStreamEnext6M_v_; text: .text%__1cOindOffset8OperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cLjmpConUNodeMideal_Opcode6kM_i_; text: .text%__1cFBlockJfind_node6kMpknENode__I_; -text: .text%__1cOis_range_check6FpnENode_r12ri_i_: ifnode.o; -text: .text%__1cENodeIis_Start6M_pnJStartNode__; text: .text%__1cHhashkey6Fpkv_i_; text: .text%__1cNLoadRangeNodeGOpcode6kM_i_; text: .text%__1cJLoadINodeGOpcode6kM_i_; -text: .text%__1cKis_x2logic6FpnIPhaseGVN_pnENode__3_: cfgnode.o; -text: .text%__1cHAbsNodeLis_absolute6FpnIPhaseGVN_pnENode__4_; text: .text%__1cGTarjanICOMPRESS6M_v_; text: .text%__1cTconstantPoolOopDescNklass_at_impl6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cENodeHis_Goto6kM_I_; -text: .text%__1cLPCTableNodeGpinned6kM_i_; text: .text%JVM_ReleaseUTF; text: .text%__1cHSubNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cFChunk2t6ML_v_; @@ -662,7 +426,6 @@ text: .text%__1cMCreateExNodeGOpcode6kM_i_; text: .text%__1cFframebCsender_for_interpreter_frame6kMpnLRegisterMap__0_; text: .text%__1cFChunk2k6Fpv_v_; text: .text%__1cOMachReturnNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cJrelocInfo2t6Mn0AJrelocType_ii_v_; text: .text%__1cHMatcherKmatch_tree6MpknENode__pnIMachNode__; text: .text%__1cLTypeInstPtrFxmeet6kMpknEType__3_; text: .text%__1cKjmpConNodePoper_input_base6kM_I_; @@ -670,84 +433,45 @@ text: .text%__1cIJVMState2t6MpnIciMethod_p0_v_; text: .text%__1cMciMethodDataHdata_at6Mi_pnLProfileData__; text: .text%__1cJrelocInfoNfinish_prefix6Mph_p0_; text: .text%__1cIProjNodeHsize_of6kM_I_; -text: .text%__1cENodeHis_AddP6M_pnIAddPNode__; -text: .text%__1cLTypeInstPtrKadd_offset6kMi_pknHTypePtr__; text: .text%__1cHBitDataKcell_count6M_i_; -text: .text%__1cFframeZsender_for_compiled_frame6kMpnLRegisterMap_pnICodeBlob__0_; text: .text%__1cFArenaEgrow6ML_pv_; -text: .text%__1cNCollectedHeapWpermanent_obj_allocate6FnLKlassHandle_ipnGThread__pnHoopDesc__; text: .text%__1cMPhaseIterGVNMsubsume_node6MpnENode_2_v_; -text: .text%__1cLBoxLockNodeNrematerialize6kM_i_; -text: .text%__1cRMachSafePointNodeQis_MachSafePoint6M_p0_; text: .text%__1cJloadBNodeErule6kM_I_; -text: .text%__1cITypeNodeRraise_bottom_type6MpknEType__v_; text: .text%__1cHConNodeEhash6kM_I_; -text: .text%__1cICodeBlobLlink_offset6M_i_; text: .text%__1cENodeRdisconnect_inputs6Mp0_i_; text: .text%__1cIHaltNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cICodeBlobOis_i2c_adapter6kM_i_; text: .text%__1cTconstantPoolOopDescWsignature_ref_index_at6Mi_i_; -text: .text%__1cIJVMStateNclone_shallow6kM_p0_; text: .text%__1cRMachSpillCopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cGOopMapQset_callee_saved6Miiii_v_; text: .text%__1cKRegionNodeLbottom_type6kM_pknEType__; -text: .text%__1cJOopMapSetTupdate_register_map6FpknFframe_pnICodeBlob_pnLRegisterMap__v_; text: .text%__1cIJVMStateJdebug_end6kM_I_; -text: .text%__1cXjava_lang_ref_ReferenceJnext_addr6FpnHoopDesc__p2_; text: .text%__1cENode2t6Mp011_v_; -text: .text%__1cENodeMis_SafePoint6M_pnNSafePointNode__; -text: .text%__1cHMatcherTcollect_null_checks6MpnENode__v_; -text: .text%__1cNSafePointNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cHMemNodeMIdeal_common6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cGBitMapGat_put6MLi_v_; -text: .text%__1cFciEnvIis_in_vm6F_i_; text: .text%__1cNSafePointNodeHsize_of6kM_I_; -text: .text%__1cMgetTimeNanos6F_x_; -text: .text%__1cKciTypeFlowLStateVectorSapply_one_bytecode6MpnQciBytecodeStream__i_; text: .text%__1cKPSScavengeUoop_promotion_failed6FpnHoopDesc_pnLmarkOopDesc__v_; text: .text%__1cHTypePtrLmeet_offset6kMi_i_; -text: .text%__1cOMergeMemStreamOnext_non_empty6Mi_i_; -text: .text%__1cNPhaseRegAllocGis_oop6kMpknENode__i_; text: .text%__1cSPSPromotionManagerUoop_promotion_failed6MpnHoopDesc_pnLmarkOopDesc__2_; -text: .text%__1cIMachOperLdisp_is_oop6kM_i_; text: .text%__1cRSignatureIteratorSiterate_parameters6M_v_; text: .text%__1cNmethodOopDescIbci_from6kMpC_i_; -text: .text%__1cICodeBlobYcaller_must_gc_arguments6kMpnKJavaThread__i_; text: .text%__1cLLShiftLNodeGOpcode6kM_i_; text: .text%__1cOMethodLivenessKBasicBlockIload_one6Mi_v_; -text: .text%__1cJTypeTupleCeq6kMpknEType__i_; text: .text%__1cHCmpNodeLbottom_type6kM_pknEType__; text: .text%__1cFDictI2i6M_v_; -text: .text%__1cPjava_lang_ClassMis_primitive6FpnHoopDesc__i_; text: .text%JVM_GetMethodIxExceptionTableLength; -text: .text%__1cKC2IAdapterIis_alive6kM_i_; text: .text%__1cENodeHget_int6kM_i_; text: .text%__1cMMachCallNodeLbottom_type6kM_pknEType__; text: .text%__1cOGenerateOopMapHinterp16MpnOBytecodeStream__v_; -text: .text%__1cIAddPNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cMloadConINodeLbottom_type6kM_pknEType__; text: .text%__1cPCheckCastPPNodeGOpcode6kM_i_; text: .text%__1cMloadConINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cENodeXis_iteratively_computed6M_i_; -text: .text%__1cNloadConI0NodePoper_input_base6kM_I_; -text: .text%__1cNinstanceKlassPoop_is_instance6kM_i_; text: .text%__1cENodeKreplace_by6Mp0_v_; text: .text%__1cHPhiNodeIadr_type6kM_pknHTypePtr__; text: .text%__1cIBoolTestKcc2logical6kMpknEType__3_; text: .text%__1cIBoolNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cJrelocInfoKset_format6Mi_v_; text: .text%__1cXruntime_call_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cKRelocationJpack_data6M_i_; -text: .text%__1cXjava_lang_ref_ReferencePdiscovered_addr6FpnHoopDesc__p2_; text: .text%__1cNPhaseCoalesceRcombine_these_two6MpnENode_2_v_; text: .text%__1cNtestP_regNodeMideal_Opcode6kM_i_; -text: .text%__1cETypeFempty6kM_i_; -text: .text%__1cHMemNodeGis_Mem6M_p0_; -text: .text%__1cZload_can_see_stored_value6FpnILoadNode_pnENode_pnOPhaseTransform__3_: memnode.o; text: .text%__1cICallNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cICodeBlobJis_zombie6kM_i_; text: .text%__1cJTypeTupleGfields6FI_ppknEType__; -text: .text%__1cOGenerateOopMapPjump_targets_do6MpnOBytecodeStream_pFp0ipi_v4_i_; text: .text%__1cPClassFileParserUassemble_annotations6MpCi1ipnGThread__nPtypeArrayHandle__; text: .text%method_compare: methodOop.o; text: .text%__1cMMergeMemNodeEhash6kM_I_; @@ -755,47 +479,30 @@ text: .text%__1cJloadPNodePoper_input_base6kM_I_; text: .text%__1cILoadNodeKmatch_edge6kMI_I_; text: .text%__1cFBlockUneeded_for_next_call6MpnENode_rnJVectorSet_rnLBlock_Array__v_; text: .text%__1cIIndexSetSpopulate_free_list6F_v_; -text: .text%__1cGIfNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cCosPelapsed_counter6F_x_; text: .text%__1cIAddPNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cIemit_d326FrnKCodeBuffer_i_v_; -text: .text%__1cNloadConI0NodeHtwo_adr6kM_I_; text: .text%__1cJStoreNodeKmatch_edge6kMI_I_; text: .text%__1cITypeNodeDcmp6kMrknENode__I_; text: .text%__1cMPhaseChaitinFUnion6MpknENode_3_v_; -text: .text%__1cFKlassMoop_is_klass6kM_i_; text: .text%__1cRSignatureIteratorTcheck_signature_end6M_v_; text: .text%__1cRSignatureIteratorSiterate_returntype6M_v_; text: .text%__1cNinstanceKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cHnmethodKis_nmethod6kM_i_; text: .text%__1cILoadNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cNSafePointNodeKmatch_edge6kMI_I_; text: .text%__1cPClassFileStreamGget_u46MpnGThread__I_; -text: .text%__1cSCallStaticJavaNodeRis_CallStaticJava6kM_pk0_; text: .text%__1cKarrayKlassLobject_size6kMi_i_; -text: .text%__1cPciInstanceKlassRis_instance_klass6M_i_; -text: .text%__1cOno_flip_branch6FpnFBlock__i_: block.o; text: .text%__1cKarrayKlassGvtable6kM_pnLklassVtable__; text: .text%__1cYCallStaticJavaDirectNodePoper_input_base6kM_I_; text: .text%__1cOGenerateOopMapEpush6MnNCellTypeState__v_; -text: .text%__1cKjmpDirNodeGpinned6kM_i_; -text: .text%__1cTconstantPoolOopDescLname_ref_at6Mi_pnNsymbolOopDesc__; -text: .text%__1cKjmpDirNodeHtwo_adr6kM_I_; text: .text%__1cPciInstanceKlassGloader6M_pnHoopDesc__; -text: .text%__1cJrRegLOperJnum_edges6kM_I_; text: .text%__1cOGenerateOopMapDpop6M_nNCellTypeState__; -text: .text%__1cNGrowableArray4CpnKScopeValue__2t6Mii_v_; text: .text%__1cYDebugInformationRecorderWserialize_scope_values6MpnNGrowableArray4CpnKScopeValue____i_; text: .text%__1cYDebugInformationRecorderTcreate_scope_values6MpnNGrowableArray4CpnKScopeValue____pnKDebugToken__; text: .text%__1cITypeNodeHsize_of6kM_I_; text: .text%__1cILoadNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cPPerfLongVariantGsample6M_v_; text: .text%__1cNloadConI0NodeErule6kM_I_; -text: .text%__1cJCodeCacheIcontains6Fpv_i_; text: .text%__1cQciBytecodeStreamMreset_to_bci6Mi_v_; -text: .text%__1cJOopMapSetGall_do6FpknFframe_pnICodeBlob_pknLRegisterMap_pnKOopClosure_pFppnHoopDesc_9E_v9B9B_v_; -text: .text%__1cFframeRoops_code_blob_do6MpnKOopClosure_pknLRegisterMap__v_; -text: .text%__1cJOopMapSetHoops_do6FpknFframe_pnICodeBlob_pknLRegisterMap_pnKOopClosure__v_; text: .text%__1cHPhiNodeHsize_of6kM_I_; text: .text%__1cSInterpreterRuntimeJanewarray6FpnKJavaThread_pnTconstantPoolOopDesc_ii_v_; text: .text%__1cMPhaseChaitinNFind_compress6MI_I_; @@ -804,92 +511,55 @@ text: .text%__1cLOopMapCacheIentry_at6kMi_pnQOopMapCacheEntry__; text: .text%__1cOGenerateOopMapKcheck_type6MnNCellTypeState_1_v_; text: .text%__1cPciInstanceKlassRprotection_domain6M_pnHoopDesc__; text: .text%__1cSobjArrayKlassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cILoadNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cMPhaseIterGVNbGregister_new_node_with_optimizer6MpnENode__2_; -text: .text%__1cKBufferBlobMdo_unloading6MpnRBoolObjectClosure_pnKOopClosure_i_v_; -text: .text%__1cKBufferBlobHoops_do6MpnKOopClosure__v_; text: .text%__1cLRegisterMapFclear6M_v_; text: .text%__1cIBoolNodeLbottom_type6kM_pknEType__; text: .text%__1cITypeNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cKRegionNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cLBlock_Array2t6MpnFArena__v_; -text: .text%__1cPSignatureStreamHis_done6kM_i_; -text: .text%__1cNrFlagsRegOperJnum_edges6kM_I_; -text: .text%__1cLPhaseValuesGintcon6Mi_pnIConINode__; text: .text%__1cKStoreINodeGOpcode6kM_i_; -text: .text%__1cLRegisterMap2t6MpnKJavaThread_i_v_; -text: .text%__1cNmethodOopDescPis_empty_method6kM_i_; text: .text%__1cJcmpOpOperJnum_edges6kM_I_; text: .text%__1cNExceptionMark2t6MrpnGThread__v_; text: .text%__1cNExceptionMark2T6M_v_; text: .text%__1cCosMvm_page_size6F_i_; -text: .text%__1cJloadPNodeZcheck_for_anti_dependence6kM_i_; -text: .text%__1cOcompU_rRegNodePoper_input_base6kM_I_; -text: .text%__1cNmethodOopDescLis_accessor6kM_i_; -text: .text%__1cPloadConUL32NodePoper_input_base6kM_I_; text: .text%__1cMPhaseChaitinSget_spillcopy_wide6MpnENode_2I_2_; -text: .text%__1cKI2CAdapterIis_alive6kM_i_; -text: .text%__1cHnmethodHoops_do6MpnKOopClosure__v_; text: .text%__1cIGraphKitJsync_jvms6kM_pnIJVMState__; text: .text%__1cFframebFinterpreter_frame_monitor_begin6kM_pnPBasicObjectLock__; -text: .text%__1cENodeGis_Mem6M_pnHMemNode__; -text: .text%__1cQSystemDictionaryXcheck_signature_loaders6FnMsymbolHandle_nGHandle_2ipnGThread__v_; -text: .text%__1cIGraphKitEstop6M_v_; text: .text%__1cNidealize_test6FpnIPhaseGVN_pnGIfNode__3_: ifnode.o; -text: .text%__1cPloadConUL32NodeHtwo_adr6kM_I_; text: .text%__1cNSafePointNodeLbottom_type6kM_pknEType__; text: .text%__1cPTwoOopHashtableMcompute_hash6MnMsymbolHandle_nGHandle__I_; text: .text%__1cRSignatureIterator2t6MpnNsymbolOopDesc__v_; text: .text%__1cKStorePNodeGOpcode6kM_i_; -text: .text%__1cHMonitorKnotify_all6M_i_; text: .text%__1cFframeVinterpreter_frame_bci6kM_i_; text: .text%__1cHRetNodeNis_block_proj6kM_pknENode__; text: .text%__1cMPhaseChaitinMyank_if_dead6MpnENode_pnFBlock_pnJNode_List_6_i_; text: .text%__1cENodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cFBlockLfind_remove6MpknENode__v_; text: .text%__1cOGenerateOopMapRdo_exception_edge6MpnOBytecodeStream__v_; -text: .text%__1cKOopClosureLdo_nmethods6kM_ki_; -text: .text%__1cGOopMapHset_oop6Miii_v_; text: .text%__1cNSafePointNodeSset_next_exception6Mp0_v_; text: .text%__1cPloadConUL32NodeErule6kM_I_; text: .text%__1cFChunkEchop6M_v_; text: .text%__1cMciMethodDataJnext_data6MpnLProfileData__2_; text: .text%__1cJStoreNodeLbottom_type6kM_pknEType__; -text: .text%__1cPciObjectFactorySget_unloaded_klass6MpnHciKlass_pnIciSymbol_i_2_; text: .text%__1cLBlock_StackXmost_frequent_successor6MpnFBlock__I_; text: .text%__1cFBlockScall_catch_cleanup6MrnLBlock_Array__v_; -text: .text%__1cFBlockOschedule_local6MrnHMatcher_rnLBlock_Array_pirnJVectorSet_rnNGrowableArray4CI___i_; text: .text%__1cXPhaseAggressiveCoalesceIcoalesce6MpnFBlock__v_; text: .text%__1cOGenerateOopMapFppop16MnNCellTypeState__v_; text: .text%__1cKstorePNodePoper_input_base6kM_I_; -text: .text%__1cMPhaseIterGVNFwiden6kMpknEType_3_3_; -text: .text%__1cKRegionNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cNmethodOopDescRis_not_compilable6kMi_i_; -text: .text%__1cLis_cond_add6FpnIPhaseGVN_pnHPhiNode__pnENode__; text: .text%__1cPsplit_flow_path6FpnIPhaseGVN_pnHPhiNode__pnENode__: cfgnode.o; text: .text%__1cKRegionNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cGTarjanELINK6Mp01_v_; -text: .text%__1cKTypeRawPtrKadd_offset6kMi_pknHTypePtr__; -text: .text%__1cWMutableSpaceUsedHelperLtake_sample6M_x_; -text: .text%__1cIBoolNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cIsplit_if6FpnGIfNode_pnMPhaseIterGVN__pnENode__: ifnode.o; -text: .text%__1cTremove_useless_bool6FpnGIfNode_pnIPhaseGVN__pnENode__: ifnode.o; text: .text%__1cMPhaseChaitinNFind_compress6MpknENode__I_; text: .text%__1cRInterpreterOopMapKinitialize6M_v_; text: .text%__1cJTypeTupleEmake6FIppknEType__pk0_; -text: .text%__1cYCallStaticJavaDirectNodeHtwo_adr6kM_I_; text: .text%__1cKDictionaryJget_entry6MiInMsymbolHandle_nGHandle__pnPDictionaryEntry__; text: .text%__1cLLShiftINodeGOpcode6kM_i_; text: .text%__1cQResultTypeFinderDset6MinJBasicType__v_; -text: .text%__1cHnmethodMdo_unloading6MpnRBoolObjectClosure_pnKOopClosure_i_v_; text: .text%__1cNmethodOopDescLresult_type6kM_nJBasicType__; text: .text%__1cIMachOperOindex_position6kM_i_; -text: .text%__1cKReflectionTverify_field_access6FpnMklassOopDesc_22nLAccessFlags_ii_i_; text: .text%__1cOemit_d32_reloc6FrnKCodeBuffer_irknQRelocationHolder_i_v_; text: .text%__1cLjmpConUNodePoper_input_base6kM_I_; text: .text%__1cHAddNodeEhash6kM_I_; -text: .text%__1cNtestP_regNodePoper_input_base6kM_I_; -text: .text%__1cHSubNodeGis_Sub6M_p0_; text: .text%__1cPcheckCastPPNodePoper_input_base6kM_I_; text: .text%__1cIRootNodeGOpcode6kM_i_; text: .text%__1cFframebDinterpreter_frame_monitor_end6kM_pnPBasicObjectLock__; @@ -900,20 +570,14 @@ text: .text%__1cRInterpreterOopMap2T6M_v_; text: .text%__1cRInterpreterOopMapNresource_copy6MpnQOopMapCacheEntry__v_; text: .text%__1cLOopMapCacheGlookup6MnMmethodHandle_ipnRInterpreterOopMap__v_; text: .text%__1cRInterpreterOopMap2t6M_v_; -text: .text%__1cFframeToops_interpreted_do6MpnKOopClosure_pknLRegisterMap_i_v_; text: .text%__1cSInterpreterRuntimeLcache_entry6FpnKJavaThread__pnWConstantPoolCacheEntry__; text: .text%__1cOindOffset8OperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cOJNIHandleBlockHoops_do6MpnKOopClosure__v_; text: .text%__1cKstorePNodeMideal_Opcode6kM_i_; text: .text%__1cFChunkJnext_chop6M_v_; text: .text%__1cENode2t6Mp0111_v_; -text: .text%__1cITypeLongEmake6Fx_pk0_; -text: .text%__1cLjmpConUNodeGpinned6kM_i_; text: .text%__1cPciObjectFactoryNfind_non_perm6MpnHoopDesc__rpn0ANNonPermObject__; text: .text%__1cHCmpNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKTypeRawPtrJsingleton6kM_i_; -text: .text%__1cNGCTaskManagerNresource_flag6MI_i_; -text: .text%__1cNGCTaskManagerYshould_release_resources6MI_i_; text: .text%__1cIAddINodeLbottom_type6kM_pknEType__; text: .text%__1cNloadRangeNodeErule6kM_I_; text: .text%__1cNrFlagsRegOperKin_RegMask6kMi_pknHRegMask__; @@ -923,9 +587,7 @@ text: .text%__1cYciExceptionHandlerStreamEnext6M_v_; text: .text%__1cOBasicHashtableJnew_entry6MI_pnTBasicHashtableEntry__; text: .text%__1cJHashtableJnew_entry6MIpnHoopDesc__pnOHashtableEntry__; text: .text%__1cSCountedLoopEndNodeGOpcode6kM_i_; -text: .text%__1cTOopMapForCacheEntryRpossible_gc_point6MpnOBytecodeStream__i_; text: .text%__1cKstoreINodePoper_input_base6kM_I_; -text: .text%__1cNtestP_regNodeHtwo_adr6kM_I_; text: .text%__1cCosVcurrent_stack_pointer6F_pC_; text: .text%__1cMMergeMemNodePiteration_setup6Mpk0_v_; text: .text%__1cRMachSafePointNodeKin_RegMask6kMI_rknHRegMask__; @@ -933,13 +595,8 @@ text: .text%__1cJStoreNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cMMergeMemNodeJmemory_at6kMI_pnENode__; text: .text%__1cJloadSNodeErule6kM_I_; text: .text%__1cLLShiftLNodeLbottom_type6kM_pknEType__; -text: .text%__1cMBasicAdapterHoops_do6MpnKOopClosure__v_; -text: .text%__1cKjmpConNodeJnum_opnds6kM_I_; -text: .text%__1cLOptoRuntimeOnew_objArray_C6FpnMklassOopDesc_ipnKJavaThread__v_; text: .text%__1cTconstantPoolOopDescSklass_at_if_loaded6FnSconstantPoolHandle_i_pnMklassOopDesc__; -text: .text%__1cFciEnvXget_klass_by_index_impl6MpnPciInstanceKlass_iri_pnHciKlass__; text: .text%__1cKjmpDirNodeHsize_of6kM_I_; -text: .text%__1cJloadPNodeJnum_opnds6kM_I_; text: .text%__1cJCProjNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cJMultiNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; text: .text%__1cHOopFlowNcompute_reach6MpnNPhaseRegAlloc_ipnEDict__v_; @@ -952,127 +609,88 @@ text: .text%__1cLGCTaskQdDueueHenqueue6MpnGGCTask__v_; text: .text%__1cNGCTaskManagerWincrement_busy_workers6M_I_; text: .text%__1cLGCTaskQdDueueHdequeue6M_pnGGCTask__; text: .text%__1cNGCTaskManagerPnote_completion6MI_v_; -text: .text%__1cHMatcherXadjust_outgoing_stk_arg6Miiri_i_; text: .text%__1cTCreateExceptionNodeMideal_Opcode6kM_i_; text: .text%__1cKIfTrueNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cXvirtual_call_RelocationLunpack_data6M_v_; -text: .text%__1cMBasicAdapterMdo_unloading6MpnRBoolObjectClosure_pnKOopClosure_i_v_; text: .text%__1cXindIndexScaleOffsetOperJnum_edges6kM_I_; text: .text%__1cLRShiftINodeGOpcode6kM_i_; -text: .text%__1cJStoreNodeIis_Store6kM_pk0_; text: .text%Unsafe_CompareAndSwapLong; text: .text%__1cNinstanceKlassRprotection_domain6M_pnHoopDesc__; text: .text%__1cNtestI_regNodeMideal_Opcode6kM_i_; text: .text%__1cTAbstractInterpreterLmethod_kind6FnMmethodHandle__n0AKMethodKind__; text: .text%__1cJStoreNodeEhash6kM_I_; -text: .text%__1cOcompI_rRegNodePoper_input_base6kM_I_; text: .text%__1cKmethodOperGmethod6kM_l_; -text: .text%__1cHTypeAryRary_must_be_exact6kM_i_; text: .text%__1cKstoreINodeMideal_Opcode6kM_i_; text: .text%__1cGGCTask2t6M_v_; -text: .text%__1cOcompU_rRegNodeHtwo_adr6kM_I_; text: .text%__1cNSafePointNodeOnext_exception6kM_p0_; text: .text%__1cOindOffset8OperNbase_position6kM_i_; text: .text%__1cOindOffset8OperNconstant_disp6kM_i_; -text: .text%__1cKjmpDirNodeHis_Goto6kM_I_; text: .text%__1cENodeHset_req6MIp0_v_; text: .text%__1cTconstantPoolOopDescNklass_name_at6Mi_pnNsymbolOopDesc__; -text: .text%__1cSObjectSynchronizerKfast_enter6FnGHandle_pnJBasicLock_pnGThread__v_; text: .text%__1cSObjectSynchronizerJfast_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; text: .text%__1cWShouldNotReachHereNodePoper_input_base6kM_I_; -text: .text%__1cMMergeMemNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cGThreadLis_in_stack6kMpC_i_; text: .text%__1cLIfFalseNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cKJavaThreadNis_lock_owned6kMpC_i_; text: .text%__1cXAdaptiveWeightedAverageYcompute_adaptive_average6Mff_f_; text: .text%__1cOcompU_rRegNodeMideal_Opcode6kM_i_; text: .text%__1cJloadPNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cTconvI2L_reg_regNodeMideal_Opcode6kM_i_; text: .text%__1cSPSPromotionManagerbBgc_thread_promotion_manager6Fi_p0_; -text: .text%__1cNmethodOopDescMintrinsic_id6kM_nMvmIntrinsicsCID__; -text: .text%__1cKstorePNodeJnum_opnds6kM_I_; text: .text%__1cQinstanceRefKlassToop_adjust_pointers6MpnHoopDesc__i_; text: .text%__1cQinstanceRefKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cMMergeMemNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cLciSignatureLreturn_type6kM_pnGciType__; -text: .text%__1cMMergeMemNodeQclone_all_memory6FpnENode__p0_; text: .text%__1cIGraphKitJclone_map6M_pnNSafePointNode__; text: .text%__1cLMachNopNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cJchar2type6Fc_nJBasicType__; text: .text%__1cJFieldTypeKbasic_type6FpnNsymbolOopDesc__nJBasicType__; text: .text%__1cKRelocationLspec_simple6FnJrelocInfoJrelocType__nQRelocationHolder__; -text: .text%__1cICallNodeLis_CallLeaf6kM_pknMCallLeafNode__; -text: .text%__1cLrecord_bias6FpknIPhaseIFG_ii_v_: coalesce.o; text: .text%__1cJrRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cMObjectLocker2t6MnGHandle_pnGThread__v_; text: .text%__1cMObjectLocker2T6M_v_; text: .text%__1cNloadRangeNodeMideal_Opcode6kM_i_; -text: .text%__1cRMachSafePointNodeRis_safepoint_node6kM_i_; -text: .text%__1cHTypeIntFempty6kM_i_; text: .text%__1cRInvocationCounterJset_state6Mn0AFState__v_; text: .text%__1cRInvocationCounterFreset6M_v_; -text: .text%__1cKTypeOopPtrWmake_from_klass_common6FpnHciKlass_ii_pk0_; text: .text%__1cRInvocationCounterEinit6M_v_; text: .text%__1cNSafePointNodeEjvms6kM_pnIJVMState__; text: .text%__1cNSignatureInfoJdo_object6Mii_v_; -text: .text%__1cLPhaseValuesFwiden6kMpknEType_3_3_; text: .text%__1cTconstantPoolOopDescRname_ref_index_at6Mi_i_; text: .text%__1cIHaltNodeLbottom_type6kM_pknEType__; -text: .text%__1cRRawBytecodeStreamMset_interval6Mii_v_; -text: .text%__1cNtestI_regNodeHtwo_adr6kM_I_; text: .text%__1cSsafePoint_pollNodeMideal_Opcode6kM_i_; -text: .text%__1cLOopRecorderOallocate_index6MpnI_jobject__i_; -text: .text%__1cYDebugInformationRecorderNappend_handle6MpnI_jobject__i_; text: .text%__1cYCallStaticJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cYCallStaticJavaDirectNodeSalignment_required6kM_i_; text: .text%__1cMloadConPNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cGPcDescHreal_pc6kMpknHnmethod__pC_; text: .text%__1cKRegionNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cOPhaseIdealLoopIsplit_up6MpnENode_22_i_; -text: .text%__1cWConstantPoolCacheEntryRset_initial_state6Mi_v_; text: .text%__1cKNativeCallGverify6M_v_; text: .text%__1cNCompileBrokerLmaybe_block6F_v_; text: .text%__1cFPhase2t6Mn0ALPhaseNumber__v_; text: .text%__1cJloadINodeMideal_Opcode6kM_i_; text: .text%__1cNLoadKlassNodeGOpcode6kM_i_; text: .text%__1cIBoolNodeKmatch_edge6kMI_I_; -text: .text%__1cITypeLongEmake6Fxx_pk0_; -text: .text%__1cKRegionNodeOis_block_start6kM_i_; text: .text%__1cCosGmalloc6FL_pv_; text: .text%__1cXAdaptiveWeightedAverageGsample6Mf_v_; text: .text%__1cFStateM_sub_Op_RegP6MpknENode__v_; text: .text%__1cPcheckCastPPNodeHtwo_adr6kM_I_; -text: .text%__1cRMachNullCheckNodeQis_MachNullCheck6M_p0_; text: .text%__1cOGenerateOopMapGppush16MnNCellTypeState__v_; text: .text%__1cGBitMapOset_difference6M0_v_; text: .text%__1cMvalue_of_loc6FppnHoopDesc__l_; text: .text%__1cRmethodDataOopDescTbytecode_cell_count6FnJBytecodesECode__i_; text: .text%__1cRmethodDataOopDescRcompute_data_size6FpnOBytecodeStream__i_; text: .text%__1cRmethodDataOopDescPinitialize_data6MpnOBytecodeStream_i_i_; -text: .text%__1cOcompI_rRegNodeHtwo_adr6kM_I_; text: .text%__1cLSymbolTableJbasic_add6MipCiIpnGThread__pnNsymbolOopDesc__; text: .text%__1cLsymbolKlassPallocate_symbol6MpCipnGThread__pnNsymbolOopDesc__; text: .text%__1cNGrowableArray4CpnKciTypeFlowFBlock__2t6MpnFArena_iirk2_v_; -text: .text%__1cLPhaseValuesHlongcon6Mx_pnIConLNode__; text: .text%__1cKDictionaryEfind6MiInMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; text: .text%__1cOcompI_rRegNodeMideal_Opcode6kM_i_; text: .text%__1cKTypeAryPtrFxmeet6kMpknEType__3_; -text: .text%__1cMPhaseChaitinJsplit_USE6MpnENode_pnFBlock_2IIiinNGrowableArray4CI__i_I_; -text: .text%__1cNCatchProjNodeMis_CatchProj6kM_pk0_; text: .text%__1cOcompU_rRegNodeMcisc_operand6kM_i_; text: .text%__1cNSafePointNodeGOpcode6kM_i_; -text: .text%__1cTconvI2L_reg_regNodePoper_input_base6kM_I_; text: .text%__1cMTypeKlassPtrEhash6kM_i_; -text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; text: .text%__1cMLinkResolverYlookup_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; text: .text%__1cMciMethodDataLbci_to_data6Mi_pnLProfileData__; text: .text%JVM_GetCPMethodSignatureUTF; text: .text%__1cPfieldDescriptorKinitialize6MpnMklassOopDesc_i_v_; -text: .text%__1cIciMethodbCinterpreter_invocation_count6M_i_; text: .text%__1cMMergeMemNodeNset_memory_at6MIpnENode__v_; text: .text%JVM_CurrentThread; -text: .text%__1cPClassFileParserbLparse_constant_pool_nameandtype_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKstoreINodeJnum_opnds6kM_I_; text: .text%__1cHTypeAryEhash6kM_i_; text: .text%JVM_GetClassModifiers; text: .text%JVM_GetClassAccessFlags; @@ -1088,38 +706,24 @@ text: .text%__1cParrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; text: .text%__1cParrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cMrax_RegPOperEtype6kM_pknEType__; text: .text%__1cKTypeRawPtrEhash6kM_i_; -text: .text%__1cLmethodKlassNoop_is_method6kM_i_; text: .text%__1cXindIndexScaleOffsetOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cPSignatureStreamJis_object6kM_i_; text: .text%__1cVCompressedWriteStream2t6Mi_v_; text: .text%__1cENode2t6Mp01_v_; text: .text%__1cHAddNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJStartNodeIis_Start6M_p0_; text: .text%__1cMURShiftINodeGOpcode6kM_i_; -text: .text%__1cNGrowableArray4CpnMMonitorValue__2t6Mii_v_; -text: .text%__1cYDebugInformationRecorderOdescribe_scope6MpnIciMethod_ipnKDebugToken_44_v_; text: .text%__1cYDebugInformationRecorderVcreate_monitor_values6MpnNGrowableArray4CpnMMonitorValue____pnKDebugToken__; text: .text%__1cYDebugInformationRecorderYserialize_monitor_values6MpnNGrowableArray4CpnMMonitorValue____i_; text: .text%__1cMloadConINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIMachNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cKReflectionTverify_class_access6FpnMklassOopDesc_2i_i_; text: .text%__1cOMethodLivenessKBasicBlockWcompute_gen_kill_range6MpnQciBytecodeStream__v_; text: .text%__1cJAssemblerJemit_data6MirknQRelocationHolder_i_v_; text: .text%__1cIMachOperMdisp_as_type6kM_pknHTypePtr__; -text: .text%__1cKCompiledICWis_in_transition_state6kM_i_; -text: .text%__1cRInlineCacheBufferIcontains6FpC_i_; text: .text%__1cOcompU_rRegNodeErule6kM_I_; text: .text%__1cRMemBarReleaseNodeGOpcode6kM_i_; text: .text%__1cKRelocationEtype6M_nJrelocInfoJrelocType__; text: .text%__1cETypeOget_const_type6FpnGciType__pk0_; text: .text%__1cMPhaseChaitinPset_was_spilled6MpnENode__v_; -text: .text%__1cXvirtual_call_RelocationIparse_ic6FrpnICodeBlob_rpC5rppnHoopDesc_pi_nNRelocIterator__; -text: .text%__1cLCounterDataOis_CounterData6M_i_; -text: .text%__1cRCompilationPolicyNcanBeCompiled6FnMmethodHandle__i_; -text: .text%__1cOcompU_rRegNodeJnum_opnds6kM_I_; text: .text%__1cKcmpOpUOperJnum_edges6kM_I_; -text: .text%__1cOrFlagsRegUOperJnum_edges6kM_I_; -text: .text%__1cKCastPPNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cIGraphKitMsaved_ex_oop6FpnNSafePointNode__pnENode__; text: .text%__1cMtlsLoadPNodeErule6kM_I_; text: .text%__1cIGraphKitGmemory6MI_pnENode__; @@ -1129,45 +733,22 @@ text: .text%__1cOGenerateOopMapFppush6MpnNCellTypeState__v_; text: .text%__1cSobjArrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; text: .text%__1cSobjArrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cQciBytecodeStreamPget_field_index6M_i_; -text: .text%__1cGThreadHoops_do6MpnKOopClosure__v_; text: .text%__1cKHandleAreaHoops_do6MpnKOopClosure__v_; -text: .text%__1cNchunk_oops_do6FpnKOopClosure_pnFChunk_pc_L_: handles.o; text: .text%__1cKCompiledIC2t6MpnKRelocation__v_; -text: .text%__1cMUniverseOperFclone6kM_pnIMachOper__; -text: .text%__1cJlabelOperFclone6kM_pnIMachOper__; text: .text%__1cRaddI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cLPhaseValuesHmakecon6MpknEType__pnHConNode__; text: .text%__1cENodeHins_req6MIp0_v_; text: .text%__1cIGraphKitLclean_stack6Mi_v_; text: .text%__1cKRegionNodeHhas_phi6kM_pnHPhiNode__; text: .text%__1cNloadRangeNodePoper_input_base6kM_I_; -text: .text%__1cOMachReturnNodeNis_MachReturn6M_p0_; -text: .text%__1cNaddI_rRegNodePoper_input_base6kM_I_; -text: .text%__1cQPreserveJVMState2t6MpnIGraphKit_i_v_; -text: .text%__1cNtestP_regNodeMcisc_operand6kM_i_; -text: .text%__1cKjmpConNodeHtwo_adr6kM_I_; -text: .text%__1cPClassFileParserbJparse_constant_pool_methodref_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cFKlassNoop_is_symbol6kM_i_; -text: .text%__1cWConstantPoolCacheEntryLis_resolved6kMnJBytecodesECode__i_; text: .text%__1cWConstantPoolCacheEntryPbytecode_number6FnJBytecodesECode__i_; -text: .text%__1cMPhaseChaitinVmay_be_copy_of_callee6kMpnENode__i_; text: .text%__1cNtestP_regNodeErule6kM_I_; -text: .text%__1cUThreadSafepointStateXexamine_state_of_thread6Mi_v_; -text: .text%__1cUSafepointSynchronizeOsafepoint_safe6FpnKJavaThread_nPJavaThreadState__i_; text: .text%__1cFStateM_sub_Op_ConI6MpknENode__v_; text: .text%__1cUArgumentSizeComputerDset6MinJBasicType__v_; -text: .text%__1cOcompU_rRegNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cHPhiNodeEmake6FpnENode_2pknEType_pknHTypePtr__p0_; -text: .text%__1cKCodeBufferOadd_stub_reloc6MpCrknQRelocationHolder_i_v_; -text: .text%__1cKCodeBufferOalloc_relocate6M_pnORelocateBuffer__; text: .text%__1cNtestI_regNodeErule6kM_I_; text: .text%__1cOGenerateOopMapbAget_basic_block_containing6kMi_pnKBasicBlock__; -text: .text%__1cFParseKensure_phi6Mii_pnHPhiNode__; text: .text%__1cMLinkResolverZcheck_klass_accessability6FnLKlassHandle_1pnGThread__v_; text: .text%__1cOGenerateOopMapSget_basic_block_at6kMi_pnKBasicBlock__; -text: .text%__1cHAddress2t6MpCnJrelocInfoJrelocType__v_; -text: .text%__1cFciEnvSget_klass_by_index6MpnPciInstanceKlass_iri_pnHciKlass__; -text: .text%__1cKJavaThreadHoops_do6MpnKOopClosure__v_; text: .text%__1cFStateM_sub_Op_AddP6MpknENode__v_; text: .text%__1cICallNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; text: .text%__1cOcompI_rRegNodeMcisc_operand6kM_i_; @@ -1178,53 +759,24 @@ text: .text%__1cLMachNopNodeMideal_Opcode6kM_i_; text: .text%__1cKJNIHandlesKmake_local6FpnHoopDesc__pnI_jobject__; text: .text%__1cITypeFuncEhash6kM_i_; text: .text%__1cOcompI_rRegNodeErule6kM_I_; -text: .text%__1cIciMethodPliveness_at_bci6Mi_nGBitMap__; -text: .text%__1cOMethodLivenessPget_liveness_at6Mi_nGBitMap__; -text: .text%__1cOMethodLivenessKBasicBlockPget_liveness_at6MpnIciMethod_i_nGBitMap__; -text: .text%__1cITypeLongFempty6kM_i_; -text: .text%__1cMTypeKlassPtrCeq6kMpknEType__i_; text: .text%__1cJAssemblerJemit_data6MinJrelocInfoJrelocType_i_v_; text: .text%__1cJLoadSNodeGOpcode6kM_i_; text: .text%__1cRMemBarAcquireNodeGOpcode6kM_i_; -text: .text%__1cIGraphKitObasic_plus_adr6MpnENode_2l_2_; text: .text%__1cJVectorSet2L6MI_rnDSet__; text: .text%__1cJVectorSetEgrow6MI_v_; -text: .text%__1cLCastP2LNodeGOpcode6kM_i_; -text: .text%__1cFKlassNlookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cJAssemblerEcall6MpCnJrelocInfoJrelocType__v_; text: .text%__1cPcheckCastPPNodeMideal_Opcode6kM_i_; text: .text%__1cJLoadLNodeGOpcode6kM_i_; text: .text%__1cMLinkResolverNresolve_klass6FrnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; text: .text%__1cTconstantPoolOopDescMklass_ref_at6MipnGThread__pnMklassOopDesc__; -text: .text%__1cRCompilationPolicyOmustBeCompiled6FnMmethodHandle__i_; text: .text%__1cIAndINodeGOpcode6kM_i_; -text: .text%__1cKklassKlassMoop_is_klass6kM_i_; -text: .text%__1cUParallelScavengeHeapNtlab_capacity6kM_L_; text: .text%__1cTCreateExceptionNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIPhaseCCPFwiden6kMpknEType_3_3_; -text: .text%__1cHTypePtrJsingleton6kM_i_; text: .text%__1cNArgumentCountDset6MinJBasicType__v_; -text: .text%__1cWShouldNotReachHereNodeGpinned6kM_i_; -text: .text%__1cNsubI_rRegNodePoper_input_base6kM_I_; -text: .text%__1cNtestI_regNodePoper_input_base6kM_I_; text: .text%__1cLBoxLockNodeGOpcode6kM_i_; -text: .text%__1cWShouldNotReachHereNodeHtwo_adr6kM_I_; -text: .text%__1cQMachCallJavaNodePis_MachCallJava6M_p0_; text: .text%__1cKStoreBNodeGOpcode6kM_i_; -text: .text%__1cJAssemblerMemit_operand6MpnMRegisterImpl_22nHAddressLScaleFactor_ipCrknQRelocationHolder__v_; -text: .text%__1cJAssemblerMemit_operand6MpnMRegisterImpl_nHAddress__v_; text: .text%__1cOGenerateOopMapHget_var6Mi_nNCellTypeState__; -text: .text%__1cITypeFuncCeq6kMpknEType__i_; -text: .text%__1cMloadConLNodePoper_input_base6kM_I_; -text: .text%__1cMPhaseIterGVNHmakecon6MpknEType__pnHConNode__; text: .text%__1cWShouldNotReachHereNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cHoopDescGverify6M_v_; -text: .text%__1cQconstMethodKlassSoop_is_constMethod6kM_i_; -text: .text%__1cRconstantPoolKlassToop_is_constantPool6kM_i_; -text: .text%__1cOcompP_rRegNodePoper_input_base6kM_I_; text: .text%__1cHTypePtrHget_con6kM_l_; -text: .text%__1cHMatcherWis_short_branch_offset6Mi_i_; -text: .text%__1cMloadConLNodeHtwo_adr6kM_I_; text: .text%__1cMTypeKlassPtr2t6MnHTypePtrDPTR_pnHciKlass_i_v_; text: .text%__1cYCallStaticJavaDirectNodeKmethod_set6Ml_v_; text: .text%__1cWMachCallStaticJavaNodePret_addr_offset6M_i_; @@ -1232,31 +784,20 @@ text: .text%__1cYCallStaticJavaDirectNodePcompute_padding6kMi_i_; text: .text%__1cJVectorSet2t6MpnFArena__v_; text: .text%__1cFStateM_sub_Op_RegI6MpknENode__v_; text: .text%__1cICmpPNodeDsub6kMpknEType_3_3_; -text: .text%__1cNloadConP0NodePoper_input_base6kM_I_; text: .text%__1cOAbstractICachePinvalidate_word6FpC_v_; text: .text%__1cRNativeInstructionFwrote6Mi_v_; text: .text%__1cMURShiftLNodeGOpcode6kM_i_; text: .text%__1cOrFlagsRegUOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cIciMethodLscale_count6Mi_i_; -text: .text%__1cLjmpConUNodeJnum_opnds6kM_I_; text: .text%__1cQciBytecodeStreamQget_method_index6M_i_; text: .text%__1cFciEnvbTget_instance_klass_for_declared_method_holder6FpnHciKlass__pnPciInstanceKlass__; -text: .text%__1cPSignatureStream2t6MnMsymbolHandle_i_v_; text: .text%JVM_GetMethodIxLocalsCount; text: .text%__1cJlabelOperFlabel6kM_pnFLabel__; text: .text%__1cGOopMapJheap_size6kM_i_; text: .text%__1cLOopMapCacheLoop_iterate6MpnKOopClosure__v_; text: .text%__1cMloadConLNodeErule6kM_I_; -text: .text%__1cOMacroAssemblerZneeds_explicit_null_check6Fi_i_; -text: .text%__1cNSafePointNode2t6MIpnIJVMState__v_; text: .text%__1cLas_TosState6FnJBasicType__nITosState__; text: .text%__1cNloadKlassNodeMideal_Opcode6kM_i_; -text: .text%__1cWConstantPoolCacheEntryIas_flags6MnITosState_iiiii_i_; -text: .text%__1cNloadConP0NodeHtwo_adr6kM_I_; text: .text%__1cWThreadLocalAllocBufferVinitialize_statistics6M_v_; -text: .text%__1cWThreadLocalAllocBufferFclear6M_v_; -text: .text%__1cWThreadLocalAllocBufferVaccumulate_statistics6MLi_v_; -text: .text%__1cWThreadLocalAllocBufferImax_size6F_L_; text: .text%__1cWThreadLocalAllocBufferGresize6M_v_; text: .text%__1cJloadINodePoper_input_base6kM_I_; text: .text%__1cIRootNodeLbottom_type6kM_pknEType__; @@ -1264,10 +805,8 @@ text: .text%__1cWConstantPoolCacheEntryGverify6kMpnMoutputStream__v_; text: .text%__1cHCompileYout_preserve_stack_slots6F_I_; text: .text%__1cFParsePload_state_from6Mpn0AFBlock__v_; text: .text%__1cFParseMmerge_common6Mpn0AFBlock_i_v_; -text: .text%__1cNloadRangeNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cIGraphKitQkill_dead_locals6M_v_; text: .text%__1cKMemBarNodeLbottom_type6kM_pknEType__; -text: .text%__1cKimmL32OperJconstantL6kM_x_; text: .text%__1cIciObject2t6MnGHandle__v_; text: .text%__1cITypeFuncEmake6FpknJTypeTuple_3_pk0_; text: .text%__1cLConvI2LNodeFValue6kMpnOPhaseTransform__pknEType__; @@ -1276,30 +815,18 @@ text: .text%__1cRaddP_rReg_immNodePoper_input_base6kM_I_; text: .text%__1cLBoxLockNodeJideal_reg6kM_I_; text: .text%__1cPClassFileParserYverify_legal_method_name6MnMsymbolHandle_pnGThread__v_; text: .text%__1cICHeapObj2n6FL_pv_; -text: .text%__1cFframeUentry_frame_is_first6kM_i_; text: .text%__1cKInlineTreeJcallee_at6kMipnIciMethod__p0_; text: .text%__1cOFastUnlockNodeGOpcode6kM_i_; text: .text%__1cFStateM_sub_Op_ConL6MpknENode__v_; -text: .text%__1cIHaltNodeGpinned6kM_i_; text: .text%__1cMTypeKlassPtrEmake6FnHTypePtrDPTR_pnHciKlass_i_pk0_; text: .text%__1cOoop_RelocationEtype6M_nJrelocInfoJrelocType__; text: .text%__1cOCallRelocationFvalue6M_pC_; -text: .text%__1cKRelocationXpd_set_call_destination6MpCl_v_; -text: .text%__1cOCallRelocationWfix_relocation_at_move6Ml_v_; -text: .text%__1cKRelocationTpd_call_destination6M_pC_; -text: .text%__1cOCallRelocationPset_destination6MpCl_v_; -text: .text%__1cHcommute6FpnENode_ii_i_: addnode.o; -text: .text%__1cENodeHis_Root6M_pnIRootNode__; -text: .text%__1cENodeQlatency_from_use6kMrnLBlock_Array_rnNGrowableArray4CI__pk0p0_i_; -text: .text%__1cHAddNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cNinstanceKlassQfind_local_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__i_; text: .text%__1cMmerge_region6FpnKRegionNode_pnIPhaseGVN__pnENode__: cfgnode.o; text: .text%__1cNloadConP0NodeErule6kM_I_; text: .text%__1cIGraphKitMreset_memory6M_pnENode__; text: .text%__1cPciObjectFactoryRcreate_new_object6MpnHoopDesc__pnIciObject__; text: .text%__1cNloadRangeNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cNloadConI0NodeMideal_Opcode6kM_i_; -text: .text%__1cJloadPNodeHtwo_adr6kM_I_; text: .text%__1cNSignatureInfoGdo_int6M_v_; text: .text%__1cKjmpDirNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cPThreadRootsTaskFdo_it6MpnNGCTaskManager_I_v_; @@ -1311,49 +838,31 @@ text: .text%__1cJrRegLOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cIAddLNodeGOpcode6kM_i_; text: .text%__1cJLoadPNodeJideal_reg6kM_I_; text: .text%__1cNinstanceKlassKfind_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; -text: .text%__1cOkill_dead_code6FpnENode_pnMPhaseIterGVN__i_: node.o; -text: .text%__1cKjmpDirNodeFclone6kM_pnENode__; -text: .text%__1cOcompI_rRegNodeJnum_opnds6kM_I_; text: .text%__1cFParseFBlockRsuccessor_for_bci6Mi_p1_; text: .text%__1cNGrowableArray4CpnOMethodLivenessKBasicBlock__2t6MpnFArena_iirk2_v_; text: .text%__1cQSystemDictionaryEfind6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; text: .text%__1cNtestP_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cNincI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cICallInfoDset6MnLKlassHandle_1nMmethodHandle_2ipnGThread__v_; text: .text%__1cHOrINodeGOpcode6kM_i_; -text: .text%__1cOcompI_rRegNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cMPhaseChaitinJsplit_DEF6MpnENode_pnFBlock_iIp25nNGrowableArray4CI__i_I_; -text: .text%__1cENodeHis_Type6M_pnITypeNode__; -text: .text%__1cNSafePointNodeMis_SafePoint6M_p0_; text: .text%__1cICHeapObj2k6Fpv_v_; text: .text%__1cRaddP_rReg_immNodeMideal_Opcode6kM_i_; text: .text%__1cICmpINodeDsub6kMpknEType_3_3_; -text: .text%__1cENode2n6FLi_pv_; -text: .text%__1cJTraceTime2t6MpkcpnMelapsedTimer_iipnMoutputStream__v_; text: .text%__1cIAddINodeGadd_id6kM_pknEType__; text: .text%__1cKStoreCNodeGOpcode6kM_i_; text: .text%__1cTconvI2L_reg_regNodeMcisc_operand6kM_i_; text: .text%__1cHMemNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; -text: .text%__1cSvframeStreamCommonPfill_from_frame6M_i_; -text: .text%__1cILoadNodeRraise_bottom_type6MpknEType__v_; -text: .text%__1cJStoreNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cNFingerprinterLfingerprint6M_L_; -text: .text%__1cLConvI2LNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cOGenerateOopMapGppload6MpnNCellTypeState_i_v_; -text: .text%__1cIGraphKitRnull_check_common6MpnENode_nJBasicType_i_2_; text: .text%__1cKBlock_ListGremove6MI_v_; text: .text%__1cKMemoryPoolYrecord_peak_memory_usage6M_v_; text: .text%__1cKciTypeFlowGJsrSetJcopy_into6Mp1_v_; text: .text%__1cICmpLNodeGOpcode6kM_i_; -text: .text%__1cLklassVtableTupdate_super_vtable6MpnNinstanceKlass_pnNmethodOopDesc_i_i_; -text: .text%__1cLcastP2LNodePoper_input_base6kM_I_; -text: .text%__1cQStackFrameStream2t6MpnKJavaThread_i_v_; text: .text%__1cTciConstantPoolCacheEfind6Mi_i_; text: .text%__1cOPhaseIdealLoopGspinup6MpnENode_2222pnLsmall_cache__2_; text: .text%__1cMVirtualSpaceOcommitted_size6kM_L_; text: .text%__1cNGrowableArray4CpnIciObject__Praw_at_put_grow6Mirk14_v_; text: .text%__1cIRootNodeNis_block_proj6kM_pknENode__; -text: .text%__1cHOopFlowEmake6FpnFArena_i_p0_; text: .text%__1cJloadLNodeErule6kM_I_; text: .text%__1cNloadConI0NodeLbottom_type6kM_pknEType__; text: .text%__1cJimmI0OperIconstant6kM_l_; @@ -1362,105 +871,57 @@ text: .text%__1cLBoxLockNodeLbottom_type6kM_pknEType__; text: .text%__1cNaddI_rRegNodeMideal_Opcode6kM_i_; text: .text%__1cOPhaseIdealLoopKhandle_use6MpnENode_2pnLsmall_cache_22222_v_; text: .text%__1cOPhaseIdealLoopOfind_use_block6MpnENode_22222_2_; -text: .text%__1cNmethodOopDescbGupdate_compiled_code_entry_point6Mi_v_; text: .text%__1cJStoreNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cNSignatureInfoHdo_void6M_v_; -text: .text%__1cLAdapterInfoKhash_value6kM_l_; text: .text%JVM_GetCPMethodClassNameUTF; text: .text%__1cHOopFlowFclone6Mp0i_v_; text: .text%__1cRSignatureIteratorSiterate_parameters6ML_v_; -text: .text%__1cILoopNodeHis_Loop6M_p0_; text: .text%__1cPindOffset32OperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cPindOffset32OperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cMCallLeafNodeGOpcode6kM_i_; -text: .text%__1cNmethodOopDescPis_final_method6kM_i_; -text: .text%__1cSComputeAdapterInfoHcompute6Mplii_v_; -text: .text%__1cLAdapterInfoHcompute6MnMmethodHandle_i_v_; -text: .text%__1cLAdapterInfo2T6M_v_; -text: .text%__1cSComputeAdapterInfoLreturn_type6MnJBasicType__i_; -text: .text%__1cSComputeAdapterInfoMsize_in_bits6FnMmethodHandle__i_; -text: .text%__1cMAdapterCacheGlookup6MpnLAdapterInfo__pnMBasicAdapter__; -text: .text%__1cJloadINodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cPadd_derived_oop6FppnHoopDesc_2_v_: oopMap.o; text: .text%__1cTDerivedPointerTableDadd6FppnHoopDesc_3_v_; text: .text%__1cFParseFBlockJinit_node6Mp0i_v_; text: .text%__1cFParseFBlockKinit_graph6Mp0_v_; -text: .text%__1cOcompP_rRegNodeHtwo_adr6kM_I_; text: .text%__1cSObjectSynchronizerKslow_enter6FnGHandle_pnJBasicLock_pnGThread__v_; text: .text%__1cKjmpDirNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMLinkResolverbFlinktime_resolve_virtual_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cKJavaThreadOis_Java_thread6kM_i_; -text: .text%__1cKCastPPNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cJTraceTime2T6M_v_; -text: .text%__1cKciTypeFlowNmake_range_at6Mi_pn0AFRange__; text: .text%__1cNmethodOopDescbAcompute_size_of_parameters6MpnGThread__v_; -text: .text%__1cKoopFactoryKnew_method6FinLAccessFlags_iiipnGThread__pnNmethodOopDesc__; -text: .text%__1cNmethodOopDescLobject_size6Fi_i_; text: .text%__1cSconstMethodOopDescLobject_size6Fiiii_i_; -text: .text%__1cLklassVtableWneeds_new_vtable_entry6FpnNmethodOopDesc_pnMklassOopDesc_pnHoopDesc_pnNsymbolOopDesc_nLAccessFlags__i_; text: .text%__1cSconstMethodOopDescZset_inlined_tables_length6Miii_v_; text: .text%__1cLmethodKlassIallocate6MnRconstMethodHandle_nLAccessFlags_pnGThread__pnNmethodOopDesc__; -text: .text%__1cQconstMethodKlassIallocate6MiiiipnGThread__pnSconstMethodOopDesc__; -text: .text%__1cNmethodOopDescJinit_code6M_v_; -text: .text%__1cKoopFactoryPnew_constMethod6FiiiipnGThread__pnSconstMethodOopDesc__; -text: .text%__1cPClassFileParserMparse_method6MnSconstantPoolHandle_ipnLAccessFlags_pnPtypeArrayHandle_55pnGThread__nMmethodHandle__; -text: .text%__1cFBlockUhoist_LCA_above_defs6Mp01IrnLBlock_Array__1_; -text: .text%__1cScompI_rReg_immNodeHtwo_adr6kM_I_; text: .text%__1cPciInstanceKlassLfield_cache6M_pnTciConstantPoolCache__; -text: .text%__1cHciFieldJwill_link6MpnPciInstanceKlass_nJBytecodesECode__i_; text: .text%__1cFciEnvXget_field_by_index_impl6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cQciBytecodeStreamJget_field6Mri_pnHciField__; text: .text%__1cFciEnvSget_field_by_index6MpnPciInstanceKlass_i_pnHciField__; -text: .text%__1cKTypeOopPtrFempty6kM_i_; text: .text%__1cWConstantPoolCacheEntryOset_bytecode_16MnJBytecodesECode__v_; -text: .text%__1cKCastPPNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cMMergeMemNodeNgrow_to_match6Mpk0_v_; -text: .text%__1cFKlassPoop_is_objArray6kM_i_; text: .text%__1cTCreateExceptionNodePoper_input_base6kM_I_; text: .text%__1cPciInstanceKlassYunique_concrete_subklass6M_p0_; text: .text%__1cLStringTableGlookup6MipHiI_pnHoopDesc__; text: .text%__1cLBoxLockNodeHsize_of6kM_I_; -text: .text%__1cIciObjectIencoding6M_pnI_jobject__; -text: .text%__1cPClassFileParserbDverify_legal_method_modifiers6MiinMsymbolHandle_pnGThread__v_; text: .text%__1cIPhaseGVNUtransform_no_reclaim6MpnENode__2_; -text: .text%__1cIRewriterOrewrite_method6FnMmethodHandle_rnIintArray_pnGThread__1_; -text: .text%__1cNmethodOopDescLlink_method6FnMmethodHandle__v_; text: .text%__1cNloadKlassNodePoper_input_base6kM_I_; text: .text%__1cNObjectMonitorEexit6MpnGThread__v_; -text: .text%__1cPClassFileParserZskip_over_field_signature6MpciIpnGThread__1_; text: .text%__1cMMergeMemNode2t6MpnENode__v_; text: .text%__1cMMergeMemNodeRmake_empty_memory6F_pnENode__; -text: .text%__1cNinstanceKlassVshould_be_initialized6kM_i_; -text: .text%__1cNtestP_regNodeJnum_opnds6kM_I_; -text: .text%__1cJStartNodeGis_CFG6kM_i_; -text: .text%__1cRaddI_rReg_immNodePoper_input_base6kM_I_; -text: .text%__1cPVirtualCallDataSis_VirtualCallData6M_i_; text: .text%__1cMindIndexOperJnum_edges6kM_I_; text: .text%__1cRInterpretedRFrameKtop_method6kM_nMmethodHandle__; -text: .text%__1cKGCStatInfoMset_gc_usage6MinLMemoryUsage_i_v_; text: .text%__1cXmembar_acquire_lockNodeLbottom_type6kM_pknEType__; text: .text%__1cQPreserveJVMState2T6M_v_; -text: .text%__1cLRuntimeStubIis_alive6kM_i_; -text: .text%__1cMWarmCallInfoHis_cold6kM_i_; text: .text%__1cNObjectMonitorFenter6MpnGThread__v_; text: .text%__1cKjmpConNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cIemit_d646FrnKCodeBuffer_l_v_; text: .text%__1cFParseFmerge6Mi_v_; text: .text%__1cOPhaseIdealLoopIset_idom6MpnENode_2I_v_; -text: .text%__1cIAddINodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cFParseMdo_one_block6M_v_; text: .text%__1cFParseFBlockMrecord_state6Mp0_v_; -text: .text%__1cNtestP_regNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cNCollectedHeapYpermanent_array_allocate6FnLKlassHandle_iipnGThread__pnHoopDesc__; -text: .text%__1cJloadLNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cIPhaseIFGFUnion6MII_v_; -text: .text%__1cNloadRangeNodeJnum_opnds6kM_I_; text: .text%__1cWConstantPoolCacheEntryOset_bytecode_26MnJBytecodesECode__v_; text: .text%__1cOcompP_rRegNodeMideal_Opcode6kM_i_; text: .text%__1cIBoolNodeJideal_reg6kM_I_; text: .text%__1cHCmpNodeJideal_reg6kM_I_; text: .text%__1cFStateM_sub_Op_Bool6MpknENode__v_; -text: .text%__1cJCatchNodeIis_Catch6kM_pk0_; text: .text%__1cJLoadBNodeGOpcode6kM_i_; text: .text%__1cENodeHlatency6MI_I_; text: .text%__1cIGraphKit2t6MpnIJVMState__v_; @@ -1468,67 +929,42 @@ text: .text%__1cKTypeAryPtrFklass6kM_pnHciKlass__; text: .text%__1cTciConstantPoolCacheDget6Mi_pv_; text: .text%__1cNmethodOopDescIbcp_from6kMi_pC_; text: .text%__1cKTypeOopPtrHget_con6kM_l_; -text: .text%__1cMPhaseChaitinKprompt_use6MpnFBlock_I_i_; text: .text%__1cIJVMStateLdebug_depth6kM_I_; -text: .text%__1cIGraphKitTadd_safepoint_edges6MpnNSafePointNode_i_v_; text: .text%__1cENodeNadd_req_batch6Mp0I_v_; -text: .text%__1cIJVMStateKclone_deep6kM_p0_; text: .text%__1cFStateK_sub_Op_If6MpknENode__v_; text: .text%__1cXindIndexScaleOffsetOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cXindIndexScaleOffsetOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cGBitMapVset_union_with_result6M0_i_; -text: .text%__1cNSafePointNodeEhash6kM_I_; text: .text%__1cMelapsedTimerFstart6M_v_; text: .text%__1cJStartNodeGOpcode6kM_i_; text: .text%__1cMelapsedTimerEstop6M_v_; text: .text%__1cOPhaseIdealLoopQconditional_move6MpnENode__2_; text: .text%__1cJloadLNodeMideal_Opcode6kM_i_; text: .text%__1cOMethodLivenessKBasicBlockJstore_one6Mi_v_; -text: .text%__1cTC2IAdapterGeneratorXlazy_std_verified_entry6FnMmethodHandle__pC_; -text: .text%__1cPindOffset32OperJnum_edges6kM_I_; text: .text%__1cPFieldAccessInfoDset6MnLKlassHandle_nMsymbolHandle_iinJBasicType_nLAccessFlags__v_; -text: .text%__1cMLinkResolverNresolve_field6FrnPFieldAccessInfo_nSconstantPoolHandle_inJBytecodesECode_iipnGThread__v_; text: .text%__1cMLinkResolverZcheck_field_accessability6FnLKlassHandle_11rnPfieldDescriptor_pnGThread__v_; text: .text%__1cNsubI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cTCreateExceptionNodeHtwo_adr6kM_I_; text: .text%__1cPindOffset32OperFscale6kM_i_; text: .text%__1cHAddNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cICmpPNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cbFCompressedLineNumberWriteStream2t6Mi_v_; -text: .text%__1cPClassFileParserWparse_linenumber_table6MIIpipnGThread__pC_; text: .text%__1cSconstMethodOopDescbBcompressed_linenumber_table6kM_pC_; text: .text%__1cHTypePtrLdual_offset6kM_i_; text: .text%__1cNMachIdealNodePoper_input_base6kM_I_; text: .text%__1cSObjectSynchronizerOinflate_helper6FpnHoopDesc__pnNObjectMonitor__; text: .text%__1cKciTypeFlowIblock_at6Mipn0AGJsrSet_n0AMCreateOption__pn0AFBlock__; -text: .text%__1cKciTypeFlowFRangeNget_block_for6Mpn0AGJsrSet_n0AMCreateOption__pn0AFBlock__; -text: .text%__1cSvframeStreamCommonbBfill_from_interpreter_frame6M_v_; -text: .text%__1cHMonitorEwait6Mil_i_; -text: .text%__1cLcastP2LNodeMideal_Opcode6kM_i_; -text: .text%__1cNloadKlassNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cSObjectSynchronizerJslow_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; text: .text%__1cPJavaCallWrapperHoops_do6MpnKOopClosure__v_; text: .text%__1cFframeNoops_entry_do6MpnKOopClosure_pknLRegisterMap__v_; text: .text%__1cXindIndexScaleOffsetOperFscale6kM_i_; -text: .text%__1cQciBytecodeStreamKget_method6Mri_pnIciMethod__; -text: .text%__1cFciEnvTget_method_by_index6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; -text: .text%__1cFciEnvYget_method_by_index_impl6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; text: .text%__1cFciEnvNlookup_method6MpnNinstanceKlass_2pnNsymbolOopDesc_4nJBytecodesECode__pnNmethodOopDesc__; text: .text%__1cYinternal_word_RelocationLunpack_data6M_v_; text: .text%__1cNstoreImmBNodePoper_input_base6kM_I_; text: .text%__1cNLoadRangeNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cITypeFuncEmake6FpnIciMethod__pk0_; -text: .text%__1cMindirectOperJnum_edges6kM_I_; text: .text%__1cKCompiledICOic_destination6kM_pC_; text: .text%__1cTconvI2L_reg_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cICmpUNodeDsub6kMpknEType_3_3_; text: .text%__1cPSignatureStreamJas_symbol6MpnGThread__pnNsymbolOopDesc__; text: .text%__1cRshrL_rReg_immNodeMideal_Opcode6kM_i_; text: .text%__1cIGraphKitRcreate_and_map_if6MpnENode_2ff_pnGIfNode__; -text: .text%__1cPClassFileParserbFparse_constant_pool_class_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cOMethodLivenessKBasicBlockMmerge_normal6MnGBitMap__i_; -text: .text%__1cTleaPIdxScaleOffNodeHtwo_adr6kM_I_; -text: .text%__1cETypeFwiden6kMpk0_2_; text: .text%__1cKciTypeFlowLStateVector2t6Mp0_v_; text: .text%__1cNCatchProjNodeLbottom_type6kM_pknEType__; text: .text%__1cOcompU_rRegNodeLout_RegMask6kM_rknHRegMask__; @@ -1536,40 +972,26 @@ text: .text%__1cNCatchProjNodeHsize_of6kM_I_; text: .text%__1cNCatchProjNodeEhash6kM_I_; text: .text%__1cSvframeStreamCommonEnext6M_v_; text: .text%__1cFKlassIsubklass6kM_p0_; -text: .text%__1cKciTypeFlowFBlockPis_simpler_than6Mp1_i_; text: .text%__1cJimmI8OperIconstant6kM_l_; -text: .text%__1cIAddPNodeQmach_bottom_type6FpknIMachNode__pknEType__; text: .text%__1cILoadNodeHsize_of6kM_I_; -text: .text%__1cHMatcherVReduceInst_Chain_Rule6MpnFState_ipnIMachNode_rpnENode__v_; text: .text%__1cURethrowExceptionNodeNis_block_proj6kM_pknENode__; -text: .text%__1cNincI_rRegNodePoper_input_base6kM_I_; -text: .text%__1cLjmpConUNodeHtwo_adr6kM_I_; -text: .text%__1cHMatcherScalling_convention6FpnLOptoRegPair_Ii_v_; text: .text%__1cKPerfStringKset_string6Mpkc_v_; text: .text%__1cENodeLnonnull_req6kM_p0_; -text: .text%__1cICmpINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cHTypeAryCeq6kMpknEType__i_; text: .text%__1cQSystemDictionaryKfind_class6FiInMsymbolHandle_nGHandle__pnMklassOopDesc__; text: .text%__1cKDictionaryKfind_class6MiInMsymbolHandle_nGHandle__pnMklassOopDesc__; text: .text%__1cQUnique_Node_ListEpush6MpnENode__v_; text: .text%__1cILoopNodeGOpcode6kM_i_; text: .text%__1cIGraphKitTadd_exception_state6MpnNSafePointNode__v_; text: .text%__1cJloadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cICallNodeSis_CallInterpreter6kM_pknTCallInterpreterNode__; text: .text%__1cOPhaseIdealLoopRregister_new_node6MpnENode_2_v_; text: .text%__1cQPSGenerationPoolImax_size6kM_L_; text: .text%__1cQPSGenerationPoolNused_in_bytes6M_L_; text: .text%__1cQPSGenerationPoolQget_memory_usage6M_nLMemoryUsage__; text: .text%__1cOMethodLivenessNwork_list_get6M_pn0AKBasicBlock__; text: .text%__1cNinstanceKlassKmethods_do6MpFpnNmethodOopDesc__v_v_; -text: .text%__1cICallNodeOis_CallRuntime6kM_pknPCallRuntimeNode__; text: .text%__1cHTypeAryFxmeet6kMpknEType__3_; text: .text%__1cNstoreImmBNodeMideal_Opcode6kM_i_; -text: .text%__1cKciTypeFlowLStateVectorEmeet6Mpk1_i_; -text: .text%__1cIMachNodeTmay_be_short_branch6kM_i_; -text: .text%__1cJloadINodeJnum_opnds6kM_I_; text: .text%__1cNaddI_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cRMachSafePointNode2t6M_v_; text: .text%__1cHMatcherKmatch_sfpt6MpnNSafePointNode__pnIMachNode__; text: .text%__1cOcompP_rRegNodeMcisc_operand6kM_i_; text: .text%__1cMPhaseChaitinKFind_const6kMpknENode__I_; @@ -1591,62 +1013,41 @@ text: .text%__1cKciTypeFlowLStateVectorOpush_translate6MpnGciType__v_; text: .text%__1cOGenerateOopMapJdo_method6Miiii_v_; text: .text%__1cMloadConPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIimmPOperIconstant6kM_l_; -text: .text%__1cIimmPOperPconstant_is_oop6kM_i_; -text: .text%__1cOleaPIdxOffNodeHtwo_adr6kM_I_; text: .text%__1cHGCCauseJto_string6Fn0AFCause__pkc_; text: .text%__1cTleaPIdxScaleOffNodeErule6kM_I_; text: .text%JVM_IsNaN; -text: .text%__1cXinsert_anti_dependences6FrpnFBlock_pnENode_rnLBlock_Array__i_: gcm.o; -text: .text%__1cLOptoRuntimebCcomplete_monitor_unlocking_C6FpnHoopDesc_pnJBasicLock__v_; text: .text%__1cJloadINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLOptoRuntimebAcomplete_monitor_locking_C6FpnHoopDesc_pnJBasicLock_pnKJavaThread__v_; -text: .text%__1cHCompileKTracePhase2t6MpkcpnMelapsedTimer_i_v_; text: .text%__1cHCompileKTracePhase2T6M_v_; text: .text%__1cOGenerateOopMapTmerge_state_into_bb6MpnKBasicBlock__v_; text: .text%__1cHMatcherPc_frame_pointer6kM_i_; text: .text%__1cFBlockKsched_call6MrnHMatcher_rnLBlock_Array_IrnJNode_List_pipnMMachCallNode_rnJVectorSet__I_; -text: .text%__1cMMachCallNode2t6M_v_; text: .text%__1cICallNodeJideal_reg6kM_I_; text: .text%__1cOleaPIdxOffNodeErule6kM_I_; text: .text%__1cOGenerateOopMapEppop6MpnNCellTypeState__v_; text: .text%__1cSCallLeafDirectNodeMideal_Opcode6kM_i_; text: .text%__1cOcompP_rRegNodeErule6kM_I_; -text: .text%__1cMany_RegPOperJnum_edges6kM_I_; -text: .text%__1cIGraphKitbLset_predefined_input_for_runtime_call6MpnNSafePointNode__v_; text: .text%__1cMany_RegPOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cScompI_rReg_immNodeErule6kM_I_; text: .text%__1cLBoxLockNodeKin_RegMask6kMI_rknHRegMask__; text: .text%__1cIGraphKitOset_all_memory6MpnENode__v_; text: .text%__1cLRegisterMap2t6Mpk0_v_; text: .text%__1cGvframe2t6MpknFframe_pknLRegisterMap_pnKJavaThread__v_; -text: .text%__1cNmethodOopDescWwas_executed_more_than6kMi_i_; text: .text%__1cKstoreCNodePoper_input_base6kM_I_; text: .text%__1cVjava_lang_ClassLoaderbBnon_reflection_class_loader6FpnHoopDesc__2_; text: .text%__1cHi2sNodeErule6kM_I_; text: .text%__1cIMulLNodeGOpcode6kM_i_; -text: .text%__1cOPhaseIdealLoopHdom_lca6kMpnENode_2_2_; -text: .text%__1cMPrefetchNodeGOpcode6kM_i_; -text: .text%__1cSReferenceProcessorSdiscover_reference6MpnHoopDesc_nNReferenceType__i_; -text: .text%__1cSReferenceProcessorTget_discovered_list6MnNReferenceType__ppnHoopDesc__; -text: .text%__1cXjava_lang_ref_ReferenceIset_next6FpnHoopDesc_2_v_; text: .text%__1cKciTypeFlowGJsrSet2t6MpnFArena_i_v_; -text: .text%__1cNtestI_regNodeJnum_opnds6kM_I_; text: .text%__1cIAddINodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cIMachOperNconstant_disp6kM_i_; text: .text%__1cIMachOperFscale6kM_i_; -text: .text%__1cFframeNis_java_frame6kM_i_; text: .text%__1cOMethodLivenessKBasicBlockJpropagate6Mp0_v_; text: .text%__1cQSystemDictionaryStry_get_next_class6F_pnMklassOopDesc__; text: .text%__1cKDictionaryStry_get_next_class6M_pnMklassOopDesc__; text: .text%__1cNloadKlassNodeErule6kM_I_; -text: .text%__1cIciMethodRhas_compiled_code6M_i_; -text: .text%__1cOoop_RelocationJpack_data6M_i_; text: .text%__1cKCompiledICKcached_oop6kM_pnHoopDesc__; text: .text%__1cGOopMap2t6Mii_v_; text: .text%__1cJOopMapSetKadd_gc_map6MipnGOopMap__v_; text: .text%__1cNincI_rRegNodeErule6kM_I_; -text: .text%__1cRMachSafePointNodePis_MachCallLeaf6M_pnQMachCallLeafNode__; -text: .text%__1cRMachSafePointNodeLset_oop_map6MpnGOopMap__v_; text: .text%__1cYDebugInformationRecorderNadd_safepoint6MipnGOopMap__v_; text: .text%__1cHCompileTProcess_OopMap_Node6MpnIMachNode_i_v_; text: .text%__1cYDebugInformationRecorderKadd_oopmap6MipnGOopMap__v_; @@ -1660,44 +1061,24 @@ text: .text%__1cHRetNodeMideal_Opcode6kM_i_; text: .text%__1cGvframeKnew_vframe6FpknFframe_pknLRegisterMap_pnKJavaThread__p0_; text: .text%__1cNsubI_rRegNodeErule6kM_I_; text: .text%__1cRaddP_rReg_immNodeErule6kM_I_; -text: .text%__1cPClassFileParserbGparse_constant_pool_string_entry6MnSconstantPoolHandle_ipnGThread__v_; text: .text%__1cJloadLNodePoper_input_base6kM_I_; -text: .text%__1cRshrL_rReg_immNodePoper_input_base6kM_I_; text: .text%__1cITypeLongFxdual6kM_pknEType__; -text: .text%__1cRMachSafePointNodeSis_MachCallRuntime6M_pnTMachCallRuntimeNode__; -text: .text%__1cNaddI_rRegNodeJnum_opnds6kM_I_; text: .text%__1cENodeJset_req_X6MIp0pnMPhaseIterGVN__v_; -text: .text%__1cOcompP_rRegNodeJnum_opnds6kM_I_; text: .text%__1cSInterpreterRuntimePresolve_get_put6FpnKJavaThread_nJBytecodesECode__v_; -text: .text%__1cMLinkResolverNresolve_field6FrnPFieldAccessInfo_nSconstantPoolHandle_inJBytecodesECode_ipnGThread__v_; -text: .text%__1cWConstantPoolCacheEntryJset_field6MnJBytecodesECode_2nLKlassHandle_iinITosState_ii_v_; text: .text%__1cIAndLNodeGOpcode6kM_i_; text: .text%__1cMindIndexOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cOtypeArrayKlassSallocate_permanent6MipnGThread__pnQtypeArrayOopDesc__; text: .text%__1cOGenerateOopMapCpp6MpnNCellTypeState_2_v_; -text: .text%__1cMCallJavaNodeLis_CallJava6kM_pk0_; -text: .text%__1cICallNodeScalling_convention6kMpnLOptoRegPair_I_v_; text: .text%__1cHCompileSflatten_alias_type6kMpknHTypePtr__3_; -text: .text%__1cRcmpFastUnlockNodePoper_input_base6kM_I_; text: .text%__1cYCallStaticJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOcompP_rRegNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cFStateW_sub_Op_CallStaticJava6MpknENode__v_; -text: .text%__1cWMachCallStaticJavaNodeVis_MachCallStaticJava6M_p0_; -text: .text%__1cRaddP_rReg_immNodeJnum_opnds6kM_I_; -text: .text%__1cICallInfoDset6MnLKlassHandle_nMmethodHandle_pnGThread__v_; -text: .text%__1cSComputeAdapterInfoJdo_object6Mii_v_; -text: .text%__1cRMachSafePointNodeWis_MachCallInterpreter6M_pnXMachCallInterpreterNode__; text: .text%__1cIGraphKitbDtransfer_exceptions_into_jvms6M_pnIJVMState__; text: .text%__1cLConvL2INodeGOpcode6kM_i_; text: .text%__1cOcompI_rRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cQSystemDictionarybEresolve_instance_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; text: .text%__1cNaddI_rRegNodeErule6kM_I_; -text: .text%__1cHConNodeEmake6FpknEType__p0_; -text: .text%__1cScompI_rReg_immNodePoper_input_base6kM_I_; -text: .text%__1cJLoadCNodeGOpcode6kM_i_; text: .text%__1cYCallStaticJavaDirectNodeFreloc6kM_i_; text: .text%__1cRcmpFastUnlockNodeMideal_Opcode6kM_i_; -text: .text%__1cJTraceTime2t6MpkciipnMoutputStream__v_; text: .text%__1cWstatic_stub_RelocationEtype6M_nJrelocInfoJrelocType__; text: .text%__1cIGraphKitQset_saved_ex_oop6FpnNSafePointNode_pnENode__v_; text: .text%__1cIGraphKitUmake_exception_state6MpnENode__pnNSafePointNode__; @@ -1705,33 +1086,16 @@ text: .text%__1cJloadBNodeMideal_Opcode6kM_i_; text: .text%__1cMLinkResolverOresolve_invoke6FrnICallInfo_nGHandle_nSconstantPoolHandle_inJBytecodesECode_pnGThread__v_; text: .text%__1cMLinkResolverMresolve_pool6FrnLKlassHandle_rnMsymbolHandle_42nSconstantPoolHandle_ipnGThread__v_; text: .text%__1cGOopMapHcopy_to6MpC_v_; -text: .text%__1cNstoreImmBNodeJnum_opnds6kM_I_; text: .text%__1cVLoaderConstraintTableWfind_loader_constraint6MnMsymbolHandle_nGHandle__ppnVLoaderConstraintEntry__; -text: .text%__1cJTimeStampJupdate_to6Mx_v_; text: .text%__1cJTimeStampGupdate6M_v_; text: .text%__1cFframeZinterpreter_frame_set_bcx6Ml_v_; -text: .text%__1cCosFsleep6FpnGThread_xi_i_; -text: .text%__1cNgetTimeMillis6F_x_; -text: .text%__1cRaddP_rReg_immNodeLbottom_type6kM_pknEType__; -text: .text%__1cIos_sleep6Fxi_i_: os_solaris.o; -text: .text%__1cLPhaseValuesHzerocon6MnJBasicType__pnHConNode__; text: .text%__1cMCreateExNodeKmatch_edge6kMI_I_; -text: .text%__1cTconvI2L_reg_regNodeJnum_opnds6kM_I_; -text: .text%__1cIGraphKitNuncommon_trap6MipnHciKlass_pkci_v_; -text: .text%__1cILoadNodeEmake6FpnENode_22pknHTypePtr_pknEType_nJBasicType__p0_; -text: .text%__1cIGraphKitJmake_load6MpnENode_2pknEType_nJBasicType_i_2_; -text: .text%__1cTconvI2L_reg_regNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cTno_rax_rbx_RegPOperJnum_edges6kM_I_; text: .text%__1cLPCTableNodeLbottom_type6kM_pknEType__; text: .text%__1cLOptoRuntimeSuncommon_trap_Type6F_pknITypeFunc__; text: .text%__1cIHaltNode2t6MpnENode_2_v_; text: .text%__1cNSafePointNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNaddI_rRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cGPcDesc2t6Mii_v_; -text: .text%__1cHnmethodKcopy_pc_at6MipnGPcDesc__v_; text: .text%__1cKciTypeFlowLStateVectorJcopy_into6kMp1_v_; text: .text%__1cXmembar_release_lockNodeMideal_Opcode6kM_i_; -text: .text%__1cOcompL_rRegNodePoper_input_base6kM_I_; text: .text%__1cMoutputStreamPupdate_position6MpkcL_v_; text: .text%__1cMstringStreamFwrite6MpkcL_v_; text: .text%__1cKciTypeFlowQadd_to_work_list6Mpn0AFBlock__v_; @@ -1741,87 +1105,57 @@ text: .text%__1cKciTypeFlowOwork_list_next6M_pn0AFBlock__; text: .text%__1cIPipelineXfunctional_unit_latency6kMIpk0_I_; text: .text%__1cMPhaseIterGVNJtransform6MpnENode__2_; text: .text%__1cQSystemDictionarybCfind_instance_or_array_klass6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cSCompareAndSwapNodeGis_CFG6kM_i_; -text: .text%__1cNGrowableArray4CpnOMethodLivenessKBasicBlock__Icontains6kMrk2_i_; -text: .text%__1cKciTypeFlowFBlock2t6Mp0pn0AFRange_pn0AGJsrSet__v_; text: .text%__1cNGrowableArray4CpnKciTypeFlowJJsrRecord__2t6MpnFArena_iirk2_v_; -text: .text%__1cKstoreCNodeJnum_opnds6kM_I_; text: .text%__1cNmodI_rRegNodeErule6kM_I_; -text: .text%__1cKInlineTreeWfind_subtree_from_root6Fp0pnIJVMState_pnIciMethod_i_1_; text: .text%__1cNGrowableArray4CpnPciInstanceKlass__2t6MpnFArena_iirk1_v_; text: .text%__1cKciTypeFlowFBlockScompute_exceptions6M_v_; text: .text%__1cYciExceptionHandlerStreamFcount6M_i_; text: .text%__1cINodeHashJhash_find6MpknENode__p1_; -text: .text%__1cFParsePdo_field_access6Mii_v_; text: .text%__1cPThreadLocalNodeLbottom_type6kM_pknEType__; -text: .text%__1cOMethodLivenessNmake_block_at6Mipn0AKBasicBlock__2_; -text: .text%__1cKstorePNodeHtwo_adr6kM_I_; text: .text%__1cKciTypeFlowPflow_successors6MpnNGrowableArray4Cpn0AFBlock___pn0ALStateVector__v_; -text: .text%__1cGciTypeMis_classless6kM_i_; text: .text%__1cRsalI_rReg_immNodeMideal_Opcode6kM_i_; text: .text%__1cJloadFNodeErule6kM_I_; -text: .text%__1cKBranchDataNis_BranchData6M_i_; -text: .text%__1cIJumpDataLis_JumpData6M_i_; text: .text%__1cSMemBarCPUOrderNodeGOpcode6kM_i_; text: .text%__1cLklassVtableNput_method_at6MpnNmethodOopDesc_i_v_; text: .text%__1cHi2sNodeMideal_Opcode6kM_i_; text: .text%__1cKstoreCNodeMideal_Opcode6kM_i_; text: .text%__1cRshrI_rReg_immNodeMideal_Opcode6kM_i_; text: .text%__1cNloadConI0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNloadKlassNodeJnum_opnds6kM_I_; text: .text%__1cHCompileKalias_type6MpnHciField__pn0AJAliasType__; text: .text%__1cLStringTableGintern6FnGHandle_pHipnGThread__pnHoopDesc__; text: .text%__1cLStringTableLhash_string6FpHi_i_; -text: .text%__1cMCreateExNodeGpinned6kM_i_; -text: .text%__1cFciEnvWget_klass_by_name_impl6MpnHciKlass_pnIciSymbol_i_2_; text: .text%__1cNloadKlassNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cRScavengeRootsTaskEname6M_pc_; text: .text%__1cRScavengeRootsTaskFdo_it6MpnNGCTaskManager_I_v_; -text: .text%__1cNtestP_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cKstoreINodeHtwo_adr6kM_I_; text: .text%__1cSInterpreterRuntimeOresolve_invoke6FpnKJavaThread_nJBytecodesECode__v_; text: .text%__1cPCountedLoopNodeGOpcode6kM_i_; -text: .text%__1cHTypeIntEmake6Fii_pk0_; -text: .text%__1cRcmpFastUnlockNodeHtwo_adr6kM_I_; text: .text%__1cJloadSNodeMideal_Opcode6kM_i_; -text: .text%__1cPDictionaryEntrybAcontains_protection_domain6kMpnHoopDesc__i_; text: .text%__1cIregFOperEtype6kM_pknEType__; text: .text%__1cLLShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%JVM_GetCPMethodNameUTF; -text: .text%__1cMLinkResolverbNlinktime_resolve_virtual_method_or_null6FnLKlassHandle_nMsymbolHandle_21i_nMmethodHandle__; -text: .text%__1cNsubI_rRegNodeJnum_opnds6kM_I_; text: .text%__1cLTypeInstPtrFxdual6kM_pknEType__; -text: .text%__1cNsubI_rRegNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cIGraphKitOreplace_in_map6MpnENode_2_v_; text: .text%__1cMPhaseChaitinLclone_projs6MpnFBlock_IpnENode_4rI_i_; text: .text%__1cTconstantPoolOopDescbCverify_constant_pool_resolve6FnSconstantPoolHandle_nLKlassHandle_pnGThread__v_; -text: .text%__1cLcastP2LNodeJnum_opnds6kM_I_; text: .text%__1cOMethodLivenessNwork_list_add6Mpn0AKBasicBlock__v_; text: .text%__1cFParseFBlockNlocal_type_at6kMi_pknEType__; text: .text%__1cWConstantPoolCacheEntryKset_method6MnJBytecodesECode_nMmethodHandle_i_v_; text: .text%__1cHTypeIntFxdual6kM_pknEType__; text: .text%__1cEUTF8Hstrrchr6FpWiW_1_; text: .text%__1cQConstantIntValueIwrite_on6MpnUDebugInfoWriteStream__v_; -text: .text%__1cQSystemDictionaryPresolve_or_fail6FnMsymbolHandle_nGHandle_2ipnGThread__pnMklassOopDesc__; text: .text%__1cNLoadKlassNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cHCompileZintrinsic_insertion_index6MpnIciMethod_i_i_; -text: .text%__1cIciObjectSis_obj_array_klass6M_i_; text: .text%__1cJVectorSetFClear6M_v_; text: .text%__1cMMergeMemNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKMemoryPoolHoops_do6MpnKOopClosure__v_; text: .text%__1cICodeHeapSallocated_capacity6kM_L_; -text: .text%__1cICodeBlobRis_at_poll_return6MpC_i_; text: .text%__1cIMachOperEtype6kM_pknEType__; text: .text%__1cLjmpConUNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cQSystemDictionarybOfind_constrained_instance_or_array_klass6FnMsymbolHandle_nGHandle_pnGThread__pnMklassOopDesc__; text: .text%__1cNCallGenerator2t6MpnIciMethod__v_; -text: .text%__1cSHighResTimeSamplerLtake_sample6M_x_; -text: .text%__1cRis_error_reported6F_i_; text: .text%__1cLStatSamplerLsample_data6FpnMPerfDataList__v_; text: .text%__1cPStatSamplerTaskEtask6M_v_; text: .text%__1cMPeriodicTaskMtime_to_wait6F_L_; text: .text%__1cMPeriodicTaskOreal_time_tick6FL_v_; -text: .text%__1cNWatcherThreadRis_Watcher_thread6kM_i_; text: .text%__1cLStatSamplerOcollect_sample6F_v_; text: .text%__1cJloadBNodePoper_input_base6kM_I_; text: .text%__1cMVM_OperationPevaluation_mode6kM_n0AEMode__; @@ -1829,98 +1163,62 @@ text: .text%__1cIGraphKit2t6M_v_; text: .text%__1cOemit_d64_reloc6FrnKCodeBuffer_lnJrelocInfoJrelocType_i_v_; text: .text%__1cNinstanceKlassKlink_class6MpnGThread__v_; text: .text%__1cIGraphKitNset_map_clone6MpnNSafePointNode__v_; -text: .text%__1cRRawBytecodeStream2t6MnMmethodHandle__v_; text: .text%__1cENodeHget_ptr6kM_l_; text: .text%__1cFStateM_sub_Op_ConP6MpknENode__v_; text: .text%__1cJloadPNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKI2CAdapterOis_i2c_adapter6kM_i_; text: .text%__1cOcompU_rRegNodeQuse_cisc_RegMask6M_v_; text: .text%__1cNinstanceKlassPinitialize_impl6FnTinstanceKlassHandle_pnGThread__v_; text: .text%__1cQciBytecodeStreamWget_field_holder_index6M_i_; text: .text%__1cQciBytecodeStreamZget_declared_field_holder6M_pnPciInstanceKlass__; text: .text%__1cRinterpretedVFrameGmethod6kM_pnNmethodOopDesc__; -text: .text%__1cMorI_rRegNodePoper_input_base6kM_I_; -text: .text%__1cIciSymbol2t6MnMsymbolHandle__v_; -text: .text%__1cFParseRensure_memory_phi6Mii_pnHPhiNode__; text: .text%__1cNdecI_rRegNodeMideal_Opcode6kM_i_; text: .text%__1cJLoadINodeJideal_reg6kM_I_; -text: .text%__1cKRelocationWfix_relocation_at_move6Ml_v_; text: .text%__1cPindOffset32OperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cHAddNodePadd_of_identity6kMpknEType_3_3_; text: .text%__1cMFastLockNodeGOpcode6kM_i_; -text: .text%__1cScompU_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cHCompilebAallow_range_check_smearing6kM_i_; text: .text%__1cLBuildCutout2T6M_v_; text: .text%__1cLBuildCutout2t6MpnIGraphKit_pnENode_ff_v_; text: .text%__1cTconstantPoolOopDescOstring_at_impl6FnSconstantPoolHandle_ipnGThread__pnHoopDesc__; -text: .text%__1cQjava_lang_StringQbasic_create_oop6FpnQtypeArrayOopDesc_ipnGThread__pnHoopDesc__; text: .text%__1cICodeHeapIcapacity6kM_L_; text: .text%__1cKMemoryPoolImax_size6kM_L_; text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__; text: .text%__1cMCodeHeapPoolNused_in_bytes6M_L_; -text: .text%__1cMPhaseChaitinTsplit_Rematerialize6MpnENode_pnFBlock_IrInNGrowableArray4CI__ipIp2i_2_; text: .text%__1cJcmpOpOperFccode6kM_i_; -text: .text%__1cKjmpDirNodeTmay_be_short_branch6kM_i_; -text: .text%__1cKjmpDirNodeOis_pc_relative6kM_i_; text: .text%__1cPClassFileParserXverify_legal_field_name6MnMsymbolHandle_pnGThread__v_; text: .text%__1cPClassFileParserbCverify_legal_field_signature6MnMsymbolHandle_1pnGThread__v_; text: .text%__1cEUTF8Enext6FpkcpH_pc_; text: .text%__1cOcompL_rRegNodeMideal_Opcode6kM_i_; text: .text%__1cbAPSEvacuateFollowersClosureHdo_void6M_v_; -text: .text%__1cFParseKdo_get_xxx6MpknHTypePtr_pnENode_pnHciField_i_v_; -text: .text%__1cTInlineCallGeneratorJis_inline6kM_i_; text: .text%__1cHMulNodeEhash6kM_I_; text: .text%__1cGRFrame2t6MnFframe_pnKJavaThread_p0_v_; -text: .text%__1cTconvI2L_reg_regNodeHtwo_adr6kM_I_; text: .text%__1cOGenerateOopMapLbb_mark_fct6Fp0ipi_v_; text: .text%__1cScompU_rReg_immNodeMideal_Opcode6kM_i_; text: .text%__1cNFingerprinterJdo_object6Mii_v_; -text: .text%__1cMloadConFNodePoper_input_base6kM_I_; -text: .text%__1cOGenerateOopMapTmerge_state_vectors6MpnNCellTypeState_2_i_; -text: .text%__1cMloadConFNodeHtwo_adr6kM_I_; -text: .text%__1cICallNodeSis_CallDynamicJava6kM_pknTCallDynamicJavaNode__; -text: .text%__1cRcmpFastUnlockNodeJnum_opnds6kM_I_; text: .text%__1cEUTF8Sconvert_to_unicode6FpkcpHi_v_; -text: .text%__1cUParallelScavengeHeapMmem_allocate6MLii_pnIHeapWord__; text: .text%__1cNinstanceKlassbBallocate_permanent_instance6MpnGThread__pnPinstanceOopDesc__; text: .text%__1cKjmpConNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cOMethodLivenessKBasicBlockQcompute_gen_kill6MpnIciMethod__v_; text: .text%__1cOMethodLivenessKBasicBlock2t6Mp0ii_v_; text: .text%__1cMloadConFNodeErule6kM_I_; -text: .text%__1cLcastP2LNodeHtwo_adr6kM_I_; text: .text%__1cIMachOperIconstant6kM_l_; -text: .text%__1cJloadSNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cPcheckCastPPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMTypeKlassPtrKadd_offset6kMi_pknHTypePtr__; text: .text%__1cUEdenMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; text: .text%__1cYSurvivorMutableSpacePoolQget_memory_usage6M_nLMemoryUsage__; text: .text%__1cYSurvivorMutableSpacePoolImax_size6kM_L_; text: .text%__1cUEdenMutableSpacePoolNused_in_bytes6M_L_; text: .text%__1cUEdenMutableSpacePoolImax_size6kM_L_; text: .text%__1cYSurvivorMutableSpacePoolNused_in_bytes6M_L_; -text: .text%__1cKjmpConNodeTmay_be_short_branch6kM_i_; -text: .text%__1cKjmpConNodeOis_pc_relative6kM_i_; text: .text%__1cHConNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKCodeBufferKend_a_stub6M_v_; text: .text%__1cTemit_java_to_interp6FrnKCodeBuffer__v_; -text: .text%__1cKCodeBufferMstart_a_stub6M_v_; -text: .text%__1cFParseUprofile_taken_branch6Mi_v_; text: .text%__1cKciTypeFlowGJsrSetNapply_control6Mp0pnQciBytecodeStream_pn0ALStateVector__v_; -text: .text%__1cKReturnNodeGis_CFG6kM_i_; text: .text%__1cRSignatureIteratorSskip_optional_size6M_v_; text: .text%__1cRaddI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHTypeIntFwiden6kMpknEType__3_; text: .text%__1cTCompareAndSwapLNodeGOpcode6kM_i_; -text: .text%__1cNmethodOopDescbHhas_unloaded_classes_in_signature6FnMmethodHandle_pnGThread__i_; -text: .text%__1cIciObjectRis_instance_klass6M_i_; text: .text%__1cOGenerateOopMapRsigchar_to_effect6McipnNCellTypeState__2_; text: .text%__1cOGenerateOopMapIdo_field6Miiii_v_; text: .text%__1cPloadConUL32NodeMideal_Opcode6kM_i_; text: .text%__1cEUTF8Ounicode_length6Fpkci_i_; text: .text%__1cIciMethodRget_flow_analysis6M_pnKciTypeFlow__; -text: .text%__1cICodeBlobLoop_addr_at6kMi_ppnHoopDesc__; -text: .text%__1cNloadRangeNodeHtwo_adr6kM_I_; -text: .text%__1cJloadLNodeJnum_opnds6kM_I_; text: .text%__1cSmembar_acquireNodeMideal_Opcode6kM_i_; text: .text%__1cSObjectSynchronizerXidentity_hash_value_for6FnGHandle__l_; text: .text%__1cHoopDescSslow_identity_hash6M_l_; @@ -1928,38 +1226,23 @@ text: .text%__1cKMemBarNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cOGenerateOopMapLmerge_state6Fp0ipi_v_; text: .text%__1cIMachNodeOpipeline_class6F_pknIPipeline__; text: .text%__1cIMachNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJloadCNodeErule6kM_I_; -text: .text%__1cKOSRAdapterIis_alive6kM_i_; -text: .text%__1cQjava_lang_StringMbasic_create6FpnQtypeArrayOopDesc_ipnGThread__nGHandle__; text: .text%__1cRMachNullCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cGThreadXclear_pending_exception6M_v_; text: .text%__1cXindIndexScaleOffsetOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cOcompL_rRegNodeHtwo_adr6kM_I_; text: .text%__1cTconstantPoolOopDescbBbasic_type_for_signature_at6Mi_nJBasicType__; text: .text%__1cETypeRget_typeflow_type6FpnGciType__pk0_; text: .text%__1cLStringTableGintern6FpnNsymbolOopDesc_pnGThread__pnHoopDesc__; text: .text%__1cNsymbolOopDescKas_unicode6kMri_pH_; -text: .text%__1cKciTypeFlowLStateVectorJdo_invoke6MpnQciBytecodeStream_i_v_; text: .text%__1cKstorePNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cKReturnNodeKmatch_edge6kMI_I_; -text: .text%__1cKRegionNodeJideal_reg6kM_I_; -text: .text%__1cJloadINodeHtwo_adr6kM_I_; -text: .text%__1cQmark_inner_loops6FpnIPhaseCFG_pnFBlock__v_: block.o; text: .text%__1cIHaltNodeJideal_reg6kM_I_; text: .text%__1cFStateM_sub_Op_Halt6MpknENode__v_; text: .text%__1cWShouldNotReachHereNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKReturnNodeGOpcode6kM_i_; text: .text%__1cJTypeTupleKmake_range6FpnLciSignature__pk0_; text: .text%__1cKStoreLNodeGOpcode6kM_i_; -text: .text%__1cPCountedLoopNodeOis_CountedLoop6M_p0_; text: .text%__1cJTypeTupleLmake_domain6FpnPciInstanceKlass_pnLciSignature__pk0_; -text: .text%__1cPClassFileParserWparse_field_attributes6MnSconstantPoolHandle_iHpHpi2pnPtypeArrayHandle_pnGThread__v_; -text: .text%__1cPClassFileParserbCverify_legal_field_modifiers6MiipnGThread__v_; text: .text%__1cMindirectOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cMindirectOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cMLinkResolverUresolve_virtual_call6FrnICallInfo_nGHandle_nLKlassHandle_4nMsymbolHandle_54iipnGThread__v_; -text: .text%__1cMLinkResolverbEruntime_resolve_virtual_method6FrnICallInfo_nMmethodHandle_nLKlassHandle_nGHandle_4ipnGThread__v_; -text: .text%__1cFKlassXcan_be_statically_bound6FpnNmethodOopDesc__i_; text: .text%__1cLProfileDataOtranslate_from6Mp0_v_; text: .text%__1cKstorePNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cKstoreINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -1967,59 +1250,36 @@ text: .text%__1cSPSKeepAliveClosureGdo_oop6MppnHoopDesc__v_; text: .text%__1cNloadConI0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cTconvI2L_reg_regNodeQuse_cisc_RegMask6M_v_; text: .text%__1cMWarmCallInfoKalways_hot6F_p0_; -text: .text%__1cMWarmCallInfoGis_hot6kM_i_; text: .text%__1cNprefetchwNodeMideal_Opcode6kM_i_; text: .text%__1cIAddINodeJideal_reg6kM_I_; -text: .text%__1cNCatchProjNode2t6MpnENode_Ii_v_; -text: .text%__1cENodeHis_Bool6M_pnIBoolNode__; text: .text%__1cLBoxLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmulL_rRegNodePoper_input_base6kM_I_; -text: .text%__1cKciTypeFlowIcan_trap6MrnQciBytecodeStream__i_; -text: .text%__1cQVMOperationQdDueueLqueue_empty6Mi_i_; text: .text%__1cIProjNodeDcmp6kMrknENode__I_; -text: .text%__1cSComputeAdapterInfoGdo_int6M_v_; text: .text%__1cNCatchProjNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%JVM_GetCPFieldSignatureUTF; -text: .text%__1cIGraphKitTtoo_many_recompiles6MnODeoptimizationLDeoptReason__i_; text: .text%__1cHCompileFstart6kM_pnJStartNode__; text: .text%__1cNmulL_rRegNodeMideal_Opcode6kM_i_; text: .text%__1cLPCTableNodeEhash6kM_I_; text: .text%__1cIGraphKitZadd_exception_states_from6MpnIJVMState__v_; -text: .text%__1cJStartNodeOis_block_start6kM_i_; text: .text%__1cQComputeCallStackHdo_void6M_v_; text: .text%__1cNaddI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKitOtoo_many_traps6MnODeoptimizationLDeoptReason__i_; -text: .text%__1cNciCallProfileRapply_prof_factor6Mf_v_; text: .text%__1cIciMethodTcall_profile_at_bci6Mi_nNciCallProfile__; -text: .text%__1cHCompileOcall_generator6MpnIciMethod_ipnIJVMState_if_pnNCallGenerator__; -text: .text%__1cHCompileOfind_intrinsic6MpnIciMethod_i_pnNCallGenerator__; text: .text%__1cMindIndexOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cMindIndexOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%jni_GetPrimitiveArrayCritical: jni.o; text: .text%jni_ReleasePrimitiveArrayCritical: jni.o; -text: .text%__1cSInterpreterRuntimeDldc6FpnKJavaThread_i_v_; -text: .text%__1cPClassFileParserbIparse_constant_pool_fieldref_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cNdecI_rRegNodePoper_input_base6kM_I_; -text: .text%__1cFKlassOis_subclass_of6kMpnMklassOopDesc__i_; -text: .text%__1cNGrowableArray4Cl_2t6Mii_v_; -text: .text%__1cNinstanceKlassSlookup_osr_nmethod6kMpnNmethodOopDesc_i_pnHnmethod__; text: .text%__1cIAddINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cLPCTableNodeKis_PCTable6kM_pk0_; text: .text%__1cLPCTableNodeHsize_of6kM_I_; text: .text%__1cNincI_rRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKJNIHandlesKmake_local6FpnGThread_pnHoopDesc__pnI_jobject__; text: .text%__1cQciBytecodeStreamXget_method_holder_index6M_i_; text: .text%__1cMorI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cLimmUL32OperJconstantL6kM_x_; text: .text%__1cIGraphKitWround_double_arguments6MpnIciMethod__v_; text: .text%__1cFParseHdo_call6M_v_; text: .text%__1cIGraphKitTround_double_result6MpnIciMethod__v_; -text: .text%__1cFParseZcan_not_compile_call_site6MpnIciMethod_pnPciInstanceKlass__i_; text: .text%__1cQciBytecodeStreambAget_declared_method_holder6M_pnHciKlass__; text: .text%__1cFParseMprofile_call6MpnENode__v_; text: .text%__1cScompP_mem_rRegNodePoper_input_base6kM_I_; text: .text%__1cICodeHeapLheader_size6F_L_; -text: .text%__1cJloadBNodeJnum_opnds6kM_I_; text: .text%__1cENodeLbottom_type6kM_pknEType__; text: .text%__1cXindIndexScaleOffsetOperNconstant_disp6kM_i_; text: .text%__1cSindIndexOffsetOperJnum_edges6kM_I_; @@ -2033,11 +1293,9 @@ text: .text%__1cIBoolNodeHsize_of6kM_I_; text: .text%__1cLLShiftINodeLbottom_type6kM_pknEType__; text: .text%jni_DeleteLocalRef: jni.o; text: .text%__1cJloadSNodePoper_input_base6kM_I_; -text: .text%__1cPno_rax_RegPOperJnum_edges6kM_I_; text: .text%__1cOcompI_rRegNodeQuse_cisc_RegMask6M_v_; text: .text%jni_SetIntField: jni.o; text: .text%__1cMURShiftLNodeLbottom_type6kM_pknEType__; -text: .text%__1cMMutableSpaceFclear6M_v_; text: .text%__1cNtestI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cQjava_lang_StringbBcreate_tenured_from_unicode6FpHipnGThread__nGHandle__; text: .text%__1cKoopFactoryXnew_permanent_charArray6FipnGThread__pnQtypeArrayOopDesc__; @@ -2048,46 +1306,26 @@ text: .text%__1cHMulNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cVExceptionHandlerTableJadd_entry6MnRHandlerTableEntry__v_; text: .text%__1cPsalI_rReg_1NodeMideal_Opcode6kM_i_; text: .text%__1cRaddP_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMLinkResolverbFlinktime_resolve_special_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cMLinkResolverUresolve_special_call6FrnICallInfo_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cMLinkResolverbEruntime_resolve_special_method6FrnICallInfo_nMmethodHandle_nLKlassHandle_4ipnGThread__v_; text: .text%__1cQComputeCallStackJdo_object6Mii_v_; -text: .text%__1cIGraphKitNcast_not_null6MpnENode__2_; text: .text%__1cTconvL2I_reg_regNodeMideal_Opcode6kM_i_; text: .text%__1cKPSYoungGenNused_in_bytes6kM_L_; -text: .text%__1cOCompilerOracleOshould_exclude6FnMmethodHandle__i_; text: .text%__1cOGenerateOopMapHset_var6MinNCellTypeState__v_; -text: .text%__1cPcheckCastPPNodeJnum_opnds6kM_I_; -text: .text%__1cLLShiftLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cGIfNodeHsize_of6kM_I_; text: .text%__1cPciInstanceKlassFsuper6M_p0_; text: .text%__1cOcompL_rRegNodeMcisc_operand6kM_i_; text: .text%__1cLLShiftINodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cScompI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cMMergeMemNodeJideal_reg6kM_I_; -text: .text%__1cNandL_rRegNodePoper_input_base6kM_I_; -text: .text%__1cIciMethodWwas_executed_more_than6Mi_i_; -text: .text%__1cSReferenceProcessorbAprocess_discovered_reflist6MppnHoopDesc_pnPReferencePolicy_i_v_; -text: .text%__1cSReferenceProcessorOprocess_phase36MppnHoopDesc_ipnRBoolObjectClosure_pnKOopClosure_pnLVoidClosure__v_; -text: .text%__1cSReferenceProcessorOprocess_phase26MppnHoopDesc_pnRBoolObjectClosure_pnKOopClosure__v_; -text: .text%__1cSReferenceProcessorbAenqueue_discovered_reflist6MpnHoopDesc_p2_v_; text: .text%__1cTleaPIdxScaleOffNodeMideal_Opcode6kM_i_; text: .text%__1cTleaPIdxScaleOffNodePoper_input_base6kM_I_; -text: .text%__1cFLabelJadd_patch6Mi_v_; text: .text%__1cKMemBarNodeEhash6kM_I_; text: .text%__1cOcompP_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNloadConL0NodePoper_input_base6kM_I_; text: .text%__1cNsubI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJMarkSweepSMarkAndPushClosureLdo_nmethods6kM_ki_; text: .text%__1cIXorINodeGOpcode6kM_i_; -text: .text%__1cTStackWalkCompPolicyRcompilation_level6MnMmethodHandle_i_i_; text: .text%__1cMoutputStreamDput6Mc_v_; text: .text%__1cPindOffset32OperNbase_position6kM_i_; text: .text%__1cPindOffset32OperNconstant_disp6kM_i_; text: .text%__1cOcompU_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNloadConL0NodeHtwo_adr6kM_I_; -text: .text%__1cPBytecode_invokeFindex6kM_i_; -text: .text%__1cFframeNis_glue_frame6kM_i_; text: .text%__1cLRShiftINodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cZPhaseConservativeCoalesceKupdate_ifg6MIIpnIIndexSet_2_v_; text: .text%__1cZPhaseConservativeCoalesceMunion_helper6MpnENode_2II222pnFBlock_I_v_; @@ -2095,37 +1333,24 @@ text: .text%__1cIIndexSetEswap6Mp0_v_; text: .text%__1cOPhaseIdealLoopIsink_use6MpnENode_2_v_; text: .text%__1cRshrL_rReg_immNodeErule6kM_I_; text: .text%__1cKInlineTreeMok_to_inline6MpnIciMethod_pnIJVMState_rnNciCallProfile_pnMWarmCallInfo__8_; -text: .text%__1cTpass_initial_checks6FpnIciMethod_i1_i_; -text: .text%__1cKInlineTreeMshouldInline6kMpnIciMethod_irnNciCallProfile_pnMWarmCallInfo__pkc_; -text: .text%__1cOCompilerOracleNshould_inline6FnMmethodHandle__i_; -text: .text%__1cKInlineTreeNtry_to_inline6MpnIciMethod_irnNciCallProfile_pnMWarmCallInfo__pkc_; -text: .text%__1cIciMethodbAinterpreter_throwout_count6kM_i_; -text: .text%__1cIciMethodNshould_inline6M_i_; -text: .text%__1cIciMethodOshould_exclude6M_i_; text: .text%__1cScompU_rReg_immNodeErule6kM_I_; text: .text%__1cKjmpDirNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cKjmpDirNodeJis_Branch6kM_I_; text: .text%__1cKjmpDirNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMindirectOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cILoadNodeDcmp6kMrknENode__I_; text: .text%__1cLTypeInstPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; text: .text%__1cIGraphKitHjava_bc6kM_nJBytecodesECode__; -text: .text%__1cFLabelSpatch_instructions6MpnRAbstractAssembler__v_; -text: .text%__1cRAbstractAssemblerHbind_to6MrnFLabel_i_v_; text: .text%__1cRAbstractAssemblerEbind6MrnFLabel__v_; text: .text%__1cNloadConL0NodeErule6kM_I_; text: .text%__1cJStoreNodeSIdeal_masked_input6MpnIPhaseGVN_I_pnENode__; text: .text%__1cIGraphKitNbuiltin_throw6MnODeoptimizationLDeoptReason_pnENode__v_; text: .text%__1cbBopt_virtual_call_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cJrRegIOperFclone6kM_pnIMachOper__; text: .text%__1cMindIndexOperFscale6kM_i_; text: .text%__1cScompP_mem_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cFKlassPoop_is_instance6kM_i_; text: .text%__1cHciFieldPinitialize_from6MpnPfieldDescriptor__v_; text: .text%__1cRandI_rReg_immNodeMideal_Opcode6kM_i_; text: .text%__1cMMachProjNodeHsize_of6kM_I_; text: .text%__1cJStoreNodeZIdeal_sign_extended_input6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cScompP_mem_rRegNodeHtwo_adr6kM_I_; text: .text%__1cTconvF2D_reg_memNodeErule6kM_I_; text: .text%__1cPindOffset32OperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cFStateM_sub_Op_CmpP6MpknENode__v_; @@ -2134,38 +1359,24 @@ text: .text%__1cMloadConLNodeMideal_Opcode6kM_i_; text: .text%__1cSCompiledStaticCallJfind_stub6M_pC_; text: .text%__1cIciSymbolEmake6Fpkc_p0_; text: .text%__1cIciSymbolJmake_impl6Fpkc_p0_; -text: .text%__1cScompU_rReg_immNodePoper_input_base6kM_I_; text: .text%__1cKimmL32OperIconstant6kM_l_; -text: .text%__1cHi2sNodePoper_input_base6kM_I_; text: .text%__1cKimmL32OperJnum_edges6kM_I_; -text: .text%__1cMMonitorValue2t6MpnKScopeValue_nILocation__v_; text: .text%__1cMMonitorValueIwrite_on6MpnUDebugInfoWriteStream__v_; text: .text%__1cLBoxLockNodeKstack_slot6FpnENode__i_; -text: .text%__1cLBoxLockNodeKis_BoxLock6kM_pk0_; text: .text%__1cIBoolNodeDcmp6kMrknENode__I_; text: .text%__1cNSignatureInfoIdo_array6Mii_v_; -text: .text%__1cKDataLayoutPneeds_array_len6FC_i_; text: .text%__1cKDataLayoutKinitialize6MCHi_v_; text: .text%__1cJloadLNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFframebHnext_monitor_in_interpreter_frame6kMpnPBasicObjectLock__2_; -text: .text%__1cLRuntimeStubHoops_do6MpnKOopClosure__v_; -text: .text%__1cFParseRbranch_prediction6Mrf_f_; text: .text%__1cPshrI_rReg_1NodeMideal_Opcode6kM_i_; -text: .text%__1cHciKlassNis_subtype_of6Mp0_i_; text: .text%__1cOcompL_rRegNodeErule6kM_I_; text: .text%__1cNGrowableArray4Cpv_Praw_at_put_grow6Mirk03_v_; text: .text%__1cNGrowableArray4Cl_Praw_at_put_grow6Mirkl2_v_; text: .text%__1cISubINodeLbottom_type6kM_pknEType__; -text: .text%__1cIGraphKitZset_all_rewritable_memory6MpnENode__v_; -text: .text%__1cIGraphKitTset_all_memory_call6MpnENode__v_; text: .text%__1cMtlsLoadPNodeLbottom_type6kM_pknEType__; text: .text%__1cJAssemblerEmovq6MnHAddress_pnMRegisterImpl__v_; -text: .text%__1cRsalI_rReg_immNodePoper_input_base6kM_I_; text: .text%__1cNloadRangeNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cICodeBlobPis_runtime_stub6kM_i_; text: .text%__1cGRFrameMset_distance6Mi_v_; -text: .text%__1cICodeBlobOis_c2i_adapter6kM_i_; -text: .text%__1cFframeTis_first_java_frame6kM_i_; text: .text%__1cFframeLreal_sender6kMpnLRegisterMap__0_; text: .text%__1cGRFrameGcaller6M_p0_; text: .text%__1cTStackWalkCompPolicyIsenderOf6MpnGRFrame_pnNGrowableArray4C2___2_; @@ -2174,51 +1385,31 @@ text: .text%__1cKstoreLNodePoper_input_base6kM_I_; text: .text%__1cTconstantPoolOopDescMklass_at_put6MipnMklassOopDesc__v_; text: .text%__1cNFingerprinterGdo_int6M_v_; text: .text%__1cNSafepointBlobbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cRaddI_rReg_immNodeJnum_opnds6kM_I_; text: .text%__1cRshrL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cHPhiNodeEmake6FpnENode_2_p0_; -text: .text%__1cScompI_rReg_immNodeJnum_opnds6kM_I_; -text: .text%__1cENodeIis_CMove6M_pnJCMoveNode__; text: .text%__1cWstatic_call_RelocationLstatic_stub6M_pC_; -text: .text%__1cLRethrowNodeGis_CFG6kM_i_; text: .text%__1cIciObjectFklass6M_pnHciKlass__; text: .text%__1cNloadConP0NodeMideal_Opcode6kM_i_; text: .text%__1cOPhaseIdealLoopOsplit_thru_phi6MpnENode_2i_2_; -text: .text%__1cNGCTaskManagerRset_resource_flag6MIi_v_; -text: .text%__1cRshrI_rReg_immNodePoper_input_base6kM_I_; -text: .text%__1cUmembar_cpu_orderNodeMideal_Opcode6kM_i_; text: .text%__1cLklassVtableIindex_of6kMpnNmethodOopDesc_i_i_; text: .text%__1cKEntryPointFentry6kMnITosState__pC_; -text: .text%__1cJloadCNodeMideal_Opcode6kM_i_; text: .text%__1cKJavaThreadJframes_do6MpFpnFframe_pknLRegisterMap__v_v_; text: .text%__1cNMemoryManagerHoops_do6MpnKOopClosure__v_; text: .text%__1cRInvocationCounterJset_carry6M_v_; -text: .text%__1cKTypeAryPtrEmake6FnHTypePtrDPTR_pknHTypeAry_pnHciKlass_ii_pk0_; text: .text%__1cFStateM_sub_Op_RegL6MpknENode__v_; text: .text%__1cNdecI_rRegNodeErule6kM_I_; -text: .text%__1cKjmpConNodeJis_Branch6kM_I_; text: .text%__1cKjmpConNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cPcmpFastLockNodeMideal_Opcode6kM_i_; text: .text%__1cKjmpConNodeJlabel_set6MrnFLabel_I_v_; text: .text%__1cJttyLockerbCbreak_tty_lock_for_safepoint6Fl_v_; -text: .text%__1cNCallGeneratorJis_inline6kM_i_; text: .text%__1cUSafepointSynchronizeFblock6FpnKJavaThread__v_; text: .text%__1cCosRcurrent_thread_id6F_l_; text: .text%__1cKciTypeFlowLStateVectorMdo_getstatic6MpnQciBytecodeStream__v_; text: .text%__1cNSignatureInfoHdo_bool6M_v_; text: .text%__1cLLShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cKstoreLNodeMideal_Opcode6kM_i_; -text: .text%__1cNloadKlassNodeHtwo_adr6kM_I_; -text: .text%__1cFParseYprofile_not_taken_branch6M_v_; text: .text%__1cHPhiNodeMslice_memory6kMpknHTypePtr__p0_; -text: .text%__1cOcompL_rRegNodeJnum_opnds6kM_I_; -text: .text%__1cLRuntimeStubMdo_unloading6MpnRBoolObjectClosure_pnKOopClosure_i_v_; -text: .text%__1cLSymbolTableFprobe6Fpkci_pnNsymbolOopDesc__; -text: .text%__1cOcompL_rRegNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cPcmpFastLockNodePoper_input_base6kM_I_; -text: .text%__1cNCallGeneratorKis_virtual6kM_i_; -text: .text%__1cKInlineTreePshouldNotInline6kMpnIciMethod_pnMWarmCallInfo__pkc_; -text: .text%__1cLcastP2LNodeErule6kM_I_; text: .text%__1cNinstanceKlassKjava_super6kM_pnMklassOopDesc__; text: .text%__1cNPhaseRegAllocKoffset2reg6kMi_i_; text: .text%__1cQjmpCon_shortNodeMideal_Opcode6kM_i_; @@ -2226,88 +1417,53 @@ text: .text%__1cQjmpCon_shortNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cRInterpretedRFrame2t6MnFframe_pnKJavaThread_pnGRFrame__v_; text: .text%__1cTconvI2L_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cJloadINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cENodeRlatency_from_uses6kMrnLBlock_Array_rnNGrowableArray4CI___i_; text: .text%__1cNGrowableArray4CI_Praw_at_put_grow6MirkI2_v_; -text: .text%__1cFParseFdo_if6MpnENode_2nIBoolTestEmask_2_v_; text: .text%__1cXmembar_acquire_lockNodeMideal_Opcode6kM_i_; text: .text%__1cKklassKlassIoop_size6kMpnHoopDesc__i_; text: .text%__1cXindIndexScaleOffsetOperOindex_position6kM_i_; text: .text%__1cXindIndexScaleOffsetOperNbase_position6kM_i_; -text: .text%__1cPsalI_rReg_1NodePoper_input_base6kM_I_; text: .text%__1cIGraphKitJpush_node6MnJBasicType_pnENode__v_; -text: .text%__1cISubINodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cSconstMethodOopDescbEchecked_exceptions_length_addr6kM_pH_; text: .text%__1cPThreadLocalNodeGOpcode6kM_i_; text: .text%__1cRsubI_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cJloadCNodePoper_input_base6kM_I_; text: .text%__1cSThreadLocalStoragePget_thread_slow6F_pnGThread__; text: .text%__1cCosXthread_local_storage_at6Fi_pv_; -text: .text%__1cLRuntimeStubYcaller_must_gc_arguments6kMpnKJavaThread__i_; text: .text%__1cIAddPNodeJideal_reg6kM_I_; -text: .text%__1cTleaPIdxScaleOffNodeJnum_opnds6kM_I_; text: .text%__1cRaddI_rReg_immNodeHtwo_adr6kM_I_; text: .text%__1cFParseNthrow_to_exit6MpnNSafePointNode__v_; text: .text%__1cQCallLeafNoFPNodeGOpcode6kM_i_; text: .text%__1cKTypeRawPtrHget_con6kM_l_; text: .text%__1cOClearArrayNodeGOpcode6kM_i_; -text: .text%__1cOoop_RelocationHoops_do6MpFppnHoopDesc__v_v_; -text: .text%__1cIciMethodbHhas_unloaded_classes_in_signature6M_i_; -text: .text%__1cScompP_mem_rRegNodeJnum_opnds6kM_I_; text: .text%__1cFStateM_sub_Op_CmpI6MpknENode__v_; -text: .text%__1cNincI_rRegNodeJnum_opnds6kM_I_; text: .text%__1cJimmP0OperEtype6kM_pknEType__; text: .text%__1cNloadConP0NodeLbottom_type6kM_pknEType__; text: .text%__1cPloadConUL32NodeLbottom_type6kM_pknEType__; text: .text%__1cNloadConI0NodeHsize_of6kM_I_; -text: .text%__1cRaddI_rReg_memNodeZcheck_for_anti_dependence6kM_i_; -text: .text%__1cPshrI_rReg_1NodePoper_input_base6kM_I_; text: .text%JVM_handle_solaris_signal; text: .text%signalHandler; text: .text%__1cQJNI_FastGetFieldQfind_slowcase_pc6FpC_1_; -text: .text%__1cMLinkResolverbElinktime_resolve_static_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; -text: .text%__1cRresolve_and_patch6FppnHoopDesc__v_; text: .text%__1cFStateN_sub_Op_LoadP6MpknENode__v_; text: .text%__1cISubINodeDsub6kMpknEType_3_3_; text: .text%__1cPClassFileParserbDverify_legal_method_signature6MnMsymbolHandle_1pnGThread__i_; text: .text%__1cMLinkResolverVresolve_invokevirtual6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cRInterpretedRFrameOis_interpreted6kM_i_; -text: .text%__1cGRFrameLis_compiled6kM_i_; text: .text%__1cUPSGenerationCountersKupdate_all6M_v_; text: .text%__1cTStackWalkCompPolicyMshouldInline6FnMmethodHandle_fi_pkc_; text: .text%__1cFArenaRdestruct_contents6M_v_; -text: .text%__1cIGraphKitPstore_to_memory6MpnENode_22nJBasicType_i_2_; -text: .text%__1cJStoreNodeEmake6FpnENode_22pknHTypePtr_2nJBasicType__p0_; text: .text%__1cXPhaseAggressiveCoalesceYinsert_copy_with_overlap6MpnFBlock_pnENode_II_v_; text: .text%__1cULinearLeastSquareFitGupdate6Mdd_v_; -text: .text%__1cKciTypeFlowGJsrSetSis_compatible_with6Mp1_i_; text: .text%__1cENodeIadd_prec6Mp0_v_; -text: .text%__1cKOSRAdapterOis_osr_adapter6kM_i_; text: .text%__1cIMulINodeGOpcode6kM_i_; text: .text%__1cLciSignature2t6MpnHciKlass_pnIciSymbol__v_; text: .text%__1cNGrowableArray4CpnGciType__2t6MpnFArena_iirk1_v_; -text: .text%__1cKTypeAryPtrFempty6kM_i_; -text: .text%__1cHTypeAryFempty6kM_i_; -text: .text%__1cJloadCNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cIciMethod2t6MnMmethodHandle__v_; -text: .text%__1cRandI_rReg_immNodePoper_input_base6kM_I_; text: .text%__1cJAssemblerDjcc6Mn0AJCondition_rnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cCosRelapsed_frequency6F_x_; -text: .text%__1cNinstanceKlassVis_same_class_package6FpnHoopDesc_pnNsymbolOopDesc_24_i_; text: .text%__1cMelapsedTimerHseconds6kM_d_; text: .text%__1cOJNIHandleBlockOallocate_block6FpnGThread__p0_; -text: .text%__1cJAssemblerDnop6M_v_; -text: .text%__1cDCHANprocess_class6FnLKlassHandle_pnNGrowableArray4n0B___pnNGrowableArray4nMmethodHandle___nMsymbolHandle_6_v_; -text: .text%__1cEUTF8Fequal6FpWi1i_i_; -text: .text%__1cKstoreLNodeJnum_opnds6kM_I_; -text: .text%__1cIjniIdMapHoops_do6MpnKOopClosure__v_; -text: .text%__1cMjniIdMapBaseHoops_do6MpnKOopClosure__v_; text: .text%__1cJArrayDataKcell_count6M_i_; text: .text%__1cGBitMapIset_from6M0_v_; -text: .text%__1cPBytecode_invokeJsignature6kM_pnNsymbolOopDesc__; text: .text%__1cKType_ArrayEgrow6MI_v_; text: .text%JVM_Write; text: .text%__1cDhpiFwrite6FipkvI_L_; -text: .text%__1cMStartC2INodeGOpcode6kM_i_; text: .text%__1cSindIndexOffsetOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__; text: .text%__1cIAddLNodeLbottom_type6kM_pknEType__; @@ -2318,33 +1474,21 @@ text: .text%__1cMtlsLoadPNodeMideal_Opcode6kM_i_; text: .text%__1cRshrI_rReg_immNodeErule6kM_I_; text: .text%__1cJcmpOpOperGnegate6M_v_; text: .text%__1cHTypeAryEmake6FpknEType_pknHTypeInt__pk0_; -text: .text%__1cFParseRoptimize_inlining6MpnIciMethod_ipnPciInstanceKlass_24irnKInlineTreeLInlineStyle_r2_v_; -text: .text%__1cQimprove_receiver6FpnPciInstanceKlass_pknLTypeInstPtr_ri_1_; -text: .text%__1cPcmpFastLockNodeHtwo_adr6kM_I_; -text: .text%__1cMLinkResolverTresolve_static_call6FrnICallInfo_rnLKlassHandle_nMsymbolHandle_53iipnGThread__v_; text: .text%__1cPCheckCastPPNodeJideal_reg6kM_I_; -text: .text%__1cKJavaThreadUin_stack_yellow_zone6MpC_i_; -text: .text%__1cFParseSmerge_memory_edges6MpnMMergeMemNode_ii_v_; text: .text%__1cJAssemblerEmovq6MpnMRegisterImpl_nHAddress__v_; text: .text%__1cUSafepointSynchronizebDhandle_polling_page_exception6FpnKJavaThread__v_; text: .text%__1cUThreadSafepointStatebDhandle_polling_page_exception6M_v_; text: .text%__1cLjmpConUNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cNandL_rRegNodeMideal_Opcode6kM_i_; text: .text%__1cKcmpOpUOperFccode6kM_i_; -text: .text%__1cLjmpConUNodeTmay_be_short_branch6kM_i_; -text: .text%__1cLjmpConUNodeOis_pc_relative6kM_i_; text: .text%__1cIPipelinePoperand_latency6kMIpk0_I_; text: .text%__1cWCallLeafNoFPDirectNodeMideal_Opcode6kM_i_; text: .text%__1cQPlaceholderTableKfind_entry6MiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cJTimeStampSticks_since_update6kM_x_; text: .text%__1cURethrowExceptionNodeMideal_Opcode6kM_i_; text: .text%__1cJloadPNodeFreloc6kM_i_; text: .text%__1cTno_rax_rbx_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNprefetchwNodeJnum_opnds6kM_I_; text: .text%__1cKjmpConNodeGnegate6M_v_; text: .text%__1cMindirectOperFscale6kM_i_; -text: .text%__1cQSystemDictionaryVadd_loader_constraint6FnMsymbolHandle_nGHandle_2pnGThread__v_; -text: .text%__1cVLoaderConstraintTableJadd_entry6MnMsymbolHandle_pnMklassOopDesc_nGHandle_34pnGThread__i_; text: .text%__1cRsubI_rReg_memNodeMideal_Opcode6kM_i_; text: .text%__1cTOopMapForCacheEntryZfill_stackmap_for_opcodes6MpnOBytecodeStream_pnNCellTypeState_4i_v_; text: .text%__1cQComputeCallStackGdo_int6M_v_; @@ -2352,7 +1496,6 @@ text: .text%__1cNloadRangeNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cNtestP_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNloadRangeNodeIpipeline6kM_pknIPipeline__; text: .text%__1cPCheckCastPPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFParseMvisit_blocks6M_v_; text: .text%__1cQjmpDir_shortNodeMideal_Opcode6kM_i_; text: .text%__1cQjmpDir_shortNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cKciTypeFlowLStateVectorLdo_getfield6MpnQciBytecodeStream__v_; @@ -2361,40 +1504,26 @@ text: .text%__1cScompP_mem_rRegNodeErule6kM_I_; text: .text%__1cPSignatureStreamRas_symbol_or_null6M_pnNsymbolOopDesc__; text: .text%__1cNSafePointNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cJloadSNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKMemBarNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cOjmpLoopEndNodeMideal_Opcode6kM_i_; -text: .text%__1cFBlockTimplicit_null_check6MrnLBlock_Array_rnNGrowableArray4CI__pnENode_6_v_; text: .text%__1cKCastPPNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; text: .text%__1cOGenerateOopMapKcopy_state6MpnNCellTypeState_2_v_; -text: .text%__1cGThreadSis_Compiler_thread6kM_i_; text: .text%__1cRCardTableModRefBSPdirty_MemRegion6MnJMemRegion__v_; -text: .text%__1cJloadBNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cQVMOperationQdDueueSqueue_remove_front6Mi_pnMVM_Operation__; text: .text%__1cOcompI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cVCompressedWriteStreamEgrow6M_v_; -text: .text%__1cNCompileBrokerYcheck_compilation_result6FnMmethodHandle_iippnHnmethod__i_; -text: .text%__1cKReflectionVis_same_class_package6FpnMklassOopDesc_2_i_; -text: .text%__1cNinstanceKlassVis_same_class_package6MpnMklassOopDesc__i_; text: .text%JVM_RawMonitorEnter; -text: .text%__1cFMutexMjvm_raw_lock6M_v_; text: .text%JVM_RawMonitorExit; -text: .text%__1cFMutexOjvm_raw_unlock6M_v_; text: .text%__1cHUNICODELutf8_length6FpHi_i_; text: .text%__1cRaddP_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cIciMethodLis_accessor6kM_i_; text: .text%__1cPCountedLoopNodeDphi6kM_pnENode__; text: .text%__1cLBoxLockNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cSmembar_releaseNodeMideal_Opcode6kM_i_; -text: .text%__1cQciBytecodeStreamSget_constant_index6kM_i_; -text: .text%__1cOGenerateOopMapOset_bbmark_bit6Mi_v_; text: .text%__1cFParseOreturn_current6MpnENode__v_; text: .text%__1cLConvI2LNodeJideal_reg6kM_I_; text: .text%__1cJStartNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; text: .text%__1cMorI_rRegNodeMcisc_operand6kM_i_; text: .text%__1cMloadConPNodeFreloc6kM_i_; -text: .text%__1cGThreadMis_VM_thread6kM_i_; text: .text%__1cSPSPromotionManagerFreset6M_v_; -text: .text%__1cNPrefetchQdDueueFclear6M_v_; text: .text%__1cSPSPromotionManagerKflush_labs6M_v_; text: .text%__1cFciEnvVnotice_inlined_method6MpnIciMethod__v_; text: .text%__1cOJNIHandleBlockNrelease_block6Fp0pnGThread__v_; @@ -2407,84 +1536,52 @@ text: .text%__1cJTypeTupleFxdual6kM_pknEType__; text: .text%__1cOcompP_rRegNodeQuse_cisc_RegMask6M_v_; text: .text%__1cHi2sNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cJAssemblerKemit_arith6MiipnMRegisterImpl_2_v_; -text: .text%__1cLcastP2LNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cRciVirtualCallDataOtranslate_from6MpnLProfileData__v_; text: .text%__1cXinitialize_static_field6FpnPfieldDescriptor_pnGThread__v_: classFileParser.o; text: .text%__1cKstoreCNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNCompileBrokerXcompilation_is_in_queue6FnMmethodHandle_i_i_; -text: .text%__1cRsubI_rReg_memNodeJnum_opnds6kM_I_; -text: .text%__1cETypeCeq6kMpk0_i_; -text: .text%__1cHMatcherPstack_alignment6F_I_; text: .text%__1cNloadKlassNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJloadSNodeJnum_opnds6kM_I_; text: .text%__1cJMultiNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRshrL_rReg_immNodeJnum_opnds6kM_I_; -text: .text%__1cTconvI2L_reg_memNodeErule6kM_I_; text: .text%__1cMURShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cRcmpFastUnlockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSInterpreterRuntimebAfrequency_counter_overflow6FpnKJavaThread_pC_n0AJIcoResult__; text: .text%__1cHSubNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cQjava_lang_StringGlength6FpnHoopDesc__i_; text: .text%__1cLRethrowNodeGOpcode6kM_i_; -text: .text%__1cPcmpFastLockNodeJnum_opnds6kM_I_; -text: .text%__1cIciMethodPcan_be_compiled6M_i_; text: .text%__1cFParseQcreate_entry_map6M_pnNSafePointNode__; text: .text%__1cFParseIdo_exits6M_v_; text: .text%__1cFParseLbuild_exits6M_v_; text: .text%__1cFParseLinit_blocks6M_v_; text: .text%__1cFParse2t6MpnIJVMState_pnIciMethod_f_v_; -text: .text%__1cIciMethodVhas_balanced_monitors6M_i_; text: .text%__1cFParseNdo_all_blocks6M_v_; text: .text%__1cOParseGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cOParseGeneratorJcan_parse6FpnIciMethod_i_i_; text: .text%__1cFArenaEused6kM_L_; text: .text%__1cRandI_rReg_immNodeErule6kM_I_; text: .text%jni_GetSuperclass: jni.o; text: .text%__1cPno_rax_RegPOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cFStateM_sub_Op_AddI6MpknENode__v_; -text: .text%__1cPClassFileParserUskip_over_field_name6MpciI_1_; text: .text%__1cFParsePdo_method_entry6M_v_; text: .text%__1cNCallGeneratorKfor_inline6FpnIciMethod_f_p0_; -text: .text%__1cKciTypeFlowFBlockPclone_loop_head6Mp0ip1pn0AGJsrSet__3_; text: .text%__1cLOpaque1NodeGOpcode6kM_i_; -text: .text%__1cHciKlassOis_subclass_of6Mp0_i_; -text: .text%__1cbBjava_lang_ref_SoftReferenceFclock6F_x_; text: .text%__1cTAbstractInterpreterbFsize_top_interpreter_activation6FpnNmethodOopDesc__i_; -text: .text%__1cRruntime_type_from6FpnJJavaValue__nJBasicType__: javaCalls.o; -text: .text%__1cCosbCstack_shadow_pages_available6FpnGThread_nMmethodHandle__i_; text: .text%__1cPJavaCallWrapper2t6MnMmethodHandle_nGHandle_pnJJavaValue_pnGThread__v_; text: .text%__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_; text: .text%__1cRJavaCallArgumentsKparameters6M_pl_; text: .text%__1cJJavaCallsLcall_helper6FpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v_; text: .text%__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cLCastP2LNodeLbottom_type6kM_pknEType__; text: .text%__1cPJavaCallWrapper2T6M_v_; text: .text%__1cVPreserveExceptionMark2T6M_v_; text: .text%__1cVPreserveExceptionMark2t6MrpnGThread__v_; -text: .text%__1cMrax_RegPOperJnum_edges6kM_I_; text: .text%__1cMrax_RegPOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cITypeFuncFxdual6kM_pknEType__; -text: .text%__1cIimmLOperJconstantL6kM_x_; -text: .text%__1cIMulLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cLRShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cJloadPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNCompileBrokerTcompile_method_base6FnMmethodHandle_ii1ipkcpnGThread__pnHnmethod__; -text: .text%__1cNCompileBrokerOcompile_method6FnMmethodHandle_i1ipkcpnGThread__pnHnmethod__; -text: .text%__1cNmethodOopDescWload_signature_classes6FnMmethodHandle_pnGThread__i_; text: .text%__1cTconstantPoolOopDescbDresolve_string_constants_impl6FnSconstantPoolHandle_pnGThread__v_; -text: .text%__1cYDebugInformationRecorderNadd_dependent6MpnPciInstanceKlass_pnIciMethod__v_; text: .text%__1cHciField2t6MpnPciInstanceKlass_i_v_; text: .text%__1cTconstantPoolOopDescbCklass_ref_at_if_loaded_check6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; text: .text%__1cMLinkResolverXresolve_klass_no_update6FrnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cNaddL_rRegNodePoper_input_base6kM_I_; text: .text%__1cISubINodeGadd_id6kM_pknEType__; text: .text%__1cNsubI_rRegNodeHtwo_adr6kM_I_; text: .text%__1cGciType2t6MnLKlassHandle__v_; -text: .text%__1cMMutableSpaceKinitialize6MnJMemRegion_i_v_; text: .text%__1cHciKlass2t6MnLKlassHandle__v_; -text: .text%__1cKInlineTree2t6MpnHCompile_pk0pnIciMethod_pnIJVMState_if_v_; text: .text%__1cJEventMark2t6MpkcE_v_; -text: .text%__1cJloadCNodeJnum_opnds6kM_I_; text: .text%__1cNaddI_rRegNodeQuse_cisc_RegMask6M_v_; text: .text%__1cQComputeCallStackHdo_long6M_v_; text: .text%__1cMindirectOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; @@ -2492,12 +1589,9 @@ text: .text%__1cRaddI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cRLowMemoryDetectorWdetect_after_gc_memory6FpnKMemoryPool__v_; text: .text%__1cQVMOperationQdDueueNqueue_oops_do6MipnKOopClosure__v_; text: .text%__1cMCreateExNodeJideal_reg6kM_I_; -text: .text%__1cMorI_rRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cMorI_rRegNodeJnum_opnds6kM_I_; text: .text%__1cRmethodDataOopDescLbci_to_data6Mi_pnLProfileData__; text: .text%__1cNSCMemProjNodeGOpcode6kM_i_; text: .text%__1cNSignatureInfoHdo_long6M_v_; -text: .text%__1cLPCTableNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cMCreateExNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cRinterpretedVFrameDbci6kM_i_; text: .text%__1cKInlineTreeYcompute_callee_frequency6kMi_f_; @@ -2511,36 +1605,25 @@ text: .text%__1cNsubI_rRegNodeQuse_cisc_RegMask6M_v_; text: .text%__1cOMethodLivenessKBasicBlockIload_two6Mi_v_; text: .text%__1cFKlassTarray_klass_or_null6Mi_pnMklassOopDesc__; text: .text%__1cNmulL_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cNobjArrayKlassPoop_is_objArray6kM_i_; -text: .text%__1cLklassVtableXvtable_accessibility_at6Mi_n0AKAccessType__; -text: .text%__1cNrFlagsRegOperFclone6kM_pnIMachOper__; text: .text%__1cIGraphKitJpush_pair6MpnENode__v_; text: .text%__1cNCatchProjNodeDcmp6kMrknENode__I_; -text: .text%__1cIGraphKitRmake_slow_call_ex6MpnENode_pnPciInstanceKlass__v_; text: .text%__1cTcompareAndSwapLNodePoper_input_base6kM_I_; text: .text%__1cMloadConINodeHsize_of6kM_I_; text: .text%__1cJAssemblerKemit_arith6MiipnMRegisterImpl_i_v_; -text: .text%__1cRMachSafePointNodeLis_MachCall6M_pnMMachCallNode__; text: .text%__1cNstoreImmINodeMideal_Opcode6kM_i_; -text: .text%__1cJScopeDescGis_top6kM_i_; text: .text%__1cHOrINodeLbottom_type6kM_pknEType__; text: .text%__1cPstoreImmI16NodeMideal_Opcode6kM_i_; text: .text%__1cMindIndexOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cFStateQ_sub_Op_CreateEx6MpknENode__v_; text: .text%__1cRshrL_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cLjmpConUNodeJis_Branch6kM_I_; text: .text%__1cLjmpConUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cLjmpConUNodeJlabel_set6MrnFLabel_I_v_; text: .text%__1cRaddI_rReg_memNodeMideal_Opcode6kM_i_; text: .text%__1cPciInstanceKlass2t6MnLKlassHandle__v_; text: .text%__1cHCompileXin_preserve_stack_slots6M_I_; -text: .text%__1cMMachCallNodeHis_Call6M_pnICallNode__; text: .text%__1cNdecI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKStoreCNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cLLShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cTtypeArrayKlassKlassIoop_size6kMpnHoopDesc__i_; -text: .text%__1cLklassVtableKis_miranda6FpnNmethodOopDesc_pnPobjArrayOopDesc_pnMklassOopDesc__i_; -text: .text%__1cTconvL2I_reg_regNodePoper_input_base6kM_I_; text: .text%__1cRalign_code_offset6Fi_I_; text: .text%__1cMURShiftINodeLbottom_type6kM_pknEType__; text: .text%__1cMorI_rRegNodeErule6kM_I_; @@ -2551,18 +1634,10 @@ text: .text%__1cTconvL2I_reg_regNodeErule6kM_I_; text: .text%__1cRmethodDataOopDescJbci_to_dp6Mi_pC_; text: .text%__1cIAddLNodeGadd_id6kM_pknEType__; text: .text%__1cRaddL_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cLRShiftINodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cFTypeFEhash6kM_i_; -text: .text%__1cIGraphKitMarray_length6MpnENode__2_; -text: .text%__1cPCallRuntimeNodeEhash6kM_I_; text: .text%__1cPsalI_rReg_1NodeErule6kM_I_; text: .text%__1cIJVMState2t6Mi_v_; -text: .text%__1cNstoreImmBNodeHtwo_adr6kM_I_; -text: .text%__1cLLShiftINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cScompU_rReg_immNodeJnum_opnds6kM_I_; -text: .text%__1cNGrowableArray4Cl_Icontains6kMrkl_i_; text: .text%__1cScompU_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQjava_lang_StringGequals6FpnHoopDesc_pHi_i_; text: .text%__1cOcompP_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cTCreateExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMURShiftINodeFValue6kMpnOPhaseTransform__pknEType__; @@ -2579,197 +1654,112 @@ text: .text%__1cSsafePoint_pollNodePoper_input_base6kM_I_; text: .text%__1cLRuntimeStubbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; text: .text%__1cPshrI_rReg_1NodeErule6kM_I_; text: .text%__1cRmethodDataOopDescKmileage_of6FpnNmethodOopDesc__i_; -text: .text%__1cKManagementJtimestamp6F_x_; -text: .text%__1cbDReferenceProcessorInitializerIis_clean6kM_v_; text: .text%__1cIPSOldGenPupdate_counters6M_v_; -text: .text%__1cNSingletonBlobIis_alive6kM_i_; -text: .text%__1cKTypeRawPtrCeq6kMpknEType__i_; text: .text%__1cIregDOperEtype6kM_pknEType__; -text: .text%__1cQleaPIdxScaleNodeHtwo_adr6kM_I_; text: .text%__1cTStackWalkCompPolicyPshouldNotInline6FnMmethodHandle__pkc_; -text: .text%__1cMPrefetchNodeLbottom_type6kM_pknEType__; text: .text%__1cPcmpFastLockNodeErule6kM_I_; text: .text%__1cFArena2t6M_v_; text: .text%__1cSCallLeafDirectNodePoper_input_base6kM_I_; -text: .text%__1cMCallLeafNodeLis_CallLeaf6kM_pk0_; text: .text%__1cQleaPIdxScaleNodeMideal_Opcode6kM_i_; text: .text%__1cJcmpOpOperFequal6kM_i_; text: .text%__1cScompI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%jni_IsSameObject: jni.o; -text: .text%__1cNmulL_rRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cNmulL_rRegNodeJnum_opnds6kM_I_; text: .text%__1cIGraphKitYcombine_exception_states6MpnNSafePointNode_2_v_; text: .text%__1cJloadBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMrcx_RegIOperJnum_edges6kM_I_; -text: .text%__1cFKlassNoop_is_method6kM_i_; text: .text%__1cIMulLNodeLbottom_type6kM_pknEType__; -text: .text%__1cHnmethodPis_locked_by_vm6kM_i_; text: .text%__1cONMethodSweeperPprocess_nmethod6FpnHnmethod__v_; text: .text%__1cRaddP_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXjava_lang_ref_ReferenceWpending_list_lock_addr6F_ppnHoopDesc__; -text: .text%__1cJloadLNodeHtwo_adr6kM_I_; -text: .text%__1cHMulNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cMrep_stosNodePoper_input_base6kM_I_; text: .text%__1cRsalI_rReg_immNodeErule6kM_I_; text: .text%__1cJFieldTypeSskip_optional_size6FpnNsymbolOopDesc_pi_v_; text: .text%__1cMloadConPNodeHsize_of6kM_I_; -text: .text%__1cSCallLeafDirectNodeHtwo_adr6kM_I_; text: .text%__1cHnmethodVcleanup_inline_caches6M_v_; text: .text%__1cIGraphKitTcreate_and_xform_if6MpnENode_2ff_pnGIfNode__; -text: .text%__1cQsolaris_mprotect6FpcLi_i_: os_solaris.o; text: .text%__1cRaddI_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cHnmethodLis_unloaded6kM_i_; text: .text%__1cOGenerateOopMapHppstore6MpnNCellTypeState_i_v_; -text: .text%__1cIGraphKitXset_edges_for_java_call6MpnMCallJavaNode_i_v_; -text: .text%__1cTconvI2L_reg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cHi2sNodeJnum_opnds6kM_I_; text: .text%__1cSconstMethodOopDescZchecked_exceptions_length6kM_i_; -text: .text%__1cHMatcherXadjust_incoming_stk_arg6Mi_i_; text: .text%__1cNIdealLoopTreeIset_nest6MI_i_; text: .text%__1cNIdealLoopTreeMcounted_loop6MpnOPhaseIdealLoop__v_; -text: .text%__1cRsubI_rReg_memNodeZcheck_for_anti_dependence6kM_i_; -text: .text%__1cIGraphKitZset_results_for_java_call6MpnMCallJavaNode__pnENode__; -text: .text%__1cTconvI2L_reg_memNodePoper_input_base6kM_I_; text: .text%__1cFStateM_sub_Op_CmpU6MpknENode__v_; text: .text%__1cLRethrowNodeKmatch_edge6kMI_I_; -text: .text%__1cKcopy_table6FppC1i_v_: interpreter.o; text: .text%__1cUBytecode_tableswitchOdest_offset_at6kMi_i_; text: .text%__1cNobjArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; text: .text%__1cKTypeRawPtrFxmeet6kMpknEType__3_; -text: .text%__1cMVM_OperationVevaluate_at_safepoint6kM_i_; -text: .text%__1cMVM_OperationVevaluate_concurrently6kM_i_; -text: .text%__1cMVM_OperationSis_cheap_allocated6kM_i_; -text: .text%__1cXmembar_release_lockNodePoper_input_base6kM_I_; -text: .text%__1cRaddL_rReg_immNodePoper_input_base6kM_I_; -text: .text%__1cScompP_mem_rRegNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cJFieldTypeOget_array_info6FpnNsymbolOopDesc_pip2pnGThread__nJBasicType__; -text: .text%__1cJFieldTypeYis_valid_array_signature6FpnNsymbolOopDesc__i_; text: .text%__1cNincI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIciObject2t6M_v_; text: .text%__1cPstoreImmI16NodePoper_input_base6kM_I_; -text: .text%__1cNinstanceKlassbDcheck_valid_for_instantiation6MipnGThread__v_; text: .text%__1cPClassFileParserbCverify_legal_class_modifiers6MipnGThread__v_; -text: .text%__1cQLibraryIntrinsicKis_virtual6kM_i_; text: .text%__1cPciObjectFactoryUget_empty_methodData6M_pnMciMethodData__; text: .text%__1cMciMethodData2t6M_v_; -text: .text%__1cPsarI_rReg_1NodePoper_input_base6kM_I_; text: .text%__1cNstoreImmBNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cFTypeDEhash6kM_i_; -text: .text%__1cMPrefetchNodeKmatch_edge6kMI_I_; -text: .text%__1cHCompileQcan_generate_C2I6MpnIciMethod_i_i_; text: .text%__1cPloadConUL32NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPciObjArrayKlassSis_obj_array_klass6M_i_; text: .text%__1cLOpaque1NodeEhash6kM_I_; -text: .text%__1cXmembar_release_lockNodeHtwo_adr6kM_I_; text: .text%JVM_GetMethodIxModifiers; text: .text%__1cJloadBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNandL_rRegNodeJnum_opnds6kM_I_; -text: .text%__1cNandL_rRegNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cFKlassMset_subklass6MpnMklassOopDesc__v_; text: .text%__1cTCallDynamicJavaNodeGOpcode6kM_i_; text: .text%__1cJloadINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKklassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cUCompressedReadStreamMraw_read_int6FrpC_i_; text: .text%__1cIHaltNodeEhash6kM_I_; text: .text%__1cNstoreImmINodePoper_input_base6kM_I_; text: .text%__1cLAccessFlagsPatomic_set_bits6Mi_v_; text: .text%__1cNinstanceKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cNinstanceKlassScopy_static_fields6MpnSPSPromotionManager__v_; -text: .text%__1cSinstanceKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cOcompL_rRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cQVMOperationQdDueueLremove_next6M_pnMVM_Operation__; -text: .text%__1cQciTypeArrayKlassTis_type_array_klass6M_i_; text: .text%__1cRsubI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cFStateP_sub_Op_LShiftL6MpknENode__v_; text: .text%__1cLjmpConUNodeGnegate6M_v_; text: .text%__1cKcmpOpUOperGnegate6M_v_; -text: .text%__1cMrax_RegLOperJnum_edges6kM_I_; text: .text%__1cLGCTaskQdDueueKinitialize6M_v_; -text: .text%__1cJStealTask2t6Mi_v_; text: .text%__1cJStealTaskFdo_it6MpnNGCTaskManager_I_v_; text: .text%__1cTOldToYoungRootsTaskEname6M_pc_; text: .text%__1cTOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; text: .text%__1cNGCTaskManagerMnote_release6MI_v_; text: .text%__1cJStealTaskEname6M_pc_; text: .text%__1cSCardTableExtensionbAscavenge_contents_parallel6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager_I_v_; -text: .text%__1cFciEnvbAget_constant_by_index_impl6MpnPciInstanceKlass_i_nKciConstant__; text: .text%__1cQciBytecodeStreamMget_constant6M_nKciConstant__; -text: .text%__1cFciEnvVget_constant_by_index6MpnPciInstanceKlass_i_nKciConstant__; -text: .text%__1cJcmpOpOperFclone6kM_pnIMachOper__; text: .text%__1cMrep_stosNodeMideal_Opcode6kM_i_; -text: .text%__1cEhash6Fpkc1_I_; -text: .text%__1cQput_after_lookup6FnMsymbolHandle_0ppnLNameSigHash__i_; text: .text%__1cKJavaThreadLgc_epilogue6M_v_; text: .text%__1cKJavaThreadLgc_prologue6M_v_; text: .text%__1cTsize_java_to_interp6F_I_; text: .text%__1cUreloc_java_to_interp6F_I_; text: .text%__1cQinit_input_masks6FIrnHRegMask_1_p0_: matcher.o; -text: .text%__1cKOSRAdapterHoops_do6MpnKOopClosure__v_; -text: .text%__1cRCompilationPolicybIreset_counter_for_invocation_event6MnMmethodHandle__v_; text: .text%__1cRitableMethodEntryKinitialize6MpnNmethodOopDesc__v_; text: .text%__1cTcompareAndSwapLNodeMideal_Opcode6kM_i_; -text: .text%__1cNinstanceKlassPlink_class_impl6FnTinstanceKlassHandle_pnGThread__v_; text: .text%__1cIGraphKitbBset_arguments_for_java_call6MpnMCallJavaNode__v_; text: .text%__1cNCallGeneratorCtf6kM_pknITypeFunc__; text: .text%__1cMloadConLNodeLbottom_type6kM_pknEType__; -text: .text%__1cKStoreBNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cNaddL_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cTcompareAndSwapLNodeJnum_opnds6kM_I_; text: .text%__1cFStateO_sub_Op_StoreI6MpknENode__v_; text: .text%__1cQleaPIdxScaleNodePoper_input_base6kM_I_; -text: .text%__1cNGrowableArray4CpnNmethodOopDesc__2t6Mii_v_; text: .text%__1cLklassVtableMget_mirandas6FpnNGrowableArray4CpnNmethodOopDesc___pnMklassOopDesc_pnPobjArrayOopDesc_8_v_; text: .text%__1cXJNI_ArgumentPusherVaArgKget_object6M_v_; text: .text%__1cNloadConP0NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFKlassKsuperklass6kM_pnNinstanceKlass__; -text: .text%__1cWstatic_stub_RelocationJpack_data6M_i_; -text: .text%__1cNsubL_rRegNodePoper_input_base6kM_I_; -text: .text%__1cbAjni_check_async_exceptions6FpnKJavaThread__v_: jni.o; -text: .text%__1cKJavaThreadbHcheck_and_handle_async_exceptions6Mi_v_; text: .text%__1cRsalI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cMindIndexOperNbase_position6kM_i_; text: .text%__1cMindIndexOperOindex_position6kM_i_; text: .text%__1cMindIndexOperNconstant_disp6kM_i_; -text: .text%__1cJLoadSNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cNGrowableArray4CpnOMethodLivenessKBasicBlock__2t6Mii_v_; text: .text%__1cKstoreINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNCallGeneratorPfor_direct_call6FpnIciMethod__p0_; text: .text%__1cTDirectCallGeneratorIgenerate6MpnIJVMState__2_; text: .text%__1cMWarmCallInfoLalways_cold6F_p0_; text: .text%__1cFframeIpatch_pc6MpnGThread_pC_v_; text: .text%JVM_IsInterface; text: .text%__1cFKlassQset_next_sibling6MpnMklassOopDesc__v_; -text: .text%__1cJMultiNodeUdepends_only_on_test6kM_i_; text: .text%__1cRshrL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cQjmpCon_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cQjmpCon_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cKjmpConNodeUshort_branch_version6M_pnIMachNode__; -text: .text%__1cQjmpCon_shortNodeJis_Branch6kM_I_; -text: .text%__1cKJavaThreadNpd_last_frame6M_nFframe__; text: .text%__1cTStackWalkCompPolicyVfindTopInlinableFrame6MpnNGrowableArray4CpnGRFrame____2_; text: .text%__1cKJavaThreadQlast_java_vframe6MpnLRegisterMap__pnKjavaVFrame__; text: .text%__1cTStackWalkCompPolicyXmethod_invocation_event6MnMmethodHandle_pnGThread__v_; text: .text%__1cRInterpretedRFrame2t6MnFframe_pnKJavaThread_nMmethodHandle__v_; -text: .text%__1cNGrowableArray4CpnGRFrame__2t6Mii_v_; -text: .text%__1cKjavaVFrameNis_java_frame6kM_i_; -text: .text%__1cIVerifierRshould_verify_for6FpnHoopDesc__i_; -text: .text%__1cQciBytecodeStreamPget_klass_index6M_i_; text: .text%__1cRMachNullCheckNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRMachNullCheckNode2t6MpnENode_2I_v_; text: .text%__1cRsarI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cNMachIdealNodeJnum_opnds6kM_I_; -text: .text%__1cRMachSafePointNodePis_MachCallJava6M_pnQMachCallJavaNode__; text: .text%__1cKstorePNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cWImplicitExceptionTableGappend6MII_v_; text: .text%__1cHUNICODEHas_utf86FpHi_pc_; -text: .text%__1cMStartI2CNodeGOpcode6kM_i_; -text: .text%__1cKOSRAdapterMdo_unloading6MpnRBoolObjectClosure_pnKOopClosure_i_v_; -text: .text%__1cSvframeStreamCommonbHskip_method_invoke_and_aux_frames6M_v_; -text: .text%__1cNdecI_rRegNodeJnum_opnds6kM_I_; text: .text%__1cIMinINodeGOpcode6kM_i_; -text: .text%__1cNinstanceKlassbCfind_local_field_from_offset6kMiipnPfieldDescriptor__i_; -text: .text%__1cNinstanceKlassWfind_field_from_offset6kMiipnPfieldDescriptor__i_; -text: .text%__1cPciInstanceKlassTget_field_by_offset6Mii_pnHciField__; text: .text%__1cFArena2T6M_v_; text: .text%__1cKmethodOperJnum_edges6kM_I_; text: .text%__1cSconstMethodOopDescYchecked_exceptions_start6kM_pnXCheckedExceptionElement__; @@ -2780,66 +1770,37 @@ text: .text%__1cRsarL_rReg_immNodeMideal_Opcode6kM_i_; text: .text%__1cNstoreImmBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cKstorePNodeFreloc6kM_i_; text: .text%__1cYCallStaticJavaDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cYCallStaticJavaDirectNodeJnum_opnds6kM_I_; text: .text%__1cQleaPIdxScaleNodeErule6kM_I_; text: .text%__1cTciConstantPoolCacheGinsert6Mipv_v_; -text: .text%__1cNinstanceKlassXmark_dependent_nmethods6MpnMklassOopDesc__i_; -text: .text%__1cMvframeStream2t6MpnKJavaThread_i_v_; text: .text%__1cIGraphKitTuse_exception_state6MpnNSafePointNode__pnENode__; text: .text%__1cIGraphKitSclear_saved_ex_oop6FpnNSafePointNode__pnENode__; -text: .text%__1cNloadConI0NodeFclone6kM_pnENode__; -text: .text%__1cJimmI0OperFclone6kM_pnIMachOper__; -text: .text%__1cLCastP2LNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cMLinkResolverbBresolve_static_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; text: .text%__1cKcmpOpUOperNgreater_equal6kM_i_; text: .text%__1cPClassFileParserYparse_checked_exceptions6MpHInSconstantPoolHandle_pnGThread__1_; -text: .text%__1cXcopy_u2_with_conversion6FpH0i_v_: classFileParser.o; -text: .text%__1cENodeGis_Sub6M_pnHSubNode__; text: .text%__1cJAssemblerFtestq6MpnMRegisterImpl_2_v_; text: .text%__1cJCMoveNodeLis_cmove_id6FpnOPhaseTransform_pnENode_44pnIBoolNode__4_; text: .text%__1cZresource_reallocate_bytes6FpcLL_0_; text: .text%__1cKstoreINodeFreloc6kM_i_; -text: .text%__1cLsymbolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cQciBytecodeStreamJget_klass6Mri_pnHciKlass__; -text: .text%__1cKMemBarNode2t6M_v_; text: .text%__1cIDivINodeGOpcode6kM_i_; -text: .text%__1cFframeRis_compiled_frame6kMpi_i_; -text: .text%__1cPCallRuntimeNodeOis_CallRuntime6kM_pk0_; text: .text%__1cPshrI_rReg_1NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cMorI_rRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFParseQarray_addressing6MnJBasicType_ippknEType__pnENode__; text: .text%__1cPsalI_rReg_1NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cHciField2t6MpnPfieldDescriptor__v_; -text: .text%__1cIAddLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cIModINodeGOpcode6kM_i_; text: .text%__1cNmulL_rRegNodeErule6kM_I_; -text: .text%__1cSsafePoint_pollNodeHtwo_adr6kM_I_; -text: .text%__1cDCHAManalyze_call6FnLKlassHandle_11nMsymbolHandle_2_pnJCHAResult__; -text: .text%__1cJCHAResult2t6MnLKlassHandle_nMsymbolHandle_2pnNGrowableArray4n0B___pnNGrowableArray4nMmethodHandle___n0E_i_v_; text: .text%__1cMLinkResolverbCresolve_virtual_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cJCHAResultOis_monomorphic6kM_i_; -text: .text%__1cIciMethodXfind_monomorphic_target6MpnHciKlass_22_p0_; -text: .text%__1cQconstMethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cKMemBarNodeJis_MemBar6kM_pk0_; -text: .text%__1cIGraphKitOinsert_mem_bar6MpnKMemBarNode__v_; -text: .text%__1cHi2sNodeHtwo_adr6kM_I_; text: .text%__1cJCodeCacheMfind_nmethod6Fpv_pnHnmethod__; text: .text%__1cLConvL2INodeLbottom_type6kM_pknEType__; text: .text%__1cMLinkResolverbCresolve_special_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cNIdealLoopTreeObeautify_loops6MpnOPhaseIdealLoop__i_; text: .text%__1cScompP_mem_rRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKstoreBNodePoper_input_base6kM_I_; text: .text%__1cRandI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSCallLeafDirectNodeRis_safepoint_node6kM_i_; text: .text%__1cJloadLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cSCallLeafDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKMemBarNodeJideal_reg6kM_I_; -text: .text%__1cJloadSNodeHtwo_adr6kM_I_; text: .text%__1cVConstantOopWriteValueIwrite_on6MpnUDebugInfoWriteStream__v_; text: .text%__1cUDebugInfoWriteStreamMwrite_handle6MpnI_jobject__v_; -text: .text%__1cLmethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cNaddI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJlog2_long6Fx_i_; text: .text%__1cTconvL2I_reg_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cIGraphKitPpush_pair_local6Mi_v_; text: .text%__1cOjmpLoopEndNodePoper_input_base6kM_I_; @@ -2852,131 +1813,74 @@ text: .text%__1cHCmpNodeGadd_id6kM_pknEType__; text: .text%JVM_InternString; text: .text%__1cLStringTableGintern6FpnHoopDesc_pnGThread__2_; text: .text%__1cFKlassQup_cast_abstract6M_p0_; -text: .text%__1cNGrowableArray4CpnENode__2t6Mii_v_; -text: .text%__1cPCheckCastPPNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cSInterpreterRuntimeMmonitorenter6FpnKJavaThread_pnPBasicObjectLock__v_; text: .text%__1cSCountedLoopEndNodeKstride_con6kM_i_; -text: .text%__1cTconvI2L_reg_memNodeJnum_opnds6kM_I_; text: .text%__1cPCheckCastPPNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cPClassFileStreamHskip_u26MipnGThread__v_; text: .text%__1cLOpaque1NodeLbottom_type6kM_pknEType__; text: .text%__1cOPhaseIdealLoopRsplit_thru_region6MpnENode_2_2_; -text: .text%__1cFTypeFCeq6kMpknEType__i_; -text: .text%__1cNmethodOopDescOis_initializer6kM_i_; text: .text%__1cFciEnvRfind_system_klass6MpnIciSymbol__pnHciKlass__; text: .text%__1cNandL_rRegNodeErule6kM_I_; text: .text%__1cQjmpDir_shortNodeJlabel_set6MrnFLabel_I_v_; text: .text%__1cQjmpDir_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKjmpDirNodeUshort_branch_version6M_pnIMachNode__; -text: .text%__1cQjmpDir_shortNodeJis_Branch6kM_I_; text: .text%__1cLBlock_ArrayEgrow6MI_v_; -text: .text%__1cOtypeArrayKlassQarray_klass_impl6MiipnGThread__pnMklassOopDesc__; -text: .text%__1cSCompareAndSwapNodeLbottom_type6kM_pknEType__; -text: .text%__1cOtypeArrayKlassQarray_klass_impl6FnUtypeArrayKlassHandle_iipnGThread__pnMklassOopDesc__; text: .text%__1cMPhaseChaitinVfind_base_for_derived6MppnENode_2rI_2_; text: .text%__1cSindIndexOffsetOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cSindIndexOffsetOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cNGrowableArray4CI_Egrow6Mi_v_; -text: .text%__1cHMatcherMreturn_value6Fii_nLOptoRegPair__; text: .text%__1cFStateP_sub_Op_ConvI2L6MpknENode__v_; -text: .text%__1cOjmpLoopEndNodeGpinned6kM_i_; -text: .text%__1cNxorI_rRegNodePoper_input_base6kM_I_; -text: .text%__1cJCHAResultSmonomorphic_target6kM_nMmethodHandle__; text: .text%__1cNsubI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPCountedLoopNodeNstride_is_con6kM_i_; text: .text%__1cRcmpFastUnlockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbBjava_lang_ref_SoftReferenceJtimestamp6FpnHoopDesc__x_; -text: .text%__1cQLRUMaxHeapPolicyWshould_clear_reference6MpnHoopDesc__i_; -text: .text%__1cLcastP2LNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cPcheckCastPPNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cPciInstanceKlassLfind_method6MpnIciSymbol_2_pnIciMethod__; -text: .text%__1cZCallInterpreterDirectNodeMideal_Opcode6kM_i_; text: .text%__1cILoopNodeHsize_of6kM_I_; text: .text%__1cSindIndexOffsetOperFscale6kM_i_; -text: .text%__1cMjniIdSupportNto_method_oop6FpnK_jmethodID__pnNmethodOopDesc__; text: .text%__1cLBoxLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cRSignatureIterator2t6MpnGThread_pnNsymbolOopDesc__v_; -text: .text%__1cRaddI_rReg_memNodeJnum_opnds6kM_I_; -text: .text%__1cFKlassQoop_is_typeArray6kM_i_; -text: .text%__1cGOopMapPset_derived_oop6Miiii_v_; text: .text%__1cKstoreBNodeMideal_Opcode6kM_i_; text: .text%__1cHi2bNodeErule6kM_I_; text: .text%__1cFStateN_sub_Op_LoadI6MpknENode__v_; -text: .text%__1cMloadConDNodePoper_input_base6kM_I_; text: .text%__1cPCountedLoopNodeJinit_trip6kM_pnENode__; text: .text%__1cICmpLNodeDsub6kMpknEType_3_3_; text: .text%__1cRjmpConU_shortNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cRjmpConU_shortNodeMideal_Opcode6kM_i_; -text: .text%__1cMloadConDNodeHtwo_adr6kM_I_; -text: .text%__1cHnmethodKpc_desc_at6MpC_pnGPcDesc__; -text: .text%__1cJrRegPOperFclone6kM_pnIMachOper__; -text: .text%__1cFParseNpush_constant6MnKciConstant__i_; -text: .text%__1cMrep_stosNodeJnum_opnds6kM_I_; text: .text%__1cOClearArrayNodeKmatch_edge6kMI_I_; text: .text%__1cUvisit_all_interfaces6FpnPobjArrayOopDesc_pnXInterfaceVisiterClosure__v_; text: .text%__1cXmembar_release_lockNodeLbottom_type6kM_pknEType__; text: .text%__1cPThreadLocalNodeJideal_reg6kM_I_; -text: .text%__1cPstoreImmI16NodeJnum_opnds6kM_I_; text: .text%__1cTleaPIdxScaleOffNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIGraphKitbMset_predefined_output_for_runtime_call6MpnENode_pnMMergeMemNode__v_; -text: .text%__1cFKlassXsearch_secondary_supers6kMpnMklassOopDesc__i_; text: .text%__1cPsarI_rReg_1NodeErule6kM_I_; text: .text%__1cOPhaseIdealLoopPis_counted_loop6MpnENode_pnNIdealLoopTree__2_; -text: .text%__1cIGraphKitOhas_ex_handler6M_i_; text: .text%__1cMloadConDNodeErule6kM_I_; text: .text%__1cHCompileQsync_stack_slots6kM_i_; text: .text%__1cNMemoryServiceXtrack_memory_pool_usage6FpnKMemoryPool__v_; -text: .text%__1cMURShiftLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cKoopFactoryTnew_system_objArray6FipnGThread__pnPobjArrayOopDesc__; text: .text%__1cNdecI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cPClassFileParserbHparse_constant_pool_integer_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cTDebugInfoReadStream2t6MpknHnmethod_i_v_; -text: .text%__1cRsalI_rReg_immNodeJnum_opnds6kM_I_; text: .text%__1cJScopeDescJstream_at6kMi_pnTDebugInfoReadStream__; text: .text%__1cVjava_lang_ClassLoaderGparent6FpnHoopDesc__2_; text: .text%__1cIPhaseIFGEinit6MI_v_; -text: .text%__1cMPhaseChaitinQgather_lrg_masks6Mi_v_; text: .text%__1cJPhaseLiveHcompute6MI_v_; text: .text%JVM_GetCPClassNameUTF; text: .text%__1cMLinkResolverUresolve_invokestatic6FrnICallInfo_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cNstoreImmINodeJnum_opnds6kM_I_; -text: .text%__1cITypeNodeHis_Type6M_p0_; text: .text%__1cHRetNodePoper_input_base6kM_I_; -text: .text%__1cLCastP2LNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%jni_GetStringLength: jni.o; text: .text%__1cPloadConUL32NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cOFastUnlockNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cPciObjArrayKlassNelement_klass6M_pnHciKlass__; -text: .text%__1cNprefetchwNodeHtwo_adr6kM_I_; -text: .text%__1cNnmethodLocker2T6M_v_; text: .text%__1cKoopFactoryYnew_permanent_shortArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cKstoreCNodeHtwo_adr6kM_I_; -text: .text%__1cQleaPIdxScaleNodeJnum_opnds6kM_I_; text: .text%__1cNaddL_rRegNodeMcisc_operand6kM_i_; text: .text%__1cOcompL_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cTDebugInfoReadStreamLread_handle6M_nGHandle__; -text: .text%__1cJScopeDesc2t6MpknHnmethod_i_v_; text: .text%__1cFStateR_sub_Op_LoadRange6MpknENode__v_; text: .text%__1cOcompiledVFrame2t6MpknFframe_pknLRegisterMap_pnKJavaThread_pnJScopeDesc__v_; text: .text%__1cOcompU_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPcmovI_reg_gNodePoper_input_base6kM_I_; -text: .text%__1cLProfileDataSis_VirtualCallData6M_i_; -text: .text%__1cSmembar_acquireNodePoper_input_base6kM_I_; text: .text%__1cNsubL_rRegNodeMideal_Opcode6kM_i_; text: .text%__1cJMarkSweepMfollow_stack6F_v_; -text: .text%__1cNnmethodLocker2t6MpnHnmethod__v_; text: .text%__1cNloadRangeNodeFreloc6kM_i_; -text: .text%__1cNGrowableArray4CpnKciTypeFlowJJsrRecord__2t6Miirk2i_v_; text: .text%__1cTcompareAndSwapLNodeErule6kM_I_; text: .text%__1cZCallDynamicJavaDirectNodeMideal_Opcode6kM_i_; -text: .text%__1cMURShiftINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cOcompiledVFrameGis_top6kM_i_; text: .text%__1cSInterpreterRuntimeLmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; text: .text%__1cNxorI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cRshrI_rReg_immNodeJnum_opnds6kM_I_; text: .text%__1cKciTypeFlow2t6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cKciTypeFlowXmark_known_range_starts6M_v_; -text: .text%__1cKciTypeFlowLfind_ranges6M_v_; text: .text%__1cSFixupMirrorClosureJdo_object6MpnHoopDesc__v_; text: .text%__1cKciTypeFlowKmap_blocks6M_v_; text: .text%__1cKciTypeFlowHdo_flow6M_v_; @@ -2984,12 +1888,9 @@ text: .text%__1cKciTypeFlowPget_start_state6M_pkn0ALStateVector__; text: .text%__1cKciTypeFlowKflow_types6M_v_; text: .text%__1cIAndINodeGadd_id6kM_pknEType__; text: .text%__1cMURShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cJloadBNodeHtwo_adr6kM_I_; text: .text%__1cKPSYoungGenRcapacity_in_bytes6kM_L_; -text: .text%__1cHMonitorGnotify6M_i_; text: .text%__1cYciExceptionHandlerStreamPcount_remaining6M_i_; text: .text%__1cFParseXcatch_inline_exceptions6MpnNSafePointNode__v_; -text: .text%__1cHMatcherNfind_receiver6Fi_i_; text: .text%__1cMciMethodDataJload_data6M_v_; text: .text%__1cIciMethodJload_code6M_v_; text: .text%__1cJCmpL3NodeGOpcode6kM_i_; @@ -3000,14 +1901,9 @@ text: .text%__1cOGenerateOopMapGdo_ldc6Mii_v_; text: .text%__1cMTypeKlassPtrFxdual6kM_pknEType__; text: .text%__1cIMaxINodeGOpcode6kM_i_; text: .text%__1cOPhaseTransform2t6MnFPhaseLPhaseNumber__v_; -text: .text%__1cPsalI_rReg_1NodeJnum_opnds6kM_I_; text: .text%__1cQSystemDictionarybAcompute_loader_lock_object6FnGHandle_pnGThread__1_; -text: .text%__1cHciKlassMis_interface6M_i_; -text: .text%__1cPmethodDataKlassRoop_is_methodData6kM_i_; text: .text%__1cIMulLNodeGadd_id6kM_pknEType__; -text: .text%__1cJloadCNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cQSystemDictionaryRpreloaded_oops_do6FpnKOopClosure__v_; -text: .text%__1cIVMThreadHoops_do6MpnKOopClosure__v_; text: .text%__1cLJvmtiExportHoops_do6FpnKOopClosure__v_; text: .text%__1cMFlatProfilerHoops_do6FpnKOopClosure__v_; text: .text%__1cQVMOperationQdDueueHoops_do6MpnKOopClosure__v_; @@ -3020,83 +1916,55 @@ text: .text%__1cQPlaceholderTableHoops_do6MpnKOopClosure__v_; text: .text%__1cNThreadServiceHoops_do6FpnKOopClosure__v_; text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_; text: .text%__1cXJvmtiCurrentBreakpointsHoops_do6FpnKOopClosure__v_; -text: .text%__1cIUniverseHoops_do6FpnKOopClosure_i_v_; text: .text%__1cbGJvmtiVMObjectAllocEventCollectorXoops_do_for_all_threads6FpnKOopClosure__v_; text: .text%__1cRindIndexScaleOperJnum_edges6kM_I_; text: .text%__1cRindIndexScaleOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cKstoreBNodeJnum_opnds6kM_I_; text: .text%__1cNSignatureInfoJdo_double6M_v_; text: .text%__1cJAssemblerEmovl6MnHAddress_pnMRegisterImpl__v_; text: .text%__1cRsalI_rReg_immNodeHtwo_adr6kM_I_; text: .text%__1cMrdx_RegIOperEtype6kM_pknEType__; text: .text%__1cMciMethodData2t6MnQmethodDataHandle__v_; -text: .text%__1cSmembar_acquireNodeHtwo_adr6kM_I_; text: .text%__1cRshrI_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cKJNIHandlesLmake_global6FnGHandle_i_pnI_jobject__; text: .text%jni_ExceptionOccurred: jni.o; text: .text%jni_SetObjectArrayElement: jni.o; -text: .text%__1cSCompareAndSwapNodeKmatch_edge6kMI_I_; text: .text%__1cISubINodeJideal_reg6kM_I_; -text: .text%__1cRMachSafePointNodeGpinned6kM_i_; -text: .text%__1cIimmIOperFclone6kM_pnIMachOper__; -text: .text%__1cMloadConINodeFclone6kM_pnENode__; text: .text%__1cICodeHeapIallocate6ML_pv_; text: .text%__1cICodeHeapPsearch_freelist6ML_pnJFreeBlock__; -text: .text%__1cbACallCompiledJavaDirectNodeMideal_Opcode6kM_i_; text: .text%__1cPcmpFastLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLCastP2LNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cNmulL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cJLoadBNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cVmerge_point_too_heavy6FpnHCompile_pnENode__i_: loopopts.o; text: .text%jni_GetByteArrayRegion: jni.o; -text: .text%__1cFParseKdo_put_xxx6MpknHTypePtr_pnENode_pnHciField_i_v_; -text: .text%__1cHnmethodOis_java_method6kM_i_; text: .text%__1cQjava_lang_StringLutf8_length6FpnHoopDesc__i_; text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc_ii_pc_; text: .text%jni_GetStringUTFRegion: jni.o; text: .text%jni_GetStringUTFLength: jni.o; text: .text%__1cOMacroAssemblerWbang_stack_with_offset6Mi_v_; -text: .text%__1cRsarL_rReg_immNodePoper_input_base6kM_I_; text: .text%__1cScompU_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFciEnvZcheck_klass_accessibility6MpnHciKlass_pnMklassOopDesc__i_; -text: .text%__1cIciObjectMis_obj_array6M_i_; -text: .text%__1cOLibraryCallKitOgenerate_guard6MpnENode_pnKRegionNode_f_v_; text: .text%__1cMoutputStream2t6Mi_v_; text: .text%__1cMstringStreamJas_string6M_pc_; text: .text%__1cMstringStream2t6ML_v_; text: .text%__1cJloadINodeFreloc6kM_i_; text: .text%__1cMstringStream2T6M_v_; text: .text%__1cOMethodLivenessKBasicBlockJstore_two6Mi_v_; -text: .text%__1cJloadINodeIpeephole6MpnFBlock_ipnNPhaseRegAlloc_ri_pnIMachNode__; -text: .text%__1cTconvL2I_reg_regNodeJnum_opnds6kM_I_; text: .text%__1cPClassFileParserXverify_legal_class_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cRandI_rReg_immNodeJnum_opnds6kM_I_; text: .text%__1cOAbstractICacheQinvalidate_range6FpCi_v_; text: .text%__1cOAbstractICachePcall_flush_stub6FpCi_v_; text: .text%__1cICodeBlobMset_oop_maps6MpnJOopMapSet__v_; text: .text%__1cRClassPathZipEntryLopen_stream6Mpkc_pnPClassFileStream__; text: .text%__1cJCodeCacheIallocate6Fi_pnICodeBlob__; -text: .text%__1cIGraphKitOmake_slow_call6MpknITypeFunc_pCpkcpnENode_88_8_; text: .text%__1cICodeHeapPfollowing_block6MpnJFreeBlock__2_; text: .text%__1cOClearArrayNodeLbottom_type6kM_pknEType__; -text: .text%__1cPshrI_rReg_1NodeJnum_opnds6kM_I_; text: .text%__1cEDictIdoubhash6M_v_; -text: .text%__1cTleaPIdxScaleOffNodeLbottom_type6kM_pknEType__; text: .text%__1cIProjNodeJideal_reg6kM_I_; text: .text%__1cHi2sNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cLimmI_16OperJnum_edges6kM_I_; -text: .text%__1cUmembar_cpu_orderNodePoper_input_base6kM_I_; text: .text%__1cPfieldDescriptorRint_initial_value6kM_i_; -text: .text%__1cTCallInterpreterNodeGOpcode6kM_i_; text: .text%__1cMloadConLNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cRaddL_rReg_immNodeErule6kM_I_; text: .text%__1cJLoadLNodeJideal_reg6kM_I_; -text: .text%__1cTleaPIdxScaleOffNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cHCompileTset_cached_top_node6MpnENode__v_; text: .text%__1cENodeMsetup_is_top6M_v_; text: .text%__1cIGotoNodeGOpcode6kM_i_; text: .text%__1cOMachPrologNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHCompilePneed_stack_bang6kMi_i_; text: .text%__1cKBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; text: .text%__1cNFingerprinterIdo_array6Mii_v_; text: .text%jni_GetArrayLength: jni.o; @@ -3104,46 +1972,25 @@ text: .text%__1cJloadSNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cKReturnNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cSInterpreterRuntimeE_new6FpnKJavaThread_pnTconstantPoolOopDesc_i_v_; text: .text%__1cMorI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cKTypeRawPtrFempty6kM_i_; -text: .text%__1cHRetNodeGpinned6kM_i_; -text: .text%__1cHRetNodeHtwo_adr6kM_I_; text: .text%__1cPsalI_rReg_1NodeHtwo_adr6kM_I_; text: .text%__1cNinstanceKlassVadd_dependent_nmethod6MpnHnmethod__v_; text: .text%__1cHRetNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cPGlobalTLABStatsKinitialize6M_v_; -text: .text%__1cbBjava_lang_ref_SoftReferenceJset_clock6Fx_v_; -text: .text%__1cUParallelScavengeHeapTensure_parseability6M_v_; text: .text%__1cTDerivedPointerTableFclear6F_v_; -text: .text%__1cNMemoryServiceGgc_end6Fi_v_; -text: .text%__1cSReferenceProcessorQprocess_phaseJNI6M_v_; text: .text%__1cRLowMemoryDetectorRdetect_low_memory6F_v_; -text: .text%__1cSReferenceProcessorbDenqueue_discovered_references6M_i_; -text: .text%__1cSReferenceProcessorbDprocess_discovered_references6M_v_; text: .text%__1cNCollectedHeapbFaccumulate_statistics_all_tlabs6M_v_; text: .text%__1cTDerivedPointerTablePupdate_pointers6F_v_; -text: .text%__1cNCollectedHeapTensure_parseability6M_v_; -text: .text%__1cNCollectedHeapOfill_all_tlabs6M_v_; text: .text%__1cKDictionaryHoops_do6MpnKOopClosure__v_; -text: .text%__1cSReferenceProcessorbBenqueue_discovered_reflists6MppnHoopDesc__v_; text: .text%__1cWThreadLocalAllocBufferbFaccumulate_statistics_before_gc6F_v_; -text: .text%__1cSReferenceProcessorOprocess_phase16MppnHoopDesc_pnPReferencePolicy_pnRBoolObjectClosure_pnKOopClosure_pnLVoidClosure__v_; text: .text%__1cQLRUMaxHeapPolicy2t6M_v_; -text: .text%__1cPGCMemoryManagerIgc_begin6M_v_; -text: .text%__1cPGCMemoryManagerGgc_end6M_v_; text: .text%__1cVLoaderConstraintTableHoops_do6MpnKOopClosure__v_; text: .text%__1cUParallelScavengeHeapbFaccumulate_statistics_all_tlabs6M_v_; text: .text%__1cKPSYoungGenPupdate_counters6M_v_; -text: .text%__1cXjava_lang_ref_ReferenceRpending_list_addr6F_ppnHoopDesc__; text: .text%__1cNMemoryServiceStrack_memory_usage6F_v_; text: .text%__1cQSystemDictionaryHoops_do6FpnKOopClosure__v_; -text: .text%__1cNMemoryServiceIgc_begin6Fi_v_; -text: .text%__1cUParallelScavengeHeapOfill_all_tlabs6M_v_; text: .text%__1cXTraceMemoryManagerStats2T6M_v_; -text: .text%__1cXTraceMemoryManagerStats2t6Mi_v_; text: .text%__1cUParallelScavengeHeapPupdate_counters6M_v_; -text: .text%__1cQPlaceholderTableJnew_entry6MipnNsymbolOopDesc_pnHoopDesc__pnQPlaceholderEntry__; text: .text%__1cQPlaceholderTableMremove_entry6MiInMsymbolHandle_nGHandle__v_; -text: .text%__1cQPlaceholderTableJadd_entry6MiInMsymbolHandle_nGHandle__v_; text: .text%__1cNCollectedHeapQresize_all_tlabs6M_v_; text: .text%__1cUParallelScavengeHeapQresize_all_tlabs6M_v_; text: .text%__1cWThreadLocalAllocBufferQresize_all_tlabs6F_v_; @@ -3152,80 +1999,53 @@ text: .text%__1cYGCAdaptivePolicyCountersbBupdate_counters_from_policy6M_v_; text: .text%__1cbAPSGCAdaptivePolicyCountersbBupdate_counters_from_policy6M_v_; text: .text%__1cNmethodOopDescbEfast_exception_handler_bci_for6MnLKlassHandle_ipnGThread__i_; text: .text%__1cSInterpreterRuntimebFexception_handler_for_exception6FpnKJavaThread_pnHoopDesc__pC_; -text: .text%__1cNaddL_rRegNodeJnum_opnds6kM_I_; -text: .text%__1cNaddL_rRegNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cKstoreLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cUPSAdaptiveSizePolicyZdecay_supplemental_growth6Mi_v_; text: .text%__1cUPSAdaptiveSizePolicybPeden_increment_with_supplement_aligned_up6ML_L_; -text: .text%__1cUPSAdaptiveSizePolicyQdecaying_gc_cost6kM_d_; -text: .text%__1cUPSAdaptiveSizePolicybDcompute_generation_free_space6MLLLLLLLi_v_; text: .text%__1cIPSOldGenMmax_gen_size6M_L_; text: .text%__1cUPSAdaptiveSizePolicybHclear_generation_free_space_flags6M_v_; text: .text%__1cUPSAdaptiveSizePolicyOeden_increment6MLI_L_; -text: .text%__1cUPSAdaptiveSizePolicyVadjust_for_throughput6MipL1_v_; text: .text%__1cQSystemDictionaryTload_instance_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cUmembar_cpu_orderNodeHtwo_adr6kM_I_; text: .text%__1cPjava_lang_ClassNcreate_mirror6FnLKlassHandle_pnGThread__pnHoopDesc__; -text: .text%__1cLklassVtableRinitialize_vtable6MpnGThread__v_; text: .text%__1cJAssemblerDjmp6MrnFLabel_nJrelocInfoJrelocType__v_; text: .text%__1cPshrI_rReg_1NodeHtwo_adr6kM_I_; text: .text%__1cRmulI_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cNandI_rRegNodePoper_input_base6kM_I_; text: .text%__1cOMachEpilogNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cLklassVtableVinitialize_from_super6MnLKlassHandle__i_; text: .text%__1cIVMThreadHexecute6FpnMVM_Operation__v_; text: .text%__1cLklassVtableOcopy_vtable_to6MpnLvtableEntry__v_; text: .text%__1cQinstanceRefKlassZacquire_pending_list_lock6FpnJBasicLock__v_; -text: .text%__1cQinstanceRefKlassbKrelease_and_notify_pending_list_lock6FipnJBasicLock__v_; text: .text%__1cPVM_GC_OperationbKrelease_and_notify_pending_list_lock6M_v_; -text: .text%__1cPVM_GC_OperationOskip_operation6kM_i_; -text: .text%__1cPVM_GC_OperationNdoit_prologue6M_i_; text: .text%__1cPVM_GC_OperationZacquire_pending_list_lock6M_v_; text: .text%__1cMTypeKlassPtrFxmeet6kMpknEType__3_; text: .text%__1cKReturnNodeEhash6kM_I_; -text: .text%__1cHnmethodVis_dependent_on_entry6MpnMklassOopDesc_2pnNmethodOopDesc__i_; -text: .text%__1cbDVM_ParallelGCFailedAllocation2t6MLiiI_v_; text: .text%__1cLlog2_intptr6Fl_i_; text: .text%__1cKKlass_vtbl2n6FLrnLKlassHandle_ipnGThread__pv_; text: .text%__1cFKlassVbase_create_klass_oop6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__pnMklassOopDesc__; text: .text%__1cFKlassRinitialize_supers6MpnMklassOopDesc_pnGThread__v_; -text: .text%__1cMloadConPNodeFclone6kM_pnENode__; -text: .text%__1cIimmPOperFclone6kM_pnIMachOper__; text: .text%__1cFKlassRbase_create_klass6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__1_; text: .text%__1cSCallLeafDirectNodeKmethod_set6Ml_v_; text: .text%__1cJcmpOpOperJnot_equal6kM_i_; text: .text%__1cJloadLNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cRAbstractAssemblerbDgenerate_stack_overflow_check6Mi_v_; -text: .text%__1cCosOunguard_memory6FpcL_i_; text: .text%__1cNandL_rRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cLLShiftINodeJideal_reg6kM_I_; -text: .text%__1cRsarI_rReg_immNodePoper_input_base6kM_I_; -text: .text%__1cGThreadRis_Watcher_thread6kM_i_; text: .text%__1cJLoadSNodeJideal_reg6kM_I_; -text: .text%__1cTconvL2I_reg_regNodeHtwo_adr6kM_I_; text: .text%__1cIPhaseIFGISquareUp6M_v_; text: .text%__1cPciObjectFactoryMvm_symbol_at6Fi_pnIciSymbol__; text: .text%__1cCosJyield_all6Fi_v_; -text: .text%__1cKciTypeFlowLStateVectorOmeet_exception6MpnPciInstanceKlass_pk1_i_; text: .text%__1cCosbCmake_polling_page_unreadable6F_v_; -text: .text%__1cONMethodSweeperFsweep6F_v_; text: .text%__1cSObjectSynchronizerVdeflate_idle_monitors6F_v_; text: .text%__1cMCounterDecayFdecay6F_v_; -text: .text%__1cCosOprotect_memory6FpcL_i_; text: .text%__1cORuntimeServiceWrecord_safepoint_begin6F_v_; text: .text%__1cORuntimeServicebDrecord_safepoint_synchronized6F_v_; text: .text%__1cCosXserialize_thread_states6F_v_; text: .text%__1cUSafepointSynchronizeFbegin6F_v_; -text: .text%__1cUSafepointSynchronizeRis_cleanup_needed6F_i_; text: .text%__1cUSafepointSynchronizeQdo_cleanup_tasks6F_v_; -text: .text%__1cRInlineCacheBufferIis_empty6F_i_; text: .text%__1cRInlineCacheBufferUupdate_inline_caches6F_v_; -text: .text%__1cTAbstractInterpreterRnotice_safepoints6F_v_; text: .text%__1cNloadConP0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cCosbAmake_polling_page_readable6F_v_; text: .text%__1cORuntimeServiceUrecord_safepoint_end6F_v_; text: .text%__1cUSafepointSynchronizeDend6F_v_; -text: .text%__1cTAbstractInterpreterRignore_safepoints6F_v_; text: .text%__1cQVMOperationQdDueueGinsert6MpnMVM_Operation_2_v_; text: .text%__1cQVMOperationQdDueueGunlink6MpnMVM_Operation__v_; text: .text%__1cMVM_OperationIevaluate6M_v_; @@ -3235,38 +2055,20 @@ text: .text%__1cQVMOperationQdDueueOqueue_add_back6MipnMVM_Operation__v_; text: .text%__1cGThreadMget_priority6Fpk0_nOThreadPriority__; text: .text%__1cCosTget_native_priority6FpknGThread_pi_nIOSReturn__; text: .text%__1cIVMThreadSevaluate_operation6MpnMVM_Operation__v_; -text: .text%__1cQVMOperationQdDueueDadd6MpnMVM_Operation__i_; text: .text%__1cSmembar_releaseNodeLbottom_type6kM_pknEType__; text: .text%__1cCosGrandom6F_l_; -text: .text%__1cNget_next_hash6F_l_: synchronizer.o; -text: .text%__1cNJvmtiGCMarker2t6Mi_v_; text: .text%__1cPVM_GC_OperationNdoit_epilogue6M_v_; -text: .text%__1cKPSScavengeXshould_attempt_scavenge6F_i_; -text: .text%__1cKPSScavengeQinvoke_no_policy6Fpi_i_; text: .text%__1cPGlobalTLABStatsHpublish6M_v_; text: .text%__1cUinitialize_hashtable6FppnLNameSigHash__v_; -text: .text%__1cPclear_hashtable6FppnLNameSigHash__v_; -text: .text%__1cQciBytecodeStreamUis_unresolved_string6kM_i_; -text: .text%__1cFciEnvUis_unresolved_string6kMpnPciInstanceKlass_i_i_; -text: .text%__1cFciEnvZis_unresolved_string_impl6kMpnNinstanceKlass_i_i_; text: .text%__1cNtestP_regNodeFreloc6kM_i_; -text: .text%__1cNSCMemProjNodeGis_CFG6kM_i_; -text: .text%__1cKPSScavengeGinvoke6Fpi_v_; -text: .text%__1cUParallelScavengeHeapTfailed_mem_allocate6MpiLii_pnIHeapWord__; -text: .text%__1cbDVM_ParallelGCFailedAllocationEname6kM_pkc_; text: .text%__1cbDVM_ParallelGCFailedAllocationEdoit6M_v_; text: .text%__1cKDictionaryJnew_entry6MIpnMklassOopDesc_pnHoopDesc__pnPDictionaryEntry__; text: .text%__1cKDictionaryJadd_klass6MnMsymbolHandle_nGHandle_nLKlassHandle__v_; text: .text%__1cQSystemDictionaryRupdate_dictionary6FiIiInTinstanceKlassHandle_nGHandle_pnGThread__v_; -text: .text%__1cQSystemDictionaryRcheck_constraints6FiInTinstanceKlassHandle_nGHandle_pnGThread__v_; text: .text%__1cQSystemDictionaryQfind_placeholder6FiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cVLoaderConstraintTablePcheck_or_update6MnTinstanceKlassHandle_nGHandle_nMsymbolHandle__pkc_; text: .text%__1cKoopFactoryXnew_permanent_byteArray6FipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cNIdealLoopTreeTcheck_inner_safepts6MpnOPhaseIdealLoop__v_; text: .text%__1cPsarI_rReg_1NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKciTypeFlowPflow_exceptions6MpnNGrowableArray4Cpn0AFBlock___pnNGrowableArray4CpnPciInstanceKlass___pn0ALStateVector__v_; -text: .text%__1cIAndINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cIciObjectOis_null_object6kM_i_; text: .text%__1cNIdealLoopTreeNDCE_loop_body6M_v_; text: .text%__1cNprefetchwNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cXmembar_release_lockNodeEsize6kMpnNPhaseRegAlloc__I_; @@ -3277,10 +2079,8 @@ text: .text%__1cMPhaseChaitinMreset_uf_map6MI_v_; text: .text%__1cMPhaseChaitinSbuild_ifg_physical6MpnMResourceArea__I_; text: .text%__1cNPhaseCoalescePcoalesce_driver6M_v_; text: .text%__1cNdecI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSComputeAdapterInfoHdo_long6M_v_; text: .text%__1cOGenerateOopMapJdo_astore6Mi_v_; text: .text%__1cSTailCalljmpIndNodeNis_block_proj6kM_pknENode__; -text: .text%__1cIciObjectMhas_encoding6M_i_; text: .text%__1cMrcx_RegIOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cIMulLNodeImul_ring6kMpknEType_3_3_; text: .text%__1cHPhiNodeKmake_blank6FpnENode_2_p0_; @@ -3291,11 +2091,7 @@ text: .text%JVM_GetMethodIxByteCodeLength; text: .text%JVM_GetMethodIxByteCode; text: .text%JVM_GetMethodIxExceptionIndexes; text: .text%JVM_GetMethodIxExceptionsCount; -text: .text%__1cENodeUdepends_only_on_test6kM_i_; -text: .text%__1cXmembar_acquire_lockNodePoper_input_base6kM_I_; text: .text%__1cOPhaseIdealLoopMdominated_by6MpnENode_2_v_; -text: .text%__1cNGrowableArray4nLKlassHandle__Icontains6kMrkn0A__i_; -text: .text%__1cLGCTaskQdDueue2t6Mi_v_; text: .text%__1cNaddL_rRegNodeErule6kM_I_; text: .text%__1cGGCTask2t6Mn0AEKindEkind__v_; text: .text%__1cZSerialOldToYoungRootsTaskEname6M_pc_; @@ -3312,7 +2108,6 @@ text: .text%__1cNMonitorSupplyHreserve6F_pnHMonitor__; text: .text%__1cUWaitForBarrierGCTaskIwait_for6M_v_; text: .text%__1cUWaitForBarrierGCTaskIdestruct6M_v_; text: .text%__1cUWaitForBarrierGCTaskHdestroy6Fp0_v_; -text: .text%__1cUWaitForBarrierGCTask2t6Mi_v_; text: .text%__1cUWaitForBarrierGCTaskGcreate6F_p0_; text: .text%__1cNBarrierGCTaskIdestruct6M_v_; text: .text%__1cNBarrierGCTaskOdo_it_internal6MpnNGCTaskManager_I_v_; @@ -3324,35 +2119,21 @@ text: .text%__1cGGCTaskIdestruct6M_v_; text: .text%__1cSCardTableExtensionRscavenge_contents6MpnQObjectStartArray_pnMMutableSpace_pnIHeapWord_pnSPSPromotionManager__v_; text: .text%__1cHThreadsZcreate_thread_roots_tasks6FpnLGCTaskQdDueue__v_; text: .text%__1cKPSYoungGenLswap_spaces6M_v_; -text: .text%__1cUPSAdaptiveSizePolicybPcompute_survivor_space_size_and_threshold6MiiL_i_; text: .text%__1cUParallelScavengeHeapQresize_young_gen6MLL_v_; -text: .text%__1cUPSAdaptiveSizePolicyPupdate_averages6MiLL_v_; -text: .text%__1cKPSYoungGenRresize_generation6MLL_i_; text: .text%__1cKPSYoungGenGresize6MLL_v_; text: .text%__1cKPSYoungGenNresize_spaces6MLL_v_; -text: .text%__1cHMatcherKcan_be_arg6Fi_i_; -text: .text%__1cHMatcherQis_spillable_arg6Fi_i_; -text: .text%__1cUPSAdaptiveSizePolicyOshould_full_GC6ML_i_; text: .text%__1cSAdaptiveSizePolicybIupdate_minor_pause_young_estimator6Md_v_; text: .text%__1cUPSAdaptiveSizePolicybGupdate_minor_pause_old_estimator6Md_v_; text: .text%__1cNsubL_rRegNodeMcisc_operand6kM_i_; text: .text%__1cMStartOSRNodeGOpcode6kM_i_; text: .text%__1cRsubI_rReg_memNodeErule6kM_I_; -text: .text%__1cQinstanceRefKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cXmembar_acquire_lockNodeHtwo_adr6kM_I_; text: .text%__1cNandI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cNcmovI_regNodePoper_input_base6kM_I_; text: .text%__1cMURShiftINodeJideal_reg6kM_I_; text: .text%__1cMorI_rRegNodeQuse_cisc_RegMask6M_v_; text: .text%__1cLRShiftINodeJideal_reg6kM_I_; -text: .text%__1cLklassItableRinitialize_itable6M_v_; text: .text%__1cLklassVtableQfill_in_mirandas6Mri_v_; text: .text%__1cRandI_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cSmembar_releaseNodePoper_input_base6kM_I_; -text: .text%__1cFKlassZcan_be_primary_super_slow6kM_i_; -text: .text%__1cJrRegLOperFclone6kM_pnIMachOper__; text: .text%__1cFStateR_sub_Op_LoadKlass6MpknENode__v_; -text: .text%__1cRmethodDataOopDescJis_mature6kM_i_; text: .text%__1cJcmpOpOperEless6kM_i_; text: .text%__1cFKlassWappend_to_sibling_list6M_v_; text: .text%__1cOcompL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -3361,39 +2142,23 @@ text: .text%__1cNloadKlassNodeFreloc6kM_i_; text: .text%__1cRshrI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIAndINodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cTjava_lang_ThrowableNset_backtrace6FpnHoopDesc_2_v_; -text: .text%__1cPcmovI_reg_gNodeMideal_Opcode6kM_i_; text: .text%__1cIAndINodeGmul_id6kM_pknEType__; text: .text%__1cTClassLoadingServiceScompute_class_size6FpnNinstanceKlass__L_; text: .text%__1cLklassVtableQget_num_mirandas6FpnMklassOopDesc_pnPobjArrayOopDesc_4_i_; -text: .text%__1cIVerifierQrelax_verify_for6FpnHoopDesc__i_; -text: .text%__1cLklassVtablebKcompute_vtable_size_and_num_mirandas6Fri1pnMklassOopDesc_pnPobjArrayOopDesc_nLAccessFlags_pnHoopDesc_pnNsymbolOopDesc_5_v_; text: .text%__1cPClassFileParserbAparse_classfile_attributes6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cRaddI_rReg_memNodeRis_cisc_alternate6kM_i_; -text: .text%__1cVjava_lang_ClassLoaderRis_trusted_loader6FpnHoopDesc__i_; -text: .text%__1cNmethodOopDescMsort_methods6FpnPobjArrayOopDesc_222_v_; text: .text%__1cQSystemDictionaryQadd_to_hierarchy6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cPClassFileParserUcompute_oop_map_size6MnTinstanceKlassHandle_ii_i_; -text: .text%__1cPClassFileParserOparseClassFile6MnMsymbolHandle_nGHandle_2r1pnGThread__nTinstanceKlassHandle__; text: .text%__1cPClassFileParserVset_precomputed_flags6MnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileParserNfill_oop_maps6MnTinstanceKlassHandle_ii_v_; text: .text%__1cPClassFileParserbDcompute_transitive_interfaces6MnTinstanceKlassHandle_nOobjArrayHandle_pnGThread__2_; text: .text%__1cQSystemDictionaryVdefine_instance_class6FnTinstanceKlassHandle_pnGThread__v_; text: .text%__1cPClassFileParserbCcheck_super_interface_access6FnTinstanceKlassHandle_pnGThread__v_; text: .text%__1cPClassFileParserYcheck_super_class_access6FnTinstanceKlassHandle_pnGThread__v_; text: .text%__1cPClassFileParserbBcheck_final_method_override6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cSinstanceKlassKlassXallocate_instance_klass6MiiiinNReferenceType_pnGThread__pnMklassOopDesc__; -text: .text%__1cPClassFileParserQparse_interfaces6MnSconstantPoolHandle_nGHandle_2pnGThread__nOobjArrayHandle__; text: .text%__1cPClassFileParserTparse_constant_pool6MpnGThread__nSconstantPoolHandle__; text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_; -text: .text%__1cTClassLoadingServiceTnotify_class_loaded6FpnNinstanceKlass_i_v_; text: .text%__1cLklassItableZsetup_itable_offset_table6FnTinstanceKlassHandle__v_; -text: .text%__1cPClassFileParserMparse_fields6MnSconstantPoolHandle_ipnUFieldAllocationCount_pnOobjArrayHandle_pnGThread__nPtypeArrayHandle__; -text: .text%__1cPClassFileParserNparse_methods6MnSconstantPoolHandle_ipnLAccessFlags_ppnPobjArrayOopDesc_66pnGThread__nOobjArrayHandle__; text: .text%__1cPClassFileParserMsort_methods6MnOobjArrayHandle_111pnGThread__nPtypeArrayHandle__; text: .text%__1cPClassFileParserbBparse_constant_pool_entries6MnSconstantPoolHandle_ipnGThread__v_; text: .text%__1cIUniverseTflush_dependents_on6FnTinstanceKlassHandle__v_; -text: .text%__1cKoopFactoryQnew_constantPool6FipnGThread__pnTconstantPoolOopDesc__; -text: .text%__1cRconstantPoolKlassIallocate6MipnGThread__pnTconstantPoolOopDesc__; text: .text%__1cPClassFileStream2t6MpCipc_v_; text: .text%__1cNinstanceKlassbBdo_local_static_fields_impl6FnTinstanceKlassHandle_pFpnPfieldDescriptor_pnGThread__v5_v_; text: .text%__1cJCodeCachebKnumber_of_nmethods_with_dependencies6F_i_; @@ -3402,9 +2167,6 @@ text: .text%__1cNinstanceKlassYcompute_secondary_supers6MipnGThread__pnPobjArray text: .text%__1cNinstanceKlassSprocess_interfaces6MpnGThread__v_; text: .text%__1cNinstanceKlassQinit_implementor6M_v_; text: .text%__1cNinstanceKlassQeager_initialize6MpnGThread__v_; -text: .text%__1cKoopFactoryRnew_instanceKlass6FiiiinNReferenceType_pnGThread__pnMklassOopDesc__; -text: .text%__1cQSystemDictionaryVresolve_super_or_fail6FnMsymbolHandle_1nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cNinstanceKlassZcan_be_primary_super_slow6kM_i_; text: .text%__1cKTypeRawPtrEmake6FpC_pk0_; text: .text%__1cScompI_rReg_memNodeMideal_Opcode6kM_i_; text: .text%__1cScompI_rReg_memNodePoper_input_base6kM_I_; @@ -3413,11 +2175,8 @@ text: .text%__1cOMethodLivenessSpropagate_liveness6M_v_; text: .text%__1cOMethodLivenessRinit_basic_blocks6M_v_; text: .text%__1cOMethodLivenessNinit_gen_kill6M_v_; text: .text%__1cOMethodLivenessQcompute_liveness6M_v_; -text: .text%__1cFKlassRoop_is_methodData6kM_i_; -text: .text%__1cFVTuneQstart_class_load6F_v_; text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_; text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__; -text: .text%__1cFVTuneOend_class_load6F_v_; text: .text%__1cQSystemDictionaryRload_shared_class6FnTinstanceKlassHandle_nGHandle_pnGThread__1_; text: .text%__1cQSystemDictionaryRload_shared_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; text: .text%__1cQSystemDictionaryRfind_shared_class6FnMsymbolHandle__pnMklassOopDesc__; @@ -3428,77 +2187,47 @@ text: .text%__1cRaddL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cPClassFileParserbKparse_classfile_sourcefile_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; text: .text%__1cKciTypeFlowLStateVectorGdo_ldc6MpnQciBytecodeStream__v_; text: .text%__1cMPhaseIterGVNIoptimize6M_v_; -text: .text%__1cOrFlagsRegUOperFclone6kM_pnIMachOper__; text: .text%__1cNmulL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cMrdi_RegPOperJnum_edges6kM_I_; text: .text%__1cRsalI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cLklassVtableYadd_new_mirandas_to_list6FpnNGrowableArray4CpnNmethodOopDesc___pnPobjArrayOopDesc_6pnMklassOopDesc__v_; text: .text%__1cQPackageHashtableMcompute_hash6Mpkci_I_; -text: .text%__1cWconstantPoolCacheKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cRsalL_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cIConINodeHget_int6kMpi_i_; text: .text%__1cJMarkSweepSFollowStackClosureHdo_void6M_v_; -text: .text%__1cICallNodeRis_CallStaticJava6kM_pknSCallStaticJavaNode__; text: .text%__1cLOpaque2NodeGOpcode6kM_i_; text: .text%__1cOGenerateOopMapJppdupswap6Mipkc_v_; -text: .text%__1cILoopNode2t6MpnENode_2_v_; text: .text%__1cJloadBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cPClassFileStreamGget_u86MpnGThread__X_; text: .text%__1cKstoreINodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cTconvI2L_reg_memNodeRis_cisc_alternate6kM_i_; text: .text%__1cScompP_mem_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIVerifierRverify_byte_codes6FnTinstanceKlassHandle_pnGThread__v_; text: .text%__1cIRewriterHrewrite6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cIRewriterScompute_index_maps6FnSconstantPoolHandle_rpnIintArray_rpnIintStack__v_; -text: .text%__1cIRewriterXnew_constant_pool_cache6FrnIintArray_pnGThread__nXconstantPoolCacheHandle__; -text: .text%__1cIintArray2t6Mii_v_; text: .text%__1cNinstanceKlassNrewrite_class6MpnGThread__v_; -text: .text%__1cKoopFactoryVnew_constantPoolCache6FipnGThread__pnYconstantPoolCacheOopDesc__; -text: .text%__1cNinstanceKlassWadd_loader_constraints6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cNinstanceKlassLverify_code6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cWconstantPoolCacheKlassIallocate6MipnGThread__pnYconstantPoolCacheOopDesc__; text: .text%__1cYconstantPoolCacheOopDescKinitialize6MrnIintArray__v_; text: .text%__1cFframeWsender_for_entry_frame6kMpnLRegisterMap__0_; text: .text%__1cHPhiNodeDcmp6kMrknENode__I_; -text: .text%__1cSmembar_releaseNodeHtwo_adr6kM_I_; text: .text%__1cSObjectSynchronizerJnotifyall6FnGHandle_pnGThread__v_; text: .text%__1cKoopFactoryWnew_permanent_intArray6FipnGThread__pnQtypeArrayOopDesc__; text: .text%__1cPClassFileParserVparse_exception_table6MIInSconstantPoolHandle_pnGThread__nPtypeArrayHandle__; -text: .text%__1cPClassFileParserbSparse_constant_pool_interfacemethodref_entry6MnSconstantPoolHandle_ipnGThread__v_; text: .text%__1cWCountInterfacesClosureEdoit6MpnMklassOopDesc_i_v_; text: .text%__1cMtlsLoadPNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cNmodI_rRegNodeMideal_Opcode6kM_i_; text: .text%__1cNtestL_regNodeMideal_Opcode6kM_i_; -text: .text%__1cRaddI_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cIConFNodeGOpcode6kM_i_; text: .text%__1cLOpaque1NodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cTconvI2L_reg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNSharedRuntimebOraw_exception_handler_for_return_address6FpC_1_; -text: .text%__1cNSharedRuntimebKexception_handler_for_return_address6FpC_1_; -text: .text%__1cOMethodLivenessKBasicBlockPmerge_exception6MnGBitMap__i_; -text: .text%__1cTconvI2L_reg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIAndINodeKmul_opcode6kM_i_; text: .text%__1cIAndINodeKadd_opcode6kM_i_; -text: .text%__1cPcmovI_reg_gNodeJnum_opnds6kM_I_; text: .text%__1cKCMoveINodeGOpcode6kM_i_; -text: .text%__1cKarrayKlassMoop_is_array6kM_i_; text: .text%__1cIRootNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cPloadConUL32NodeHsize_of6kM_I_; text: .text%__1cJAssemblerEandq6MpnMRegisterImpl_i_v_; text: .text%__1cLClassLoaderOlookup_package6Fpkc_pnLPackageInfo__; text: .text%__1cQPackageHashtableJget_entry6MiIpkcL_pnLPackageInfo__; -text: .text%__1cIGraphKitRmerge_fast_memory6MpnENode_2i_v_; text: .text%JVM_Clone; text: .text%__1cLklassItableTcompute_itable_size6FnOobjArrayHandle__i_; -text: .text%__1cUCallCompiledJavaNodeGOpcode6kM_i_; text: .text%__1cPsalI_rReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKadd_n_reqs6FpnENode_1_v_: graphKit.o; text: .text%__1cSTailCalljmpIndNodeMideal_Opcode6kM_i_; text: .text%__1cQComputeCallStackJdo_double6M_v_; text: .text%__1cKciTypeFlowLStateVectorMdo_putstatic6MpnQciBytecodeStream__v_; -text: .text%__1cLClassLoaderLadd_package6Fpkci_i_; text: .text%__1cIGraphKitHopt_iff6MpnENode_2_2_; -text: .text%__1cIGraphKitOmake_merge_mem6MpnENode_22_v_; text: .text%__1cGEventsDlog6FpkcE_v_; text: .text%__1cMLinkResolverbHlookup_instance_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; text: .text%__1cSsafePoint_pollNodeEsize6kMpnNPhaseRegAlloc__I_; @@ -3506,29 +2235,16 @@ text: .text%__1cNSharedRuntimebWnative_method_throw_unsatisfied_link_error_entry text: .text%__1cPshrI_rReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cFParseWensure_phis_everywhere6M_v_; text: .text%__1cNsubL_rRegNodeErule6kM_I_; -text: .text%__1cNIdealLoopTreeUiteration_split_impl6MpnOPhaseIdealLoop_rnJNode_List__v_; -text: .text%__1cNIdealLoopTreebBpolicy_do_remove_empty_loop6MpnOPhaseIdealLoop__i_; -text: .text%__1cNIdealLoopTreeOpolicy_peeling6kMpnOPhaseIdealLoop__i_; -text: .text%__1cIBoolNodeZis_counted_loop_exit_test6M_i_; -text: .text%__1cJloadCNodeHtwo_adr6kM_I_; text: .text%__1cUPSMarkSweepDecoratorVdestination_decorator6F_p0_; -text: .text%__1cTGeneratePairingInfoRpossible_gc_point6MpnOBytecodeStream__i_; -text: .text%__1cENode2n6FL_pv_; text: .text%__1cSvframeStreamCommonZsecurity_get_caller_frame6Mi_v_; text: .text%__1cKBufferBlob2n6FLI_pv_; text: .text%__1cFParseKarray_load6MnJBasicType__v_; -text: .text%__1cICodeBlob2t6Mpkcii_v_; text: .text%__1cKBufferBlob2t6Mpkci_v_; text: .text%__1cKBufferBlobGcreate6Fpkci_p0_; text: .text%__1cKciTypeFlowLStateVectorLdo_putfield6MpnQciBytecodeStream__v_; text: .text%__1cHnmethodNscope_desc_at6MpC_pnJScopeDesc__; -text: .text%__1cHnmethodJcode_size6kM_i_; -text: .text%__1cRtestP_reg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cRtestP_reg_memNodePoper_input_base6kM_I_; text: .text%__1cOPhaseIdealLoopQset_subtree_ctrl6MpnENode__v_; -text: .text%__1cOjmpLoopEndNodeJnum_opnds6kM_I_; text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_i_v_; -text: .text%__1cRconstantPoolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cNinstanceKlassbBcall_class_initializer_impl6FnTinstanceKlassHandle_pnGThread__v_; text: .text%__1cNinstanceKlassRclass_initializer6M_pnNmethodOopDesc__; text: .text%__1cNinstanceKlassWcall_class_initializer6MpnGThread__v_; @@ -3536,19 +2252,11 @@ text: .text%__1cNinstanceKlassbOset_initialization_state_and_notify_impl6FnTinst text: .text%__1cNinstanceKlassbJset_initialization_state_and_notify6Mn0AKClassState_pnGThread__v_; text: .text%__1cNRelocIteratorTlocs_and_index_size6Fii_i_; text: .text%__1cMrdi_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cTStackWalkCompPolicyYmethod_back_branch_event6MnMmethodHandle_iipnGThread__v_; -text: .text%__1cFTypeDCeq6kMpknEType__i_; -text: .text%__1cJLoadCNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cNtestL_regNodeHtwo_adr6kM_I_; text: .text%__1cTconvL2I_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRCompilationPolicybJreset_counter_for_back_branch_event6MnMmethodHandle__v_; text: .text%__1cMrax_RegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNmodI_rRegNodePoper_input_base6kM_I_; text: .text%__1cNSignatureInfoIdo_short6M_v_; text: .text%JVM_GetFieldIxModifiers; -text: .text%__1cNsubL_rRegNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cNandL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cNsubL_rRegNodeJnum_opnds6kM_I_; text: .text%__1cTMachCallRuntimeNodePret_addr_offset6M_i_; text: .text%__1cOcompiledVFrameEcode6kM_pnHnmethod__; text: .text%__1cICodeHeapTmark_segmap_as_used6MLL_v_; @@ -3563,21 +2271,17 @@ text: .text%__1cJStartNodeHsize_of6kM_I_; text: .text%__1cILRG_List2t6MI_v_; text: .text%__1cHMatcherLreturn_addr6kM_i_; text: .text%__1cSindIndexOffsetOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cGBundlePinitialize_nops6FppnIMachNode__v_; text: .text%__1cOMachPrologNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cHMemNodeHsize_of6kM_I_; text: .text%__1cNSignatureInfoIdo_float6M_v_; text: .text%__1cRaddI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRmulI_rReg_immNodePoper_input_base6kM_I_; text: .text%__1cFParseNadd_safepoint6M_v_; text: .text%__1cFStateT_sub_Op_CheckCastPP6MpknENode__v_; text: .text%__1cRaddI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cOCompiledRFrameEinit6M_v_; text: .text%__1cGvframeDtop6kM_p0_; -text: .text%__1cPsarI_rReg_1NodeJnum_opnds6kM_I_; text: .text%__1cRmethodDataOopDescYcompute_extra_data_count6Fii_i_; text: .text%__1cPcheckCastPPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIciObjectIis_klass6M_i_; text: .text%__1cFStateM_sub_Op_SubI6MpknENode__v_; text: .text%__1cRxorI_rReg_immNodeMideal_Opcode6kM_i_; text: .text%__1cNloadConP0NodeHsize_of6kM_I_; @@ -3585,76 +2289,42 @@ text: .text%__1cJAssemblerEaddq6MpnMRegisterImpl_i_v_; text: .text%__1cJAssemblerEsubq6MpnMRegisterImpl_2_v_; text: .text%__1cXJNI_ArgumentPusherVaArgHiterate6ML_v_; text: .text%__1cTresource_free_bytes6FpcL_v_; -text: .text%__1cNSingletonBlobMdo_unloading6MpnRBoolObjectClosure_pnKOopClosure_i_v_; text: .text%__1cUPSMarkSweepDecoratorPadjust_pointers6M_v_; -text: .text%__1cUPSMarkSweepDecoratorHcompact6Mi_v_; text: .text%__1cUPSMarkSweepDecoratorKprecompact6M_v_; -text: .text%__1cbBconvI2L_reg_reg_reg_zexNodeMideal_Opcode6kM_i_; text: .text%__1cRindIndexScaleOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cRindIndexScaleOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cPCountedLoopNodeHsize_of6kM_I_; text: .text%__1cENodeHrm_prec6MI_v_; -text: .text%__1cHAddNodeGis_Add6kM_pk0_; text: .text%__1cHCompilebAvarargs_C_out_slots_killed6kM_I_; -text: .text%__1cTMachCallRuntimeNodeSis_MachCallRuntime6M_p0_; -text: .text%__1cMrax_RegIOperJnum_edges6kM_I_; text: .text%__1cICodeHeapLmerge_right6MpnJFreeBlock__v_; -text: .text%__1cNaddI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNmulL_rRegNodeQuse_cisc_RegMask6M_v_; text: .text%__1cWandI_rReg_imm65535NodeMideal_Opcode6kM_i_; -text: .text%__1cKReturnNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cRjmpConU_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLjmpConUNodeUshort_branch_version6M_pnIMachNode__; text: .text%__1cRjmpConU_shortNodeJlabel_set6MrnFLabel_I_v_; -text: .text%__1cRjmpConU_shortNodeJis_Branch6kM_I_; -text: .text%__1cKcmpOpUOperFclone6kM_pnIMachOper__; -text: .text%__1cRtestP_reg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFMutexbLwait_for_lock_blocking_implementation6MpnKJavaThread__v_; -text: .text%__1cIregDOperJnum_edges6kM_I_; -text: .text%__1cPciInstanceKlassTis_java_lang_Object6M_i_; text: .text%__1cSciExceptionHandlerLcatch_klass6M_pnPciInstanceKlass__; text: .text%__1cSindIndexOffsetOperNconstant_disp6kM_i_; text: .text%__1cIAndLNodeGadd_id6kM_pknEType__; text: .text%__1cLConvL2INodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cQleaPIdxScaleNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cIAndLNodeImul_ring6kMpknEType_3_3_; -text: .text%__1cRaddP_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cMloadConLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHMatcherQpost_fast_unlock6FpknENode__i_; text: .text%__1cFStateV_sub_Op_MemBarRelease6MpknENode__v_; text: .text%__1cOleaPIdxOffNodeMideal_Opcode6kM_i_; -text: .text%__1cILoopNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cScompI_rReg_memNodeRis_cisc_alternate6kM_i_; -text: .text%__1cScompI_rReg_memNodeJnum_opnds6kM_I_; text: .text%__1cJAssemblerDorq6MpnMRegisterImpl_nHAddress__v_; text: .text%__1cScompI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cKJNIHandlesOdestroy_global6FpnI_jobject_i_v_; text: .text%__1cPcmpFastLockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cXmembar_release_lockNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cTcompareAndSwapLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmethodOopDescTset_native_function6MpC_v_; text: .text%__1cKciTypeFlowLStateVectorJhalf_type6FpnGciType__3_; -text: .text%__1cQmerge_point_safe6FpnENode__i_: loopopts.o; -text: .text%__1cRaddL_rReg_immNodeJnum_opnds6kM_I_; -text: .text%__1cHMatcherUc_calling_convention6FpnLOptoRegPair_I_v_; -text: .text%__1cPCallRuntimeNodeScalling_convention6kMpnLOptoRegPair_I_v_; -text: .text%__1cUjni_invoke_nonstatic6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o; text: .text%__1cQSystemDictionaryRnumber_of_classes6F_i_; text: .text%__1cNaddL_rRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cNxorI_rRegNodeMcisc_operand6kM_i_; text: .text%__1cWCallLeafNoFPDirectNodePoper_input_base6kM_I_; -text: .text%__1cENodeHget_int6kMpi_i_; -text: .text%__1cPCountedLoopNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cJLoadFNodeGOpcode6kM_i_; text: .text%__1cQSystemDictionarybBresolve_array_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; -text: .text%__1cNincI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cPClassFileParserbEparse_constant_pool_long_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cPcmovI_reg_lNodePoper_input_base6kM_I_; text: .text%__1cJAssemblerEleaq6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cNinstanceKlassQarray_klass_impl6MipnGThread__pnMklassOopDesc__; text: .text%__1cJloadINodeIpipeline6kM_pknIPipeline__; text: .text%__1cHTypePtrFxmeet6kMpknEType__3_; -text: .text%__1cNprefetchwNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cFKlassTarray_klass_or_null6M_pnMklassOopDesc__; text: .text%__1cIPhaseIFGYCompute_Effective_Degree6M_v_; text: .text%__1cbCfind_class_from_class_loader6FpnHJNIEnv__nMsymbolHandle_CnGHandle_3CpnGThread__pnH_jclass__; @@ -3667,46 +2337,33 @@ text: .text%__1cScompU_rReg_memNodePoper_input_base6kM_I_; text: .text%__1cScompU_rReg_memNodeMideal_Opcode6kM_i_; text: .text%__1cRNativeGeneralJumpQjump_destination6kM_pC_; text: .text%__1cLRethrowNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cWCallLeafNoFPDirectNodeHtwo_adr6kM_I_; -text: .text%__1cNSafepointBlobHoops_do6MpnKOopClosure__v_; -text: .text%__1cSvframeStreamCommonYfill_from_compiled_frame6MpnHnmethod_i_v_; text: .text%__1cNandL_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cHnmethodQis_native_method6kM_i_; text: .text%__1cTleaPIdxScaleOffNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNmulL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cODataRelocationGoffset6M_i_; text: .text%__1cODataRelocationJset_value6MpC_v_; text: .text%__1cKRelocationRpd_set_data_value6MpCl_v_; text: .text%__1cLOptoRuntimeJstub_name6FpC_pkc_; -text: .text%__1cIMulINodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cFStateO_sub_Op_StoreB6MpknENode__v_; text: .text%__1cRaddL_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cIregFOperJnum_edges6kM_I_; text: .text%__1cRandI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIRootNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIRootNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cOleaPIdxOffNodePoper_input_base6kM_I_; text: .text%__1cJcmpOpOperKless_equal6kM_i_; text: .text%__1cNmethodOopDescVset_signature_handler6MpC_v_; text: .text%__1cIMulLNodeGmul_id6kM_pknEType__; -text: .text%__1cMrep_stosNodeHtwo_adr6kM_I_; text: .text%__1cHMemNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cNsubI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cHMemNodeScalculate_adr_type6FpknEType_pknHTypePtr__6_; text: .text%__1cRmulI_rReg_immNodeErule6kM_I_; text: .text%__1cURethrowExceptionNodePoper_input_base6kM_I_; text: .text%__1cNaddP_rRegNodePoper_input_base6kM_I_; text: .text%__1cFStateP_sub_Op_RShiftI6MpknENode__v_; -text: .text%__1cKstoreLNodeHtwo_adr6kM_I_; text: .text%__1cNnegI_rRegNodeMideal_Opcode6kM_i_; -text: .text%__1cbBconvI2L_reg_reg_reg_zexNodePoper_input_base6kM_I_; text: .text%__1cbFloadConL_0x6666666666666667NodeErule6kM_I_; text: .text%__1cNSharedRuntimeXfind_callee_info_helper6FpnKJavaThread_rnMvframeStream_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cIGraphKitNstore_barrier6MpnENode_22_v_; text: .text%__1cNmethodOopDescTverified_code_entry6M_pC_; text: .text%__1cNloadKlassNodeIpipeline6kM_pknIPipeline__; text: .text%__1cSmembar_acquireNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cMoutputStreamMdo_vsnprintf6FpcLpkcpnR__va_list_element_irL_3_; text: .text%__1cMoutputStreamFprint6MpkcE_v_; text: .text%__1cMURShiftLNodeJideal_reg6kM_I_; text: .text%__1cZPhaseConservativeCoalesce2t6MrnMPhaseChaitin__v_; @@ -3716,58 +2373,36 @@ text: .text%__1cMPhaseChaitinZcompress_uf_map_for_nodes6M_v_; text: .text%__1cZPhaseConservativeCoalesceGverify6M_v_; text: .text%__1cQComputeCallStackIdo_short6M_v_; text: .text%__1cNFingerprinterHdo_long6M_v_; -text: .text%__1cIciMethodRinstructions_size6M_i_; text: .text%__1cSsafePoint_pollNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cNloadConL0NodeLbottom_type6kM_pknEType__; -text: .text%__1cJimmL0OperJconstantL6kM_x_; -text: .text%__1cWandI_rReg_imm65535NodePoper_input_base6kM_I_; text: .text%__1cIAndINodeJideal_reg6kM_I_; text: .text%__1cZInterpreterMacroAssemblerKverify_oop6MpnMRegisterImpl_nITosState__v_; -text: .text%__1cYexternal_word_RelocationJpack_data6M_i_; -text: .text%__1cJimmP0OperFclone6kM_pnIMachOper__; -text: .text%__1cKRelocationYruntime_address_to_index6FpC_l_; text: .text%__1cOemit_d32_reloc6FrnKCodeBuffer_inJrelocInfoJrelocType_i_v_; text: .text%__1cYexternal_word_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cRsalL_rReg_immNodePoper_input_base6kM_I_; -text: .text%__1cLPhaseValues2T5B6M_v_; text: .text%__1cNstoreImmBNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFStateQ_sub_Op_URShiftL6MpknENode__v_; text: .text%__1cJNode_ListEyank6MpnENode__v_; -text: .text%__1cNxorI_rRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cNxorI_rRegNodeJnum_opnds6kM_I_; -text: .text%__1cJAssemblerEmovq6MpnMRegisterImpl_l_v_; text: .text%jni_ExceptionCheck: jni.o; text: .text%__1cMFastLockNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTCallDynamicJavaNodeEhash6kM_I_; -text: .text%__1cMalloc_object6FpnH_jclass_pnGThread__pnPinstanceOopDesc__: jni.o; -text: .text%__1cRshrL_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cIXorINodeLbottom_type6kM_pknEType__; text: .text%__1cJAssemblerEsubq6MpnMRegisterImpl_i_v_; text: .text%__1cNloadConL0NodeMideal_Opcode6kM_i_; -text: .text%__1cLPcDescCacheKpc_desc_at6kMpnHnmethod_pC_pnGPcDesc__; text: .text%__1cKBlock_ListGinsert6MIpnFBlock__v_; -text: .text%__1cKtype2basic6FpknEType__nJBasicType__; -text: .text%__1cQleaPIdxScaleNodeLbottom_type6kM_pknEType__; text: .text%__1cKklassKlassOklass_oop_size6kM_i_; -text: .text%__1cIGraphKitOnull_check_oop6MpnKRegionNode_pnENode_i_4_; -text: .text%__1cJloadCNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cRxorI_rReg_memNodeMideal_Opcode6kM_i_; text: .text%__1cKTypeAryPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; text: .text%__1cKTypeRawPtrEmake6FnHTypePtrDPTR__pk0_; text: .text%__1cJCodeCacheEfree6FpnICodeBlob__v_; text: .text%__1cICodeHeapPadd_to_freelist6MpnJHeapBlock__v_; text: .text%__1cICodeHeapKdeallocate6Mpv_v_; -text: .text%__1cFframeLnmethods_do6M_v_; text: .text%__1cJVectorSetGslamin6Mrk0_v_; text: .text%__1cFStateQ_sub_Op_URShiftI6MpknENode__v_; text: .text%__1cScompI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cRaddI_rReg_memNodeErule6kM_I_; -text: .text%__1cYexternal_word_RelocationWfix_relocation_at_move6Ml_v_; text: .text%__1cKRelocationYpd_get_address_from_code6M_pC_; text: .text%__1cRxorI_rReg_memNodePoper_input_base6kM_I_; text: .text%__1cXJNI_ArgumentPusherVaArgIget_long6M_v_; text: .text%__1cNandL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOCompilerOracleMshould_print6FnMmethodHandle__i_; text: .text%__1cNstoreImmBNodeFreloc6kM_i_; text: .text%__1cJcmpOpOperNgreater_equal6kM_i_; text: .text%__1cKBufferBlobEfree6Fp0_v_; @@ -3776,12 +2411,9 @@ text: .text%__1cKNativeCallXset_destination_mt_safe6MpC_v_; text: .text%__1cOGenerateOopMapIppop_any6Mi_v_; text: .text%__1cKNode_ArrayFclear6M_v_; text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc__pc_; -text: .text%__1cJAssemblerFpushq6MpnMRegisterImpl__v_; -text: .text%__1cIRootNodeHis_Root6M_p0_; text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; text: .text%__1cIJumpDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; text: .text%__1cRsalL_rReg_immNodeErule6kM_I_; -text: .text%__1cPstoreImmI16NodeHtwo_adr6kM_I_; text: .text%__1cQjava_lang_StringOchar_converter6FnGHandle_HHpnGThread__1_; text: .text%jni_NewObject: jni.o; text: .text%__1cNaddP_rRegNodeMideal_Opcode6kM_i_; @@ -3790,38 +2422,25 @@ text: .text%__1cFciEnvKcompile_id6M_I_; text: .text%__1cOPhaseIdealLoopNreorg_offsets6MpnNIdealLoopTree__v_; text: .text%__1cNtestL_regNodeErule6kM_I_; text: .text%__1cLOptoRuntimebAcomplete_monitor_exit_Type6F_pknITypeFunc__; -text: .text%__1cNstoreImmINodeHtwo_adr6kM_I_; text: .text%__1cIGraphKitNshared_unlock6MpnENode_2_v_; text: .text%__1cNSafePointNodeLpop_monitor6M_v_; text: .text%__1cRsarI_rReg_immNodeErule6kM_I_; -text: .text%__1cNtestL_regNodePoper_input_base6kM_I_; text: .text%__1cRsarL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cMindirectOperNbase_position6kM_i_; text: .text%__1cMindirectOperNconstant_disp6kM_i_; text: .text%__1cMTailCallNodeKmatch_edge6kMI_I_; text: .text%__1cKciTypeFlowLStateVectorGdo_new6MpnQciBytecodeStream__v_; -text: .text%__1cHMatcherPprior_fast_lock6FpknENode__i_; text: .text%__1cGIfNodeMdominated_by6MpnENode_pnMPhaseIterGVN__v_; text: .text%__1cFStateV_sub_Op_MemBarAcquire6MpknENode__v_; text: .text%__1cNSharedRuntimeQfind_callee_info6FpnKJavaThread_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; text: .text%__1cFKlassDLCA6Mp0_1_; -text: .text%__1cRtestP_reg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRtestP_reg_memNodeRis_cisc_alternate6kM_i_; -text: .text%__1cRtestP_reg_memNodeJnum_opnds6kM_I_; text: .text%__1cHciKlassVleast_common_ancestor6Mp0_1_; -text: .text%__1cUmembar_cpu_orderNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cUmembar_cpu_orderNodeLbottom_type6kM_pknEType__; -text: .text%__1cTcompareAndSwapLNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cNSCMemProjNodeLbottom_type6kM_pknEType__; -text: .text%__1cTcompareAndSwapLNodeHtwo_adr6kM_I_; text: .text%__1cJScopeDescGsender6kM_p0_; text: .text%__1cSindIndexOffsetOperOindex_position6kM_i_; text: .text%__1cSindIndexOffsetOperNbase_position6kM_i_; -text: .text%__1cNSharedRuntimeOresolve_helper6FpnKJavaThread_iipnGThread__nMmethodHandle__; text: .text%__1cNSafePointNodeMpush_monitor6MpknMFastLockNode__v_; -text: .text%__1cNSharedRuntimeSresolve_sub_helper6FpnKJavaThread_iipnGThread__nMmethodHandle__; text: .text%__1cOcompiledVFrameGsender6kM_pnGvframe__; -text: .text%__1cNtestU_regNodeHtwo_adr6kM_I_; text: .text%__1cTciConstantPoolCache2t6MpnFArena_i_v_; text: .text%__1cNGrowableArray4Cpv_2t6MpnFArena_iirk0_v_; text: .text%__1cKstoreFNodePoper_input_base6kM_I_; @@ -3832,13 +2451,11 @@ text: .text%__1cOMachEpilogNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNcmovI_regNodeMideal_Opcode6kM_i_; text: .text%__1cKCompiledIC2t6MpnKNativeCall__v_; text: .text%__1cFStateN_sub_Op_LoadL6MpknENode__v_; -text: .text%__1cNmodI_rRegNodeJnum_opnds6kM_I_; text: .text%__1cSCallLeafDirectNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cNSignatureInfoHdo_char6M_v_; text: .text%__1cNtestU_regNodeMideal_Opcode6kM_i_; text: .text%__1cFStateQ_sub_Op_CallLeaf6MpknENode__v_; text: .text%__1cRAbstractAssemblerFflush6M_v_; -text: .text%__1cJloadLNodeIpeephole6MpnFBlock_ipnNPhaseRegAlloc_ri_pnIMachNode__; text: .text%__1cJloadLNodeFreloc6kM_i_; text: .text%__1cSCallLeafDirectNodeFreloc6kM_i_; text: .text%__1cIGraphKitNgen_checkcast6MpnENode_2p2_2_; @@ -3847,50 +2464,31 @@ text: .text%__1cNsubL_rRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cXmembar_release_lockNodeIadr_type6kM_pknHTypePtr__; text: .text%__1cJAssemblerEmovq6MpnMRegisterImpl_2_v_; text: .text%__1cRmulL_rReg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cRsubI_rReg_memNodeRis_cisc_alternate6kM_i_; text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_nHAddress__v_; text: .text%__1cFframeRretrieve_receiver6MpnLRegisterMap__pnHoopDesc__; text: .text%__1cPBytecode_invokeNstatic_target6MpnGThread__nMmethodHandle__; text: .text%jni_NewGlobalRef: jni.o; -text: .text%__1cKciTypeFlowFRangeSprivate_copy_count6kMpn0AGJsrSet__i_; -text: .text%__1cOleaPIdxOffNodeJnum_opnds6kM_I_; text: .text%__1cOPhaseIdealLoopLdo_split_if6MpnENode__v_; text: .text%__1cNandI_rRegNodeMcisc_operand6kM_i_; text: .text%__1cHOrINodeGadd_id6kM_pknEType__; text: .text%__1cIPhaseCFGOinsert_goto_at6MII_v_; -text: .text%__1cOPhaseIdealLoop2t6MrnMPhaseIterGVN_pk0i_v_; text: .text%__1cOPhaseIdealLoopPbuild_loop_tree6M_v_; text: .text%__1cRsubI_rReg_memNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cIMinINodeLbottom_type6kM_pknEType__; -text: .text%__1cOjmpLoopEndNodeHtwo_adr6kM_I_; text: .text%__1cJLoadBNodeJideal_reg6kM_I_; -text: .text%__1cNnegI_rRegNodePoper_input_base6kM_I_; text: .text%__1cFStateS_sub_Op_FastUnlock6MpknENode__v_; text: .text%__1cXmembar_release_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRcmpFastUnlockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cMVirtualSpaceNreserved_size6kM_L_; text: .text%__1cScompU_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cRsarI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKStoreFNodeGOpcode6kM_i_; -text: .text%__1cLCastP2LNodeJideal_reg6kM_I_; text: .text%__1cPcmovI_reg_gNodeErule6kM_I_; -text: .text%__1cFStateP_sub_Op_CastP2L6MpknENode__v_; -text: .text%__1cScompU_rReg_memNodeRis_cisc_alternate6kM_i_; -text: .text%__1cScompU_rReg_memNodeJnum_opnds6kM_I_; text: .text%__1cScompU_rReg_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cWCallLeafNoFPDirectNodeRis_safepoint_node6kM_i_; text: .text%__1cQjava_lang_ThreadRset_thread_status6FpnHoopDesc_n0AMThreadStatus__v_; text: .text%__1cWCallLeafNoFPDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJAssemblerDjcc6Mn0AJCondition_pCnJrelocInfoJrelocType__v_; text: .text%__1cKstoreFNodeMideal_Opcode6kM_i_; text: .text%__1cIimmFOperJconstantF6kM_f_; -text: .text%__1cNcmovI_regNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cKTypeOopPtrSmake_from_constant6FpnIciObject__pk0_; -text: .text%__1cNcmovI_regNodeJnum_opnds6kM_I_; -text: .text%__1cJAssemblerEmovq6MnHAddress_i_v_; -text: .text%__1cIciObjectJis_method6M_i_; -text: .text%__1cIciObjectOis_method_data6M_i_; text: .text%__1cIDivINodeLbottom_type6kM_pknEType__; text: .text%__1cHOrINodeJideal_reg6kM_I_; text: .text%__1cNcmovI_regNodeMcisc_operand6kM_i_; @@ -3900,63 +2498,40 @@ text: .text%__1cNinstanceKlassUfind_interface_field6kMpnNsymbolOopDesc_2pnPfield text: .text%__1cJloadFNodeMideal_Opcode6kM_i_; text: .text%__1cbFunnecessary_membar_volatileNodeMideal_Opcode6kM_i_; text: .text%__1cSmembar_acquireNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cIAndLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cIAndLNodeKadd_opcode6kM_i_; text: .text%__1cFStateO_sub_Op_StoreC6MpknENode__v_; text: .text%__1cIAndLNodeKmul_opcode6kM_i_; text: .text%__1cRaddL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMrep_stosNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cXmembar_acquire_lockNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cFParseJdo_ifnull6MnIBoolTestEmask__v_; -text: .text%__1cMtlsLoadPNodeHtwo_adr6kM_I_; -text: .text%__1cIGraphKitOset_pair_local6MipnENode__v_; -text: .text%__1cJLoadCNodeJideal_reg6kM_I_; -text: .text%__1cPcmovI_reg_lNodeMideal_Opcode6kM_i_; -text: .text%__1cJCodeCacheXmark_for_deoptimization6FpnMklassOopDesc__i_; text: .text%__1cMrcx_RegIOperEtype6kM_pknEType__; -text: .text%__1cLConvL2INodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cOPhaseIdealLoopKDominators6M_v_; text: .text%__1cHNTarjanDDFS6Fp0rnJVectorSet_pnOPhaseIdealLoop_pI_i_; text: .text%__1cHNTarjanIsetdepth6MIpI_v_; text: .text%__1cIMulLNodeKmul_opcode6kM_i_; text: .text%__1cIMulLNodeKadd_opcode6kM_i_; text: .text%jni_SetLongField: jni.o; -text: .text%__1cOPhaseIdealLoopQbuild_loop_early6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_; -text: .text%__1cOPhaseIdealLoopPbuild_loop_late6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_; text: .text%__1cOPhaseIdealLoopRinit_dom_lca_tags6M_v_; text: .text%__1cKstoreLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cLPcDescCacheLadd_pc_desc6MpnGPcDesc__v_; -text: .text%__1cScheck_phi_clipping6FpnHPhiNode_rpnHConNode_rI45rpnENode_5_i_: cfgnode.o; text: .text%__1cJloadSNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cTconvI2L_reg_memNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cRsubI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMloadConFNodeMideal_Opcode6kM_i_; -text: .text%__1cTC2IAdapterGeneratorUgenerate_c2i_adapter6FnMmethodHandle__pnKC2IAdapter__; -text: .text%__1cKCompiledICIis_clean6kM_i_; text: .text%__1cNaddP_rRegNodeErule6kM_I_; -text: .text%__1cRmulL_rReg_immNodePoper_input_base6kM_I_; text: .text%__1cNmethodOopDescVclear_native_function6M_v_; -text: .text%__1cICodeBlobOis_java_method6kM_i_; -text: .text%__1cKVtableStubSpd_code_size_limit6Fi_i_; -text: .text%__1cIUniverseWis_out_of_memory_error6FnGHandle__i_; text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle_pnGThread__v_; text: .text%__1cTjava_lang_ThrowableQclear_stacktrace6FpnHoopDesc__v_; text: .text%__1cKJavaThreadGactive6F_p0_; text: .text%JVM_FillInStackTrace; text: .text%__1cTjava_lang_ThrowableTfill_in_stack_trace6FnGHandle__v_; text: .text%__1cSInterpreterRuntimePset_bcp_and_mdp6FpCpnKJavaThread__v_; -text: .text%__1cKJavaThreadNreguard_stack6MpC_i_; text: .text%__1cFframeZinterpreter_frame_set_bcp6MpC_v_; text: .text%jni_DeleteGlobalRef: jni.o; -text: .text%__1cKCompiledICZcompute_monomorphic_entry6FnMmethodHandle_nLKlassHandle_iirnOCompiledICInfo_pnGThread__v_; -text: .text%__1cNGrowableArray4nMmethodHandle__Icontains6kMrkn0A__i_; text: .text%__1cLOpaque2NodeEhash6kM_I_; text: .text%__1cICodeHeapLfirst_block6kM_pnJHeapBlock__; text: .text%__1cJCodeCacheFfirst6F_pnICodeBlob__; -text: .text%__1cJBytecodesRspecial_length_at6FpC_i_; text: .text%__1cFParseGdo_new6M_v_; text: .text%__1cFParseFBlockMadd_new_path6M_i_; -text: .text%__1cLklassItablebFinitialize_itable_for_interface6MpnMklassOopDesc_pnRitableMethodEntry__v_; text: .text%__1cJimmI0OperJnum_edges6kM_I_; text: .text%__1cRmulI_rReg_immNodeMcisc_operand6kM_i_; text: .text%__1cICodeHeapMmax_capacity6kM_L_; @@ -3974,103 +2549,65 @@ text: .text%__1cNobjArrayKlassIallocate6MipnGThread__pnPobjArrayOopDesc__; text: .text%__1cRmulI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cHciKlassGloader6M_pnHoopDesc__; text: .text%__1cIConDNodeGOpcode6kM_i_; -text: .text%__1cNandI_rRegNodeJnum_opnds6kM_I_; text: .text%__1cLRethrowNodeEhash6kM_I_; -text: .text%__1cTC2IAdapterGeneratorSstd_verified_entry6FnMmethodHandle__pC_; text: .text%__1cIDivLNodeGOpcode6kM_i_; -text: .text%__1cNandI_rRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cGThreadOis_Java_thread6kM_i_; text: .text%__1cSmembar_releaseNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cHMatcherQinline_cache_reg6F_i_; -text: .text%__1cbBconvI2L_reg_reg_reg_zexNodeJnum_opnds6kM_I_; text: .text%__1cbBInterpreterCodeletInterfaceRcode_size_to_size6kMi_i_; text: .text%__1cbBInterpreterCodeletInterfaceKinitialize6MpnEStub_i_v_; text: .text%jni_NewLocalRef: jni.o; text: .text%__1cSSetupItableClosureEdoit6MpnMklassOopDesc_i_v_; -text: .text%__1cLOptoRuntimebAresolve_opt_virtual_call_C6FpnKJavaThread__pC_; text: .text%__1cPstoreImmI16NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cLRShiftLNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cIemit_d166FrnKCodeBuffer_i_v_; text: .text%__1cKimmI16OperIconstant6kM_l_; text: .text%__1cPClassFileParserbNparse_classfile_inner_classes_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__H_; text: .text%__1cMloadConFNodeLbottom_type6kM_pknEType__; -text: .text%__1cENodeMis_CatchProj6kM_pknNCatchProjNode__; text: .text%__1cJCodeCacheNalive_nmethod6FpnICodeBlob__pnHnmethod__; text: .text%__1cJAssemblerGmovzbl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cIVMThreadMis_VM_thread6kM_i_; -text: .text%__1cPcmovI_reg_lNodeJnum_opnds6kM_I_; text: .text%__1cMloadConLNodeHsize_of6kM_I_; text: .text%__1cOMacroAssemblerSload_unsigned_byte6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cTconvI2L_reg_memNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cNaddL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cKstoreFNodeJnum_opnds6kM_I_; text: .text%__1cNaddL_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cSComputeAdapterInfoJdo_double6M_v_; -text: .text%__1cLimmUL32OperFclone6kM_pnIMachOper__; -text: .text%__1cPloadConUL32NodeFclone6kM_pnENode__; text: .text%__1cLLShiftLNodeJideal_reg6kM_I_; -text: .text%__1cMtlsLoadPNodePoper_input_base6kM_I_; text: .text%__1cPlocal_vsnprintf6FpcLpkcpnR__va_list_element__i_; -text: .text%__1cSComputeAdapterInfoHdo_bool6M_v_; text: .text%jio_vsnprintf; -text: .text%__1cURethrowExceptionNodeGpinned6kM_i_; text: .text%__1cNstoreImmINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIAndLNodeJideal_reg6kM_I_; -text: .text%__1cURethrowExceptionNodeHtwo_adr6kM_I_; text: .text%__1cNDispatchTableJset_entry6MirnKEntryPoint__v_; text: .text%jio_snprintf; text: .text%__1cNSafePointNodeKgrow_stack6MpnIJVMState_I_v_; -text: .text%__1cbBconvI2L_reg_reg_reg_zexNodeErule6kM_I_; text: .text%__1cURethrowExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRsarL_rReg_immNodeJnum_opnds6kM_I_; text: .text%__1cTcompareAndSwapLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%JVM_GetCPMethodModifiers; text: .text%__1cFStateR_sub_Op_SafePoint6MpknENode__v_; -text: .text%__1cSsafePoint_pollNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOCompilerOraclePshould_break_at6FnMmethodHandle__i_; -text: .text%__1cJloadCNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cQorI_rReg_immNodeMideal_Opcode6kM_i_; text: .text%__1cPsarI_rReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cLRShiftLNodeLbottom_type6kM_pknEType__; -text: .text%__1cKReturnNode2t6MpnENode_2222_v_; text: .text%__1cKReturnNodeJideal_reg6kM_I_; text: .text%__1cNinstanceKlassPadd_implementor6MpnMklassOopDesc__v_; text: .text%__1cRPrivilegedElementKinitialize6MpnMvframeStream_pnHoopDesc_p0pnGThread__v_; text: .text%JVM_DoPrivileged; text: .text%__1cOGenerateOopMapXreplace_all_CTS_matches6MnNCellTypeState_1_v_; -text: .text%__1cNIdealLoopTreeMis_loop_exit6kMpnENode_pnOPhaseIdealLoop__2_; text: .text%__1cPpoll_RelocationEtype6M_nJrelocInfoJrelocType__; text: .text%__1cSsafePoint_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cSsafePoint_pollNodeFreloc6kM_i_; text: .text%__1cLStrCompNodeGOpcode6kM_i_; text: .text%__1cJOopMapSet2t6M_v_; -text: .text%__1cKloadUBNodeZcheck_for_anti_dependence6kM_i_; -text: .text%__1cNobjArrayKlassOmulti_allocate6MipiipnGThread__pnHoopDesc__; text: .text%__1cKstoreCNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cENodeGOpcode6kM_i_; -text: .text%__1cOLibraryCallKitNtry_to_inline6M_i_; text: .text%__1cNFingerprinterHdo_bool6M_v_; text: .text%__1cOPhaseIdealLoopUsplit_if_with_blocks6MrnJVectorSet_rnKNode_Stack__v_; text: .text%__1cNmethodOopDescbDbuild_interpreter_method_data6FnMmethodHandle_pnGThread__v_; text: .text%__1cQLibraryIntrinsicIgenerate6MpnIJVMState__2_; text: .text%__1cLOopRecorderIoop_size6M_i_; -text: .text%__1cHnmethodOexception_size6kM_i_; -text: .text%__1cHnmethodPscopes_pcs_size6kM_i_; text: .text%__1cYDebugInformationRecorderIpcs_size6M_i_; text: .text%__1cYDebugInformationRecorderJdata_size6M_i_; -text: .text%__1cHnmethodQscopes_data_size6kM_i_; -text: .text%__1cHnmethodJstub_size6kM_i_; text: .text%__1cHnmethodKtotal_size6kM_i_; text: .text%__1cNtestU_regNodeErule6kM_I_; text: .text%__1cJOopMapSetJheap_size6kM_i_; -text: .text%__1cICodeBlobWfix_relocation_at_move6Ml_v_; -text: .text%__1cKCodeBufferJcopy_code6MpnICodeBlob__v_; -text: .text%__1cNRelocIteratorMcreate_index6FpnKCodeBuffer_pnJrelocInfo_4_4_; -text: .text%__1cICodeBlobPallocation_size6FpnKCodeBuffer_ii_I_; text: .text%__1cRAbstractAssemblerOcode_fill_byte6F_i_; -text: .text%__1cICodeBlob2t6MpkcpnKCodeBuffer_iiipnJOopMapSet_i_v_; text: .text%__1cMrdx_RegLOperEtype6kM_pknEType__; -text: .text%__1cKCodeBufferPcopy_relocation6MpnICodeBlob__v_; text: .text%__1cVPatchingRelocIteratorHprepass6M_v_; text: .text%__1cVPatchingRelocIteratorIpostpass6M_v_; text: .text%__1cJOopMapSetHcopy_to6MpC_v_; @@ -4079,16 +2616,13 @@ text: .text%__1cINodeHash2t6Mp0_v_; text: .text%__1cOPhaseTransform2t6Mp0nFPhaseLPhaseNumber__v_; text: .text%__1cJAssemblerDjmp6MnHAddress__v_; text: .text%__1cOJNIHandleBlockRrebuild_free_list6M_v_; -text: .text%__1cSstring_compareNodeZcheck_for_anti_dependence6kM_i_; text: .text%jni_GetObjectArrayElement: jni.o; text: .text%__1cKCompiledICSset_to_monomorphic6MrknOCompiledICInfo__v_; -text: .text%__1cIDivINodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cVCallRuntimeDirectNodeMideal_Opcode6kM_i_; text: .text%__1cICmpDNodeGOpcode6kM_i_; text: .text%__1cPcmovI_reg_gNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFStateM_sub_Op_AndI6MpknENode__v_; text: .text%__1cHCompilebBregister_library_intrinsics6M_v_; -text: .text%__1cNGrowableArray4CpnNCallGenerator__2t6Mii_v_; text: .text%__1cETypeKInitialize6FpnHCompile__v_; text: .text%__1cYDebugInformationRecorder2t6MpnLOopRecorder__v_; text: .text%__1cOCompileWrapper2t6MpnHCompile__v_; @@ -4110,12 +2644,9 @@ text: .text%__1cXPhaseAggressiveCoalesceGverify6M_v_; text: .text%__1cJStartNodeJideal_reg6kM_I_; text: .text%__1cHMatcher2t6MrnJNode_List__v_; text: .text%__1cFArena2t6ML_v_; -text: .text%__1cIPhaseCFGOschedule_early6MrnJVectorSet_rnJNode_List_rnLBlock_Array__i_; text: .text%__1cWNode_Backward_Iterator2t6MpnENode_rnJVectorSet_rnJNode_List_rnLBlock_Array__v_; text: .text%__1cHMatcherFmatch6M_v_; text: .text%__1cFStateM_sub_Op_Goto6MpknENode__v_; -text: .text%__1cIPhaseCFGNschedule_late6MrnJVectorSet_rnJNode_List_rnNGrowableArray4CI___v_; -text: .text%__1cIPhaseCFGQFind_Inner_Loops6M_v_; text: .text%__1cIPhaseCFGQGlobalCodeMotion6MrnHMatcher_IrnJNode_List__v_; text: .text%__1cIPhaseCFGYEstimate_Block_Frequency6M_v_; text: .text%__1cIPhaseCFGJbuild_cfg6M_I_; @@ -4123,7 +2654,6 @@ text: .text%__1cHCompileICode_Gen6M_v_; text: .text%__1cMPhaseChaitin2t6MIrnIPhaseCFG_rnHMatcher__v_; text: .text%__1cMPhaseChaitinRRegister_Allocate6M_v_; text: .text%__1cMPhaseChaitinGde_ssa6M_v_; -text: .text%__1cMPhaseChaitinbGstretch_base_pointer_live_ranges6MpnMResourceArea__i_; text: .text%__1cNPhaseRegAllocTpd_preallocate_hook6M_v_; text: .text%__1cHMatcherPinit_spill_mask6MpnENode__v_; text: .text%__1cHMatcherTFixup_Save_On_Entry6M_v_; @@ -4136,30 +2666,21 @@ text: .text%__1cIPhaseCFGVschedule_pinned_nodes6MrnJVectorSet__v_; text: .text%__1cHCompileTframe_size_in_words6kM_i_; text: .text%__1cOCompileWrapper2T6M_v_; text: .text%__1cHCompileYinit_scratch_buffer_blob6M_v_; -text: .text%__1cHCompileYinit_scratch_locs_memory6M_v_; text: .text%__1cNPhasePeephole2t6MpnNPhaseRegAlloc_rnIPhaseCFG__v_; -text: .text%__1cJPhaseLive2T6M_v_; -text: .text%__1cNPhasePeephole2T6M_v_; text: .text%__1cHCompileGOutput6M_v_; text: .text%__1cHCompileQShorten_branches6MpnFLabel_ri333_v_; text: .text%__1cHCompileLFill_buffer6M_v_; text: .text%__1cHCompileTFillExceptionTables6MIpI1pnFLabel__v_; text: .text%__1cHCompileRScheduleAndBundle6M_v_; text: .text%__1cOMachPrologNodeFreloc6kM_i_; -text: .text%__1cNtestU_regNodePoper_input_base6kM_I_; -text: .text%__1cWemit_exception_handler6FrnKCodeBuffer__v_; text: .text%__1cWsize_exception_handler6F_I_; text: .text%__1cWImplicitExceptionTableIset_size6MI_v_; text: .text%__1cNPhasePeepholeMdo_transform6M_v_; text: .text%__1cMPhaseChaitinMfixup_spills6M_v_; -text: .text%__1cMPhaseChaitin2T6M_v_; text: .text%__1cNPhaseRegAllocPalloc_node_regs6Mi_v_; -text: .text%__1cKCodeBufferOrelocate_stubs6M_v_; -text: .text%__1cIPhaseCFGLRemoveEmpty6M_v_; text: .text%__1cLdo_liveness6FpnNPhaseRegAlloc_pnIPhaseCFG_pnKBlock_List_ipnFArena_pnEDict__v_: buildOopMap.o; text: .text%__1cHCompileMBuildOopMaps6M_v_; text: .text%__1cMPhaseChaitinbApost_allocate_copy_removal6M_v_; -text: .text%__1cNGrowableArray4CpnJNode_List__2t6Mii_v_; text: .text%__1cRsarL_rReg_immNodeHtwo_adr6kM_I_; text: .text%__1cOGenerateOopMapIcopy_cts6MpnNCellTypeState_2_i_; text: .text%__1cFStateM_sub_Op_CmpL6MpknENode__v_; @@ -4167,70 +2688,44 @@ text: .text%__1cJloadSNodeFreloc6kM_i_; text: .text%__1cFStateN_sub_Op_LoadS6MpknENode__v_; text: .text%__1cSInterpreterRuntimeOprofile_method6FpnKJavaThread_pC_i_; text: .text%__1cOCompiledRFrame2t6MnFframe_pnKJavaThread_pnGRFrame__v_; -text: .text%__1cKC2IAdapterOis_c2i_adapter6kM_i_; text: .text%__1cOCompiledRFrameKtop_method6kM_nMmethodHandle__; -text: .text%__1cOCompiledRFrameLis_compiled6kM_i_; -text: .text%__1cRmethodDataOopDescKinitialize6MpnNmethodOopDesc__v_; text: .text%__1cKoopFactoryOnew_methodData6FnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; -text: .text%__1cRmethodDataOopDescbGcompute_allocation_size_in_bytes6FpnNmethodOopDesc__i_; text: .text%__1cPmethodDataKlassIallocate6MnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; text: .text%__1cNxorI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRmethodDataOopDescbGcompute_allocation_size_in_words6FpnNmethodOopDesc__i_; text: .text%__1cRmethodDataOopDescPpost_initialize6MpnOBytecodeStream__v_; text: .text%__1cHRetNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFStateO_sub_Op_Return6MpknENode__v_; text: .text%__1cHRetNodeFreloc6kM_i_; -text: .text%__1cZInterpreterMacroAssemblerNdispatch_base6MnITosState_ppCi_v_; -text: .text%__1cZCallInterpreterDirectNodeHtwo_adr6kM_I_; -text: .text%__1cNloadConP0NodeFclone6kM_pnENode__; -text: .text%__1cOClearArrayNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cKScopeValueJread_from6FpnTDebugInfoReadStream__p0_; text: .text%__1cOcompiledVFrameScreate_stack_value6kMpnKScopeValue__pnKStackValue__; text: .text%__1cQleaPIdxScaleNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cRindIndexScaleOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cIGraphKitNallocate_heap6MpnENode_222pknITypeFunc_pC22ipknKTypeOopPtr__2_; -text: .text%__1cPciInstanceKlassbBcompute_shared_has_subklass6M_i_; text: .text%__1cNSignatureInfoHdo_byte6M_v_; -text: .text%__1cQorI_rReg_immNodePoper_input_base6kM_I_; text: .text%__1cKCompiledICSset_ic_destination6MpC_v_; -text: .text%__1cNIdealLoopTreePiteration_split6MpnOPhaseIdealLoop_rnJNode_List__v_; text: .text%__1cNandI_rRegNodeErule6kM_I_; -text: .text%__1cRsarI_rReg_immNodeJnum_opnds6kM_I_; text: .text%__1cIMulINodeGadd_id6kM_pknEType__; text: .text%__1cVcompiledICHolderKlassIoop_size6kMpnHoopDesc__i_; text: .text%__1cNmodI_rRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cIMulINodeImul_ring6kMpknEType_3_3_; text: .text%__1cKloadUBNodeMideal_Opcode6kM_i_; -text: .text%__1cHBitDataKis_BitData6M_i_; text: .text%__1cQsalI_rReg_CLNodeMideal_Opcode6kM_i_; -text: .text%__1cNaddP_rRegNodeJnum_opnds6kM_I_; text: .text%__1cJAssemblerEcmpq6MnHAddress_i_v_; text: .text%__1cNloadConP0NodeFreloc6kM_i_; -text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; text: .text%__1cSmembar_acquireNodeLbottom_type6kM_pknEType__; text: .text%__1cOMacroAssemblerKincrementq6MpnMRegisterImpl_i_v_; text: .text%__1cRsarI_rReg_immNodeHtwo_adr6kM_I_; text: .text%__1cZInterpreterMacroAssemblerNdispatch_next6MnITosState_i_v_; -text: .text%__1cNGrowableArray4nMmethodHandle__2t6Mii_v_; text: .text%__1cLConvL2INodeJideal_reg6kM_I_; -text: .text%__1cNGrowableArray4nLKlassHandle__2t6Mii_v_; -text: .text%__1cNmethodOopDescThas_native_function6kM_i_; text: .text%JVM_GetClassNameUTF; -text: .text%__1cMPrefetchNodeJideal_reg6kM_I_; -text: .text%__1cKCodeBuffer2t6MpCi_v_; text: .text%__1cNprefetchwNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFStateQ_sub_Op_Prefetch6MpknENode__v_; text: .text%__1cOjmpLoopEndNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cNprefetchwNodeFreloc6kM_i_; text: .text%__1cIAddLNodeJideal_reg6kM_I_; text: .text%__1cILocation2t6MpnTDebugInfoReadStream__v_; text: .text%__1cKstoreCNodeFreloc6kM_i_; -text: .text%__1cNdecI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNmethodOopDescWis_vanilla_constructor6kM_i_; text: .text%__1cWCallLeafNoFPDirectNodeKmethod_set6Ml_v_; text: .text%__1cOPhaseIdealLoopOplace_near_use6kMpnENode__2_; text: .text%__1cHi2bNodeMideal_Opcode6kM_i_; -text: .text%__1cNLocationValueLis_location6kM_i_; text: .text%__1cNLocationValue2t6MpnTDebugInfoReadStream__v_; text: .text%__1cIMulLNodeJideal_reg6kM_I_; text: .text%__1cNsubL_rRegNodeHtwo_adr6kM_I_; @@ -4241,33 +2736,22 @@ text: .text%JVM_FindClassFromClass; text: .text%__1cKcmpOpUOperEless6kM_i_; text: .text%__1cVcompiledICHolderKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cVcompiledICHolderKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cKReflectionGinvoke6FnTinstanceKlassHandle_nMmethodHandle_nGHandle_inOobjArrayHandle_nJBasicType_4ipnGThread__pnHoopDesc__; -text: .text%__1cITypeLongFwiden6kMpknEType__3_; -text: .text%__1cQsalI_rReg_CLNodePoper_input_base6kM_I_; text: .text%__1cbIjava_lang_reflect_AccessibleObjectIoverride6FpnHoopDesc__C_; text: .text%__1cKReflectionDbox6FpnGjvalue_nJBasicType_pnGThread__pnHoopDesc__; -text: .text%__1cMLinkResolverbHlinktime_resolve_interface_method6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_43ipnGThread__v_; text: .text%__1cLBoxLockNodeEhash6kM_I_; text: .text%__1cJOopMapSetMgrow_om_data6M_v_; -text: .text%__1cRxorI_rReg_memNodeJnum_opnds6kM_I_; -text: .text%__1cKciTypeFlowFBlockQset_private_copy6Mi_v_; text: .text%__1cWandI_rReg_imm65535NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cWandI_rReg_imm65535NodeErule6kM_I_; text: .text%__1cZInterpreterMacroAssemblerGpush_i6MpnMRegisterImpl__v_; text: .text%__1cNcmovI_regNodeErule6kM_I_; text: .text%__1cRsalL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cNGrowableArray4CpnKInlineTree__Egrow6Mi_v_; -text: .text%__1cSComputeAdapterInfoIdo_short6M_v_; -text: .text%__1cNtestL_regNodeJnum_opnds6kM_I_; text: .text%__1cLConvF2DNodeGOpcode6kM_i_; text: .text%__1cISubLNodeLbottom_type6kM_pknEType__; text: .text%__1cSmembar_acquireNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cSmembar_acquireNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNaddP_rRegNodeLbottom_type6kM_pknEType__; text: .text%__1cNmodL_rRegNodeErule6kM_I_; -text: .text%__1cRsalI_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJAssemblerDret6Mi_v_; -text: .text%__1cRshrI_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cbDjava_lang_reflect_ConstructorPparameter_types6FpnHoopDesc__2_; text: .text%__1cKReflectionSinvoke_constructor6FpnHoopDesc_nOobjArrayHandle_pnGThread__2_; text: .text%__1cbDjava_lang_reflect_ConstructorFclazz6FpnHoopDesc__2_; @@ -4298,72 +2782,40 @@ text: .text%__1cTtypeArrayKlassKlassOklass_oop_size6kM_i_; text: .text%__1cWconstantPoolCacheKlassOklass_oop_size6kM_i_; text: .text%__1cQconstMethodKlassOklass_oop_size6kM_i_; text: .text%__1cPmethodDataKlassOklass_oop_size6kM_i_; -text: .text%__1cGThreadOis_interrupted6Fp0i_i_; -text: .text%__1cHThreadsHoops_do6FpnKOopClosure__v_; text: .text%__1cJHashtableHoops_do6MpnKOopClosure__v_; text: .text%__1cSsafePoint_pollNodeIpipeline6kM_pknIPipeline__; text: .text%__1cIPSOldGenHcompact6M_v_; -text: .text%__1cSsafePoint_pollNodeJnum_opnds6kM_I_; text: .text%__1cFJNIidHoops_do6MpnKOopClosure__v_; -text: .text%__1cJvmSymbolsHoops_do6FpnKOopClosure_i_v_; text: .text%__1cJHashtableGunlink6MpnRBoolObjectClosure__v_; -text: .text%__1cSReferenceProcessorHoops_do6MpnKOopClosure__v_; text: .text%__1cQObjectStartArrayFreset6M_v_; text: .text%__1cIPSOldGenPadjust_pointers6M_v_; text: .text%__1cScompP_mem_rRegNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cJloadBNodeFreloc6kM_i_; text: .text%__1cUandI_rReg_imm255NodeMideal_Opcode6kM_i_; -text: .text%__1cNGrowableArray4CpnKciTypeFlowFBlock__Icontains6kMrk2_i_; text: .text%__1cScompP_mem_rRegNodeFreloc6kM_i_; -text: .text%__1cNcmovP_regNodePoper_input_base6kM_I_; -text: .text%__1cTno_rax_rdx_RegIOperJnum_edges6kM_I_; text: .text%__1cKciTypeFlowLStateVectorJdo_aaload6MpnQciBytecodeStream__v_; -text: .text%__1cJAssemblerMemit_operand6MpnRFloatRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerMemit_operand6MpnRFloatRegisterImpl_pnMRegisterImpl_4nHAddressLScaleFactor_ipCrknQRelocationHolder__v_; text: .text%__1cNaddL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cLRethrowNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cRaddI_rReg_memNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cRsubI_rReg_memNodeHtwo_adr6kM_I_; text: .text%__1cIModLNodeGOpcode6kM_i_; text: .text%__1cIMaxINodeLbottom_type6kM_pknEType__; text: .text%__1cFParseMdo_checkcast6M_v_; text: .text%__1cIMulINodeGmul_id6kM_pknEType__; -text: .text%__1cMloadConINodeGis_Con6kM_I_; text: .text%__1cIregDOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cIMulDNodeGOpcode6kM_i_; text: .text%__1cRsarL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNsubL_rRegNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cHnmethodUnumber_of_dependents6kM_i_; -text: .text%__1cTconvI2L_reg_memNodeFreloc6kM_i_; -text: .text%__1cSComputeAdapterInfoIdo_float6M_v_; text: .text%__1cFParseLarray_store6MnJBasicType__v_; -text: .text%__1cOmangle_name_on6FpnMoutputStream_pnNsymbolOopDesc_ii_v_: nativeLookup.o; text: .text%JVM_FindClassFromClassLoader; text: .text%JVM_FindClassFromBootLoader; -text: .text%__1cZCallInterpreterDirectNodeSalignment_required6kM_i_; -text: .text%__1cZCallInterpreterDirectNodePoper_input_base6kM_I_; -text: .text%__1cZCallInterpreterDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cRmulL_rReg_immNodeMcisc_operand6kM_i_; -text: .text%__1cNloadConI0NodeGis_Con6kM_I_; -text: .text%__1cKstoreBNodeHtwo_adr6kM_I_; -text: .text%__1cOmangle_name_on6FpnMoutputStream_pnNsymbolOopDesc__v_: nativeLookup.o; -text: .text%__1cKRegionNodeUdepends_only_on_test6kM_i_; text: .text%__1cMMergeMemNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cFciEnvZcall_has_multiple_targets6FpnNinstanceKlass_nMsymbolHandle_3ri_i_; -text: .text%__1cMadjust_check6FpnENode_11iipnMPhaseIterGVN__v_: ifnode.o; -text: .text%__1cPsalI_rReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cTconvI2L_reg_memNodeHtwo_adr6kM_I_; text: .text%__1cLPhaseValuesKis_IterGVN6M_pnMPhaseIterGVN__; text: .text%__1cQciTypeArrayKlassJmake_impl6FnJBasicType__p0_; text: .text%__1cFStateM_sub_Op_AddL6MpknENode__v_; text: .text%__1cQciTypeArrayKlassEmake6FnJBasicType__p0_; -text: .text%__1cUmembar_cpu_orderNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cUmembar_cpu_orderNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cNSCMemProjNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cSCompareAndSwapNodeJideal_reg6kM_I_; -text: .text%__1cFStateW_sub_Op_MemBarCPUOrder6MpknENode__v_; text: .text%__1cKciTypeFlowLStateVectorMdo_checkcast6MpnQciBytecodeStream__v_; -text: .text%__1cMorI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cMrax_RegIOperKin_RegMask6kMi_pknHRegMask__; text: .text%lwp_mutex_init: os_solaris.o; text: .text%__1cJStubQdDueueGcommit6Mi_v_; @@ -4375,79 +2827,49 @@ text: .text%__1cOGenerateOopMapOdo_monitorexit6Mi_v_; text: .text%__1cOGenerateOopMapLmonitor_pop6M_nNCellTypeState__; text: .text%__1cJAssemblerEmovl6MnHAddress_i_v_; text: .text%__1cKoopFactoryNnew_charArray6FpkcpnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cPshrI_rReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cQjava_lang_StringTcreate_oop_from_str6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cRmulI_rReg_immNodeJnum_opnds6kM_I_; text: .text%__1cNandI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cbACallCompiledJavaDirectNodeHtwo_adr6kM_I_; text: .text%__1cIModINodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNinstanceKlassVis_same_class_package6MpnHoopDesc_pnNsymbolOopDesc__i_; -text: .text%__1cbLtransform_int_divide_to_long_multiply6FpnIPhaseGVN_pnENode_i_3_: divnode.o; text: .text%__1cTno_rax_rdx_RegIOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cJAssemblerGmovzwl6MpnMRegisterImpl_nHAddress__v_; text: .text%__1cRmulL_rReg_immNodeErule6kM_I_; text: .text%__1cZCallDynamicJavaDirectNodePoper_input_base6kM_I_; -text: .text%__1cHTypePtrFempty6kM_i_; -text: .text%__1cOMacroAssemblerSload_unsigned_word6MpnMRegisterImpl_nHAddress__i_; text: .text%__1cOGenerateOopMapXdo_return_monitor_check6M_v_; -text: .text%__1cNobjArrayKlassQarray_klass_impl6MipnGThread__pnMklassOopDesc__; text: .text%__1cFStateP_sub_Op_ConvL2I6MpknENode__v_; text: .text%__1cLOptoRuntimebBcomplete_monitor_enter_Type6F_pknITypeFunc__; text: .text%__1cIGraphKitMnext_monitor6M_i_; text: .text%__1cLBoxLockNode2t6Mi_v_; -text: .text%__1cRmulI_rReg_immNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cJloadFNodeZcheck_for_anti_dependence6kM_i_; -text: .text%__1cIplus_adr6FpnENode_l_1_: generateOptoStub.o; text: .text%__1cIGraphKitLshared_lock6MpnENode__pnMFastLockNode__; -text: .text%__1cHConNode2t6MpknEType__v_; text: .text%__1cMloadConDNodeMideal_Opcode6kM_i_; -text: .text%__1cNCompileBrokerTcreate_compile_task6FpnMCompileQdDueue_inMmethodHandle_i3ipkcii_pnLCompileTask__; -text: .text%__1cLCompileTaskKinitialize6MinMmethodHandle_i1ipkcii_v_; text: .text%__1cNCompileBrokerNallocate_task6F_pnLCompileTask__; text: .text%__1cMCompileQdDueueDadd6MpnLCompileTask__v_; text: .text%__1cRxorI_rReg_memNodeErule6kM_I_; text: .text%__1cMCompileQdDueueDget6M_pnLCompileTask__; text: .text%__1cRsarI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQleaPIdxScaleNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cSCompileTaskWrapper2t6MpnLCompileTask__v_; text: .text%__1cQjava_lang_ThreadGthread6FpnHoopDesc__pnKJavaThread__; text: .text%__1cXmembar_acquire_lockNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFStateM_sub_Op_MulL6MpknENode__v_; text: .text%__1cCosPhint_no_preempt6F_v_; text: .text%__1cJAssemblerFtestl6MpnMRegisterImpl_i_v_; -text: .text%__1cObox_handleNodePoper_input_base6kM_I_; text: .text%__1cNCompileBrokerJfree_task6FpnLCompileTask__v_; text: .text%__1cSCompileTaskWrapper2T6M_v_; text: .text%__1cLCompileTaskEfree6M_v_; text: .text%__1cNnegI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKDictionarybAis_valid_protection_domain6MiInMsymbolHandle_nGHandle_2_i_; text: .text%__1cMincI_memNodeMideal_Opcode6kM_i_; text: .text%__1cRandL_rReg_immNodeMideal_Opcode6kM_i_; text: .text%__1cRaddI_rReg_memNodeFreloc6kM_i_; text: .text%__1cQjava_lang_StringXcreate_oop_from_unicode6FpHipnGThread__pnHoopDesc__; text: .text%jni_NewString: jni.o; -text: .text%__1cRxorI_rReg_immNodePoper_input_base6kM_I_; text: .text%__1cFStateM_sub_Op_AndL6MpknENode__v_; text: .text%__1cKloadUBNodePoper_input_base6kM_I_; -text: .text%__1cbBconvI2L_reg_reg_reg_zexNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVcompiledICHolderKlassXoop_is_compiledICHolder6kM_i_; -text: .text%__1cJStoreNodeUdepends_only_on_test6kM_i_; text: .text%__1cPcmovI_reg_lNodeErule6kM_I_; -text: .text%__1cOloadConL32NodePoper_input_base6kM_I_; text: .text%__1cNSharedRuntimebJcontinuation_for_implicit_exception6FpnKJavaThread_pCn0AVImplicitExceptionKind__3_; -text: .text%__1cRtestI_reg_immNodeHtwo_adr6kM_I_; text: .text%__1cIimmDOperJconstantD6kM_d_; text: .text%__1cFParsePmerge_exception6Mi_v_; text: .text%__1cXmembar_acquire_lockNodeIadr_type6kM_pknHTypePtr__; text: .text%__1cNGrowableArray4CpnIciObject__2t6MpnFArena_iirk1_v_; -text: .text%__1cICallInfoDset6MnLKlassHandle_1nMmethodHandle_2pnGThread__v_; -text: .text%__1cZCallDynamicJavaDirectNodeHtwo_adr6kM_I_; -text: .text%__1cMLinkResolverbGruntime_resolve_interface_method6FrnICallInfo_nMmethodHandle_nLKlassHandle_nGHandle_4ipnGThread__v_; -text: .text%__1cMLinkResolverWresolve_interface_call6FrnICallInfo_nGHandle_nLKlassHandle_4nMsymbolHandle_54iipnGThread__v_; text: .text%__1cNGrowableArray4CpnIciObject__JappendAll6Mpk2_v_; -text: .text%__1cFciEnv2t6MpnHJNIEnv__iii_v_; -text: .text%__1cRtestP_reg_memNodeFreloc6kM_i_; -text: .text%__1cNtestP_regNodeMcisc_version6Mi_pnIMachNode__; text: .text%__1cNGrowableArray4CpnIciMethod__2t6MpnFArena_iirk1_v_; text: .text%__1cNGrowableArray4CpnHciKlass__2t6MpnFArena_iirk1_v_; text: .text%__1cPciObjectFactory2t6MpnFArena_i_v_; @@ -4461,49 +2883,36 @@ text: .text%__1cKstoreBNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cNCompileBrokerUpop_jni_handle_block6F_v_; text: .text%__1cbBopt_virtual_call_RelocationLstatic_stub6M_pC_; text: .text%__1cNinstanceKlassbFlookup_method_in_all_interfaces6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; -text: .text%__1cPcmpFastLockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cFStateQ_sub_Op_FastLock6MpknENode__v_; text: .text%__1cXmembar_acquire_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cTconvD2I_reg_regNodeErule6kM_I_; text: .text%__1cITemplateIbytecode6kM_nJBytecodesECode__; -text: .text%__1cLOptoRuntimeRmultianewarray1_C6FpnMklassOopDesc_ipnKJavaThread__v_; text: .text%__1cWImplicitExceptionTableCat6kMI_I_; text: .text%__1cWImplicitExceptionTable2t6MpknHnmethod__v_; text: .text%__1cLVtableStubsPstub_containing6FpC_pnKVtableStub__; -text: .text%__1cLVtableStubsIcontains6FpC_i_; text: .text%__1cNFingerprinterIdo_float6M_v_; text: .text%__1cHnmethodbJcontinuation_for_implicit_exception6MpC_1_; text: .text%__1cLRShiftLNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cUjmpLoopEnd_shortNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNmodI_rRegNodeHtwo_adr6kM_I_; text: .text%__1cUjmpLoopEnd_shortNodeMideal_Opcode6kM_i_; text: .text%__1cKEntryPoint2t6MpC11111111_v_; text: .text%jni_GetObjectClass: jni.o; text: .text%__1cRappend_interfaces6FnOobjArrayHandle_ripnPobjArrayOopDesc__v_; -text: .text%__1cRandI_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cISubLNodeDsub6kMpknEType_3_3_; text: .text%__1cJloadSNodeIpipeline6kM_pknIPipeline__; text: .text%__1cRtestI_reg_immNodeMideal_Opcode6kM_i_; -text: .text%__1cOloadConL32NodeHtwo_adr6kM_I_; -text: .text%__1cQshrI_rReg_CLNodePoper_input_base6kM_I_; text: .text%__1cSstring_compareNodePoper_input_base6kM_I_; text: .text%__1cNcmovI_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cMdecI_memNodeMideal_Opcode6kM_i_; text: .text%__1cMrax_RegLOperEtype6kM_pknEType__; -text: .text%__1cRmulI_rReg_immNodeHtwo_adr6kM_I_; text: .text%__1cIXorINodeGadd_id6kM_pknEType__; text: .text%__1cNtestP_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cPcmovI_reg_gNodeHtwo_adr6kM_I_; -text: .text%__1cOPhaseIdealLoopKclone_loop6MpnNIdealLoopTree_rnJNode_List_i_v_; -text: .text%__1cHi2bNodePoper_input_base6kM_I_; -text: .text%__1cRsalL_rReg_immNodeJnum_opnds6kM_I_; text: .text%__1cKBinaryNodeGOpcode6kM_i_; text: .text%__1cNxorI_rRegNodeQuse_cisc_RegMask6M_v_; text: .text%__1cFStateO_sub_Op_Binary6MpknENode__v_; text: .text%JVM_GetClassLoader; text: .text%__1cMstoreSSPNodeMideal_Opcode6kM_i_; -text: .text%__1cNmulL_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cRxorI_rReg_memNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cINodeHashIround_up6FI_I_; text: .text%__1cHCompileKinit_start6MpnJStartNode__v_; text: .text%__1cOPhaseTransform2t6MpnFArena_nFPhaseLPhaseNumber__v_; @@ -4511,127 +2920,63 @@ text: .text%__1cLPhaseValues2t6MpnFArena_I_v_; text: .text%__1cRaddP_rReg_immNodeIpipeline6kM_pknIPipeline__; text: .text%__1cINodeHash2t6MpnFArena_I_v_; text: .text%__1cRaddI_rReg_memNodeHtwo_adr6kM_I_; -text: .text%__1cIJVMState2n6FL_pv_; text: .text%__1cOMacroAssemblerFalign6Mi_v_; -text: .text%__1cOleaPIdxOffNodeZcheck_for_anti_dependence6kM_i_; -text: .text%__1cFVTuneNregister_stub6FpkcpC3_v_; text: .text%__1cFForteNregister_stub6FpkcpC3_v_; -text: .text%__1cMdecI_memNodeJnum_opnds6kM_I_; -text: .text%__1cIModINodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cMLinkResolverXresolve_invokeinterface6FrnICallInfo_nGHandle_nSconstantPoolHandle_ipnGThread__v_; text: .text%lwp_cond_init: os_solaris.o; text: .text%__1cSmembar_releaseNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cSmembar_releaseNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cOPhaseIdealLoopVclone_up_backedge_goo6MpnENode_22_2_; text: .text%__1cSInterpreterCodeletKinitialize6MpkcnJBytecodesECode__v_; -text: .text%__1cTconvI2L_reg_regNodeMcisc_version6Mi_pnIMachNode__; text: .text%__1cNxorI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNaddP_rRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cZInterpreterMacroAssemblerZcheck_and_handle_popframe6MpnMRegisterImpl__v_; text: .text%__1cOloadConL32NodeErule6kM_I_; -text: .text%__1cOMacroAssemblerMcall_VM_base6MpnMRegisterImpl_22pCii_v_; -text: .text%__1cFframeVnmethods_code_blob_do6M_v_; text: .text%__1cHi2bNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKcmpOpUOperKless_equal6kM_i_; -text: .text%__1cWandI_rReg_imm65535NodeJnum_opnds6kM_I_; text: .text%__1cFParseTprofile_switch_case6Mi_v_; text: .text%__1cKNativeJumpbEcheck_verified_entry_alignment6FpC1_v_; text: .text%__1cFParseSjump_switch_ranges6MpnENode_pnLSwitchRange_4i_v_; text: .text%__1cFParseOmerge_new_path6Mi_v_; -text: .text%__1cUBytecode_tableswitchGlength6M_i_; text: .text%__1cNandI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cNmodL_rRegNodePoper_input_base6kM_I_; -text: .text%__1cMloadConLNodeFclone6kM_pnENode__; -text: .text%__1cNtestU_regNodeJnum_opnds6kM_I_; -text: .text%__1cIimmLOperFclone6kM_pnIMachOper__; -text: .text%__1cRandL_rReg_immNodePoper_input_base6kM_I_; text: .text%__1cOleaPIdxOffNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKstoreBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMmatch_option6FpknMJavaVMOption_pkcp4_i_: arguments.o; -text: .text%__1cNCompileBrokerTis_not_compile_only6FnMmethodHandle__i_; text: .text%__1cNCompileBrokerRassign_compile_id6FnMmethodHandle_i_I_; -text: .text%__1cNCompileBrokerTis_compile_blocking6FnMmethodHandle_i_i_; text: .text%__1cIMulFNodeGOpcode6kM_i_; -text: .text%__1cNIdealLoopTreeQpolicy_peel_only6kMpnOPhaseIdealLoop__i_; -text: .text%__1cNIdealLoopTreeSpolicy_range_check6kMpnOPhaseIdealLoop__i_; -text: .text%__1cQSystemDictionaryPresolve_or_fail6FnMsymbolHandle_ipnGThread__pnMklassOopDesc__; -text: .text%__1cNIdealLoopTreeMpolicy_align6kMpnOPhaseIdealLoop__i_; -text: .text%__1cNIdealLoopTreeNpolicy_unroll6kMpnOPhaseIdealLoop__i_; text: .text%__1cNtestU_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNCompileBrokerZcompilation_is_prohibited6FnMmethodHandle_i_i_; text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFi_vi_v_; -text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_and_dispatch6MpnITemplate_nITosState__v_; text: .text%__1cITemplateIgenerate6MpnZInterpreterMacroAssembler__v_; -text: .text%__1cKC2CompilerOneeds_adapters6M_i_; -text: .text%__1cLServiceUtilLvisible_oop6FpnHoopDesc__i_; text: .text%__1cITemplateKinitialize6MinITosState_1pFi_vi_v_; text: .text%__1cNObjectMonitorGEnterI6MpnGThread__v_; -text: .text%__1cIciMethodJhas_loops6kM_i_; -text: .text%__1cIciMethodVshould_print_assembly6M_i_; -text: .text%__1cOMacroAssemblerOcall_VM_helper6MpnMRegisterImpl_pCii_v_; text: .text%__1cNloadConL0NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZInterpreterMacroAssemblerMcall_VM_base6MpnMRegisterImpl_22pCii_v_; -text: .text%__1cMincI_memNodeJnum_opnds6kM_I_; -text: .text%__1cNCompileBrokerOcheck_break_at6FnMmethodHandle_iii_i_; text: .text%__1cJAssemblerEcall6MrnFLabel_nJrelocInfoJrelocType__v_; -text: .text%__1cNCompileBrokerQset_last_compile6FpnOCompilerThread_nMmethodHandle_ii_v_; -text: .text%__1cNCompileBrokerbAeager_compile_c2i_adapters6FpnFciEnv_pnIciMethod__v_; -text: .text%__1cNCompileBrokerbAeager_compile_i2c_adapters6FpnFciEnv_pnIciMethod__v_; text: .text%__1cNCompileBrokerZinvoke_compiler_on_method6FpnLCompileTask__v_; text: .text%__1cKC2CompilerOcompile_method6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cMstoreSSPNodeHis_Copy6kM_I_; text: .text%__1cQshrI_rReg_CLNodeMideal_Opcode6kM_i_; -text: .text%__1cFciEnvPregister_method6MpnIciMethod_iiiiiipnKCodeBuffer_ipnJOopMapSet_pnVExceptionHandlerTable_pnWImplicitExceptionTable_pnQAbstractCompiler_ii_v_; text: .text%__1cLAccessFlagsRatomic_clear_bits6Mi_v_; -text: .text%__1cIciMethodQbreak_at_execute6M_i_; text: .text%__1cFciEnvbOcheck_for_system_dictionary_modification6MpnIciMethod__v_; -text: .text%__1cFciEnvbUsystem_dictionary_modification_counter_changed6M_i_; text: .text%__1cMelapsedTimerDadd6M0_v_; text: .text%__1cNCompileBrokerScollect_statistics6FpnOCompilerThread_nMelapsedTimer_pnLCompileTask__v_; -text: .text%__1cJStartNodeScalling_convention6kMpnLOptoRegPair_I_v_; text: .text%__1cICodeHeapMinsert_after6MpnJFreeBlock_2_v_; -text: .text%__1cKExceptionsNnew_exception6FpnGThread_nMsymbolHandle_3pnRJavaCallArguments_nGHandle_6_6_; -text: .text%__1cFMutex2t6Mipkci_v_; text: .text%__1cKloadUBNodeErule6kM_I_; text: .text%__1cQsalL_rReg_CLNodeMideal_Opcode6kM_i_; -text: .text%__1cbACallCompiledJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbACallCompiledJavaDirectNodePoper_input_base6kM_I_; -text: .text%__1cTbasictype2arraycopy6FnJBasicType_i_pC_; -text: .text%__1cOLibraryCallKitQinline_arraycopy6M_i_; text: .text%__1cPstoreImmI16NodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cLOptoRuntimeOarraycopy_Type6F_pknITypeFunc__; -text: .text%__1cFciEnvbFpost_compiled_method_load_event6MpnHnmethod__v_; text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_; -text: .text%__1cLPcDescCache2t6M_v_; text: .text%__1cFciEnvVnum_inlined_bytecodes6kM_i_; -text: .text%__1cHnmethodSresolve_JNIHandles6M_v_; text: .text%__1cRmulL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cVExceptionHandlerTableHcopy_to6MpnHnmethod__v_; text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cFVTuneOcreate_nmethod6FpnHnmethod__v_; text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_; -text: .text%__1cHnmethodLnew_nmethod6FnMmethodHandle_iiiiiipnYDebugInformationRecorder_pnKCodeBuffer_ipnJOopMapSet_pnVExceptionHandlerTable_pnWImplicitExceptionTable_pnQAbstractCompiler__p0_; text: .text%__1cPcmovI_reg_lNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHnmFlagsFclear6M_v_; text: .text%__1cHnmethod2n6FLi_pv_; -text: .text%__1cHnmethod2t6MpnNmethodOopDesc_iiiiiiipnYDebugInformationRecorder_pnKCodeBuffer_ipnJOopMapSet_pnVExceptionHandlerTable_pnWImplicitExceptionTable_pnQAbstractCompiler__v_; -text: .text%__1cNaddI_rRegNodeMcisc_version6Mi_pnIMachNode__; text: .text%__1cKTypeRawPtrFxdual6kM_pknEType__; text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_; -text: .text%__1cLOopRecorderHcopy_to6MpnICodeBlob__v_; -text: .text%__1cICodeBlobJcopy_oops6MppnI_jobject_i_v_; -text: .text%__1cFStateN_sub_Op_LoadC6MpknENode__v_; -text: .text%__1cJloadCNodeFreloc6kM_i_; text: .text%__1cFParseQjump_if_fork_int6MpnENode_2nIBoolTestEmask__pnGIfNode__; text: .text%__1cWandI_rReg_imm65535NodeHtwo_adr6kM_I_; -text: .text%__1cNdivL_rRegNodePoper_input_base6kM_I_; -text: .text%__1cNmethodOopDescIset_code6MpnHnmethod__v_; text: .text%__1cINodeHashUremove_useless_nodes6MrnJVectorSet__v_; text: .text%__1cQUnique_Node_ListUremove_useless_nodes6MrnJVectorSet__v_; text: .text%__1cKInlineTreeWbuild_inline_tree_root6F_p0_; -text: .text%__1cHCompile2t6MpnFciEnv_pnKC2Compiler_pnIciMethod_ii_v_; text: .text%__1cHCompileWprint_compile_messages6M_v_; -text: .text%__1cPClassFileParserbGparse_constant_pool_double_entry6MnSconstantPoolHandle_ipnGThread__v_; text: .text%__1cQsalI_rReg_CLNodeErule6kM_I_; text: .text%__1cHCompileRbuild_start_state6MpnJStartNode_pknITypeFunc__pnIJVMState__; text: .text%__1cHCompileVidentify_useful_nodes6MrnQUnique_Node_List__v_; @@ -4641,42 +2986,27 @@ text: .text%__1cHCompileUremove_useless_nodes6MrnQUnique_Node_List__v_; text: .text%__1cSPhaseRemoveUseless2t6MpnIPhaseGVN_pnQUnique_Node_List__v_; text: .text%__1cHCompileLFinish_Warm6M_v_; text: .text%__1cHCompileLInline_Warm6M_i_; -text: .text%__1cPno_rax_RegLOperJnum_edges6kM_I_; text: .text%__1cMPhaseIterGVN2t6MpnIPhaseGVN__v_; -text: .text%__1cJBytecodesDdef6Fn0AECode_pkc33nJBasicType_ii1_v_; text: .text%__1cIciMethodRbuild_method_data6MnMmethodHandle__v_; text: .text%__1cSstring_compareNodeErule6kM_I_; text: .text%__1cbAfinal_graph_reshaping_walk6FrnKNode_Stack_pnENode_rnUFinal_Reshape_Counts__v_: compile.o; -text: .text%__1cHCompileVfinal_graph_reshaping6M_i_; -text: .text%__1cOcompI_rRegNodeMcisc_version6Mi_pnIMachNode__; text: .text%__1cScompI_rReg_memNodeFreloc6kM_i_; text: .text%__1cJStartNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cNTemplateTableKtransition6FnITosState_1_v_; text: .text%__1cIPhaseCCPJtransform6MpnENode__2_; text: .text%__1cHCompileNreturn_values6MpnIJVMState__v_; -text: .text%__1cbCAbstractInterpreterGeneratorQset_entry_points6MnJBytecodesECode__v_; -text: .text%__1cbCAbstractInterpreterGeneratorWset_short_entry_points6MpnITemplate_rpC44444444_v_; text: .text%__1cMPhaseIterGVN2t6Mp0_v_; text: .text%__1cIPhaseCCP2t6MpnMPhaseIterGVN__v_; -text: .text%__1cIPhaseCCP2T6M_v_; text: .text%__1cIPhaseCCPHanalyze6M_v_; text: .text%__1cIPhaseCCPMdo_transform6M_v_; text: .text%__1cOcompI_rRegNodeIpipeline6kM_pknIPipeline__; text: .text%__1cNsubL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNloadConPcNodeMideal_Opcode6kM_i_; -text: .text%__1cKExceptionsG_throw6FpnGThread_pkcinGHandle__v_; -text: .text%__1cKExceptionsRspecial_exception6FpnGThread_pkcinGHandle__i_; -text: .text%__1cGThreadVset_pending_exception6MpnHoopDesc_pkci_v_; -text: .text%__1cNandL_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cLklassItableUcompute_itable_index6FpnNmethodOopDesc__i_; text: .text%__1cWpoll_return_RelocationEtype6M_nJrelocInfoJrelocType__; text: .text%__1cWConstantPoolCacheEntrySset_interface_call6MnMmethodHandle_i_v_; text: .text%__1cJloadFNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cPClassFileParserUverify_constantvalue6MiinSconstantPoolHandle_pnGThread__v_; -text: .text%__1cQsalI_rReg_CLNodeJnum_opnds6kM_I_; -text: .text%__1cIMachNodeJis_MachIf6kM_pknKMachIfNode__; text: .text%__1cPsalL_rReg_1NodeMideal_Opcode6kM_i_; -text: .text%__1cKExceptionsRspecial_exception6FpnGThread_pkcinMsymbolHandle_4_i_; text: .text%__1cQjava_lang_StringScreate_from_symbol6FnMsymbolHandle_pnGThread__nGHandle__; text: .text%__1cOClearArrayNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cHMatcherbDinterpreter_frame_pointer_reg6F_i_; @@ -4684,32 +3014,16 @@ text: .text%__1cQorI_rReg_immNodeErule6kM_I_; text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_53pnGThread__v_; text: .text%__1cSInterpreterRuntimeXthrow_pending_exception6FpnKJavaThread__v_; text: .text%__1cKcmpOpUOperHgreater6kM_i_; -text: .text%__1cNCompileBrokerUcheck_adapter_result6FnMmethodHandle_ippnMBasicAdapter__i_; -text: .text%__1cJloadFNodeJnum_opnds6kM_I_; text: .text%__1cYinternal_word_RelocationEtype6M_nJrelocInfoJrelocType__; -text: .text%__1cSMachC2IEntriesNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cbFunnecessary_membar_volatileNodePoper_input_base6kM_I_; text: .text%__1cRmulI_rReg_immNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cQPSIsAliveClosureLdo_object_b6MpnHoopDesc__i_; -text: .text%__1cTCallInterpreterNodeSis_CallInterpreter6kM_pk0_; -text: .text%__1cZCallInterpreterDirectNodePcompute_padding6kMi_i_; -text: .text%__1cSMachC2IcheckICNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cZInterpreterMacroAssemblerPdispatch_epilog6MnITosState_i_v_; text: .text%__1cZInterpreterMacroAssemblerPdispatch_prolog6MnITosState_i_v_; -text: .text%__1cZCallInterpreterDirectNodeKmethod_set6Ml_v_; -text: .text%__1cXMachCallInterpreterNodePret_addr_offset6M_i_; text: .text%__1cQjava_lang_StringPcreate_from_str6FpkcpnGThread__nGHandle__; -text: .text%__1cLOptoRuntimeInew_Type6F_pknITypeFunc__; text: .text%__1cLBoxLockNodeDcmp6kMrknENode__I_; text: .text%__1cMTailCallNodeGOpcode6kM_i_; text: .text%__1cJChunkPoolMfree_all_but6ML_v_; -text: .text%__1cIGraphKitMnew_instance6MpnPciInstanceKlass__pnENode__; -text: .text%__1cPcmpD_cc_regNodePoper_input_base6kM_I_; text: .text%__1cRsalL_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cLOptoRuntimeSnew_typeArray_Type6F_pknITypeFunc__; -text: .text%__1cObox_handleNodeMideal_Opcode6kM_i_; text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cIGraphKitJnew_array6MpnENode_nJBasicType_pknEType_pknMTypeKlassPtr__2_; text: .text%__1cNdecL_rRegNodeMideal_Opcode6kM_i_; text: .text%__1cKJavaThreadZsecurity_get_caller_class6Mi_pnMklassOopDesc__; text: .text%__1cZCallDynamicJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -4717,23 +3031,15 @@ text: .text%__1cOemit_d64_reloc6FrnKCodeBuffer_lrknQRelocationHolder_i_v_; text: .text%__1cRtestI_reg_immNodeErule6kM_I_; text: .text%__1cIAddFNodeGOpcode6kM_i_; text: .text%__1cSstring_compareNodeMideal_Opcode6kM_i_; -text: .text%__1cNmethodOopDescWcompute_has_loops_flag6M_i_; -text: .text%__1cKloadUBNodeJnum_opnds6kM_I_; -text: .text%__1cNGrowableArray4CpnHoopDesc__2t6Mii_v_; text: .text%__1cZCallDynamicJavaDirectNodeSalignment_required6kM_i_; -text: .text%__1cXvirtual_call_RelocationJpack_data6M_i_; text: .text%__1cXvirtual_call_RelocationEtype6M_nJrelocInfoJrelocType__; text: .text%__1cQorI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cUParallelScavengeHeapIcapacity6kM_L_; text: .text%__1cJAssemblerEcmpq6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cNnegI_rRegNodeJnum_opnds6kM_I_; -text: .text%__1cYinternal_word_RelocationJpack_data6M_i_; -text: .text%__1cKsplit_once6FpnMPhaseIterGVN_pnENode_333_v_: cfgnode.o; text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_; text: .text%__1cPDictionaryEntryVadd_protection_domain6MpnHoopDesc__v_; text: .text%__1cbIjava_lang_reflect_AccessibleObjectMset_override6FpnHoopDesc_C_v_; text: .text%__1cRCardTableModRefBSPclear_MemRegion6MnJMemRegion__v_; -text: .text%__1cOleaPIdxOffNodeLbottom_type6kM_pknEType__; text: .text%__1cNdivL_rRegNodeMideal_Opcode6kM_i_; text: .text%__1cFParsebLincrement_and_test_invocation_counter6Mi_v_; text: .text%__1cKDictionaryVadd_protection_domain6MiInTinstanceKlassHandle_nGHandle_2pnGThread__v_; @@ -4742,28 +3048,14 @@ text: .text%__1cFParseRarray_store_check6M_v_; text: .text%__1cNobjArrayKlassWcompute_modifier_flags6kMpnGThread__i_; text: .text%__1cScompL_rReg_immNodeMideal_Opcode6kM_i_; text: .text%__1cTmembar_volatileNodeMideal_Opcode6kM_i_; -text: .text%__1cTCallDynamicJavaNodeSis_CallDynamicJava6kM_pk0_; -text: .text%__1cCosHSolarisFEventEpark6M_v_; -text: .text%__1cIMinINodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cODeoptimizationYtrap_state_is_recompiled6Fi_i_; text: .text%__1cXSignatureHandlerLibraryKinitialize6F_v_; text: .text%__1cXSignatureHandlerLibraryDadd6FnMmethodHandle__v_; text: .text%__1cSInterpreterRuntimeTprepare_native_call6FpnKJavaThread_pnNmethodOopDesc__v_; text: .text%__1cNGrowableArray4CL_Efind6kMrkL_i_; -text: .text%__1cUandI_rReg_imm255NodePoper_input_base6kM_I_; -text: .text%__1cSReferenceProcessorZadd_to_discovered_list_mt6MppnHoopDesc_23_v_; text: .text%__1cSInterpreterRuntimeNquicken_io_cc6FpnKJavaThread__v_; -text: .text%__1cJBytecodesDdef6Fn0AECode_pkc33nJBasicType_ii_v_; text: .text%__1cHOrINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cNObjectMonitorbAEntryQdDueue_SelectSuccessor6M_pnMObjectWaiter__; -text: .text%__1cNObjectMonitorREntryQdDueue_insert6MpnMObjectWaiter_i_v_; text: .text%__1cSobjArrayKlassKlassXallocate_objArray_klass6MinLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cJAssemblerEpopq6MpnMRegisterImpl__v_; text: .text%__1cSobjArrayKlassKlassbCallocate_objArray_klass_impl6FnYobjArrayKlassKlassHandle_inLKlassHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cISubLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cMTypeKlassPtrRcast_to_exactness6kMi_pknEType__; -text: .text%__1cNloadConI0NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cSComputeAdapterInfoHdo_char6M_v_; text: .text%__1cKPerfMemoryFalloc6FL_pc_; text: .text%__1cIPerfData2T6M_v_; text: .text%__1cIPerfDataMcreate_entry6MnJBasicType_LL_v_; @@ -4772,36 +3064,27 @@ text: .text%__1cPcmovI_reg_gNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEfrom6F_pnMRegisterImpl__; text: .text%__1cXJNI_ArgumentPusherVaArgHget_int6M_v_; text: .text%__1cIPerfData2t6MnJCounterNS_pkcn0AFUnits_n0ALVariability__v_; -text: .text%__1cPPerfDataManagerIadd_item6FpnIPerfData_i_v_; text: .text%__1cLStrCompNodeKmatch_edge6kMI_I_; text: .text%__1cOjmpLoopEndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOjmpLoopEndNodeOis_pc_relative6kM_i_; -text: .text%__1cOjmpLoopEndNodeTmay_be_short_branch6kM_i_; text: .text%jni_ReleaseStringUTFChars: jni.o; text: .text%jni_GetStringUTFChars: jni.o; text: .text%__1cFStateW_sub_Op_CountedLoopEnd6MpknENode__v_; text: .text%__1cNFingerprinterIdo_short6M_v_; -text: .text%__1cOcompU_rRegNodeMcisc_version6Mi_pnIMachNode__; text: .text%__1cJAssemblerEincq6MpnMRegisterImpl__v_; text: .text%__1cFTypeDEmake6Fd_pk0_; text: .text%__1cScompU_rReg_memNodeFreloc6kM_i_; text: .text%__1cNtestL_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cFParseLdo_newarray6MnJBasicType__v_; text: .text%__1cWCallLeafNoFPDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMNativeLookupGlookup6FnMmethodHandle_ripnGThread__pC_; text: .text%__1cWCallLeafNoFPDirectNodeFreloc6kM_i_; -text: .text%__1cSstring_compareNodeJnum_opnds6kM_I_; text: .text%__1cFStateU_sub_Op_CallLeafNoFP6MpknENode__v_; text: .text%JVM_FindLibraryEntry; -text: .text%__1cSObjectSynchronizerHinflate6FpnHoopDesc__pnNObjectMonitor__; text: .text%JVM_GetMethodIxExceptionTableEntry; text: .text%__1cNObjectMonitorHRecycle6M_v_; text: .text%__1cISubLNodeGadd_id6kM_pknEType__; text: .text%__1cNmodI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHMatcherOc_return_value6Fii_nLOptoRegPair__; text: .text%__1cRxorI_rReg_memNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cIMachNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQsarL_rReg_63NodeMideal_Opcode6kM_i_; text: .text%__1cRmulI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIMachOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cIMachOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; @@ -4810,47 +3093,25 @@ text: .text%__1cNandI_rRegNodeQuse_cisc_RegMask6M_v_; text: .text%__1cIDivINodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cNnegI_rRegNodeHtwo_adr6kM_I_; text: .text%__1cFStateS_sub_Op_ClearArray6MpknENode__v_; -text: .text%__1cRaddL_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cFciEnvWis_dependence_violated6FpnMklassOopDesc_pnNmethodOopDesc__i_; -text: .text%__1cHCompile2t6MpnFciEnv_pnIciMethod_i_v_; text: .text%__1cIXorINodeJideal_reg6kM_I_; text: .text%__1cMrep_stosNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRtestI_reg_immNodePoper_input_base6kM_I_; -text: .text%__1cKC2CompilerPcompile_adapter6MpnFciEnv_pnIciMethod_i_v_; -text: .text%__1cMrep_stosNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cMAdapterCacheGinsert6MpnLAdapterInfo_pnMBasicAdapter__v_; text: .text%__1cFStateO_sub_Op_StoreL6MpknENode__v_; -text: .text%__1cLAdapterInfoHcopy_to6Mp0_v_; -text: .text%__1cQjava_lang_StringFvalue6FpnHoopDesc__pnQtypeArrayOopDesc__; text: .text%__1cPciObjArrayKlassGloader6M_pnHoopDesc__; text: .text%__1cIMinINodeGadd_id6kM_pknEType__; -text: .text%__1cNdecL_rRegNodePoper_input_base6kM_I_; -text: .text%__1cQjava_lang_StringGoffset6FpnHoopDesc__i_; text: .text%__1cKstoreLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cGThreadLnmethods_do6M_v_; -text: .text%__1cKmul_hiNodeMideal_Opcode6kM_i_; text: .text%__1cKstoreLNodeFreloc6kM_i_; text: .text%__1cMstoreSSPNodeLbottom_type6kM_pknEType__; text: .text%__1cRsubI_rReg_memNodeFreloc6kM_i_; -text: .text%__1cPsarL_rReg_2NodeMideal_Opcode6kM_i_; text: .text%__1cTconvF2D_reg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cRmulL_rReg_immNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cNmodL_rRegNodeJnum_opnds6kM_I_; -text: .text%__1cRmulL_rReg_immNodeJnum_opnds6kM_I_; -text: .text%__1cbBconvI2L_reg_reg_reg_zexNodeHtwo_adr6kM_I_; text: .text%__1cSCompiledStaticCallSset_to_interpreted6MnMmethodHandle_pC_v_; text: .text%__1cScompU_rReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRInterpreterOopMapIis_empty6M_i_; text: .text%__1cNFingerprinterHdo_char6M_v_; -text: .text%__1cOrepush_if_args6FpnFParse_pnENode_3_v_: parse2.o; text: .text%__1cMloadConDNodeLbottom_type6kM_pknEType__; text: .text%__1cNGrowableArray4CpnHoopDesc__Uclear_and_deallocate6M_v_; -text: .text%__1cMrdx_RegLOperJnum_edges6kM_I_; text: .text%__1cLMachUEPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cZget_mirror_from_signature6FnMmethodHandle_pnPSignatureStream_pnGThread__pnHoopDesc__; text: .text%__1cNGrowableArray4CpnJNode_List__Egrow6Mi_v_; text: .text%__1cMciArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cNObjectMonitorGenter26MpnGThread__v_; text: .text%__1cKarrayKlassKjava_super6kM_pnMklassOopDesc__; text: .text%__1cIUniverseWupdate_heap_info_at_gc6F_v_; text: .text%__1cJCodeCacheLgc_prologue6F_v_; @@ -4860,12 +3121,8 @@ text: .text%__1cJMarkSweepXfollow_weak_klass_links6F_v_; text: .text%__1cJMarkSweepMadjust_marks6F_v_; text: .text%__1cJMarkSweepNrestore_marks6F_v_; text: .text%__1cHThreadsLgc_epilogue6F_v_; -text: .text%__1cKDictionaryMdo_unloading6MpnRBoolObjectClosure__i_; text: .text%__1cHThreadsLgc_prologue6F_v_; -text: .text%__1cNGrowableArray4CpnFKlass__2t6Mii_v_; -text: .text%__1cQSystemDictionaryMdo_unloading6FpnRBoolObjectClosure__i_; text: .text%__1cQSystemDictionaryPplaceholders_do6FpnKOopClosure__v_; -text: .text%__1cSReferenceProcessorPoops_do_statics6FpnKOopClosure__v_; text: .text%__1cQSystemDictionaryYalways_strong_classes_do6FpnKOopClosure__v_; text: .text%__1cUPSAdaptiveSizePolicyWmajor_collection_begin6M_v_; text: .text%__1cUPSAdaptiveSizePolicyUmajor_collection_end6MLnHGCCauseFCause__v_; @@ -4874,69 +3131,46 @@ text: .text%__1cNGrowableArray4CpnFKlass__Uclear_and_deallocate6M_v_; text: .text%__1cKPSYoungGenHcompact6M_v_; text: .text%__1cKPSYoungGenPadjust_pointers6M_v_; text: .text%__1cKPSYoungGenKprecompact6M_v_; -text: .text%__1cLPSMarkSweepQinvoke_no_policy6Fpii_v_; text: .text%__1cLPSMarkSweepPallocate_stacks6F_v_; text: .text%__1cLPSMarkSweepRdeallocate_stacks6F_v_; -text: .text%__1cLPSMarkSweepRmark_sweep_phase16Fi_v_; text: .text%__1cLPSMarkSweepRmark_sweep_phase26F_v_; text: .text%__1cLPSMarkSweepRmark_sweep_phase36F_v_; text: .text%__1cLPSMarkSweepRmark_sweep_phase46F_v_; text: .text%__1cLPSMarkSweepbAreset_millis_since_last_gc6F_v_; text: .text%__1cUPSMarkSweepDecoratorbHset_destination_decorator_tenured6F_v_; text: .text%__1cUPSMarkSweepDecoratorbIset_destination_decorator_perm_gen6F_v_; -text: .text%__1cNExceptionBlobHoops_do6MpnKOopClosure__v_; text: .text%__1cKDictionaryYalways_strong_classes_do6MpnKOopClosure__v_; -text: .text%__1cQUncommonTrapBlobHoops_do6MpnKOopClosure__v_; -text: .text%__1cSDeoptimizationBlobHoops_do6MpnKOopClosure__v_; text: .text%__1cIPSOldGenKprecompact6M_v_; text: .text%__1cVLoaderConstraintTableYpurge_loader_constraints6MpnRBoolObjectClosure__v_; -text: .text%__1cRCardTableModRefBSEis_a6MnKBarrierSetEName__i_; text: .text%__1cJPSPermGenQcompute_new_size6ML_v_; text: .text%__1cJPSPermGenKprecompact6M_v_; -text: .text%__1cJCodeCacheMdo_unloading6FpnRBoolObjectClosure_pnKOopClosure_i_v_; -text: .text%__1cJCodeCacheHoops_do6FpnKOopClosure__v_; -text: .text%__1cPcmpD_cc_regNodeHtwo_adr6kM_I_; -text: .text%__1cbFunnecessary_membar_volatileNodeHtwo_adr6kM_I_; text: .text%__1cIDivINodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cIciSymbolHas_utf86M_pkc_; text: .text%__1cQorI_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cPfieldDescriptorSlong_initial_value6kM_x_; -text: .text%__1cKJavaThreadLnmethods_do6M_v_; text: .text%__1cCosTnative_java_library6F_pv_; text: .text%__1cSTailCalljmpIndNodePoper_input_base6kM_I_; text: .text%__1cOstackSlotPOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cOstackSlotPOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cScompL_rReg_immNodeHtwo_adr6kM_I_; text: .text%__1cNandI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNinstanceKlassKfind_field6kMpnNsymbolOopDesc_2ipnPfieldDescriptor__pnMklassOopDesc__; text: .text%__1cPciObjArrayKlass2t6MnLKlassHandle__v_; text: .text%__1cPstoreImmI16NodeFreloc6kM_i_; text: .text%__1cPstoreImmI16NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cCosYprint_jni_name_prefix_on6FpnMoutputStream_i_v_; -text: .text%__1cVlookup_special_native6Fpc_pC_: nativeLookup.o; text: .text%jni_ReleaseStringCritical: jni.o; -text: .text%__1cMNativeLookupMlookup_style6FnMmethodHandle_pcpkciiripnGThread__pC_; text: .text%__1cCosYprint_jni_name_suffix_on6FpnMoutputStream_i_v_; text: .text%jni_GetStringCritical: jni.o; -text: .text%__1cSInterpreterRuntimeTnmethod_entry_point6FpnKJavaThread_pnNmethodOopDesc_pnHnmethod__pC_; text: .text%__1cIPSOldGenOgen_size_limit6M_L_; -text: .text%__1cTI2CAdapterGeneratorSstd_verified_entry6FnMmethodHandle__pC_; -text: .text%__1cTI2CAdapterGeneratorUgenerate_i2c_adapter6FnMmethodHandle__pnKI2CAdapter__; text: .text%__1cUPSAdaptiveSizePolicybQpromo_increment_with_supplement_aligned_up6ML_L_; -text: .text%__1cHnmethodXinterpreter_entry_point6M_pC_; text: .text%__1cUParallelScavengeHeapOresize_old_gen6ML_v_; text: .text%__1cUPSAdaptiveSizePolicyPpromo_increment6MLI_L_; text: .text%__1cWandI_rReg_imm65535NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIPSOldGenGresize6ML_v_; text: .text%__1cKConv2BNodeGOpcode6kM_i_; -text: .text%__1cObox_handleNodeHtwo_adr6kM_I_; text: .text%__1cKarrayKlassOset_alloc_size6MI_v_; text: .text%__1cKarrayKlassXbase_create_array_klass6FrknKKlass_vtbl_inLKlassHandle_pnGThread__nQarrayKlassHandle__; text: .text%__1cNstoreImmINodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKarrayKlassbBcomplete_create_array_klass6FnQarrayKlassHandle_nLKlassHandle_pnGThread__v_; text: .text%__1cLConvI2FNodeGOpcode6kM_i_; -text: .text%__1cNmethodOopDescVparameter_annotations6kM_pnQtypeArrayOopDesc__; -text: .text%__1cNmethodOopDescLannotations6kM_pnQtypeArrayOopDesc__; text: .text%__1cNcmovI_regNodeHtwo_adr6kM_I_; text: .text%__1cNmethodOopDescbGresolved_checked_exceptions_impl6Fp0pnGThread__nOobjArrayHandle__; text: .text%__1cIGraphKitbKcombine_and_pop_all_exception_states6M_pnNSafePointNode__; @@ -4944,71 +3178,50 @@ text: .text%__1cLRethrowNode2t6MpnENode_22222_v_; text: .text%__1cHCompileSrethrow_exceptions6MpnIJVMState__v_; text: .text%__1cKReflectionTget_parameter_types6FnMmethodHandle_ippnHoopDesc_pnGThread__nOobjArrayHandle__; text: .text%__1cKReflectionTget_exception_types6FnMmethodHandle_pnGThread__nOobjArrayHandle__; -text: .text%__1cNinstanceKlassQmethod_index_for6kMpnNmethodOopDesc_pnGThread__i_; text: .text%__1cJAssemblerEandl6MpnMRegisterImpl_i_v_; text: .text%__1cNmethodOopDescKklass_name6kM_pnNsymbolOopDesc__; text: .text%__1cFStateP_sub_Op_Rethrow6MpknENode__v_; text: .text%__1cQComputeCallStackIdo_array6Mii_v_; -text: .text%__1cQsalL_rReg_CLNodePoper_input_base6kM_I_; text: .text%__1cNdecL_rRegNodeErule6kM_I_; text: .text%__1cLRethrowNodeJideal_reg6kM_I_; -text: .text%__1cMNativeLookupLlookup_base6FnMmethodHandle_ripnGThread__pC_; text: .text%__1cNstoreImmINodeFreloc6kM_i_; text: .text%__1cURethrowExceptionNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cMNativeLookupNpure_jni_name6FnMmethodHandle__pc_; text: .text%__1cIPerfLong2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability__v_; text: .text%__1cURethrowExceptionNodeFreloc6kM_i_; -text: .text%__1cTCompareAndSwapLNode2t6MpnENode_2222_v_; -text: .text%__1cQshrI_rReg_CLNodeJnum_opnds6kM_I_; -text: .text%__1cSCompareAndSwapNode2t6MpnENode_2222_v_; -text: .text%__1cTcompareAndSwapLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cTcompareAndSwapLNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cOLibraryCallKitRinline_unsafe_CAS6MnJBasicType__i_; text: .text%__1cIProjNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFStateX_sub_Op_CompareAndSwapL6MpknENode__v_; text: .text%__1cNSCMemProjNodeJideal_reg6kM_I_; text: .text%__1cTcompareAndSwapLNodeFreloc6kM_i_; text: .text%__1cOGenerateOopMapMmonitor_push6MnNCellTypeState__v_; text: .text%__1cOcompP_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPsarI_rReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cOGenerateOopMapPdo_monitorenter6Mi_v_; text: .text%__1cMmulD_immNodeMideal_Opcode6kM_i_; -text: .text%__1cPmethodDataKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cMaddF_regNodePoper_input_base6kM_I_; text: .text%__1cPcmpD_cc_regNodeMideal_Opcode6kM_i_; text: .text%__1cJLoadPNodeMstore_Opcode6kM_i_; -text: .text%__1cbACallCompiledJavaDirectNodeKmethod_set6Ml_v_; -text: .text%__1cYMachCallCompiledJavaNodePret_addr_offset6M_i_; text: .text%__1cJCMoveNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cKciTypeFlowLStateVectorEtrap6MpnQciBytecodeStream_pnHciKlass_i_v_; text: .text%__1cIDivLNodeLbottom_type6kM_pknEType__; text: .text%__1cNobjArrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cJloadFNodeHtwo_adr6kM_I_; text: .text%__1cNinstanceKlassYremove_dependent_nmethod6MpnHnmethod__v_; text: .text%__1cOGenerateOopMapTmark_reachable_code6M_v_; -text: .text%__1cNobjArrayKlassZcan_be_primary_super_slow6kM_i_; text: .text%__1cOGenerateOopMapKinterp_all6M_v_; text: .text%__1cOGenerateOopMapYrewrite_refval_conflicts6M_v_; text: .text%__1cOGenerateOopMapRinit_basic_blocks6M_v_; text: .text%__1cOGenerateOopMapYsetup_method_entry_state6M_v_; text: .text%__1cFframeZinterpreter_frame_set_mdx6Ml_v_; text: .text%__1cOGenerateOopMapbAmake_context_uninitialized6M_v_; -text: .text%__1cQorI_rReg_immNodeJnum_opnds6kM_I_; -text: .text%__1cOGenerateOopMapTmethodsig_to_effect6MpnNsymbolOopDesc_ipnNCellTypeState__i_; text: .text%__1cOGenerateOopMapPinitialize_vars6M_v_; text: .text%__1cNobjArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; text: .text%__1cOGenerateOopMapKinit_state6M_v_; -text: .text%__1cPClassFileParserbFparse_constant_pool_float_entry6MnSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cRmulL_rReg_immNodeHtwo_adr6kM_I_; text: .text%__1cOGenerateOopMapNinitialize_bb6M_v_; text: .text%__1cOGenerateOopMapRdo_interpretation6M_v_; -text: .text%__1cQciBytecodeStreamFtable6MnJBytecodesECode__2_; text: .text%__1cOGenerateOopMap2t6MnMmethodHandle__v_; text: .text%__1cOGenerateOopMapbImark_bbheaders_and_count_gc_points6M_v_; text: .text%__1cOGenerateOopMapLcompute_map6MpnGThread__v_; text: .text%__1cIRetTableRcompute_ret_table6MnMmethodHandle__v_; text: .text%__1cRxorI_rReg_memNodeHtwo_adr6kM_I_; -text: .text%__1cNmulI_rRegNodePoper_input_base6kM_I_; text: .text%__1cFStateM_sub_Op_XorI6MpknENode__v_; text: .text%__1cISubLNodeJideal_reg6kM_I_; text: .text%__1cLStrCompNodeLbottom_type6kM_pknEType__; @@ -5017,16 +3230,11 @@ text: .text%__1cQOopMapCacheEntryRallocate_bit_mask6M_v_; text: .text%__1cQOopMapCacheEntryTdeallocate_bit_mask6M_v_; text: .text%__1cQOopMapCacheEntryEfill6MnMmethodHandle_i_v_; text: .text%__1cRsalL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPsalL_rReg_1NodePoper_input_base6kM_I_; -text: .text%__1cOstackSlotPOperJnum_edges6kM_I_; text: .text%__1cOPhaseIdealLoopOadd_constraint6MiipnENode_22p23_v_; text: .text%jni_IsAssignableFrom: jni.o; text: .text%__1cOstackSlotPOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cFParseWcheck_interpreter_type6MpnENode_pknEType_rpnNSafePointNode__2_; -text: .text%__1cFParseXfetch_interpreter_state6MipknEType_pnENode__5_; -text: .text%__1cObox_handleNodeJnum_opnds6kM_I_; text: .text%__1cNaddP_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cSComputeAdapterInfoHdo_byte6M_v_; text: .text%__1cPPerfDataManagerMcounter_name6Fpkc2_pc_; text: .text%__1cOGenerateOopMapKpp_new_ref6MpnNCellTypeState_i_v_; text: .text%__1cNcmovI_regNodeQuse_cisc_RegMask6M_v_; @@ -5035,152 +3243,84 @@ text: .text%__1cOGenerateOopMapVresult_for_basicblock6Mi_v_; text: .text%__1cTOopMapForCacheEntry2t6MnMmethodHandle_ipnQOopMapCacheEntry__v_; text: .text%__1cPcmpD_cc_immNodeMideal_Opcode6kM_i_; text: .text%__1cTOopMapForCacheEntryLcompute_map6MpnGThread__v_; -text: .text%__1cTOopMapForCacheEntryOreport_results6kM_i_; text: .text%__1cTconvF2D_reg_memNodePoper_input_base6kM_I_; text: .text%__1cNdivL_rRegNodeErule6kM_I_; text: .text%__1cRmulL_rReg_immNodeQuse_cisc_RegMask6M_v_; text: .text%JVM_GetCallerClass; text: .text%__1cQsalL_rReg_CLNodeErule6kM_I_; text: .text%__1cJloadLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNloadConP0NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cXMachCallDynamicJavaNodePret_addr_offset6M_i_; text: .text%__1cRxorI_rReg_immNodeErule6kM_I_; text: .text%__1cZCallDynamicJavaDirectNodePcompute_padding6kMi_i_; -text: .text%__1cFParseScreate_jump_tables6MpnENode_pnLSwitchRange_4_i_; text: .text%__1cZCallDynamicJavaDirectNodeKmethod_set6Ml_v_; text: .text%__1cPcmovI_reg_lNodeHtwo_adr6kM_I_; text: .text%__1cLConvD2INodeGOpcode6kM_i_; text: .text%__1cNcmovP_regNodeMideal_Opcode6kM_i_; text: .text%__1cTconvI2F_reg_regNodeMideal_Opcode6kM_i_; text: .text%__1cKstorePNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cWPredictedCallGeneratorJis_inline6kM_i_; -text: .text%__1cUjmpLoopEnd_shortNodeJis_Branch6kM_I_; text: .text%__1cQorI_rReg_memNodeMideal_Opcode6kM_i_; text: .text%__1cSInterpreterRuntimeOmultianewarray6FpnKJavaThread_pi_v_; text: .text%__1cUjmpLoopEnd_shortNodeJlabel_set6MrnFLabel_I_v_; text: .text%__1cFParseSjump_if_false_fork6MpnGIfNode_ii_v_; -text: .text%__1cbFloadConL_0x6666666666666667NodeMideal_Opcode6kM_i_; text: .text%__1cJAssemblerEshll6MpnMRegisterImpl_i_v_; -text: .text%__1cOjmpLoopEndNodeUshort_branch_version6M_pnIMachNode__; text: .text%__1cUjmpLoopEnd_shortNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cPCountedLoopNodeGstride6kM_pnENode__; -text: .text%__1cHi2bNodeJnum_opnds6kM_I_; text: .text%__1cHTypeAryFxdual6kM_pknEType__; text: .text%__1cOMacroAssemblerKverify_oop6MpnMRegisterImpl_pkc_v_; -text: .text%__1cKstoreFNodeHtwo_adr6kM_I_; text: .text%__1cNnegI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cLencode_copy6FrnKCodeBuffer_ii_v_; -text: .text%__1cbBconvI2L_reg_reg_reg_zexNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvI2F_reg_regNodePoper_input_base6kM_I_; -text: .text%__1cUCallNativeDirectNodeMideal_Opcode6kM_i_; -text: .text%__1cKmul_hiNodePoper_input_base6kM_I_; -text: .text%__1cKExceptionsNnew_exception6FpnGThread_nMsymbolHandle_pkcnGHandle_6_6_; text: .text%__1cPcmpD_cc_regNodeMcisc_operand6kM_i_; text: .text%__1cPICStubInterfaceKinitialize6MpnEStub_i_v_; text: .text%__1cPICStubInterfaceRcode_size_to_size6kMi_i_; text: .text%__1cPcmpD_cc_regNodeErule6kM_I_; text: .text%__1cNtestU_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPSPromotionLABRunallocate_object6MpnHoopDesc__i_; -text: .text%__1cPcmpD_cc_immNodeHtwo_adr6kM_I_; -text: .text%__1cOPhaseIdealLoopJdo_unroll6MpnNIdealLoopTree_rnJNode_List_i_v_; text: .text%__1cRandL_rReg_immNodeErule6kM_I_; -text: .text%__1cNloadConP0NodeGis_Con6kM_I_; text: .text%__1cIMulINodeKmul_opcode6kM_i_; -text: .text%__1cNdivL_rRegNodeJnum_opnds6kM_I_; text: .text%__1cIMulINodeKadd_opcode6kM_i_; text: .text%__1cRxorI_rReg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPregister_native6FnLKlassHandle_nMsymbolHandle_1pCpnGThread__i_: jni.o; text: .text%__1cTno_rax_rdx_RegLOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cOtypeArrayKlassOmulti_allocate6MipiipnGThread__pnHoopDesc__; -text: .text%__1cTno_rax_rdx_RegLOperJnum_edges6kM_I_; -text: .text%__1cOCallNativeNodeGOpcode6kM_i_; text: .text%__1cQsalI_rReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSobjArrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cJAssemblerDjmp6MpCnJrelocInfoJrelocType__v_; text: .text%__1cLRShiftLNodeJideal_reg6kM_I_; text: .text%jni_SetBooleanField: jni.o; text: .text%__1cVLoaderConstraintTableWfind_constrained_klass6MnMsymbolHandle_nGHandle__pnMklassOopDesc__; text: .text%__1cIModLNodeLbottom_type6kM_pknEType__; text: .text%__1cRxorI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHMonitor2t6Mipkci_v_; -text: .text%__1cGHandle2t6MpnGThread_pnHoopDesc__v_; text: .text%__1cQorI_rReg_immNodeHtwo_adr6kM_I_; text: .text%__1cODeoptimizationVtrap_state_has_reason6Fii_i_; text: .text%__1cOloadConL32NodeMideal_Opcode6kM_i_; text: .text%__1cNGrowableArray4Cpv_Egrow6Mi_v_; text: .text%jni_GetFieldID: jni.o; text: .text%__1cNGrowableArray4Cl_Egrow6Mi_v_; -text: .text%__1cXjava_lang_ref_ReferenceOset_discovered6FpnHoopDesc_2_v_; text: .text%__1cLResourceObj2n6FLn0APallocation_type__pv_; text: .text%__1cFframeZinterpreter_frame_set_mdp6MpC_v_; -text: .text%__1cJLoadPNodeUdepends_only_on_test6kM_i_; text: .text%__1cFBlockNset_next_call6MpnENode_rnJVectorSet_rnLBlock_Array__v_; text: .text%__1cIciObject2t6MpnHciKlass__v_; text: .text%__1cScompL_rReg_immNodeErule6kM_I_; text: .text%__1cQshrI_rReg_CLNodeErule6kM_I_; -text: .text%__1cNaddL_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cFStateT_sub_Op_ThreadLocal6MpknENode__v_; -text: .text%__1cVCallRuntimeDirectNodeHtwo_adr6kM_I_; -text: .text%__1cKciTypeFlowOsplit_range_at6Mi_pn0AFRange__; -text: .text%__1cQSystemDictionaryTresolve_from_stream6FnMsymbolHandle_nGHandle_2pnPClassFileStream_pnGThread__pnMklassOopDesc__; -text: .text%__1cXjvm_define_class_common6FpnHJNIEnv__pkcpnI_jobject_pkWi53pnGThread__pnH_jclass__: jvm.o; text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcipnNsymbolOopDesc_4_v_; text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcinMsymbolHandle_4nGHandle_6_v_; -text: .text%__1cMmulD_immNodePoper_input_base6kM_I_; text: .text%__1cRInlineCacheBufferRic_stub_code_size6F_i_; text: .text%__1cMmulF_immNodeMideal_Opcode6kM_i_; -text: .text%__1cNGrowableArray4CpnKStackValue__2t6Mii_v_; -text: .text%__1cZInterpreterMacroAssemblerbAget_cache_and_index_at_bcp6MpnMRegisterImpl_2i_v_; text: .text%__1cRandL_rReg_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cMloadConFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOMacroAssemblerHcall_VM6MpnMRegisterImpl_pCi_v_; text: .text%__1cUandI_rReg_imm255NodeErule6kM_I_; text: .text%__1cRmulL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNcmovI_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNloadConL0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPsarL_rReg_2NodePoper_input_base6kM_I_; -text: .text%__1cJAssemblerGpushaq6M_v_; text: .text%__1cOMethodLivenessKBasicBlockFsplit6Mi_p1_; text: .text%__1cFStateP_sub_Op_RShiftL6MpknENode__v_; -text: .text%__1cMrsi_RegPOperJnum_edges6kM_I_; -text: .text%__1cMstoreSSPNodePoper_input_base6kM_I_; -text: .text%__1cScompL_rReg_immNodePoper_input_base6kM_I_; -text: .text%__1cKCodeBufferWinsert_double_constant6Md_pC_; text: .text%__1cPClassFileParserbJparse_classfile_signature_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; text: .text%__1cNaddP_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cFParseHdo_irem6M_v_; -text: .text%__1cRsarL_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_2_v_; -text: .text%__1cHi2bNodeHtwo_adr6kM_I_; text: .text%__1cPClassFileParserbBcheck_illegal_static_method6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cJAssemblerFmovsd6MnHAddress_pnRFloatRegisterImpl__v_; -text: .text%__1cTCallInterpreterNodeScalling_convention6kMpnLOptoRegPair_I_v_; -text: .text%__1cXMachCallInterpreterNodeWis_MachCallInterpreter6M_p0_; -text: .text%__1cFStateX_sub_Op_CallInterpreter6MpknENode__v_; -text: .text%__1cZCallInterpreterDirectNodeFreloc6kM_i_; -text: .text%__1cMStartC2INodeScalling_convention6kMpnLOptoRegPair_I_v_; text: .text%__1cZInterpreterMacroAssemblerYtest_method_data_pointer6MpnMRegisterImpl_rnFLabel__v_; -text: .text%__1cMStartC2INodeKc2i_domain6FpknJTypeTuple__3_; -text: .text%__1cHCompilebMGenerate_Compiled_To_Interpreter_Graph6MpknITypeFunc_pC_v_; -text: .text%__1cZCallInterpreterDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFciEnvUregister_c2i_adapter6MpnIciMethod_pnJOopMapSet_pnKCodeBuffer_ii_v_; -text: .text%__1cSMachC2IcheckICNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSMachC2IEntriesNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cRtestI_reg_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cHMatcherbAinterpreter_method_oop_reg6F_i_; -text: .text%__1cHMatcherXcompiler_method_oop_reg6F_i_; text: .text%__1cIciMethodRinterpreter_entry6M_pC_; text: .text%__1cSTailCalljmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPcmpD_cc_regNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cSTailCalljmpIndNodeGpinned6kM_i_; -text: .text%__1cSTailCalljmpIndNodeHtwo_adr6kM_I_; text: .text%jni_SetByteArrayRegion: jni.o; -text: .text%__1cHBoxNodeGOpcode6kM_i_; -text: .text%__1cPcmpD_cc_regNodeJnum_opnds6kM_I_; -text: .text%__1cKC2IAdapter2t6MpnKCodeBuffer_iIpnJOopMapSet_i_v_; -text: .text%__1cKC2IAdapterPnew_c2i_adapter6FpnKCodeBuffer_IpnJOopMapSet_i_p0_; -text: .text%__1cKC2IAdapter2n6FLI_pv_; -text: .text%__1cJAssemblerFmovss6MnHAddress_pnRFloatRegisterImpl__v_; text: .text%__1cIMulINodeJideal_reg6kM_I_; text: .text%__1cKCMovePNodeGOpcode6kM_i_; text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pF_vc_v_; @@ -5189,15 +3329,11 @@ text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_object6M_v_; text: .text%__1cHciKlass2t6MpnIciSymbol_p0_v_; text: .text%__1cFParseTjump_if_always_fork6Mii_v_; text: .text%__1cKloadUBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMmulF_immNodePoper_input_base6kM_I_; -text: .text%__1cPcmpD_cc_immNodePoper_input_base6kM_I_; text: .text%__1cUciInstanceKlassKlassEmake6F_p0_; text: .text%__1cJAssemblerDhlt6M_v_; text: .text%__1cOMacroAssemblerEstop6Mpkc_v_; text: .text%__1cQComputeCallStackIdo_float6M_v_; -text: .text%__1cIciObjectUis_array_klass_klass6M_i_; text: .text%__1cKciTypeFlowLStateVectorLdo_newarray6MpnQciBytecodeStream__v_; -text: .text%__1cWResolveOopMapConflictsRpossible_gc_point6MpnOBytecodeStream__i_; text: .text%__1cJloadFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cPcmovI_reg_lNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIciSymbolHbyte_at6Mi_i_; @@ -5205,15 +3341,9 @@ text: .text%__1cNFingerprinterHdo_byte6M_v_; text: .text%__1cENode2t6Mp0111111_v_; text: .text%__1cIMaxINodeGadd_id6kM_pknEType__; text: .text%__1cRCardTableModRefBSFclear6MnJMemRegion__v_; -text: .text%__1cOMacroAssemblerHcall_VM6MpnMRegisterImpl_pC2i_v_; text: .text%__1cKExceptionsL_throw_args6FpnGThread_pkcinMsymbolHandle_5pnRJavaCallArguments__v_; text: .text%__1cMmulD_immNodeErule6kM_I_; -text: .text%__1cMnegD_regNodePoper_input_base6kM_I_; -text: .text%__1cFframeVshould_be_deoptimized6kM_i_; text: .text%__1cMaddF_regNodeMideal_Opcode6kM_i_; -text: .text%__1cbDjava_lang_reflect_ConstructorThas_signature_field6F_i_; -text: .text%__1cbDjava_lang_reflect_ConstructorVhas_annotations_field6F_i_; -text: .text%__1cbDjava_lang_reflect_ConstructorbFhas_parameter_annotations_field6F_i_; text: .text%__1cbDjava_lang_reflect_ConstructorIset_slot6FpnHoopDesc_i_v_; text: .text%__1cKReflectionPnew_constructor6FnMmethodHandle_pnGThread__pnHoopDesc__; text: .text%__1cbDjava_lang_reflect_ConstructorPset_annotations6FpnHoopDesc_2_v_; @@ -5226,61 +3356,35 @@ text: .text%__1cbDjava_lang_reflect_ConstructorTset_parameter_types6FpnHoopDesc_ text: .text%__1cPciInstanceKlassYprotection_domain_handle6M_pnI_jobject__; text: .text%__1cbDjava_lang_reflect_ConstructorJset_clazz6FpnHoopDesc_2_v_; text: .text%__1cbDjava_lang_reflect_ConstructorGcreate6FpnGThread__nGHandle__; -text: .text%__1cKmul_hiNodeJnum_opnds6kM_I_; text: .text%__1cKstoreFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cKstoreBNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cRxorI_rReg_immNodeHtwo_adr6kM_I_; -text: .text%__1cNsubI_rRegNodeMcisc_version6Mi_pnIMachNode__; text: .text%__1cJAssemblerExorl6MpnMRegisterImpl_2_v_; -text: .text%__1cHMatcherXinterpreter_arg_ptr_reg6F_i_; text: .text%__1cINegDNodeGOpcode6kM_i_; text: .text%__1cNdecL_rRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cPjava_lang_ClassQprimitive_mirror6FnJBasicType__pnHoopDesc__; -text: .text%__1cRsarI_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; -text: .text%__1cNcmovP_regNodeJnum_opnds6kM_I_; text: .text%__1cSCompiledStaticCallNcompute_entry6FnMmethodHandle_rnOStaticCallInfo__v_; text: .text%__1cMloadConDNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLOptoRuntimeVresolve_static_call_C6FpnKJavaThread__pC_; -text: .text%__1cSCompiledStaticCallIis_clean6kM_i_; text: .text%__1cMrsi_RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cTAbstractInterpreterLdeopt_entry6FnITosState_i_pC_; text: .text%__1cRindIndexScaleOperNconstant_disp6kM_i_; -text: .text%__1cQorI_rReg_memNodeJnum_opnds6kM_I_; -text: .text%__1cRtestI_reg_immNodeJnum_opnds6kM_I_; text: .text%jni_NewStringUTF: jni.o; text: .text%__1cTAbstractInterpreterSBasicType_as_index6FnJBasicType__i_; text: .text%__1cNtestI_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cZInterpreterMacroAssemblerGpush_l6MpnMRegisterImpl__v_; -text: .text%__1cRxorI_rReg_immNodeJnum_opnds6kM_I_; text: .text%__1cZInterpreterMacroAssemblerFpop_i6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerGpush_d6MpnRFloatRegisterImpl__v_; -text: .text%__1cObox_handleNodeErule6kM_I_; text: .text%__1cZInterpreterMacroAssemblerIpush_ptr6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerGpush_f6MpnRFloatRegisterImpl__v_; text: .text%__1cOleaPIdxOffNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQsarL_rReg_63NodePoper_input_base6kM_I_; text: .text%__1cSCompiledStaticCallDset6MrknOStaticCallInfo__v_; text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_i_v_; -text: .text%__1cHCompileRmake_vm_intrinsic6MpnIciMethod_i_pnNCallGenerator__; text: .text%__1cNmulI_rRegNodeErule6kM_I_; -text: .text%__1cNGrowableArray4Ci_2t6Mii_v_; -text: .text%__1cQsalL_rReg_CLNodeJnum_opnds6kM_I_; text: .text%__1cNGrowableArray4Ci_Uclear_and_deallocate6M_v_; -text: .text%__1cPCountedLoopNode2t6MpnENode_2_v_; -text: .text%__1cSCountedLoopEndNode2t6MpnENode_2ff_v_; text: .text%__1cJloadDNodeMideal_Opcode6kM_i_; text: .text%__1cENodeIpipeline6kM_pknIPipeline__; text: .text%__1cIDivLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cMmulD_regNodePoper_input_base6kM_I_; -text: .text%__1cTconvF2D_reg_memNodeJnum_opnds6kM_I_; text: .text%__1cIModINodeJideal_reg6kM_I_; text: .text%__1cYinternal_word_RelocationGtarget6M_pC_; -text: .text%__1cObox_handleNodeLbottom_type6kM_pknEType__; -text: .text%__1cbDreorder_based_on_method_index6FpnPobjArrayOopDesc_1ppnHoopDesc__v_: methodOop.o; text: .text%__1cPshrL_rReg_1NodeMideal_Opcode6kM_i_; -text: .text%__1cUverify_byte_codes_fn6F_pv_: verifier.o; -text: .text%__1cMLinkResolverbPlinktime_resolve_interface_method_or_null6FnLKlassHandle_nMsymbolHandle_21i_nMmethodHandle__; text: .text%JVM_GetClassCPTypes; text: .text%__1cQComputeCallStackHdo_byte6M_v_; text: .text%JVM_GetClassCPEntriesCount; @@ -5291,19 +3395,14 @@ text: .text%__1cJloadBNodeIpipeline6kM_pknIPipeline__; text: .text%__1cKmul_hiNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cJAssemblerEnegq6MpnMRegisterImpl__v_; text: .text%__1cNmodL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKloadUBNodeHtwo_adr6kM_I_; -text: .text%__1cRxorI_rReg_memNodeRis_cisc_alternate6kM_i_; text: .text%__1cVCallRuntimeDirectNodePoper_input_base6kM_I_; text: .text%__1cSstring_compareNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongVariable__; -text: .text%__1cNsubL_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cOjmpLoopEndNodeGnegate6M_v_; text: .text%__1cQorI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cVCallRuntimeDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cPsalL_rReg_1NodeErule6kM_I_; text: .text%__1cPcmpD_cc_immNodeErule6kM_I_; text: .text%__1cJAssemblerFtestl6MpnMRegisterImpl_2_v_; -text: .text%__1cbCAbstractInterpreterGeneratorVset_vtos_entry_points6MpnITemplate_rpC44444444_v_; text: .text%__1cHCompileQgrow_alias_types6M_v_; text: .text%__1cUandI_rReg_imm255NodeLout_RegMask6kM_rknHRegMask__; text: .text%jni_CallIntMethod: jni.o; @@ -5311,74 +3410,42 @@ text: .text%__1cNSharedRuntimeSfind_callee_method6FpnKJavaThread_pnGThread__nMme text: .text%__1cPno_rax_RegLOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cMrdx_RegLOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cNmulI_rRegNodeMcisc_operand6kM_i_; -text: .text%__1cNxorI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cTconvF2D_reg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIUniverseWreinitialize_vtable_of6FpnFKlass_pnGThread__v_; text: .text%__1cJLoadINodeMstore_Opcode6kM_i_; text: .text%__1cNSharedRuntimeTreresolve_call_site6FpnKJavaThread_pnGThread__nMmethodHandle__; text: .text%__1cbFunnecessary_membar_volatileNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cENodeEgetd6kM_d_; text: .text%__1cICmpFNodeGOpcode6kM_i_; -text: .text%__1cLOptoRuntimeThandle_wrong_method6FpnKJavaThread__pC_; text: .text%__1cNGrowableArray4CpnOMethodLivenessKBasicBlock__Egrow6Mi_v_; text: .text%__1cKstoreFNodeOmemory_operand6kM_pknIMachOper__; text: .text%JVM_SetClassSigners; text: .text%__1cNdivL_rRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cScompI_rReg_immNodeIpipeline6kM_pknIPipeline__; text: .text%__1cZCallDynamicJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRandL_rReg_immNodeJnum_opnds6kM_I_; text: .text%__1cOstackSlotPOperFscale6kM_i_; -text: .text%__1cHnmethodPis_dependent_on6MpnMklassOopDesc__i_; -text: .text%__1cMdecI_memNodeHtwo_adr6kM_I_; -text: .text%__1cSalign_to_page_size6FL_L_: heap.o; text: .text%__1cNmulI_rRegNodeMideal_Opcode6kM_i_; text: .text%__1cOstackSlotPOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cPsarL_rReg_2NodeErule6kM_I_; text: .text%__1cOPhaseIdealLoopUpeeled_dom_test_elim6MpnNIdealLoopTree_rnJNode_List__v_; text: .text%jni_NewByteArray: jni.o; text: .text%__1cYinternal_word_RelocationFvalue6M_pC_; -text: .text%__1cYinternal_word_RelocationWfix_relocation_at_move6Ml_v_; text: .text%__1cFStateM_sub_Op_SubL6MpknENode__v_; text: .text%__1cJAssemblerSemit_arith_operand6MipnMRegisterImpl_nHAddress_i_v_; text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_nHAddress__v_; text: .text%__1cMaddF_regNodeMcisc_operand6kM_i_; -text: .text%__1cRsubI_rReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNloadConPcNodeHtwo_adr6kM_I_; -text: .text%__1cbCAbstractInterpreterGeneratorYgenerate_deopt_entry_for6MnITosState_i_pC_; -text: .text%__1cKLoadPCNodeGOpcode6kM_i_; -text: .text%__1cTconvI2F_reg_regNodeMcisc_operand6kM_i_; text: .text%__1cOstackSlotPOperEtype6kM_pknEType__; -text: .text%__1cbCAbstractInterpreterGeneratorZgenerate_return_entry_for6MnITosState_i_pC_; text: .text%__1cTconvD2I_reg_regNodeMideal_Opcode6kM_i_; text: .text%__1cMstoreSSPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNGrowableArray4Ci_Icontains6kMrki_i_; text: .text%__1cKstoreBNodeFreloc6kM_i_; -text: .text%__1cObox_handleNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMjniIdPrivateGid_for6FnTinstanceKlassHandle_i_l_; -text: .text%__1cNget_method_id6FpnHJNIEnv__pnH_jclass_pkc5ipnGThread__pnK_jmethodID__: jni.o; text: .text%__1cQshrI_rReg_CLNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cQjava_lang_SystemTout_offset_in_bytes6F_i_; -text: .text%__1cMjniIdSupportNto_jmethod_id6FpnNmethodOopDesc__pnK_jmethodID__; text: .text%__1cNmethodOopDescKjmethod_id6M_pnK_jmethodID__; text: .text%__1cQjava_lang_SystemSin_offset_in_bytes6F_i_; text: .text%__1cRandL_rReg_immNodeHtwo_adr6kM_I_; text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_2_v_; -text: .text%__1cbACallCompiledJavaDirectNodeFreloc6kM_i_; text: .text%__1cIAddFNodeLbottom_type6kM_pknEType__; -text: .text%__1cUCallCompiledJavaNodeScalling_convention6kMpnLOptoRegPair_I_v_; -text: .text%__1cFStateY_sub_Op_CallCompiledJava6MpknENode__v_; -text: .text%__1cFciEnvUregister_i2c_adapter6MpnIciMethod_pnJOopMapSet_pnKCodeBuffer_i_v_; -text: .text%__1cbACallCompiledJavaDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cMStartI2CNodeScalling_convention6kMpnLOptoRegPair_I_v_; -text: .text%__1cHCompilebMGenerate_Interpreter_To_Compiled_Graph6MpknITypeFunc__v_; text: .text%__1cPciObjectFactoryPinsert_non_perm6Mrpn0ANNonPermObject_pnHoopDesc_pnIciObject__v_; -text: .text%__1cKI2CAdapter2n6FLI_pv_; -text: .text%__1cKCodeBufferVinsert_float_constant6Mf_pC_; -text: .text%__1cbACallCompiledJavaDirectNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKI2CAdapterPnew_i2c_adapter6FpnKCodeBuffer_pnJOopMapSet_i_p0_; text: .text%__1cKmul_hiNodeErule6kM_I_; -text: .text%__1cKI2CAdapter2t6MpnKCodeBuffer_pnJOopMapSet_ii_v_; -text: .text%__1cbBinitialize_itable_for_klass6FpnMklassOopDesc__v_; text: .text%__1cFJNIidEfind6Mi_p0_; text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_5pnGThread__v_; text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIgenerate6ML_v_; @@ -5388,69 +3455,40 @@ text: .text%__1cXSignatureHandlerLibraryLset_handler6FpnKCodeBuffer__pC_; text: .text%JVM_IsPrimitiveClass; text: .text%__1cIDivDNodeGOpcode6kM_i_; text: .text%__1cMnegD_regNodeMideal_Opcode6kM_i_; -text: .text%__1cJCMoveNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cPciObjArrayKlassJmake_impl6FpnHciKlass__p0_; -text: .text%__1cQjava_lang_ThreadJis_daemon6FpnHoopDesc__i_; text: .text%__1cJAssemblerEcmpl6MnHAddress_i_v_; text: .text%__1cHi2bNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cLimmI_24OperJnum_edges6kM_I_; text: .text%__1cRxorI_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cFTypeDJsingleton6kM_i_; text: .text%__1cPsalI_rReg_1NodeIpipeline6kM_pknIPipeline__; text: .text%__1cIModLNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cUPipeline_Use_Element2t6MIIIinXPipeline_Use_Cycle_Mask__v_; -text: .text%__1cTmembar_volatileNodePoper_input_base6kM_I_; -text: .text%__1cNloadConPcNodePoper_input_base6kM_I_; text: .text%__1cXPipeline_Use_Cycle_Mask2t6MI_v_; text: .text%__1cKCompiledICMset_to_clean6M_v_; -text: .text%__1cNdecL_rRegNodeJnum_opnds6kM_I_; text: .text%__1cIciMethodOresolve_invoke6MpnHciKlass_2_p0_; text: .text%__1cQChunkPoolCleanerEtask6M_v_; text: .text%__1cICmpDNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cPsalL_rReg_1NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFStateM_sub_Op_MulI6MpknENode__v_; text: .text%__1cZCallDynamicJavaDirectNodeFreloc6kM_i_; -text: .text%__1cQMachCallJavaNodeVis_MachCallStaticJava6M_pnWMachCallStaticJavaNode__; -text: .text%__1cUandI_rReg_imm255NodeJnum_opnds6kM_I_; text: .text%__1cFStateX_sub_Op_CallDynamicJava6MpknENode__v_; -text: .text%__1cNObjectMonitorEwait6MxipnGThread__v_; text: .text%jni_FindClass: jni.o; text: .text%__1cKarrayKlassTallocate_arrayArray6MiipnGThread__pnPobjArrayOopDesc__; text: .text%__1cIMinINodeJideal_reg6kM_I_; text: .text%__1cJCMoveNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cSObjectSynchronizerEwait6FnGHandle_xpnGThread__v_; -text: .text%__1cNCallGeneratorSfor_predicted_call6FpnHciKlass_p03_3_; -text: .text%__1cLTypeInstPtrRcast_to_exactness6kMi_pknEType__; text: .text%__1cTconvI2F_reg_regNodeErule6kM_I_; -text: .text%__1cWPredictedCallGeneratorKis_virtual6kM_i_; -text: .text%__1cTconvF2D_reg_memNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cNcmovP_regNodeErule6kM_I_; -text: .text%__1cMaddF_regNodeJnum_opnds6kM_I_; text: .text%__1cWPredictedCallGeneratorIgenerate6MpnIJVMState__2_; text: .text%JVM_MonitorWait; -text: .text%__1cPshrL_rReg_1NodePoper_input_base6kM_I_; -text: .text%__1cMaddF_regNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cNCallGeneratorQfor_virtual_call6FpnIciMethod__p0_; text: .text%__1cUVirtualCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cLPSMarkSweepbAabsorb_live_data_from_eden6FpnUPSAdaptiveSizePolicy_pnKPSYoungGen_pnIPSOldGen__i_; text: .text%__1cUPSMarkSweepDecoratorbDadvance_destination_decorator6F_v_; -text: .text%__1cNmulI_rRegNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cNmulI_rRegNodeJnum_opnds6kM_I_; -text: .text%__1cSOnStackReplacementPget_osr_adapter6FnFframe_nMmethodHandle__pnKOSRAdapter__; -text: .text%__1cNGrowableArray4CpnKOSRAdapter__Hat_grow6Mirk1_1_; text: .text%__1cPciObjArrayKlassEmake6FpnHciKlass__p0_; text: .text%JVM_GetClassDeclaredConstructors; -text: .text%__1cRCardTableModRefBSKinvalidate6MnJMemRegion__v_; text: .text%__1cJLoadFNodeJideal_reg6kM_I_; text: .text%__1cJAssemblerEaddq6MpnMRegisterImpl_2_v_; -text: .text%__1cFTypeFJsingleton6kM_i_; text: .text%__1cTconvF2D_reg_regNodeMideal_Opcode6kM_i_; text: .text%__1cMstoreSSPNodeErule6kM_I_; text: .text%__1cOloadConL32NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMstoreSSPNodeHtwo_adr6kM_I_; -text: .text%__1cMincI_memNodeHtwo_adr6kM_I_; text: .text%__1cKcmpOpUOperFequal6kM_i_; -text: .text%__1cTconvF2D_reg_regNodePoper_input_base6kM_I_; text: .text%__1cHRegMask2t6M_v_; text: .text%__1cIGraphKitPdstore_rounding6MpnENode__2_; text: .text%__1cNGrowableArray4Ci_2t6MpnFArena_iirki_v_; @@ -5458,13 +3496,9 @@ text: .text%__1cNloadConL0NodeHsize_of6kM_I_; text: .text%__1cQset_lwp_priority6Fiii_i_; text: .text%__1cJCmpD3NodeGOpcode6kM_i_; text: .text%__1cKloadUBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPcmpD_cc_immNodeJnum_opnds6kM_I_; text: .text%__1cLConvL2DNodeGOpcode6kM_i_; -text: .text%__1cRmulI_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJAssemblerFcmovq6Mn0AJCondition_pnMRegisterImpl_3_v_; -text: .text%__1cNminI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cMmulD_regNodeMideal_Opcode6kM_i_; -text: .text%__1cNminI_rRegNodePoper_input_base6kM_I_; text: .text%__1cFStateM_sub_Op_MinI6MpknENode__v_; text: .text%__1cCosTset_native_priority6FpnGThread_i_nIOSReturn__; text: .text%__1cJStubQdDueueRrequest_committed6Mi_pnEStub__; @@ -5474,7 +3508,6 @@ text: .text%__1cNCallGeneratorRfor_uncommon_trap6FpnIciMethod_nODeoptimizationLD text: .text%__1cUandI_rReg_imm255NodeHtwo_adr6kM_I_; text: .text%__1cJStubQdDueueMremove_first6M_v_; text: .text%__1cOPhaseIdealLoopOdo_range_check6MpnNIdealLoopTree_rnJNode_List__v_; -text: .text%__1cUVirtualCallGeneratorKis_virtual6kM_i_; text: .text%__1cPICStubInterfaceIfinalize6MpnEStub__v_; text: .text%__1cZUncommonTrapCallGeneratorIgenerate6MpnIJVMState__2_; text: .text%__1cPICStubInterfaceEsize6kMpnEStub__i_; @@ -5482,27 +3515,17 @@ text: .text%__1cJAssemblerEcmpq6MpnMRegisterImpl_2_v_; text: .text%__1cNGrowableArray4CpnIciObject__Egrow6Mi_v_; text: .text%__1cFStateM_sub_Op_ModI6MpknENode__v_; text: .text%__1cNObjectMonitor2t6M_v_; -text: .text%__1cNmodI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cFParseNdo_instanceof6M_v_; text: .text%__1cPcmpD_cc_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNIdealLoopTreeXpolicy_maximally_unroll6kMpnOPhaseIdealLoop__i_; -text: .text%__1cTmembar_volatileNodeHtwo_adr6kM_I_; text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; text: .text%__1cIGraphKitOgen_instanceof6MpnENode_2_2_; text: .text%__1cHciKlassOsuper_of_depth6MI_p0_; text: .text%__1cJLoadDNodeGOpcode6kM_i_; -text: .text%__1cNcmovL_regNodePoper_input_base6kM_I_; text: .text%__1cMdecI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRaddI_rReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cXNativeSignatureIteratorJdo_object6Mii_v_; text: .text%__1cQsalL_rReg_CLNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNandI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cbFunnecessary_membar_volatileNodeLbottom_type6kM_pknEType__; -text: .text%__1cHMatcherXpost_store_load_barrier6FpknENode__i_; -text: .text%__1cYjava_lang_reflect_MethodThas_signature_field6F_i_; -text: .text%__1cYjava_lang_reflect_MethodbFhas_parameter_annotations_field6F_i_; text: .text%__1cYjava_lang_reflect_MethodZset_parameter_annotations6FpnHoopDesc_2_v_; -text: .text%__1cYjava_lang_reflect_MethodbChas_annotation_default_field6F_i_; text: .text%__1cJloadDNodePoper_input_base6kM_I_; text: .text%__1cENodeEgetf6kM_f_; text: .text%__1cYjava_lang_reflect_MethodIset_name6FpnHoopDesc_2_v_; @@ -5510,33 +3533,19 @@ text: .text%__1cYjava_lang_reflect_MethodPset_return_type6FpnHoopDesc_2_v_; text: .text%__1cYjava_lang_reflect_MethodJset_clazz6FpnHoopDesc_2_v_; text: .text%__1cYjava_lang_reflect_MethodIset_slot6FpnHoopDesc_i_v_; text: .text%__1cYjava_lang_reflect_MethodGcreate6FpnGThread__nGHandle__; -text: .text%__1cPBytecode_invokeIis_valid6kM_i_; -text: .text%__1cKReflectionKnew_method6FnMmethodHandle_iipnGThread__pnHoopDesc__; -text: .text%__1cYjava_lang_reflect_MethodVhas_annotations_field6F_i_; text: .text%__1cYjava_lang_reflect_MethodPset_annotations6FpnHoopDesc_2_v_; text: .text%__1cYjava_lang_reflect_MethodWset_annotation_default6FpnHoopDesc_2_v_; text: .text%__1cYjava_lang_reflect_MethodNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cNmethodOopDescSannotation_default6kM_pnQtypeArrayOopDesc__; text: .text%__1cYjava_lang_reflect_MethodTset_exception_types6FpnHoopDesc_2_v_; text: .text%__1cYjava_lang_reflect_MethodTset_parameter_types6FpnHoopDesc_2_v_; text: .text%__1cVCallRuntimeDirectNodeKmethod_set6Ml_v_; -text: .text%__1cTconvD2I_reg_regNodePoper_input_base6kM_I_; -text: .text%__1cSTailCalljmpIndNodeJnum_opnds6kM_I_; -text: .text%__1cTconvI2D_reg_regNodePoper_input_base6kM_I_; -text: .text%__1cQorI_rReg_memNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cKstoreFNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cRaddI_mem_rRegNodePoper_input_base6kM_I_; text: .text%__1cMmulF_immNodeErule6kM_I_; -text: .text%__1cJAssemblerGmovlpd6MpnRFloatRegisterImpl_nHAddress__v_; -text: .text%__1cPcmpF_cc_regNodePoper_input_base6kM_I_; -text: .text%__1cNCompileBrokerTcompile_adapter_for6FnMmethodHandle_ii_pnMBasicAdapter__; text: .text%__1cCosbBthread_local_storage_at_put6Fipv_v_; -text: .text%__1cNCompileBrokerbBwait_for_adapter_completion6FpnLCompileTask__pnMBasicAdapter__; -text: .text%__1cOjmpLoopEndNodeJis_Branch6kM_I_; text: .text%__1cOjmpLoopEndNodeJlabel_set6MrnFLabel_I_v_; text: .text%__1cNinstanceKlassSregister_finalizer6FpnPinstanceOopDesc_pnGThread__2_; text: .text%__1cSThreadLocalStorageNpd_set_thread6FpnGThread__v_; -text: .text%__1cKCMoveINodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cSThreadLocalStoragebBget_thread_via_cache_slowly6FLi_pnGThread__; text: .text%__1cMrax_RegIOperEtype6kM_pknEType__; text: .text%__1cOjmpLoopEndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -5545,7 +3554,6 @@ text: .text%jni_GetMethodID: jni.o; text: .text%__1cSThreadLocalStorageSset_thread_in_slot6FpnGThread__v_; text: .text%get_thread; text: .text%__1cMincI_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cIGraphKitXinsert_mem_bar_volatile6MpnKMemBarNode_i_v_; text: .text%__1cSThreadLocalStorageKset_thread6FpnGThread__v_; text: .text%__1cCosHSolarisKmmap_chunk6FpcLii_2_; text: .text%__1cbFloadConL_0x6666666666666667NodeLout_RegMask6kM_rknHRegMask__; @@ -5555,75 +3563,52 @@ text: .text%__1cRxorI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cMmulD_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cNcmovP_regNodeLbottom_type6kM_pknEType__; text: .text%__1cJScopeDescTdecode_scope_values6Mi_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cTAbstractInterpreterWlayout_activation_impl6FpnNmethodOopDesc_iiiipnFframe_4i_i_; text: .text%__1cLconvI2BNodeMideal_Opcode6kM_i_; text: .text%__1cIDivLNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cQsalI_rReg_CLNodeHtwo_adr6kM_I_; text: .text%__1cPsarL_rReg_2NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNmodL_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cScompL_rReg_immNodeJnum_opnds6kM_I_; -text: .text%__1cQshrL_rReg_CLNodePoper_input_base6kM_I_; -text: .text%__1cJCMoveNode2t6MpnENode_22pknEType__v_; -text: .text%__1cJCMoveNodeEmake6FpnENode_222pknEType__p0_; text: .text%__1cVLoaderConstraintTableYextend_loader_constraint6MpnVLoaderConstraintEntry_nGHandle_pnMklassOopDesc__v_; text: .text%__1cIimmIOperJnum_edges6kM_I_; -text: .text%__1cJAssemblerFmovss6MpnRFloatRegisterImpl_nHAddress__v_; text: .text%__1cRtestI_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cRandL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNGrowableArray4CpnKciTypeFlowFBlock__Gremove6Mrk2_v_; text: .text%__1cVLoaderConstraintTablebHensure_loader_constraint_capacity6MpnVLoaderConstraintEntry_i_v_; -text: .text%__1cPsalL_rReg_1NodeJnum_opnds6kM_I_; -text: .text%__1cMsubD_regNodePoper_input_base6kM_I_; -text: .text%__1cMstoreSSPNodeJnum_opnds6kM_I_; text: .text%__1cMnegD_regNodeHtwo_adr6kM_I_; -text: .text%__1cIBytecodeIset_code6MnJBytecodesECode__v_; -text: .text%__1cPClassFileParserXverify_unqualified_name6MpcIi_i_; text: .text%__1cMdivD_immNodeMideal_Opcode6kM_i_; text: .text%__1cTconvI2F_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cQjava_lang_ThreadMis_stillborn6FpnHoopDesc__i_; text: .text%__1cQsarL_rReg_63NodeErule6kM_I_; text: .text%__1cRsubL_rReg_memNodeMideal_Opcode6kM_i_; text: .text%__1cMVirtualSpaceQuncommitted_size6kM_L_; text: .text%__1cRsubL_rReg_memNodePoper_input_base6kM_I_; -text: .text%__1cMVirtualSpaceJexpand_by6ML_i_; text: .text%__1cNstoreImmPNodeMideal_Opcode6kM_i_; text: .text%__1cQjava_lang_ThreadKset_thread6FpnHoopDesc_pnKJavaThread__v_; text: .text%__1cLOopMapCache2t6M_v_; -text: .text%__1cJloadDNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cQComputeCallStackHdo_char6M_v_; -text: .text%__1cNdivI_rRegNodePoper_input_base6kM_I_; -text: .text%__1cOcmovI_regUNodePoper_input_base6kM_I_; text: .text%__1cZInterpreterMacroAssemblerEpush6MnITosState__v_; text: .text%__1cSvframeArrayElementDbci6kM_i_; text: .text%__1cMaddF_regNodeErule6kM_I_; -text: .text%__1cTconvF2D_reg_memNodeHtwo_adr6kM_I_; text: .text%__1cNdecL_rRegNodeHtwo_adr6kM_I_; text: .text%__1cMdecI_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cFStateN_sub_Op_LoadF6MpknENode__v_; text: .text%__1cIMulDNodeLbottom_type6kM_pknEType__; text: .text%__1cNaddI_rRegNodeIpipeline6kM_pknIPipeline__; text: .text%__1cJAssemblerEdecl6MpnMRegisterImpl__v_; -text: .text%__1cOPhaseIdealLoopVinsert_pre_post_loops6MpnNIdealLoopTree_rnJNode_List_i_v_; text: .text%__1cJAssemblerGbswapl6MpnMRegisterImpl__v_; text: .text%__1cRInlineCacheBufferLnew_ic_stub6F_pnGICStub__; text: .text%__1cRInlineCacheBufferWcreate_transition_stub6FpnKCompiledIC_pnHoopDesc_pC_v_; text: .text%__1cIAddDNodeGOpcode6kM_i_; text: .text%__1cMincI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIpass_int6M_v_; -text: .text%__1cNloadConPcNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cGICStubIset_stub6MpnKCompiledIC_pnHoopDesc_pC_v_; text: .text%__1cRInlineCacheBufferXassemble_ic_buffer_code6FpCpnHoopDesc_1_v_; text: .text%__1cTconvD2I_reg_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cZInterpreterMacroAssemblerHpop_ptr6MpnMRegisterImpl__v_; -text: .text%__1cGThreadbCis_hidden_from_external_view6kM_i_; text: .text%__1cMelapsedTimer2t6M_v_; -text: .text%__1cGThreadVis_jvmti_agent_thread6kM_i_; text: .text%__1cMdivD_immNodeErule6kM_I_; text: .text%__1cTconvI2D_reg_regNodeMideal_Opcode6kM_i_; text: .text%__1cFTypeFFxmeet6kMpknEType__3_; text: .text%__1cJAssemblerEshrl6MpnMRegisterImpl_i_v_; text: .text%__1cGICStubLdestination6kM_pC_; -text: .text%__1cRsalL_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cRInlineCacheBufferVic_buffer_entry_point6FpC_1_; text: .text%__1cPcmpD_cc_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cMaddD_immNodeMideal_Opcode6kM_i_; @@ -5636,31 +3621,21 @@ text: .text%__1cNcmovP_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cUandI_rReg_imm255NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNdivL_rRegNodeHtwo_adr6kM_I_; text: .text%__1cKcastPPNodePoper_input_base6kM_I_; -text: .text%__1cMaddD_immNodePoper_input_base6kM_I_; text: .text%__1cFTypeDFxmeet6kMpknEType__3_; text: .text%__1cKloadUBNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cIDivLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cJloadDNodeErule6kM_I_; -text: .text%__1cRaddI_mem_rRegNodeJnum_opnds6kM_I_; text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; text: .text%__1cPsarL_rReg_1NodeMideal_Opcode6kM_i_; text: .text%__1cKCompiledICMstub_address6kM_pC_; text: .text%__1cMmulD_regNodeMcisc_operand6kM_i_; text: .text%__1cMmulF_memNodePoper_input_base6kM_I_; text: .text%lwp_cond_destroy: os_solaris.o; -text: .text%__1cHnmethodNis_osr_method6kM_i_; text: .text%lwp_mutex_destroy: os_solaris.o; -text: .text%__1cFParseScan_rerun_bytecode6M_i_; text: .text%__1cISubFNodeGOpcode6kM_i_; -text: .text%__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o; -text: .text%__1cFTypeDGis_nan6kM_i_; -text: .text%__1cTconvI2F_reg_regNodeJnum_opnds6kM_I_; text: .text%__1cOJavaAssertionsNmatch_package6Fpkc_pn0AKOptionList__; -text: .text%__1cOJavaAssertionsHenabled6Fpkci_i_; text: .text%__1cOJavaAssertionsLmatch_class6Fpkc_pn0AKOptionList__; text: .text%JVM_DesiredAssertionStatus; text: .text%__1cHTypePtrFxdual6kM_pknEType__; -text: .text%__1cTconvI2F_reg_regNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cQjava_lang_ThreadLthreadGroup6FpnHoopDesc__2_; text: .text%__1cLConvI2FNodeLbottom_type6kM_pknEType__; text: .text%__1cXjava_lang_reflect_FieldNset_modifiers6FpnHoopDesc_i_v_; @@ -5671,41 +3646,25 @@ text: .text%__1cXjava_lang_reflect_FieldJset_clazz6FpnHoopDesc_2_v_; text: .text%__1cXjava_lang_reflect_FieldIset_name6FpnHoopDesc_2_v_; text: .text%__1cJvmSymbolsOsignature_type6FpnNsymbolOopDesc__nJBasicType__; text: .text%__1cMloadConFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNnegI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cPcmpF_cc_regNodeHtwo_adr6kM_I_; -text: .text%__1cKReflectionJnew_field6FpnPfieldDescriptor_ipnGThread__pnHoopDesc__; text: .text%__1cXjava_lang_reflect_FieldIset_type6FpnHoopDesc_2_v_; text: .text%__1cKJavaThreadbScheck_safepoint_and_suspend_for_native_trans6Fp0_v_; text: .text%__1cXjava_lang_reflect_FieldPset_annotations6FpnHoopDesc_2_v_; text: .text%__1cXjava_lang_reflect_FieldGcreate6FpnGThread__nGHandle__; -text: .text%__1cXjava_lang_reflect_FieldVhas_annotations_field6F_i_; text: .text%__1cISubDNodeGOpcode6kM_i_; text: .text%__1cJloadFNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cSstring_compareNodeHtwo_adr6kM_I_; text: .text%__1cPfieldDescriptorLannotations6kM_pnQtypeArrayOopDesc__; text: .text%__1cRaddI_mem_rRegNodeMideal_Opcode6kM_i_; text: .text%__1cXjava_lang_reflect_FieldIset_slot6FpnHoopDesc_i_v_; -text: .text%__1cKScopeValueLis_location6kM_i_; -text: .text%__1cXjava_lang_reflect_FieldThas_signature_field6F_i_; text: .text%__1cMmulF_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cSObjectSynchronizerGnotify6FnGHandle_pnGThread__v_; text: .text%JVM_MonitorNotify; text: .text%__1cQsarL_rReg_63NodeLout_RegMask6kM_rknHRegMask__; text: .text%jni_GetStaticFieldID: jni.o; -text: .text%__1cIModLNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cPjava_lang_ClassOprimitive_type6FpnHoopDesc__nJBasicType__; -text: .text%__1cIjniIdMapGcreate6FnTinstanceKlassHandle__p0_; -text: .text%__1cPsarL_rReg_2NodeJnum_opnds6kM_I_; text: .text%__1cKReflectionbFbasic_type_mirror_to_basic_type6FpnHoopDesc_pnGThread__nJBasicType__; text: .text%__1cPcmpF_cc_regNodeMideal_Opcode6kM_i_; -text: .text%__1cQSystemDictionaryQjava_mirror_type6FpnHoopDesc__nJBasicType__; -text: .text%__1cIjniIdMap2t6MpnMklassOopDesc_i_v_; -text: .text%__1cIjniIdMapRcompute_index_cnt6FnTinstanceKlassHandle__i_; -text: .text%__1cLjniIdBucket2t6MpnIjniIdMap_p0_v_; text: .text%__1cNinstanceKlassKjni_id_for6Mi_pnFJNIid__; text: .text%__1cJLoadSNodeMstore_Opcode6kM_i_; -text: .text%__1cLTypeInstPtrLmirror_type6kM_pnGciType__; -text: .text%__1cMsubF_regNodePoper_input_base6kM_I_; text: .text%__1cPcmpD_cc_regNodeQuse_cisc_RegMask6M_v_; text: .text%__1cMlogD_regNodeMideal_Opcode6kM_i_; text: .text%__1cbFunnecessary_membar_volatileNodeLout_RegMask6kM_rknHRegMask__; @@ -5715,8 +3674,6 @@ text: .text%__1cMPipeline_Use2t6MIIIpnUPipeline_Use_Element__v_; text: .text%__1cKstorePNodeErule6kM_I_; text: .text%__1cNsymbolOopDescWas_klass_external_name6kM_pkc_; text: .text%__1cbFunnecessary_membar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNloadConPcNodeErule6kM_I_; -text: .text%__1cIPipeline2t6MIIiIIiiiipnSmachPipelineStages_2pInMPipeline_Use__v_; text: .text%__1cRComputeEntryStackGdo_int6M_v_; text: .text%__1cMstoreSSPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cSMachBreakpointNodeEsize6kMpnNPhaseRegAlloc__I_; @@ -5725,48 +3682,33 @@ text: .text%__1cNtestU_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cPsalL_rReg_1NodeHtwo_adr6kM_I_; text: .text%__1cNmodL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cTconvF2D_reg_regNodeErule6kM_I_; -text: .text%__1cJAssemblerDjmp6MpnMRegisterImpl_nJrelocInfoJrelocType__v_; -text: .text%__1cObox_handleNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cQsalI_rReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cQorI_rReg_memNodeErule6kM_I_; -text: .text%__1cLloadSSDNodePoper_input_base6kM_I_; -text: .text%__1cNCompileBrokerbAinvoke_compiler_on_adapter6FpnLCompileTask__v_; text: .text%__1cLConvF2DNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cMaddF_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cRxorI_rReg_memNodeFreloc6kM_i_; -text: .text%__1cMaddF_immNodePoper_input_base6kM_I_; text: .text%__1cKCMoveLNodeGOpcode6kM_i_; text: .text%__1cICodeHeapTmark_segmap_as_free6MLL_v_; text: .text%__1cRaddL_rReg_memNodePoper_input_base6kM_I_; text: .text%JVM_IsArrayClass; text: .text%__1cJAssemblerEsbbq6MnHAddress_i_v_; text: .text%__1cZInterpreterMacroAssemblerFpop_l6MpnMRegisterImpl__v_; -text: .text%__1cMmulD_regNodeJnum_opnds6kM_I_; -text: .text%__1cODeoptimizationYquery_update_method_data6FnQmethodDataHandle_in0ALDeoptReason_rIri4_pnLProfileData__; -text: .text%__1cICodeHeapJexpand_by6ML_i_; -text: .text%__1cMmulD_regNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cLConvF2DNodeLbottom_type6kM_pknEType__; text: .text%__1cJAssemblerEaddq6MnHAddress_i_v_; text: .text%JVM_GetClassName; text: .text%__1cTconvF2D_reg_regNodeMcisc_operand6kM_i_; text: .text%__1cLStringTableGintern6FpkcpnGThread__pnHoopDesc__; -text: .text%__1cMmulD_immNodeJnum_opnds6kM_I_; text: .text%__1cNmulI_rRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cQorI_rReg_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnPPerfLongCounter__; text: .text%__1cNObjectMonitorGnotify6MpnGThread__v_; text: .text%__1cQjava_lang_ThreadMset_priority6FpnHoopDesc_nOThreadPriority__v_; text: .text%__1cRsubL_rReg_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cRaddL_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cRsubL_rReg_memNodeRis_cisc_alternate6kM_i_; -text: .text%__1cRsubL_rReg_memNodeJnum_opnds6kM_I_; text: .text%__1cPshrL_rReg_1NodeErule6kM_I_; text: .text%__1cQshrI_rReg_CLNodeHtwo_adr6kM_I_; text: .text%__1cFStateO_sub_Op_CMoveI6MpknENode__v_; text: .text%__1cFStateM_sub_Op_RegD6MpknENode__v_; text: .text%__1cQorI_rReg_memNodeHtwo_adr6kM_I_; -text: .text%__1cUCallNativeDirectNodeHtwo_adr6kM_I_; -text: .text%__1cTconvI2D_reg_regNodeMcisc_operand6kM_i_; text: .text%__1cXNativeSignatureIteratorGdo_int6M_v_; text: .text%__1cIMaxINodeJideal_reg6kM_I_; text: .text%__1cFJNIid2t6MpnMklassOopDesc_ip0_v_; @@ -5774,31 +3716,18 @@ text: .text%__1cNinstanceKlassPjni_id_for_impl6FnTinstanceKlassHandle_i_pnFJNIid text: .text%__1cJAssemblerEaddq6MpnMRegisterImpl_nHAddress__v_; text: .text%JVM_Open; text: .text%__1cHRegMask2t6Miiiiiii_v_; -text: .text%__1cbFloadConL_0x6666666666666667NodeHtwo_adr6kM_I_; text: .text%__1cNsubI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMmulF_regNodePoper_input_base6kM_I_; -text: .text%__1cZInterpreterMacroAssemblerVincrement_mdp_data_at6MpnMRegisterImpl_i_v_; -text: .text%__1cQConstantIntValuePis_constant_int6kM_i_; -text: .text%__1cRmulL_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cPsarL_rReg_2NodeHtwo_adr6kM_I_; -text: .text%__1cKmul_hiNodeHtwo_adr6kM_I_; text: .text%__1cQConstantIntValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cRxorI_rReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cFStateM_sub_Op_ConD6MpknENode__v_; text: .text%__1cLConvI2DNodeGOpcode6kM_i_; text: .text%__1cVLoaderConstraintTableJnew_entry6MIpnNsymbolOopDesc_pnMklassOopDesc_ii_pnVLoaderConstraintEntry__; -text: .text%__1cNaddP_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cPcmpF_cc_regNodeMcisc_operand6kM_i_; text: .text%__1cJAssemblerFcmovl6Mn0AJCondition_pnMRegisterImpl_3_v_; -text: .text%__1cVscale_to_lwp_priority6Fiii_i_: os_solaris.o; -text: .text%__1cLOptoRuntimeWresolve_virtual_call_C6FpnKJavaThread__pC_; text: .text%__1cNPerfByteArray2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_i_v_; -text: .text%__1cLStrCompNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cMmulF_memNodeMideal_Opcode6kM_i_; text: .text%__1cKConv2BNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cJloadDNodeJnum_opnds6kM_I_; text: .text%__1cFStateM_sub_Op_RegF6MpknENode__v_; -text: .text%__1cMmulF_immNodeJnum_opnds6kM_I_; text: .text%__1cOMacroAssemblerKnull_check6MpnMRegisterImpl_i_v_; text: .text%__1cNcmovP_regNodeHtwo_adr6kM_I_; text: .text%jni_GetStaticObjectField: jni.o; @@ -5806,19 +3735,14 @@ text: .text%__1cIGraphKitSprecision_rounding6MpnENode__2_; text: .text%__1cScompL_rReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cSTailCalljmpIndNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cTconvD2F_reg_regNodeMideal_Opcode6kM_i_; -text: .text%__1cLCastP2LNodeUdepends_only_on_test6kM_i_; text: .text%__1cTconvF2D_reg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMmulD_immNodeHtwo_adr6kM_I_; text: .text%__1cOMacroAssemblerFleave6M_v_; text: .text%__1cMloadConDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMTailCallNode2t6MpnENode_222222_v_; -text: .text%__1cICmpDNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cXPartialSubtypeCheckNodeGOpcode6kM_i_; text: .text%__1cSTailCalljmpIndNodeFreloc6kM_i_; -text: .text%__1cObox_handleNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cOloadConL32NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMlogD_regNodePoper_input_base6kM_I_; -text: .text%__1cTconvI2F_reg_regNodeHtwo_adr6kM_I_; text: .text%__1cMnegD_regNodeErule6kM_I_; text: .text%__1cLvframeArrayRregister_location6kMi_pC_; text: .text%__1cQorI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -5826,10 +3750,7 @@ text: .text%__1cFStateQ_sub_Op_TailCall6MpknENode__v_; text: .text%__1cIOSThreadNpd_initialize6M_v_; text: .text%__1cCosScurrent_process_id6F_i_; text: .text%__1cMaddD_immNodeErule6kM_I_; -text: .text%__1cNmaxI_rRegNodePoper_input_base6kM_I_; text: .text%__1cPshrL_rReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTconvI2F_reg_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cNmaxI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cIMaxINodeIadd_ring6kMpknEType_3_3_; text: .text%__1cCosRinitialize_thread6F_v_; text: .text%__1cCosHSolarisKvm_signals6F_pnIsigset_t__; @@ -5844,7 +3765,6 @@ text: .text%__1cCosHSolarisVinit_thread_fpu_state6F_v_; text: .text%__1cIOSThread2t6MpFpv_i1_v_; text: .text%jni_CallStaticVoidMethod: jni.o; text: .text%__1cCosScurrent_stack_size6F_L_; -text: .text%__1cNPhaseRegAllocHset_oop6MpknENode_i_v_; text: .text%__1cCosScurrent_stack_base6F_pC_; text: .text%__1cJloadFNodeFreloc6kM_i_; text: .text%__1cCosMstart_thread6FpnGThread__v_; @@ -5853,14 +3773,10 @@ text: .text%__1cKstoreLNodeIpipeline6kM_pknIPipeline__; text: .text%__1cXNativeSignatureIteratorHdo_long6M_v_; text: .text%__1cNcmovL_memNodeErule6kM_I_; text: .text%__1cFStateO_sub_Op_StoreF6MpknENode__v_; -text: .text%__1cHnmethodbAmake_not_entrant_or_zombie6Mi_v_; text: .text%__1cCosPpd_start_thread6FpnGThread__v_; text: .text%__1cNcmovL_regNodeMcisc_operand6kM_i_; -text: .text%__1cCosNcreate_thread6FpnGThread_n0AKThreadType_L_i_; -text: .text%__1cLconvI2BNodePoper_input_base6kM_I_; text: .text%__1cOGenerateOopMapMdo_checkcast6M_v_; text: .text%JVM_SetThreadPriority; -text: .text%__1cG_start6Fpv_0_: os_solaris.o; text: .text%__1cLOptoRuntimeMrethrow_Type6F_pknITypeFunc__; text: .text%JVM_GetStackAccessControlContext; text: .text%JVM_IsThreadAlive; @@ -5868,27 +3784,16 @@ text: .text%__1cTconvL2D_reg_memNodeMideal_Opcode6kM_i_; text: .text%__1cSstring_compareNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNdivI_rRegNodeErule6kM_I_; text: .text%__1cNdecL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOLibraryCallKitYinline_native_time_funcs6Mi_i_; text: .text%__1cNGrowableArray4CpknEType__2t6MpnFArena_iirk2_v_; text: .text%__1cFParseVcatch_call_exceptions6MrnYciExceptionHandlerStream__v_; -text: .text%__1cTconvL2F_reg_regNodePoper_input_base6kM_I_; -text: .text%__1cQjava_lang_ThreadIis_alive6FpnHoopDesc__i_; text: .text%jni_CallObjectMethod: jni.o; text: .text%__1cJAssemblerExorq6MpnMRegisterImpl_2_v_; -text: .text%__1cNcmovL_regNodeJnum_opnds6kM_I_; text: .text%__1cLOptoRuntimeYcurrent_time_millis_Type6F_pknITypeFunc__; text: .text%__1cOcmovI_regUNodeMideal_Opcode6kM_i_; -text: .text%__1cNcmovL_regNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cNObjectMonitorJnotifyAll6MpnGThread__v_; text: .text%__1cMsubD_regNodeMideal_Opcode6kM_i_; -text: .text%__1cNloadConL0NodeFclone6kM_pnENode__; text: .text%__1cPcmpF_cc_regNodeErule6kM_I_; -text: .text%__1cJimmL0OperFclone6kM_pnIMachOper__; text: .text%__1cNmodI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPcmpF_cc_regNodeJnum_opnds6kM_I_; -text: .text%__1cPcmpF_cc_regNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cbFloadConL_0x6666666666666667NodePoper_input_base6kM_I_; -text: .text%__1cZInterpreterMacroAssemblerFpop_d6MpnRFloatRegisterImpl__v_; text: .text%__1cTconvL2D_reg_memNodePoper_input_base6kM_I_; text: .text%__1cLConvD2FNodeGOpcode6kM_i_; text: .text%__1cWThreadLocalAllocBufferKinitialize6M_v_; @@ -5896,45 +3801,30 @@ text: .text%__1cJloadDNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEtemp6F_pnMRegisterImpl__; text: .text%__1cMmulF_immNodeHtwo_adr6kM_I_; text: .text%__1cQsarL_rReg_63NodeHtwo_adr6kM_I_; -text: .text%__1cQsarL_rReg_63NodeJnum_opnds6kM_I_; -text: .text%__1cQjava_lang_StringbHcreate_from_platform_depended_str6FpkcpnGThread__nGHandle__; text: .text%__1cMsubF_regNodeMideal_Opcode6kM_i_; text: .text%__1cTconvI2L_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cWThreadLocalAllocBufferMinitial_size6F_L_; text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorJpass_long6M_v_; text: .text%__1cSInterpreterRuntimeMat_safepoint6FpnKJavaThread__v_; text: .text%__1cTconvF2I_reg_regNodeMideal_Opcode6kM_i_; text: .text%__1cRandI_rReg_memNodePoper_input_base6kM_I_; text: .text%__1cRandI_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cCosNcommit_memory6FpcL_i_; -text: .text%__1cNdivI_rRegNodeJnum_opnds6kM_I_; -text: .text%__1cENodeJis_MemBar6kM_pknKMemBarNode__; -text: .text%__1cNjni_functions6F_pknTJNINativeInterface___; -text: .text%__1cNThreadServiceKadd_thread6FpnKJavaThread_i_v_; text: .text%JVM_NativePath; text: .text%__1cKJavaThreadKinitialize6M_v_; -text: .text%__1cHThreadsDadd6FpnKJavaThread_i_v_; -text: .text%__1cGParker2t6M_v_; text: .text%__1cOPhaseIdealLoopKdo_peeling6MpnNIdealLoopTree_rnJNode_List__v_; text: .text%__1cUThreadSafepointStateGcreate6FpnKJavaThread__v_; text: .text%__1cPciInstanceKlassLjava_mirror6M_pnKciInstance__; text: .text%__1cKJavaThreadYcreate_stack_guard_pages6M_v_; text: .text%__1cUThreadSafepointState2t6MpnKJavaThread__v_; -text: .text%__1cCosMguard_memory6FpcL_i_; text: .text%__1cMnegD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cUCallNativeDirectNodePoper_input_base6kM_I_; text: .text%__1cHnmethodTinc_decompile_count6M_v_; text: .text%__1cIMinINodeIadd_ring6kMpknEType_3_3_; text: .text%__1cMResourceMarkNreset_to_mark6M_v_; text: .text%__1cQThreadStatistics2t6M_v_; -text: .text%__1cMFlatProfilerJis_active6F_i_; -text: .text%__1cNloadConPcNodeLbottom_type6kM_pknEType__; text: .text%__1cMmulD_regNodeErule6kM_I_; text: .text%__1cMdivD_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKJavaThread2t6MpFp0pnGThread__vL_v_; text: .text%__1cPcmpD_cc_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cTconvI2D_reg_regNodeErule6kM_I_; -text: .text%__1cQshrL_rReg_CLNodeJnum_opnds6kM_I_; text: .text%__1cNcmovL_memNodePoper_input_base6kM_I_; text: .text%__1cNdivL_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cPcmpD_cc_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -5949,38 +3839,25 @@ text: .text%__1cQsalL_rReg_CLNodeHtwo_adr6kM_I_; text: .text%__1cVCallRuntimeDirectNodeFreloc6kM_i_; text: .text%__1cIGraphKitIset_jvms6MpnIJVMState__v_; text: .text%__1cKJavaThreadDrun6M_v_; -text: .text%__1cTconvD2I_reg_regNodeJnum_opnds6kM_I_; text: .text%__1cOsalI_mem_1NodePoper_input_base6kM_I_; -text: .text%__1cSMachCallNativeNodePret_addr_offset6M_i_; text: .text%__1cMLinkResolverbEresolve_interface_call_or_null6FnLKlassHandle_1nMsymbolHandle_21_nMmethodHandle__; -text: .text%__1cZInterpreterMacroAssemblerFpop_f6MpnRFloatRegisterImpl__v_; text: .text%__1cMrdi_RegIOperEtype6kM_pknEType__; -text: .text%__1cVThreadStateTransitionKtransition6FpnKJavaThread_nPJavaThreadState_3_v_; -text: .text%__1cUCallNativeDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cKJavaThreadRthread_main_inner6M_v_; -text: .text%__1cQorI_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cIGraphKitbAgen_stub_or_native_wrapper6MpCpkcpnIciMethod_iiiii_v_; text: .text%__1cPsalL_rReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMResourceMark2t6M_v_; text: .text%__1cQshrI_rReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cJScopeDescGlocals6M_pnNGrowableArray4CpnKScopeValue____; text: .text%__1cJScopeDescVdecode_monitor_values6Mi_pnNGrowableArray4CpnMMonitorValue____; -text: .text%__1cSvframeArrayElementPunpack_on_stack6MiipnFframe_ii_v_; -text: .text%__1cTAbstractInterpreterRlayout_activation6FpnNmethodOopDesc_iiiipnFframe_4i_v_; text: .text%__1cOcompiledVFrameLexpressions6kM_pnUStackValueCollection__; text: .text%__1cOcompiledVFrameImonitors6kM_pnNGrowableArray4CpnLMonitorInfo____; text: .text%__1cOcompiledVFrameGmethod6kM_pnNmethodOopDesc__; text: .text%__1cSvframeArrayElementHfill_in6MpnOcompiledVFrame__v_; text: .text%__1cOcompiledVFrameHraw_bci6kM_i_; -text: .text%__1cNGrowableArray4CpnLMonitorInfo__2t6Mii_v_; text: .text%__1cPPerfDataManagerWcreate_string_constant6FnJCounterNS_pkc3pnGThread__pnSPerfStringConstant__; text: .text%__1cOMacroAssemblerKincrementl6MpnMRegisterImpl_i_v_; text: .text%__1cFframebCinterpreter_frame_set_locals6Mpl_v_; text: .text%__1cFframebHinterpreter_frame_set_monitor_end6MpnPBasicObjectLock__v_; -text: .text%__1cTAbstractInterpreterPsize_activation6FpnNmethodOopDesc_iiiii_i_; text: .text%__1cSPerfStringConstant2t6MnJCounterNS_pkc3_v_; -text: .text%__1cTAbstractInterpreterQcontinuation_for6FpnNmethodOopDesc_pCiiri_3_; -text: .text%__1cZInterpreterMacroAssemblerLcall_VM_Ico6MpnMRegisterImpl_pC2i_v_; text: .text%__1cFframebCinterpreter_frame_set_method6MpnNmethodOopDesc__v_; text: .text%__1cMmulF_regNodeMideal_Opcode6kM_i_; text: .text%__1cFframebBinterpreter_frame_sender_sp6kM_pl_; @@ -5991,18 +3868,10 @@ text: .text%__1cJScopeDescImonitors6M_pnNGrowableArray4CpnMMonitorValue____; text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_i_v_; text: .text%__1cOcompiledVFrameGlocals6kM_pnUStackValueCollection__; text: .text%__1cJScopeDescLexpressions6M_pnNGrowableArray4CpnKScopeValue____; -text: .text%__1cTconvF2D_reg_memNodeRis_cisc_alternate6kM_i_; -text: .text%__1cSvframeArrayElementNon_stack_size6kMiiii_i_; -text: .text%__1cMaddD_regNodePoper_input_base6kM_I_; text: .text%__1cXjava_lang_boxing_objectJget_value6FpnHoopDesc_pnGjvalue__nJBasicType__; -text: .text%__1cMorL_rRegNodePoper_input_base6kM_I_; -text: .text%__1cOcmovD_regUNodePoper_input_base6kM_I_; text: .text%__1cPcmovI_reg_gNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMdivD_immNodePoper_input_base6kM_I_; -text: .text%__1cJloadDNodeHtwo_adr6kM_I_; text: .text%__1cKReflectionTunbox_for_primitive6FpnHoopDesc_pnGjvalue_pnGThread__nJBasicType__; text: .text%__1cCosMset_priority6FpnGThread_nOThreadPriority__nIOSReturn__; -text: .text%__1cMmulF_memNodeJnum_opnds6kM_I_; text: .text%__1cIMulDNodeImul_ring6kMpknEType_3_3_; text: .text%__1cODeoptimizationVtrap_state_add_reason6Fii_i_; text: .text%__1cDhpiFclose6Fi_i_; @@ -6012,32 +3881,22 @@ text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MpnMRegisterImpl text: .text%__1cNcmovL_regNodeMideal_Opcode6kM_i_; text: .text%__1cZInterpreterMacroAssemblerWupdate_mdp_by_constant6MpnMRegisterImpl_i_v_; text: .text%__1cOtailjmpIndNodeNis_block_proj6kM_pknENode__; -text: .text%__1cRaddL_rReg_memNodeJnum_opnds6kM_I_; text: .text%__1cTconvI2F_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cTconvL2F_reg_regNodeMideal_Opcode6kM_i_; text: .text%__1cGICStubKcached_oop6kM_pnHoopDesc__; text: .text%__1cRInlineCacheBufferUic_buffer_cached_oop6FpC_pnHoopDesc__; -text: .text%__1cTconvD2F_reg_regNodePoper_input_base6kM_I_; -text: .text%__1cJAssemblerFpushq6Mi_v_; text: .text%JVM_Close; -text: .text%__1cMnegF_regNodePoper_input_base6kM_I_; -text: .text%__1cOcmovI_regUNodeJnum_opnds6kM_I_; -text: .text%__1cbCAbstractInterpreterGeneratorRset_unimplemented6Mi_v_; text: .text%__1cRComputeEntryStackJdo_object6Mii_v_; text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cOcmovI_regUNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cGThreadMset_priority6Fp0nOThreadPriority__v_; text: .text%jni_NewObjectV: jni.o; text: .text%__1cKConv2BNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cQshrL_rReg_CLNodeErule6kM_I_; text: .text%__1cTconvF2D_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHnmethodbCcan_not_entrant_be_converted6M_i_; text: .text%__1cNSafePointNodeQpeek_monitor_obj6kM_pnENode__; text: .text%__1cOcmovI_regUNodeMcisc_operand6kM_i_; text: .text%__1cNSafePointNodeQpeek_monitor_box6kM_pnENode__; text: .text%__1cJLoadBNodeMstore_Opcode6kM_i_; -text: .text%__1cVCompressedWriteStreamKwrite_long6Mx_v_; -text: .text%__1cTconvF2I_reg_regNodePoper_input_base6kM_I_; text: .text%__1cLConvF2INodeGOpcode6kM_i_; text: .text%__1cPMultiBranchDataScompute_cell_count6FpnOBytecodeStream__i_; text: .text%__1cFParsePdo_monitor_exit6M_v_; @@ -6047,70 +3906,39 @@ text: .text%__1cRStubCodeGeneratorLstub_epilog6MpnMStubCodeDesc__v_; text: .text%__1cRStubCodeGeneratorLstub_prolog6MpnMStubCodeDesc__v_; text: .text%__1cKcastPPNodeErule6kM_I_; text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pF3_v3_v_; -text: .text%__1cOsalI_mem_1NodeJnum_opnds6kM_I_; text: .text%__1cKJavaThreadbFdeoptimized_wrt_marked_nmethods6M_v_; text: .text%__1cKJavaThreadHprepare6MpnI_jobject_nOThreadPriority__v_; -text: .text%__1cPshrL_rReg_1NodeJnum_opnds6kM_I_; -text: .text%__1cRandI_rReg_memNodeRis_cisc_alternate6kM_i_; -text: .text%__1cRandI_rReg_memNodeJnum_opnds6kM_I_; -text: .text%__1cQorI_rReg_memNodeRis_cisc_alternate6kM_i_; text: .text%__1cJAssemblerGmovslq6MpnMRegisterImpl_2_v_; text: .text%__1cRandI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cQjava_lang_ThreadJstackSize6FpnHoopDesc__x_; text: .text%__1cRConstantLongValueIwrite_on6MpnUDebugInfoWriteStream__v_; text: .text%JVM_StartThread; text: .text%__1cMthread_entry6FpnKJavaThread_pnGThread__v_: jvm.o; -text: .text%__1cTconvF2D_reg_regNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cMsubD_regNodeErule6kM_I_; text: .text%__1cQjava_lang_ThreadIpriority6FpnHoopDesc__nOThreadPriority__; text: .text%__1cNmulI_rRegNodeQuse_cisc_RegMask6M_v_; text: .text%__1cIMulFNodeImul_ring6kMpknEType_3_3_; text: .text%__1cLRuntimeStub2n6FLI_pv_; -text: .text%__1cLRuntimeStubQnew_runtime_stub6FpkcpnKCodeBuffer_ipnJOopMapSet_i_p0_; -text: .text%__1cLRuntimeStub2t6MpkcpnKCodeBuffer_iipnJOopMapSet_i_v_; -text: .text%__1cTconvF2D_reg_regNodeJnum_opnds6kM_I_; -text: .text%__1cRxorI_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cMmulF_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOLibraryCallKitbDis_method_invoke_or_aux_frame6MpnIJVMState__i_; text: .text%__1cbFloadConL_0x6666666666666667NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIAddFNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cOloadConL32NodeHsize_of6kM_I_; text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFn0AJOperation__v4_v_; text: .text%__1cRaddL_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIDivLNodeJideal_reg6kM_I_; text: .text%__1cGICStubFclear6M_v_; -text: .text%__1cTconvI2D_reg_regNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cMsubD_regNodeJnum_opnds6kM_I_; -text: .text%__1cMsubD_regNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cHCompileWget_MethodAccessorImpl6M_pnPciInstanceKlass__; -text: .text%__1cHCompileRget_Method_invoke6M_pnIciMethod__; text: .text%__1cNdecI_rRegNodeIpipeline6kM_pknIPipeline__; text: .text%__1cFTypeFFxdual6kM_pknEType__; -text: .text%__1cTconvL2D_reg_memNodeJnum_opnds6kM_I_; -text: .text%__1cTconvI2D_reg_regNodeJnum_opnds6kM_I_; -text: .text%__1cTunsafe_intrinsic_id6FpnNsymbolOopDesc_1_nMvmIntrinsicsCID__; -text: .text%__1cPPerfDataManagerUcreate_long_constant6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongConstant__; text: .text%__1cFStateM_sub_Op_ConF6MpknENode__v_; text: .text%__1cMloadConFNodeHsize_of6kM_I_; text: .text%__1cPsarL_rReg_2NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cQsarL_rReg_63NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cPoldgetTimeNanos6F_x_; -text: .text%__1cPno_rax_RegLOperFclone6kM_pnIMachOper__; -text: .text%__1cTAbstractInterpreterMreturn_entry6FnITosState_i_pC_; -text: .text%__1cPsarL_rReg_1NodePoper_input_base6kM_I_; -text: .text%__1cMnegD_regNodeJnum_opnds6kM_I_; text: .text%__1cKmul_hiNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJAssemblerEjccb6Mn0AJCondition_rnFLabel_nJrelocInfoJrelocType__v_; text: .text%__1cNcmovP_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cHMonitor2T6M_v_; text: .text%__1cINegDNodeLbottom_type6kM_pknEType__; -text: .text%__1cLvframeArrayIallocate6FpnKJavaThread_ipnNGrowableArray4CpnOcompiledVFrame___pnLRegisterMap_nFframe_9A9A9A_p0_; -text: .text%__1cNThreadServiceNremove_thread6FpnKJavaThread_i_v_; text: .text%__1cQjava_lang_ThreadbGinherited_access_control_context6FpnHoopDesc__2_; -text: .text%__1cODeoptimizationScreate_vframeArray6FpnKJavaThread_nFframe_pnLRegisterMap__pnLvframeArray__; text: .text%__1cHThreadsGremove6FpnKJavaThread__v_; text: .text%__1cODeoptimizationTuncommon_trap_inner6FpnKJavaThread_i_v_; -text: .text%__1cODeoptimizationPget_method_data6FpnKJavaThread_nMmethodHandle_i_pnRmethodDataOopDesc__; text: .text%__1cLensure_join6FpnKJavaThread__v_: thread.o; text: .text%__1cIOSThread2T6M_v_; text: .text%__1cODeoptimizationNuncommon_trap6FpnKJavaThread_i_pn0ALUnrollBlock__; @@ -6118,10 +3946,7 @@ text: .text%__1cTconvI2D_reg_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cODeoptimizationRgather_statistics6Fn0ALDeoptReason_n0ALDeoptAction_nJBytecodesECode__v_; text: .text%__1cUThreadSafepointStateHdestroy6FpnKJavaThread__v_; text: .text%__1cIGraphKitTdprecision_rounding6MpnENode__2_; -text: .text%__1cNGrowableArray4CpnOcompiledVFrame__2t6Mii_v_; text: .text%__1cOcmovI_regUNodeErule6kM_I_; -text: .text%__1cKJavaThreadEexit6Mi_v_; -text: .text%__1cGParker2T6M_v_; text: .text%__1cCosLfree_thread6FpnIOSThread__v_; text: .text%__1cXpartialSubtypeCheckNodeMideal_Opcode6kM_i_; text: .text%JVM_GetInheritedAccessControlContext; @@ -6135,10 +3960,6 @@ text: .text%__1cMmulD_memNodePoper_input_base6kM_I_; text: .text%__1cRInlineCacheBufferSic_destination_for6FpnKCompiledIC__pC_; text: .text%__1cLvframeArrayPunpack_to_stack6MrnFframe_i_v_; text: .text%__1cOcompL_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cODeoptimizationLUnrollBlock2t6MiiiiiplppCnJBasicType__v_; -text: .text%__1cLvframeArrayHfill_in6MpnKJavaThread_ipnNGrowableArray4CpnOcompiledVFrame___pknLRegisterMap_i_v_; -text: .text%__SLIP.DELETER__A: thread.o; -text: .text%__1cbIjava_security_AccessControlContextGcreate6FnOobjArrayHandle_inGHandle_pnGThread__pnHoopDesc__; text: .text%__1cIOSThreadKpd_destroy6M_v_; text: .text%__1cMaddF_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cODeoptimizationYfetch_unroll_info_helper6FpnKJavaThread__pn0ALUnrollBlock__; @@ -6146,15 +3967,12 @@ text: .text%__1cODeoptimizationRlast_frame_adjust6Fii_i_; text: .text%__1cKJavaThreadYremove_stack_guard_pages6M_v_; text: .text%__1cODeoptimizationNunpack_frames6FpnKJavaThread_i_nJBasicType__; text: .text%__1cNnmethodLocker2t6MpC_v_; -text: .text%__1cTconvD2I_reg_regNodeHtwo_adr6kM_I_; text: .text%__1cOtailjmpIndNodeMideal_Opcode6kM_i_; text: .text%__1cLconvI2BNodeErule6kM_I_; text: .text%__1cTconvF2I_reg_regNodeErule6kM_I_; text: .text%__1cIciMethodVget_osr_flow_analysis6Mi_pnKciTypeFlow__; text: .text%__1cSCallLeafDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQAbstractCompilerMsupports_osr6M_i_; text: .text%__1cRaddL_mem_rRegNodePoper_input_base6kM_I_; -text: .text%__1cSCallLeafDirectNodeJnum_opnds6kM_I_; text: .text%__1cXjava_lang_reflect_FieldJmodifiers6FpnHoopDesc__i_; text: .text%__1cMmulL_memNodePoper_input_base6kM_I_; text: .text%__1cODeoptimizationLUnrollBlock2T6M_v_; @@ -6171,14 +3989,10 @@ text: .text%__1cJSubFPNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cZInterpreterMacroAssemblerNdispatch_only6MnITosState__v_; text: .text%__1cRcmpFastUnlockNodeIpipeline6kM_pknIPipeline__; text: .text%__1cKloadUBNodeFreloc6kM_i_; -text: .text%__1cMStartOSRNodeScalling_convention6kMpnLOptoRegPair_I_v_; text: .text%__1cMStartOSRNodeKosr_domain6F_pknJTypeTuple__; -text: .text%__1cMloadConPNodeGis_Con6kM_I_; text: .text%__1cMmulD_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cXjava_lang_reflect_FieldFclazz6FpnHoopDesc__2_; -text: .text%__1cOPSVirtualSpaceJexpand_by6ML_i_; text: .text%__1cNCallGeneratorHfor_osr6FpnIciMethod_i_p0_; -text: .text%__1cFParseWload_interpreter_state6MpnENode_2_v_; text: .text%__1cKstoreINodeIpipeline6kM_pknIPipeline__; text: .text%__1cOstackSlotDOperKin_RegMask6kMi_pknHRegMask__; text: .text%jni_GetFloatArrayRegion: jni.o; @@ -6191,121 +4005,82 @@ text: .text%__1cRaddL_mem_rRegNodeMideal_Opcode6kM_i_; text: .text%__1cIAddFNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cJloadDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMlogD_regNodeErule6kM_I_; -text: .text%__1cXpartialSubtypeCheckNodePoper_input_base6kM_I_; text: .text%__1cNmulI_rRegNodeHtwo_adr6kM_I_; text: .text%__1cMdecI_memNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cQsalL_rReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cKemit_break6FrnKCodeBuffer__v_; text: .text%jni_GetStaticMethodID: jni.o; -text: .text%__1cOstackSlotDOperJnum_edges6kM_I_; text: .text%__1cMsubF_regNodeMcisc_operand6kM_i_; text: .text%__1cMdecI_memNodeFreloc6kM_i_; -text: .text%__1cMdecI_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cRCardTableModRefBSbCfind_covering_region_by_base6MpnIHeapWord__i_; text: .text%__1cRCardTableModRefBSVresize_covered_region6MnJMemRegion__v_; text: .text%__1cINegFNodeGOpcode6kM_i_; text: .text%__1cRCardTableModRefBSbAlargest_prev_committed_end6kMi_pnIHeapWord__; -text: .text%__1cLloadSSDNodeJnum_opnds6kM_I_; text: .text%__1cSMachBreakpointNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cSCardTableExtensionVresize_covered_region6MnJMemRegion__v_; -text: .text%__1cLconvI2BNodeJnum_opnds6kM_I_; text: .text%__1cNstoreImmPNodePoper_input_base6kM_I_; text: .text%__1cKReflectionUarray_component_type6FpnHoopDesc_pnGThread__2_; text: .text%__1cKoopFactoryUnew_compiledICHolder6FnMmethodHandle_nLKlassHandle_pnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cHCompile2t6MpnFciEnv_pF_pknITypeFunc_pCpkciiii_v_; text: .text%__1cTconvL2F_reg_regNodeMcisc_operand6kM_i_; -text: .text%__1cMciArrayKlassOis_array_klass6M_i_; -text: .text%__1cNloadConPcNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cKarrayKlassWuncached_lookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; text: .text%__1cFStateM_sub_Op_CmpD6MpknENode__v_; -text: .text%__1cNloadConL0NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cUCallNativeDirectNodeKmethod_set6Ml_v_; text: .text%__1cKcastPPNodeMideal_Opcode6kM_i_; -text: .text%__1cNcmovL_memNodeJnum_opnds6kM_I_; text: .text%__1cZInterpreterMacroAssemblerUprofile_taken_branch6MpnMRegisterImpl_2_v_; text: .text%__1cPshrL_rReg_1NodeHtwo_adr6kM_I_; -text: .text%__1cIGraphKitIgen_stub6MpCpkciii_v_; text: .text%__1cbDcatch_cleanup_find_cloned_def6FpnFBlock_pnENode_1rnLBlock_Array_i_3_: lcm.o; text: .text%__1cVcompiledICHolderKlassIallocate6MpnGThread__pnXcompiledICHolderOopDesc__; -text: .text%__1cTC2IAdapterGeneratorUmkh_unverified_entry6FnMmethodHandle__pC_; -text: .text%__1cRaddL_rReg_memNodeRis_cisc_alternate6kM_i_; -text: .text%__1cLOptoRuntimeNgenerate_stub6FpnFciEnv_pF_pknITypeFunc_pCpkciiii_8_; text: .text%__1cISubDNodeLbottom_type6kM_pknEType__; text: .text%__1cbCcatch_cleanup_fix_all_inputs6FpnENode_11_v_: lcm.o; text: .text%__1cISubFNodeLbottom_type6kM_pknEType__; text: .text%__1cNdivI_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNTemplateTableGbranch6Fii_v_; -text: .text%__1cNstoreImmPNodeHtwo_adr6kM_I_; -text: .text%__1cLOptoRuntimeRnew_objArray_Type6F_pknITypeFunc__; text: .text%JVM_GetComponentType; text: .text%__1cIMulDNodeJideal_reg6kM_I_; -text: .text%__1cTconvF2D_reg_regNodeHtwo_adr6kM_I_; text: .text%__1cJAssemblerEsbbq6MpnMRegisterImpl_i_v_; text: .text%__1cNcmovL_memNodeMideal_Opcode6kM_i_; text: .text%jni_GetStringRegion: jni.o; text: .text%jni_EnsureLocalCapacity: jni.o; -text: .text%__1cLloadSSDNodeHtwo_adr6kM_I_; text: .text%__1cMaddF_memNodePoper_input_base6kM_I_; text: .text%__1cFParseMdo_anewarray6M_v_; text: .text%__1cLConvI2FNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cLconvI2BNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cOMacroAssemblerHcall_VM6MpnMRegisterImpl_pC22i_v_; text: .text%__1cHThreadsYis_supported_jni_version6Fi_C_; -text: .text%__1cMincL_memNodeJnum_opnds6kM_I_; -text: .text%__1cRandL_rReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cKarrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cRaddL_mem_rRegNodeJnum_opnds6kM_I_; text: .text%JVM_NewArray; text: .text%JVM_FreeMemory; text: .text%JVM_TotalMemory; -text: .text%__1cMaddD_immNodeJnum_opnds6kM_I_; -text: .text%__1cMsubF_regNodeJnum_opnds6kM_I_; -text: .text%__1cLloadSSINodePoper_input_base6kM_I_; text: .text%__1cNinstanceKlassPadd_osr_nmethod6MpnHnmethod__v_; text: .text%__1cMincI_memNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKReflectionRreflect_new_array6FpnHoopDesc_ipnGThread__pnMarrayOopDesc__; -text: .text%__1cMsubF_regNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cMmulF_memNodeErule6kM_I_; text: .text%__1cODeoptimizationbJupdate_method_data_from_interpreter6FnQmethodDataHandle_ii_v_; text: .text%__1cLClassLoaderSget_system_package6FpkcpnGThread__pnHoopDesc__; text: .text%__1cMTailJumpNodeKmatch_edge6kMI_I_; -text: .text%__1cFStateL_sub_Op_Box6MpknENode__v_; text: .text%__1cRaddL_rReg_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cTconvL2F_reg_regNodeErule6kM_I_; text: .text%__1cKPSYoungGenLpost_resize6M_v_; text: .text%__1cNcmovL_regNodeErule6kM_I_; -text: .text%__1cOcmovD_regUNodeJnum_opnds6kM_I_; text: .text%__1cRandI_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMnegF_regNodeHtwo_adr6kM_I_; -text: .text%__1cTAbstractInterpreterRTosState_as_index6FnITosState__i_; text: .text%__1cHThreadsbMis_supported_jni_version_including_1_16Fi_C_; text: .text%__1cKstoreBNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPBytecode_invokeLresult_type6kMpnGThread__nJBasicType__; text: .text%__1cMincL_memNodeMideal_Opcode6kM_i_; text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJloadCNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cCosPuncommit_memory6FpcL_i_; text: .text%__1cSInterpreterRuntimeJnote_trap6FpnKJavaThread_ipnGThread__v_; text: .text%__1cRSignatureIteratorHiterate6M_v_; text: .text%__1cIModLNodeJideal_reg6kM_I_; -text: .text%__1cNTemplateTableOpatch_bytecode6FnJBytecodesECode_pnMRegisterImpl_4i_v_; text: .text%__1cLConvD2INodeLbottom_type6kM_pknEType__; text: .text%__1cMaddF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cHBoxNodeLbottom_type6kM_pknEType__; text: .text%__1cFStateM_sub_Op_DivL6MpknENode__v_; text: .text%__1cTconvL2D_reg_memNodeErule6kM_I_; text: .text%JVM_GetSystemPackage; -text: .text%__1cCosNcommit_memory6FpcLL_i_; text: .text%__1cOMacroAssemblerFenter6M_v_; text: .text%__1cLConvF2DNodeJideal_reg6kM_I_; text: .text%__1cNTemplateTableLindex_check6FpnMRegisterImpl_2_v_; text: .text%__1cKNativeJumpUpatch_verified_entry6FpC11_v_; text: .text%__1cLMoveL2DNodeGOpcode6kM_i_; -text: .text%__1cMincI_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cFStateP_sub_Op_ConvF2D6MpknENode__v_; text: .text%__1cMmulL_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%Unsafe_DefineClass1; -text: .text%__1cSUnsafe_DefineClass6FpnHJNIEnv__pnI_jstring_pnL_jbyteArray_iipnI_jobject_7_pnH_jclass__: unsafe.o; text: .text%__1cFTypeDFxdual6kM_pknEType__; text: .text%__1cMincI_memNodeFreloc6kM_i_; text: .text%__1cPcmpF_cc_regNodeLout_RegMask6kM_rknHRegMask__; @@ -6314,12 +4089,8 @@ text: .text%__1cMsubF_memNodePoper_input_base6kM_I_; text: .text%__1cTconvF2D_reg_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%JVM_DefineClass; text: .text%__1cMaddF_memNodeMideal_Opcode6kM_i_; -text: .text%__1cMmulL_memNodeRis_cisc_alternate6kM_i_; -text: .text%__1cMmulL_memNodeJnum_opnds6kM_I_; text: .text%__1cJAssemblerEshrq6MpnMRegisterImpl_i_v_; -text: .text%__1cTC2IAdapterGeneratorLadapter_for6FnMmethodHandle__pnKC2IAdapter__; text: .text%__1cPcmpFastLockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cZInterpreterMacroAssemblerQtest_mdp_data_at6MpnMRegisterImpl_i2rnFLabel__v_; text: .text%__1cZInterpreterMacroAssemblerYprofile_not_taken_branch6MpnMRegisterImpl__v_; text: .text%__1cTleaPIdxScaleOffNodeIpipeline6kM_pknIPipeline__; text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; @@ -6327,42 +4098,29 @@ text: .text%__1cYjava_lang_reflect_MethodFclazz6FpnHoopDesc__2_; text: .text%__1cYjava_lang_reflect_MethodEslot6FpnHoopDesc__i_; text: .text%__1cYjava_lang_reflect_MethodLreturn_type6FpnHoopDesc__2_; text: .text%__1cYjava_lang_reflect_MethodPparameter_types6FpnHoopDesc__2_; -text: .text%__1cNloadConL0NodeGis_Con6kM_I_; -text: .text%__1cMset_property6FnGHandle_pkc2pnGThread__v_: jvm.o; text: .text%JVM_GetCPFieldModifiers; text: .text%JVM_InvokeMethod; text: .text%__1cFKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cZcatch_cleanup_inter_block6FpnENode_pnFBlock_13rnLBlock_Array_i_v_: lcm.o; text: .text%__1cOsalI_mem_1NodeMideal_Opcode6kM_i_; -text: .text%__1cMaddF_immNodeJnum_opnds6kM_I_; -text: .text%__1cMsubD_immNodePoper_input_base6kM_I_; text: .text%__1cMmulF_regNodeMcisc_operand6kM_i_; -text: .text%__1cMmulF_regNodeJnum_opnds6kM_I_; -text: .text%__1cMmulF_memNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cMmulD_regNodeHtwo_adr6kM_I_; text: .text%__1cTconvD2F_reg_regNodeMcisc_operand6kM_i_; text: .text%jni_AllocObject: jni.o; -text: .text%__1cCosHSolarisOset_mpss_range6FpcLL_i_; text: .text%__1cTconvF2I_reg_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFParseOdo_tableswitch6M_v_; text: .text%__1cTmembar_volatileNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKReflectionNinvoke_method6FpnHoopDesc_nGHandle_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cMrdx_RegLOperFclone6kM_pnIMachOper__; text: .text%__1cICmpFNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFn0AJCondition__v4_v_; -text: .text%__1cFj_not6FnNTemplateTableJCondition__nJAssemblerJCondition__: templateTable_amd64.o; text: .text%__1cNTemplateTableMlocals_index6FpnMRegisterImpl_i_v_; text: .text%__1cTconvF2D_reg_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cMmulF_regNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%Unsafe_AllocateInstance; text: .text%__1cZInterpreterMacroAssemblerNunlock_object6MpnMRegisterImpl__v_; text: .text%__1cOcmovD_regUNodeMideal_Opcode6kM_i_; -text: .text%__1cIciObjectMis_classless6kM_i_; text: .text%__1cMsubD_immNodeMideal_Opcode6kM_i_; text: .text%__1cRInlineCacheBufferOinit_next_stub6F_v_; text: .text%__1cPshrL_rReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMsubD_immNodeErule6kM_I_; -text: .text%__1cHTypePtrKadd_offset6kMi_pk0_; text: .text%__1cNTemplateTableHconvert6F_v_; text: .text%__1cMnegD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cQorI_rReg_memNodeOmemory_operand6kM_pknIMachOper__; @@ -6377,7 +4135,6 @@ text: .text%__1cTconvD2I_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cScompL_rReg_memNodeMideal_Opcode6kM_i_; text: .text%__1cXpartialSubtypeCheckNodeErule6kM_I_; text: .text%__1cOstackSlotDOperEtype6kM_pknEType__; -text: .text%__1cHThreadsLnmethods_do6F_v_; text: .text%__1cLloadSSDNodeErule6kM_I_; text: .text%__1cMsubD_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cRComputeEntryStackIdo_short6M_v_; @@ -6390,7 +4147,6 @@ text: .text%__1cMloadConFNodeKconst_size6kM_i_; text: .text%__1cMorL_rRegNodeMcisc_operand6kM_i_; text: .text%__1cMmulD_memNodeMideal_Opcode6kM_i_; text: .text%__1cMaddD_regNodeMideal_Opcode6kM_i_; -text: .text%__1cTconvI2D_reg_regNodeQuse_cisc_RegMask6M_v_; text: .text%__1cMnegF_regNodeMideal_Opcode6kM_i_; text: .text%__1cMloadConFNodeFreloc6kM_i_; text: .text%__1cILogDNodeLbottom_type6kM_pknEType__; @@ -6398,48 +4154,35 @@ text: .text%__1cLConvI2DNodeLbottom_type6kM_pknEType__; text: .text%__1cNstoreImmPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cLStrCompNodeJideal_reg6kM_I_; text: .text%__1cMlogD_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFVTuneOdelete_nmethod6FpnHnmethod__v_; text: .text%__1cMaddD_regNodeMcisc_operand6kM_i_; text: .text%__1cMaddD_regNodeErule6kM_I_; text: .text%__1cScompL_rReg_memNodePoper_input_base6kM_I_; text: .text%__1cIAddFNodeJideal_reg6kM_I_; -text: .text%__1cJimmP0OperPconstant_is_oop6kM_i_; text: .text%__1cJimmP0OperIconstant6kM_l_; text: .text%__1cNciMethodKlassEmake6F_p0_; -text: .text%__1cETypeJis_finite6kM_i_; text: .text%__1cHnmethodFflush6M_v_; text: .text%JVM_GetClassContext; -text: .text%__1cIciObjectTis_type_array_klass6M_i_; -text: .text%__1cNsubL_rRegNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cIregFOperFclone6kM_pnIMachOper__; text: .text%__1cRfind_field_offset6FpnI_jobject_ipnGThread__i_; -text: .text%__1cHBoxNodeJideal_reg6kM_I_; text: .text%__1cXPartialSubtypeCheckNodeLbottom_type6kM_pknEType__; text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_; text: .text%__1cPfieldDescriptorTfloat_initial_value6kM_f_; -text: .text%__1cLloadSSDNodeMideal_Opcode6kM_i_; text: .text%__1cMsubF_regNodeErule6kM_I_; text: .text%__1cRsubL_rReg_memNodeFreloc6kM_i_; -text: .text%__1cKExceptionsNnew_exception6FpnGThread_pnNsymbolOopDesc_pkc_nGHandle__; text: .text%__1cTconvL2F_reg_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cMmulF_memNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cJStubQdDueueKremove_all6M_v_; text: .text%__1cIDivDNodeLbottom_type6kM_pknEType__; text: .text%__1cLStatSamplerTget_system_property6FpkcpnGThread__2_; -text: .text%__1cRmethodDataOopDescRbci_to_extra_data6Mii_pnLProfileData__; text: .text%__1cICodeBlobFflush6M_v_; text: .text%__1cVMoveF2I_reg_stackNodeMideal_Opcode6kM_i_; -text: .text%__1cNmodL_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJArgumentsQPropertyList_add6FppnOSystemProperty_2_v_; text: .text%__1cKstoreCNodeIpipeline6kM_pknIPipeline__; text: .text%__1cSmembar_releaseNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cQsalI_rReg_CLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cSInterpreterRuntimeQcreate_exception6FpnKJavaThread_pc3_v_; text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_2_v_; text: .text%__1cJStubQdDueueMremove_first6Mi_v_; text: .text%__1cQinitialize_class6FnMsymbolHandle_pnGThread__v_: thread.o; text: .text%__1cJAssemblerFcmovq6Mn0AJCondition_pnMRegisterImpl_nHAddress__v_; -text: .text%__1cXpartialSubtypeCheckNodeJnum_opnds6kM_I_; text: .text%__1cMmulD_regNodeQuse_cisc_RegMask6M_v_; text: .text%__1cMaddF_immNodeHtwo_adr6kM_I_; text: .text%__1cIMulDNodeGmul_id6kM_pknEType__; @@ -6451,20 +4194,15 @@ text: .text%__1cFStateM_sub_Op_MulD6MpknENode__v_; text: .text%__1cFStateM_sub_Op_ModL6MpknENode__v_; text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_pnGThread__v_; text: .text%__1cXjava_lang_reflect_FieldEslot6FpnHoopDesc__i_; -text: .text%__1cPloadConUL32NodeGis_Con6kM_I_; text: .text%__1cQshrL_rReg_CLNodeHtwo_adr6kM_I_; text: .text%__1cKJavaThreadbOcheck_special_condition_for_native_trans6Fp0_v_; -text: .text%__1cODeoptimizationYreset_invocation_counter6FpnJScopeDesc_i_v_; text: .text%__1cZCallDynamicJavaDirectNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cTconvF2I_reg_regNodeJnum_opnds6kM_I_; -text: .text%__1cMmulD_memNodeJnum_opnds6kM_I_; text: .text%__1cHOrLNodeGOpcode6kM_i_; text: .text%__1cIMulFNodeGmul_id6kM_pknEType__; text: .text%__1cMnegF_regNodeErule6kM_I_; text: .text%__1cMsubF_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cTconvD2F_reg_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%JVM_RawMonitorCreate; -text: .text%__1cOresolve_symbol6Fpkc_pC_: os_solaris.o; text: .text%__1cMMutableSpaceOobject_iterate6MpnNObjectClosure__v_; text: .text%__1cKCMoveDNodeGOpcode6kM_i_; text: .text%__1cFParseQdo_monitor_enter6M_v_; @@ -6472,34 +4210,17 @@ text: .text%__1cPMultiBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDat text: .text%__1cXpartialSubtypeCheckNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cLConvD2INodeJideal_reg6kM_I_; text: .text%__1cKcastPPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cZCallDynamicJavaDirectNodeJnum_opnds6kM_I_; -text: .text%__1cMlogD_regNodeJnum_opnds6kM_I_; text: .text%Unsafe_CompareAndSwapInt; text: .text%__1cOstackSlotIOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cOstackSlotIOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cMmatch_option6FpknMJavaVMOption_ppkc5i_i_: arguments.o; text: .text%__1cMmulD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNmulI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKimmL32OperFclone6kM_pnIMachOper__; -text: .text%__1cIimmFOperFclone6kM_pnIMachOper__; text: .text%__1cOMacroAssemblerTset_last_Java_frame6MpnMRegisterImpl_22pC_v_; -text: .text%__1cOindOffset8OperFclone6kM_pnIMachOper__; -text: .text%__1cOMacroAssemblerVreset_last_Java_frame6MpnMRegisterImpl_i_v_; -text: .text%__1cOloadConL32NodeFclone6kM_pnENode__; -text: .text%__1cMloadConFNodeFclone6kM_pnENode__; text: .text%__1cScompL_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cQinstanceRefKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; text: .text%__1cNTemplateTableRlocals_index_wide6FpnMRegisterImpl__v_; -text: .text%__1cVMoveL2D_reg_stackNodePoper_input_base6kM_I_; text: .text%__1cZInterpreterMacroAssemblerPset_mdp_data_at6MpnMRegisterImpl_i2_v_; -text: .text%__1cKOSRAdapter2n6FLI_pv_; -text: .text%__1cKOSRAdapterPnew_osr_adapter6FpnKCodeBuffer_pnJOopMapSet_ii_p0_; text: .text%__1cJAssemblerEincl6MnHAddress__v_; -text: .text%__1cKOSRAdapter2t6MpnKCodeBuffer_pnJOopMapSet_iii_v_; -text: .text%__1cTconvI2D_reg_regNodeHtwo_adr6kM_I_; -text: .text%__1cNSharedRuntimeRgenerate_osr_blob6Fi_pnKOSRAdapter__; -text: .text%__1cMaddD_regNodeJnum_opnds6kM_I_; -text: .text%__1cbCAbstractInterpreterGeneratorUset_wide_entry_point6MpnITemplate_rpC_v_; text: .text%__1cMmulF_regNodeErule6kM_I_; text: .text%__1cIMulFNodeJideal_reg6kM_I_; text: .text%__1cFStateM_sub_Op_MulF6MpknENode__v_; @@ -6507,149 +4228,85 @@ text: .text%__1cJOopMapSetQsingular_oop_map6M_pnGOopMap__; text: .text%__1cHnmethodVmark_as_seen_on_stack6M_v_; text: .text%__1cMloadConDNodeHsize_of6kM_I_; text: .text%__1cOcmovI_regUNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLconvI2BNodeHtwo_adr6kM_I_; -text: .text%__1cMorL_rRegNodeJnum_opnds6kM_I_; text: .text%__1cQorI_rReg_memNodeFreloc6kM_i_; text: .text%__1cMaddD_immNodeHtwo_adr6kM_I_; text: .text%__1cMloadConDNodeKconst_size6kM_i_; text: .text%__1cLConvL2FNodeLbottom_type6kM_pknEType__; text: .text%__1cLConvL2DNodeLbottom_type6kM_pknEType__; -text: .text%__1cLloadSSINodeMideal_Opcode6kM_i_; text: .text%__1cOstackSlotDOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cTconvF2D_reg_memNodeFreloc6kM_i_; text: .text%__1cLConvD2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTconvL2D_reg_memNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cMloadConDNodeFreloc6kM_i_; text: .text%JVM_Lseek; text: .text%__1cPsarL_rReg_1NodeErule6kM_I_; text: .text%__1cPsarL_rReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVcompiledICHolderKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cMaddD_regNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cOstackSlotDOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_; -text: .text%__1cMorL_rRegNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cMmulF_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cMlogD_regNodeHtwo_adr6kM_I_; -text: .text%__1cRaddI_mem_rRegNodeHtwo_adr6kM_I_; text: .text%__1cFStateM_sub_Op_AddF6MpknENode__v_; text: .text%__1cIXorINodeIadd_ring6kMpknEType_3_3_; -text: .text%__1cTconvL2F_reg_regNodeJnum_opnds6kM_I_; -text: .text%__1cSstring_compareNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNGrowableArray4CpnKOSRAdapter__Praw_at_put_grow6Mirk14_v_; text: .text%__1cFStateP_sub_Op_StrComp6MpknENode__v_; -text: .text%__1cTconvL2F_reg_regNodePin_oper_RegMask6kMIII_pknHRegMask__; -text: .text%__1cUInterpreterGeneratorUgenerate_fixed_frame6Mi_v_; text: .text%__1cGciType2t6MnJBasicType__v_; -text: .text%__1cMaddF_memNodeJnum_opnds6kM_I_; -text: .text%__1cUInterpreterGeneratorbAgenerate_run_compiled_code6M_v_; text: .text%__1cScompL_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cUInterpreterGeneratorZgenerate_counter_overflow6MpC_v_; text: .text%__1cUInterpreterGeneratorVgenerate_counter_incr6MpnFLabel_22_v_; text: .text%__1cPcmpF_cc_regNodeQuse_cisc_RegMask6M_v_; text: .text%__1cXNativeSignatureIteratorHdo_bool6M_v_; text: .text%__1cQmulI_mem_immNodePoper_input_base6kM_I_; -text: .text%__1cbCAbstractInterpreterGeneratorXbang_stack_shadow_pages6Mi_v_; text: .text%__1cZInterpreterMacroAssemblerTnotify_method_entry6M_v_; -text: .text%__1cNdecL_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOLibraryCallKitXinline_string_compareTo6M_i_; -text: .text%__1cScompL_rReg_memNodeRis_cisc_alternate6kM_i_; text: .text%__1cJAssemblerEsubq6MpnMRegisterImpl_nHAddress__v_; text: .text%jni_GetEnv; text: .text%JVM_NanoTime; -text: .text%__1cCosNjavaTimeNanos6F_x_; -text: .text%__1cZInterpreterMacroAssemblerNsuper_call_VM6MpnMRegisterImpl_2pC22_v_; -text: .text%__1cFTypeFJis_finite6kM_i_; text: .text%__1cRmulI_rReg_immNodeIpipeline6kM_pknIPipeline__; text: .text%__1cOMacroAssemblerRcall_VM_leaf_base6MpCi_v_; -text: .text%__1cScompL_rReg_memNodeJnum_opnds6kM_I_; -text: .text%__1cHMulNodeGis_Mul6kM_pk0_; text: .text%__1cETypeEmake6Fn0AFTYPES__pk0_; text: .text%__1cQmulI_mem_immNodeMideal_Opcode6kM_i_; -text: .text%__1cParrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cJAssemblerLemit_data646MxnJrelocInfoJrelocType_i_v_; text: .text%__1cJAssemblerFpushq6MnHAddress__v_; -text: .text%__1cIGraphKitSgen_native_wrapper6MpnIciMethod__v_; text: .text%__1cRComputeEntryStackIdo_array6Mii_v_; text: .text%__1cPcmpD_cc_immNodeKconst_size6kM_i_; -text: .text%__1cKLoadPCNodeJideal_reg6kM_I_; text: .text%__1cMorL_rRegNodeErule6kM_I_; -text: .text%__1cUCallNativeDirectNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cScompP_rReg_memNodePoper_input_base6kM_I_; text: .text%__1cScompP_rReg_memNodeMideal_Opcode6kM_i_; -text: .text%__1cSvframeStreamCommonbFfill_in_compiled_inlined_sender6M_i_; text: .text%__1cNdivI_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cKcastPPNodeJnum_opnds6kM_I_; -text: .text%__1cTconvL2D_reg_memNodeHtwo_adr6kM_I_; -text: .text%__1cOLibraryCallKitbNinline_native_Reflection_getCallerClass6M_i_; -text: .text%__1cOLibraryCallKitZinline_native_Class_query6MnMvmIntrinsicsCID__i_; text: .text%__1cMnegF_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHCompile2t6MpnFciEnv_pnKC2Compiler_pnIciMethod__v_; text: .text%__1cKciTypeFlowLStateVectorOdo_null_assert6MpnHciKlass__v_; text: .text%__1cMsubD_regNodeQuse_cisc_RegMask6M_v_; text: .text%__1cJLoadLNodeMstore_Opcode6kM_i_; text: .text%__1cNGrowableArray4CpnGciType__Egrow6Mi_v_; -text: .text%__1cMdivD_immNodeJnum_opnds6kM_I_; -text: .text%__1cNstoreImmPNodeJnum_opnds6kM_I_; text: .text%__1cMdivD_immNodeHtwo_adr6kM_I_; -text: .text%__1cLloadSSINodeHtwo_adr6kM_I_; text: .text%__1cLConvI2FNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cIciMethodMnative_entry6M_pC_; text: .text%__1cPcmpD_cc_immNodeFreloc6kM_i_; -text: .text%__1cUCallNativeDirectNodeFreloc6kM_i_; -text: .text%__1cNloadConPcNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMmulD_memNodeErule6kM_I_; text: .text%jni_CallVoidMethod: jni.o; -text: .text%__1cFStateS_sub_Op_CallNative6MpknENode__v_; -text: .text%__1cFStateO_sub_Op_LoadPC6MpknENode__v_; -text: .text%__1cQAbstractCompilerPsupports_native6M_i_; -text: .text%__1cQorI_rReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cbCAbstractInterpreterGeneratorbBgenerate_result_handler_for6MnJBasicType__pC_; text: .text%__1cMmulF_regNodeHtwo_adr6kM_I_; -text: .text%__1cPsalL_rReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cQshrI_rReg_CLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNTemplateTableQvolatile_barrier6FnJAssemblerQMembar_mask_bits__v_; -text: .text%__1cNdivL_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cVMoveL2D_reg_stackNodeErule6kM_I_; text: .text%__1cRsalI_rReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNRelocIterator2t6MpnKCodeBuffer_pC3_v_; text: .text%__1cJBasicLockHmove_to6MpnHoopDesc_p0_v_; -text: .text%__1cYinternal_word_RelocationMforce_target6MpC_v_; text: .text%__1cOstackSlotIOperEtype6kM_pknEType__; -text: .text%__1cLloadSSINodeJnum_opnds6kM_I_; text: .text%__1cKPSYoungGenRavailable_to_live6M_L_; text: .text%__1cOstackSlotIOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cNcmovL_regNodeQuse_cisc_RegMask6M_v_; text: .text%__1cSstore_to_stackslot6FrnKCodeBuffer_iii_v_; -text: .text%__1cFTypeFGis_nan6kM_i_; text: .text%__1cQshrL_rReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvD2F_reg_regNodeJnum_opnds6kM_I_; -text: .text%__1cbCAbstractInterpreterGeneratorZgenerate_safept_entry_for6MnITosState_pC_2_; text: .text%__1cUInterpreterGeneratorbDgenerate_stack_overflow_check6M_v_; text: .text%__1cRComputeEntryStackHdo_bool6M_v_; text: .text%__1cMmulD_immNodeFreloc6kM_i_; text: .text%__1cQmulI_mem_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cbCAbstractInterpreterGeneratorZgenerate_continuation_for6MnITosState__pC_; text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; text: .text%JVM_FindPrimitiveClass; -text: .text%__1cOstackSlotIOperJnum_edges6kM_I_; text: .text%JVM_IsSameClassPackage; -text: .text%__1cUInterpreterGeneratorXcheck_for_compiled_code6MrnFLabel__v_; text: .text%__1cRaddI_mem_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMaddF_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPjava_lang_ClassYcreate_basic_type_mirror6FpkcpnGThread__pnHoopDesc__; text: .text%__1cLconvI2BNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMaddD_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMlogD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOPSVirtualSpaceJshrink_by6ML_i_; -text: .text%__1cTconvD2F_reg_regNodePin_oper_RegMask6kMIII_pknHRegMask__; text: .text%__1cRCardTableModRefBSYcommitted_unique_to_self6kMinJMemRegion__1_; text: .text%__1cNTemplateTableEiop26Fn0AJOperation__v_; text: .text%__1cFStateN_sub_Op_LoadD6MpknENode__v_; text: .text%__1cTconvL2F_reg_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cZInterpreterMacroAssemblerRremove_activation6MnITosState_pnMRegisterImpl_iii_v_; text: .text%__1cZInterpreterMacroAssemblerMdispatch_via6MnITosState_ppC_v_; -text: .text%__1cUInterpreterGeneratorbEgenerate_asm_interpreter_entry6Mi_pC_; text: .text%__1cPcmpF_cc_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMsubF_memNodeJnum_opnds6kM_I_; text: .text%__1cKPSYoungGenUavailable_to_min_gen6M_L_; text: .text%__1cJAssemblerKrepne_scan6M_v_; text: .text%__1cJname2type6Fpkc_nJBasicType__; @@ -6658,7 +4315,6 @@ text: .text%__1cKPSYoungGenQlimit_gen_shrink6ML_L_; text: .text%__1cTconvI2D_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cFStateP_sub_Op_ConvI2F6MpknENode__v_; text: .text%__1cMmulD_immNodeKconst_size6kM_i_; -text: .text%__1cMmulD_memNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cMmulF_immNodeFreloc6kM_i_; text: .text%__1cJloadBNodeHsize_of6kM_I_; text: .text%__1cOcompI_rRegNodeHsize_of6kM_I_; @@ -6667,7 +4323,6 @@ text: .text%__1cJloadPNodeHsize_of6kM_I_; text: .text%__1cOtypeArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; text: .text%__1cOtypeArrayKlassNexternal_name6FnJBasicType__pkc_; text: .text%Unsafe_StaticFieldOffset; -text: .text%__1cFTypeFFempty6kM_i_; text: .text%__1cNcmovL_regNodeHtwo_adr6kM_I_; text: .text%__1cLloadSSDNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFStateO_sub_Op_CMoveP6MpknENode__v_; @@ -6677,69 +4332,41 @@ text: .text%__1cVVM_ParallelGCSystemGC2t6MIInHGCCauseFCause__v_; text: .text%__1cJCmpF3NodeGOpcode6kM_i_; text: .text%Unsafe_GetObjectVolatile; text: .text%__1cMsubD_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLdivL_10NodePoper_input_base6kM_I_; -text: .text%__1cVVM_ParallelGCSystemGCEname6kM_pkc_; -text: .text%__1cOtypeArrayKlassMcreate_klass6FnJBasicType_ipnGThread__pnMklassOopDesc__; text: .text%Unsafe_EnsureClassInitialized; -text: .text%__1cJAssemblerEjmpb6MrnFLabel_nJrelocInfoJrelocType__v_; text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_pnGThread__pnMklassOopDesc__; text: .text%__1cOcmovI_regUNodeHtwo_adr6kM_I_; text: .text%__1cMaddD_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cJAssemblerEmovw6MnHAddress_pnMRegisterImpl__v_; text: .text%__1cJAssemblerGmovsbl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cMrax_RegLOperFclone6kM_pnIMachOper__; text: .text%__1cMorL_rRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTconvD2F_reg_regNodeHtwo_adr6kM_I_; text: .text%__1cUParallelScavengeHeapHcollect6MnHGCCauseFCause__v_; text: .text%__1cJLoadDNodeJideal_reg6kM_I_; text: .text%__1cQciTypeArrayKlass2t6MnLKlassHandle__v_; text: .text%__1cQmulI_mem_immNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpCi_v_; text: .text%__1cPcheckCastPPNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJAssemblerFpopaq6M_v_; text: .text%__1cSmembar_acquireNodeIpipeline6kM_pknIPipeline__; text: .text%__1cKimmL10OperJnum_edges6kM_I_; text: .text%Unsafe_StaticFieldBaseFromField; -text: .text%__1cLcastP2LNodeHsize_of6kM_I_; -text: .text%__1cQmulI_mem_immNodeRis_cisc_alternate6kM_i_; text: .text%__1cMsubD_regNodeHtwo_adr6kM_I_; -text: .text%__1cZInterpreterMacroAssemblerSnotify_method_exit6MnITosState__v_; text: .text%__1cRsubI_rReg_memNodeHsize_of6kM_I_; -text: .text%__1cTconvL2F_reg_regNodeHtwo_adr6kM_I_; -text: .text%__1cNReservedSpace2t6MpcL_v_; -text: .text%__1cKmul_hiNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cSmembar_acquireNodeJnum_opnds6kM_I_; -text: .text%__1cQsarL_rReg_63NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJAssemblerMemit_arith_b6MiipnMRegisterImpl_i_v_; -text: .text%__1cPsarL_rReg_2NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cLdivL_10NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNTemplateTableXresolve_cache_and_index6FipnMRegisterImpl_2_v_; text: .text%__1cNTemplateTableZjvmti_post_fast_field_mod6F_v_; text: .text%JVM_GC; text: .text%__1cNTemplateTablePfast_storefield6FnITosState__v_; text: .text%__1cNTemplateTableQfast_accessfield6FnITosState__v_; -text: .text%__1cScompP_rReg_memNodeJnum_opnds6kM_I_; -text: .text%__1cIPSOldGenSexpand_to_reserved6M_i_; -text: .text%__1cQmulI_mem_immNodeJnum_opnds6kM_I_; -text: .text%__1cIPSOldGenJexpand_by6ML_i_; text: .text%__1cIPSOldGenGexpand6ML_v_; text: .text%__1cIPSOldGenXexpand_and_cas_allocate6ML_pnIHeapWord__; text: .text%__1cPsarL_rReg_1NodeHtwo_adr6kM_I_; text: .text%__1cJAssemblerFtestb6MpnMRegisterImpl_i_v_; -text: .text%__1cXpartialSubtypeCheckNodeHtwo_adr6kM_I_; text: .text%__1cMsubF_regNodeHtwo_adr6kM_I_; -text: .text%__1cZInterpreterMacroAssemblerRget_constant_pool6MpnMRegisterImpl__v_; text: .text%__1cRaddL_rReg_memNodeFreloc6kM_i_; text: .text%__1cVMoveL2D_reg_stackNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cScompP_rReg_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPsarL_rReg_1NodeJnum_opnds6kM_I_; text: .text%__1cOGenerateOopMapGdo_jsr6Mi_v_; text: .text%__1cMmulF_memNodeHtwo_adr6kM_I_; -text: .text%__1cScompP_rReg_memNodeRis_cisc_alternate6kM_i_; -text: .text%__1cLPSMarkSweepGinvoke6Fpii_v_; text: .text%__1cOcmovD_regUNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cNcmovL_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cTconvF2I_reg_regNodeHtwo_adr6kM_I_; text: .text%__1cMmulF_immNodeKconst_size6kM_i_; text: .text%__1cZInterpreterMacroAssemblerbGget_unsigned_2_byte_index_at_bcp6MpnMRegisterImpl_i_v_; text: .text%__1cZInterpreterMacroAssemblerRcall_VM_leaf_base6MpCi_v_; @@ -6748,44 +4375,28 @@ text: .text%__1cMdecI_memNodeIpipeline6kM_pknIPipeline__; text: .text%__1cCosMuser_handler6F_pv_; text: .text%__1cJloadDNodeFreloc6kM_i_; text: .text%__1cMincL_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cNaddL_rRegNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cCosHSolarisSset_signal_handler6Fiii_v_; text: .text%__1cNinstanceKlassSremove_osr_nmethod6MpnHnmethod__v_; text: .text%__1cTconvD2F_reg_regNodeQuse_cisc_RegMask6M_v_; text: .text%__1cKMemoryPoolLadd_manager6MpnNMemoryManager__v_; text: .text%__1cMmulD_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cLClassLoaderbCupdate_class_path_entry_list6Fpkc_v_; text: .text%__1cMsubF_memNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cOcmovI_regUNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cTconvL2D_reg_memNodeRis_cisc_alternate6kM_i_; -text: .text%__1cLOptoRuntimeRresolve_call_Type6F_pknITypeFunc__; -text: .text%__1cHciKlassIis_klass6M_i_; text: .text%__1cPPerfDataManagerKname_space6Fpkci_pc_; -text: .text%__1cKScopeValuePis_constant_int6kM_i_; text: .text%jni_RegisterNatives: jni.o; text: .text%Unsafe_GetNativeFloat; -text: .text%__1cMsubF_memNodeZcheck_for_anti_dependence6kM_i_; text: .text%JVM_GetClassDeclaredFields; text: .text%__1cMsubF_regNodeQuse_cisc_RegMask6M_v_; text: .text%__1cJMemRegion2t6M_v_; text: .text%jni_SetStaticObjectField: jni.o; -text: .text%__1cQsalL_rReg_CLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cCosEstat6FpkcpnEstat__i_; -text: .text%__1cJArgumentsRverify_percentage6FLpkc_i_; text: .text%__1cLOptoRuntimeTmultianewarray_Type6Fi_pknITypeFunc__; text: .text%__1cRComputeEntryStackHdo_long6M_v_; text: .text%__1cHnmethodVinvalidate_osr_method6M_v_; -text: .text%__1cMaddF_memNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cNMemoryManagerIadd_pool6MpnKMemoryPool__v_; text: .text%jni_SetObjectField: jni.o; -text: .text%__1cLConvD2INodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cJAssemblerEcall6MpnMRegisterImpl_nJrelocInfoJrelocType__v_; text: .text%__1cJloadDNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cLConvD2INodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cOBasicHashtable2t6Mii_v_; -text: .text%__1cCosHSolarisOis_sig_ignored6Fi_i_; -text: .text%__1cNandI_rRegNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cNcmovL_memNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cOPhaseIdealLoopJclone_iff6MpnHPhiNode_pnNIdealLoopTree__pnIBoolNode__; text: .text%__1cMTailJumpNodeGOpcode6kM_i_; text: .text%__1cCosHSolarisVcleanup_interruptible6FpnKJavaThread__v_; @@ -6795,7 +4406,6 @@ text: .text%__1cMdivD_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%JVM_IsSupportedJNIVersion; text: .text%JVM_LoadLibrary; text: .text%JVM_Sleep; -text: .text%__1cNReservedSpaceKinitialize6MLLipc_v_; text: .text%__1cHOrLNodeLbottom_type6kM_pknEType__; text: .text%__1cOstackSlotIOperFscale6kM_i_; text: .text%__1cLConvD2FNodeLbottom_type6kM_pknEType__; @@ -6804,7 +4414,6 @@ text: .text%jint_cmp: parse2.o; text: .text%__1cOstackSlotIOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cLloadSSINodeErule6kM_I_; text: .text%__1cLConvI2DNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cVMoveF2I_reg_stackNodePoper_input_base6kM_I_; text: .text%__1cLConvL2FNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cIDivDNodeJideal_reg6kM_I_; text: .text%__1cRandI_rReg_memNodeFreloc6kM_i_; @@ -6814,7 +4423,6 @@ text: .text%__1cPPerfLongVariant2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariabil text: .text%jni_MonitorExit: jni.o; text: .text%jni_MonitorEnter: jni.o; text: .text%__1cHciKlass2t6MnLKlassHandle_pnIciSymbol__v_; -text: .text%__1cPciInstanceKlassbDcompute_shared_is_initialized6M_i_; text: .text%__1cNGrowableArray4CpnIPerfData__Praw_at_put_grow6Mirk14_v_; text: .text%__1cFciEnvOrecord_failure6Mpkc_v_; text: .text%__1cMciArrayKlassRbase_element_type6M_pnGciType__; @@ -6822,14 +4430,11 @@ text: .text%__1cLConvL2DNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cOstackSlotDOperFscale6kM_i_; text: .text%__1cOstackSlotDOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_; text: .text%__1cOcmovI_regUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKReturnNodeUdepends_only_on_test6kM_i_; text: .text%__1cNcmovL_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cTconvD2F_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIDivDNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cTconvF2I_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cTconvL2F_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMsubD_immNodeJnum_opnds6kM_I_; -text: .text%__1cVMoveL2D_reg_stackNodeJnum_opnds6kM_I_; text: .text%__1cRaddI_mem_rRegNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cNTemplateTableH_return6FnITosState__v_; text: .text%__1cNTemplateTableHif_icmp6Fn0AJCondition__v_; @@ -6838,16 +4443,10 @@ text: .text%__1cTconvL2D_reg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cXpartialSubtypeCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNSharedRuntimeEdrem6Fdd_d_; text: .text%__1cRaddI_rReg_immNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMloadConDNodeFclone6kM_pnENode__; text: .text%__1cScompP_rReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKC2IAdapterXreturn_from_interpreter6M_pC_; -text: .text%__1cKC2IAdapterRsetup_stack_frame6MnFframe_pnLvframeArray__v_; -text: .text%__1cIregDOperFclone6kM_pnIMachOper__; text: .text%__1cJAssemblerGmovswl6MpnMRegisterImpl_nHAddress__v_; text: .text%__1cMsubF_memNodeErule6kM_I_; -text: .text%__1cIimmDOperFclone6kM_pnIMachOper__; text: .text%__1cOMacroAssemblerQload_signed_byte6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cKC2IAdapterSunpack_c2i_adapter6MnFframe_1pnLvframeArray__v_; text: .text%__1cNdivI_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cRMachSpillCopyNodeHsize_of6kM_I_; text: .text%__1cFframebFset_interpreter_frame_sender_sp6Mpl_v_; @@ -6861,26 +4460,15 @@ text: .text%__1cMsubD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMmulF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMmulF_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cCosZvm_allocation_granularity6F_i_; -text: .text%__1cJAssemblerFpopfq6M_v_; -text: .text%__1cCosOreserve_memory6FLpc_1_; text: .text%Unsafe_ObjectFieldOffset; -text: .text%__1cUParallelScavengeHeapEkind6M_nNCollectedHeapEName__; -text: .text%__1cKMemoryPool2t6Mpkcn0AIPoolType_LLii_v_; text: .text%__1cNSpaceCounters2t6MpkciLpnMMutableSpace_pnSGenerationCounters__v_; text: .text%__1cMNativeLookupTbase_library_lookup6Fpkc22_pC_; -text: .text%__1cMaddF_memNodeRis_cisc_alternate6kM_i_; text: .text%__1cOcompiledVFrameUresolve_monitor_lock6kMnILocation__pnJBasicLock__; -text: .text%__1cTconvD2I_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cQjava_lang_ThreadKset_daemon6FpnHoopDesc__v_; text: .text%__1cKCompiledICSset_to_megamorphic6MpnICallInfo_nJBytecodesECode_pnGThread__v_; -text: .text%__1cNReservedSpaceKfirst_part6MLii_0_; text: .text%__1cNCellTypeStateImake_any6Fi_0_; text: .text%__1cMorL_rRegNodeQuse_cisc_RegMask6M_v_; text: .text%__1cNTemplateTableFaload6Fi_v_; -text: .text%__1cISubFNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cMnegF_regNodeJnum_opnds6kM_I_; -text: .text%__1cINegDNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cKCompiledICOis_megamorphic6kM_i_; text: .text%__1cXNativeSignatureIteratorJdo_double6M_v_; text: .text%__1cISubDNodeGadd_id6kM_pknEType__; text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorLpass_double6M_v_; @@ -6893,47 +4481,30 @@ text: .text%__1cLMoveL2DNodeLbottom_type6kM_pknEType__; text: .text%__1cZCompiledArgumentOopFinderDset6MinJBasicType__v_; text: .text%__1cNstoreImmPNodeFreloc6kM_i_; text: .text%__1cNSharedRuntimeVhandle_ic_miss_helper6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cLOptoRuntimebBhandle_wrong_method_ic_miss6FpnKJavaThread__pC_; text: .text%__1cKJavaThreadUremove_monitor_chunk6MpnMMonitorChunk__v_; text: .text%__1cKJavaThreadRadd_monitor_chunk6MpnMMonitorChunk__v_; text: .text%__1cNReservedSpace2t6ML_v_; text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnQPerfLongVariable__; -text: .text%__1cNmulL_rRegNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cNmulI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cTGeneratePairingInfoOreport_results6kM_i_; text: .text%Unsafe_GetNativeByte; text: .text%__1cbEJvmtiDynamicCodeEventCollector2T6M_v_; text: .text%__1cFframebLprevious_monitor_in_interpreter_frame6kMpnPBasicObjectLock__2_; text: .text%__1cbEJvmtiDynamicCodeEventCollector2t6M_v_; -text: .text%__1cOMacroAssemblerQload_signed_word6MpnMRegisterImpl_nHAddress__i_; -text: .text%__1cQOopMapCacheEntryPfill_for_native6M_v_; text: .text%__1cFStateP_sub_Op_ConvD2I6MpknENode__v_; -text: .text%__1cJAssemblerGpushfq6M_v_; text: .text%__1cKVtableStubRpd_code_alignment6F_i_; text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_2_v_; -text: .text%__1cIDivFNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cINegDNodeJideal_reg6kM_I_; -text: .text%__1cODeoptimizationZtrap_state_set_recompiled6Fii_i_; -text: .text%__1cPshrL_rReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cTconvF2D_reg_memNodeIpipeline6kM_pknIPipeline__; text: .text%__1cKklassKlassOset_alloc_size6MI_v_; text: .text%__1cNandI_rRegNodeIpipeline6kM_pknIPipeline__; text: .text%__1cTMaskFillerForNative2t6MnMmethodHandle_pLi_v_; text: .text%__1cMsubF_memNodeHtwo_adr6kM_I_; text: .text%__1cINegFNodeLbottom_type6kM_pknEType__; -text: .text%__1cRaddL_rReg_memNodeZcheck_for_anti_dependence6kM_i_; -text: .text%__1cLVtableStubsLcreate_stub6FiipnNmethodOopDesc__pC_; text: .text%__1cMmulL_memNodeFreloc6kM_i_; -text: .text%__1cLVtableStubsGlookup6Fiii_pnKVtableStub__; text: .text%__1cMMonitorValue2t6MpnTDebugInfoReadStream__v_; text: .text%__1cFStateM_sub_Op_NegD6MpknENode__v_; text: .text%__1cOtailjmpIndNodePoper_input_base6kM_I_; -text: .text%__1cNStubGeneratorYgenerate_throw_exception6MpkcpCi_3_; -text: .text%__1cISubDNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cPPerfDataManagerKname_space6Fpkc2i_pc_; -text: .text%__1cLVtableStubsOis_entry_point6FpC_i_; text: .text%__1cNstoreImmPNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHRetNodeJnum_opnds6kM_I_; text: .text%__1cIDivINodeJideal_reg6kM_I_; text: .text%__1cRInvocationCounterDdef6Fn0AFState_ipFnMmethodHandle_pnGThread__pC_v_; text: .text%__1cMNativeLookupNlong_jni_name6FnMmethodHandle__pc_; @@ -6944,7 +4515,6 @@ text: .text%__1cOGenerateOopMapTret_jump_targets_do6MpnOBytecodeStream_pFp0ipi_v text: .text%__1cOClassPathEntry2t6M_v_; text: .text%__1cMorL_rRegNodeHtwo_adr6kM_I_; text: .text%__1cOMacroAssemblerNpop_CPU_state6M_v_; -text: .text%__1cMmulF_memNodeRis_cisc_alternate6kM_i_; text: .text%__1cOMacroAssemblerOpush_CPU_state6M_v_; text: .text%__1cOMacroAssemblerNpop_FPU_state6M_v_; text: .text%__1cOMacroAssemblerOpush_FPU_state6M_v_; @@ -6955,8 +4525,6 @@ text: .text%__1cTconvL2D_reg_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cOMacroAssemblerSstore_check_part_16MpnMRegisterImpl__v_; text: .text%__1cRaddL_rReg_memNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cMaddF_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRClassPathZipEntry2t6Mppvpc_v_; -text: .text%__1cNTemplateTableOprepare_invoke6FpnMRegisterImpl_2inJBytecodesECode__v_; text: .text%__1cVMoveF2I_reg_stackNodeErule6kM_I_; text: .text%__1cJAssemblerEandq6MpnMRegisterImpl_2_v_; text: .text%__1cFParsePdo_lookupswitch6M_v_; @@ -6967,19 +4535,11 @@ text: .text%__1cJloadFNodeIpipeline6kM_pknIPipeline__; text: .text%__1cRComputeEntryStackJdo_double6M_v_; text: .text%__1cMaddD_regNodeHtwo_adr6kM_I_; text: .text%__1cLConvD2FNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cNTemplateTablebAload_invoke_cp_cache_entry6FipnMRegisterImpl_22ii_v_; -text: .text%__1cNTemplateTableZload_field_cp_cache_entry6FipnMRegisterImpl_22i_v_; text: .text%__1cJAssemblerEcmpb6MnHAddress_i_v_; text: .text%__1cCosGsignal6Fipv_1_; -text: .text%__1cLClassLoaderSget_canonical_path6Fpc1i_i_; -text: .text%__1cLClassLoaderXcreate_class_path_entry6FpcnEstat_ppnOClassPathEntry__v_; text: .text%__1cMsubD_immNodeHtwo_adr6kM_I_; -text: .text%__1cLklassVtableTis_miranda_entry_at6Mi_i_; text: .text%__1cKPSScavengeZclean_up_failed_promotion6F_v_; -text: .text%__1cNTemplateTableJfloat_cmp6Fii_v_; text: .text%JVM_Available; -text: .text%__1cJAssemblerHucomiss6MpnRFloatRegisterImpl_2_v_; -text: .text%__1cZInterpreterMacroAssemblerRprofile_checkcast6MipnMRegisterImpl__v_; text: .text%__1cIAddDNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cJAssemblerFimulq6MpnMRegisterImpl_2_v_; text: .text%__1cIRetTableUfind_jsrs_for_target6Mi_pnNRetTableEntry__; @@ -6992,73 +4552,44 @@ text: .text%__1cNTemplateTableGlstore6Fi_v_; text: .text%__1cNRegisterSaverTsave_live_registers6FpnOMacroAssembler_ipi_pnGOopMap__; text: .text%__1cNTemplateTableGistore6Fi_v_; text: .text%__1cIRetTableHadd_jsr6Mii_v_; -text: .text%__1cMincL_memNodeHtwo_adr6kM_I_; text: .text%__1cKPSYoungGenOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cNGrowableArray4CpnLmarkOopDesc__2t6Mii_v_; -text: .text%__1cUCompressedReadStreamJread_long6M_x_; text: .text%__1cISubDNodeJideal_reg6kM_I_; -text: .text%__1cWNonPrintingResourceObj2n6FLnLResourceObjPallocation_type__pv_; text: .text%__1cNTemplateTableFdload6Fi_v_; text: .text%__1cNTemplateTableFfload6Fi_v_; -text: .text%__1cPaddress_of_flag6FnXCommandLineFlagWithType__pnEFlag__: globals.o; text: .text%__1cNTemplateTableFlload6Fi_v_; text: .text%__1cNTemplateTableFiload6Fi_v_; text: .text%__1cMmulI_memNodePoper_input_base6kM_I_; -text: .text%__1cOcompL_rRegNodeMcisc_version6Mi_pnIMachNode__; text: .text%__1cNGrowableArray4CpnLmarkOopDesc__Uclear_and_deallocate6M_v_; text: .text%__1cMLinkResolverbBlookup_method_in_interfaces6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; -text: .text%__1cOcompI_rRegNodeFclone6kM_pnENode__; -text: .text%__1cRsubI_rReg_memNodeFclone6kM_pnENode__; -text: .text%__1cLcastP2LNodeFclone6kM_pnENode__; text: .text%__1cKExceptionsK_throw_oop6FpnGThread_pkcipnHoopDesc__v_; text: .text%__1cRaddL_rReg_memNodeErule6kM_I_; text: .text%__1cOMacroAssemblerLstore_check6MpnMRegisterImpl__v_; -text: .text%__1cOsalI_mem_1NodeHtwo_adr6kM_I_; text: .text%__1cHRetNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cVMoveL2D_reg_stackNodeHtwo_adr6kM_I_; -text: .text%__1cRaddL_mem_rRegNodeHtwo_adr6kM_I_; -text: .text%__1cJloadPNodeFclone6kM_pnENode__; -text: .text%__1cJloadBNodeFclone6kM_pnENode__; text: .text%__1cRaddL_rReg_memNodeHtwo_adr6kM_I_; text: .text%__1cMmulF_regNodeQuse_cisc_RegMask6M_v_; text: .text%__1cMaddF_memNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cJAssemblerEmovb6MnHAddress_i_v_; -text: .text%__1cIAddDNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%Unsafe_AllocateMemory; text: .text%__1cVMoveF2I_reg_stackNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cJAssemblerHfxrstor6MnHAddress__v_; text: .text%__1cJAssemblerGfxsave6MnHAddress__v_; -text: .text%__1cHCompilePget_invoke_name6M_pnIciSymbol__; text: .text%__1cJAssemblerEsetb6Mn0AJCondition_pnMRegisterImpl__v_; -text: .text%__1cNxorI_rRegNodeMcisc_version6Mi_pnIMachNode__; -text: .text%__1cMVM_OperationNdoit_prologue6M_i_; text: .text%__1cNGCTaskManagerGthread6MI_pnMGCTaskThread__; text: .text%__1cRConstantLongValue2t6MpnTDebugInfoReadStream__v_; -text: .text%__1cRConstantLongValueQis_constant_long6kM_i_; -text: .text%__1cKScopeValuePis_constant_oop6kM_i_; -text: .text%__1cKScopeValueSis_constant_double6kM_i_; text: .text%__1cMmulD_memNodeHtwo_adr6kM_I_; -text: .text%__1cVMoveF2I_reg_stackNodeHtwo_adr6kM_I_; text: .text%jni_CallStaticObjectMethod: jni.o; text: .text%__1cNcmovL_memNodeHtwo_adr6kM_I_; text: .text%__1cFStateM_sub_Op_AddD6MpknENode__v_; text: .text%__1cMmulI_memNodeMideal_Opcode6kM_i_; text: .text%__1cScompL_rReg_memNodeFreloc6kM_i_; text: .text%__1cLloadSSINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNGrowableArray4CpnIPerfData__2t6Mii_v_; -text: .text%__1cOCompilerThreadSis_Compiler_thread6kM_i_; text: .text%__1cTjava_lang_ThrowableLset_message6FpnHoopDesc_2_v_; text: .text%__1cMPerfDataList2T6M_v_; -text: .text%__1cLVtableStubsFenter6FiiipnKVtableStub__v_; text: .text%__1cMmulI_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cOcmovD_regUNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNCompileBrokerUmake_compiler_thread6FpkcpnMCompileQdDueue_pnQCompilerCounters_pnGThread__pnOCompilerThread__; text: .text%__1cNnegI_rRegNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cbCAbstractInterpreterGeneratorbHgenerate_exception_handler_common6Mpkc2i_pC_; -text: .text%__1cSCommandLineFlagsExKis_default6FnPCommandLineFlag__i_; text: .text%__1cJAssemblerEnegl6MpnMRegisterImpl__v_; -text: .text%__1cUConstantOopReadValuePis_constant_oop6kM_i_; -text: .text%__1cHMatcherNlogDSupported6F_ki_; text: .text%__1cOGenerateOopMapRdo_multianewarray6Mii_v_; text: .text%__1cLconvI2BNodeIpipeline6kM_pknIPipeline__; text: .text%__1cUPSGenerationCounters2t6MpkciipnOPSVirtualSpace__v_; @@ -7066,86 +4597,59 @@ text: .text%__1cMPerfDataList2t6Mi_v_; text: .text%__1cFStateP_sub_Op_ConvI2D6MpknENode__v_; text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_; text: .text%__1cJCodeCachebCmake_marked_nmethods_zombies6F_v_; -text: .text%__1cNVM_DeoptimizeEname6kM_pkc_; text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC2_v_; text: .text%__1cHThreadsbFdeoptimized_wrt_marked_nmethods6F_v_; -text: .text%__1cSCommandLineFlagsExJboolAtPut6FnXCommandLineFlagWithType_i_v_; -text: .text%__1cMmulI_memNodeJnum_opnds6kM_I_; text: .text%__1cFStateM_sub_Op_CmpF6MpknENode__v_; text: .text%__1cODeoptimizationVdeoptimize_dependents6F_i_; -text: .text%__1cOtailjmpIndNodeGpinned6kM_i_; -text: .text%__1cQshrL_rReg_CLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJAssemblerGmovzbl6MpnMRegisterImpl_2_v_; text: .text%__1cILogDNodeJideal_reg6kM_I_; -text: .text%__1cMmulI_memNodeRis_cisc_alternate6kM_i_; text: .text%__1cRaddL_mem_rRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMincL_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cFStateO_sub_Op_Conv2B6MpknENode__v_; text: .text%__1cNcmovL_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%jni_CallStaticObjectMethodV: jni.o; -text: .text%__1cMOopTaskQdDueueKinitialize6M_v_; text: .text%__1cMmulD_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cMOopTaskQdDueue2t6M_v_; -text: .text%__1cOLibraryCallKitbBinline_native_currentThread6M_i_; text: .text%__1cNMemoryManager2t6M_v_; text: .text%__1cMaddF_immNodeKconst_size6kM_i_; text: .text%__1cVMoveL2D_reg_stackNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOLibraryCallKitSinline_math_native6MnMvmIntrinsicsCID__i_; text: .text%__1cFciEnvbNArrayIndexOutOfBoundsException_instance6M_pnKciInstance__; text: .text%__1cMsubD_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMmulI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMaddF_immNodeFreloc6kM_i_; text: .text%__1cMaddD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cOCompilerThreadbCis_hidden_from_external_view6kM_i_; -text: .text%__1cNReservedSpaceJlast_part6ML_0_; text: .text%__1cMnegF_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMaddD_immNodeFreloc6kM_i_; text: .text%jni_IsInstanceOf: jni.o; text: .text%__1cMaddD_immNodeKconst_size6kM_i_; text: .text%jni_Throw: jni.o; -text: .text%__1cRmulI_rReg_immNodeMcisc_version6Mi_pnIMachNode__; text: .text%__1cOsalI_mem_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cSPSPromotionManager2t6M_v_; -text: .text%__1cFKlassUoop_is_objArrayKlass6kM_i_; text: .text%__1cOMacroAssemblerLstore_check6MpnMRegisterImpl_nHAddress__v_; text: .text%__1cOLibraryCallKitXgenerate_current_thread6MrpnENode__2_; text: .text%__1cMsubF_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cJAssemblerFmovss6MpnRFloatRegisterImpl_2_v_; text: .text%JVM_GetLastErrorString; -text: .text%__1cJAssemblerFmovsd6MpnRFloatRegisterImpl_2_v_; text: .text%__1cZInterpreterMacroAssemblerTprofile_switch_case6MpnMRegisterImpl_22_v_; text: .text%__1cZInterpreterMacroAssemblerWprofile_switch_default6MpnMRegisterImpl__v_; text: .text%__1cFStateM_sub_Op_SubF6MpknENode__v_; -text: .text%__1cLVtableStubsScreate_vtable_stub6Fii_pnKVtableStub__; text: .text%JVM_GetInterfaceVersion; text: .text%__1cKstoreBNodeErule6kM_I_; text: .text%__1cKVtableStub2n6FLi_pv_; text: .text%__1cJAssemblerEdecq6MpnMRegisterImpl__v_; -text: .text%__1cZInterpreterMacroAssemblerUprofile_virtual_call6MpnMRegisterImpl_22_v_; text: .text%__1cOtailjmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cCosFyield6F_v_; -text: .text%__1cRaddI_mem_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cOPSVirtualSpace2t6MnNReservedSpace_L_v_; -text: .text%__1cOLibraryCallKitMinline_trans6MnMvmIntrinsicsCID__i_; text: .text%Unsafe_SetMemory; text: .text%__1cCosIjvm_path6Fpci_v_; text: .text%__1cJTimeStamp2t6M_v_; text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MpnMRegisterImpl_2i_v_; -text: .text%__1cLconvI2BNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorKpass_float6M_v_; text: .text%__1cISubFNodeJideal_reg6kM_I_; text: .text%__1cNGrowableArray4CpnIPerfData__Egrow6Mi_v_; text: .text%__1cMSysClassPathNreset_item_at6Mi_v_; text: .text%__1cFStateM_sub_Op_LogD6MpknENode__v_; -text: .text%__1cFTypeDFempty6kM_i_; -text: .text%__1cZInterpreterMacroAssemblerVincrement_mdp_data_at6MpnMRegisterImpl_2i_v_; -text: .text%__1cJlookupOne6FpnHJNIEnv__pkcpnGThread__pnH_jclass__: jni.o; text: .text%__1cLloadSSINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cCosGgetenv6Fpkcpci_i_; text: .text%__1cZInterpreterMacroAssemblerLlock_object6MpnMRegisterImpl__v_; -text: .text%__1cOtypeArrayKlassQarray_klass_impl6MipnGThread__pnMklassOopDesc__; text: .text%__1cISubFNodeGadd_id6kM_pknEType__; -text: .text%__1cJArgumentsMbuild_string6Fppcpkc_v_; text: .text%__1cFStateM_sub_Op_SubD6MpknENode__v_; text: .text%JVM_RegisterSignal; text: .text%JVM_FindSignal; @@ -7156,12 +4660,10 @@ text: .text%__1cKConv2BNodeJideal_reg6kM_I_; text: .text%__1cXNativeSignatureIteratorIdo_float6M_v_; text: .text%jni_GetDoubleArrayRegion: jni.o; text: .text%__1cLloadSSDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cVMoveF2I_reg_stackNodeJnum_opnds6kM_I_; text: .text%__1cJArgumentsObuild_jvm_args6Fpkc_v_; text: .text%__1cOLibraryCallKitMpop_math_arg6M_pnENode__; text: .text%__1cZInterpreterMacroAssemblerRgen_subtype_check6MpnMRegisterImpl_rnFLabel__v_; text: .text%__1cFStateO_sub_Op_CMoveL6MpknENode__v_; -text: .text%__1cJArgumentsMadd_property6Fpkc_i_; text: .text%__1cMVM_OperationNdoit_epilogue6M_v_; text: .text%__1cOCompilerThread2t6MpnMCompileQdDueue_pnQCompilerCounters__v_; text: .text%__1cRaddI_mem_rRegNodeFreloc6kM_i_; @@ -7169,7 +4671,6 @@ text: .text%__1cSInterpreterRuntimebKthrow_ArrayIndexOutOfBoundsException6FpnKJa text: .text%__1cVMoveF2I_reg_stackNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNTemplateTableGfconst6Fi_v_; text: .text%__1cNCompileBrokerUcompiler_thread_loop6F_v_; -text: .text%__1cOtailjmpIndNodeHtwo_adr6kM_I_; text: .text%__1cQmulI_mem_immNodeFreloc6kM_i_; text: .text%__1cNincI_rRegNodeIpipeline6kM_pknIPipeline__; text: .text%__1cNVM_DeoptimizeEdoit6M_v_; @@ -7177,104 +4678,64 @@ text: .text%__1cLMoveF2INodeLbottom_type6kM_pknEType__; text: .text%__1cUConstantOopReadValue2t6MpnTDebugInfoReadStream__v_; text: .text%__1cRaddI_mem_rRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cMdivD_immNodeKconst_size6kM_i_; -text: .text%__1cMmulD_memNodeRis_cisc_alternate6kM_i_; text: .text%__1cQObjectStartArrayKinitialize6MnJMemRegion__v_; text: .text%__1cQObjectStartArraySset_covered_region6MnJMemRegion__v_; -text: .text%__1cMsubF_memNodeRis_cisc_alternate6kM_i_; text: .text%__1cUGcThreadCountClosureJdo_thread6MpnGThread__v_; text: .text%__1cNGrowableArray4CpnTDerivedPointerEntry__Egrow6Mi_v_; -text: .text%__1cOtailjmpIndNodeJnum_opnds6kM_I_; text: .text%__1cPGCMemoryManagerXinitialize_gc_stat_info6M_v_; text: .text%__1cPGCMemoryManager2t6M_v_; text: .text%__1cKGCStatInfo2t6Mi_v_; text: .text%__1cTMaskFillerForNativeLpass_object6M_v_; text: .text%__1cTMaskFillerForNativeJpass_long6M_v_; -text: .text%__1cJMarkSweepUAdjustPointerClosure2t6Mi_v_; text: .text%__1cCosHrealloc6FpvL_1_; text: .text%__1cCosWactive_processor_count6F_i_; -text: .text%__1cSestimate_path_freq6FpnENode__f_: loopnode.o; text: .text%__1cCosNsigexitnum_pd6F_i_; text: .text%__1cMLinkResolverbEvtable_index_of_miranda_method6FnLKlassHandle_nMsymbolHandle_2pnGThread__i_; -text: .text%__1cOLibraryCallKitVinline_fp_conversions6MnMvmIntrinsicsCID__i_; -text: .text%__1cZcatch_cleanup_intra_block6FpnENode_1pnFBlock_ii_v_: lcm.o; -text: .text%__1cCosbCis_thread_cpu_time_supported6F_i_; text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_; -text: .text%__1cNdefaultStreamMhas_log_file6M_i_; -text: .text%__1cNcmovL_memNodeRis_cisc_alternate6kM_i_; -text: .text%__1cRalign_object_size6Fl_l_; -text: .text%__1cMarrayOopDescLheader_size6FnJBasicType__i_; text: .text%__1cNstoreImmBNodeErule6kM_I_; text: .text%__1cNstoreImmINodeErule6kM_I_; -text: .text%__1cLloadSSDNodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cFParseMjump_if_join6MpnENode_2_2_; text: .text%__1cKJNIHandlesQmake_weak_global6FnGHandle__pnI_jobject__; -text: .text%__1cLloadSSINodeZcheck_for_anti_dependence6kM_i_; text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_float_field06FnJBasicType__pC_; text: .text%__1cFParseRdo_multianewarray6M_v_; -text: .text%__1cMloadConDNodeGis_Con6kM_I_; text: .text%jni_NewWeakGlobalRef: jni.o; -text: .text%__1cPfilename_to_pid6Fpkc_i_: perfMemory_solaris.o; -text: .text%__1cTis_directory_secure6Fpkc_i_: perfMemory_solaris.o; text: .text%jni_CallStaticVoidMethodV: jni.o; text: .text%jni_CallStaticBooleanMethod: jni.o; text: .text%__1cNGrowableArray4CpnNmethodOopDesc__Egrow6Mi_v_; -text: .text%__1cRInvocationCounterMreinitialize6Fi_v_; -text: .text%__1cXpartialSubtypeCheckNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cTconvF2I_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cUInterpreterGeneratorVgenerate_native_entry6Mi_pC_; text: .text%__1cUInterpreterGeneratorLlock_method6M_v_; text: .text%__1cNGrowableArray4CpC_Egrow6Mi_v_; text: .text%__1cNGrowableArray4CL_Egrow6Mi_v_; -text: .text%__1cObox_handleNodeHsize_of6kM_I_; -text: .text%__1cPsarL_rReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cIPSOldGenKinitialize6MnNReservedSpace_Lpkci_v_; text: .text%__1cIPSOldGenYinitialize_virtual_space6MnNReservedSpace_L_v_; text: .text%__1cIPSOldGenPinitialize_work6Mpkci_v_; -text: .text%__1cNdivI_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cbCAbstractInterpreterGeneratorTgenerate_error_exit6Mpkc_pC_; text: .text%__1cTAbstractInterpreterKinitialize6F_v_; text: .text%__1cZInterpreterMacroAssemblerLprofile_ret6MpnMRegisterImpl_2_v_; text: .text%__1cZInterpreterMacroAssemblerSprofile_final_call6MpnMRegisterImpl__v_; text: .text%__1cZInterpreterMacroAssemblerMprofile_call6MpnMRegisterImpl__v_; text: .text%__1cOPSVirtualSpace2t6M_v_; -text: .text%__1cOPSVirtualSpaceKinitialize6MnNReservedSpace_L_i_; text: .text%__1cZInterpreterMacroAssemblerSupdate_mdp_for_ret6MpnMRegisterImpl__v_; text: .text%__1cZInterpreterMacroAssemblerPset_mdp_flag_at6MpnMRegisterImpl_i_v_; text: .text%__1cZInterpreterMacroAssemblerWdispatch_only_noverify6MnITosState__v_; text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpCpnMRegisterImpl__v_; text: .text%__1cKReflectionbFbasic_type_arrayklass_to_mirror6FpnMklassOopDesc_pnGThread__pnHoopDesc__; -text: .text%__1cMAdapterCache2t6M_v_; -text: .text%__1cSComputeAdapterInfoIdo_array6Mii_v_; -text: .text%__1cGatomll6Fpkcpx_i_: arguments.o; -text: .text%__1cJArgumentsRcheck_memory_size6Fxx_n0AJArgsRange__; text: .text%__1cJArgumentsVset_parallel_gc_flags6F_v_; -text: .text%__1cYalign_to_allocation_size6FL_L_: heap.o; -text: .text%__1cJArgumentsRparse_memory_size6Fpkcpxx_n0AJArgsRange__; -text: .text%__1cJArgumentsXPropertyList_unique_add6FppnOSystemProperty_pkcpc_v_; text: .text%__1cQAgentLibraryList2t6M_v_; -text: .text%__1cFKlassVoop_is_typeArrayKlass6kM_i_; text: .text%__1cMmulF_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cJAssemblerGmovsbl6MpnMRegisterImpl_2_v_; text: .text%__1cJAssemblerGmovswl6MpnMRegisterImpl_2_v_; -text: .text%__1cLOptoRuntimebDlazy_c2i_adapter_generation_C6FpnKJavaThread__pC_; -text: .text%__1cLOptoRuntimeVgenerate_handler_blob6FpCi_pnNSafepointBlob__; text: .text%__1cRaddL_mem_rRegNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cJAssemblerGmovzwl6MpnMRegisterImpl_2_v_; -text: .text%__1cJAssemblerFmovdq6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; text: .text%__1cRComputeEntryStackIdo_float6M_v_; text: .text%__1cJAssemblerFcmovl6Mn0AJCondition_pnMRegisterImpl_nHAddress__v_; -text: .text%__1cSReferenceProcessor2t6MnJMemRegion_iii_v_; text: .text%__1cJAssemblerEaddl6MnHAddress_pnMRegisterImpl__v_; text: .text%__1cOGenerateOopMapTadd_to_ref_init_set6Mi_v_; text: .text%__1cJAssemblerEcmpq6MpnMRegisterImpl_i_v_; -text: .text%__1cJAssemblerHucomisd6MpnRFloatRegisterImpl_2_v_; text: .text%__1cJAssemblerFidivl6MpnMRegisterImpl__v_; text: .text%__1cJAssemblerFidivq6MpnMRegisterImpl__v_; text: .text%__1cJAssemblerEcdql6M_v_; text: .text%__1cJAssemblerEcdqq6M_v_; text: .text%__1cJAssemblerEleal6MpnMRegisterImpl_nHAddress__v_; text: .text%__1cJAssemblerDorq6MnHAddress_i_v_; -text: .text%__1cWStubGenerator_generate6FpnKCodeBuffer_i_v_; text: .text%__1cJStubQdDueue2t6MpnNStubInterface_ipnFMutex_pkc_v_; text: .text%__1cMGCTaskThreadDrun6M_v_; text: .text%__1cMGCTaskThreadFstart6M_v_; @@ -7284,12 +4745,9 @@ text: .text%__1cISubFNodeDsub6kMpknEType_3_3_; text: .text%__1cJAssemblerFxaddl6MnHAddress_pnMRegisterImpl__v_; text: .text%__1cNGCTaskManagerKset_thread6MIpnMGCTaskThread__v_; text: .text%__1cJAssemblerHldmxcsr6MnHAddress__v_; -text: .text%__1cJAssemblerFxorps6MpnRFloatRegisterImpl_2_v_; text: .text%__1cKcastPPNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cMPeriodicTask2t6ML_v_; text: .text%__1cMPeriodicTaskGenroll6M_v_; -text: .text%__1cPOopTaskQdDueueSetOregister_queue6MipnMOopTaskQdDueue__v_; -text: .text%__1cOMacroAssemblerHcall_VM6MpnMRegisterImpl_pC222i_v_; text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC_v_; text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC22_v_; text: .text%__1cNTemplateTableJfloat_cmp6Fi_v_; @@ -7297,14 +4755,9 @@ text: .text%__1cNTemplateTableKdouble_cmp6Fi_v_; text: .text%__1cNTemplateTableKinitialize6F_v_; text: .text%__1cNTemplateTableGlconst6Fi_v_; text: .text%__1cNTemplateTableGdconst6Fi_v_; -text: .text%__1cNTemplateTableDldc6Fi_v_; text: .text%__1cNTemplateTableHcastore6F_v_; -text: .text%__1cPdouble_quadword6Fpxxx_0_: templateTable_amd64.o; text: .text%__1cNTemplateTableKif_nullcmp6Fn0AJCondition__v_; text: .text%__1cNTemplateTableHif_acmp6Fn0AJCondition__v_; -text: .text%__1cNTemplateTableSgetfield_or_static6Fii_v_; -text: .text%__1cNTemplateTableUjvmti_post_field_mod6Fii_v_; -text: .text%__1cNTemplateTableSputfield_or_static6Fii_v_; text: .text%__1cNTemplateTableUinvokevirtual_helper6FpnMRegisterImpl_22_v_; text: .text%__1cEMIN24CL_6FTA0_0_; text: .text%__1cRCardTableModRefBSbCpar_chunk_heapword_alignment6F_L_; @@ -7312,8 +4765,6 @@ text: .text%__1cOMacroAssemblerPcorrected_idivl6MpnMRegisterImpl__i_; text: .text%__1cOMacroAssemblerPcorrected_idivq6MpnMRegisterImpl__i_; text: .text%__1cLNamedThread2t6M_v_; text: .text%__1cLNamedThreadIset_name6MpkcE_v_; -text: .text%__1cOMacroAssemblerQserialize_memory6MpnMRegisterImpl_22_v_; -text: .text%__1cIDivDNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cIDivDNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cFStatebB_sub_Op_PartialSubtypeCheck6MpknENode__v_; text: .text%__1cFStateM_sub_Op_DivI6MpknENode__v_; @@ -7322,24 +4773,17 @@ text: .text%__1cFStateP_sub_Op_ConvL2F6MpknENode__v_; text: .text%__1cFStateP_sub_Op_ConvL2D6MpknENode__v_; text: .text%__1cFStateP_sub_Op_ConvF2I6MpknENode__v_; text: .text%__1cFStateP_sub_Op_ConvD2F6MpknENode__v_; -text: .text%__1cRcheck_if_clipping6FpknKRegionNode_rpnGIfNode_5_i_: cfgnode.o; -text: .text%__1cWcheck_compare_clipping6FipnGIfNode_pnHConNode_rpnENode__i_: cfgnode.o; -text: .text%__1cIciObjectOis_array_klass6M_i_; text: .text%__1cScompP_rReg_memNodeFreloc6kM_i_; text: .text%__1cKCastPPNodeJideal_reg6kM_I_; text: .text%__1cLMoveF2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cFTypeDJis_finite6kM_i_; text: .text%__1cLMoveL2DNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cTconvL2D_reg_memNodeFreloc6kM_i_; text: .text%__1cMdivD_immNodeFreloc6kM_i_; text: .text%__1cMmulF_memNodeFreloc6kM_i_; text: .text%__1cMaddF_memNodeFreloc6kM_i_; -text: .text%__1cLConvF2INodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cLConvF2INodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cLConvD2FNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cOcompP_rRegNodeMcisc_version6Mi_pnIMachNode__; text: .text%__1cKciTypeFlowLStateVectorRdo_multianewarray6MpnQciBytecodeStream__v_; -text: .text%__1cMorI_rRegNodeMcisc_version6Mi_pnIMachNode__; text: .text%__1cRCollectorCounters2t6Mpkci_v_; text: .text%Unsafe_CompareAndSwapObject; text: .text%__1cNSafepointBlob2n6FLI_pv_; @@ -7347,8 +4791,6 @@ text: .text%__1cNSafepointBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_i_p0_; text: .text%__1cNSafepointBlob2t6MpnKCodeBuffer_ipnJOopMapSet_i_v_; text: .text%__1cINegFNodeJideal_reg6kM_I_; text: .text%__1cMVirtualSpace2t6M_v_; -text: .text%__1cMVirtualSpaceKinitialize6MnNReservedSpace_L_i_; -text: .text%__1cHMatcherQconvL2FSupported6F_ki_; text: .text%__1cLConvD2FNodeJideal_reg6kM_I_; text: .text%__1cLConvF2INodeJideal_reg6kM_I_; text: .text%__1cLConvL2DNodeJideal_reg6kM_I_; @@ -7364,29 +4806,17 @@ text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_i_v_; text: .text%__1cJAssemblerEsubq6MnHAddress_i_v_; text: .text%__1cLOptoRuntimeIgenerate6FpnFciEnv__v_; text: .text%__1cMmulD_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cYSurvivorMutableSpacePool2t6MpnKPSYoungGen_pkcnKMemoryPoolIPoolType_i_v_; text: .text%__1cParrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cFKlassUoop_is_instanceKlass6kM_i_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: arguments.o; text: .text%__1cJArgumentsWPropertyList_get_value6FpnOSystemProperty_pkc_4_; text: .text%__1cJArgumentsFparse6FpknOJavaVMInitArgs__i_; text: .text%__1cKNoopGCTaskQcreate_on_c_heap6F_p0_; -text: .text%__1cJArgumentsbSparse_java_tool_options_environment_variable6FpnMSysClassPath_pi_i_; -text: .text%__1cWResolveOopMapConflictsOreport_results6kM_i_; -text: .text%__1cMCodeHeapPool2t6MpnICodeHeap_pkci_v_; text: .text%__1cJAssemblerFxchgl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJArgumentsbNparse_java_options_environment_variable6FpnMSysClassPath_pi_i_; text: .text%__1cJAssemblerFxchgq6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cJArgumentsVfinalize_vm_init_args6FpnMSysClassPath_i_i_; -text: .text%__1cJArgumentsWparse_each_vm_init_arg6FpknOJavaVMInitArgs_pnMSysClassPath_pi_i_; text: .text%__1cJArgumentsSparse_vm_init_args6FpknOJavaVMInitArgs__i_; text: .text%__1cJAssemblerIcmpxchgl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cINegFNodeFIdeal6MpnIPhaseGVN_i_pnENode__; -text: .text%__1cJArgumentsZcheck_vm_args_consistency6F_i_; text: .text%__1cICodeHeap2t6M_v_; -text: .text%__1cJArgumentsbOparse_java_compiler_environment_variable6F_v_; text: .text%__1cHVM_ExitNset_vm_exited6F_i_; -text: .text%__1cICodeHeapHreserve6MLLL_i_; text: .text%__1cQRelocationHolder2t6M_v_; text: .text%__1cICodeHeapFclear6M_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: relocInfo.o; @@ -7395,15 +4825,12 @@ text: .text%__1cJArgumentsSset_bytecode_flags6F_v_; text: .text%__1cJArgumentsUset_ergonomics_flags6F_v_; text: .text%__1cJArgumentsbBset_cms_and_parnew_gc_flags6F_v_; text: .text%__1cJArgumentsTset_parnew_gc_flags6F_v_; -text: .text%__1cQno_shared_spaces6F_v_: arguments.o; text: .text%__1cJArgumentsMget_property6Fpkc_2_; text: .text%__1cLsymbolKlassOset_alloc_size6MI_v_; text: .text%__1cLsymbolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cJArgumentsVprocess_settings_file6Fpkcii_i_; text: .text%__1cNGCTaskManagerKthreads_do6MpnNThreadClosure__v_; text: .text%__1cNGCTaskManagerKinitialize6M_v_; text: .text%__1cNGCTaskManager2t6MI_v_; -text: .text%__1cXSynchronizedGCTaskQdDueue2t6MpnLGCTaskQdDueue_pnFMutex__v_; text: .text%__1cDhpiKinitialize6F_i_; text: .text%__1cDhpiZinitialize_socket_library6F_i_; text: .text%__1cDhpiYinitialize_get_interface6FpnIvm_calls__v_; @@ -7421,74 +4848,39 @@ text: .text%__1cLicache_init6F_v_; text: .text%__1cYGCAdaptivePolicyCounters2t6MpkciipnSAdaptiveSizePolicy__v_; text: .text%__1cHVM_ExitbJwait_for_threads_in_native_to_block6F_i_; text: .text%__1cJAssemblerHstmxcsr6MnHAddress__v_; -text: .text%__1cJAssemblerFaddss6MpnRFloatRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerFsubss6MpnRFloatRegisterImpl_2_v_; text: .text%__1cTICacheStubGeneratorVgenerate_icache_flush6MppFpCii_i_v_; text: .text%__1cMSysClassPath2t6Mpkc_v_; text: .text%__1cJArgumentsWinit_system_properties6F_v_; -text: .text%__1cJAssemblerFmulss6MpnRFloatRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerFdivss6MpnRFloatRegisterImpl_2_v_; -text: .text%__1cJAssemblerFaddsd6MpnRFloatRegisterImpl_nHAddress__v_; text: .text%__1cFChunkbDstart_chunk_pool_cleaner_task6F_v_; -text: .text%__1cJAssemblerFsubsd6MpnRFloatRegisterImpl_2_v_; text: .text%__1cOchunkpool_init6F_v_; -text: .text%__1cJAssemblerFmulsd6MpnRFloatRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerFdivsd6MpnRFloatRegisterImpl_2_v_; text: .text%__1cQSystemDictionarybAcompute_java_system_loader6FpnGThread__v_; -text: .text%__1cJAssemblerGsqrtsd6MpnRFloatRegisterImpl_nHAddress__v_; text: .text%__1cHVM_ExitEdoit6M_v_; -text: .text%__1cRArgumentOopFinderDset6MinJBasicType__v_; text: .text%__1cWAdjoiningVirtualSpaces2t6MnNReservedSpace_LLL_v_; text: .text%__1cUAdjoiningGenerations2t6MnNReservedSpace_LLLLLLL_v_; text: .text%__1cHOrLNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cZCompiledArgumentOopFinderRhandle_oop_offset6M_v_; -text: .text%__1cJAssemblerFxorps6MpnRFloatRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerFxorpd6MpnRFloatRegisterImpl_2_v_; -text: .text%__1cJAssemblerFxorpd6MpnRFloatRegisterImpl_nHAddress__v_; -text: .text%__1cJAssemblerJcvtsi2ssl6MpnRFloatRegisterImpl_pnMRegisterImpl__v_; -text: .text%__1cJAssemblerJcvtsi2ssq6MpnRFloatRegisterImpl_pnMRegisterImpl__v_; -text: .text%__1cJAssemblerJcvtsi2sdl6MpnRFloatRegisterImpl_pnMRegisterImpl__v_; -text: .text%__1cFframebAoops_compiled_arguments_do6MnMsymbolHandle_ipknLRegisterMap_pnKOopClosure__v_; -text: .text%__1cJAssemblerJcvtsi2sdq6MpnRFloatRegisterImpl_pnMRegisterImpl__v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: adaptiveSizePolicy.o; -text: .text%__1cSAdaptiveSizePolicy2t6ML_v_; -text: .text%__1cFframebDoops_interpreted_arguments_do6MnMsymbolHandle_ipnKOopClosure__v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: regmask.o; -text: .text%__1cJAssemblerKcvttss2sil6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; -text: .text%__1cJAssemblerKcvttss2siq6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: indexSet.o; -text: .text%__1cJAssemblerKcvttsd2sil6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; text: .text%__1cFframeVinterpreter_frame_mdp6kM_pC_; text: .text%__1cPvm_init_globals6F_v_; -text: .text%__1cJAssemblerKcvttsd2siq6MpnMRegisterImpl_pnRFloatRegisterImpl__v_; text: .text%__1cQSystemDictionaryKclasses_do6FpFpnMklassOopDesc__v_v_; text: .text%__1cQSystemDictionaryKmethods_do6FpFpnNmethodOopDesc__v_v_; text: .text%__1cQSystemDictionaryKinitialize6FpnGThread__v_; text: .text%__1cQSystemDictionarybCinitialize_preloaded_classes6FpnGThread__v_; -text: .text%__1cQSystemDictionarybDinitialize_basic_type_mirrors6FpnGThread__v_; -text: .text%__1cJAssemblerIcvtss2sd6MpnRFloatRegisterImpl_2_v_; -text: .text%__1cJAssemblerIcvtsd2ss6MpnRFloatRegisterImpl_2_v_; text: .text%__1cMinit_globals6F_i_; text: .text%__1cMexit_globals6F_v_; text: .text%__1cOMacroAssemblerKdecrementl6MpnMRegisterImpl_i_v_; -text: .text%__1cHVM_ExitEname6kM_pkc_; text: .text%__1cKcastPPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: fprofiler.o; text: .text%__1cNMemoryServiceRset_universe_heap6FpnNCollectedHeap__v_; text: .text%__1cMPeriodicTask2T5B6M_v_; -text: .text%__1cMPeriodicTaskLis_enrolled6kM_i_; text: .text%__1cNMemoryServicebFadd_parallel_scavenge_heap_info6FpnUParallelScavengeHeap__v_; text: .text%__1cMPeriodicTaskJdisenroll6M_v_; text: .text%__1cSset_init_completed6F_v_; -text: .text%__1cMadapter_init6F_v_; -text: .text%__1cTI2CAdapterGeneratorKinitialize6F_v_; text: .text%__1cNMemoryServiceXadd_psYoung_memory_pool6FpnKPSYoungGen_pnNMemoryManager_4_v_; -text: .text%__1cTC2IAdapterGeneratorKinitialize6F_v_; -text: .text%__1cOstackSlotPOperFclone6kM_pnIMachOper__; -text: .text%__1cObox_handleNodeFclone6kM_pnENode__; text: .text%__1cTAbstract_VM_VersionHvm_name6F_pkc_; text: .text%__1cTAbstract_VM_VersionJvm_vendor6F_pkc_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: ad_amd64_pipeline.o; text: .text%__1cSobjArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC222_v_; text: .text%__1cKmutex_init6F_v_; @@ -7505,7 +4897,6 @@ text: .text%__1cSinstanceKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vm_version.o; text: .text%__1cStemplateTable_init6F_v_; text: .text%__1cNTemplateTableNpd_initialize6F_v_; -text: .text%__1cSinstanceKlassKlassUoop_is_instanceKlass6kM_i_; text: .text%__1cNTemplateTableDnop6F_v_; text: .text%__1cNTemplateTableSshouldnotreachhere6F_v_; text: .text%__1cNTemplateTableLaconst_null6F_v_; @@ -7543,7 +4934,6 @@ text: .text%__1cNTemplateTableGsaload6F_v_; text: .text%__1cSReferenceProcessorMinit_statics6F_v_; text: .text%__1cXreferenceProcessor_init6F_v_; text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpCpnMRegisterImpl_33_v_; -text: .text%__1cURecompilationMonitorbGstart_recompilation_monitor_task6F_v_; text: .text%__1cZInterpreterMacroAssemblerUdispatch_only_normal6MnITosState__v_; text: .text%__1cNTemplateTableHaload_06F_v_; text: .text%__1cNTemplateTableGistore6F_v_; @@ -7588,8 +4978,6 @@ text: .text%__1cNTemplateTableElrem6F_v_; text: .text%__1cNTemplateTableElshl6F_v_; text: .text%__1cNTemplateTableElshr6F_v_; text: .text%__1cNTemplateTableFlushr6F_v_; -text: .text%__1cRaddL_rReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cRaddL_mem_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNTemplateTableEineg6F_v_; text: .text%__1cNTemplateTableElneg6F_v_; text: .text%__1cLVtableStubsKinitialize6F_v_; @@ -7597,7 +4985,6 @@ text: .text%__1cNTemplateTableEfneg6F_v_; text: .text%__1cNTemplateTableEdneg6F_v_; text: .text%__1cNTemplateTableEiinc6F_v_; text: .text%__1cNTemplateTableJwide_iinc6F_v_; -text: .text%__1cMincL_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNTemplateTableElcmp6F_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psScavenge.o; text: .text%__1cKPSScavengeKinitialize6F_v_; @@ -7612,19 +4999,12 @@ text: .text%__1cNTemplateTableMlookupswitch6F_v_; text: .text%__1cNTemplateTableRfast_linearswitch6F_v_; text: .text%__1cNTemplateTableRfast_binaryswitch6F_v_; text: .text%__1cbCAbstractInterpreterGeneratorMgenerate_all6M_v_; -text: .text%__1cbCAbstractInterpreterGeneratorbEset_entry_points_for_all_bytes6M_v_; -text: .text%__1cbCAbstractInterpreterGeneratorbCset_safepoints_for_all_bytes6M_v_; -text: .text%__1cOsalI_mem_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cSPSPromotionManagerKinitialize6F_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: memoryService.o; text: .text%__1cNTemplateTableIgetfield6Fi_v_; text: .text%__1cNTemplateTableJgetstatic6Fi_v_; -text: .text%__1cNGrowableArray4CpnNMemoryManager__2t6Mii_v_; -text: .text%__1cNGrowableArray4CpnKMemoryPool__2t6Mii_v_; text: .text%__1cNTemplateTableIputfield6Fi_v_; text: .text%__1cNTemplateTableJputstatic6Fi_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psPromotionLAB.o; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: interpreter.o; text: .text%__1cJPSPermGen2t6MnNReservedSpace_LLLLpkci_v_; text: .text%__1cXNativeSignatureIteratorHdo_byte6M_v_; text: .text%__1cIPSOldGen2t6MLLLpkci_v_; @@ -7647,7 +5027,6 @@ text: .text%__1cNTemplateTableLmonitorexit6F_v_; text: .text%__1cNTemplateTableEwide6F_v_; text: .text%__1cNTemplateTableOmultianewarray6F_v_; text: .text%__1cIPSOldGen2t6MnNReservedSpace_LLLLpkci_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: tenuredGeneration.o; text: .text%__1cQvtableStubs_init6F_v_; text: .text%__1cQaccessFlags_init6F_v_; text: .text%__1cSInterpreterRuntimeYthrow_ClassCastException6FpnKJavaThread_pnHoopDesc__v_; @@ -7655,17 +5034,9 @@ text: .text%__1cSInterpreterRuntimeSupdate_mdp_for_ret6FpnKJavaThread_i_v_; text: .text%__1cNeventlog_init6F_v_; text: .text%__1cOMacroAssemblerGc2bool6MpnMRegisterImpl__v_; text: .text%__1cPmethodDataKlassOset_alloc_size6MI_v_; -text: .text%__1cFVTuneEexit6F_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psMarkSweep.o; -text: .text%__1cTPSAlwaysTrueClosure2t6M_v_: psMarkSweep.o; text: .text%__1cXSignatureHandlerLibraryQset_handler_blob6F_pC_; -text: .text%__1cNGrowableArray4CpC_2t6Mii_v_; -text: .text%__1cNGrowableArray4CL_2t6Mii_v_; -text: .text%__1cbCAbstractInterpreterGeneratorbJgenerate_StackOverflowError_handler6M_pC_; text: .text%__1cOMacroAssemblerRsign_extend_short6MpnMRegisterImpl__v_; -text: .text%__1cbCAbstractInterpreterGeneratorbMgenerate_ArrayIndexOutOfBounds_handler6Mpkc_pC_; -text: .text%__1cbCAbstractInterpreterGeneratorbJgenerate_ClassCastException_handler6M_pC_; -text: .text%__1cGThreadWset_as_starting_thread6M_i_; text: .text%__1cLPSMarkSweepKinitialize6F_v_; text: .text%__1cbBcreate_initial_thread_group6FpnGThread__nGHandle__: thread.o; text: .text%__1cVcreate_initial_thread6FnGHandle_pnKJavaThread_pnGThread__pnHoopDesc__: thread.o; @@ -7678,12 +5049,9 @@ text: .text%__1cNWatcherThreadDrun6M_v_; text: .text%__1cNWatcherThreadFstart6F_v_; text: .text%__1cNWatcherThreadEstop6F_v_; text: .text%__1cOMacroAssemblerQsign_extend_byte6MpnMRegisterImpl__v_; -text: .text%__1cKJavaThread2t6M_v_; text: .text%__1cHRetDataJfixup_ret6MinQmethodDataHandle__pC_; -text: .text%__1cKvtune_init6F_v_; text: .text%__1cLmethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; text: .text%__1cbAPSGCAdaptivePolicyCounters2t6MpkciipnUPSAdaptiveSizePolicy__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psAdaptiveSizePolicy.o; text: .text%__1cKDictionaryKmethods_do6MpFpnNmethodOopDesc__v_v_; text: .text%__1cKDictionaryKclasses_do6MpFpnMklassOopDesc__v_v_; text: .text%__1cbCAbstractInterpreterGeneratorbFgenerate_slow_signature_handler6M_pC_; @@ -7695,20 +5063,15 @@ text: .text%__1cUInterpreterGeneratorXgenerate_accessor_entry6M_pC_; text: .text%__1cKDictionary2t6Mi_v_; text: .text%__1cJBytecodesKinitialize6F_v_; text: .text%__1cObytecodes_init6F_v_; -text: .text%__1cUPSAdaptiveSizePolicy2t6MLLLLLddI_v_; text: .text%__1cJBytecodesNpd_initialize6F_v_; text: .text%__1cHCompileRpd_compiler2_init6F_v_; text: .text%__1cKC2CompilerKinitialize6M_v_; text: .text%__1cFStateQ_sub_Op_TailJump6MpknENode__v_; -text: .text%__1cMorL_rRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cbCAbstractInterpreterGeneratorYgenerate_throw_exception6M_v_; text: .text%__1cUInterpreterGenerator2t6MpnJStubQdDueue__v_; text: .text%__1cWinvocationCounter_init6F_v_; text: .text%__1cQPlaceholderTable2t6Mi_v_; -text: .text%__1cHThreadsJcreate_vm6FpnOJavaVMInitArgs_pi_i_; text: .text%__1cFStateL_sub_Op_OrL6MpknENode__v_; text: .text%__1cFStateM_sub_Op_NegF6MpknENode__v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: ad_amd64_expand.o; text: .text%__1cQprint_statistics6F_v_; text: .text%__1cLbefore_exit6FpnKJavaThread__v_; text: .text%__1cFStateP_sub_Op_MoveL2D6MpknENode__v_; @@ -7720,7 +5083,6 @@ text: .text%__1cVjava_lang_ThreadGroupPcompute_offsets6F_v_; text: .text%__1cbIjava_lang_reflect_AccessibleObjectPcompute_offsets6F_v_; text: .text%__1cYjava_lang_reflect_MethodPcompute_offsets6F_v_; text: .text%__1cOThreadCriticalKinitialize6F_v_; -text: .text%__1cRAllocateTLSOffset6F_v_: threadLS_solaris_amd64.o; text: .text%__1cSThreadLocalStoragebCgenerate_code_for_get_thread6F_v_; text: .text%__1cYjava_lang_reflect_MethodNset_signature6FpnHoopDesc_2_v_; text: .text%__1cbDjava_lang_reflect_ConstructorPcompute_offsets6F_v_; @@ -7738,7 +5100,6 @@ text: .text%__1cLJavaClassesbAcompute_hard_coded_offsets6F_v_; text: .text%__1cLJavaClassesPcompute_offsets6F_v_; text: .text%__1cPGlobalTLABStats2t6M_v_; text: .text%__1cQjavaClasses_init6F_v_; -text: .text%__1cMTailJumpNode2t6MpnENode_22222_v_; text: .text%jni_ToReflectedMethod: jni.o; text: .text%__1cSThreadLocalStorageEinit6F_v_; text: .text%__1cNThreadServiceEinit6F_v_; @@ -7752,29 +5113,17 @@ text: .text%__1cWjni_GetFloatField_addr6F_pC_; text: .text%__1cRCardTableModRefBS2t6MnJMemRegion_i_v_; text: .text%__1cXjni_GetDoubleField_addr6F_pC_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: phase.o; -text: .text%__1cJTimeStampMmilliseconds6kM_x_; text: .text%__1cTConstantDoubleValueIwrite_on6MpnUDebugInfoWriteStream__v_; text: .text%__1cKPerfMemoryUdelete_memory_region6F_v_; text: .text%__1cKPerfMemoryUcreate_memory_region6FL_v_; text: .text%__1cRCardTableModRefBSbBct_max_alignment_constraint6F_L_; -text: .text%__1cUdelete_shared_memory6FpcL_v_: perfMemory_solaris.o; -text: .text%__1cUcreate_shared_memory6FL_pc_: perfMemory_solaris.o; text: .text%__1cOtailjmpIndNodeFreloc6kM_i_; -text: .text%__1cSmmap_create_shared6FL_pc_: perfMemory_solaris.o; text: .text%__1cETypeRInitialize_shared6FpnHCompile__v_; text: .text%__1cWconstantPoolCacheKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cbAcreate_sharedmem_resources6Fpkc1L_i_: perfMemory_solaris.o; text: .text%__1cWconstantPoolCacheKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cRmake_user_tmp_dir6Fpkc_i_: perfMemory_solaris.o; -text: .text%__1cbBcleanup_sharedmem_resources6Fpkc_v_: perfMemory_solaris.o; text: .text%__1cMciArrayKlass2t6MpnIciSymbol_ipnHciKlass__v_; -text: .text%__1cLremove_file6Fpkc_v_: perfMemory_solaris.o; -text: .text%__1cWget_sharedmem_filename6Fpkci_pc_: perfMemory_solaris.o; -text: .text%__1cNget_user_name6Fi_pc_: perfMemory_solaris.o; -text: .text%__1cQget_user_tmp_dir6Fpkc_pc_: perfMemory_solaris.o; text: .text%__1cRconstantPoolKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; text: .text%__1cFciEnvXget_or_create_exception6MrpnI_jobject_nMsymbolHandle__pnKciInstance__; -text: .text%__1cMloadConFNodeGis_Con6kM_I_; text: .text%__1cRconstantPoolKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; text: .text%__1cKPerfMemoryHdestroy6F_v_; text: .text%__1cQconstMethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; @@ -7794,7 +5143,6 @@ text: .text%__1cPPerfDataManagerHdestroy6F_v_; text: .text%__1cMsubD_immNodeFreloc6kM_i_; text: .text%__1cMsubF_memNodeFreloc6kM_i_; text: .text%lookupDirectBufferClasses: jni.o; -text: .text%__1cbDinitializeDirectBufferSupport6FpnHJNIEnv___i_: jni.o; text: .text%__1cVquicken_jni_functions6F_v_; text: .text%JNI_CreateJavaVM; text: .text%__1cFParseWprofile_null_checkcast6M_v_; @@ -7813,7 +5161,6 @@ text: .text%__1cRaddL_mem_rRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cMincL_memNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_float_field6F_pC_; text: .text%__1cQJNI_FastGetFieldbEgenerate_fast_get_double_field6F_pC_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jniFastGetField_amd64.o; text: .text%__1cNcmovL_memNodeFreloc6kM_i_; text: .text%__1cKJNIHandlesKinitialize6F_v_; text: .text%__1cQjni_handles_init6F_v_; @@ -7821,34 +5168,22 @@ text: .text%JVM_InitProperties; text: .text%JVM_Halt; text: .text%JVM_MaxMemory; text: .text%JVM_GetClassDeclaredMethods; -text: .text%__1cKCMoveDNodeFIdeal6MpnIPhaseGVN_i_pnENode__; text: .text%__1cOsalI_mem_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHRetDataKis_RetData6M_i_; text: .text%JVM_InitializeSocketLibrary; text: .text%JVM_Socket; text: .text%__1cPciObjArrayKlass2t6MpnIciSymbol_pnHciKlass_i_v_; -text: .text%__1cPOopTaskQdDueueSet2t6Mi_v_; text: .text%__1cbEinitialize_converter_functions6F_v_; text: .text%JVM_SupportsCX8; text: .text%__1cUciObjArrayKlassKlassEmake6F_p0_; text: .text%__1cTcompilerOracle_init6F_v_; -text: .text%__1cOCompilerOracleRparse_from_string6Fpkc_v_; text: .text%__1cOCompilerOraclePparse_from_file6F_v_; -text: .text%__1cHcc_file6F_pkc_: compilerOracle.o; -text: .text%__1cKTypeOopPtrEmake6FnHTypePtrDPTR_i_pk0_; text: .text%__1cKTypeOopPtrFxdual6kM_pknEType__; -text: .text%__1cOCompilerOracleOread_from_line6Fpc_v_; text: .text%__1cPciObjectFactoryTinit_shared_objects6M_v_; text: .text%__1cVcompiledICHolderKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; text: .text%__1cVcompiledICHolderKlassOset_alloc_size6MI_v_; -text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiEnvBase.o; text: .text%__1cVcompiledICHolderKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cNGrowableArray4CpnMJvmtiEnvBase__2t6Mii_v_; text: .text%__1cRJvmtiEventEnabled2t6M_v_; -text: .text%__1cRciArrayKlassKlassUis_array_klass_klass6M_i_; text: .text%__1cRJvmtiEventEnabledFclear6M_v_; -text: .text%__1cNGrowableArray4CpnOCompilerThread__2t6Mii_v_; -text: .text%__1cFParseNfetch_monitor6MipnENode_2_2_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compileBroker.o; text: .text%__1cNGrowableArray4CpnIciMethod__Egrow6Mi_v_; text: .text%__1cNCompileBrokerQset_should_block6F_v_; @@ -7856,10 +5191,7 @@ text: .text%__1cUJvmtiEventControllerIvm_start6F_v_; text: .text%__1cPGenerationSizerQinitialize_flags6M_v_; text: .text%__1cUJvmtiEventControllerHvm_init6F_v_; text: .text%__1cUJvmtiEventControllerIvm_death6F_v_; -text: .text%__1cNCompileBrokerVinit_compiler_threads6Fi_v_; -text: .text%__1cUParallelScavengeHeapbCsupports_inline_contig_alloc6kM_i_; text: .text%__1cUParallelScavengeHeapItop_addr6kM_ppnIHeapWord__; -text: .text%__1cNCompileBrokerQcompilation_init6FpnQAbstractCompiler__v_; text: .text%__1cUParallelScavengeHeapIend_addr6kM_ppnIHeapWord__; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiEventController.o; text: .text%__1cLJvmtiExportRenter_start_phase6F_v_; @@ -7868,23 +5200,19 @@ text: .text%__1cUParallelScavengeHeapNgc_threads_do6kMpnNThreadClosure__v_; text: .text%__1cUParallelScavengeHeapYpermanent_object_iterate6MpnNObjectClosure__v_; text: .text%__1cLJvmtiExportQenter_live_phase6F_v_; text: .text%__1cLJvmtiExportNpost_vm_start6F_v_; -text: .text%__1cOcompiler2_init6F_v_; text: .text%__1cLJvmtiExportTpost_vm_initialized6F_v_; text: .text%__1cLJvmtiExportNpost_vm_death6F_v_; text: .text%__1cLJvmtiExportbMtransition_pending_onload_raw_monitors6F_v_; text: .text%__1cUParallelScavengeHeapMmax_capacity6kM_L_; text: .text%__1cUJvmtiPendingMonitorsXtransition_raw_monitors6F_v_; -text: .text%__1cMaddF_regNodeMcisc_version6Mi_pnIMachNode__; text: .text%__1cUParallelScavengeHeapPpost_initialize6M_v_; text: .text%__1cUParallelScavengeHeapKinitialize6M_i_; -text: .text%__1cHoopDescLheader_size6F_i_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compilationPolicy.o; text: .text%__1cPClassFileParserbFjava_lang_ref_Reference_fix_pre6MpnPtypeArrayHandle_nSconstantPoolHandle_pnUFieldAllocationCount_pnGThread__v_; text: .text%__1cPClassFileParserXjava_lang_Class_fix_pre6MpnOobjArrayHandle_pnUFieldAllocationCount_pnGThread__v_; text: .text%__1cPClassFileParserYjava_lang_Class_fix_post6Mpi_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: parGCAllocBuffer.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiImpl.o; -text: .text%__1cNGrowableArray4CpnPJvmtiRawMonitor__2t6Mii_v_; text: .text%__1cNGrowableArray4CpnPJvmtiRawMonitor__Uclear_and_deallocate6M_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: jvmtiTagMap.o; text: .text%__1cRCompilationPolicyUcompleted_vm_startup6F_v_; @@ -7893,7 +5221,6 @@ text: .text%__SLIP.DELETER__C: ostream.o; text: .text%__1cWcompilationPolicy_init6F_v_; text: .text%__1cMostream_exit6F_v_; text: .text%__1cTtypeArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; -text: .text%__1cTtypeArrayKlassKlassVoop_is_typeArrayKlass6kM_i_; text: .text%__1cbCTwoGenerationCollectorPolicyMrem_set_name6M_nJGenRemSetEName__; text: .text%__1cTtypeArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; text: .text%__1cQostream_init_log6F_v_; @@ -7902,14 +5229,12 @@ text: .text%__1cIUniverseHgenesis6FpnGThread__v_; text: .text%__1cIUniverseNfixup_mirrors6FpnGThread__v_; text: .text%__1cMostream_init6F_v_; text: .text%__1cNdefaultStreamEinit6M_v_; -text: .text%__1cIUniverseUreinitialize_itables6F_v_; text: .text%__1cKklassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; text: .text%__1cKklassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; text: .text%__1cNuniverse_init6F_i_; text: .text%__1cIUniversePinitialize_heap6F_i_; text: .text%__1cLClassLoaderbBsetup_bootstrap_search_path6F_v_; text: .text%__1cOuniverse2_init6F_v_; -text: .text%__1cSuniverse_post_init6F_v_; text: .text%__1cIUniverseYcompute_base_vtable_size6F_v_; text: .text%__1cCosXnon_memory_address_word6F_pc_; text: .text%__1cCosGinit_26F_i_; @@ -7919,24 +5244,18 @@ text: .text%__1cCosHSolarisUsynchronization_init6F_v_; text: .text%Unsafe_SetNativeLong; text: .text%__1cCosHSolarisOlibthread_init6F_v_; text: .text%__1cJLoadFNodeMstore_Opcode6kM_i_; -text: .text%__1cOisT2_libthread6F_i_; text: .text%Unsafe_FreeMemory; text: .text%__1cCosHSolarisXinstall_signal_handlers6F_v_; text: .text%Unsafe_PageSize; text: .text%__1cRlwp_priocntl_init6F_i_: os_solaris.o; text: .text%__1cNpriocntl_stub6FinGidtype_iipc_l_: os_solaris.o; -text: .text%__1cCosHSolarisRmpss_sanity_check6F_v_; -text: .text%__1cOLibraryCallKitWinline_native_hashcode6Mii_i_; text: .text%__1cbCTwoGenerationCollectorPolicyQinitialize_flags6M_v_; -text: .text%__1cCosOrelease_memory6FpcL_i_; text: .text%__1cCosLsignal_wait6F_i_; text: .text%JVM_RegisterUnsafeMethods; -text: .text%__1cVcheck_pending_signals6Fi_i_: os_solaris.o; text: .text%__1cCosNsignal_notify6Fi_v_; text: .text%__1cCosOsignal_init_pd6F_v_; text: .text%__1cLClassLoaderQload_zip_library6F_v_; text: .text%__1cLClassLoaderZcreate_package_info_table6F_v_; -text: .text%__1cNmulI_rRegNodeMcisc_version6Mi_pnIMachNode__; text: .text%__1cLClassLoaderKinitialize6F_v_; text: .text%__1cLClassLoaderVcompute_Object_vtable6F_i_; text: .text%__1cCosHSolarisPinit_signal_mem6F_v_; @@ -7947,19 +5266,12 @@ text: .text%__1cCosSget_temp_directory6F_pkc_; text: .text%__1cVLoaderConstraintTable2t6Mi_v_; text: .text%__1cCosbDallocate_thread_local_storage6F_i_; text: .text%__1cOcodeCache_init6F_v_; -text: .text%__1cVverificationType_init6F_v_; -text: .text%__1cVverificationType_exit6F_v_; -text: .text%__1cQVerificationTypeKinitialize6F_v_; -text: .text%__1cQVerificationTypeIfinalize6F_v_; text: .text%__1cJCodeCacheKinitialize6F_v_; text: .text%__1cNIdealLoopTreeQsplit_outer_loop6MpnOPhaseIdealLoop__v_; text: .text%__1cKfix_parent6FpnNIdealLoopTree_1_v_: loopnode.o; text: .text%__1cCosHSolarisQsignal_sets_init6F_v_; text: .text%__1cTClassLoadingServiceEinit6F_v_; -text: .text%__1cTClassLoadingServiceVnotify_class_unloaded6FpnNinstanceKlass_i_v_; -text: .text%__1cCosScreate_main_thread6FpnGThread__i_; text: .text%__1cNIdealLoopTreeUmerge_many_backedges6MpnOPhaseIdealLoop__v_; -text: .text%__1cQcreate_os_thread6FpnGThread_I_pnIOSThread__: os_solaris.o; text: .text%__1cRLowMemoryDetectorKinitialize6F_v_; text: .text%__1cLmethodKlassOset_alloc_size6MI_v_; text: .text%__1cNExceptionBlob2n6FLI_pv_; @@ -7971,13 +5283,10 @@ text: .text%__1cQUncommonTrapBlob2t6MpnKCodeBuffer_ipnJOopMapSet_i_v_; text: .text%__1cSDeoptimizationBlob2n6FLI_pv_; text: .text%__1cSDeoptimizationBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_iiii_p0_; text: .text%__1cSDeoptimizationBlob2t6MpnKCodeBuffer_ipnJOopMapSet_iiii_v_; -text: .text%__1cRLowMemoryDetectorUhas_pending_requests6F_i_; text: .text%__1cCosbDinit_system_properties_values6F_v_; text: .text%__1cCosHSolarisWinitialize_system_info6F_v_; text: .text%__1cCosPphysical_memory6F_X_; -text: .text%__1cMFastLockNodeLis_FastLock6kM_pk0_; text: .text%__1cRLowMemoryDetectorbGlow_memory_detector_thread_entry6FpnKJavaThread_pnGThread__v_; -text: .text%__1cXLowMemoryDetectorThreadbCis_hidden_from_external_view6kM_i_; text: .text%__1cSThreadLocalStorageHpd_init6F_v_; text: .text%__1cLmethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: machnode.o; @@ -7985,28 +5294,16 @@ text: .text%__1cPmanagement_init6F_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: cmsAdaptiveSizePolicy.o; text: .text%__1cKManagementEinit6F_v_; text: .text%__1cKManagementKinitialize6FpnGThread__v_; -text: .text%__1cKManagementWrecord_vm_startup_time6Fxx_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: management.o; text: .text%__1cOmarksweep_init6F_v_; -text: .text%__1cCosXis_server_class_machine6F_i_; -text: .text%__1cJMarkSweepQKeepAliveClosure2t6M_v_: markSweep.o; -text: .text%__1cNReservedSpace2t6MLLipc_v_; -text: .text%__1cJMarkSweepOIsAliveClosure2t6M_v_: markSweep.o; text: .text%__1cCosZset_memory_serialize_page6FpC_v_; -text: .text%__1cCosNset_boot_path6Fcc_i_; -text: .text%__1cJMarkSweepSFollowStackClosure2t6M_v_: markSweep.o; text: .text%__1cNReservedSpaceUpage_align_size_down6FL_L_; text: .text%__1cNReservedSpaceYallocation_align_size_up6FL_L_; -text: .text%__1cNGrowableArray4CpnKOSRAdapter__2t6Mii_v_; -text: .text%__1cXonStackReplacement_init6F_v_; -text: .text%__1cSOnStackReplacementKinitialize6F_v_; -text: .text%__1cJMarkSweepRFollowRootClosure2t6M_v_: markSweep.o; text: .text%__1cCosLinit_random6Fl_v_; text: .text%__1cHOrLNodeJideal_reg6kM_I_; text: .text%__1cOvmStructs_init6F_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vmStructs.o; text: .text%__1cJvmSymbolsKinitialize6FpnGThread__v_; -text: .text%__1cJMarkSweepSMarkAndPushClosure2t6M_v_: markSweep.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: markSweep.o; text: .text%__1cQVMOperationQdDueue2t6M_v_; text: .text%__1cCosGstrdup6Fpkc_pc_; @@ -8017,13 +5314,9 @@ text: .text%__1cMsubD_immNodeKconst_size6kM_i_; text: .text%__1cTsignal_thread_entry6FpnKJavaThread_pnGThread__v_: os.o; text: .text%__1cOtailjmpIndNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cSobjArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_; -text: .text%__1cHMatcherVfind_callee_arguments6FpnNsymbolOopDesc_ipi_pnLOptoRegPair__; text: .text%__1cIVMThreadGcreate6F_v_; text: .text%__1cIVMThread2t6M_v_; -text: .text%__1cNSharedRuntimeUlookup_function_DD_D6FrpFpnHJNIEnv__pnH_jclass_dd_dpkc_v_; -text: .text%__1cNSharedRuntimebIinitialize_StrictMath_entry_points6F_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: sharedHeap.o; -text: .text%__1cTAssertIsPermClosure2t6M_v_: sharedHeap.o; text: .text%__1cIVMThreadDrun6M_v_; text: .text%__1cWResolveOopMapConflictsUdo_potential_rewrite6MpnGThread__nMmethodHandle__; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: generateOopMap.o; @@ -8031,43 +5324,25 @@ text: .text%__1cNCellTypeStateImake_top6F_0_; text: .text%__1cJAssemblerEandl6MpnMRegisterImpl_2_v_; text: .text%__1cNCellTypeStateLmake_bottom6F_0_; text: .text%__1cNcmovL_memNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cRcheck_basic_types6F_v_; -text: .text%__1cLOptoRuntimeYgenerate_arraycopy_stubs6F_v_; -text: .text%__1cSobjArrayKlassKlassUoop_is_objArrayKlass6kM_i_; text: .text%__1cNSharedRuntimebBgenerate_class_cast_message6FpnKJavaThread_pkc_pc_; -text: .text%__1cNSharedRuntimebBgenerate_class_cast_message6Fpkc2_pc_; -text: .text%__1cLOptoRuntimebPgenerate_polling_page_return_handler_blob6F_v_; text: .text%__1cIVMThreadEloop6M_v_; -text: .text%__1cLOptoRuntimebSgenerate_polling_page_safepoint_handler_blob6F_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: matcher.o; -text: .text%__1cLOptoRuntimeUsetup_exception_blob6F_v_; -text: .text%__1cLOptoRuntimeWfill_in_exception_blob6F_v_; text: .text%__1cNMemoryManagerbDget_code_cache_memory_manager6F_p0_; text: .text%__1cNMemoryManagerbDget_psScavenge_memory_manager6F_pnPGCMemoryManager__; text: .text%__1cNMemoryManagerbEget_psMarkSweep_memory_manager6F_pnPGCMemoryManager__; -text: .text%__1cQPSGenerationPool2t6MpnIPSOldGen_pkcnKMemoryPoolIPoolType_i_v_; text: .text%__1cJAssemblerFimull6MpnMRegisterImpl_2_v_; -text: .text%__1cLOptoRuntimebBgenerate_uncommon_trap_blob6F_v_; text: .text%__1cNSharedRuntimeTgenerate_deopt_blob6F_v_; -text: .text%__1cQPSGenerationPool2t6MpnJPSPermGen_pkcnKMemoryPoolIPoolType_i_v_; text: .text%__1cNRegisterSaverYrestore_result_registers6FpnOMacroAssembler__v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: runtimeService.o; text: .text%__1cORuntimeServiceYrecord_application_start6F_v_; text: .text%__1cJGenRemSetYmax_alignment_constraint6Fn0AEName__L_; -text: .text%__1cICarSpaceEinit6F_v_; -text: .text%__1cNcarSpace_init6F_v_; text: .text%__1cORuntimeServiceEinit6F_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: genCollectedHeap.o; -text: .text%__1cTAssertIsPermClosure2t6M_v_: genCollectedHeap.o; -text: .text%__1cRAlwaysTrueClosure2t6M_v_: genCollectedHeap.o; -text: .text%__1cLOptoRuntimeVhandle_exception_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeSfetch_monitor_Type6F_pknITypeFunc__; text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_i_v_; text: .text%__1cLStatSamplerKinitialize6F_v_; text: .text%__1cLStatSamplerGengage6F_v_; text: .text%__1cLStatSamplerJdisengage6F_v_; text: .text%__1cLStatSamplerHdestroy6F_v_; -text: .text%__1cSCommandLineFlagsExKuintxAtPut6FnXCommandLineFlagWithType_L_v_; text: .text%__1cSobjArrayKlassKlassbEallocate_system_objArray_klass6MpnGThread__pnMklassOopDesc__; text: .text%__1cLOptoRuntimeUmultianewarray5_Type6F_pknITypeFunc__; text: .text%__1cLStatSamplerbMcreate_system_property_instrumentation6FpnGThread__v_; @@ -8079,14 +5354,7 @@ text: .text%__1cJAssemblerEsarq6MpnMRegisterImpl__v_; text: .text%__1cLOptoRuntimeUmultianewarray4_Type6F_pknITypeFunc__; text: .text%__1cJAssemblerEshll6MpnMRegisterImpl__v_; text: .text%__1cJAssemblerEshlq6MpnMRegisterImpl__v_; -text: .text%__1cUEdenMutableSpacePool2t6MpnKPSYoungGen_pnMMutableSpace_pkcnKMemoryPoolIPoolType_i_v_; text: .text%__1cNStubGeneratorQgenerate_initial6M_v_; -text: .text%__1cNStubGeneratorXgenerate_atomic_add_ptr6M_pC_; -text: .text%__1cNStubGeneratorTgenerate_atomic_add6M_pC_; -text: .text%__1cNStubGeneratorbCgenerate_atomic_cmpxchg_long6M_pC_; -text: .text%__1cNStubGeneratorXgenerate_atomic_cmpxchg6M_pC_; -text: .text%__1cNStubGeneratorYgenerate_atomic_xchg_ptr6M_pC_; -text: .text%__1cNStubGeneratorUgenerate_atomic_xchg6M_pC_; text: .text%__1cNStubGeneratorYgenerate_catch_exception6M_pC_; text: .text%__1cNStubGeneratorSgenerate_call_stub6MrpC_1_; text: .text%__1cNStubGeneratorbAgenerate_forward_exception6M_pC_; @@ -8098,18 +5366,12 @@ text: .text%__1cNStubGeneratorSgenerate_f2i_fixup6M_pC_; text: .text%__1cLOptoRuntimeUmultianewarray3_Type6F_pknITypeFunc__; text: .text%__1cNStubGeneratorTgenerate_verify_oop6M_pC_; text: .text%__1cNStubGeneratorVgenerate_verify_mxcsr6M_pC_; -text: .text%__1cNStubGeneratorYgenerate_get_previous_fp6M_pC_; -text: .text%__1cNStubGeneratorbIgenerate_handler_for_unsafe_access6M_pC_; text: .text%__1cMStubRoutinesLinitialize16F_v_; text: .text%__1cMStubRoutinesLinitialize26F_v_; text: .text%__1cSstubRoutines_init16F_v_; text: .text%__1cSstubRoutines_init26F_v_; text: .text%__1cLMoveL2DNodeJideal_reg6kM_I_; -text: .text%__1cNGrowableArray4CpnTDerivedPointerEntry__2t6Mii_v_; text: .text%__1cLMoveF2INodeJideal_reg6kM_I_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: oopMap.o; -text: .text%__1cNGrowableArray4CpnHMonitor__2t6Mii_v_; text: .text%__1cLOptoRuntimeUmultianewarray2_Type6F_pknITypeFunc__; -text: .text%__1cLOptoRuntimeUmultianewarray1_Type6F_pknITypeFunc__; -text: .text%__1cQDoNothingClosure2t6M_v_: oopMap.o; text: .text%__1cJAssemblerEshrl6MpnMRegisterImpl__v_; diff --git a/hotspot/make/solaris/makefiles/reorder_TIERED_i486 b/hotspot/make/solaris/makefiles/reorder_TIERED_i486 index 4edb5a22610..89ac4da3beb 100644 --- a/hotspot/make/solaris/makefiles/reorder_TIERED_i486 +++ b/hotspot/make/solaris/makefiles/reorder_TIERED_i486 @@ -2,7 +2,6 @@ data = R0x2000; text = LOAD ?RXO; -text: .text%__1cNinstanceKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cQIndexSetIteratorQadvance_and_next6M_I_; text: .text%__1cNSharedRuntimeElrem6Fxx_x_; text: .text%__1cCosOjavaTimeMillis6F_x_; @@ -19,7 +18,6 @@ text: .text%__1cDLRGOcompute_degree6kMr0_i_; text: .text%__1cIIndexSetWalloc_block_containing6MI_pn0AIBitBlock__; text: .text%__1cENodeEjvms6kM_pnIJVMState__; text: .text%__1cHRegMaskJis_bound16kM_i_; -text: .text%__1cNobjArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cETypeDcmp6Fkpk03_i_; text: .text%__1cHRegMaskJis_bound26kM_i_; text: .text%__1cHRegMaskESize6kM_I_; @@ -36,8 +34,6 @@ text: .text%__1cENodeHadd_req6Mp0_v_; text: .text%__1cKTypeOopPtrFklass6kM_pnHciKlass__: type.o; text: .text%__1cMPhaseChaitinTinterfere_with_live6MIpnIIndexSet__v_; text: .text%__1cETypeFuhash6Fkpk0_i_; -text: .text%__1cOlower_pressure6FpnDLRG_IpnFBlock_pI4_v_: ifg.o; -text: .text%__1cMget_live_bit6Fpii_i_: buildOopMap.o; text: .text%__1cMPhaseChaitinLskip_copies6MpnENode__2_; text: .text%__1cICallNodeKmatch_edge6kMI_I_; text: .text%__1cHPhiNodeGOpcode6kM_i_; @@ -47,15 +43,12 @@ text: .text%__1cIPhaseIFGQeffective_degree6kMI_i_; text: .text%__1cIUniverseMnon_oop_word6F_pv_; text: .text%__1cIPhaseIFGLremove_node6MI_pnIIndexSet__; text: .text%__1cIPhaseIFGJre_insert6MI_v_; -text: .text%__1cJraw_score6Fdd_d_: chaitin.o; text: .text%__1cDLRGFscore6kM_d_; text: .text%__1cETypeIhashcons6M_pk0_; text: .text%__1cPClassFileStreamGget_u26MpnGThread__H_; text: .text%__1cENodeEhash6kM_I_; text: .text%__1cHNTarjanEEVAL6M_p0_; text: .text%__1cMMachCallNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cMset_live_bit6Fpii_v_: buildOopMap.o; -text: .text%__1cOPhaseIdealLoopUbuild_loop_late_post6MpnENode_pk0_v_; text: .text%__1cIProjNodeGOpcode6kM_i_; text: .text%__1cNobjArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; text: .text%__1cNobjArrayKlassToop_follow_contents6MpnHoopDesc__v_; @@ -64,7 +57,6 @@ text: .text%__1cDfh16FI_i_; text: .text%__1cNIdealLoopTreeJis_member6kMpk0_i_; text: .text%__1cIConINodeGOpcode6kM_i_; text: .text%__1cGIfNodeGOpcode6kM_i_; -text: .text%__1cOtypeArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cHTypePtrEhash6kM_i_; text: .text%__1cENode2t6MI_v_; text: .text%JVM_ArrayCopy; @@ -79,11 +71,9 @@ text: .text%__1cKIfTrueNodeGOpcode6kM_i_; text: .text%__1cIAddPNodeGOpcode6kM_i_; text: .text%__1cPDictionaryEntrybDprotection_domain_set_oops_do6MpnKOopClosure__v_: dictionary.o; text: .text%__1cHTypeIntEhash6kM_i_; -text: .text%__1cSPSPromotionManagerUflush_prefetch_queue6M_v_: psPromotionManager.o; text: .text%__1cMMachProjNodeLbottom_type6kM_pknEType__; text: .text%__1cMPhaseIterGVNNtransform_old6MpnENode__2_; text: .text%__1cMMachProjNodeGOpcode6kM_i_; -text: .text%__1cMclr_live_bit6Fpii_v_: buildOopMap.o; text: .text%__1cJCProjNodeNis_block_proj6kM_pknENode__: cfgnode.o; text: .text%__1cJPhaseLiveGgetset6MpnFBlock__pnIIndexSet__; text: .text%__1cHConNodeGOpcode6kM_i_; @@ -223,7 +213,6 @@ text: .text%__1cFframeYinterpreter_frame_method6kM_pnNmethodOopDesc__; text: .text%__1cENodeHdel_req6MI_v_; text: .text%__1cETypeEhash6kM_i_; text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cKoopFactoryKnew_symbol6FpkcipnGThread__pnNsymbolOopDesc__; text: .text%__1cIHaltNodeGOpcode6kM_i_; text: .text%__1cMPhaseIterGVNZremove_globally_dead_node6MpnENode__v_; text: .text%__1cIParmNodeGOpcode6kM_i_; @@ -310,7 +299,6 @@ text: .text%__1cHMatcherKmatch_tree6MpknENode__pnIMachNode__; text: .text%__1cIIndexSetSpopulate_free_list6F_v_; text: .text%__1cMloadConINodeLout_RegMask6kM_rknHRegMask__; text: .text%JVM_ReleaseUTF; -text: .text%__1cKutf8_write6FpCH_0_: utf8.o; text: .text%__1cKNode_ArrayGremove6MI_v_; text: .text%__1cKRegionNodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cMPhaseIterGVNMsubsume_node6MpnENode_2_v_; @@ -359,7 +347,6 @@ text: .text%__1cHPhiNodeHsize_of6kM_I_: cfgnode.o; text: .text%__1cJTypeTupleGfields6FI_ppknEType__; text: .text%__1cMPhaseChaitinFUnion6MpknENode_3_v_; text: .text%__1cKRegionNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cLrecord_bias6FpknIPhaseIFG_ii_v_: coalesce.o; text: .text%__1cMPhaseChaitinSget_spillcopy_wide6MpnENode_2I_2_; text: .text%__1cKNativeCallLdestination6kM_pC_; text: .text%__1cICallNodeIIdentity6MpnOPhaseTransform__pnENode__: callnode.o; @@ -415,7 +402,6 @@ text: .text%__1cNmethodOopDescLresult_type6kM_nJBasicType__; text: .text%__1cFStateM_sub_Op_ConI6MpknENode__v_; text: .text%__1cNRelocIteratorKset_limits6MpC1_v_; text: .text%__1cIsplit_if6FpnGIfNode_pnMPhaseIterGVN__pnENode__: ifnode.o; -text: .text%__1cTremove_useless_bool6FpnGIfNode_pnIPhaseGVN__pnENode__: ifnode.o; text: .text%__1cJeRegPOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cSInterpreterRuntimeJanewarray6FpnKJavaThread_pnTconstantPoolOopDesc_ii_v_; text: .text%__1cHAddNodeEhash6kM_I_; @@ -478,7 +464,6 @@ text: .text%__1cMMergeMemNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cLMachNopNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cKRegionNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cMObjectLocker2T6M_v_; -text: .text%__1cWConstantPoolCacheEntryRset_initial_state6Mi_v_; text: .text%__1cOPhaseIdealLoopOidom_no_update6kMpnENode__2_: loopTransform.o; text: .text%__1cRmethodDataOopDescPinitialize_data6MpnOBytecodeStream_i_i_; text: .text%__1cRmethodDataOopDescTbytecode_cell_count6FnJBytecodesECode__i_; @@ -516,7 +501,6 @@ text: .text%__1cMLinkResolverYlookup_method_in_klasses6FrnMmethodHandle_nLKlassH text: .text%__1cMMergeMemNodePset_base_memory6MpnENode__v_; text: .text%__1cNLoadKlassNodeGOpcode6kM_i_; text: .text%__1cKTypeRawPtrEhash6kM_i_; -text: .text%__1cIciObjectIencoding6M_pnI_jobject__; text: .text%__1cPPerfLongVariantGsample6M_v_; text: .text%__1cIAndINodeGOpcode6kM_i_; text: .text%__1cVCompressedWriteStream2t6Mi_v_; @@ -552,7 +536,6 @@ text: .text%__1cCosMvm_page_size6F_i_; text: .text%__1cENodeDcmp6kMrk0_I_; text: .text%__1cNloadRangeNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFStateM_sub_Op_RegI6MpknENode__v_; -text: .text%__1cFKlassNlookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; text: .text%__1cFStateM_sub_Op_AddP6MpknENode__v_; text: .text%__1cIGraphKitMsaved_ex_oop6FpnNSafePointNode__pnENode__; text: .text%__1cIciObjectJset_ident6MI_v_; @@ -654,7 +637,6 @@ text: .text%__1cFParseFBlockRsuccessor_for_bci6Mi_p1_; text: .text%JVM_CurrentThread; text: .text%__1cKBranchDataKcell_count6M_i_: ciMethodData.o; text: .text%__1cLOopMapCacheIentry_at6kMi_pnQOopMapCacheEntry__; -text: .text%__1cHOopFlowEmake6FpnFArena_i_p0_; text: .text%__1cOGenerateOopMapKcheck_type6MnNCellTypeState_1_v_; text: .text%__1cMMergeMemNodeNgrow_to_match6Mpk0_v_; text: .text%__1cHTypeIntFxdual6kM_pknEType__; @@ -734,8 +716,6 @@ text: .text%__1cWconstantPoolCacheKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cWconstantPoolCacheKlassToop_adjust_pointers6MpnHoopDesc__i_; text: .text%__1cFframebFinterpreter_frame_monitor_begin6kM_pnPBasicObjectLock__; text: .text%__1cGGCTask2t6M_v_; -text: .text%__1cETypeFwiden6kMpk0_2_: type.o; -text: .text%__1cIAddPNodeQmach_bottom_type6FpknIMachNode__pknEType__; text: .text%__1cJLoadBNodeGOpcode6kM_i_; text: .text%__1cOPhaseIdealLoopGspinup6MpnENode_2222pnLsmall_cache__2_; text: .text%__1cPCountedLoopNodeGOpcode6kM_i_; @@ -762,8 +742,6 @@ text: .text%__1cNSignatureInfoJdo_object6Mii_v_: bytecode.o; text: .text%__1cHCompileKTracePhase2T6M_v_; text: .text%__1cILoadNodeHsize_of6kM_I_; text: .text%__1cVjava_lang_ClassLoaderbBnon_reflection_class_loader6FpnHoopDesc__2_; -text: .text%__1cFciEnvYget_method_by_index_impl6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; -text: .text%__1cFciEnvTget_method_by_index6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; text: .text%__1cFciEnvNlookup_method6MpnNinstanceKlass_2pnNsymbolOopDesc_4nJBytecodesECode__pnNmethodOopDesc__; text: .text%__1cNCatchProjNodeLbottom_type6kM_pknEType__: cfgnode.o; text: .text%__1cNCatchProjNodeHsize_of6kM_I_: cfgnode.o; @@ -838,7 +816,6 @@ text: .text%__1cCosEfree6Fpv_v_; text: .text%__1cKInlineTreeJcallee_at6kMipnIciMethod__p0_; text: .text%__1cQSystemDictionarybCfind_instance_or_array_klass6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; text: .text%__1cMVirtualSpaceOcommitted_size6kM_I_; -text: .text%__1cNinstanceKlassSlookup_osr_nmethod6kMkpnNmethodOopDesc_i_pnHnmethod__; text: .text%__1cGRFrame2t6MnFframe_pnKJavaThread_kp0_v_; text: .text%__1cYCallStaticJavaDirectNodeFreloc6kM_i_; text: .text%__1cKciTypeFlowLStateVectorJcopy_into6kMp1_v_; @@ -847,7 +824,6 @@ text: .text%__1cKciTypeFlowQadd_to_work_list6Mpn0AFBlock__v_; text: .text%__1cKciTypeFlowOwork_list_next6M_pn0AFBlock__; text: .text%__1cKciTypeFlowKflow_block6Mpn0AFBlock_pn0ALStateVector_pn0AGJsrSet__v_; text: .text%__1cWConstantPoolCacheEntryKset_method6MnJBytecodesECode_nMmethodHandle_i_v_; -text: .text%__1cFframeRoops_code_blob_do6MpnKOopClosure_pknLRegisterMap__v_; text: .text%__1cLOptoRuntimeSuncommon_trap_Type6F_pknITypeFunc__; text: .text%__1cIHaltNode2t6MpnENode_2_v_; text: .text%__1cLPCTableNodeLbottom_type6kM_pknEType__; @@ -887,12 +863,10 @@ text: .text%__1cRindIndexScaleOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cOGenerateOopMapFppush6MpnNCellTypeState__v_; text: .text%__1cIConLNodeGOpcode6kM_i_; text: .text%__1cQSystemDictionarybOfind_constrained_instance_or_array_klass6FnMsymbolHandle_nGHandle_pnGThread__pnMklassOopDesc__; -text: .text%__1cHTypeIntFwiden6kMpknEType__3_; text: .text%__1cNCallGenerator2t6MpnIciMethod__v_; text: .text%__1cIGraphKit2t6M_v_; text: .text%__1cHMulNodeEhash6kM_I_; text: .text%__1cFStateM_sub_Op_ConP6MpknENode__v_; -text: .text%__1cIciSymbol2t6MnMsymbolHandle__v_; text: .text%__1cIAddLNodeGOpcode6kM_i_; text: .text%__1cIGraphKitNset_map_clone6MpnNSafePointNode__v_; text: .text%__1cIGraphKitOreplace_in_map6MpnENode_2_v_; @@ -917,7 +891,6 @@ text: .text%__1cIAddINodeJideal_reg6kM_I_: classes.o; text: .text%__1cOPhaseIdealLoopIsink_use6MpnENode_2_v_; text: .text%__1cKMemoryPoolYrecord_peak_memory_usage6M_v_; text: .text%__1cNinstanceKlassKlink_class6MpnGThread__v_; -text: .text%__1cTStackWalkCompPolicyRcompilation_level6MnMmethodHandle_i_i_; text: .text%__1cKMemBarNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cNinstanceKlassPinitialize_impl6FnTinstanceKlassHandle_pnGThread__v_; text: .text%__1cTconstantPoolOopDescbBbasic_type_for_signature_at6Mi_nJBasicType__; @@ -935,8 +908,6 @@ text: .text%__1cISubINodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cKReturnNodeKmatch_edge6kMI_I_; text: .text%__1cKReturnNodeGOpcode6kM_i_; text: .text%__1cKHandleAreaHoops_do6MpnKOopClosure__v_; -text: .text%__1cNchunk_oops_do6FpnKOopClosure_pnFChunk_pc_I_: handles.o; -text: .text%__1cGThreadHoops_do6MpnKOopClosure__v_; text: .text%__1cKstorePNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cLStringTableGintern6FpnNsymbolOopDesc_pnGThread__pnHoopDesc__; text: .text%__1cNsymbolOopDescKas_unicode6kMri_pH_; @@ -964,7 +935,6 @@ text: .text%__1cPmethodDataKlassToop_adjust_pointers6MpnHoopDesc__i_; text: .text%__1cPmethodDataKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cRMachNullCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cICodeHeapLheader_size6F_I_; -text: .text%__1cKJavaThreadHoops_do6MpnKOopClosure__v_; text: .text%__1cJTypeTupleKmake_range6FpnLciSignature__pk0_; text: .text%__1cJStoreNodeSIdeal_masked_input6MpnIPhaseGVN_I_pnENode__; text: .text%__1cIAddINodeIadd_ring6kMpknEType_3_3_; @@ -1003,7 +973,6 @@ text: .text%__1cQCallLeafNoFPNodeGOpcode6kM_i_; text: .text%__1cIciMethodTcall_profile_at_bci6Mi_nNciCallProfile__; text: .text%__1cRInterpretedRFrame2t6MnFframe_pnKJavaThread_kpnGRFrame__v_; text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_nHAddress__v_; -text: .text%__1cPBytecode_invokeFindex6kM_i_; text: .text%__1cFParseHdo_call6M_v_; text: .text%__1cIGraphKitWround_double_arguments6MpnIciMethod__v_; text: .text%__1cIGraphKitTround_double_result6MpnIciMethod__v_; @@ -1057,12 +1026,10 @@ text: .text%__1cLOpaque1NodeGOpcode6kM_i_; text: .text%__1cSObjectSynchronizerJslow_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; text: .text%__1cbBopt_virtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; text: .text%__1cLnaxRegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cbAjni_check_async_exceptions6FpnKJavaThread__v_: jni.o; text: .text%__1cKciTypeFlowLStateVectorStype_meet_internal6FpnGciType_3p0_3_; text: .text%__1cJFieldTypeSskip_optional_size6FpnNsymbolOopDesc_pi_v_; text: .text%__1cQjmpCon_shortNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cSobjArrayKlassKlassIoop_size6kMpnHoopDesc__i_: objArrayKlassKlass.o; -text: .text%__1cIGraphKitTset_all_memory_call6MpnENode__v_; text: .text%__1cJloadSNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKjmpDirNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIBoolNodeDcmp6kMrknENode__I_; @@ -1090,7 +1057,6 @@ text: .text%__1cXPhaseAggressiveCoalesceYinsert_copy_with_overlap6MpnFBlock_pnEN text: .text%__1cJAssemblerKemit_arith6MiipnMRegisterImpl_i_v_; text: .text%__1cFStateN_sub_Op_LoadP6MpknENode__v_; text: .text%__1cTconstantPoolOopDescbDresolve_string_constants_impl6FnSconstantPoolHandle_pnGThread__v_; -text: .text%__1cNCompileBrokerOcompile_method6FnMmethodHandle_i1ipkcpnGThread__pnHnmethod__; text: .text%__1cJloadINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cFArenaRdestruct_contents6M_v_; text: .text%__1cFStateM_sub_Op_CmpI6MpknENode__v_; @@ -1098,7 +1064,6 @@ text: .text%__1cIAddPNodeJideal_reg6kM_I_: classes.o; text: .text%__1cJAssemblerDjcc6Mn0AJCondition_rnFLabel_nJrelocInfoJrelocType__v_; text: .text%__1cHi2sNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cOGenerateOopMapJdo_method6Miiii_v_; -text: .text%__1cLSymbolTableFprobe6Fpkci_pnNsymbolOopDesc__; text: .text%__1cNdecI_eRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cIciObjectFklass6M_pnHciKlass__; text: .text%__1cQPSGenerationPoolQget_memory_usage6M_nLMemoryUsage__; @@ -1106,7 +1071,6 @@ text: .text%__1cLRShiftLNodeGOpcode6kM_i_; text: .text%__1cKMemBarNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; text: .text%__1cMURShiftLNodeGOpcode6kM_i_; text: .text%__1cIMulINodeGOpcode6kM_i_; -text: .text%__1cPBytecode_invokeJsignature6kM_pnNsymbolOopDesc__; text: .text%__1cIConDNodeGOpcode6kM_i_; text: .text%__1cNSignatureInfoGdo_int6M_v_: bytecode.o; text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__; @@ -1138,13 +1102,11 @@ text: .text%__1cPStatSamplerTaskEtask6M_v_: statSampler.o; text: .text%__1cMPeriodicTaskMtime_to_wait6F_I_: thread.o; text: .text%jni_GetByteArrayRegion: jni.o; text: .text%__1cQPlaceholderTableKfind_entry6MiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; -text: .text%__1cKBufferBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; text: .text%__1cKstorePNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cFStateP_sub_Op_LShiftI6MpknENode__v_; text: .text%jni_GetArrayLength: jni.o; text: .text%__1cICodeHeapIcapacity6kM_I_; text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__; -text: .text%__1cKMemoryPoolImax_size6kM_I_: memoryPool.o; text: .text%__1cMCodeHeapPoolNused_in_bytes6M_I_: memoryPool.o; text: .text%__1cIPipelinePoperand_latency6kMIpk0_I_; text: .text%__1cIMachOperEtype6kM_pknEType__; @@ -1221,19 +1183,16 @@ text: .text%__1cPJavaCallWrapper2t6MnMmethodHandle_nGHandle_pnJJavaValue_pnGThre text: .text%__1cCosUos_exception_wrapper6FpFpnJJavaValue_pnMmethodHandle_pnRJavaCallArguments_pnGThread__v2468_v_; text: .text%__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_; text: .text%__1cRJavaCallArgumentsKparameters6M_pi_; -text: .text%__1cRruntime_type_from6FpnJJavaValue__nJBasicType__: javaCalls.o; text: .text%__1cTAbstractInterpreterbFsize_top_interpreter_activation6FpnNmethodOopDesc__i_; text: .text%__1cJMultiNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cPJavaCallWrapper2T6M_v_; text: .text%__1cITypeFuncFxdual6kM_pknEType__; -text: .text%__1cKInlineTree2t6MpnHCompile_pk0pnIciMethod_pnIJVMState_if_v_; text: .text%__1cMLinkResolverXresolve_klass_no_update6FrnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; text: .text%__1cHciField2t6MpnPciInstanceKlass_i_v_; text: .text%__1cTconstantPoolOopDescbCklass_ref_at_if_loaded_check6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; text: .text%__1cNloadKlassNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cOGenerateOopMapCpp6MpnNCellTypeState_2_v_; text: .text%__1cSObjectSynchronizerXidentity_hash_value_for6FnGHandle__i_; -text: .text%__1cQjava_lang_StringGlength6FpnHoopDesc__i_; text: .text%__1cHoopDescSslow_identity_hash6M_i_; text: .text%__1cIMulINodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cGciType2t6MnLKlassHandle__v_; @@ -1242,8 +1201,6 @@ text: .text%__1cLRShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cKInlineTreeYcompute_callee_frequency6kMi_f_; text: .text%__1cKInlineTreebCbuild_inline_tree_for_callee6MpnIciMethod_pnIJVMState_i_p0_; text: .text%__1cIciMethodbBinterpreter_call_site_count6Mi_i_; -text: .text%__1cHnmethodHoops_do6MpnKOopClosure__v_; -text: .text%__1cJGC_lockerNlock_critical6FpnKJavaThread__v_: jni.o; text: .text%__1cJAssemblerElock6M_v_; text: .text%__1cFKlassTarray_klass_or_null6Mi_pnMklassOopDesc__; text: .text%__1cRandI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; @@ -1265,12 +1222,10 @@ text: .text%__1cSInterpreterRuntimeMmonitorenter6FpnKJavaThread_pnPBasicObjectLo text: .text%__1cPciInstanceKlass2t6MnLKlassHandle__v_; text: .text%jni_GetPrimitiveArrayCritical: jni.o; text: .text%jni_ReleasePrimitiveArrayCritical: jni.o; -text: .text%__1cWConstantPoolCacheEntryPbytecode_number6FnJBytecodesECode__i_: cpCacheOop.o; text: .text%__1cOMethodLivenessKBasicBlockIload_two6Mi_v_; text: .text%__1cMCreateExNodeJideal_reg6kM_I_: classes.o; text: .text%__1cFArena2t6M_v_; text: .text%__1cHMulNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cLsymbolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cMCreateExNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cSInterpreterRuntimeLmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; text: .text%__1cIJVMState2t6Mi_v_; @@ -1284,9 +1239,7 @@ text: .text%__1cEDict2T6M_v_; text: .text%__1cNCatchProjNodeDcmp6kMrknENode__I_; text: .text%__1cSCountedLoopEndNodeKstride_con6kM_i_; text: .text%__1cRmethodDataOopDescKmileage_of6FpnNmethodOopDesc__i_; -text: .text%__1cQconstMethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cHCompileXin_preserve_stack_slots6M_I_; -text: .text%__1cLmethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cKTypeRawPtrFxmeet6kMpknEType__3_; text: .text%__1cTJvmtiEventCollectorYunset_jvmti_thread_state6M_v_; text: .text%__1cbGJvmtiVMObjectAllocEventCollector2T6M_v_; @@ -1298,7 +1251,6 @@ text: .text%__1cFStateM_sub_Op_CmpU6MpknENode__v_; text: .text%__1cSPSKeepAliveClosureGdo_oop6MppnHoopDesc__v_: psScavenge.o; text: .text%__1cFTypeDEmake6Fd_pk0_; text: .text%jni_IsSameObject: jni.o; -text: .text%__1cRCompilationPolicybIreset_counter_for_invocation_event6MnMmethodHandle__v_; text: .text%__1cKMemoryPoolHoops_do6MpnKOopClosure__v_; text: .text%__1cNstoreImmBNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cJloadPNodeIpipeline6kM_pknIPipeline__; @@ -1351,7 +1303,6 @@ text: .text%__1cNstoreImmBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cOGenerateOopMapIdo_field6Miiii_v_; text: .text%__1cOGenerateOopMapRsigchar_to_effect6McipnNCellTypeState__2_; text: .text%__1cJAssemblerFtestl6MpnMRegisterImpl_2_v_; -text: .text%__1cIGraphKitZset_results_for_java_call6MpnMCallJavaNode__pnENode__; text: .text%JVM_GetMethodIxModifiers; text: .text%__1cNSCMemProjNodeGOpcode6kM_i_; text: .text%__1cJleaP8NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -1363,8 +1314,6 @@ text: .text%__1cFStateM_sub_Op_RegL6MpknENode__v_; text: .text%__1cRMachNullCheckNodeLout_RegMask6kM_rknHRegMask__: machnode.o; text: .text%__1cRshrI_eReg_immNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cScompP_mem_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFciEnvbAget_constant_by_index_impl6MpnPciInstanceKlass_i_nKciConstant__; -text: .text%__1cFciEnvVget_constant_by_index6MpnPciInstanceKlass_i_nKciConstant__; text: .text%__1cLLShiftLNodeGOpcode6kM_i_; text: .text%__1cTciConstantPoolCacheGinsert6Mipv_v_; text: .text%__1cSobjArrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; @@ -1376,7 +1325,6 @@ text: .text%__1cUreloc_java_to_interp6F_I_; text: .text%__1cTsize_java_to_interp6F_I_; text: .text%__1cKstoreINodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cScompU_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cIGraphKitTcreate_and_xform_if6MpnENode_2ff_pnGIfNode__: graphKit.o; text: .text%__1cSCallLeafDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cQComputeCallStackHdo_void6M_v_: generateOopMap.o; text: .text%__1cHciField2t6MpnPfieldDescriptor__v_; @@ -1401,11 +1349,9 @@ text: .text%__1cFParseQarray_addressing6MnJBasicType_ippknEType__pnENode__; text: .text%__1cHCompileSregister_intrinsic6MpnNCallGenerator__v_; text: .text%__1cMeADXRegLOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cRcmpFastUnlockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cXcopy_u2_with_conversion6FpH0i_v_: classFileParser.o; text: .text%__1cPClassFileParserYparse_checked_exceptions6MpHInSconstantPoolHandle_pnGThread__1_; text: .text%__1cMLinkResolverbCresolve_special_call_or_null6FnLKlassHandle_nMsymbolHandle_21_nMmethodHandle__; text: .text%__1cPciInstanceKlassLfind_method6MpnIciSymbol_2_pnIciMethod__; -text: .text%__1cNCallGeneratorPfor_direct_call6FpnIciMethod__p0_; text: .text%__1cTDirectCallGeneratorIgenerate6MpnIJVMState__2_; text: .text%__1cMWarmCallInfoLalways_cold6F_p0_; text: .text%__1cFciEnvRfind_system_klass6MpnIciSymbol__pnHciKlass__; @@ -1444,10 +1390,7 @@ text: .text%__1cNloadKlassNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cIGraphKitPpush_pair_local6Mi_v_: parse2.o; text: .text%__1cNMemoryServiceXtrack_memory_pool_usage6FpnKMemoryPool__v_; text: .text%__1cMLinkResolverUresolve_invokestatic6FrnICallInfo_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cKklassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cXcmpL_reg_flags_LTGENodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNinstanceKlassScopy_static_fields6MpnSPSPromotionManager__v_; -text: .text%__1cSinstanceKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cKoopFactoryYnew_permanent_shortArray6FipnGThread__pnQtypeArrayOopDesc__; text: .text%__1cFStateR_sub_Op_LoadRange6MpknENode__v_; text: .text%__1cOcompU_eRegNodeIpipeline6kM_pknIPipeline__; @@ -1466,8 +1409,6 @@ text: .text%__1cIGraphKitTuse_exception_state6MpnNSafePointNode__pnENode__; text: .text%__1cKstoreINodeFreloc6kM_i_; text: .text%__1cRCardTableModRefBSPdirty_MemRegion6MnJMemRegion__v_; text: .text%__1cPcheckCastPPNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cTStackWalkCompPolicyYmethod_back_branch_event6MnMmethodHandle_iipnGThread__v_; -text: .text%__1cRCompilationPolicybJreset_counter_for_back_branch_event6MnMmethodHandle__v_; text: .text%__1cKciTypeFlowHdo_flow6M_v_; text: .text%__1cKciTypeFlowKmap_blocks6M_v_; text: .text%__1cKciTypeFlowKflow_types6M_v_; @@ -1509,14 +1450,12 @@ text: .text%__1cJrelocInfoKset_format6Mi_v_; text: .text%__1cPfieldDescriptorRint_initial_value6kM_i_; text: .text%__1cJTimeStampSticks_since_update6kM_x_; text: .text%__1cISubLNodeGOpcode6kM_i_; -text: .text%__1cRconstantPoolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cICodeBlobMset_oop_maps6MpnJOopMapSet__v_; text: .text%__1cJCodeCacheIallocate6Fi_pnICodeBlob__; text: .text%__1cQVMOperationQdDueueSqueue_remove_front6Mi_pnMVM_Operation__; text: .text%__1cMorI_eRegNodeQuse_cisc_RegMask6M_v_; text: .text%__1cScompI_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cVAdaptivePaddedAverageGsample6Mf_v_; -text: .text%__1cNPrefetchQdDueueFclear6M_v_: psPromotionManager.o; text: .text%__1cSPSPromotionManagerFreset6M_v_; text: .text%__1cSPSPromotionManagerKflush_labs6M_v_; text: .text%__1cJloadSNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -1608,10 +1547,8 @@ text: .text%__1cKDictionaryJnew_entry6MIpnMklassOopDesc_pnHoopDesc__pnPDictionar text: .text%__1cIAndINodeKadd_opcode6kM_i_: classes.o; text: .text%__1cIAndINodeKmul_opcode6kM_i_: classes.o; text: .text%__1cRandI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRshrI_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJLoadSNodeJideal_reg6kM_I_: classes.o; text: .text%__1cLProfileDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_: ciMethodData.o; -text: .text%__1cRaddI_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cOPhaseIdealLoopMdominated_by6MpnENode_2_v_; text: .text%__1cPRoundDoubleNodeGOpcode6kM_i_; text: .text%__1cRsarI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; @@ -1619,7 +1556,6 @@ text: .text%__1cJAssemblerEandl6MpnMRegisterImpl_i_v_; text: .text%__1cLklassVtableQfill_in_mirandas6Mri_v_; text: .text%__1cCosXthread_local_storage_at6Fi_pv_; text: .text%__1cSThreadLocalStoragePget_thread_slow6F_pnGThread__; -text: .text%__1cQinstanceRefKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cLregFPR1OperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cNstoreImmBNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKstoreINodeOmemory_operand6kM_pknIMachOper__; @@ -1640,8 +1576,6 @@ text: .text%__1cPClassFileStream2t6MpCipc_v_; text: .text%__1cNinstanceKlassSprocess_interfaces6MpnGThread__v_; text: .text%__1cNinstanceKlassQinit_implementor6M_v_; text: .text%__1cNinstanceKlassbBdo_local_static_fields_impl6FnTinstanceKlassHandle_pFpnPfieldDescriptor_pnGThread__v5_v_; -text: .text%__1cSinstanceKlassKlassXallocate_instance_klass6MiiiinNReferenceType_pnGThread__pnMklassOopDesc__; -text: .text%__1cKoopFactoryRnew_instanceKlass6FiiiinNReferenceType_pnGThread__pnMklassOopDesc__; text: .text%__1cLklassVtableQget_num_mirandas6FpnMklassOopDesc_pnPobjArrayOopDesc_4_i_; text: .text%__1cLklassItableZsetup_itable_offset_table6FnTinstanceKlassHandle__v_; text: .text%__1cIUniverseTflush_dependents_on6FnTinstanceKlassHandle__v_; @@ -1649,7 +1583,6 @@ text: .text%__1cJCodeCachebKnumber_of_nmethods_with_dependencies6F_i_; text: .text%__1cPClassFileParserbBparse_constant_pool_entries6MnSconstantPoolHandle_ipnGThread__v_; text: .text%__1cQSystemDictionaryQadd_to_hierarchy6FnTinstanceKlassHandle_pnGThread__v_; text: .text%__1cNinstanceKlassWdo_local_static_fields6MpFpnPfieldDescriptor_pnGThread__v4_v_; -text: .text%__1cPClassFileParserUcompute_oop_map_size6MnTinstanceKlassHandle_ii_i_; text: .text%__1cPClassFileParserVset_precomputed_flags6MnTinstanceKlassHandle__v_; text: .text%__1cPClassFileParserTparse_constant_pool6MpnGThread__nSconstantPoolHandle__; text: .text%__1cPClassFileParserbDcompute_transitive_interfaces6MnTinstanceKlassHandle_nOobjArrayHandle_pnGThread__2_; @@ -1664,8 +1597,6 @@ text: .text%__1cNinstanceKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__p text: .text%__1cSThreadProfilerMark2T6M_v_; text: .text%__1cJEventMark2t6MpkcE_v_: classLoader.o; text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_; -text: .text%__1cFVTuneOend_class_load6F_v_; -text: .text%__1cFVTuneQstart_class_load6F_v_; text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__; text: .text%__1cQSystemDictionaryRfind_shared_class6FnMsymbolHandle__pnMklassOopDesc__; text: .text%__1cQSystemDictionaryRload_shared_class6FnMsymbolHandle_nGHandle_pnGThread__nTinstanceKlassHandle__; @@ -1704,7 +1635,6 @@ text: .text%__1cNmulL_eRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cYciExceptionHandlerStreamPcount_remaining6M_i_; text: .text%__1cJLoadLNodeJideal_reg6kM_I_: classes.o; text: .text%__1cPshrI_eReg_1NodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cWconstantPoolCacheKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cYmulI_imm_RShift_highNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cUBytecode_tableswitchOdest_offset_at6kMi_i_; text: .text%__1cSObjectSynchronizerJnotifyall6FnGHandle_pnGThread__v_; @@ -1731,9 +1661,6 @@ text: .text%__1cIXorINodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cNSafepointBlobbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o; text: .text%__1cKManagementJtimestamp6F_x_; text: .text%__1cIPSOldGenPupdate_counters6M_v_; -text: .text%__1cNSharedRuntimebOraw_exception_handler_for_return_address6FpC_1_; -text: .text%__1cNSharedRuntimebKexception_handler_for_return_address6FpC_1_; -text: .text%__1cNaddI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cHOrINodeGadd_id6kM_pknEType__: classes.o; text: .text%signalHandler; text: .text%JVM_handle_solaris_signal; @@ -1800,7 +1727,6 @@ text: .text%__1cFKlassTarray_klass_or_null6M_pnMklassOopDesc__; text: .text%__1cNdecI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cICodeHeapLmerge_right6MpnJFreeBlock__v_; text: .text%__1cIregDOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cNsubI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cIPhaseIFGYCompute_Effective_Degree6M_v_; text: .text%__1cMPhaseChaitinISimplify6M_v_; text: .text%__1cMPhaseChaitinGSelect6M_I_; @@ -1809,7 +1735,6 @@ text: .text%__1cJScopeDescJstream_at6kMi_pnTDebugInfoReadStream__; text: .text%__1cLOptoRuntimeJstub_name6FpC_pkc_; text: .text%__1cSvframeStreamCommonZsecurity_get_caller_frame6Mi_v_; text: .text%__1cENodeHrm_prec6MI_v_; -text: .text%__1cUjni_invoke_nonstatic6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o; text: .text%__1cWflagsReg_long_EQdDNEOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cKciTypeFlowPflow_exceptions6MpnNGrowableArray4Cpn0AFBlock___pnNGrowableArray4CpnPciInstanceKlass___pn0ALStateVector__v_; text: .text%__1cXmembar_release_lockNodeIadr_type6kM_pknHTypePtr__; @@ -1820,7 +1745,6 @@ text: .text%__1cMPhaseChaitinZcompress_uf_map_for_nodes6M_v_; text: .text%__1cZPhaseConservativeCoalesceGverify6M_v_; text: .text%__1cHTypePtrFxmeet6kMpknEType__3_; text: .text%__1cSsafePoint_pollNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cJScopeDesc2t6MpknHnmethod_i_v_; text: .text%__1cOcompiledVFrame2t6MpknFframe_pknLRegisterMap_pnKJavaThread_pnJScopeDesc__v_; text: .text%__1cNSignatureInfoHdo_long6M_v_: bytecode.o; text: .text%__1cXvirtual_call_RelocationJfirst_oop6M_pC_; @@ -1844,7 +1768,6 @@ text: .text%__1cWflagsReg_long_LEGTOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cSThreadLocalStorageTpd_getTlsAccessMode6F_n0AQpd_tlsAccessMode__; text: .text%__1cOMacroAssemblerKget_thread6MpnMRegisterImpl__v_; text: .text%__1cLRethrowNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRcmpFastUnlockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cIGraphKitNshared_unlock6MpnENode_2_v_; text: .text%__1cNSafePointNodeLpop_monitor6M_v_; text: .text%__1cLOptoRuntimebAcomplete_monitor_exit_Type6F_pknITypeFunc__; @@ -1877,7 +1800,6 @@ text: .text%__1cNobjArrayKlassIallocate6MipnGThread__pnPobjArrayOopDesc__; text: .text%__1cMeBCXRegLOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cRsubI_eReg_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cIJumpDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; -text: .text%__1cMalloc_object6FpnH_jclass_pnGThread__pnPinstanceOopDesc__: jni.o; text: .text%__1cHOrINodeJideal_reg6kM_I_: classes.o; text: .text%__1cKTypeRawPtrEmake6FnHTypePtrDPTR__pk0_; text: .text%__1cKTypeAryPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; @@ -1900,7 +1822,6 @@ text: .text%__1cYinternal_word_RelocationLunpack_data6M_v_; text: .text%__1cMorI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%jni_NewObject: jni.o; text: .text%__1cMTailCallNodeKmatch_edge6kMI_I_; -text: .text%__1cIciMethodRinstructions_size6M_i_; text: .text%__1cKStoreFNodeGOpcode6kM_i_; text: .text%__1cFStateO_sub_Op_StoreC6MpknENode__v_; text: .text%__1cFciEnvKcompile_id6M_I_; @@ -1939,7 +1860,6 @@ text: .text%__1cXmembar_release_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__ text: .text%__1cXcmpL_reg_flags_LTGENodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cJloadBNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cMLinkResolverOresolve_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; -text: .text%__1cNincI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJloadLNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cNandL_eRegNodeQuse_cisc_RegMask6M_v_; text: .text%__1cSciExceptionHandlerLcatch_klass6M_pnPciInstanceKlass__; @@ -1958,8 +1878,6 @@ text: .text%jni_NewGlobalRef: jni.o; text: .text%__1cKPSYoungGenRcapacity_in_bytes6kM_I_; text: .text%__1cMVirtualSpaceNreserved_size6kM_I_; text: .text%__1cHNTarjanIsetdepth6MIpI_v_; -text: .text%__1cOPhaseIdealLoopPbuild_loop_late6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_; -text: .text%__1cOPhaseIdealLoopQbuild_loop_early6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_; text: .text%__1cOPhaseIdealLoopKDominators6M_v_; text: .text%__1cHNTarjanDDFS6Fp0rnJVectorSet_pnOPhaseIdealLoop_pI_i_; text: .text%__1cOPhaseIdealLoopRinit_dom_lca_tags6M_v_; @@ -1994,7 +1912,6 @@ text: .text%__1cICmpDNodeGOpcode6kM_i_; text: .text%__1cLRuntimeStubbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o; text: .text%__1cNDispatchTableJset_entry6MirnKEntryPoint__v_; text: .text%__1cNmethodOopDescVclear_native_function6M_v_; -text: .text%__1cFframeLnmethods_do6M_v_; text: .text%__1cJLoadBNodeJideal_reg6kM_I_: classes.o; text: .text%__1cSSetupItableClosureEdoit6MpnMklassOopDesc_i_v_: klassVtable.o; text: .text%__1cLeAXRegIOperKin_RegMask6kMi_pknHRegMask__; @@ -2010,7 +1927,6 @@ text: .text%jni_DeleteGlobalRef: jni.o; text: .text%__1cOPhaseIdealLoopLdo_split_if6MpnENode__v_; text: .text%__1cRsubI_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNaddI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKTypeOopPtrSmake_from_constant6FpnIciObject__pk0_; text: .text%__1cMURShiftLNodeLbottom_type6kM_pknEType__: classes.o; text: .text%jni_GetObjectArrayElement: jni.o; text: .text%__1cQSystemDictionaryRpreloaded_oops_do6FpnKOopClosure__v_; @@ -2023,7 +1939,6 @@ text: .text%__1cQVMOperationQdDueueHoops_do6MpnKOopClosure__v_; text: .text%__1cKManagementHoops_do6FpnKOopClosure__v_; text: .text%__1cSObjectSynchronizerHoops_do6FpnKOopClosure__v_; text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_; -text: .text%__1cIVMThreadHoops_do6MpnKOopClosure__v_; text: .text%__1cbGJvmtiVMObjectAllocEventCollectorXoops_do_for_all_threads6FpnKOopClosure__v_; text: .text%__1cQPlaceholderTableHoops_do6MpnKOopClosure__v_; text: .text%__1cKJNIHandlesMweak_oops_do6FpnRBoolObjectClosure_pnKOopClosure__v_; @@ -2040,7 +1955,6 @@ text: .text%__1cIAndLNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%jio_vsnprintf; text: .text%__1cLRethrowNodeEhash6kM_I_: classes.o; text: .text%__1cWCallLeafNoFPDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRsalI_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cRsalI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cJAssemblerDjmp6MnHAddress__v_; text: .text%jio_snprintf; @@ -2057,8 +1971,6 @@ text: .text%__1cRLowMemoryDetectorRdetect_low_memory6F_v_; text: .text%__1cbAPSGCAdaptivePolicyCountersbBupdate_counters_from_policy6M_v_; text: .text%__1cWThreadLocalAllocBufferQresize_all_tlabs6F_v_; text: .text%__1cUParallelScavengeHeapbFaccumulate_statistics_all_tlabs6M_v_; -text: .text%__1cPGCMemoryManagerIgc_begin6M_v_; -text: .text%__1cPGCMemoryManagerGgc_end6M_v_; text: .text%__1cNMemoryServiceStrack_memory_usage6F_v_; text: .text%__1cXTraceMemoryManagerStats2T6M_v_; text: .text%__1cQSystemDictionaryHoops_do6FpnKOopClosure__v_; @@ -2094,7 +2006,6 @@ text: .text%__1cORuntimeServiceWrecord_safepoint_begin6F_v_; text: .text%__1cSObjectSynchronizerVdeflate_idle_monitors6F_v_; text: .text%__1cJloadFNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cMCounterDecayFdecay6F_v_; -text: .text%__1cONMethodSweeperFsweep6F_v_; text: .text%__1cRInlineCacheBufferUupdate_inline_caches6F_v_; text: .text%__1cUSafepointSynchronizeDend6F_v_; text: .text%__1cORuntimeServiceUrecord_safepoint_end6F_v_; @@ -2241,7 +2152,6 @@ text: .text%__1cFStateM_sub_Op_ConL6MpknENode__v_; text: .text%__1cSmembar_acquireNodeIadr_type6kM_pknHTypePtr__; text: .text%__1cHRetNodeFreloc6kM_i_; text: .text%__1cIConFNodeGOpcode6kM_i_; -text: .text%__1cLRuntimeStubHoops_do6MpnKOopClosure__v_: codeBlob.o; text: .text%__1cJCodeCacheNalive_nmethod6FpnICodeBlob__pnHnmethod__; text: .text%__1cQLibraryIntrinsicIgenerate6MpnIJVMState__2_; text: .text%__1cOcompP_eRegNodeLout_RegMask6kM_rknHRegMask__; @@ -2249,9 +2159,7 @@ text: .text%__1cFStateM_sub_Op_CmpL6MpknENode__v_; text: .text%__1cKCompiledICSset_ic_destination6MpC_v_; text: .text%__1cLConvL2INodeJideal_reg6kM_I_: classes.o; text: .text%__1cZInterpreterMacroAssemblerNdispatch_next6MnITosState_i_v_; -text: .text%__1cPshlI_eReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cSmembar_releaseNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cNdecI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNandL_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNdecI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cJLoadDNodeGOpcode6kM_i_; @@ -2267,13 +2175,9 @@ text: .text%__1cXmembar_acquire_lockNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cRxorI_eReg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cFStateR_sub_Op_SafePoint6MpknENode__v_; text: .text%__1cMciMethodDataStrap_recompiled_at6MpnLProfileData__i_; -text: .text%__1cSsafePoint_pollNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cSsafePoint_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cSsafePoint_pollNodeFreloc6kM_i_; -text: .text%__1cKCodeBuffer2t6MpCi_v_; text: .text%__1cNandI_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRandI_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cHi2sNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cHi2sNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cFStateL_sub_Op_OrI6MpknENode__v_; text: .text%JVM_GetClassNameUTF; @@ -2311,14 +2215,12 @@ text: .text%__1cTshrL_eReg_32_63NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cLOptoRuntimebBcomplete_monitor_enter_Type6F_pknITypeFunc__; text: .text%__1cIMaxINodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cFStateQ_sub_Op_FastLock6MpknENode__v_; -text: .text%__1cPcmpFastLockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cIGraphKitLshared_lock6MpnENode__pnMFastLockNode__; text: .text%__1cQjava_lang_ThreadGthread6FpnHoopDesc__pnKJavaThread__; text: .text%__1cEUTF8Ounicode_length6Fpkc_i_; text: .text%__1cPCallRuntimeNodeGOpcode6kM_i_; text: .text%__1cFParseFBlockMadd_new_path6M_i_; text: .text%JVM_FindClassFromClass; -text: .text%__1cOmangle_name_on6FpnMoutputStream_pnNsymbolOopDesc_ii_v_: nativeLookup.o; text: .text%__1cIMulINodeGmul_id6kM_pknEType__: classes.o; text: .text%__1cPshlI_eReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cbDjava_lang_reflect_ConstructorFclazz6FpnHoopDesc__2_; @@ -2327,8 +2229,6 @@ text: .text%__1cbDjava_lang_reflect_ConstructorPparameter_types6FpnHoopDesc__2_; text: .text%__1cbDjava_lang_reflect_ConstructorEslot6FpnHoopDesc__i_; text: .text%__1cLConvI2LNodeJideal_reg6kM_I_: classes.o; text: .text%__1cKReflectionSinvoke_constructor6FpnHoopDesc_nOobjArrayHandle_pnGThread__2_; -text: .text%__1cMorI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cOmangle_name_on6FpnMoutputStream_pnNsymbolOopDesc__v_: nativeLookup.o; text: .text%__1cMtlsLoadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cYmulI_imm_RShift_highNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cFParseFBlockNstack_type_at6kMi_pknEType__; @@ -2361,12 +2261,10 @@ text: .text%__1cQjava_lang_StringXcreate_oop_from_unicode6FpHipnGThread__pnHoopD text: .text%__1cJAssemblerEmovl6MpnMRegisterImpl_i_v_; text: .text%__1cXmembar_acquire_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMMergeMemNodeIadr_type6kM_pknHTypePtr__: memnode.o; -text: .text%__1cITypeLongFwiden6kMpknEType__3_; text: .text%__1cIModINodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cQjava_lang_StringTcreate_oop_from_str6FpkcpnGThread__pnHoopDesc__; text: .text%__1cKoopFactoryNnew_charArray6FpkcpnGThread__pnQtypeArrayOopDesc__; text: .text%__1cScompP_mem_eRegNodeFreloc6kM_i_; -text: .text%__1cMadjust_check6FpnENode_11iipnMPhaseIterGVN__v_: ifnode.o; text: .text%__1cNtestU_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFStateP_sub_Op_ConvI2L6MpknENode__v_; text: .text%__1cJScopeDescGsender6kM_p0_; @@ -2443,7 +2341,6 @@ text: .text%__1cNmaxI_eRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFStateM_sub_Op_AddL6MpknENode__v_; text: .text%__1cJAssemblerEsubl6MpnMRegisterImpl_i_v_; text: .text%__1cFForteNregister_stub6FpkcpC3_v_; -text: .text%__1cFVTuneNregister_stub6FpkcpC3_v_; text: .text%__1cENodeEgetd6kM_d_; text: .text%__1cFStateM_sub_Op_AndL6MpknENode__v_; text: .text%__1cKConv2BNodeGOpcode6kM_i_; @@ -2483,16 +2380,13 @@ text: .text%__1cNCompileBrokerScollect_statistics6FpnOCompilerThread_nMelapsedTi text: .text%__1cLConvI2FNodeGOpcode6kM_i_; text: .text%__1cQComputeCallStackIdo_short6M_v_: generateOopMap.o; text: .text%__1cICodeHeapMinsert_after6MpnJFreeBlock_2_v_; -text: .text%__1cHnmFlagsFclear6M_v_; text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_; text: .text%__1cVExceptionHandlerTableHcopy_to6MpnHnmethod__v_; text: .text%__1cHnmethod2n6FIi_pv_; text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cFVTuneOcreate_nmethod6FpnHnmethod__v_; text: .text%__1cFciEnvVnum_inlined_bytecodes6kM_i_; text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_; text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_; -text: .text%__1cLOopRecorderHcopy_to6MpnICodeBlob__v_; text: .text%__1cQorI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cHCompileUremove_useless_nodes6MrnQUnique_Node_List__v_; text: .text%__1cIciMethodRbuild_method_data6MnMmethodHandle__v_; @@ -2511,7 +2405,6 @@ text: .text%__1cIPhaseCCPHanalyze6M_v_; text: .text%__1cIPhaseCCPMdo_transform6M_v_; text: .text%__1cHCompileNreturn_values6MpnIJVMState__v_; text: .text%__1cKInlineTreeWbuild_inline_tree_root6F_p0_; -text: .text%__1cbAfinal_graph_reshaping_walk6FrnKNode_Stack_pnENode_rnUFinal_Reshape_Counts__v_: compile.o; text: .text%__1cIPhaseCCPJtransform6MpnENode__2_; text: .text%__1cHCompileLFinish_Warm6M_v_; text: .text%__1cMPhaseIterGVN2t6Mp0_v_; @@ -2535,7 +2428,6 @@ text: .text%__1cXSignatureHandlerLibraryKinitialize6F_v_; text: .text%__1cXSignatureHandlerLibraryDadd6FnMmethodHandle__v_; text: .text%__1cIAddFNodeGOpcode6kM_i_; text: .text%__1cJAssemblerFffree6Mi_v_; -text: .text%__1cKExceptionsG_throw6FpnGThread_pkcinGHandle__v_; text: .text%__1cQjava_lang_StringPcreate_from_str6FpkcpnGThread__nGHandle__; text: .text%__1cOGenerateOopMapIppop_any6Mi_v_; text: .text%__1cXroundDouble_mem_regNodeLout_RegMask6kM_rknHRegMask__; @@ -2551,7 +2443,6 @@ text: .text%__1cCosLelapsedTime6F_d_; text: .text%__1cKJavaThreadZsecurity_get_caller_class6Mi_pnMklassOopDesc__; text: .text%jni_GetStringUTFChars: jni.o; text: .text%jni_ReleaseStringUTFChars; -text: .text%__1cNloadConI0NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cSInterpreterRuntimeXthrow_pending_exception6FpnKJavaThread__v_; text: .text%__1cXcmpL_reg_flags_LEGTNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cOClearArrayNodeIIdentity6MpnOPhaseTransform__pnENode__; @@ -2572,18 +2463,14 @@ text: .text%__1cFParsebLincrement_and_test_invocation_counter6Mi_v_; text: .text%__1cQsalI_eReg_CLNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cSshrL_eReg_1_31NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cJleaP8NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cXcmpL_reg_flags_LTGENodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cNcmpL_LTGENodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cFParsePmerge_exception6Mi_v_; text: .text%__1cFStateS_sub_Op_ClearArray6MpknENode__v_; text: .text%__1cMrep_stosNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMrep_stosNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cOcompI_eRegNodeIpipeline6kM_pknIPipeline__; text: .text%__1cFTypeFEmake6Ff_pk0_; text: .text%__1cKstoreLNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cSInterpreterRuntimeOmultianewarray6FpnKJavaThread_pi_v_; text: .text%__1cIDivINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cPmethodDataKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cLStrCompNodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cXJNI_ArgumentPusherVaArgHget_int6M_v_: jni.o; text: .text%__1cNtestP_regNodeIpipeline6kM_pknIPipeline__; @@ -2602,11 +2489,8 @@ text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMs text: .text%__1cFParseLdo_newarray6MnJBasicType__v_; text: .text%__1cSsafePoint_pollNodeIpipeline6kM_pknIPipeline__; text: .text%__1cKstoreLNodeFreloc6kM_i_; -text: .text%__1cGThreadLnmethods_do6M_v_; text: .text%__1cPRoundDoubleNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cCosTnative_java_library6F_pv_; -text: .text%__1cQjava_lang_StringFvalue6FpnHoopDesc__pnQtypeArrayOopDesc__; -text: .text%__1cQjava_lang_StringGoffset6FpnHoopDesc__i_; text: .text%__1cIModLNodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cScompP_eReg_immNodeIpipeline6kM_pknIPipeline__; text: .text%__1cQjava_lang_StringScreate_from_symbol6FnMsymbolHandle_pnGThread__nGHandle__; @@ -2615,13 +2499,11 @@ text: .text%__1cRmulI_eReg_immNodeQuse_cisc_RegMask6M_v_; text: .text%__1cCosYprint_jni_name_suffix_on6FpnMoutputStream_i_v_; text: .text%__1cCosYprint_jni_name_prefix_on6FpnMoutputStream_i_v_; text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_53pnGThread__v_; -text: .text%__1cVlookup_special_native6Fpc_pC_: nativeLookup.o; text: .text%__1cPciObjArrayKlassGloader6M_pnHoopDesc__: ciObjArrayKlass.o; text: .text%__1cPDictionaryEntryVadd_protection_domain6MpnHoopDesc__v_; text: .text%__1cRxorI_eReg_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_; text: .text%__1cKDictionaryVadd_protection_domain6MiInTinstanceKlassHandle_nGHandle_2pnGThread__v_; -text: .text%__1cPshrI_eReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cKarrayKlassbBcomplete_create_array_klass6FnQarrayKlassHandle_nLKlassHandle_pnGThread__v_; text: .text%__1cKarrayKlassXbase_create_array_klass6FrknKKlass_vtbl_inLKlassHandle_pnGThread__nQarrayKlassHandle__; text: .text%__1cIPerfLong2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability__v_; @@ -2642,7 +2524,6 @@ text: .text%__1cPfieldDescriptorSlong_initial_value6kM_x_; text: .text%__1cRsubI_eReg_memNodeFreloc6kM_i_; text: .text%__1cKstoreBNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cJLoadPNodeMstore_Opcode6kM_i_: classes.o; -text: .text%__1cKJavaThreadLnmethods_do6M_v_; text: .text%__1cXvirtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; text: .text%__1cNcmovI_regNodeQuse_cisc_RegMask6M_v_; text: .text%__1cZCallDynamicJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -2651,17 +2532,14 @@ text: .text%__1cOGenerateOopMapXreplace_all_CTS_matches6MnNCellTypeState_1_v_; text: .text%__1cNstoreImmINodeFreloc6kM_i_; text: .text%__1cNobjArrayKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; text: .text%__1cRsarI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cRsarI_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cWCallLeafNoFPDirectNodeFreloc6kM_i_; text: .text%__1cNobjArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlass.o; text: .text%jni_GetStringCritical: jni.o; text: .text%jni_ReleaseStringCritical: jni.o; text: .text%__1cPciObjArrayKlass2t6MnLKlassHandle__v_; -text: .text%__1cPsarI_eReg_1NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cPsarI_eReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cPconvF2D_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cPPerfDataManagerMcounter_name6Fpkc2_pc_; -text: .text%__1cRaddL_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cHCompileSrethrow_exceptions6MpnIJVMState__v_; text: .text%__1cLRethrowNodeJideal_reg6kM_I_: classes.o; text: .text%__1cURethrowExceptionNodeLout_RegMask6kM_rknHRegMask__; @@ -2682,9 +2560,7 @@ text: .text%__1cFParseTprofile_switch_case6Mi_v_; text: .text%__1cKJavaThreadLgc_epilogue6M_v_; text: .text%__1cFParseOmerge_new_path6Mi_v_; text: .text%__1cFParseSjump_switch_ranges6MpnENode_pnLSwitchRange_4i_v_; -text: .text%__1cNxorI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%jni_NewByteArray: jni.o; -text: .text%__1cNmulL_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cMstoreSSINodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKReflectionTget_parameter_types6FnMmethodHandle_ippnHoopDesc_pnGThread__nOobjArrayHandle__; text: .text%__1cNmethodOopDescbGresolved_checked_exceptions_impl6Fp0pnGThread__nOobjArrayHandle__; @@ -2698,13 +2574,11 @@ text: .text%__1cPstoreImmI16NodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cOcmpD_cc_P6NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cRandI_eReg_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cNObjectMonitorHRecycle6M_v_; -text: .text%__1cNandL_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cFBlockNset_next_call6MpnENode_rnJVectorSet_rnLBlock_Array__v_; text: .text%__1cJloadSNodeIpipeline6kM_pknIPipeline__; text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorEmove6Mii_v_; text: .text%__1cENode2t6Mp0111111_v_; text: .text%__1cFStateP_sub_Op_RShiftL6MpknENode__v_; -text: .text%__1cMloadConLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cIAddDNodeGOpcode6kM_i_; text: .text%__1cNmodL_eRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKarrayKlassTallocate_arrayArray6MiipnGThread__pnPobjArrayOopDesc__; @@ -2729,8 +2603,6 @@ text: .text%__1cPshrI_eReg_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%jni_GetFieldID: jni.o; text: .text%jni_IsAssignableFrom: jni.o; text: .text%__1cNnegI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNnegI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cSobjArrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cFParseWcheck_interpreter_type6MpnENode_pknEType_rpnNSafePointNode__2_; text: .text%__1cJAssemblerEaddl6MnHAddress_i_v_; text: .text%__1cTsarL_eReg_32_63NodeLout_RegMask6kM_rknHRegMask__; @@ -2745,9 +2617,7 @@ text: .text%__1cFStateX_sub_Op_CompareAndSwapL6MpknENode__v_; text: .text%__1cSloadL_volatileNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cNtestU_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cSloadL_volatileNodeFreloc6kM_i_; -text: .text%__1cTcompareAndSwapLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cISubLNodeGadd_id6kM_pknEType__: classes.o; -text: .text%__1cFframeVnmethods_code_blob_do6M_v_; text: .text%__1cOPhaseIdealLoopUpeeled_dom_test_elim6MpnNIdealLoopTree_rnJNode_List__v_; text: .text%__1cJAssemblerDhlt6M_v_; text: .text%__1cYcmpL_zero_flags_LEGTNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -2761,11 +2631,8 @@ text: .text%jni_SetBooleanField: jni.o; text: .text%__1cTconvD2I_reg_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFStateT_sub_Op_ThreadLocal6MpknENode__v_; text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pF_vc_v_; -text: .text%__1cMtlsLoadPNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cIciObject2t6MpnHciKlass__v_; text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorDbox6Mii_v_; -text: .text%__1cKsplit_once6FpnMPhaseIterGVN_pnENode_333_v_: cfgnode.o; -text: .text%__1cYmulI_imm_RShift_highNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cPRoundDoubleNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cKloadUBNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMURShiftLNodeJideal_reg6kM_I_: classes.o; @@ -2775,8 +2642,6 @@ text: .text%__1cPClassFileParserbBcheck_illegal_static_method6FnTinstanceKlassHa text: .text%__1cGciType2t6MpnHciKlass__v_; text: .text%__1cHciKlass2t6MpnIciSymbol_p0_v_; text: .text%__1cIciMethodRinterpreter_entry6M_pC_; -text: .text%__1cXjvm_define_class_common6FpnHJNIEnv__pkcpnI_jobject_pkWi53pnGThread__pnH_jclass__: jvm.o; -text: .text%__1cQSystemDictionaryTresolve_from_stream6FnMsymbolHandle_nGHandle_2pnPClassFileStream_pnGThread__pnMklassOopDesc__; text: .text%__1cUciInstanceKlassKlassEmake6F_p0_; text: .text%__1cLLShiftLNodeJideal_reg6kM_I_: classes.o; text: .text%__1cIciSymbolHbyte_at6Mi_i_; @@ -2785,12 +2650,10 @@ text: .text%__1cZCallDynamicJavaDirectNodeKmethod_set6Mi_v_; text: .text%__1cIModINodeJideal_reg6kM_I_: classes.o; text: .text%__1cSTailCalljmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cXMachCallDynamicJavaNodePret_addr_offset6M_i_; -text: .text%__1cNcmpL_EQdDNENodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cOGenerateOopMapOdo_monitorexit6Mi_v_; text: .text%__1cOGenerateOopMapLmonitor_pop6M_nNCellTypeState__; text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnRJavaCallArguments_pnGThread__v_; text: .text%__1cOmulIS_eRegNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSalign_to_page_size6FI_I_: heap.o; text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcinMsymbolHandle_4nGHandle_6_v_; text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcipnNsymbolOopDesc_4_v_; text: .text%__1cPciInstanceKlassYprotection_domain_handle6M_pnI_jobject__; @@ -2810,7 +2673,6 @@ text: .text%__1cJMarkSweepSFollowStackClosureHdo_void6M_v_: markSweep.o; text: .text%__1cPICStubInterfaceRcode_size_to_size6kMi_i_: icBuffer.o; text: .text%__1cPICStubInterfaceKinitialize6MpnEStub_i_v_: icBuffer.o; text: .text%__1cSleaP_eReg_immINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNcmpL_LEGTNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cFStateQ_sub_Op_URShiftL6MpknENode__v_; text: .text%__1cIModLNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cJAssemblerEcmpl6MpnMRegisterImpl_i_v_; @@ -2844,10 +2706,8 @@ text: .text%__1cIMulINodeKmul_opcode6kM_i_: classes.o; text: .text%__1cNsubL_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cVCallRuntimeDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cODeoptimizationVtrap_state_has_reason6Fii_i_; -text: .text%__1cNaddL_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJloadBNodeIpipeline6kM_pknIPipeline__; text: .text%__1cRmulI_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cS__ieee754_rem_pio26Fdpd_i_: sharedRuntimeTrig.o; text: .text%__1cSThreadLocalStorageNpd_set_thread6FpnGThread__v_; text: .text%__1cSThreadLocalStorageKset_thread6FpnGThread__v_; text: .text%__1cSThreadLocalStoragebBget_thread_via_cache_slowly6FIi_pnGThread__; @@ -2870,7 +2730,6 @@ text: .text%__1cICmpDNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cIDivDNodeGOpcode6kM_i_; text: .text%__1cHCompileQgrow_alias_types6M_v_; text: .text%JVM_GetClassCPTypes; -text: .text%__1cUverify_byte_codes_fn6F_pv_: verifier.o; text: .text%JVM_GetClassMethodsCount; text: .text%JVM_GetClassCPEntriesCount; text: .text%JVM_GetClassFieldsCount; @@ -2878,7 +2737,6 @@ text: .text%__1cKstoreBNodeFreloc6kM_i_; text: .text%__1cPconvI2F_SSFNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cQjava_lang_ThreadKset_thread6FpnHoopDesc_pnKJavaThread__v_; text: .text%__1cMdecI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPconvI2L_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cOMacroAssemblerKverify_FPU6Mipkc_v_; text: .text%__1cJLoadFNodeJideal_reg6kM_I_: classes.o; text: .text%__1cMloadConDNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -2920,7 +2778,6 @@ text: .text%__1cRandL_eReg_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cMloadConFNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFStateM_sub_Op_MinI6MpknENode__v_; text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_5pnGThread__v_; -text: .text%__1cNminI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cFMutex2T6M_v_; text: .text%lwp_mutex_destroy: os_solaris.o; text: .text%__1cHMonitor2T6M_v_; @@ -2942,7 +2799,6 @@ text: .text%__1cXroundDouble_mem_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__ text: .text%__1cJCodeCacheFfirst6F_pnICodeBlob__; text: .text%__1cNaddP_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cICodeHeapLfirst_block6kM_pnJHeapBlock__; -text: .text%__1cXcmpL_reg_flags_LEGTNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cPciObjectFactoryPinsert_non_perm6Mrpn0ANNonPermObject_pnHoopDesc_pnIciObject__v_; text: .text%__1cKloadUBNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cISubDNodeGOpcode6kM_i_; @@ -2951,7 +2807,6 @@ text: .text%__1cSObjectSynchronizerGnotify6FnGHandle_pnGThread__v_; text: .text%__1cOcmpD_cc_P6NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cLConvD2FNodeGOpcode6kM_i_; text: .text%__1cTmembar_volatileNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSshrL_eReg_1_31NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%JVM_MonitorNotify; text: .text%__1cFParseNdo_instanceof6M_v_; text: .text%__1cJAssemblerEshrl6MpnMRegisterImpl_i_v_; @@ -2967,7 +2822,6 @@ text: .text%__1cYjava_lang_reflect_MethodWset_annotation_default6FpnHoopDesc_2_v text: .text%__1cZCallDynamicJavaDirectNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cIMulFNodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cFStateN_sub_Op_LoadF6MpknENode__v_; -text: .text%__1cNandI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cWPredictedCallGeneratorIgenerate6MpnIJVMState__2_; text: .text%__1cYjava_lang_reflect_MethodGcreate6FpnGThread__nGHandle__; text: .text%__1cYjava_lang_reflect_MethodJset_clazz6FpnHoopDesc_2_v_; @@ -2985,7 +2839,6 @@ text: .text%__1cINegDNodeGOpcode6kM_i_; text: .text%__1cNCallGeneratorRfor_uncommon_trap6FpnIciMethod_nODeoptimizationLDeoptReason_n0CLDeoptAction__p0_; text: .text%__1cNmodI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cFStateP_sub_Op_LShiftL6MpknENode__v_; -text: .text%__1cNmodI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cLConvI2DNodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cIGraphKitJpush_pair6MpnENode__v_: callGenerator.o; text: .text%__1cZUncommonTrapCallGeneratorIgenerate6MpnIJVMState__2_; @@ -2995,9 +2848,7 @@ text: .text%__1cJAssemblerFfld_d6MnHAddress__v_; text: .text%__1cJloadFNodeFreloc6kM_i_; text: .text%__1cMincI_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cVCallRuntimeDirectNodeKmethod_set6Mi_v_; -text: .text%__1cRaddI_eReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cOGenerateOopMapKinit_state6M_v_; -text: .text%__1cNSafepointBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; text: .text%__1cOGenerateOopMapTmark_reachable_code6M_v_; text: .text%__1cOGenerateOopMapPinitialize_vars6M_v_; text: .text%__1cNinstanceKlassSregister_finalizer6FpnPinstanceOopDesc_pnGThread__2_; @@ -3013,7 +2864,6 @@ text: .text%__1cMmulD_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cQjava_lang_SystemSin_offset_in_bytes6F_i_; text: .text%__1cJAssemblerEaddl6MpnMRegisterImpl_nHAddress__v_; text: .text%__1cQjava_lang_SystemTout_offset_in_bytes6F_i_; -text: .text%__1cIBytecodeIset_code6MnJBytecodesECode__v_; text: .text%__1cNmulI_eRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cIRetTableRcompute_ret_table6MnMmethodHandle__v_; text: .text%__1cOGenerateOopMapLcompute_map6MpnGThread__v_; @@ -3032,7 +2882,6 @@ text: .text%__1cQjava_lang_ThreadMset_priority6FpnHoopDesc_nOThreadPriority__v_; text: .text%__1cIMulDNodeImul_ring6kMpknEType_3_3_; text: .text%__1cOmulF24_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cOGenerateOopMapPdo_monitorenter6Mi_v_; -text: .text%__1cRjni_invoke_static6FpnHJNIEnv__pnJJavaValue_pnI_jobject_nLJNICallType_pnK_jmethodID_pnSJNI_ArgumentPusher_pnGThread__v_: jni.o; text: .text%__1cOjmpLoopEndNodeJlabel_set6MrnFLabel_I_v_; text: .text%__1cOjmpLoopEndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cOGenerateOopMapMmonitor_push6MnNCellTypeState__v_; @@ -3054,7 +2903,6 @@ text: .text%__1cNinstanceKlassYremove_dependent_nmethod6MpnHnmethod__v_; text: .text%__1cNsubI_eRegNodeIpipeline6kM_pknIPipeline__; text: .text%__1cTcmovII_reg_LEGTNodeQuse_cisc_RegMask6M_v_; text: .text%__1cJAssemblerFfld_s6MnHAddress__v_; -text: .text%__1cVscale_to_lwp_priority6Fiii_i_: os_solaris.o; text: .text%__1cNxorI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cJMemRegionMintersection6kMk0_0_; text: .text%__1cMincI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -3098,7 +2946,6 @@ text: .text%jni_NewObjectArray: jni.o; text: .text%__1cKCompiledICKcached_oop6kM_pnHoopDesc__; text: .text%__1cFStateM_sub_Op_MulI6MpknENode__v_; text: .text%__1cCosPpd_start_thread6FpnGThread__v_; -text: .text%__1cNsubL_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cPRoundDoubleNodeJideal_reg6kM_I_: classes.o; text: .text%__1cXjava_lang_reflect_FieldIset_slot6FpnHoopDesc_i_v_; text: .text%__1cKReflectionInew_type6FnMsymbolHandle_nLKlassHandle_pnGThread__nGHandle__; @@ -3144,9 +2991,7 @@ text: .text%jni_GetFloatArrayRegion: jni.o; text: .text%__1cKJavaThreadDrun6M_v_; text: .text%__1cKJavaThreadRthread_main_inner6M_v_; text: .text%__1cKReflectionbFbasic_type_mirror_to_basic_type6FpnHoopDesc_pnGThread__nJBasicType__; -text: .text%__1cM__kernel_cos6Fdd_d_: sharedRuntimeTrig.o; text: .text%__1cJAssemblerFcmovl6Mn0AJCondition_pnMRegisterImpl_3_v_; -text: .text%__1cM__kernel_sin6Fddi_d_: sharedRuntimeTrig.o; text: .text%__1cSleaP_eReg_immINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cOPhaseIdealLoopJclone_iff6MpnHPhiNode_pnNIdealLoopTree__pnIBoolNode__; text: .text%__1cGThreadFstart6Fp0_v_; @@ -3154,7 +2999,6 @@ text: .text%__1cNSharedRuntimeEdsin6Fd_d_; text: .text%__1cNSharedRuntimeEdcos6Fd_d_; text: .text%jni_CallStaticVoidMethod: jni.o; text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnPPerfLongCounter__; -text: .text%__1cSshlL_eReg_1_31NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNsymbolOopDescWas_klass_external_name6kM_pkc_; text: .text%__1cNdecI_eRegNodeIpipeline6kM_pknIPipeline__; text: .text%__1cTconvF2I_reg_regNodeLout_RegMask6kM_rknHRegMask__; @@ -3165,7 +3009,6 @@ text: .text%JVM_IsArrayClass; text: .text%__1cHTypePtrFxdual6kM_pknEType__; text: .text%__1cSMachBreakpointNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cQshrI_eReg_CLNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cRmulI_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%JVM_GetClassName; text: .text%__1cSsarL_eReg_1_31NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cLStringTableGintern6FpkcpnGThread__pnHoopDesc__; @@ -3184,7 +3027,6 @@ text: .text%__1cJArrayDataKcell_count6M_i_: ciMethodData.o; text: .text%JVM_Open; text: .text%__1cQjava_lang_ThreadIpriority6FpnHoopDesc__nOThreadPriority__; text: .text%__1cQjava_lang_ThreadJstackSize6FpnHoopDesc__x_; -text: .text%__1cYcmpL_zero_flags_EQdDNENodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNObjectMonitorJnotifyAll6MpnGThread__v_; text: .text%__1cNPerfByteArray2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_i_v_; text: .text%JVM_StartThread; @@ -3192,9 +3034,7 @@ text: .text%__1cQComputeCallStackIdo_array6Mii_v_: generateOopMap.o; text: .text%__1cMthread_entry6FpnKJavaThread_pnGThread__v_: jvm.o; text: .text%__1cOMacroAssemblerKnull_check6MpnMRegisterImpl_i_v_; text: .text%__1cGICStubLdestination6kM_pC_; -text: .text%__1cYcmpL_zero_flags_LEGTNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cLConvD2INodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRxorI_eReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cRInlineCacheBufferVic_buffer_entry_point6FpC_1_; text: .text%__1cKJavaThreadHprepare6MpnI_jobject_nOThreadPriority__v_; text: .text%jni_GetStaticObjectField: jni.o; @@ -3250,13 +3090,11 @@ text: .text%__1cFStateO_sub_Op_StoreF6MpknENode__v_; text: .text%__1cQaddD_reg_immNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cTsarL_eReg_32_63NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%jni_CallObjectMethod: jni.o; -text: .text%__1cNaddP_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNaddP_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cLOptoRuntimeMrethrow_Type6F_pknITypeFunc__; text: .text%__1cMstoreSSPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cRandI_eReg_memNodeFreloc6kM_i_; text: .text%__1cRCardTableModRefBSPclear_MemRegion6MnJMemRegion__v_; -text: .text%__1cHThreadsHoops_do6FpnKOopClosure__v_; text: .text%__1cRInlineCacheBufferLnew_ic_stub6F_pnGICStub__; text: .text%__1cRInlineCacheBufferWcreate_transition_stub6FpnKCompiledIC_pnHoopDesc_pC_v_; text: .text%__1cRInlineCacheBufferXassemble_ic_buffer_code6FpCpnHoopDesc_1_v_; @@ -3276,7 +3114,6 @@ text: .text%__1cMsubD_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%JVM_MonitorNotifyAll; text: .text%__1cLConvI2FNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cKConv2BNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNmaxI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cSvframeArrayElementDbci6kM_i_; text: .text%__1cIDivDNodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cMloadConFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -3289,15 +3126,12 @@ text: .text%__1cXJNI_ArgumentPusherVaArgJget_float6M_v_: jni.o; text: .text%__1cTcmovII_reg_LTGENodeQuse_cisc_RegMask6M_v_; text: .text%__1cSPerfStringConstant2t6MnJCounterNS_pkc3_v_; text: .text%__1cIMulDNodeGmul_id6kM_pknEType__: classes.o; -text: .text%__1cQorI_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cPPerfDataManagerWcreate_string_constant6FnJCounterNS_pkc3pnGThread__pnSPerfStringConstant__; text: .text%__1cOMacroAssemblerFleave6M_v_; text: .text%JVM_GetInheritedAccessControlContext; text: .text%JVM_NativePath; text: .text%__1cQjava_lang_ThreadbGinherited_access_control_context6FpnHoopDesc__2_; text: .text%__1cVLoaderConstraintTableJnew_entry6MIpnNsymbolOopDesc_pnMklassOopDesc_ii_pnVLoaderConstraintEntry__; -text: .text%__1cVloadConL_low_onlyNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cQsalI_eReg_CLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cFStateT_sub_Op_CallRuntime6MpknENode__v_; text: .text%__1cCosXnon_memory_address_word6F_pc_; text: .text%__1cQsalI_eReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -3307,7 +3141,6 @@ text: .text%__1cNandI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cVCallRuntimeDirectNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cOmulF24_regNodeQuse_cisc_RegMask6M_v_; text: .text%__1cRandL_eReg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTshrL_eReg_32_63NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cOaddF24_regNodeQuse_cisc_RegMask6M_v_; text: .text%__1cNcmovP_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cKCompiledICOset_cached_oop6MpnHoopDesc__v_; @@ -3319,7 +3152,6 @@ text: .text%__1cKCompiledICMstub_address6kM_pC_; text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MpnMRegisterImpl_i_v_; text: .text%__1cKstoreFNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cSaddD_reg_roundNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cMdecI_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cPciInstanceKlassLjava_mirror6M_pnKciInstance__; text: .text%__1cISubDNodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cKReflectionTunbox_for_primitive6FpnHoopDesc_pnGjvalue_pnGThread__nJBasicType__; @@ -3342,13 +3174,11 @@ text: .text%__1cLConvI2DNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cQsalL_eReg_CLNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cNSafePointNodeQpeek_monitor_obj6kM_pnENode__; text: .text%__1cVcompiledICHolderKlassToop_adjust_pointers6MpnHoopDesc__i_; -text: .text%__1cHnmethodbAmake_not_entrant_or_zombie6Mi_v_; text: .text%__1cPoldgetTimeNanos6F_x_: os_solaris.o; text: .text%__1cVcompiledICHolderKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cIDivLNodeJideal_reg6kM_I_: classes.o; text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFn0AJOperation__v4_v_; text: .text%__1cYinternal_word_RelocationGtarget6M_pC_; -text: .text%__1cRxorI_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJAssemblerEsarl6MpnMRegisterImpl_i_v_; text: .text%__1cIModLNodeJideal_reg6kM_I_: classes.o; text: .text%__1cFParsePdo_monitor_exit6M_v_; @@ -3368,7 +3198,6 @@ text: .text%__1cFParseMdo_anewarray6M_v_; text: .text%__1cJLoadDNodeJideal_reg6kM_I_: classes.o; text: .text%__1cXjava_lang_reflect_FieldFclazz6FpnHoopDesc__2_; text: .text%__1cMsubD_regNodeQuse_cisc_RegMask6M_v_; -text: .text%__1cOcmpD_cc_P6NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cTcmovII_reg_EQdDNENodeQuse_cisc_RegMask6M_v_; text: .text%__1cFStateM_sub_Op_CmpD6MpknENode__v_; text: .text%__1cXjava_lang_reflect_FieldJmodifiers6FpnHoopDesc__i_; @@ -3391,7 +3220,6 @@ text: .text%__1cKEntryPoint2t6M_v_; text: .text%__1cKstoreINodeIpipeline6kM_pknIPipeline__; text: .text%__1cXcmpL_reg_flags_LTGENodeIpipeline6kM_pknIPipeline__; text: .text%__1cSMachBreakpointNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQshrI_eReg_CLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cKemit_break6FrnKCodeBuffer__v_; text: .text%__1cQshrI_eReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIciMethodVget_osr_flow_analysis6Mi_pnKciTypeFlow__; @@ -3443,7 +3271,6 @@ text: .text%__1cOcompiledVFrameImonitors6kM_pnNGrowableArray4CpnLMonitorInfo____ text: .text%__1cRsubL_eReg_memNodeFreloc6kM_i_; text: .text%__1cMTailJumpNodeKmatch_edge6kMI_I_; text: .text%__1cFStateP_sub_Op_ConvF2D6MpknENode__v_; -text: .text%__1cNdivL_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNinstanceKlassPadd_osr_nmethod6MpnHnmethod__v_; text: .text%__1cHThreadsbMis_supported_jni_version_including_1_16Fi_C_; text: .text%__1cFStateM_sub_Op_DivL6MpknENode__v_; @@ -3458,7 +3285,6 @@ text: .text%__1cNmodI_eRegNodeIpipeline6kM_pknIPipeline__; text: .text%__1cLStrCompNodeJideal_reg6kM_I_: classes.o; text: .text%__1cJAssemblerGfrstor6MnHAddress__v_; text: .text%JVM_GetCPFieldModifiers; -text: .text%__1cSUnsafe_DefineClass6FpnHJNIEnv__pnI_jstring_pnL_jbyteArray_iipnI_jobject_7_pnH_jclass__: unsafe.o; text: .text%__1cJBasicLockHmove_to6MpnHoopDesc_p0_v_; text: .text%__1cSObjectSynchronizerOinflate_helper6FpnHoopDesc__pnNObjectMonitor__: synchronizer.o; text: .text%__1cSdivD_reg_roundNodeLout_RegMask6kM_rknHRegMask__; @@ -3480,15 +3306,10 @@ text: .text%__1cLPSMarkSweepRmark_sweep_phase46F_v_; text: .text%__1cYjava_lang_reflect_MethodPparameter_types6FpnHoopDesc__2_; text: .text%__1cLPSMarkSweepbAreset_millis_since_last_gc6F_v_; text: .text%__1cUPSAdaptiveSizePolicyUmajor_collection_end6MInHGCCauseFCause__v_; -text: .text%__1cSDeoptimizationBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; text: .text%__1cJCodeCacheLgc_epilogue6F_v_; text: .text%__1cJMarkSweepNrestore_marks6F_v_; -text: .text%__1cQUncommonTrapBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cNExceptionBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; text: .text%__1cYinternal_word_RelocationFvalue6M_pC_: relocInfo.o; text: .text%__1cJJavaCallsMcall_virtual6FpnJJavaValue_nGHandle_nLKlassHandle_nMsymbolHandle_533pnGThread__v_; -text: .text%__1cJCodeCacheHoops_do6FpnKOopClosure__v_; -text: .text%__1cMset_property6FnGHandle_pkc2pnGThread__v_: jvm.o; text: .text%__1cJCodeCacheLgc_prologue6F_v_; text: .text%__1cHJNIEnv_JNewObject6MpnH_jclass_pnK_jmethodID_E_pnI_jobject__: jni.o; text: .text%__1cLPSMarkSweepPallocate_stacks6F_v_; @@ -3501,7 +3322,6 @@ text: .text%__1cMincI_memNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cUPSAdaptiveSizePolicyWmajor_collection_begin6M_v_; text: .text%__1cJMarkSweepMadjust_marks6F_v_; text: .text%__1cJMarkSweepXfollow_weak_klass_links6F_v_; -text: .text%__1cNmodL_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%jni_AllocObject: jni.o; text: .text%__1cPcmpFastLockNodeIpipeline6kM_pknIPipeline__; text: .text%__1cQSystemDictionaryYalways_strong_classes_do6FpnKOopClosure__v_; @@ -3512,7 +3332,6 @@ text: .text%__1cUPSMarkSweepDecoratorbHset_destination_decorator_tenured6F_v_; text: .text%JVM_InvokeMethod; text: .text%__1cQSystemDictionaryValways_strong_oops_do6FpnKOopClosure__v_; text: .text%__1cFKlassWcompute_modifier_flags6kMpnGThread__i_; -text: .text%__1cHThreadsLnmethods_do6F_v_; text: .text%__1cIPSOldGenKprecompact6M_v_; text: .text%__1cHThreadsLgc_epilogue6F_v_; text: .text%__1cHThreadsLgc_prologue6F_v_; @@ -3522,9 +3341,7 @@ text: .text%__1cHi2bNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cQSystemDictionaryPplaceholders_do6FpnKOopClosure__v_; text: .text%__1cFStateM_sub_Op_ModL6MpknENode__v_; text: .text%__1cJPSPermGenKprecompact6M_v_; -text: .text%__1cHi2bNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cTleaPIdxScaleOffNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMincI_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cKDictionaryYalways_strong_classes_do6MpnKOopClosure__v_; text: .text%__1cNTemplateTableMlocals_index6FpnMRegisterImpl_i_v_; text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFn0AJCondition__v4_v_; @@ -3533,7 +3350,6 @@ text: .text%__1cOaddF24_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNcmovI_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cJStubQdDueueMremove_first6Mi_v_; text: .text%__1cSsarL_eReg_1_31NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNloadConL0NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%JVM_NewArray; text: .text%__1cLConvF2INodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cOcmpF_cc_P6NodeLout_RegMask6kM_rknHRegMask__; @@ -3545,7 +3361,6 @@ text: .text%__1cNTemplateTableHconvert6F_v_; text: .text%__1cZInterpreterMacroAssemblerNunlock_object6MpnMRegisterImpl__v_; text: .text%__1cSmulF24_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIDivDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cTconvD2I_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cIMulFNodeJideal_reg6kM_I_: classes.o; text: .text%__1cFStateP_sub_Op_ConvD2I6MpknENode__v_; text: .text%__1cLMoveF2INodeGOpcode6kM_i_; @@ -3575,13 +3390,11 @@ text: .text%JVM_GetSystemPackage; text: .text%__1cLStatSamplerTget_system_property6FpkcpnGThread__2_; text: .text%__1cPconvL2D_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cXPartialSubtypeCheckNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cOresolve_symbol6Fpkc_pC_: os_solaris.o; text: .text%__1cPMultiBranchDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_; text: .text%JVM_RawMonitorCreate; text: .text%__1cQConstantIntValue2t6MpnTDebugInfoReadStream__v_; text: .text%__1cOMacroAssemblerTset_last_Java_frame6MpnMRegisterImpl_22pC_v_; text: .text%__1cOMacroAssemblerRcall_VM_leaf_base6MpCi_v_; -text: .text%__1cSstring_compareNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cISubFNodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cFStateP_sub_Op_StrComp6MpknENode__v_; text: .text%__1cFStateP_sub_Op_ConvI2F6MpknENode__v_; @@ -3599,13 +3412,10 @@ text: .text%__1cQinstanceRefKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread text: .text%__1cLvframeArrayPunpack_to_stack6MrnFframe_i_v_; text: .text%__1cLvframeArrayZdeallocate_monitor_chunks6M_v_; text: .text%__1cOstoreF_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cVcompiledICHolderKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cNcmovI_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cImulINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQsalL_eReg_CLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%Unsafe_CompareAndSwapInt; text: .text%__1cZInterpreterMacroAssemblerPset_mdp_data_at6MpnMRegisterImpl_i2_v_; -text: .text%__1cRsubI_eReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cQsalL_eReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMsubD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMnegD_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -3634,7 +3444,6 @@ text: .text%__1cODeoptimizationYfetch_unroll_info_helper6FpnKJavaThread__pn0ALUn text: .text%__1cOMacroAssemblerFenter6M_v_; text: .text%Unsafe_GetNativeByte; text: .text%__1cOMacroAssemblerNpop_FPU_state6M_v_; -text: .text%__1cTsarL_eReg_32_63NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cPconvL2F_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKCMoveLNodeGOpcode6kM_i_; text: .text%JVM_NanoTime; @@ -3657,10 +3466,8 @@ text: .text%__1cFStateP_sub_Op_ConvI2D6MpknENode__v_; text: .text%__1cJAssemblerEmovw6MnHAddress_pnMRegisterImpl__v_; text: .text%__1cQshrL_eReg_CLNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cFStateM_sub_Op_AddF6MpknENode__v_; -text: .text%__1cParrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%jint_cmp: parse2.o; text: .text%__1cJAssemblerExorl6MpnMRegisterImpl_i_v_; -text: .text%__1cPBytecode_invokeLresult_type6kMpnGThread__nJBasicType__; text: .text%jni_CallVoidMethod: jni.o; text: .text%__1cOsubF24_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cOstoreF_immNodeOmemory_operand6kM_pknIMachOper__; @@ -3683,7 +3490,6 @@ text: .text%__1cPmovI_nocopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cJAssemblerFfwait6M_v_; text: .text%__1cJAssemblerKrepne_scan6M_v_; text: .text%__1cNRegisterSaverWrestore_live_registers6FpnOMacroAssembler__v_; -text: .text%__1cRandL_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNcmovL_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cZInterpreterMacroAssemblerMdispatch_via6MnITosState_ppC_v_; text: .text%__1cImulINodeOmemory_operand6kM_pknIMachOper__; @@ -3702,12 +3508,10 @@ text: .text%__1cJCmpF3NodeGOpcode6kM_i_; text: .text%__1cIAddDNodeIIdentity6MpnOPhaseTransform__pnENode__: classes.o; text: .text%__1cJAssemblerFtestb6MpnMRegisterImpl_i_v_; text: .text%__1cNTemplateTableQfast_accessfield6FnITosState__v_; -text: .text%__1cOmulIS_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%Unsafe_StaticFieldBaseFromField; text: .text%__1cNTemplateTableZjvmti_post_fast_field_mod6F_v_; text: .text%__1cNTemplateTablePfast_storefield6FnITosState__v_; text: .text%Unsafe_StaticFieldOffset; -text: .text%__1cNTemplateTableXresolve_cache_and_index6FipnMRegisterImpl_2_v_; text: .text%Unsafe_GetObjectVolatile; text: .text%__1cHnmethodFflush6M_v_; text: .text%__1cHnmethodSflush_dependencies6MpnRBoolObjectClosure__v_; @@ -3717,7 +3521,6 @@ text: .text%__1cQciTypeArrayKlass2t6MnLKlassHandle__v_; text: .text%__1cNaddP_eRegNodeIpipeline6kM_pknIPipeline__; text: .text%__1cIMachOperNbase_position6kM_i_; text: .text%__1cZInterpreterMacroAssemblerGf2ieee6M_v_; -text: .text%__1cFVTuneOdelete_nmethod6FpnHnmethod__v_; text: .text%Unsafe_EnsureClassInitialized; text: .text%__1cIciSymbolHas_utf86M_pkc_; text: .text%__1cOtypeArrayKlassNexternal_name6FnJBasicType__pkc_; @@ -3728,7 +3531,6 @@ text: .text%__1cIciMethodMnative_entry6M_pC_; text: .text%__1cNdivI_eRegNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cJAssemblerHfincstp6M_v_; text: .text%__1cETypeFxdual6kM_pk0_; -text: .text%__1cQorI_eReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cOMacroAssemblerEfpop6M_v_; text: .text%__1cLOptoRuntimeTmultianewarray_Type6Fi_pknITypeFunc__; text: .text%__1cOGenerateOopMapGdo_jsr6Mi_v_; @@ -3741,7 +3543,6 @@ text: .text%jni_RegisterNatives: jni.o; text: .text%__1cSmulF24_reg_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cSaddF24_reg_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%JVM_GetClassDeclaredFields; -text: .text%stat: os_solaris.o; text: .text%JVM_IsSameClassPackage; text: .text%__1cCosMuser_handler6F_pv_; text: .text%__1cQSystemDictionaryPresolve_or_null6FnMsymbolHandle_pnGThread__pnMklassOopDesc__; @@ -3793,9 +3594,7 @@ text: .text%JVM_LoadLibrary; text: .text%JVM_IsSupportedJNIVersion; text: .text%__1cOstoreF_immNodeFreloc6kM_i_; text: .text%__1cPPerfLongVariant2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_pnUPerfLongSampleHelper__v_; -text: .text%__1cNmulI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJAssemblerGfild_d6MnHAddress__v_; -text: .text%__1cRmulI_imm_highNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%Unsafe_ObjectFieldOffset; text: .text%__1cRaddL_eReg_memNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cJAssemblerEincl6MnHAddress__v_; @@ -3835,20 +3634,14 @@ text: .text%__1cHnmethodbJcontinuation_for_implicit_exception6MpC_1_; text: .text%__1cWImplicitExceptionTable2t6MpknHnmethod__v_; text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_pnUPerfLongSampleHelper_pnGThread__pnQPerfLongVariable__; text: .text%__1cKExceptionsK_throw_oop6FpnGThread_pkcipnHoopDesc__v_; -text: .text%__1cNdivI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cLVtableStubsPstub_containing6FpC_pnKVtableStub__; text: .text%__1cMNativeLookupTbase_library_lookup6Fpkc22_pC_; text: .text%__1cFStateP_sub_Op_ConvF2I6MpknENode__v_; -text: .text%__1cODeoptimizationYreset_invocation_counter6FpnJScopeDesc_i_v_; text: .text%__1cQshrL_eReg_CLNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTconvF2I_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNCellTypeStateImake_any6Fi_0_: generateOopMap.o; text: .text%__1cJAssemblerEmovb6MnHAddress_i_v_; text: .text%__1cPPerfDataManagerKname_space6Fpkc2i_pc_; -text: .text%__1cTshlL_eReg_32_63NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cWImplicitExceptionTableCat6kMI_I_; -text: .text%__1cQshrL_eReg_CLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cSsarL_eReg_1_31NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJAssemblerFfinit6M_v_; text: .text%__1cFParseRjump_if_true_fork6MpnGIfNode_ii_v_; text: .text%__1cKVtableStubRpd_code_alignment6F_i_; @@ -3889,7 +3682,6 @@ text: .text%__1cIRetTableHadd_jsr6Mii_v_; text: .text%__1cNTemplateTableFfload6Fi_v_; text: .text%__1cNTemplateTableFlload6Fi_v_; text: .text%__1cNcmovI_memNodeFreloc6kM_i_; -text: .text%__1cPaddress_of_flag6FnXCommandLineFlagWithType__pnEFlag__: globals.o; text: .text%__1cNTemplateTableFiload6Fi_v_; text: .text%__1cOGenerateOopMapTret_jump_targets_do6MpnOBytecodeStream_pFp0ipi_vi4_v_; text: .text%__1cNdivI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -3951,14 +3743,11 @@ text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_; text: .text%__1cJAssemblerEandl6MpnMRegisterImpl_2_v_; text: .text%__1cNCompileBrokerUmake_compiler_thread6FpkcpnMCompileQdDueue_pnQCompilerCounters_pnGThread__pnOCompilerThread__; text: .text%__1cNCompileBrokerUcompiler_thread_loop6F_v_; -text: .text%__1cOcmpF_cc_P6NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJAssemblerEcdql6M_v_; text: .text%__1cUInterpreterGeneratorbDgenerate_stack_overflow_check6M_v_; text: .text%__1cRCardTableModRefBSbCfind_covering_region_by_base6MpnIHeapWord__i_; -text: .text%__1cIci2bNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cRCardTableModRefBSbAlargest_prev_committed_end6kMi_pnIHeapWord__; text: .text%__1cMSysClassPathNreset_item_at6Mi_v_: arguments.o; -text: .text%__1cLconvI2BNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cFStateM_sub_Op_CmpF6MpknENode__v_; text: .text%__1cRCardTableModRefBSVresize_covered_region6MnJMemRegion__v_; text: .text%__1cJAssemblerDorl6MpnMRegisterImpl_nHAddress__v_; @@ -3973,7 +3762,6 @@ text: .text%__1cOtailjmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cVcompiler_thread_entry6FpnKJavaThread_pnGThread__v_: thread.o; text: .text%__1cOCompilerThread2t6MpnMCompileQdDueue_pnQCompilerCounters__v_; text: .text%__1cNSafepointBlob2t6MpnKCodeBuffer_ipnJOopMapSet_i_v_; -text: .text%__1cJlookupOne6FpnHJNIEnv__pkcpnGThread__pnH_jclass__: jni.o; text: .text%__1cUPSGenerationCounters2t6MpkciipnOPSVirtualSpace__v_; text: .text%__1cNSafepointBlob2n6FII_pv_; text: .text%__1cQmulD_reg_memNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -3992,7 +3780,6 @@ text: .text%__1cPmovP_nocopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%jni_CallStaticObjectMethodV: jni.o; text: .text%__1cIci2bNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cZInterpreterMacroAssemblerRgen_subtype_check6MpnMRegisterImpl_rnFLabel__v_; -text: .text%__1cRaddI_mem_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%JVM_Available; text: .text%__1cCosIjvm_path6Fpci_v_; text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MpnMRegisterImpl_2i_v_; @@ -4032,7 +3819,6 @@ text: .text%__1cFStateL_sub_Op_OrL6MpknENode__v_; text: .text%__1cFStateM_sub_Op_SubF6MpknENode__v_; text: .text%__1cMPeriodicTaskGenroll6M_v_; text: .text%__1cMPeriodicTask2t6MI_v_; -text: .text%__1cSestimate_path_freq6FpnENode__f_: loopnode.o; text: .text%__1cFStateP_sub_Op_MoveL2D6MpknENode__v_; text: .text%__1cNincI_eRegNodeIpipeline6kM_pknIPipeline__; text: .text%__1cNTemplateTableHcastore6F_v_; @@ -4068,17 +3854,13 @@ text: .text%__1cHnmethodVinvalidate_osr_method6M_v_; text: .text%__1cQAgentLibraryList2t6M_v_: arguments.o; text: .text%__1cJAssemblerEmovb6MpnMRegisterImpl_nHAddress__v_; text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_; -text: .text%__1cPconvL2D_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cPconvD2F_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNmulI_eRegNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cINegFNodeJideal_reg6kM_I_: classes.o; text: .text%__1cSInterpreterRuntimeMat_safepoint6FpnKJavaThread__v_; text: .text%__1cOGenerateOopMapTadd_to_ref_init_set6Mi_v_; text: .text%__1cIPSOldGenOgen_size_limit6M_I_; text: .text%__1cIPSOldGenGresize6MI_v_; -text: .text%__1cQorl_eReg_immNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNciMethodKlassEmake6F_p0_; -text: .text%__1cPconvL2F_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cUParallelScavengeHeapItop_addr6kM_ppnIHeapWord__: parallelScavengeHeap.o; text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_; text: .text%__1cMGCTaskThread2t6MpnNGCTaskManager_II_v_; @@ -4086,13 +3868,10 @@ text: .text%__1cMGCTaskThreadFstart6M_v_; text: .text%__1cMGCTaskThreadDrun6M_v_; text: .text%__1cJLoadFNodeMstore_Opcode6kM_i_: classes.o; text: .text%__1cUInterpreterGeneratorLlock_method6M_v_; -text: .text%__1cXpartialSubtypeCheckNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cISubFNodeJideal_reg6kM_I_: classes.o; text: .text%__1cISubFNodeGadd_id6kM_pknEType__: classes.o; text: .text%__1cIPSOldGenPinitialize_work6Mpkci_v_; -text: .text%lstat: perfMemory_solaris.o; text: .text%__1cRComputeEntryStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cPfilename_to_pid6Fpkc_l_: perfMemory_solaris.o; text: .text%Unsafe_CompareAndSwapObject; text: .text%__1cJCodeCachebGmake_marked_nmethods_not_entrant6F_v_; text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpCpnMRegisterImpl__v_; @@ -4198,7 +3977,6 @@ text: .text%__1cIVMThreadDrun6M_v_; text: .text%__1cSThreadLocalStoragebCgenerate_code_for_get_thread6F_v_; text: .text%__1cTtypeArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; text: .text%__1cKTypeOopPtrFxdual6kM_pknEType__; -text: .text%__1cKTypeOopPtrEmake6FnHTypePtrDPTR_i_pk0_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vm_version.o; text: .text%__1cKVM_VersionWget_processor_features6F_v_; text: .text%__1cKVM_VersionKinitialize6F_v_; @@ -4239,9 +4017,7 @@ text: .text%__1cbAcall_initializeSystemClass6FpnGThread__v_: thread.o; text: .text%__1cWreset_vm_info_property6FpnGThread__v_: thread.o; text: .text%JVM_RegisterUnsafeMethods; text: .text%__1cQvtableStubs_init6F_v_; -text: .text%__1cFVTuneEexit6F_v_; text: .text%__1cTtypeArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlassKlass.o; -text: .text%__1cKvtune_init6F_v_; text: .text%__1cIUniversePcheck_alignment6FIIpkc_v_; text: .text%__1cSinstanceKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; text: .text%__1cFJNIidKdeallocate6Fp0_v_; @@ -4292,7 +4068,6 @@ text: .text%__1cNCellTypeStateImake_top6F_0_: generateOopMap.o; text: .text%__1cWResolveOopMapConflictsUdo_potential_rewrite6MpnGThread__nMmethodHandle__; text: .text%__1cJGenRemSetYmax_alignment_constraint6Fn0AEName__I_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: genCollectedHeap.o; -text: .text%__1cTAssertIsPermClosure2t6M_v_: genCollectedHeap.o; text: .text%__1cKNoopGCTaskQcreate_on_c_heap6F_p0_; text: .text%__1cNGCTaskManagerKthreads_do6MpnNThreadClosure__v_; text: .text%__1cNGCTaskManagerKinitialize6M_v_; @@ -4398,9 +4173,6 @@ text: .text%__1cHi2sNodeIpipeline6kM_pknIPipeline__; text: .text%__1cHi2bNodeIpipeline6kM_pknIPipeline__; text: .text%__1cKstoreBNodeIpipeline6kM_pknIPipeline__; text: .text%__1cOtailjmpIndNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cRaddL_eReg_memNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cLconvP2BNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; -text: .text%__1cIcp2bNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cTconvI2F_SSF_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cQmulD_reg_memNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cOtailjmpIndNodeFreloc6kM_i_; @@ -4410,7 +4182,6 @@ text: .text%__1cQaccessFlags_init6F_v_; text: .text%__1cPconvI2L_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cJArgumentsbBset_cms_and_parnew_gc_flags6F_v_; text: .text%__1cJArgumentsTset_parnew_gc_flags6F_v_; -text: .text%__1cQno_shared_spaces6F_v_: arguments.o; text: .text%__1cJArgumentsMget_property6Fpkc_2_; text: .text%__1cMSysClassPathQadd_jars_to_path6Fpcpkc_1_; text: .text%__1cMSysClassPathPexpand_endorsed6M_v_; @@ -4446,13 +4217,11 @@ text: .text%__1cQconstMethodKlassOset_alloc_size6MI_v_: constMethodKlass.o; text: .text%__1cQconstMethodKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; text: .text%__1cTcompilerOracle_init6F_v_; text: .text%__1cOCompilerOraclePparse_from_file6F_v_; -text: .text%__1cHcc_file6F_pkc_: compilerOracle.o; text: .text%__1cVcompiledICHolderKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: compiledICHolderKlass.o; text: .text%__1cVcompiledICHolderKlassOset_alloc_size6MI_v_: compiledICHolderKlass.o; text: .text%__1cVcompiledICHolderKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compileBroker.o; text: .text%__1cNCompileBrokerQset_should_block6F_v_; -text: .text%__1cNCompileBrokerVinit_compiler_threads6Fi_v_; text: .text%__1cSDeoptimizationBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_iiii_p0_; text: .text%__1cRCardTableModRefBSbBct_max_alignment_constraint6F_I_; text: .text%__1cRCardTableModRefBS2t6MnJMemRegion_i_v_; @@ -4508,20 +4277,13 @@ text: .text%__1cLStatSamplerJdisengage6F_v_; text: .text%__1cLStatSamplerGengage6F_v_; text: .text%__1cLStatSamplerKinitialize6F_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: sharedHeap.o; -text: .text%__1cTAssertIsPermClosure2t6M_v_: sharedHeap.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psMarkSweep.o; -text: .text%__1cTPSAlwaysTrueClosure2t6M_v_: psMarkSweep.o; text: .text%__1cLPSMarkSweepKinitialize6F_v_; text: .text%__1cbAPSGCAdaptivePolicyCounters2t6MpkciipnUPSAdaptiveSizePolicy__v_; text: .text%__1cQPlaceholderTable2t6Mi_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: phase.o; text: .text%__1cKPerfMemoryUdelete_memory_region6F_v_; text: .text%__1cKPerfMemoryUcreate_memory_region6FI_v_; -text: .text%__1cUdelete_shared_memory6FpcI_v_: perfMemory_solaris.o; -text: .text%__1cUcreate_shared_memory6FI_pc_: perfMemory_solaris.o; -text: .text%__1cSmmap_create_shared6FI_pc_: perfMemory_solaris.o; -text: .text%__1cbAcreate_sharedmem_resources6Fpkc1I_i_: perfMemory_solaris.o; -text: .text%__1cbBcleanup_sharedmem_resources6Fpkc_v_: perfMemory_solaris.o; text: .text%__1cIPSOldGen2t6MnNReservedSpace_IIIIpkci_v_; text: .text%__1cSReferenceProcessorMinit_statics6F_v_; text: .text%__1cXreferenceProcessor_init6F_v_; @@ -4602,7 +4364,6 @@ text: .text%__1cMPeriodicTask2T5B6M_v_; text: .text%__1cQSystemDictionarybCinitialize_preloaded_classes6FpnGThread__v_; text: .text%__1cQSystemDictionaryKinitialize6FpnGThread__v_; text: .text%__1cQSystemDictionaryKclasses_do6FpFpnMklassOopDesc__v_v_; -text: .text%__1cLremove_file6Fpkc_v_: perfMemory_solaris.o; text: .text%__1cNMemoryServicebFadd_parallel_scavenge_heap_info6FpnUParallelScavengeHeap__v_; text: .text%__1cNMemoryServiceRset_universe_heap6FpnNCollectedHeap__v_; text: .text%__1cNMemoryManagerbEget_psMarkSweep_memory_manager6F_pnPGCMemoryManager__; @@ -4610,11 +4371,6 @@ text: .text%__1cNMemoryManagerbDget_psScavenge_memory_manager6F_pnPGCMemoryManag text: .text%__1cNMemoryManagerbDget_code_cache_memory_manager6F_p0_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: matcher.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: markSweep.o; -text: .text%__1cJMarkSweepSMarkAndPushClosure2t6M_v_: markSweep.o; -text: .text%__1cJMarkSweepRFollowRootClosure2t6M_v_: markSweep.o; -text: .text%__1cJMarkSweepSFollowStackClosure2t6M_v_: markSweep.o; -text: .text%__1cJMarkSweepOIsAliveClosure2t6M_v_: markSweep.o; -text: .text%__1cJMarkSweepQKeepAliveClosure2t6M_v_: markSweep.o; text: .text%__1cOmarksweep_init6F_v_; text: .text%__1cNMemoryServiceXadd_psYoung_memory_pool6FpnKPSYoungGen_pnNMemoryManager_4_v_; text: .text%__1cKmutex_init6F_v_; @@ -4666,9 +4422,6 @@ text: .text%__1cCosEinit6F_v_; text: .text%__1cCosHSolarisUsynchronization_init6F_v_; text: .text%__1cCosHSolarisOlibthread_init6F_v_; text: .text%__1cUParallelScavengeHeapYpermanent_object_iterate6MpnNObjectClosure__v_; -text: .text%__1cWget_sharedmem_filename6Fpkci_pc_: perfMemory_solaris.o; -text: .text%__1cNget_user_name6Fl_pc_: perfMemory_solaris.o; -text: .text%__1cQget_user_tmp_dir6Fpkc_pc_: perfMemory_solaris.o; text: .text%__1cKPerfMemoryHdestroy6F_v_; text: .text%__1cKPerfMemoryKinitialize6F_v_; text: .text%__1cPperfMemory_exit6F_v_; @@ -4689,7 +4442,6 @@ text: .text%__1cCosXterminate_signal_thread6F_v_; text: .text%__1cCosLsignal_init6F_v_; text: .text%__1cTsignal_thread_entry6FpnKJavaThread_pnGThread__v_: os.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: oopMap.o; -text: .text%__1cQDoNothingClosure2t6M_v_: oopMap.o; text: .text%__1cSobjArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: objArrayKlassKlass.o; text: .text%__1cSobjArrayKlassKlassbEallocate_system_objArray_klass6MpnGThread__pnMklassOopDesc__; text: .text%__1cSobjArrayKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; @@ -4703,7 +4455,6 @@ text: .text%__1cCosHSolarisPinit_signal_mem6F_v_; text: .text%__1cCosSget_temp_directory6F_pkc_; text: .text%__1cCosbDallocate_thread_local_storage6F_i_; text: .text%__1cCosHSolarisQsignal_sets_init6F_v_; -text: .text%__1cQcreate_os_thread6FpnGThread_I_pnIOSThread__: os_solaris.o; text: .text%__1cCosbDinit_system_properties_values6F_v_; text: .text%__1cCosHSolarisWinitialize_system_info6F_v_; text: .text%__1cCosPphysical_memory6F_X_; diff --git a/hotspot/make/solaris/makefiles/reorder_TIERED_sparc b/hotspot/make/solaris/makefiles/reorder_TIERED_sparc index 15c03b78514..08abc3b4377 100644 --- a/hotspot/make/solaris/makefiles/reorder_TIERED_sparc +++ b/hotspot/make/solaris/makefiles/reorder_TIERED_sparc @@ -4,7 +4,6 @@ text = LOAD ?RXO; text: .text%__1cCosOjavaTimeMillis6F_x_; text: .text%__1cQIndexSetIteratorQadvance_and_next6M_I_; -text: .text%__1cNinstanceKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cNinstanceKlassToop_adjust_pointers6MpnHoopDesc__i_; text: .text%__1cNinstanceKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cOtypeArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; @@ -33,7 +32,6 @@ text: .text%__1cETypeFuhash6Fkpk0_i_; text: .text%__1cQIndexSetIteratorEnext6M_I_: chaitin.o; text: .text%__1cENodeIout_grow6MI_v_; text: .text%__1cOloadConI13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNobjArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cENodeHadd_req6Mp0_v_; text: .text%__1cJMarkSweepUAdjustPointerClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; text: .text%__1cNobjArrayKlassToop_follow_contents6MpnHoopDesc__v_; @@ -45,7 +43,6 @@ text: .text%__1cHPhiNodeGOpcode6kM_i_; text: .text%__1cKbranchNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; text: .text%__1cIProjNodeGOpcode6kM_i_; text: .text%__1cETypeIhashcons6M_pk0_; -text: .text%__1cOPhaseIdealLoopUbuild_loop_late_post6MpnENode_pk0_v_; text: .text%__1cMPhaseChaitinTinterfere_with_live6MIpnIIndexSet__v_; text: .text%__1cWNode_Backward_IteratorEnext6M_pnENode__; text: .text%__1cNIdealLoopTreeJis_member6kMpk0_i_; @@ -154,7 +151,6 @@ text: .text%__1cETypeFxmeet6kMpk0_2_; text: .text%__1cILRG_ListGextend6MII_v_; text: .text%__1cJVectorSet2F6kMI_i_; text: .text%__1cENodeQIdeal_DU_postCCP6MpnIPhaseCCP__p0_; -text: .text%__1cOtypeArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cIProjNodeEhash6kM_I_; text: .text%__1cIAddINodeGOpcode6kM_i_; text: .text%__1cIIndexSet2t6Mp0_v_; @@ -168,7 +164,6 @@ text: .text%__1cICmpPNodeGOpcode6kM_i_; text: .text%__1cKNode_ArrayGremove6MI_v_; text: .text%__1cHPhiNodeEhash6kM_I_; text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cKoopFactoryKnew_symbol6FpkcipnGThread__pnNsymbolOopDesc__; text: .text%__1cKmethodOperJnum_edges6kM_I_: ad_sparc.o; text: .text%__1cJStartNodeLbottom_type6kM_pknEType__; text: .text%__1cHTypeIntFxmeet6kMpknEType__3_; @@ -502,7 +497,6 @@ text: .text%__1cNObjectMonitorFenter6MpnGThread__v_; text: .text%__1cENodeKreplace_by6Mp0_v_; text: .text%__1cSObjectSynchronizerJslow_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; text: .text%__1cMMergeMemNodePiteration_setup6Mpk0_v_; -text: .text%__1cFKlassNlookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; text: .text%__1cKDictionaryEfind6MiInMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; text: .text%__1cRMachSpillCopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cKRegionNodeIIdentity6MpnOPhaseTransform__pnENode__; @@ -605,7 +599,6 @@ text: .text%__1cMTypeKlassPtrEhash6kM_i_; text: .text%__1cMCallLeafNodeGOpcode6kM_i_; text: .text%__1cSCallLeafDirectNodeIpipeline6kM_pknIPipeline__; text: .text%__1cHPhiNodeEmake6FpnENode_2pknEType_pknHTypePtr__p0_; -text: .text%__1cIAddPNodeQmach_bottom_type6FpknIMachNode__pknEType__; text: .text%__1cOcompU_iRegNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cJiRegLOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cNflagsRegPOperKin_RegMask6kMi_pknHRegMask__; @@ -640,7 +633,6 @@ text: .text%__1cJStartNodeGOpcode6kM_i_; text: .text%__1cQregF_to_stkINodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cENodeDcmp6kMrk0_I_; text: .text%__1cHTypeIntFxdual6kM_pknEType__; -text: .text%__1cIciObjectIencoding6M_pnI_jobject__; text: .text%__1cMmerge_region6FpnKRegionNode_pnIPhaseGVN__pnENode__: cfgnode.o; text: .text%__1cJAssemblerOpatched_branch6Fiii_i_; text: .text%__1cJAssemblerSbranch_destination6Fii_i_; @@ -738,10 +730,7 @@ text: .text%__1cMLinkResolverOresolve_invoke6FrnICallInfo_nGHandle_nSconstantPoo text: .text%__1cIBoolNodeJideal_reg6kM_I_: subnode.o; text: .text%__1cHCmpNodeJideal_reg6kM_I_: classes.o; text: .text%__1cRloadConP_pollNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cETypeFwiden6kMpk0_2_: type.o; text: .text%__1cLstoreI0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFciEnvTget_method_by_index6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; -text: .text%__1cFciEnvYget_method_by_index_impl6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; text: .text%__1cMloadConPNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFciEnvNlookup_method6MpnNinstanceKlass_2pnNsymbolOopDesc_4nJBytecodesECode__pnNmethodOopDesc__; text: .text%__1cKDictionaryKfind_class6MiInMsymbolHandle_nGHandle__pnMklassOopDesc__; @@ -755,7 +744,6 @@ text: .text%__1cSInterpreterRuntimeMmonitorenter6FpnKJavaThread_pnPBasicObjectLo text: .text%__1cSInterpreterRuntimePresolve_get_put6FpnKJavaThread_nJBytecodesECode__v_; text: .text%__1cQsubI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cXmembar_acquire_lockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQaddP_reg_regNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; text: .text%__1cPCountedLoopNodeGOpcode6kM_i_; text: .text%__1cSInterpreterRuntimeLmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; text: .text%__1cIAndLNodeGOpcode6kM_i_; @@ -826,7 +814,6 @@ text: .text%__1cURethrowExceptionNodeNis_block_proj6kM_pknENode__: ad_sparc_misc text: .text%__1cQSystemDictionarybOfind_constrained_instance_or_array_klass6FnMsymbolHandle_nGHandle_pnGThread__pnMklassOopDesc__; text: .text%__1cQsubI_reg_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cJloadBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIciSymbol2t6MnMsymbolHandle__v_; text: .text%__1cQaddP_reg_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKmethodOperGmethod6kM_i_: ad_sparc.o; text: .text%__1cFKlassIsubklass6kM_p0_; @@ -946,7 +933,6 @@ text: .text%__1cIGraphKitOreplace_in_map6MpnENode_2_v_; text: .text%__1cNinstanceKlassLfind_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; text: .text%__1cHCompileKTracePhase2T6M_v_; text: .text%__1cMPhaseChaitinLclone_projs6MpnFBlock_IpnENode_4rI_i_; -text: .text%__1cNinstanceKlassSlookup_osr_nmethod6kMkpnNmethodOopDesc_i_pnHnmethod__; text: .text%__1cIJVMState2t6MpnIciMethod_p0_v_; text: .text%__1cIHaltNode2t6MpnENode_2_v_; text: .text%__1cLOptoRuntimeSuncommon_trap_Type6F_pknITypeFunc__; @@ -954,7 +940,6 @@ text: .text%__1cJloadLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cSsafePoint_pollNodePoper_input_base6kM_I_: ad_sparc_misc.o; text: .text%__1cINodeHashJhash_find6MpknENode__p1_; text: .text%__1cQmulL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSaddP_reg_imm13NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; text: .text%__1cOMethodLivenessKBasicBlock2t6Mp0ii_v_; text: .text%__1cOMethodLivenessKBasicBlockQcompute_gen_kill6MpnIciMethod__v_; text: .text%__1cOGenerateOopMapFppush6MpnNCellTypeState__v_; @@ -987,7 +972,6 @@ text: .text%__1cFParseHdo_call6M_v_; text: .text%__1cNloadConP0NodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cHMulNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cMPhaseIterGVNJtransform6MpnENode__2_; -text: .text%__1cHTypeIntFwiden6kMpknEType__3_; text: .text%__1cSsafePoint_pollNodeIpipeline6kM_pknIPipeline__; text: .text%__1cJloadSNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cKarrayKlassLobject_size6kMi_i_; @@ -1019,7 +1003,6 @@ text: .text%__1cIBoolNodeHsize_of6kM_I_; text: .text%__1cSobjArrayKlassKlassIoop_size6kMpnHoopDesc__i_: objArrayKlassKlass.o; text: .text%__1cPcompP_iRegPNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cJloadPNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPBytecode_invokeJsignature6kM_pnNsymbolOopDesc__; text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__; text: .text%__1cNSignatureInfoGdo_int6M_v_: bytecode.o; text: .text%__1cOstackSlotLOperKin_RegMask6kMi_pknHRegMask__; @@ -1038,9 +1021,7 @@ text: .text%__1cMloadConINodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cGIfNodeHsize_of6kM_I_: classes.o; text: .text%__1cPconvL2I_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cIimmLOperJconstantL6kM_x_: ad_sparc_clone.o; -text: .text%__1cTStackWalkCompPolicyRcompilation_level6MnMmethodHandle_i_i_; text: .text%jni_GetByteArrayRegion: jni.o; -text: .text%__1cIGraphKitTset_all_memory_call6MpnENode__v_; text: .text%__1cSHighResTimeSamplerLtake_sample6M_x_: statSampler.o; text: .text%__1cHCompileFstart6kM_pnJStartNode__; text: .text%__1cPStatSamplerTaskEtask6M_v_: statSampler.o; @@ -1082,7 +1063,6 @@ text: .text%__1cXinitialize_static_field6FpnPfieldDescriptor_pnGThread__v_: clas text: .text%__1cURethrowExceptionNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cOJNIHandleBlockOallocate_block6FpnGThread__p0_; text: .text%__1cNSignatureInfoHdo_bool6M_v_: bytecode.o; -text: .text%__1cKBufferBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; text: .text%__1cSandI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cIAddINodeIadd_ring6kMpknEType_3_3_; text: .text%__1cLTypeInstPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; @@ -1095,7 +1075,6 @@ text: .text%__1cPorI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cLRethrowNodeGOpcode6kM_i_; text: .text%__1cJloadSNodeIpipeline6kM_pknIPipeline__; text: .text%__1cICodeHeapIcapacity6kM_I_; -text: .text%__1cKMemoryPoolImax_size6kM_I_: memoryPool.o; text: .text%__1cMCodeHeapPoolNused_in_bytes6M_I_: memoryPool.o; text: .text%__1cPcmpFastLockNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__; @@ -1136,7 +1115,6 @@ text: .text%__1cJloadSNodePoper_input_base6kM_I_: ad_sparc_misc.o; text: .text%__1cIJumpDataKcell_count6M_i_: ciMethodData.o; text: .text%__1cObranchConPNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cITypeFuncFxdual6kM_pknEType__; -text: .text%__1cQjava_lang_StringGlength6FpnHoopDesc__i_; text: .text%__1cFStateM_sub_Op_CmpI6MpknENode__v_; text: .text%__1cJcmpOpOperFccode6kM_i_: ad_sparc_clone.o; text: .text%__1cGciType2t6MnLKlassHandle__v_; @@ -1200,7 +1178,6 @@ text: .text%__1cQmulL_reg_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cLstoreP0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cLRethrowNodeKmatch_edge6kMI_I_; text: .text%__1cFTypeFEhash6kM_i_; -text: .text%__1cHnmethodHoops_do6MpnKOopClosure__v_; text: .text%__1cFStateM_sub_Op_AddI6MpknENode__v_; text: .text%__1cOParseGeneratorIgenerate6MpnIJVMState__2_; text: .text%__1cFParseQcreate_entry_map6M_pnNSafePointNode__; @@ -1213,17 +1190,13 @@ text: .text%__1cFParsePdo_method_entry6M_v_; text: .text%__1cNCallGeneratorKfor_inline6FpnIciMethod_f_p0_; text: .text%__1cbGJvmtiVMObjectAllocEventCollector2t6M_v_; text: .text%__1cbGJvmtiVMObjectAllocEventCollector2T6M_v_; -text: .text%__1cQconstMethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cRciVirtualCallDataOtranslate_from6MpnLProfileData__v_; text: .text%jni_IsSameObject: jni.o; text: .text%__1cMloadConINodeIpipeline6kM_pknIPipeline__; text: .text%__1cNbranchConNodeJlabel_set6MrnFLabel_I_v_; text: .text%__1cNbranchConNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cQandL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLmethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cLsymbolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cIciObjectFklass6M_pnHciKlass__; -text: .text%__1cLSymbolTableFprobe6Fpkci_pnNsymbolOopDesc__; text: .text%__1cPThreadLocalNodeGOpcode6kM_i_; text: .text%__1cZPhaseConservativeCoalesceKupdate_ifg6MIIpnIIndexSet_2_v_; text: .text%__1cZPhaseConservativeCoalesceMunion_helper6MpnENode_2II222pnFBlock_I_v_; @@ -1244,7 +1217,6 @@ text: .text%__1cRshrP_reg_imm5NodeIpipeline6kM_pknIPipeline__; text: .text%__1cQandI_reg_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cIciMethodbBinterpreter_call_site_count6Mi_i_; text: .text%__1cGBitMapIset_from6M0_v_; -text: .text%__1cNCompileBrokerOcompile_method6FnMmethodHandle_i1ipkcpnGThread__pnHnmethod__; text: .text%__1cTconstantPoolOopDescbDresolve_string_constants_impl6FnSconstantPoolHandle_pnGThread__v_; text: .text%__1cHSubNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cFChunk2n6FII_pv_; @@ -1278,7 +1250,6 @@ text: .text%__1cNCatchProjNodeDcmp6kMrknENode__I_; text: .text%__1cKTypeOopPtrEhash6kM_i_; text: .text%__1cIMinINodeGOpcode6kM_i_; text: .text%__1cMURShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cFframeRoops_code_blob_do6MpnKOopClosure_pknLRegisterMap__v_; text: .text%__1cKTypeRawPtrFxmeet6kMpknEType__3_; text: .text%JVM_GetMethodIxModifiers; text: .text%__1cIMulLNodeLbottom_type6kM_pknEType__: classes.o; @@ -1325,7 +1296,6 @@ text: .text%__1cSconvI2D_helperNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cPClassFileStreamHskip_u26MipnGThread__v_; text: .text%__1cUcompI_iReg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cOMacroAssemblerNverify_thread6M_v_; -text: .text%__1cIGraphKitZset_results_for_java_call6MpnMCallJavaNode__pnENode__; text: .text%__1cSbranchCon_longNodeIpipeline6kM_pknIPipeline__; text: .text%__1cHnmethodVcleanup_inline_caches6M_v_; text: .text%__1cTciConstantPoolCacheGinsert6Mipv_v_; @@ -1356,12 +1326,9 @@ text: .text%__1cKoopFactoryTnew_system_objArray6FipnGThread__pnPobjArrayOopDesc_ text: .text%__1cbDcatch_cleanup_find_cloned_def6FpnFBlock_pnENode_1rnLBlock_Array_i_3_: lcm.o; text: .text%__1cQxorI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cKstoreLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFciEnvVget_constant_by_index6MpnPciInstanceKlass_i_nKciConstant__; -text: .text%__1cFciEnvbAget_constant_by_index_impl6MpnPciInstanceKlass_i_nKciConstant__; text: .text%__1cOClearArrayNodeKmatch_edge6kMI_I_; text: .text%__1cPconvL2I_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cJloadSNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKJavaThreadHoops_do6MpnKOopClosure__v_; text: .text%__1cSFixupMirrorClosureJdo_object6MpnHoopDesc__v_: universe.o; text: .text%__1cFStateP_sub_Op_LShiftI6MpknENode__v_; text: .text%__1cQandL_reg_regNodeLout_RegMask6kM_rknHRegMask__; @@ -1387,7 +1354,6 @@ text: .text%__1cOAbstractICacheQinvalidate_range6FpCi_v_; text: .text%__1cKstorePNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cIMaxINodeGOpcode6kM_i_; text: .text%__1cTDirectCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cNCallGeneratorPfor_direct_call6FpnIciMethod__p0_; text: .text%__1cMWarmCallInfoLalways_cold6F_p0_; text: .text%__1cIimmDOperJconstantD6kM_d_: ad_sparc_clone.o; text: .text%__1cIPhaseIFGEinit6MI_v_; @@ -1512,7 +1478,6 @@ text: .text%__1cPciObjectFactoryMvm_symbol_at6Fi_pnIciSymbol__; text: .text%__1cKDictionaryJadd_klass6MnMsymbolHandle_nGHandle_nLKlassHandle__v_; text: .text%__1cVshrL_reg_imm6_L2INodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cZCallDynamicJavaDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitTcreate_and_xform_if6MpnENode_2ff_pnGIfNode__: graphKit.o; text: .text%__1cWImplicitExceptionTableGappend6MII_v_; text: .text%__1cRMachNullCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cLProfileDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_: ciMethodData.o; @@ -1534,14 +1499,12 @@ text: .text%__1cFKlassMset_subklass6MpnMklassOopDesc__v_; text: .text%__1cOGenerateOopMapLmerge_state6Fp0ipi_v_; text: .text%__1cMTypeKlassPtrFxdual6kM_pknEType__; text: .text%__1cQSystemDictionaryVdefine_instance_class6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cSinstanceKlassKlassXallocate_instance_klass6MiiiinNReferenceType_pnGThread__pnMklassOopDesc__; text: .text%__1cPClassFileParserbBcheck_final_method_override6FnTinstanceKlassHandle_pnGThread__v_; text: .text%__1cJCodeCachebKnumber_of_nmethods_with_dependencies6F_i_; text: .text%__1cNinstanceKlassQinit_implementor6M_v_; text: .text%__1cPClassFileStream2t6MpCipc_v_; text: .text%__1cNinstanceKlassSprocess_interfaces6MpnGThread__v_; text: .text%__1cNinstanceKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cKoopFactoryRnew_instanceKlass6FiiiinNReferenceType_pnGThread__pnMklassOopDesc__; text: .text%__1cNinstanceKlassWdo_local_static_fields6MpFpnPfieldDescriptor_pnGThread__v4_v_; text: .text%__1cPClassFileParserMsort_methods6MnOobjArrayHandle_111pnGThread__nPtypeArrayHandle__; text: .text%__1cFKlassKsuperklass6kM_pnNinstanceKlass__; @@ -1561,22 +1524,17 @@ text: .text%__1cISubINodeJideal_reg6kM_I_: classes.o; text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_: instanceKlass.o; text: .text%__1cNinstanceKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlass.o; text: .text%__1cHMemNodeHsize_of6kM_I_; -text: .text%__1cFVTuneQstart_class_load6F_v_; text: .text%__1cSThreadProfilerMark2T6M_v_; -text: .text%__1cFVTuneOend_class_load6F_v_; text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__; text: .text%__1cJEventMark2t6MpkcE_v_: classLoader.o; text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_; text: .text%__1cQSystemDictionaryRload_shared_class6FnTinstanceKlassHandle_nGHandle_pnGThread__1_; -text: .text%__1cKklassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cPClassFileParserbKparse_classfile_sourcefile_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; text: .text%__1cQmodI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cLRShiftINodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cKCMoveINodeGOpcode6kM_i_; text: .text%__1cLLShiftLNodeGOpcode6kM_i_; text: .text%__1cYcompareAndSwapL_boolNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSinstanceKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cNinstanceKlassScopy_static_fields6MpnSPSPromotionManager__v_; text: .text%__1cMtlsLoadPNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFStateQ_sub_Op_URShiftI6MpknENode__v_; text: .text%__1cKcmpOpUOperGnegate6M_v_: ad_sparc_clone.o; @@ -1626,7 +1584,6 @@ text: .text%__1cTOopMapForCacheEntryZfill_stackmap_for_opcodes6MpnOBytecodeStrea text: .text%__1cSaddL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cQshrL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cKstoreLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNSharedRuntimebKexception_handler_for_return_address6FpC_1_; text: .text%__1cILoopNodeHsize_of6kM_I_: classes.o; text: .text%__1cHMatcherLfind_shared6MpnENode__v_; text: .text%__1cJStartNodeHsize_of6kM_I_; @@ -1643,8 +1600,6 @@ text: .text%__1cRcompL_reg_conNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cMLinkResolverbHlookup_instance_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; text: .text%__1cMnegF_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cNSharedRuntimebWnative_method_throw_unsatisfied_link_error_entry6F_pC_; -text: .text%__1cTStackWalkCompPolicyYmethod_back_branch_event6MnMmethodHandle_iipnGThread__v_; -text: .text%__1cRCompilationPolicybJreset_counter_for_back_branch_event6MnMmethodHandle__v_; text: .text%__1cOMethodLivenessQcompute_liveness6M_v_; text: .text%__1cOMethodLiveness2t6MpnFArena_pnIciMethod__v_; text: .text%__1cOMethodLivenessNinit_gen_kill6M_v_; @@ -1654,7 +1609,6 @@ text: .text%__1cIGraphKitHopt_iff6MpnENode_2_2_; text: .text%__1cLRShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cJTimeStampGupdate6M_v_; text: .text%__1cRmethodDataOopDescKmileage_of6FpnNmethodOopDesc__i_; -text: .text%__1cWconstantPoolCacheKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cMloadConDNodeIpipeline6kM_pknIPipeline__; text: .text%__1cFParseQarray_addressing6MnJBasicType_ippknEType__pnENode__; text: .text%__1cNloadConP0NodeLout_RegMask6kM_rknHRegMask__; @@ -1673,7 +1627,6 @@ text: .text%__1cWstatic_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInf text: .text%__1cNflagsRegLOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cYciExceptionHandlerStreamPcount_remaining6M_i_; text: .text%__1cFParseXcatch_inline_exceptions6MpnNSafePointNode__v_; -text: .text%__1cRconstantPoolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cNobjArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; text: .text%__1cKcmpOpUOperNgreater_equal6kM_i_: ad_sparc_clone.o; text: .text%JVM_GetFieldIxModifiers; @@ -1698,7 +1651,6 @@ text: .text%__1cKo0RegPOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cIregDOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cNmethodOopDescTverified_code_entry6M_pC_; text: .text%__1cNSharedRuntimeXfind_callee_info_helper6FpnKJavaThread_rnMvframeStream_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cPBytecode_invokeFindex6kM_i_; text: .text%__1cLRethrowNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cSPSKeepAliveClosureGdo_oop6MppnHoopDesc__v_: psScavenge.o; text: .text%__1cFParseFBlockRsuccessor_for_bci6Mi_p1_; @@ -1736,7 +1688,6 @@ text: .text%__1cJCodeCacheMfind_nmethod6Fpv_pnHnmethod__; text: .text%__1cOPhaseIdealLoopMdominated_by6MpnENode_2_v_; text: .text%__1cQshlI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cFParseNthrow_to_exit6MpnNSafePointNode__v_; -text: .text%__1cQinstanceRefKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cVConstantOopWriteValueIwrite_on6MpnUDebugInfoWriteStream__v_; text: .text%__1cJVectorSetGslamin6Mrk0_v_; text: .text%JVM_Clone; @@ -1772,7 +1723,6 @@ text: .text%__1cXmembar_release_lockNodeIadr_type6kM_pknHTypePtr__; text: .text%__1cJNode_ListEyank6MpnENode__v_; text: .text%__1cMPhaseChaitinISimplify6M_v_; text: .text%__1cNIdealLoopTreeIset_nest6MI_i_; -text: .text%__1cSCallLeafDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cIMulLNodeImul_ring6kMpknEType_3_3_; text: .text%__1cMStartOSRNodeGOpcode6kM_i_; text: .text%__1cSCallLeafDirectNodeLout_RegMask6kM_rknHRegMask__; @@ -1792,7 +1742,6 @@ text: .text%__1cSMemBarVolatileNodeGOpcode6kM_i_; text: .text%__1cLstoreB0NodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cRshrI_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc__pc_; -text: .text%__1cRcmpFastUnlockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNSafePointNodeLpop_monitor6M_v_; text: .text%__1cMPhaseChaitinVfind_base_for_derived6MppnENode_2rI_2_; text: .text%__1cLOptoRuntimebAcomplete_monitor_exit_Type6F_pknITypeFunc__; @@ -1824,8 +1773,6 @@ text: .text%__1cOGenerateOopMapGdo_ldc6Mii_v_; text: .text%__1cJCMoveNodeLis_cmove_id6FpnOPhaseTransform_pnENode_44pnIBoolNode__4_; text: .text%__1cKTypeAryPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; text: .text%__1cOPhaseIdealLoopKDominators6M_v_; -text: .text%__1cOPhaseIdealLoopPbuild_loop_late6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_; -text: .text%__1cOPhaseIdealLoopQbuild_loop_early6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_; text: .text%jni_NewGlobalRef: jni.o; text: .text%__1cTciConstantPoolCache2t6MpnFArena_i_v_; text: .text%__1cIAndINodeJideal_reg6kM_I_: classes.o; @@ -1981,10 +1928,8 @@ text: .text%__1cFciEnvKcompile_id6M_I_; text: .text%__1cPmethodDataKlassIallocate6MnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; text: .text%__1cKoopFactoryOnew_methodData6FnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; text: .text%__1cIAndLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKCodeBuffer2t6MpCi_v_; text: .text%__1cVshrL_reg_imm6_L2INodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cLConvL2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIciMethodRinstructions_size6M_i_; text: .text%__1cSmulI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cCosXthread_local_storage_at6Fi_pv_; text: .text%__1cMindIndexOperNconstant_disp6kM_i_: ad_sparc.o; @@ -2013,7 +1958,6 @@ text: .text%__1cLOpaque2NodeLbottom_type6kM_pknEType__: connode.o; text: .text%__1cSconvI2D_helperNodeIpipeline6kM_pknIPipeline__; text: .text%__1cUPSGenerationCountersKupdate_all6M_v_: psGenerationCounters.o; text: .text%__1cQComputeCallStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cKTypeOopPtrSmake_from_constant6FpnIciObject__pk0_; text: .text%__1cQregP_to_stkPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cOGenerateOopMapHppstore6MpnNCellTypeState_i_v_; text: .text%__1cJTimeStampSticks_since_update6kM_x_; @@ -2038,7 +1982,6 @@ text: .text%__1cIXorINodeGadd_id6kM_pknEType__: classes.o; text: .text%__1cFStateM_sub_Op_AndI6MpknENode__v_; text: .text%__1cVshrL_reg_imm6_L2INodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKcmpOpFOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cLRuntimeStubHoops_do6MpnKOopClosure__v_: codeBlob.o; text: .text%__1cTmembar_volatileNodeIpipeline6kM_pknIPipeline__; text: .text%__1cJloadFNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFStateL_sub_Op_OrI6MpknENode__v_; @@ -2066,7 +2009,6 @@ text: .text%__1cJttyLockerbCbreak_tty_lock_for_safepoint6Fi_v_; text: .text%__1cSmembar_acquireNodeIadr_type6kM_pknHTypePtr__; text: .text%__1cPorI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIPhaseCFGOinsert_goto_at6MII_v_; -text: .text%__1cITypeLongFwiden6kMpknEType__3_; text: .text%__1cSThreadLocalStoragePget_thread_slow6F_pnGThread__; text: .text%__1cPCallRuntimeNodeGOpcode6kM_i_; text: .text%__1cJcmpOpOperNgreater_equal6kM_i_: ad_sparc_clone.o; @@ -2097,7 +2039,6 @@ text: .text%__1cSTailCalljmpIndNodePoper_input_base6kM_I_: ad_sparc_misc.o; text: .text%__1cKstoreLNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cGIfNodeMdominated_by6MpnENode_pnMPhaseIterGVN__v_; text: .text%__1cOcompiledVFrame2t6MpknFframe_pknLRegisterMap_pnKJavaThread_pnJScopeDesc__v_; -text: .text%__1cJScopeDesc2t6MpknHnmethod_i_v_; text: .text%__1cQshlI_reg_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cOGenerateOopMapJdo_astore6Mi_v_; text: .text%__1cbFunnecessary_membar_volatileNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; @@ -2127,7 +2068,6 @@ text: .text%__1cLBoxLockNode2t6Mi_v_; text: .text%__1cPconvF2D_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cLOptoRuntimebBcomplete_monitor_enter_Type6F_pknITypeFunc__; text: .text%__1cIGraphKitLshared_lock6MpnENode__pnMFastLockNode__; -text: .text%__1cPcmpFastLockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNloadConP0NodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cRorI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cKcmpOpUOperEless6kM_i_: ad_sparc_clone.o; @@ -2135,7 +2075,6 @@ text: .text%__1cQaddF_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cRLowMemoryDetectorWdetect_after_gc_memory6FpnKMemoryPool__v_; text: .text%lwp_mutex_init: os_solaris.o; text: .text%__1cRsubI_zero_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFframeLnmethods_do6M_v_; text: .text%__1cQjava_lang_ThreadGthread6FpnHoopDesc__pnKJavaThread__; text: .text%__1cQnotemp_iRegIOperEtype6kM_pknEType__: ad_sparc.o; text: .text%__1cITemplateIbytecode6kM_nJBytecodesECode__; @@ -2178,7 +2117,6 @@ text: .text%__1cKManagementJtimestamp6F_x_; text: .text%__1cIPSOldGenPupdate_counters6M_v_; text: .text%__1cQshrI_reg_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cFForteNregister_stub6FpkcpC3_v_; -text: .text%__1cFVTuneNregister_stub6FpkcpC3_v_; text: .text%__1cNinstanceKlassbFlookup_method_in_all_interfaces6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; text: .text%__1cTloadL_unalignedNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cJloadLNodeOmemory_operand6kM_pknIMachOper__; @@ -2249,11 +2187,9 @@ text: .text%__1cSmembar_acquireNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_; text: .text%__1cVExceptionHandlerTableHcopy_to6MpnHnmethod__v_; text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_; -text: .text%__1cFVTuneOcreate_nmethod6FpnHnmethod__v_; text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_; text: .text%__1cFciEnvVnum_inlined_bytecodes6kM_i_; text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cLOopRecorderHcopy_to6MpnICodeBlob__v_; text: .text%__1cIciMethodRbuild_method_data6M_v_; text: .text%__1cHCompileIOptimize6M_v_; text: .text%__1cHCompileLFinish_Warm6M_v_; @@ -2365,7 +2301,6 @@ text: .text%__1cQmulF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cQxorI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cWCallLeafNoFPDirectNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cLcmpD_ccNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cWCallLeafNoFPDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJloadINodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cbBopt_virtual_call_RelocationLstatic_stub6M_pC_; text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFi_vi_v_; @@ -2392,8 +2327,6 @@ text: .text%__1cSandI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIimmLOperJnum_edges6kM_I_: ad_sparc_clone.o; text: .text%__1cFParseOmerge_new_path6Mi_v_; text: .text%__1cQregP_to_stkPNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cQjava_lang_StringGoffset6FpnHoopDesc__i_; -text: .text%__1cQjava_lang_StringFvalue6FpnHoopDesc__pnQtypeArrayOopDesc__; text: .text%__1cQjava_lang_StringScreate_from_symbol6FnMsymbolHandle_pnGThread__nGHandle__; text: .text%__1cSmembar_releaseNodeLout_RegMask6kM_rknHRegMask__; text: .text%jni_NewByteArray: jni.o; @@ -2402,7 +2335,6 @@ text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMs text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_; text: .text%__1cKDictionaryVadd_protection_domain6MiInTinstanceKlassHandle_nGHandle_2pnGThread__v_; text: .text%__1cFParseLdo_newarray6MnJBasicType__v_; -text: .text%__1cPmethodDataKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cNmethodOopDescKklass_name6kM_pnNsymbolOopDesc__; text: .text%__1cSconvI2D_helperNodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cLstoreP0NodeLout_RegMask6kM_rknHRegMask__; @@ -2454,7 +2386,6 @@ text: .text%__1cJScopeDescGsender6kM_p0_; text: .text%__1cSxorI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cOcompiledVFrameGsender6kM_pnGvframe__; text: .text%__1cZInterpreterMacroAssemblerDpop6MnITosState__v_; -text: .text%__1cGThreadHoops_do6MpnKOopClosure__v_; text: .text%__1cQPlaceholderTableHoops_do6MpnKOopClosure__v_; text: .text%__1cXJvmtiCurrentBreakpointsHoops_do6FpnKOopClosure__v_; text: .text%__1cNMemoryServiceHoops_do6FpnKOopClosure__v_; @@ -2462,7 +2393,6 @@ text: .text%__1cNThreadServiceHoops_do6FpnKOopClosure__v_; text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_; text: .text%__1cQSystemDictionaryRpreloaded_oops_do6FpnKOopClosure__v_; text: .text%__1cLJvmtiExportHoops_do6FpnKOopClosure__v_; -text: .text%__1cIVMThreadHoops_do6MpnKOopClosure__v_; text: .text%__1cKJNIHandlesMweak_oops_do6FpnRBoolObjectClosure_pnKOopClosure__v_; text: .text%__1cSObjectSynchronizerHoops_do6FpnKOopClosure__v_; text: .text%__1cMFlatProfilerHoops_do6FpnKOopClosure__v_; @@ -2510,8 +2440,6 @@ text: .text%__1cMTypeKlassPtrFxmeet6kMpknEType__3_; text: .text%__1cKPSYoungGenPupdate_counters6M_v_; text: .text%__1cWThreadLocalAllocBufferbFaccumulate_statistics_before_gc6F_v_; text: .text%__1cWThreadLocalAllocBufferQresize_all_tlabs6F_v_; -text: .text%__1cPGCMemoryManagerIgc_begin6M_v_; -text: .text%__1cPGCMemoryManagerGgc_end6M_v_; text: .text%__1cRLowMemoryDetectorRdetect_low_memory6F_v_; text: .text%__1cNMemoryServiceStrack_memory_usage6F_v_; text: .text%__1cbAPSGCAdaptivePolicyCountersPupdate_counters6M_v_; @@ -2527,7 +2455,6 @@ text: .text%__1cORuntimeServicebDrecord_safepoint_synchronized6F_v_; text: .text%__1cQaddF_reg_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cUSafepointSynchronizeFbegin6F_v_; text: .text%__1cKarrayKlassTallocate_arrayArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cONMethodSweeperFsweep6F_v_; text: .text%__1cCosbAmake_polling_page_readable6F_v_; text: .text%__1cUSafepointSynchronizeDend6F_v_; text: .text%__1cOcmovII_immNodeErule6kM_I_: ad_sparc_misc.o; @@ -2539,7 +2466,6 @@ text: .text%JVM_GetCallerClass; text: .text%__1cNSignatureInfoHdo_byte6M_v_: bytecode.o; text: .text%__1cOcmovPP_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cKstoreBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSobjArrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cLstoreC0NodePoper_input_base6kM_I_: ad_sparc_misc.o; text: .text%__1cTloadL_unalignedNodePoper_input_base6kM_I_: ad_sparc_misc.o; text: .text%__1cICmpFNodeGOpcode6kM_i_; @@ -2551,7 +2477,6 @@ text: .text%jni_IsAssignableFrom: jni.o; text: .text%jni_GetFieldID: jni.o; text: .text%__1cJLoadPNodeMstore_Opcode6kM_i_: classes.o; text: .text%__1cLstoreB0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cZInterpreterMacroAssemblerbAget_cache_and_index_at_bcp6MpnMRegisterImpl_2i_v_; text: .text%__1cHTypeAryFxdual6kM_pknEType__; text: .text%__1cMtlsLoadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIVMThreadHexecute6FpnMVM_Operation__v_; @@ -2626,9 +2551,7 @@ text: .text%__1cJloadSNodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cRloadConP_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNObjectMonitorHRecycle6M_v_; text: .text%__1cNSharedRuntimeSfind_callee_method6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cMloadConLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJloadDNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQSystemDictionaryTresolve_from_stream6FnMsymbolHandle_nGHandle_2pnPClassFileStream_pnGThread__pnMklassOopDesc__; text: .text%__1cQstkI_to_regFNodeIpipeline6kM_pknIPipeline__; text: .text%__1cQregP_to_stkPNodeIpipeline6kM_pknIPipeline__; text: .text%__1cZInterpreterMacroAssemblerFpop_i6MpnMRegisterImpl__v_; @@ -2636,7 +2559,6 @@ text: .text%__1cIMaxINodeGadd_id6kM_pknEType__: classes.o; text: .text%__1cNSharedRuntimeTreresolve_call_site6FpnKJavaThread_pnGThread__nMmethodHandle__; text: .text%__1cYcompareAndSwapL_boolNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNSCMemProjNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cYcompareAndSwapL_boolNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cIProjNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cIPSOldGenMmax_gen_size6M_I_: psOldGen.o; text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcipnNsymbolOopDesc_4_v_; @@ -2855,7 +2777,6 @@ text: .text%__1cOstackSlotPOperEtype6kM_pknEType__: ad_sparc.o; text: .text%jni_GetMethodID: jni.o; text: .text%__1cQshlL_reg_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cIMulINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNminI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cRshlI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cOloadConL13NodeIpipeline6kM_pknIPipeline__; text: .text%__1cNObjectMonitorGnotify6MpnGThread__v_; @@ -2877,7 +2798,6 @@ text: .text%__1cQcmovI_reg_ltNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNloadConL0NodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cKo1RegPOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cSsubL_reg_reg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIBytecodeIset_code6MnJBytecodesECode__v_; text: .text%__1cQshrL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cRsarL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cJloadFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -2948,7 +2868,6 @@ text: .text%__1cFStateM_sub_Op_SubL6MpknENode__v_; text: .text%__1cKCompiledICMstub_address6kM_pC_; text: .text%__1cJvmSymbolsOsignature_type6FpnNsymbolOopDesc__nJBasicType__; text: .text%__1cQsubL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQmodI_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cISubDNodeGOpcode6kM_i_; text: .text%__1cQmodI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cPfieldDescriptorLannotations6kM_pnQtypeArrayOopDesc__; @@ -2986,7 +2905,6 @@ text: .text%__1cRtestI_reg_immNodeIpipeline6kM_pknIPipeline__; text: .text%__1cJMemRegionMintersection6kMk0_0_; text: .text%__1cKJavaThread2t6MpFp0pnGThread__vI_v_; text: .text%__1cKJavaThreadDrun6M_v_; -text: .text%__1cNSafepointBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; text: .text%__1cPjava_lang_ClassOprimitive_type6FpnHoopDesc__nJBasicType__; text: .text%JVM_IsArrayClass; text: .text%jni_CallStaticVoidMethod: jni.o; @@ -3017,14 +2935,12 @@ text: .text%__1cXNativeSignatureIteratorGdo_int6M_v_: interpreterRT_sparc.o; text: .text%__1cINodeHashEgrow6M_v_; text: .text%__1cOGenerateOopMapPdo_monitorenter6Mi_v_; text: .text%__1cOcmovPP_regNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cMloadConDNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cIMaxINodeIadd_ring6kMpknEType_3_3_; text: .text%__1cJloadSNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cOGenerateOopMapLcompute_map6MpnGThread__v_; text: .text%__1cLConvF2DNodeLbottom_type6kM_pknEType__: classes.o; text: .text%JVM_Open; text: .text%__1cRInvocationCounterFreset6M_v_; -text: .text%__1cRCompilationPolicybIreset_counter_for_invocation_event6MnMmethodHandle__v_; text: .text%__1cOGenerateOopMap2t6MnMmethodHandle__v_; text: .text%__1cOGenerateOopMapRdo_interpretation6M_v_; text: .text%__1cIRetTableRcompute_ret_table6MnMmethodHandle__v_; @@ -3144,7 +3060,6 @@ text: .text%__1cLstoreF0NodeIpipeline6kM_pknIPipeline__; text: .text%__1cIMinINodeIadd_ring6kMpknEType_3_3_; text: .text%JVM_GetInheritedAccessControlContext; text: .text%__1cPPerfDataManagerWcreate_string_constant6FnJCounterNS_pkc3pnGThread__pnSPerfStringConstant__; -text: .text%__1cNmaxI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%JVM_NativePath; text: .text%__1cOMacroAssemblerNflush_windows6M_v_; text: .text%__1cSsubD_regD_regDNodeIpipeline6kM_pknIPipeline__; @@ -3157,13 +3072,11 @@ text: .text%__1cVinline_cache_regPOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cKstorePNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cQObjectStartArrayFreset6M_v_; text: .text%__1cPconvI2D_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHThreadsHoops_do6FpnKOopClosure__v_; text: .text%__1cQaddD_reg_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cLConvF2INodeGOpcode6kM_i_; text: .text%__1cVCallRuntimeDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cJHashtableGunlink6MpnRBoolObjectClosure__v_; text: .text%__1cIPSOldGenPadjust_pointers6M_v_; -text: .text%__1cVCallRuntimeDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cOcmovPI_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cIPSOldGenHcompact6M_v_; text: .text%__1cMtlsLoadPNodeEsize6kMpnNPhaseRegAlloc__I_; @@ -3177,7 +3090,6 @@ text: .text%__1cOcmovLL_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%jni_GetStaticMethodID: jni.o; text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MipnMRegisterImpl__v_; text: .text%__1cRtestI_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHnmethodbAmake_not_entrant_or_zombie6Mi_v_; text: .text%__1cPconvF2D_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cOPhaseIdealLoopKdo_peeling6MpnNIdealLoopTree_rnJNode_List__v_; text: .text%__1cOcmovLL_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; @@ -3290,7 +3202,6 @@ text: .text%__1cINegDNodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cLConvI2FNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cOcmovLL_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cRorI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTloadL_unalignedNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cTloadL_unalignedNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cKloadUBNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cXconvI2D_regDHi_regDNodeIpipeline6kM_pknIPipeline__; @@ -3371,7 +3282,6 @@ text: .text%__1cYjava_lang_reflect_MethodEslot6FpnHoopDesc__i_; text: .text%__1cYjava_lang_reflect_MethodFclazz6FpnHoopDesc__2_; text: .text%__1cYinternal_word_RelocationGtarget6M_pC_; text: .text%__1cJStubQdDueueKremove_all6M_v_; -text: .text%__1cMloadConFNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cPconvI2D_memNodeIpipeline6kM_pknIPipeline__; text: .text%__1cPorL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cZInterpreterMacroAssemblerLindex_check6MpnMRegisterImpl_2i22_v_; @@ -3405,12 +3315,10 @@ text: .text%__1cSInterpreterRuntimeQcreate_exception6FpnKJavaThread_pc3_v_; text: .text%__1cQComputeCallStackIdo_array6Mii_v_: generateOopMap.o; text: .text%__1cKPSYoungGenKprecompact6M_v_; text: .text%__1cXjava_lang_reflect_FieldEslot6FpnHoopDesc__i_; -text: .text%__1cSconvD2I_helperNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cMnegF_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cHThreadsLgc_prologue6F_v_; text: .text%__1cHThreadsLgc_epilogue6F_v_; text: .text%__1cPconvI2L_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cPconvD2I_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_pnGThread__v_; text: .text%__1cUParallelScavengeHeapHcollect6MnHGCCauseFCause__v_; text: .text%__1cRCardTableModRefBSFclear6MnJMemRegion__v_; @@ -3449,10 +3357,6 @@ text: .text%__1cKPSYoungGenHcompact6M_v_; text: .text%JVM_GetSystemPackage; text: .text%__1cPfieldDescriptorTfloat_initial_value6kM_f_; text: .text%__1cKPSYoungGenPadjust_pointers6M_v_; -text: .text%__1cQUncommonTrapBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cSDeoptimizationBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cNExceptionBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cJCodeCacheHoops_do6FpnKOopClosure__v_; text: .text%__1cJCodeCacheLgc_prologue6F_v_; text: .text%__1cJCodeCacheLgc_epilogue6F_v_; text: .text%__1cIXorINodeIadd_ring6kMpknEType_3_3_; @@ -3508,16 +3412,13 @@ text: .text%__1cSstring_compareNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%jni_GetEnv; text: .text%__1cJloadDNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cQstkI_to_regINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSstring_compareNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cXNativeSignatureIteratorHdo_bool6M_v_: interpreterRT_sparc.o; text: .text%Unsafe_GetNativeByte; text: .text%JVM_NanoTime; text: .text%__1cCosNjavaTimeNanos6F_x_; text: .text%__1cOMacroAssemblerOrestore_thread6MkpnMRegisterImpl__v_; -text: .text%__1cVcompiledICHolderKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cQandL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cIimmFOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cHThreadsLnmethods_do6F_v_; text: .text%__1cKcmpOpFOperGnegate6M_v_: ad_sparc_clone.o; text: .text%__1cICodeBlobFflush6M_v_; text: .text%__1cFParseMdo_anewarray6M_v_; @@ -3537,8 +3438,6 @@ text: .text%__1cHnmethodSflush_dependencies6MpnRBoolObjectClosure__v_; text: .text%__1cKo2RegPOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cQregI_to_stkINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_method_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cParrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cFVTuneOdelete_nmethod6FpnHnmethod__v_; text: .text%__1cWloadConI_x43300000NodeIpipeline6kM_pknIPipeline__; text: .text%__1cFParseQdo_monitor_enter6M_v_; text: .text%__1cPorL_reg_regNodeIpipeline6kM_pknIPipeline__; @@ -3547,13 +3446,11 @@ text: .text%JVM_FindPrimitiveClass; text: .text%__1cVMoveL2D_stack_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cNTemplateTableEiop26Fn0AJOperation__v_; text: .text%__1cZInterpreterMacroAssemblerMdispatch_via6MnITosState_ppC_v_; -text: .text%__1cSmodL_reg_imm13NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cRshrI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; text: .text%__1cSsubL_reg_reg_2NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cUmulL_reg_imm13_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIDivDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPconvI2F_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNinstanceKlassUfind_interface_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; text: .text%__1cOstackSlotFOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cUdivL_reg_imm13_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -3561,7 +3458,6 @@ text: .text%__1cRSignatureIteratorHiterate6M_v_; text: .text%__1cOcmovLL_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; text: .text%__1cJname2type6Fpkc_nJBasicType__; text: .text%__1cSmulL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPBytecode_invokeLresult_type6kMpnGThread__nJBasicType__; text: .text%__1cOloadConL13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cKcmpOpFOperHgreater6kM_i_: ad_sparc_clone.o; text: .text%__1cIDivDNodeJideal_reg6kM_I_: classes.o; @@ -3589,7 +3485,6 @@ text: .text%__1cNTemplateTableQfast_accessfield6FnITosState__v_; text: .text%__1cKCompiledICSset_to_megamorphic6MpnICallInfo_nJBytecodesECode_pnGThread__v_; text: .text%Unsafe_StaticFieldOffset; text: .text%__1cQmulI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cNTemplateTableXresolve_cache_and_index6FipnMRegisterImpl_2_v_; text: .text%__1cQaddI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cOcmovLI_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; text: .text%JVM_GetClassContext; @@ -3725,7 +3620,6 @@ text: .text%__1cQmulD_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%Unsafe_AllocateMemory; text: .text%__1cSandL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%JVM_GetLastErrorString; -text: .text%__1cQmodL_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNTemplateTableElop26Fn0AJOperation__v_; text: .text%__1cQjava_lang_ThreadKset_daemon6FpnHoopDesc__v_; text: .text%__1cNTemplateTableEfop26Fn0AJOperation__v_; @@ -3738,7 +3632,6 @@ text: .text%__1cNTemplateTableGlstore6Fi_v_; text: .text%__1cLConvF2INodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_; text: .text%__1cRcompL_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cLconvI2BNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cLConvD2FNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cSconvD2I_helperNodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cRsubI_zero_regNodeHsize_of6kM_I_: ad_sparc_misc.o; @@ -3775,7 +3668,6 @@ text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC22_v_; text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC2_v_; text: .text%__1cTjava_lang_ThrowableLset_message6FpnHoopDesc_2_v_; text: .text%__1cOGenerateOopMapTret_jump_targets_do6MpnOBytecodeStream_pFp0ipi_vi4_v_; -text: .text%__1cPconvI2D_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%Unsafe_SetMemory; text: .text%__1cKstfSSFNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cZInterpreterMacroAssemblerOthrow_if_not_x6MnJAssemblerJCondition_pCpnMRegisterImpl__v_; @@ -3798,7 +3690,6 @@ text: .text%__1cRMachSpillCopyNodeHsize_of6kM_I_: ad_sparc.o; text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_; text: .text%__1cOGenerateOopMapRdo_multianewarray6Mii_v_; text: .text%__1cNCompileBrokerUcompiler_thread_loop6F_v_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%jni_CallStaticObjectMethodV: jni.o; text: .text%__1cNTemplateTableMfast_xaccess6FnITosState__v_; text: .text%__1cJMemRegionFminus6kMk0_0_; @@ -3857,13 +3748,10 @@ text: .text%__1cLstoreF0NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cZInterpreterMacroAssemblerWprofile_switch_default6MpnMRegisterImpl__v_; text: .text%__1cTAbstract_VM_VersionOvm_info_string6F_pkc_; text: .text%__1cJStubQdDueue2t6MpnNStubInterface_ipnFMutex_pkc_v_; -text: .text%__1cSconvF2I_helperNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cHThreadsbFdeoptimized_wrt_marked_nmethods6F_v_; -text: .text%__1cbAconvL2D_reg_slow_fxtofNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cOstackSlotFOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; text: .text%__1cOstackSlotFOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; text: .text%__1cOstackSlotFOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cPconvF2I_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNTemplateTableGlconst6Fi_v_; text: .text%__1cLstoreC0NodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cMPeriodicTaskGenroll6M_v_; @@ -3913,7 +3801,6 @@ text: .text%__1cLMoveF2INodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cLOptoRuntimeIl2f_Type6F_pknITypeFunc__; text: .text%__1cOMacroAssemblerUcalc_mem_param_words6MpnMRegisterImpl_2_v_; text: .text%__1cZInterpreterMacroAssemblerLprofile_ret6MnITosState_pnMRegisterImpl_3_v_; -text: .text%__1cZInterpreterMacroAssemblerUprofile_virtual_call6MpnMRegisterImpl_2_v_; text: .text%__1cZInterpreterMacroAssemblerMprofile_call6MpnMRegisterImpl__v_; text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_; text: .text%__1cZInterpreterMacroAssemblerSupdate_mdp_for_ret6MnITosState_pnMRegisterImpl__v_; @@ -4001,16 +3888,13 @@ text: .text%__1cSThreadLocalStorageHpd_init6F_v_; text: .text%__1cVMoveF2I_stack_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cVMoveL2D_stack_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cWinvocationCounter_init6F_v_; -text: .text%__1cKTypeOopPtrEmake6FnHTypePtrDPTR_i_pk0_; text: .text%__1cKTypeOopPtrFxdual6kM_pknEType__; text: .text%__1cFParseMjump_if_join6MpnENode_2_2_; text: .text%__1cSinstanceKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; text: .text%__1cSinstanceKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlassKlass.o; -text: .text%__1cLconvP2BNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cETypeRInitialize_shared6FpnHCompile__v_; text: .text%__1cQinstanceRefKlassZupdate_nonstatic_oop_maps6FpnMklassOopDesc__v_; text: .text%__1cVInterfaceSupport_init6F_v_; -text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpnMRegisterImpl_pC2_v_; text: .text%__1cPGenerationSizerQinitialize_flags6M_v_: parallelScavengeHeap.o; text: .text%__1cZInterpreterMacroAssemblerPdispatch_normal6MnITosState__v_; text: .text%__1cJTimeStampMmilliseconds6kM_x_; @@ -4103,11 +3987,9 @@ text: .text%__1cLmethodKlassOset_alloc_size6MI_v_: methodKlass.o; text: .text%__1cQvtableStubs_init6F_v_; text: .text%__1cKi0RegPOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cKg1RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFVTuneEexit6F_v_; text: .text%__1cLmethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodKlass.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: methodLiveness.o; text: .text%__1cMMutableSpaceOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cKvtune_init6F_v_; text: .text%__1cKmutex_init6F_v_; text: .text%__1cQaccessFlags_init6F_v_; text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC222_v_; @@ -4440,7 +4322,6 @@ text: .text%__1cNTemplateTableLtableswitch6F_v_; text: .text%__1cNTemplateTableMlookupswitch6F_v_; text: .text%__1cNTemplateTableRfast_linearswitch6F_v_; text: .text%__1cNTemplateTableRfast_binaryswitch6F_v_; -text: .text%__1cNCompileBrokerVinit_compiler_threads6Fi_v_; text: .text%__1cJPSPermGen2t6MnNReservedSpace_IIIIpkci_v_; text: .text%__1cNCompileBrokerQset_should_block6F_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compileBroker.o; diff --git a/hotspot/make/solaris/makefiles/reorder_TIERED_sparcv9 b/hotspot/make/solaris/makefiles/reorder_TIERED_sparcv9 index 15c03b78514..cc44a252232 100644 --- a/hotspot/make/solaris/makefiles/reorder_TIERED_sparcv9 +++ b/hotspot/make/solaris/makefiles/reorder_TIERED_sparcv9 @@ -2,9 +2,7 @@ data = R0x2000; text = LOAD ?RXO; -text: .text%__1cCosOjavaTimeMillis6F_x_; text: .text%__1cQIndexSetIteratorQadvance_and_next6M_I_; -text: .text%__1cNinstanceKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cNinstanceKlassToop_adjust_pointers6MpnHoopDesc__i_; text: .text%__1cNinstanceKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cOtypeArrayKlassToop_adjust_pointers6MpnHoopDesc__i_; @@ -18,11 +16,9 @@ text: .text%__1cENodeHlatency6MI_I_; text: .text%__1cHRegMaskJis_bound16kM_i_; text: .text%__1cDff16FI_i_; text: .text%__1cHRegMaskESize6kM_I_; -text: .text%__1cXresource_allocate_bytes6FI_pc_; text: .text%__1cENodeIpipeline6kM_pknIPipeline__; text: .text%__1cJVectorSet2R6MI_rnDSet__; text: .text%__1cHRegMaskJis_bound26kM_i_; -text: .text%__1cNSharedRuntimeElmul6Fxx_x_; text: .text%__1cIMachNodeGOpcode6kM_i_; text: .text%__1cJiRegIOperEtype6kM_pknEType__: ad_sparc.o; text: .text%__1cIIndexSetKinitialize6MI_v_; @@ -33,7 +29,6 @@ text: .text%__1cETypeFuhash6Fkpk0_i_; text: .text%__1cQIndexSetIteratorEnext6M_I_: chaitin.o; text: .text%__1cENodeIout_grow6MI_v_; text: .text%__1cOloadConI13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cNobjArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cENodeHadd_req6Mp0_v_; text: .text%__1cJMarkSweepUAdjustPointerClosureGdo_oop6MppnHoopDesc__v_: markSweep.o; text: .text%__1cNobjArrayKlassToop_follow_contents6MpnHoopDesc__v_; @@ -45,7 +40,6 @@ text: .text%__1cHPhiNodeGOpcode6kM_i_; text: .text%__1cKbranchNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; text: .text%__1cIProjNodeGOpcode6kM_i_; text: .text%__1cETypeIhashcons6M_pk0_; -text: .text%__1cOPhaseIdealLoopUbuild_loop_late_post6MpnENode_pk0_v_; text: .text%__1cMPhaseChaitinTinterfere_with_live6MIpnIIndexSet__v_; text: .text%__1cWNode_Backward_IteratorEnext6M_pnENode__; text: .text%__1cNIdealLoopTreeJis_member6kMpk0_i_; @@ -56,7 +50,6 @@ text: .text%__1cOPhaseIdealLoopYsplit_if_with_blocks_pre6MpnENode__2_; text: .text%__1cOPhaseIdealLoopZsplit_if_with_blocks_post6MpnENode__v_; text: .text%__1cIUniverseMnon_oop_word6F_pv_; text: .text%__1cDLRGOcompute_degree6kMr0_i_; -text: .text%__1cFArenaIArealloc6MpvII_1_; text: .text%__1cIConINodeGOpcode6kM_i_; text: .text%__1cETypeEmeet6kMpk0_2_; text: .text%__1cENode2t6MI_v_; @@ -91,7 +84,6 @@ text: .text%__1cOPhaseIdealLoopEsort6MpnNIdealLoopTree_2_2_; text: .text%__1cMMachProjNodeLbottom_type6kM_pknEType__; text: .text%JVM_ArrayCopy; text: .text%__1cOtypeArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; -text: .text%__1cNSharedRuntimeDl2f6Fx_f_; text: .text%__1cPjava_lang_ClassLas_klassOop6FpnHoopDesc__pnMklassOopDesc__; text: .text%__1cHConNodeGOpcode6kM_i_; text: .text%__1cMPhaseIterGVNWadd_users_to_worklist06MpnENode__v_; @@ -129,7 +121,6 @@ text: .text%__1cMMachProjNodeLout_RegMask6kM_rknHRegMask__: classes.o; text: .text%__1cRMachSpillCopyNodeKin_RegMask6kMI_rknHRegMask__: ad_sparc.o; text: .text%__1cbAfinal_graph_reshaping_impl6FpnENode_rnUFinal_Reshape_Counts__v_: compile.o; text: .text%__1cOtypeArrayKlassIallocate6MipnGThread__pnQtypeArrayOopDesc__; -text: .text%__1cUParallelScavengeHeapVlarge_typearray_limit6M_I_: parallelScavengeHeap.o; text: .text%__1cIPhaseCCPOtransform_once6MpnENode__2_; text: .text%__1cGciTypeEmake6FnJBasicType__p0_; text: .text%__1cKoopFactoryNnew_typeArray6FnJBasicType_ipnGThread__pnQtypeArrayOopDesc__; @@ -154,7 +145,6 @@ text: .text%__1cETypeFxmeet6kMpk0_2_; text: .text%__1cILRG_ListGextend6MII_v_; text: .text%__1cJVectorSet2F6kMI_i_; text: .text%__1cENodeQIdeal_DU_postCCP6MpnIPhaseCCP__p0_; -text: .text%__1cOtypeArrayKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cIProjNodeEhash6kM_I_; text: .text%__1cIAddINodeGOpcode6kM_i_; text: .text%__1cIIndexSet2t6Mp0_v_; @@ -168,7 +158,6 @@ text: .text%__1cICmpPNodeGOpcode6kM_i_; text: .text%__1cKNode_ArrayGremove6MI_v_; text: .text%__1cHPhiNodeEhash6kM_I_; text: .text%__1cLSymbolTableGlookup6FpkcipnGThread__pnNsymbolOopDesc__; -text: .text%__1cKoopFactoryKnew_symbol6FpkcipnGThread__pnNsymbolOopDesc__; text: .text%__1cKmethodOperJnum_edges6kM_I_: ad_sparc.o; text: .text%__1cJStartNodeLbottom_type6kM_pknEType__; text: .text%__1cHTypeIntFxmeet6kMpknEType__3_; @@ -206,11 +195,7 @@ text: .text%__1cKSchedulingPAddNodeToBundle6MpnENode_pknFBlock__v_; text: .text%__1cICallNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cTconstantPoolOopDescNklass_at_impl6FnSconstantPoolHandle_ipnGThread__pnMklassOopDesc__; text: .text%__1cJLoadPNodeGOpcode6kM_i_; -text: .text%__1cMMutableSpaceIallocate6MI_pnIHeapWord__; -text: .text%__1cJPSPermGenSallocate_permanent6MI_pnIHeapWord__; -text: .text%__1cUParallelScavengeHeapWpermanent_mem_allocate6MI_pnIHeapWord__; text: .text%__1cIMachNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cMMutableSpaceMcas_allocate6MI_pnIHeapWord__; text: .text%__1cNflagsRegPOperEtype6kM_pknEType__: ad_sparc.o; text: .text%__1cHPhiNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cMMachTypeNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; @@ -235,7 +220,6 @@ text: .text%__1cICmpUNodeGOpcode6kM_i_; text: .text%__1cOPhaseIdealLoopbIdom_lca_for_get_late_ctrl_internal6MpnENode_22_2_; text: .text%__1cXPipeline_Use_Cycle_MaskCOr6Mrk0_v_; text: .text%__1cILoadNodeEhash6kM_I_; -text: .text%__1cKTypeAryPtrKadd_offset6kMi_pknHTypePtr__; text: .text%__1cKHandleMarkKinitialize6MpnGThread__v_; text: .text%__1cKHandleMark2T6M_v_; text: .text%__1cZPhaseConservativeCoalesceIcoalesce6MpnFBlock__v_; @@ -263,7 +247,6 @@ text: .text%__1cJMultiNodeIproj_out6kMI_pnIProjNode__; text: .text%__1cPindOffset13OperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cUcompI_iReg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cODataRelocationJset_value6MpC_v_: relocInfo.o; -text: .text%__1cKRelocationRpd_set_data_value6MpCi_v_; text: .text%__1cKCastPPNodeGOpcode6kM_i_; text: .text%__1cOoop_RelocationFvalue6M_pC_: relocInfo.o; text: .text%__1cOoop_RelocationGoffset6M_i_: relocInfo.o; @@ -284,7 +267,6 @@ text: .text%__1cNbranchConNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cOoop_RelocationSfix_oop_relocation6M_v_; text: .text%__1cRSignatureIteratorSiterate_parameters6M_v_; text: .text%__1cIAddPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cGBitMap2t6MpII_v_; text: .text%__1cPClassFileStreamGget_u46MpnGThread__I_; text: .text%__1cMMachCallNodeLbottom_type6kM_pknEType__; text: .text%__1cFParsePdo_one_bytecode6M_v_; @@ -292,7 +274,6 @@ text: .text%__1cFParseNdo_exceptions6M_v_; text: .text%__1cHPhiNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cHMatcherKmatch_tree6MpknENode__pnIMachNode__; text: .text%__1cMPhaseIterGVNKis_IterGVN6M_p0_: phaseX.o; -text: .text%__1cKimmI13OperIconstant6kM_i_: ad_sparc_clone.o; text: .text%__1cCosVcurrent_stack_pointer6F_pC_; text: .text%__1cEDict2F6kMpkv_pv_; text: .text%__1cKRegionNodeLbottom_type6kM_pknEType__: classes.o; @@ -320,7 +301,6 @@ text: .text%__1cRSignatureIteratorSiterate_returntype6M_v_; text: .text%__1cSaddP_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cIMachNodeHtwo_adr6kM_I_: ad_sparc.o; text: .text%__1cNSafePointNodeHsize_of6kM_I_; -text: .text%__1cLTypeInstPtrKadd_offset6kMi_pknHTypePtr__; text: .text%__1cHCmpNodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cPcheckCastPPNodeIpipeline6kM_pknIPipeline__; text: .text%__1cNLoadRangeNodeGOpcode6kM_i_; @@ -371,9 +351,7 @@ text: .text%__1cRshlI_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cIMachOperDreg6kMpnNPhaseRegAlloc_pknENode__i_; text: .text%__1cNPhaseCoalesceRcombine_these_two6MpnENode_2_v_; text: .text%__1cKcmpOpPOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cKTypeRawPtrKadd_offset6kMi_pknHTypePtr__; text: .text%__1cMloadConINodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cFArenaEgrow6MI_pv_; text: .text%__1cMPhaseChaitinLinsert_proj6MpnFBlock_IpnENode_I_v_; text: .text%__1cILoadNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cJStoreNodeLbottom_type6kM_pknEType__; @@ -383,7 +361,6 @@ text: .text%__1cQaddP_reg_regNodePoper_input_base6kM_I_: ad_sparc_misc.o; text: .text%__1cIHaltNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cPCheckCastPPNodeGOpcode6kM_i_; text: .text%__1cKStorePNodeGOpcode6kM_i_; -text: .text%__1cKRelocationLunpack_data6M_v_: relocInfo.o; text: .text%__1cNflagsRegUOperEtype6kM_pknEType__: ad_sparc.o; text: .text%__1cNinstanceKlassGvtable6kM_pnLklassVtable__; text: .text%__1cPcheckCastPPNodeHtwo_adr6kM_I_: ad_sparc_misc.o; @@ -465,7 +442,6 @@ text: .text%__1cFChunkJnext_chop6M_v_; text: .text%__1cMMergeMemNodeEhash6kM_I_; text: .text%__1cKSchedulingbFComputeRegisterAntidependencies6MpnFBlock__v_; text: .text%__1cKSchedulingPComputeUseCount6MpknFBlock__v_; -text: .text%__1cHTypePtrHget_con6kM_i_; text: .text%__1cNinstanceKlassRprotection_domain6M_pnHoopDesc__: instanceKlass.o; text: .text%__1cIMachNodePcompute_padding6kMi_i_: ad_sparc.o; text: .text%__1cIMachNodeSalignment_required6kM_i_: ad_sparc.o; @@ -477,13 +453,10 @@ text: .text%__1cObranchConUNodePoper_input_base6kM_I_: ad_sparc_misc.o; text: .text%__1cFBlockJfind_node6kMpknENode__I_; text: .text%__1cUArgumentSizeComputerDset6MinJBasicType__v_: frame.o; text: .text%__1cHCmpNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cNCollectedHeapXallocate_from_tlab_slow6FpnGThread_I_pnIHeapWord__; text: .text%__1cWThreadLocalAllocBufferXclear_before_allocation6M_v_; text: .text%__1cHTypePtrEhash6kM_i_; text: .text%__1cNinstanceKlassRallocate_instance6MpnGThread__pnPinstanceOopDesc__; text: .text%__1cSObjectSynchronizerKslow_enter6FnGHandle_pnJBasicLock_pnGThread__v_; -text: .text%__1cWThreadLocalAllocBufferEfill6MpnIHeapWord_2I_v_; -text: .text%__1cUParallelScavengeHeapRallocate_new_tlab6MI_pnIHeapWord__; text: .text%__1cYNoJvmtiVMObjectAllocMark2t6M_v_; text: .text%__1cYNoJvmtiVMObjectAllocMark2T6M_v_; text: .text%__1cFBlockLfind_remove6MpknENode__v_; @@ -502,7 +475,6 @@ text: .text%__1cNObjectMonitorFenter6MpnGThread__v_; text: .text%__1cENodeKreplace_by6Mp0_v_; text: .text%__1cSObjectSynchronizerJslow_exit6FpnHoopDesc_pnJBasicLock_pnGThread__v_; text: .text%__1cMMergeMemNodePiteration_setup6Mpk0_v_; -text: .text%__1cFKlassNlookup_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; text: .text%__1cKDictionaryEfind6MiInMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; text: .text%__1cRMachSpillCopyNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cKRegionNodeIIdentity6MpnOPhaseTransform__pnENode__; @@ -513,8 +485,6 @@ text: .text%__1cIGraphKitJclone_map6M_pnNSafePointNode__; text: .text%__1cKIfTrueNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cRMemBarReleaseNodeGOpcode6kM_i_; text: .text%__1cKbranchNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMachOperIconstant6kM_i_; -text: .text%__1cWMutableSpaceUsedHelperLtake_sample6M_x_: spaceCounters.o; text: .text%__1cGPcDescHreal_pc6kMpknHnmethod__pC_; text: .text%__1cRPSOldPromotionLABFflush6M_v_; text: .text%__1cTconstantPoolOopDescMklass_ref_at6MipnGThread__pnMklassOopDesc__; @@ -526,7 +496,6 @@ text: .text%__1cKTypeRawPtrEhash6kM_i_; text: .text%__1cIBoolNodeKmatch_edge6kMI_I_: subnode.o; text: .text%__1cMMergeMemNodePset_base_memory6MpnENode__v_; text: .text%__1cLIfFalseNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cCosPelapsed_counter6F_x_; text: .text%__1cGBitMapOset_difference6M0_v_; text: .text%__1cNSafePointNodeEjvms6kM_pnIJVMState__: callnode.o; text: .text%__1cOoop_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; @@ -534,7 +503,6 @@ text: .text%__1cMMergeMemNodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%JVM_GetMethodIxLocalsCount; text: .text%__1cNloadRangeNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%JVM_CurrentThread; -text: .text%__1cENodeHget_ptr6kM_i_; text: .text%__1cRcmpFastUnlockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cIAndINodeGOpcode6kM_i_; text: .text%__1cPClassFileParserYverify_legal_method_name6MnMsymbolHandle_pnGThread__v_; @@ -569,7 +537,6 @@ text: .text%__1cQaddP_reg_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cQaddP_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cMLinkResolverZcheck_klass_accessability6FnLKlassHandle_1pnGThread__v_; text: .text%__1cIJVMStateIof_depth6kMi_p0_; -text: .text%__1cNSharedRuntimeElrem6Fxx_x_; text: .text%__1cRconstantPoolKlassIoop_size6kMpnHoopDesc__i_; text: .text%__1cMciMethodDataLbci_to_data6Mi_pnLProfileData__; text: .text%__1cRMemBarAcquireNodeGOpcode6kM_i_; @@ -579,7 +546,6 @@ text: .text%__1cObranchConUNodeIpipeline6kM_pknIPipeline__; text: .text%__1cJVectorSet2t6MpnFArena__v_; text: .text%__1cKTypeAryPtrFxmeet6kMpknEType__3_; text: .text%__1cVcompP_iRegP_imm13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRSignatureIteratorSiterate_parameters6MX_v_; text: .text%__1cICallNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; text: .text%__1cJTraceTime2T6M_v_; text: .text%__1cITypeNodeFValue6kMpnOPhaseTransform__pknEType__; @@ -605,7 +571,6 @@ text: .text%__1cMTypeKlassPtrEhash6kM_i_; text: .text%__1cMCallLeafNodeGOpcode6kM_i_; text: .text%__1cSCallLeafDirectNodeIpipeline6kM_pknIPipeline__; text: .text%__1cHPhiNodeEmake6FpnENode_2pknEType_pknHTypePtr__p0_; -text: .text%__1cIAddPNodeQmach_bottom_type6FpknIMachNode__pknEType__; text: .text%__1cOcompU_iRegNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cJiRegLOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cNflagsRegPOperKin_RegMask6kMi_pknHRegMask__; @@ -640,7 +605,6 @@ text: .text%__1cJStartNodeGOpcode6kM_i_; text: .text%__1cQregF_to_stkINodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cENodeDcmp6kMrk0_I_; text: .text%__1cHTypeIntFxdual6kM_pknEType__; -text: .text%__1cIciObjectIencoding6M_pnI_jobject__; text: .text%__1cMmerge_region6FpnKRegionNode_pnIPhaseGVN__pnENode__: cfgnode.o; text: .text%__1cJAssemblerOpatched_branch6Fiii_i_; text: .text%__1cJAssemblerSbranch_destination6Fii_i_; @@ -653,7 +617,6 @@ text: .text%__1cWMachCallStaticJavaNodePret_addr_offset6M_i_; text: .text%__1cITypeFuncEmake6FpknJTypeTuple_3_pk0_; text: .text%__1cMloadConDNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cSCallLeafDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cKTypeOopPtrHget_con6kM_i_; text: .text%__1cQsubI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cIRootNodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cJloadLNodeErule6kM_I_: ad_sparc_misc.o; @@ -729,7 +692,6 @@ text: .text%__1cOGenerateOopMapEpush6MnNCellTypeState__v_; text: .text%__1cJloadSNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cKStoreCNodeGOpcode6kM_i_; text: .text%__1cOGenerateOopMapRdo_exception_edge6MpnOBytecodeStream__v_; -text: .text%__1cMstringStreamFwrite6MpkcI_v_; text: .text%__1cOGenerateOopMapDpop6M_nNCellTypeState__; text: .text%__1cHRetNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cPcmpFastLockNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; @@ -738,10 +700,7 @@ text: .text%__1cMLinkResolverOresolve_invoke6FrnICallInfo_nGHandle_nSconstantPoo text: .text%__1cIBoolNodeJideal_reg6kM_I_: subnode.o; text: .text%__1cHCmpNodeJideal_reg6kM_I_: classes.o; text: .text%__1cRloadConP_pollNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cETypeFwiden6kMpk0_2_: type.o; text: .text%__1cLstoreI0NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cFciEnvTget_method_by_index6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; -text: .text%__1cFciEnvYget_method_by_index_impl6MpnPciInstanceKlass_inJBytecodesECode__pnIciMethod__; text: .text%__1cMloadConPNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFciEnvNlookup_method6MpnNinstanceKlass_2pnNsymbolOopDesc_4nJBytecodesECode__pnNmethodOopDesc__; text: .text%__1cKDictionaryKfind_class6MiInMsymbolHandle_nGHandle__pnMklassOopDesc__; @@ -755,7 +714,6 @@ text: .text%__1cSInterpreterRuntimeMmonitorenter6FpnKJavaThread_pnPBasicObjectLo text: .text%__1cSInterpreterRuntimePresolve_get_put6FpnKJavaThread_nJBytecodesECode__v_; text: .text%__1cQsubI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cXmembar_acquire_lockNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cQaddP_reg_regNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; text: .text%__1cPCountedLoopNodeGOpcode6kM_i_; text: .text%__1cSInterpreterRuntimeLmonitorexit6FpnKJavaThread_pnPBasicObjectLock__v_; text: .text%__1cIAndLNodeGOpcode6kM_i_; @@ -765,13 +723,10 @@ text: .text%__1cVjava_lang_ClassLoaderbBnon_reflection_class_loader6FpnHoopDesc_ text: .text%__1cFParseFBlockKinit_graph6Mp0_v_; text: .text%__1cMTypeKlassPtrEmake6FnHTypePtrDPTR_pnHciKlass_i_pk0_; text: .text%__1cKRelocationLspec_simple6FnJrelocInfoJrelocType__nQRelocationHolder__; -text: .text%__1cCosGmalloc6FI_pv_; text: .text%__1cSInterpreterRuntimeOresolve_invoke6FpnKJavaThread_nJBytecodesECode__v_; text: .text%__1cIGraphKitTadd_exception_state6MpnNSafePointNode__v_; -text: .text%__1cIimmPOperIconstant6kM_i_: ad_sparc_clone.o; text: .text%__1cIregDOperEtype6kM_pknEType__: ad_sparc.o; text: .text%__1cKstoreINodeIpipeline6kM_pknIPipeline__; -text: .text%__1cICodeHeapLheader_size6F_I_; text: .text%__1cWConstantPoolCacheEntryKset_method6MnJBytecodesECode_nMmethodHandle_i_v_; text: .text%__1cNloadRangeNodeIpipeline6kM_pknIPipeline__; text: .text%__1cFParseMdo_one_block6M_v_; @@ -794,7 +749,6 @@ text: .text%__1cHMatcherKmatch_sfpt6MpnNSafePointNode__pnIMachNode__; text: .text%__1cMFastLockNodeGOpcode6kM_i_; text: .text%__1cLConvL2INodeGOpcode6kM_i_; text: .text%__1cIXorINodeGOpcode6kM_i_; -text: .text%__1cMVirtualSpaceOcommitted_size6kM_I_; text: .text%__1cOcompU_iRegNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cPorI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cKTypeAryPtrFklass6kM_pnHciKlass__; @@ -812,23 +766,17 @@ text: .text%__1cPcompP_iRegPNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cPsp_ptr_RegPOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cPClassFileParserbCverify_legal_field_signature6MnMsymbolHandle_1pnGThread__v_; text: .text%__1cPClassFileParserXverify_legal_field_name6MnMsymbolHandle_pnGThread__v_; -text: .text%__1cRshrP_reg_imm5NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cLBoxLockNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cITypeLongEmake6Fxxi_pk0_; text: .text%__1cNloadKlassNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%JVM_GetCPMethodNameUTF; text: .text%__1cMtlsLoadPNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cLstoreB0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIimmIOperIconstant6kM_i_: ad_sparc_clone.o; -text: .text%__1cNSharedRuntimeEldiv6Fxx_x_; text: .text%__1cHBitDataKcell_count6M_i_: ciMethodData.o; text: .text%__1cURethrowExceptionNodeNis_block_proj6kM_pknENode__: ad_sparc_misc.o; text: .text%__1cQSystemDictionarybOfind_constrained_instance_or_array_klass6FnMsymbolHandle_nGHandle_pnGThread__pnMklassOopDesc__; text: .text%__1cQsubI_reg_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cJloadBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIciSymbol2t6MnMsymbolHandle__v_; text: .text%__1cQaddP_reg_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKmethodOperGmethod6kM_i_: ad_sparc.o; text: .text%__1cFKlassIsubklass6kM_p0_; text: .text%__1cNinstanceKlassbBallocate_permanent_instance6MpnGThread__pnPinstanceOopDesc__; text: .text%__1cXInterpreterFrameClosureJoffset_do6Mi_v_: frame.o; @@ -885,7 +833,6 @@ text: .text%__1cIConLNodeGOpcode6kM_i_; text: .text%JVM_GetCPFieldSignatureUTF; text: .text%__1cENodeLnonnull_req6kM_p0_; text: .text%__1cYCallStaticJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cYCallStaticJavaDirectNodeKmethod_set6Mi_v_; text: .text%__1cMelapsedTimerFstart6M_v_; text: .text%__1cMelapsedTimerEstop6M_v_; text: .text%__1cMURShiftINodeLbottom_type6kM_pknEType__: classes.o; @@ -946,7 +893,6 @@ text: .text%__1cIGraphKitOreplace_in_map6MpnENode_2_v_; text: .text%__1cNinstanceKlassLfind_method6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; text: .text%__1cHCompileKTracePhase2T6M_v_; text: .text%__1cMPhaseChaitinLclone_projs6MpnFBlock_IpnENode_4rI_i_; -text: .text%__1cNinstanceKlassSlookup_osr_nmethod6kMkpnNmethodOopDesc_i_pnHnmethod__; text: .text%__1cIJVMState2t6MpnIciMethod_p0_v_; text: .text%__1cIHaltNode2t6MpnENode_2_v_; text: .text%__1cLOptoRuntimeSuncommon_trap_Type6F_pknITypeFunc__; @@ -954,7 +900,6 @@ text: .text%__1cJloadLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cSsafePoint_pollNodePoper_input_base6kM_I_: ad_sparc_misc.o; text: .text%__1cINodeHashJhash_find6MpknENode__p1_; text: .text%__1cQmulL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cSaddP_reg_imm13NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; text: .text%__1cOMethodLivenessKBasicBlock2t6Mp0ii_v_; text: .text%__1cOMethodLivenessKBasicBlockQcompute_gen_kill6MpnIciMethod__v_; text: .text%__1cOGenerateOopMapFppush6MpnNCellTypeState__v_; @@ -966,7 +911,6 @@ text: .text%__1cTCreateExceptionNodeIpipeline6kM_pknIPipeline__; text: .text%__1cLstoreB0NodeIpipeline6kM_pknIPipeline__; text: .text%__1cMtlsLoadPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cLBoxLockNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cITypeLongEmake6Fx_pk0_; text: .text%__1cHciFieldPinitialize_from6MpnPfieldDescriptor__v_; text: .text%__1cKimmI13OperJnum_edges6kM_I_: ad_sparc_clone.o; text: .text%__1cJloadBNodeIpipeline6kM_pknIPipeline__; @@ -987,7 +931,6 @@ text: .text%__1cFParseHdo_call6M_v_; text: .text%__1cNloadConP0NodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cHMulNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cMPhaseIterGVNJtransform6MpnENode__2_; -text: .text%__1cHTypeIntFwiden6kMpknEType__3_; text: .text%__1cSsafePoint_pollNodeIpipeline6kM_pknIPipeline__; text: .text%__1cJloadSNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cKarrayKlassLobject_size6kMi_i_; @@ -1019,36 +962,26 @@ text: .text%__1cIBoolNodeHsize_of6kM_I_; text: .text%__1cSobjArrayKlassKlassIoop_size6kMpnHoopDesc__i_: objArrayKlassKlass.o; text: .text%__1cPcompP_iRegPNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cJloadPNodeOmemory_operand6kM_pknIMachOper__; -text: .text%__1cPBytecode_invokeJsignature6kM_pnNsymbolOopDesc__; text: .text%__1cFframebGinterpreter_callee_receiver_addr6MnMsymbolHandle__ppnHoopDesc__; text: .text%__1cNSignatureInfoGdo_int6M_v_: bytecode.o; text: .text%__1cOstackSlotLOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cKInlineTreeMok_to_inline6MpnIciMethod_pnIJVMState_rnNciCallProfile_pnMWarmCallInfo__8_; text: .text%__1cOGenerateOopMapbAget_basic_block_containing6kMi_pnKBasicBlock__; -text: .text%__1cICodeHeapSallocated_capacity6kM_I_; -text: .text%__1cICHeapObj2n6FI_pv_; text: .text%__1cQsubL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cWCallLeafNoFPDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cFTypeDEhash6kM_i_; -text: .text%__1cKTypeRawPtrHget_con6kM_i_; text: .text%__1cJStartNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; text: .text%jni_ExceptionOccurred: jni.o; text: .text%__1cKciTypeFlowLStateVectorStype_meet_internal6FpnGciType_3p0_3_; text: .text%__1cMloadConINodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cGIfNodeHsize_of6kM_I_: classes.o; text: .text%__1cPconvL2I_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cIimmLOperJconstantL6kM_x_: ad_sparc_clone.o; -text: .text%__1cTStackWalkCompPolicyRcompilation_level6MnMmethodHandle_i_i_; text: .text%jni_GetByteArrayRegion: jni.o; -text: .text%__1cIGraphKitTset_all_memory_call6MpnENode__v_; -text: .text%__1cSHighResTimeSamplerLtake_sample6M_x_: statSampler.o; text: .text%__1cHCompileFstart6kM_pnJStartNode__; text: .text%__1cPStatSamplerTaskEtask6M_v_: statSampler.o; -text: .text%__1cMPeriodicTaskOreal_time_tick6FI_v_; text: .text%__1cQPlaceholderTableKfind_entry6MiInMsymbolHandle_nGHandle__pnNsymbolOopDesc__; text: .text%__1cIParmNodeJideal_reg6kM_I_; text: .text%__1cQandL_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIMachNodeRget_base_and_disp6kMrirpknHTypePtr__pknENode__; text: .text%__1cQSystemDictionarybBresolve_array_class_or_null6FnMsymbolHandle_nGHandle_2pnGThread__pnMklassOopDesc__; text: .text%__1cIregFOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cRbranchLoopEndNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; @@ -1072,7 +1005,6 @@ text: .text%__1cUcompU_iReg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%JVM_RawMonitorEnter; text: .text%JVM_RawMonitorExit; text: .text%__1cOMachReturnNodeKin_RegMask6kMI_rknHRegMask__; -text: .text%__1cMTypeKlassPtrKadd_offset6kMi_pknHTypePtr__; text: .text%__1cWShouldNotReachHereNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cPcmpFastLockNodeIpipeline6kM_pknIPipeline__; text: .text%__1cETypeRget_typeflow_type6FpnGciType__pk0_; @@ -1082,7 +1014,6 @@ text: .text%__1cXinitialize_static_field6FpnPfieldDescriptor_pnGThread__v_: clas text: .text%__1cURethrowExceptionNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cOJNIHandleBlockOallocate_block6FpnGThread__p0_; text: .text%__1cNSignatureInfoHdo_bool6M_v_: bytecode.o; -text: .text%__1cKBufferBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; text: .text%__1cSandI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cIAddINodeIadd_ring6kMpknEType_3_3_; text: .text%__1cLTypeInstPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; @@ -1094,16 +1025,10 @@ text: .text%__1cNLoadKlassNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cPorI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cLRethrowNodeGOpcode6kM_i_; text: .text%__1cJloadSNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cICodeHeapIcapacity6kM_I_; -text: .text%__1cKMemoryPoolImax_size6kM_I_: memoryPool.o; -text: .text%__1cMCodeHeapPoolNused_in_bytes6M_I_: memoryPool.o; text: .text%__1cPcmpFastLockNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cMCodeHeapPoolQget_memory_usage6M_nLMemoryUsage__; text: .text%__1cFArena2T6M_v_; text: .text%__1cKMemBarNodeFmatch6MpknIProjNode_pknHMatcher__pnENode__; -text: .text%__1cOCallRelocationFvalue6M_pC_: relocInfo.o; -text: .text%__1cHoopDescSslow_identity_hash6M_i_; -text: .text%__1cSObjectSynchronizerXidentity_hash_value_for6FnGHandle__i_; text: .text%__1cLPCTableNodeEhash6kM_I_; text: .text%__1cHConNodeLout_RegMask6kM_rknHRegMask__: classes.o; text: .text%__1cXPhaseAggressiveCoalesceYinsert_copy_with_overlap6MpnFBlock_pnENode_II_v_; @@ -1136,7 +1061,6 @@ text: .text%__1cJloadSNodePoper_input_base6kM_I_: ad_sparc_misc.o; text: .text%__1cIJumpDataKcell_count6M_i_: ciMethodData.o; text: .text%__1cObranchConPNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cITypeFuncFxdual6kM_pknEType__; -text: .text%__1cQjava_lang_StringGlength6FpnHoopDesc__i_; text: .text%__1cFStateM_sub_Op_CmpI6MpknENode__v_; text: .text%__1cJcmpOpOperFccode6kM_i_: ad_sparc_clone.o; text: .text%__1cGciType2t6MnLKlassHandle__v_; @@ -1175,7 +1099,6 @@ text: .text%jni_ReleasePrimitiveArrayCritical: jni.o; text: .text%__1cPconvI2L_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cNMemoryServiceXtrack_memory_pool_usage6FpnKMemoryPool__v_; text: .text%__1cSmembar_releaseNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cJimmU5OperIconstant6kM_i_: ad_sparc_clone.o; text: .text%__1cPciInstanceKlass2t6MnLKlassHandle__v_; text: .text%__1cLOpaque1NodeEhash6kM_I_; text: .text%__1cJStoreNodeZIdeal_sign_extended_input6MpnIPhaseGVN_i_pnENode__; @@ -1200,11 +1123,9 @@ text: .text%__1cQmulL_reg_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cLstoreP0NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cLRethrowNodeKmatch_edge6kMI_I_; text: .text%__1cFTypeFEhash6kM_i_; -text: .text%__1cHnmethodHoops_do6MpnKOopClosure__v_; text: .text%__1cFStateM_sub_Op_AddI6MpknENode__v_; text: .text%__1cOParseGeneratorIgenerate6MpnIJVMState__2_; text: .text%__1cFParseQcreate_entry_map6M_pnNSafePointNode__; -text: .text%__1cFArenaEused6kM_I_; text: .text%__1cFParseLbuild_exits6M_v_; text: .text%__1cFParseIdo_exits6M_v_; text: .text%__1cFParse2t6MpnIJVMState_pnIciMethod_f_v_; @@ -1213,17 +1134,13 @@ text: .text%__1cFParsePdo_method_entry6M_v_; text: .text%__1cNCallGeneratorKfor_inline6FpnIciMethod_f_p0_; text: .text%__1cbGJvmtiVMObjectAllocEventCollector2t6M_v_; text: .text%__1cbGJvmtiVMObjectAllocEventCollector2T6M_v_; -text: .text%__1cQconstMethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cRciVirtualCallDataOtranslate_from6MpnLProfileData__v_; text: .text%jni_IsSameObject: jni.o; text: .text%__1cMloadConINodeIpipeline6kM_pknIPipeline__; text: .text%__1cNbranchConNodeJlabel_set6MrnFLabel_I_v_; text: .text%__1cNbranchConNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cQandL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cLmethodKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cLsymbolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cIciObjectFklass6M_pnHciKlass__; -text: .text%__1cLSymbolTableFprobe6Fpkci_pnNsymbolOopDesc__; text: .text%__1cPThreadLocalNodeGOpcode6kM_i_; text: .text%__1cZPhaseConservativeCoalesceKupdate_ifg6MIIpnIIndexSet_2_v_; text: .text%__1cZPhaseConservativeCoalesceMunion_helper6MpnENode_2II222pnFBlock_I_v_; @@ -1240,14 +1157,11 @@ text: .text%__1cKCastPPNodeQIdeal_DU_postCCP6MpnIPhaseCCP__pnENode__; text: .text%__1cKstorePNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cOPhaseIdealLoopOsplit_thru_phi6MpnENode_2i_2_; text: .text%__1cENodeGOpcode6kM_i_; -text: .text%__1cRshrP_reg_imm5NodeIpipeline6kM_pknIPipeline__; text: .text%__1cQandI_reg_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cIciMethodbBinterpreter_call_site_count6Mi_i_; text: .text%__1cGBitMapIset_from6M0_v_; -text: .text%__1cNCompileBrokerOcompile_method6FnMmethodHandle_i1ipkcpnGThread__pnHnmethod__; text: .text%__1cTconstantPoolOopDescbDresolve_string_constants_impl6FnSconstantPoolHandle_pnGThread__v_; text: .text%__1cHSubNodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cFChunk2n6FII_pv_; text: .text%__1cTCallDynamicJavaNodeGOpcode6kM_i_; text: .text%__1cKstoreBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cILoadNodeDcmp6kMrknENode__I_; @@ -1261,7 +1175,6 @@ text: .text%__1cHOrINodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cFframeLreal_sender6kMpnLRegisterMap__0_; text: .text%__1cGRFrameGcaller6M_p0_; text: .text%__1cPCheckCastPPNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cRshrP_reg_imm5NodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cJJavaCallsEcall6FpnJJavaValue_nMmethodHandle_pnRJavaCallArguments_pnGThread__v_; text: .text%__1cXmembar_release_lockNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; text: .text%__1cJloadINodeOmemory_operand6kM_pknIMachOper__; @@ -1278,7 +1191,6 @@ text: .text%__1cNCatchProjNodeDcmp6kMrknENode__I_; text: .text%__1cKTypeOopPtrEhash6kM_i_; text: .text%__1cIMinINodeGOpcode6kM_i_; text: .text%__1cMURShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cFframeRoops_code_blob_do6MpnKOopClosure_pknLRegisterMap__v_; text: .text%__1cKTypeRawPtrFxmeet6kMpknEType__3_; text: .text%JVM_GetMethodIxModifiers; text: .text%__1cIMulLNodeLbottom_type6kM_pknEType__: classes.o; @@ -1289,8 +1201,6 @@ text: .text%JVM_IsInterface; text: .text%__1cPorI_reg_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cIDivINodeGOpcode6kM_i_; text: .text%__1cOGenerateOopMapTmerge_state_into_bb6MpnKBasicBlock__v_; -text: .text%__1cICodeHeapIallocate6MI_pv_; -text: .text%__1cICodeHeapPsearch_freelist6MI_pnJFreeBlock__; text: .text%__1cLOpaque1NodeLbottom_type6kM_pknEType__: connode.o; text: .text%__1cNloadRangeNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cLRShiftLNodeGOpcode6kM_i_; @@ -1315,7 +1225,6 @@ text: .text%__1cParrayKlassKlassToop_adjust_pointers6MpnHoopDesc__i_; text: .text%__1cParrayKlassKlassToop_follow_contents6MpnHoopDesc__v_; text: .text%__1cIGraphKitYcombine_exception_states6MpnNSafePointNode_2_v_; text: .text%__1cQmulL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cRshrP_reg_imm5NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cSconstMethodOopDescYchecked_exceptions_start6kM_pnXCheckedExceptionElement__; text: .text%__1cPClassFileParserYparse_checked_exceptions6MpHInSconstantPoolHandle_pnGThread__1_; text: .text%__1cKstoreLNodePoper_input_base6kM_I_: ad_sparc_misc.o; @@ -1325,7 +1234,6 @@ text: .text%__1cSconvI2D_helperNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cPClassFileStreamHskip_u26MipnGThread__v_; text: .text%__1cUcompI_iReg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cOMacroAssemblerNverify_thread6M_v_; -text: .text%__1cIGraphKitZset_results_for_java_call6MpnMCallJavaNode__pnENode__; text: .text%__1cSbranchCon_longNodeIpipeline6kM_pknIPipeline__; text: .text%__1cHnmethodVcleanup_inline_caches6M_v_; text: .text%__1cTciConstantPoolCacheGinsert6Mipv_v_; @@ -1356,12 +1264,9 @@ text: .text%__1cKoopFactoryTnew_system_objArray6FipnGThread__pnPobjArrayOopDesc_ text: .text%__1cbDcatch_cleanup_find_cloned_def6FpnFBlock_pnENode_1rnLBlock_Array_i_3_: lcm.o; text: .text%__1cQxorI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cKstoreLNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cFciEnvVget_constant_by_index6MpnPciInstanceKlass_i_nKciConstant__; -text: .text%__1cFciEnvbAget_constant_by_index_impl6MpnPciInstanceKlass_i_nKciConstant__; text: .text%__1cOClearArrayNodeKmatch_edge6kMI_I_; text: .text%__1cPconvL2I_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cJloadSNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cKJavaThreadHoops_do6MpnKOopClosure__v_; text: .text%__1cSFixupMirrorClosureJdo_object6MpnHoopDesc__v_: universe.o; text: .text%__1cFStateP_sub_Op_LShiftI6MpknENode__v_; text: .text%__1cQandL_reg_regNodeLout_RegMask6kM_rknHRegMask__; @@ -1381,13 +1286,11 @@ text: .text%__1cRshlL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cQandI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cSandI_reg_imm13NodeIpipeline6kM_pknIPipeline__; text: .text%__1cRCardTableModRefBSPdirty_MemRegion6MnJMemRegion__v_; -text: .text%__1cZresource_reallocate_bytes6FpcII_0_; text: .text%__1cLConvL2INodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cOAbstractICacheQinvalidate_range6FpCi_v_; text: .text%__1cKstorePNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cIMaxINodeGOpcode6kM_i_; text: .text%__1cTDirectCallGeneratorIgenerate6MpnIJVMState__2_; -text: .text%__1cNCallGeneratorPfor_direct_call6FpnIciMethod__p0_; text: .text%__1cMWarmCallInfoLalways_cold6F_p0_; text: .text%__1cIimmDOperJconstantD6kM_d_: ad_sparc_clone.o; text: .text%__1cIPhaseIFGEinit6MI_v_; @@ -1415,7 +1318,6 @@ text: .text%__1cJloadPNodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cMoutputStream2t6Mi_v_; text: .text%__1cMstringStreamJas_string6M_pc_; text: .text%__1cMstringStream2T6M_v_; -text: .text%__1cMstringStream2t6MI_v_; text: .text%__1cIGraphKitMreset_memory6M_pnENode__; text: .text%__1cZCallDynamicJavaDirectNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cKstorePNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -1472,7 +1374,6 @@ text: .text%__1cSInterpreterRuntimebFexception_handler_for_exception6FpnKJavaThr text: .text%__1cOPhaseIdealLoopPis_counted_loop6MpnENode_pnNIdealLoopTree__2_; text: .text%__1cQComputeCallStackHdo_void6M_v_: generateOopMap.o; text: .text%__1cFKlassRinitialize_supers6MpnMklassOopDesc_pnGThread__v_; -text: .text%__1cKKlass_vtbl2n6FIrnLKlassHandle_ipnGThread__pv_; text: .text%__1cFKlassVbase_create_klass_oop6FrnLKlassHandle_irknKKlass_vtbl_pnGThread__pnMklassOopDesc__; text: .text%__1cQjava_lang_StringLutf8_length6FpnHoopDesc__i_; text: .text%jni_GetStringUTFLength: jni.o; @@ -1494,7 +1395,6 @@ text: .text%__1cQjava_lang_StringRas_unicode_string6FpnHoopDesc_ri_pH_; text: .text%JVM_InternString; text: .text%__1cLStringTableGintern6FpnHoopDesc_pnGThread__2_; text: .text%__1cCosGrandom6F_l_; -text: .text%__1cKimmP13OperIconstant6kM_i_: ad_sparc_clone.o; text: .text%__1cVcompP_iRegP_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cKoopFactoryXnew_permanent_byteArray6FipnGThread__pnQtypeArrayOopDesc__; text: .text%__1cRcompL_reg_regNodeIpipeline6kM_pknIPipeline__; @@ -1512,7 +1412,6 @@ text: .text%__1cPciObjectFactoryMvm_symbol_at6Fi_pnIciSymbol__; text: .text%__1cKDictionaryJadd_klass6MnMsymbolHandle_nGHandle_nLKlassHandle__v_; text: .text%__1cVshrL_reg_imm6_L2INodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cZCallDynamicJavaDirectNodePoper_input_base6kM_I_: ad_sparc_misc.o; -text: .text%__1cIGraphKitTcreate_and_xform_if6MpnENode_2ff_pnGIfNode__: graphKit.o; text: .text%__1cWImplicitExceptionTableGappend6MII_v_; text: .text%__1cRMachNullCheckNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cLProfileDataPpost_initialize6MpnOBytecodeStream_pnRmethodDataOopDesc__v_: ciMethodData.o; @@ -1534,14 +1433,12 @@ text: .text%__1cFKlassMset_subklass6MpnMklassOopDesc__v_; text: .text%__1cOGenerateOopMapLmerge_state6Fp0ipi_v_; text: .text%__1cMTypeKlassPtrFxdual6kM_pknEType__; text: .text%__1cQSystemDictionaryVdefine_instance_class6FnTinstanceKlassHandle_pnGThread__v_; -text: .text%__1cSinstanceKlassKlassXallocate_instance_klass6MiiiinNReferenceType_pnGThread__pnMklassOopDesc__; text: .text%__1cPClassFileParserbBcheck_final_method_override6FnTinstanceKlassHandle_pnGThread__v_; text: .text%__1cJCodeCachebKnumber_of_nmethods_with_dependencies6F_i_; text: .text%__1cNinstanceKlassQinit_implementor6M_v_; text: .text%__1cPClassFileStream2t6MpCipc_v_; text: .text%__1cNinstanceKlassSprocess_interfaces6MpnGThread__v_; text: .text%__1cNinstanceKlassYcompute_secondary_supers6MipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cKoopFactoryRnew_instanceKlass6FiiiinNReferenceType_pnGThread__pnMklassOopDesc__; text: .text%__1cNinstanceKlassWdo_local_static_fields6MpFpnPfieldDescriptor_pnGThread__v4_v_; text: .text%__1cPClassFileParserMsort_methods6MnOobjArrayHandle_111pnGThread__nPtypeArrayHandle__; text: .text%__1cFKlassKsuperklass6kM_pnNinstanceKlass__; @@ -1561,22 +1458,17 @@ text: .text%__1cISubINodeJideal_reg6kM_I_: classes.o; text: .text%__1cNinstanceKlassOset_alloc_size6MI_v_: instanceKlass.o; text: .text%__1cNinstanceKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlass.o; text: .text%__1cHMemNodeHsize_of6kM_I_; -text: .text%__1cFVTuneQstart_class_load6F_v_; text: .text%__1cSThreadProfilerMark2T6M_v_; -text: .text%__1cFVTuneOend_class_load6F_v_; text: .text%__1cLClassLoaderOload_classfile6FnMsymbolHandle_pnGThread__nTinstanceKlassHandle__; text: .text%__1cJEventMark2t6MpkcE_v_: classLoader.o; text: .text%__1cSThreadProfilerMark2t6Mn0AGRegion__v_; text: .text%__1cQSystemDictionaryRload_shared_class6FnTinstanceKlassHandle_nGHandle_pnGThread__1_; -text: .text%__1cKklassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cPClassFileParserbKparse_classfile_sourcefile_attribute6MnSconstantPoolHandle_nTinstanceKlassHandle_pnGThread__v_; text: .text%__1cQmodI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cLRShiftINodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cKCMoveINodeGOpcode6kM_i_; text: .text%__1cLLShiftLNodeGOpcode6kM_i_; text: .text%__1cYcompareAndSwapL_boolNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cSinstanceKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cNinstanceKlassScopy_static_fields6MpnSPSPromotionManager__v_; text: .text%__1cMtlsLoadPNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFStateQ_sub_Op_URShiftI6MpknENode__v_; text: .text%__1cKcmpOpUOperGnegate6M_v_: ad_sparc_clone.o; @@ -1619,14 +1511,12 @@ text: .text%__1cLklassItableTcompute_itable_size6FnOobjArrayHandle__i_; text: .text%__1cQandI_reg_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cIXorINodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cRmethodDataOopDescLbci_to_data6Mi_pnLProfileData__; -text: .text%__1cFframeZinterpreter_frame_set_bcx6Mi_v_; text: .text%__1cMnegF_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cLstoreI0NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cTOopMapForCacheEntryZfill_stackmap_for_opcodes6MpnOBytecodeStream_pnNCellTypeState_4i_v_; text: .text%__1cSaddL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cQshrL_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cKstoreLNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cNSharedRuntimebKexception_handler_for_return_address6FpC_1_; text: .text%__1cILoopNodeHsize_of6kM_I_: classes.o; text: .text%__1cHMatcherLfind_shared6MpnENode__v_; text: .text%__1cJStartNodeHsize_of6kM_I_; @@ -1643,8 +1533,6 @@ text: .text%__1cRcompL_reg_conNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cMLinkResolverbHlookup_instance_method_in_klasses6FrnMmethodHandle_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; text: .text%__1cMnegF_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cNSharedRuntimebWnative_method_throw_unsatisfied_link_error_entry6F_pC_; -text: .text%__1cTStackWalkCompPolicyYmethod_back_branch_event6MnMmethodHandle_iipnGThread__v_; -text: .text%__1cRCompilationPolicybJreset_counter_for_back_branch_event6MnMmethodHandle__v_; text: .text%__1cOMethodLivenessQcompute_liveness6M_v_; text: .text%__1cOMethodLiveness2t6MpnFArena_pnIciMethod__v_; text: .text%__1cOMethodLivenessNinit_gen_kill6M_v_; @@ -1654,7 +1542,6 @@ text: .text%__1cIGraphKitHopt_iff6MpnENode_2_2_; text: .text%__1cLRShiftINodeIIdentity6MpnOPhaseTransform__pnENode__; text: .text%__1cJTimeStampGupdate6M_v_; text: .text%__1cRmethodDataOopDescKmileage_of6FpnNmethodOopDesc__i_; -text: .text%__1cWconstantPoolCacheKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cMloadConDNodeIpipeline6kM_pknIPipeline__; text: .text%__1cFParseQarray_addressing6MnJBasicType_ippknEType__pnENode__; text: .text%__1cNloadConP0NodeLout_RegMask6kM_rknHRegMask__; @@ -1666,14 +1553,11 @@ text: .text%__1cQcmovI_reg_ltNodeIpipeline6kM_pknIPipeline__; text: .text%__1cRsubI_zero_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cJcmpOpOperFequal6kM_i_: ad_sparc_clone.o; text: .text%__1cHCompilebAvarargs_C_out_slots_killed6kM_I_; -text: .text%__1cXJNI_ArgumentPusherVaArgHiterate6MX_v_: jni.o; -text: .text%__1cbBjava_lang_ref_SoftReferenceFclock6F_x_; text: .text%__1cOPhaseIdealLoopQset_subtree_ctrl6MpnENode__v_; text: .text%__1cWstatic_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocInfo.o; text: .text%__1cNflagsRegLOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cYciExceptionHandlerStreamPcount_remaining6M_i_; text: .text%__1cFParseXcatch_inline_exceptions6MpnNSafePointNode__v_; -text: .text%__1cRconstantPoolKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cNobjArrayKlassKcopy_array6MpnMarrayOopDesc_i2iipnGThread__v_; text: .text%__1cKcmpOpUOperNgreater_equal6kM_i_: ad_sparc_clone.o; text: .text%JVM_GetFieldIxModifiers; @@ -1698,7 +1582,6 @@ text: .text%__1cKo0RegPOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cIregDOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cNmethodOopDescTverified_code_entry6M_pC_; text: .text%__1cNSharedRuntimeXfind_callee_info_helper6FpnKJavaThread_rnMvframeStream_rnJBytecodesECode_rnICallInfo_pnGThread__nGHandle__; -text: .text%__1cPBytecode_invokeFindex6kM_i_; text: .text%__1cLRethrowNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cSPSKeepAliveClosureGdo_oop6MppnHoopDesc__v_: psScavenge.o; text: .text%__1cFParseFBlockRsuccessor_for_bci6Mi_p1_; @@ -1724,7 +1607,6 @@ text: .text%__1cLMachNopNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cOPhaseIdealLoopNreorg_offsets6MpnNIdealLoopTree__v_; text: .text%__1cRshrL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cNmethodOopDescVset_signature_handler6MpC_v_; -text: .text%__1cbBjava_lang_ref_SoftReferenceJtimestamp6FpnHoopDesc__x_; text: .text%__1cPcompP_iRegPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cSxorI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cOPhaseIdealLoopRsplit_thru_region6MpnENode_2_2_; @@ -1736,7 +1618,6 @@ text: .text%__1cJCodeCacheMfind_nmethod6Fpv_pnHnmethod__; text: .text%__1cOPhaseIdealLoopMdominated_by6MpnENode_2_v_; text: .text%__1cQshlI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cFParseNthrow_to_exit6MpnNSafePointNode__v_; -text: .text%__1cQinstanceRefKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cVConstantOopWriteValueIwrite_on6MpnUDebugInfoWriteStream__v_; text: .text%__1cJVectorSetGslamin6Mrk0_v_; text: .text%JVM_Clone; @@ -1772,7 +1653,6 @@ text: .text%__1cXmembar_release_lockNodeIadr_type6kM_pknHTypePtr__; text: .text%__1cJNode_ListEyank6MpnENode__v_; text: .text%__1cMPhaseChaitinISimplify6M_v_; text: .text%__1cNIdealLoopTreeIset_nest6MI_i_; -text: .text%__1cSCallLeafDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cIMulLNodeImul_ring6kMpknEType_3_3_; text: .text%__1cMStartOSRNodeGOpcode6kM_i_; text: .text%__1cSCallLeafDirectNodeLout_RegMask6kM_rknHRegMask__; @@ -1792,7 +1672,6 @@ text: .text%__1cSMemBarVolatileNodeGOpcode6kM_i_; text: .text%__1cLstoreB0NodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cRshrI_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cQjava_lang_StringOas_utf8_string6FpnHoopDesc__pc_; -text: .text%__1cRcmpFastUnlockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNSafePointNodeLpop_monitor6M_v_; text: .text%__1cMPhaseChaitinVfind_base_for_derived6MppnENode_2rI_2_; text: .text%__1cLOptoRuntimebAcomplete_monitor_exit_Type6F_pknITypeFunc__; @@ -1813,7 +1692,6 @@ text: .text%__1cMindirectOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o text: .text%__1cMindirectOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; text: .text%__1cNSafePointNodeMpush_monitor6MpknMFastLockNode__v_; text: .text%__1cSCallLeafDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cSCallLeafDirectNodeKmethod_set6Mi_v_; text: .text%__1cIDivINodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cJLoadBNodeJideal_reg6kM_I_: classes.o; text: .text%__1cJloadBNodeOmemory_operand6kM_pknIMachOper__; @@ -1824,8 +1702,6 @@ text: .text%__1cOGenerateOopMapGdo_ldc6Mii_v_; text: .text%__1cJCMoveNodeLis_cmove_id6FpnOPhaseTransform_pnENode_44pnIBoolNode__4_; text: .text%__1cKTypeAryPtrQcast_to_ptr_type6kMnHTypePtrDPTR__pknEType__; text: .text%__1cOPhaseIdealLoopKDominators6M_v_; -text: .text%__1cOPhaseIdealLoopPbuild_loop_late6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_; -text: .text%__1cOPhaseIdealLoopQbuild_loop_early6MrnJVectorSet_rnJNode_List_rnKNode_Stack_pk0_v_; text: .text%jni_NewGlobalRef: jni.o; text: .text%__1cTciConstantPoolCache2t6MpnFArena_i_v_; text: .text%__1cIAndINodeJideal_reg6kM_I_: classes.o; @@ -1838,7 +1714,6 @@ text: .text%__1cZPhaseConservativeCoalesceGverify6M_v_; text: .text%__1cRcmpFastUnlockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cQshlI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cXmembar_release_lockNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKPSYoungGenNused_in_bytes6kM_I_; text: .text%__1cOMachEpilogNodeIpipeline6kM_pknIPipeline__; text: .text%__1cKCompiledICSset_to_monomorphic6MrknOCompiledICInfo__v_; text: .text%__1cJloadFNodeIpipeline6kM_pknIPipeline__; @@ -1851,8 +1726,6 @@ text: .text%JVM_FillInStackTrace; text: .text%__1cKJavaThreadGactive6F_p0_; text: .text%__1cKstoreFNodePoper_input_base6kM_I_: ad_sparc_misc.o; text: .text%__1cQjava_lang_StringOchar_converter6FnGHandle_HHpnGThread__1_; -text: .text%__1cMVirtualSpaceNreserved_size6kM_I_; -text: .text%__1cICodeHeapMmax_capacity6kM_I_; text: .text%__1cRsubI_zero_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cHTypePtrFxmeet6kMpknEType__3_; text: .text%__1cNflagsRegFOperEtype6kM_pknEType__: ad_sparc.o; @@ -1860,7 +1733,6 @@ text: .text%__1cIMinINodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cFParseWensure_phis_everywhere6M_v_; text: .text%__1cLRethrowNodeEhash6kM_I_: classes.o; text: .text%__1cIDivLNodeGOpcode6kM_i_; -text: .text%__1cPlocal_vsnprintf6FpcIpkcpv_i_; text: .text%__1cNDispatchTableJset_entry6MirnKEntryPoint__v_; text: .text%__1cNmethodOopDescVclear_native_function6M_v_; text: .text%__1cOloadConL13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; @@ -1933,7 +1805,6 @@ text: .text%__1cIPhaseCFGQGlobalCodeMotion6MrnHMatcher_IrnJNode_List__v_; text: .text%__1cHMatcherTFixup_Save_On_Entry6M_v_; text: .text%__1cHMatcherPinit_spill_mask6MpnENode__v_; text: .text%__1cHCompileICode_Gen6M_v_; -text: .text%__1cFArena2t6MI_v_; text: .text%__1cUDebugInfoWriteStream2t6MpnYDebugInformationRecorder_i_v_; text: .text%__1cHMatcherVinit_first_stack_mask6M_v_; text: .text%__1cFArenaNmove_contents6Mp0_1_; @@ -1972,7 +1843,6 @@ text: .text%__1cRsubI_zero_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cHRetNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIConDNodeGOpcode6kM_i_; text: .text%__1cObranchConFNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cTresource_free_bytes6FpcI_v_; text: .text%__1cNmethodOopDescbDbuild_interpreter_method_data6FnMmethodHandle_pnGThread__v_; text: .text%__1cRcompL_reg_conNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cNMemoryManagerHoops_do6MpnKOopClosure__v_; @@ -1981,10 +1851,8 @@ text: .text%__1cFciEnvKcompile_id6M_I_; text: .text%__1cPmethodDataKlassIallocate6MnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; text: .text%__1cKoopFactoryOnew_methodData6FnMmethodHandle_pnGThread__pnRmethodDataOopDesc__; text: .text%__1cIAndLNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cKCodeBuffer2t6MpCi_v_; text: .text%__1cVshrL_reg_imm6_L2INodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cLConvL2INodeIIdentity6MpnOPhaseTransform__pnENode__; -text: .text%__1cIciMethodRinstructions_size6M_i_; text: .text%__1cSmulI_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cCosXthread_local_storage_at6Fi_pv_; text: .text%__1cMindIndexOperNconstant_disp6kM_i_: ad_sparc.o; @@ -2013,10 +1881,8 @@ text: .text%__1cLOpaque2NodeLbottom_type6kM_pknEType__: connode.o; text: .text%__1cSconvI2D_helperNodeIpipeline6kM_pknIPipeline__; text: .text%__1cUPSGenerationCountersKupdate_all6M_v_: psGenerationCounters.o; text: .text%__1cQComputeCallStackHdo_long6M_v_: generateOopMap.o; -text: .text%__1cKTypeOopPtrSmake_from_constant6FpnIciObject__pk0_; text: .text%__1cQregP_to_stkPNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cOGenerateOopMapHppstore6MpnNCellTypeState_i_v_; -text: .text%__1cJTimeStampSticks_since_update6kM_x_; text: .text%__1cQmodI_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cIMulINodeImul_ring6kMpknEType_3_3_; text: .text%__1cURethrowExceptionNodeIpipeline6kM_pknIPipeline__; @@ -2027,18 +1893,15 @@ text: .text%__1cSaddI_reg_imm13NodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cIModINodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cKklassKlassIoop_size6kMpnHoopDesc__i_; text: .text%__1cJcmpOpOperHgreater6kM_i_: ad_sparc_clone.o; -text: .text%__1cJimmL0OperJconstantL6kM_x_: ad_sparc_clone.o; text: .text%__1cJimmI0OperJnum_edges6kM_I_: ad_sparc_clone.o; text: .text%__1cFStateM_sub_Op_ConL6MpknENode__v_; text: .text%__1cOloadConL13NodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cNObjectMonitorHis_busy6kM_i_; text: .text%JVM_GetClassNameUTF; text: .text%__1cKloadUBNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cIXorINodeGadd_id6kM_pknEType__: classes.o; text: .text%__1cFStateM_sub_Op_AndI6MpknENode__v_; text: .text%__1cVshrL_reg_imm6_L2INodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cKcmpOpFOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cLRuntimeStubHoops_do6MpnKOopClosure__v_: codeBlob.o; text: .text%__1cTmembar_volatileNodeIpipeline6kM_pknIPipeline__; text: .text%__1cJloadFNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cFStateL_sub_Op_OrI6MpknENode__v_; @@ -2059,14 +1922,11 @@ text: .text%__1cNloadConL0NodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; text: .text%__1cFTypeFEmake6Ff_pk0_; text: .text%__1cIimmFOperJconstantF6kM_f_: ad_sparc_clone.o; text: .text%__1cEUTF8Ounicode_length6Fpkc_i_; -text: .text%__1cCosRcurrent_thread_id6F_i_; text: .text%__1cUSafepointSynchronizeFblock6FpnKJavaThread__v_; text: .text%__1cOGenerateOopMapJppdupswap6Mipkc_v_; -text: .text%__1cJttyLockerbCbreak_tty_lock_for_safepoint6Fi_v_; text: .text%__1cSmembar_acquireNodeIadr_type6kM_pknHTypePtr__; text: .text%__1cPorI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIPhaseCFGOinsert_goto_at6MII_v_; -text: .text%__1cITypeLongFwiden6kMpknEType__3_; text: .text%__1cSThreadLocalStoragePget_thread_slow6F_pnGThread__; text: .text%__1cPCallRuntimeNodeGOpcode6kM_i_; text: .text%__1cJcmpOpOperNgreater_equal6kM_i_: ad_sparc_clone.o; @@ -2074,7 +1934,6 @@ text: .text%__1cMindIndexOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o text: .text%__1cMindIndexOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; text: .text%__1cMindIndexOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; text: .text%JVM_FindClassFromClass; -text: .text%__1cRshrP_reg_imm5NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cObranchConFNodePoper_input_base6kM_I_: ad_sparc_misc.o; text: .text%__1cQshrI_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cbDjava_lang_reflect_ConstructorFclazz6FpnHoopDesc__2_; @@ -2092,12 +1951,10 @@ text: .text%__1cSciExceptionHandlerLcatch_klass6M_pnPciInstanceKlass__; text: .text%__1cMloadConFNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; text: .text%__1cKcmpOpPOperNgreater_equal6kM_i_: ad_sparc_clone.o; text: .text%__1cLRShiftLNodeLbottom_type6kM_pknEType__: classes.o; -text: .text%__1cKimmL13OperJconstantL6kM_x_: ad_sparc_clone.o; text: .text%__1cSTailCalljmpIndNodePoper_input_base6kM_I_: ad_sparc_misc.o; text: .text%__1cKstoreLNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cGIfNodeMdominated_by6MpnENode_pnMPhaseIterGVN__v_; text: .text%__1cOcompiledVFrame2t6MpknFframe_pknLRegisterMap_pnKJavaThread_pnJScopeDesc__v_; -text: .text%__1cJScopeDesc2t6MpknHnmethod_i_v_; text: .text%__1cQshlI_reg_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cOGenerateOopMapJdo_astore6Mi_v_; text: .text%__1cbFunnecessary_membar_volatileNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; @@ -2127,7 +1984,6 @@ text: .text%__1cLBoxLockNode2t6Mi_v_; text: .text%__1cPconvF2D_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cLOptoRuntimebBcomplete_monitor_enter_Type6F_pknITypeFunc__; text: .text%__1cIGraphKitLshared_lock6MpnENode__pnMFastLockNode__; -text: .text%__1cPcmpFastLockNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNloadConP0NodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cRorI_reg_imm13NodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cKcmpOpUOperEless6kM_i_: ad_sparc_clone.o; @@ -2135,7 +1991,6 @@ text: .text%__1cQaddF_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cRLowMemoryDetectorWdetect_after_gc_memory6FpnKMemoryPool__v_; text: .text%lwp_mutex_init: os_solaris.o; text: .text%__1cRsubI_zero_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cFframeLnmethods_do6M_v_; text: .text%__1cQjava_lang_ThreadGthread6FpnHoopDesc__pnKJavaThread__; text: .text%__1cQnotemp_iRegIOperEtype6kM_pknEType__: ad_sparc.o; text: .text%__1cITemplateIbytecode6kM_nJBytecodesECode__; @@ -2174,11 +2029,9 @@ text: .text%jni_GetObjectClass: jni.o; text: .text%__1cSxorI_reg_imm13NodeIpipeline6kM_pknIPipeline__; text: .text%__1cOMacroAssemblerFalign6Mi_v_; text: .text%__1cRappend_interfaces6FnOobjArrayHandle_ripnPobjArrayOopDesc__v_; -text: .text%__1cKManagementJtimestamp6F_x_; text: .text%__1cIPSOldGenPupdate_counters6M_v_; text: .text%__1cQshrI_reg_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cFForteNregister_stub6FpkcpC3_v_; -text: .text%__1cFVTuneNregister_stub6FpkcpC3_v_; text: .text%__1cNinstanceKlassbFlookup_method_in_all_interfaces6kMpnNsymbolOopDesc_2_pnNmethodOopDesc__; text: .text%__1cTloadL_unalignedNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cJloadLNodeOmemory_operand6kM_pknIMachOper__; @@ -2222,7 +2075,6 @@ text: .text%__1cMLinkResolverXresolve_invokeinterface6FrnICallInfo_nGHandle_nSco text: .text%__1cKC2CompilerOcompile_method6MpnFciEnv_pnIciMethod_i_v_; text: .text%JVM_GetClassLoader; text: .text%__1cNCompileBrokerZinvoke_compiler_on_method6FpnLCompileTask__v_; -text: .text%__1cCosRelapsed_frequency6F_x_; text: .text%__1cFStateP_sub_Op_ConvL2I6MpknENode__v_; text: .text%__1cOPhaseIdealLoopLdo_split_if6MpnENode__v_; text: .text%__1cLAccessFlagsRatomic_clear_bits6Mi_v_; @@ -2249,11 +2101,9 @@ text: .text%__1cSmembar_acquireNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cYDebugInformationRecorderHcopy_to6MpnHnmethod__v_; text: .text%__1cVExceptionHandlerTableHcopy_to6MpnHnmethod__v_; text: .text%__1cJCodeCacheGcommit6FpnICodeBlob__v_; -text: .text%__1cFVTuneOcreate_nmethod6FpnHnmethod__v_; text: .text%__1cHnmethodQcopy_scopes_data6MpCi_v_; text: .text%__1cFciEnvVnum_inlined_bytecodes6kM_i_; text: .text%__1cWImplicitExceptionTableHcopy_to6MpnHnmethod__v_; -text: .text%__1cLOopRecorderHcopy_to6MpnICodeBlob__v_; text: .text%__1cIciMethodRbuild_method_data6M_v_; text: .text%__1cHCompileIOptimize6M_v_; text: .text%__1cHCompileLFinish_Warm6M_v_; @@ -2287,7 +2137,6 @@ text: .text%__1cTmembar_volatileNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cNloadConL0NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cQComputeCallStackGdo_int6M_v_: generateOopMap.o; text: .text%__1cXmembar_acquire_lockNodeIadr_type6kM_pknHTypePtr__; -text: .text%__1cKPSYoungGenRcapacity_in_bytes6kM_I_; text: .text%__1cNSafepointBlobbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_: codeBlob.o; text: .text%__1cOloadConI13NodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cJloadSNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -2299,7 +2148,6 @@ text: .text%__1cNSignatureInfoIdo_short6M_v_: bytecode.o; text: .text%__1cLBoxLockNodeDcmp6kMrknENode__I_; text: .text%__1cSCompiledStaticCallSset_to_interpreted6MnMmethodHandle_pC_v_; text: .text%__1cSCompiledStaticCallJfind_stub6M_pC_; -text: .text%__1cRNativeMovConstRegIset_data6Mi_v_; text: .text%__1cFParsebLincrement_and_test_invocation_counter6Mi_v_; text: .text%__1cSsafePoint_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMTailCallNodeGOpcode6kM_i_; @@ -2325,7 +2173,6 @@ text: .text%__1cKScopeValueJread_from6FpnTDebugInfoReadStream__p0_; text: .text%__1cKPerfMemoryMmark_updated6F_v_; text: .text%__1cSobjArrayKlassKlassbCallocate_objArray_klass_impl6FnYobjArrayKlassKlassHandle_inLKlassHandle_pnGThread__pnMklassOopDesc__; text: .text%__1cIPerfData2t6MnJCounterNS_pkcn0AFUnits_n0ALVariability__v_; -text: .text%__1cKPerfMemoryFalloc6FI_pc_; text: .text%__1cLStrCompNodeKmatch_edge6kMI_I_; text: .text%__1cQmulL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cILocation2t6MpnTDebugInfoReadStream__v_; @@ -2359,13 +2206,11 @@ text: .text%__1cXJNI_ArgumentPusherVaArgHget_int6M_v_: jni.o; text: .text%__1cRbranchLoopEndNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cQaddF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cKcmpOpUOperHgreater6kM_i_: ad_sparc_clone.o; -text: .text%__1cUParallelScavengeHeapEused6kM_I_; text: .text%__1cIDivINodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cQmulF_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cQxorI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cWCallLeafNoFPDirectNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cLcmpD_ccNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cWCallLeafNoFPDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJloadINodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cbBopt_virtual_call_RelocationLstatic_stub6M_pC_; text: .text%__1cNTemplateTableDdef6FnJBytecodesECode_inITosState_3pFi_vi_v_; @@ -2392,8 +2237,6 @@ text: .text%__1cSandI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIimmLOperJnum_edges6kM_I_: ad_sparc_clone.o; text: .text%__1cFParseOmerge_new_path6Mi_v_; text: .text%__1cQregP_to_stkPNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cQjava_lang_StringGoffset6FpnHoopDesc__i_; -text: .text%__1cQjava_lang_StringFvalue6FpnHoopDesc__pnQtypeArrayOopDesc__; text: .text%__1cQjava_lang_StringScreate_from_symbol6FnMsymbolHandle_pnGThread__nGHandle__; text: .text%__1cSmembar_releaseNodeLout_RegMask6kM_rknHRegMask__; text: .text%jni_NewByteArray: jni.o; @@ -2402,7 +2245,6 @@ text: .text%__1cJJavaCallsMcall_special6FpnJJavaValue_nGHandle_nLKlassHandle_nMs text: .text%__1cQSystemDictionarybAvalidate_protection_domain6FnTinstanceKlassHandle_nGHandle_2pnGThread__v_; text: .text%__1cKDictionaryVadd_protection_domain6MiInTinstanceKlassHandle_nGHandle_2pnGThread__v_; text: .text%__1cFParseLdo_newarray6MnJBasicType__v_; -text: .text%__1cPmethodDataKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cNmethodOopDescKklass_name6kM_pnNsymbolOopDesc__; text: .text%__1cSconvI2D_helperNodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cLstoreP0NodeLout_RegMask6kM_rknHRegMask__; @@ -2427,7 +2269,6 @@ text: .text%__1cSmulI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cZInterpreterMacroAssemblerZget_2_byte_integer_at_bcp6MipnMRegisterImpl_2n0ALsignedOrNot_n0AKsetCCOrNot__v_; text: .text%__1cQcmovI_reg_gtNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cURethrowExceptionNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPfieldDescriptorSlong_initial_value6kM_x_; text: .text%__1cISubLNodeDsub6kMpknEType_3_3_; text: .text%__1cPciObjArrayKlass2t6MnLKlassHandle__v_; text: .text%__1cJLoadINodeMstore_Opcode6kM_i_: classes.o; @@ -2443,7 +2284,6 @@ text: .text%__1cJCMoveNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%jni_GetStringCritical: jni.o; text: .text%__1cHciKlassSsuper_check_offset6M_I_; text: .text%__1cPciObjArrayKlassGloader6M_pnHoopDesc__: ciObjArrayKlass.o; -text: .text%__1cWCallLeafNoFPDirectNodeKmethod_set6Mi_v_; text: .text%__1cWCallLeafNoFPDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIDivLNodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cPICStubInterfaceRcode_size_to_size6kMi_i_: icBuffer.o; @@ -2454,7 +2294,6 @@ text: .text%__1cJScopeDescGsender6kM_p0_; text: .text%__1cSxorI_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cOcompiledVFrameGsender6kM_pnGvframe__; text: .text%__1cZInterpreterMacroAssemblerDpop6MnITosState__v_; -text: .text%__1cGThreadHoops_do6MpnKOopClosure__v_; text: .text%__1cQPlaceholderTableHoops_do6MpnKOopClosure__v_; text: .text%__1cXJvmtiCurrentBreakpointsHoops_do6FpnKOopClosure__v_; text: .text%__1cNMemoryServiceHoops_do6FpnKOopClosure__v_; @@ -2462,7 +2301,6 @@ text: .text%__1cNThreadServiceHoops_do6FpnKOopClosure__v_; text: .text%__1cKJNIHandlesHoops_do6FpnKOopClosure__v_; text: .text%__1cQSystemDictionaryRpreloaded_oops_do6FpnKOopClosure__v_; text: .text%__1cLJvmtiExportHoops_do6FpnKOopClosure__v_; -text: .text%__1cIVMThreadHoops_do6MpnKOopClosure__v_; text: .text%__1cKJNIHandlesMweak_oops_do6FpnRBoolObjectClosure_pnKOopClosure__v_; text: .text%__1cSObjectSynchronizerHoops_do6FpnKOopClosure__v_; text: .text%__1cMFlatProfilerHoops_do6FpnKOopClosure__v_; @@ -2481,7 +2319,6 @@ text: .text%__1cOCompiledRFrameKtop_method6kM_nMmethodHandle__: rframe.o; text: .text%__1cKReflectionTget_parameter_types6FnMmethodHandle_ippnHoopDesc_pnGThread__nOobjArrayHandle__; text: .text%__1cRtestI_reg_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cOcmovIL_immNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cJimmU6OperIconstant6kM_i_: ad_sparc_clone.o; text: .text%__1cHRegMask2t6M_v_: matcher.o; text: .text%__1cOGenerateOopMapIcopy_cts6MpnNCellTypeState_2_i_; text: .text%__1cNObjectMonitorGEnterI6MpnGThread__v_; @@ -2494,7 +2331,6 @@ text: .text%__1cXvirtual_call_RelocationEtype6M_nJrelocInfoJrelocType__: relocIn text: .text%__1cPPerfDataManagerMcounter_name6Fpkc2_pc_; text: .text%__1cIModLNodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cMloadConFNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cbBjava_lang_ref_SoftReferenceJset_clock6Fx_v_; text: .text%__1cbAPSGCAdaptivePolicyCountersbBupdate_counters_from_policy6M_v_; text: .text%__1cXTraceMemoryManagerStats2T6M_v_; text: .text%__1cQSystemDictionaryHoops_do6FpnKOopClosure__v_; @@ -2510,8 +2346,6 @@ text: .text%__1cMTypeKlassPtrFxmeet6kMpknEType__3_; text: .text%__1cKPSYoungGenPupdate_counters6M_v_; text: .text%__1cWThreadLocalAllocBufferbFaccumulate_statistics_before_gc6F_v_; text: .text%__1cWThreadLocalAllocBufferQresize_all_tlabs6F_v_; -text: .text%__1cPGCMemoryManagerIgc_begin6M_v_; -text: .text%__1cPGCMemoryManagerGgc_end6M_v_; text: .text%__1cRLowMemoryDetectorRdetect_low_memory6F_v_; text: .text%__1cNMemoryServiceStrack_memory_usage6F_v_; text: .text%__1cbAPSGCAdaptivePolicyCountersPupdate_counters6M_v_; @@ -2527,19 +2361,16 @@ text: .text%__1cORuntimeServicebDrecord_safepoint_synchronized6F_v_; text: .text%__1cQaddF_reg_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cUSafepointSynchronizeFbegin6F_v_; text: .text%__1cKarrayKlassTallocate_arrayArray6MiipnGThread__pnPobjArrayOopDesc__; -text: .text%__1cONMethodSweeperFsweep6F_v_; text: .text%__1cCosbAmake_polling_page_readable6F_v_; text: .text%__1cUSafepointSynchronizeDend6F_v_; text: .text%__1cOcmovII_immNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cORuntimeServiceUrecord_safepoint_end6F_v_; -text: .text%__1cKimmU13OperIconstant6kM_i_: ad_sparc_clone.o; text: .text%__1cQshlL_reg_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cUcompU_iReg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%JVM_GetCallerClass; text: .text%__1cNSignatureInfoHdo_byte6M_v_: bytecode.o; text: .text%__1cOcmovPP_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cKstoreBNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSobjArrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cLstoreC0NodePoper_input_base6kM_I_: ad_sparc_misc.o; text: .text%__1cTloadL_unalignedNodePoper_input_base6kM_I_: ad_sparc_misc.o; text: .text%__1cICmpFNodeGOpcode6kM_i_; @@ -2551,7 +2382,6 @@ text: .text%jni_IsAssignableFrom: jni.o; text: .text%jni_GetFieldID: jni.o; text: .text%__1cJLoadPNodeMstore_Opcode6kM_i_: classes.o; text: .text%__1cLstoreB0NodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cZInterpreterMacroAssemblerbAget_cache_and_index_at_bcp6MpnMRegisterImpl_2i_v_; text: .text%__1cHTypeAryFxdual6kM_pknEType__; text: .text%__1cMtlsLoadPNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIVMThreadHexecute6FpnMVM_Operation__v_; @@ -2582,9 +2412,6 @@ text: .text%__1cZSerialOldToYoungRootsTaskFdo_it6MpnNGCTaskManager_I_v_; text: .text%__1cQinstanceRefKlassZacquire_pending_list_lock6FpnJBasicLock__v_; text: .text%__1cZSerialOldToYoungRootsTaskEname6M_pc_: psTasks.o; text: .text%__1cKPSYoungGenLswap_spaces6M_v_; -text: .text%__1cUParallelScavengeHeapQresize_young_gen6MII_v_; -text: .text%__1cKPSYoungGenGresize6MII_v_; -text: .text%__1cKPSYoungGenNresize_spaces6MII_v_; text: .text%__1cSPSPromotionManagerbBvm_thread_promotion_manager6F_p0_; text: .text%__1cUWaitForBarrierGCTaskIwait_for6M_v_; text: .text%__1cPVM_GC_OperationNdoit_epilogue6M_v_; @@ -2626,9 +2453,7 @@ text: .text%__1cJloadSNodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cRloadConP_pollNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNObjectMonitorHRecycle6M_v_; text: .text%__1cNSharedRuntimeSfind_callee_method6FpnKJavaThread_pnGThread__nMmethodHandle__; -text: .text%__1cMloadConLNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJloadDNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; -text: .text%__1cQSystemDictionaryTresolve_from_stream6FnMsymbolHandle_nGHandle_2pnPClassFileStream_pnGThread__pnMklassOopDesc__; text: .text%__1cQstkI_to_regFNodeIpipeline6kM_pknIPipeline__; text: .text%__1cQregP_to_stkPNodeIpipeline6kM_pknIPipeline__; text: .text%__1cZInterpreterMacroAssemblerFpop_i6MpnMRegisterImpl__v_; @@ -2636,9 +2461,7 @@ text: .text%__1cIMaxINodeGadd_id6kM_pknEType__: classes.o; text: .text%__1cNSharedRuntimeTreresolve_call_site6FpnKJavaThread_pnGThread__nMmethodHandle__; text: .text%__1cYcompareAndSwapL_boolNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNSCMemProjNodeJideal_reg6kM_I_: classes.o; -text: .text%__1cYcompareAndSwapL_boolNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cIProjNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cIPSOldGenMmax_gen_size6M_I_: psOldGen.o; text: .text%__1cKExceptionsK_throw_msg6FpnGThread_pkcipnNsymbolOopDesc_4_v_; text: .text%__1cSdivL_reg_imm13NodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cbDVM_ParallelGCFailedAllocationEdoit6M_v_; @@ -2659,7 +2482,6 @@ text: .text%__1cPstoreI_FregNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cKCMovePNodeGOpcode6kM_i_; text: .text%__1cLstoreC0NodeIpipeline6kM_pknIPipeline__; text: .text%JVM_MonitorWait; -text: .text%__1cSObjectSynchronizerEwait6FnGHandle_xpnGThread__v_; text: .text%__1cIAddLNodeIadd_ring6kMpknEType_3_3_; text: .text%__1cHciKlass2t6MpnIciSymbol_p0_v_; text: .text%__1cGciType2t6MpnHciKlass__v_; @@ -2678,7 +2500,6 @@ text: .text%__1cIciSymbolHbyte_at6Mi_i_; text: .text%__1cKCompiledICSset_ic_destination6MpC_v_; text: .text%__1cQaddD_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cCosTset_native_priority6FpnGThread_i_nIOSReturn__; -text: .text%__1cPPerfDataManagerUcreate_long_variable6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongVariable__; text: .text%__1cQset_lwp_priority6Fiii_i_; text: .text%__1cQjava_lang_StringTcreate_oop_from_str6FpkcpnGThread__pnHoopDesc__; text: .text%jni_NewStringUTF: jni.o; @@ -2689,7 +2510,6 @@ text: .text%__1cSbranchCon_longNodeGnegate6M_v_: ad_sparc_misc.o; text: .text%__1cKcmpOpUOperKless_equal6kM_i_: ad_sparc_clone.o; text: .text%__1cPciInstanceKlassNloader_handle6M_pnI_jobject__; text: .text%__1cPciInstanceKlassYprotection_domain_handle6M_pnI_jobject__; -text: .text%__1cUParallelScavengeHeapIcapacity6kM_I_; text: .text%__1cNmethodOopDescKjmethod_id6M_pnK_jmethodID__; text: .text%__1cSsubL_reg_reg_2NodeIpipeline6kM_pknIPipeline__; text: .text%JVM_DefineClassWithSource; @@ -2705,7 +2525,6 @@ text: .text%__1cOcmovPP_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cSThreadLocalStorageSset_thread_in_slot6FpnGThread__v_; text: .text%get_thread; text: .text%__1cKstoreCNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cSThreadLocalStoragebBget_thread_via_cache_slowly6FIi_pnGThread__; text: .text%__1cSThreadLocalStorageKset_thread6FpnGThread__v_; text: .text%jni_CallIntMethod: jni.o; text: .text%__1cSThreadLocalStorageNpd_set_thread6FpnGThread__v_; @@ -2735,7 +2554,6 @@ text: .text%__1cQregI_to_stkINodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cQmulF_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_5pnGThread__v_; text: .text%__1cXSignatureHandlerLibraryOpd_set_handler6FpC_v_; -text: .text%__1cSInterpreterRuntimeZSignatureHandlerGeneratorIgenerate6MX_v_; text: .text%JVM_IsPrimitiveClass; text: .text%__1cJimmU6OperJnum_edges6kM_I_: ad_sparc_clone.o; text: .text%__1cOPhaseIdealLoopUpeeled_dom_test_elim6MpnNIdealLoopTree_rnJNode_List__v_; @@ -2758,7 +2576,6 @@ text: .text%__1cKReflectionPnew_constructor6FnMmethodHandle_pnGThread__pnHoopDes text: .text%__1cOcmovII_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cSdivL_reg_imm13NodeIpipeline6kM_pknIPipeline__; text: .text%__1cTloadL_unalignedNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cNSharedRuntimeDd2l6Fd_x_; text: .text%__1cJStubQdDueueRrequest_committed6Mi_pnEStub__; text: .text%__1cRInlineCacheBufferRic_stub_code_size6F_i_; text: .text%__1cFStateP_sub_Op_RShiftL6MpknENode__v_; @@ -2808,7 +2625,6 @@ text: .text%__1cJloadINodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cSdivL_reg_imm13NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cRloadConP_pollNodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cIModINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cZCallDynamicJavaDirectNodeKmethod_set6Mi_v_; text: .text%__1cZCallDynamicJavaDirectNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cSconvD2I_helperNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cZCallDynamicJavaDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -2846,7 +2662,6 @@ text: .text%__1cYjava_lang_reflect_MethodWset_annotation_default6FpnHoopDesc_2_v text: .text%__1cYjava_lang_reflect_MethodTset_parameter_types6FpnHoopDesc_2_v_; text: .text%__1cYjava_lang_reflect_MethodTset_exception_types6FpnHoopDesc_2_v_; text: .text%__1cYjava_lang_reflect_MethodNset_modifiers6FpnHoopDesc_i_v_; -text: .text%__1cOimmI_32_63OperIconstant6kM_i_: ad_sparc_clone.o; text: .text%__1cYjava_lang_reflect_MethodIset_name6FpnHoopDesc_2_v_; text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cSsubL_reg_reg_2NodeLout_RegMask6kM_rknHRegMask__; @@ -2855,7 +2670,6 @@ text: .text%__1cOstackSlotPOperEtype6kM_pknEType__: ad_sparc.o; text: .text%jni_GetMethodID: jni.o; text: .text%__1cQshlL_reg_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cIMulINodeJideal_reg6kM_I_: classes.o; -text: .text%__1cNminI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cRshlI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cOloadConL13NodeIpipeline6kM_pknIPipeline__; text: .text%__1cNObjectMonitorGnotify6MpnGThread__v_; @@ -2877,7 +2691,6 @@ text: .text%__1cQcmovI_reg_ltNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cNloadConL0NodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cKo1RegPOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cSsubL_reg_reg_1NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cIBytecodeIset_code6MnJBytecodesECode__v_; text: .text%__1cQshrL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cRsarL_reg_imm6NodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cJloadFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -2921,7 +2734,6 @@ text: .text%__1cGThread2t6M_v_; text: .text%__1cCosHSolarisPhotspot_sigmask6FpnGThread__v_; text: .text%__1cCosHSolarisVinit_thread_fpu_state6F_v_; text: .text%__1cFTypeFFxmeet6kMpknEType__3_; -text: .text%__1cCosScurrent_stack_size6F_I_; text: .text%__1cIOSThreadNpd_initialize6M_v_; text: .text%__1cCosScurrent_stack_base6F_pC_; text: .text%__1cIOSThread2t6MpFpv_i1_v_; @@ -2948,7 +2760,6 @@ text: .text%__1cFStateM_sub_Op_SubL6MpknENode__v_; text: .text%__1cKCompiledICMstub_address6kM_pC_; text: .text%__1cJvmSymbolsOsignature_type6FpnNsymbolOopDesc__nJBasicType__; text: .text%__1cQsubL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cQmodI_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cISubDNodeGOpcode6kM_i_; text: .text%__1cQmodI_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cPfieldDescriptorLannotations6kM_pnQtypeArrayOopDesc__; @@ -2984,13 +2795,10 @@ text: .text%__1cJMarkSweepMfollow_stack6F_v_; text: .text%__1cNimmP_pollOperJnum_edges6kM_I_: ad_sparc_clone.o; text: .text%__1cRtestI_reg_immNodeIpipeline6kM_pknIPipeline__; text: .text%__1cJMemRegionMintersection6kMk0_0_; -text: .text%__1cKJavaThread2t6MpFp0pnGThread__vI_v_; text: .text%__1cKJavaThreadDrun6M_v_; -text: .text%__1cNSafepointBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; text: .text%__1cPjava_lang_ClassOprimitive_type6FpnHoopDesc__nJBasicType__; text: .text%JVM_IsArrayClass; text: .text%jni_CallStaticVoidMethod: jni.o; -text: .text%__1cPPerfDataManagerTcreate_long_counter6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnPPerfLongCounter__; text: .text%__1cLConvF2DNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cNsymbolOopDescWas_klass_external_name6kM_pkc_; text: .text%__1cHnmethodbDpreserve_callee_argument_oops6MnFframe_pknLRegisterMap_pnKOopClosure__v_; @@ -3017,14 +2825,12 @@ text: .text%__1cXNativeSignatureIteratorGdo_int6M_v_: interpreterRT_sparc.o; text: .text%__1cINodeHashEgrow6M_v_; text: .text%__1cOGenerateOopMapPdo_monitorenter6Mi_v_; text: .text%__1cOcmovPP_regNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; -text: .text%__1cMloadConDNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cIMaxINodeIadd_ring6kMpknEType_3_3_; text: .text%__1cJloadSNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cOGenerateOopMapLcompute_map6MpnGThread__v_; text: .text%__1cLConvF2DNodeLbottom_type6kM_pknEType__: classes.o; text: .text%JVM_Open; text: .text%__1cRInvocationCounterFreset6M_v_; -text: .text%__1cRCompilationPolicybIreset_counter_for_invocation_event6MnMmethodHandle__v_; text: .text%__1cOGenerateOopMap2t6MnMmethodHandle__v_; text: .text%__1cOGenerateOopMapRdo_interpretation6M_v_; text: .text%__1cIRetTableRcompute_ret_table6MnMmethodHandle__v_; @@ -3042,7 +2848,6 @@ text: .text%__1cIGraphKitSprecision_rounding6MpnENode__2_; text: .text%__1cNPerfByteArray2t6MnJCounterNS_pkcnIPerfDataFUnits_n0CLVariability_i_v_; text: .text%__1cIGraphKitRcreate_and_map_if6MpnENode_2ff_pnGIfNode__: generateOptoStub.o; text: .text%__1cQjava_lang_ThreadIpriority6FpnHoopDesc__nOThreadPriority__; -text: .text%__1cQjava_lang_ThreadJstackSize6FpnHoopDesc__x_; text: .text%__1cMLinkResolverYresolve_interface_method6FrnMmethodHandle_rnLKlassHandle_nSconstantPoolHandle_ipnGThread__v_; text: .text%__1cKJavaThreadHprepare6MpnI_jobject_nOThreadPriority__v_; text: .text%__1cTLoadD_unalignedNodeGOpcode6kM_i_; @@ -3077,7 +2882,6 @@ text: .text%__1cSTailCalljmpIndNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cOGenerateOopMapEppop6MpnNCellTypeState__v_; text: .text%__1cSTailCalljmpIndNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cQsubF_reg_regNodeIpipeline6kM_pknIPipeline__; -text: .text%__1cRNativeMovConstRegEdata6kM_i_; text: .text%__1cbFunnecessary_membar_volatileNodeLbottom_type6kM_pknEType__: ad_sparc_misc.o; text: .text%__1cLcmpF_ccNodeIpipeline6kM_pknIPipeline__; text: .text%__1cNObjectMonitorJnotifyAll6MpnGThread__v_; @@ -3144,7 +2948,6 @@ text: .text%__1cLstoreF0NodeIpipeline6kM_pknIPipeline__; text: .text%__1cIMinINodeIadd_ring6kMpknEType_3_3_; text: .text%JVM_GetInheritedAccessControlContext; text: .text%__1cPPerfDataManagerWcreate_string_constant6FnJCounterNS_pkc3pnGThread__pnSPerfStringConstant__; -text: .text%__1cNmaxI_eRegNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%JVM_NativePath; text: .text%__1cOMacroAssemblerNflush_windows6M_v_; text: .text%__1cSsubD_regD_regDNodeIpipeline6kM_pknIPipeline__; @@ -3157,19 +2960,15 @@ text: .text%__1cVinline_cache_regPOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cKstorePNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cQObjectStartArrayFreset6M_v_; text: .text%__1cPconvI2D_memNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHThreadsHoops_do6FpnKOopClosure__v_; text: .text%__1cQaddD_reg_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cLConvF2INodeGOpcode6kM_i_; text: .text%__1cVCallRuntimeDirectNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cJHashtableGunlink6MpnRBoolObjectClosure__v_; text: .text%__1cIPSOldGenPadjust_pointers6M_v_; -text: .text%__1cVCallRuntimeDirectNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cOcmovPI_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cIPSOldGenHcompact6M_v_; text: .text%__1cMtlsLoadPNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cLcmpF_ccNodeErule6kM_I_: ad_sparc_misc.o; -text: .text%__1cVCallRuntimeDirectNodeKmethod_set6Mi_v_; -text: .text%__1cKimmI11OperIconstant6kM_i_: ad_sparc_clone.o; text: .text%__1cQcmovI_reg_gtNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cLstoreP0NodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cOcmovIF_regNodeErule6kM_I_: ad_sparc_misc.o; @@ -3177,7 +2976,6 @@ text: .text%__1cOcmovLL_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%jni_GetStaticMethodID: jni.o; text: .text%__1cZInterpreterMacroAssemblerUupdate_mdp_by_offset6MipnMRegisterImpl__v_; text: .text%__1cRtestI_reg_immNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHnmethodbAmake_not_entrant_or_zombie6Mi_v_; text: .text%__1cPconvF2D_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cOPhaseIdealLoopKdo_peeling6MpnNIdealLoopTree_rnJNode_List__v_; text: .text%__1cOcmovLL_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; @@ -3210,7 +3008,6 @@ text: .text%__1cSaddD_regD_regDNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cSaddP_reg_imm13NodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cXconvI2D_regDHi_regDNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cKstoreFNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cPPerfDataManagerUcreate_long_constant6FnJCounterNS_pkcnIPerfDataFUnits_xpnGThread__pnQPerfLongConstant__; text: .text%__1cOMacroAssemblerNget_vm_result6MpnMRegisterImpl__v_; text: .text%__1cQsubF_reg_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cZInterpreterMacroAssemblerbIcompute_extra_locals_size_in_bytes6MpnMRegisterImpl_22_v_; @@ -3250,7 +3047,6 @@ text: .text%__1cQsubF_reg_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%jni_NewObjectV: jni.o; text: .text%__1cOcmovLI_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cPciInstanceKlassLjava_mirror6M_pnKciInstance__; -text: .text%__1cCosHSolarisKmmap_chunk6FpcIii_2_; text: .text%__1cXPartialSubtypeCheckNodeLbottom_type6kM_pknEType__: classes.o; text: .text%jni_EnsureLocalCapacity; text: .text%__1cLstoreI0NodeOmemory_operand6kM_pknIMachOper__; @@ -3278,7 +3074,6 @@ text: .text%__1cLcmpD_ccNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cJloadLNodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cISubDNodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cZInterpreterMacroAssemblerUprofile_taken_branch6MpnMRegisterImpl_2_v_; -text: .text%__1cLResourceObj2n6FIn0APallocation_type__pv_; text: .text%__1cNSafePointNodeQpeek_monitor_box6kM_pnENode__; text: .text%__1cFTypeFFxdual6kM_pknEType__; text: .text%__1cICmpFNodeFValue6kMpnOPhaseTransform__pknEType__; @@ -3290,7 +3085,6 @@ text: .text%__1cINegDNodeLbottom_type6kM_pknEType__: classes.o; text: .text%__1cLConvI2FNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cOcmovLL_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cRorI_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cTloadL_unalignedNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cTloadL_unalignedNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cKloadUBNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cXconvI2D_regDHi_regDNodeIpipeline6kM_pknIPipeline__; @@ -3320,7 +3114,6 @@ text: .text%__1cMTailJumpNodeKmatch_edge6kMI_I_; text: .text%__1cWloadConI_x41f00000NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cODeoptimizationbJupdate_method_data_from_interpreter6FnQmethodDataHandle_ii_v_; text: .text%__1cIimmDOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cFframeZinterpreter_frame_set_mdx6Mi_v_; text: .text%__1cOstackSlotLOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; text: .text%__1cOstackSlotLOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; text: .text%__1cTloadD_unalignedNodeErule6kM_I_: ad_sparc_misc.o; @@ -3371,7 +3164,6 @@ text: .text%__1cYjava_lang_reflect_MethodEslot6FpnHoopDesc__i_; text: .text%__1cYjava_lang_reflect_MethodFclazz6FpnHoopDesc__2_; text: .text%__1cYinternal_word_RelocationGtarget6M_pC_; text: .text%__1cJStubQdDueueKremove_all6M_v_; -text: .text%__1cMloadConFNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cPconvI2D_memNodeIpipeline6kM_pknIPipeline__; text: .text%__1cPorL_reg_regNodeMideal_Opcode6kM_i_: ad_sparc_misc.o; text: .text%__1cZInterpreterMacroAssemblerLindex_check6MpnMRegisterImpl_2i22_v_; @@ -3405,12 +3197,10 @@ text: .text%__1cSInterpreterRuntimeQcreate_exception6FpnKJavaThread_pc3_v_; text: .text%__1cQComputeCallStackIdo_array6Mii_v_: generateOopMap.o; text: .text%__1cKPSYoungGenKprecompact6M_v_; text: .text%__1cXjava_lang_reflect_FieldEslot6FpnHoopDesc__i_; -text: .text%__1cSconvD2I_helperNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cMnegF_regNodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cHThreadsLgc_prologue6F_v_; text: .text%__1cHThreadsLgc_epilogue6F_v_; text: .text%__1cPconvI2L_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cPconvD2I_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4nGHandle_pnGThread__v_; text: .text%__1cUParallelScavengeHeapHcollect6MnHGCCauseFCause__v_; text: .text%__1cRCardTableModRefBSFclear6MnJMemRegion__v_; @@ -3441,18 +3231,12 @@ text: .text%__1cUPSMarkSweepDecoratorbIset_destination_decorator_perm_gen6F_v_; text: .text%__1cUPSMarkSweepDecoratorbHset_destination_decorator_tenured6F_v_; text: .text%__1cKDictionaryYalways_strong_classes_do6MpnKOopClosure__v_; text: .text%__1cQmulL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; -text: .text%__1cUPSAdaptiveSizePolicyUmajor_collection_end6MInHGCCauseFCause__v_; text: .text%__1cUPSAdaptiveSizePolicyWmajor_collection_begin6M_v_; text: .text%__1cIUniverseWupdate_heap_info_at_gc6F_v_; -text: .text%__1cJPSPermGenQcompute_new_size6MI_v_; text: .text%__1cKPSYoungGenHcompact6M_v_; text: .text%JVM_GetSystemPackage; text: .text%__1cPfieldDescriptorTfloat_initial_value6kM_f_; text: .text%__1cKPSYoungGenPadjust_pointers6M_v_; -text: .text%__1cQUncommonTrapBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cSDeoptimizationBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cNExceptionBlobHoops_do6MpnKOopClosure__v_: codeBlob.o; -text: .text%__1cJCodeCacheHoops_do6FpnKOopClosure__v_; text: .text%__1cJCodeCacheLgc_prologue6F_v_; text: .text%__1cJCodeCacheLgc_epilogue6F_v_; text: .text%__1cIXorINodeIadd_ring6kMpknEType_3_3_; @@ -3508,16 +3292,12 @@ text: .text%__1cSstring_compareNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%jni_GetEnv; text: .text%__1cJloadDNodeOmemory_operand6kM_pknIMachOper__; text: .text%__1cQstkI_to_regINodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cSstring_compareNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cXNativeSignatureIteratorHdo_bool6M_v_: interpreterRT_sparc.o; text: .text%Unsafe_GetNativeByte; text: .text%JVM_NanoTime; -text: .text%__1cCosNjavaTimeNanos6F_x_; text: .text%__1cOMacroAssemblerOrestore_thread6MkpnMRegisterImpl__v_; -text: .text%__1cVcompiledICHolderKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; text: .text%__1cQandL_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cIimmFOperJnum_edges6kM_I_: ad_sparc_clone.o; -text: .text%__1cHThreadsLnmethods_do6F_v_; text: .text%__1cKcmpOpFOperGnegate6M_v_: ad_sparc_clone.o; text: .text%__1cICodeBlobFflush6M_v_; text: .text%__1cFParseMdo_anewarray6M_v_; @@ -3537,8 +3317,6 @@ text: .text%__1cHnmethodSflush_dependencies6MpnRBoolObjectClosure__v_; text: .text%__1cKo2RegPOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cQregI_to_stkINodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cbCAbstractInterpreterGeneratorVgenerate_method_entry6MnTAbstractInterpreterKMethodKind__pC_; -text: .text%__1cParrayKlassKlassRoop_copy_contents6MpnSPSPromotionManager_pnHoopDesc__v_; -text: .text%__1cFVTuneOdelete_nmethod6FpnHnmethod__v_; text: .text%__1cWloadConI_x43300000NodeIpipeline6kM_pknIPipeline__; text: .text%__1cFParseQdo_monitor_enter6M_v_; text: .text%__1cPorL_reg_regNodeIpipeline6kM_pknIPipeline__; @@ -3547,13 +3325,11 @@ text: .text%JVM_FindPrimitiveClass; text: .text%__1cVMoveL2D_stack_regNodeIpipeline6kM_pknIPipeline__; text: .text%__1cNTemplateTableEiop26Fn0AJOperation__v_; text: .text%__1cZInterpreterMacroAssemblerMdispatch_via6MnITosState_ppC_v_; -text: .text%__1cSmodL_reg_imm13NodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cRshrI_reg_imm5NodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cJJavaCallsLcall_static6FpnJJavaValue_nLKlassHandle_nMsymbolHandle_4pnGThread__v_; text: .text%__1cSsubL_reg_reg_2NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cUmulL_reg_imm13_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cIDivDNodeFValue6kMpnOPhaseTransform__pknEType__; -text: .text%__1cPconvI2F_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNinstanceKlassUfind_interface_field6kMpnNsymbolOopDesc_2pnPfieldDescriptor__pnMklassOopDesc__; text: .text%__1cOstackSlotFOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cUdivL_reg_imm13_1NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; @@ -3561,7 +3337,6 @@ text: .text%__1cRSignatureIteratorHiterate6M_v_; text: .text%__1cOcmovLL_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; text: .text%__1cJname2type6Fpkc_nJBasicType__; text: .text%__1cSmulL_reg_imm13NodeIpipeline6kM_pknIPipeline__; -text: .text%__1cPBytecode_invokeLresult_type6kMpnGThread__nJBasicType__; text: .text%__1cOloadConL13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cKcmpOpFOperHgreater6kM_i_: ad_sparc_clone.o; text: .text%__1cIDivDNodeJideal_reg6kM_I_: classes.o; @@ -3569,7 +3344,6 @@ text: .text%__1cOMacroAssemblerKget_thread6M_v_; text: .text%__1cOcmovDF_regNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cOcmovIF_immNodeHtwo_adr6kM_I_: ad_sparc_misc.o; text: .text%__1cSconvI2F_helperNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cKVtableStub2n6FIi_pv_; text: .text%__1cbEJvmtiDynamicCodeEventCollector2T6M_v_; text: .text%__1cOtypeArrayKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlass.o; text: .text%__1cPconvD2F_regNodeHsize_of6kM_I_: ad_sparc_misc.o; @@ -3589,7 +3363,6 @@ text: .text%__1cNTemplateTableQfast_accessfield6FnITosState__v_; text: .text%__1cKCompiledICSset_to_megamorphic6MpnICallInfo_nJBytecodesECode_pnGThread__v_; text: .text%Unsafe_StaticFieldOffset; text: .text%__1cQmulI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cNTemplateTableXresolve_cache_and_index6FipnMRegisterImpl_2_v_; text: .text%__1cQaddI_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cOcmovLI_regNodeHtwo_adr6kM_I_: ad_sparc_misc.o; text: .text%JVM_GetClassContext; @@ -3685,7 +3458,6 @@ text: .text%__1cLConvL2DNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cULinearLeastSquareFit2t6MI_v_; text: .text%__1cQdivL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cPciObjectFactoryTget_unloaded_method6MpnPciInstanceKlass_pnIciSymbol_4_pnIciMethod__; -text: .text%__1cNReservedSpace2t6MI_v_; text: .text%__1cSCardTableExtensionVresize_covered_region6MnJMemRegion__v_; text: .text%__1cOloadI_fregNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cRCardTableModRefBSVresize_covered_region6MnJMemRegion__v_; @@ -3705,7 +3477,6 @@ text: .text%__1cOLibraryCallKitXgenerate_current_thread6MrpnENode__2_; text: .text%__1cOMacroAssemblerEfneg6MnRFloatRegisterImplFWidth_p13_v_; text: .text%__1cXNativeSignatureIteratorJdo_double6M_v_: interpreterRT_sparc.o; text: .text%__1cRtestI_reg_immNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; -text: .text%__1cNSpaceCounters2t6MpkciIpnMMutableSpace_pnSGenerationCounters__v_; text: .text%__1cLcmpF_ccNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cMNativeLookupTbase_library_lookup6Fpkc22_pC_; text: .text%jni_SetObjectField: jni.o; @@ -3725,7 +3496,6 @@ text: .text%__1cQmulD_reg_regNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%Unsafe_AllocateMemory; text: .text%__1cSandL_reg_imm13NodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%JVM_GetLastErrorString; -text: .text%__1cQmodL_reg_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNTemplateTableElop26Fn0AJOperation__v_; text: .text%__1cQjava_lang_ThreadKset_daemon6FpnHoopDesc__v_; text: .text%__1cNTemplateTableEfop26Fn0AJOperation__v_; @@ -3738,7 +3508,6 @@ text: .text%__1cNTemplateTableGlstore6Fi_v_; text: .text%__1cLConvF2INodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cIciMethod2t6MpnPciInstanceKlass_pnIciSymbol_4_v_; text: .text%__1cRcompL_reg_regNodeHsize_of6kM_I_: ad_sparc_misc.o; -text: .text%__1cLconvI2BNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cLConvD2FNodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cSconvD2I_helperNodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cRsubI_zero_regNodeHsize_of6kM_I_: ad_sparc_misc.o; @@ -3775,12 +3544,10 @@ text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC22_v_; text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC2_v_; text: .text%__1cTjava_lang_ThrowableLset_message6FpnHoopDesc_2_v_; text: .text%__1cOGenerateOopMapTret_jump_targets_do6MpnOBytecodeStream_pFp0ipi_vi4_v_; -text: .text%__1cPconvI2D_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%Unsafe_SetMemory; text: .text%__1cKstfSSFNodeErule6kM_I_: ad_sparc_misc.o; text: .text%__1cZInterpreterMacroAssemblerOthrow_if_not_x6MnJAssemblerJCondition_pCpnMRegisterImpl__v_; text: .text%__1cVMoveF2I_stack_regNodeLout_RegMask6kM_rknHRegMask__; -text: .text%__1cHTypePtrKadd_offset6kMi_pk0_; text: .text%__1cOcmovLI_regNodeHsize_of6kM_I_: ad_sparc_misc.o; text: .text%__1cNloadConL0NodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cOcmovPI_regNodeEsize6kMpnNPhaseRegAlloc__I_; @@ -3798,7 +3565,6 @@ text: .text%__1cRMachSpillCopyNodeHsize_of6kM_I_: ad_sparc.o; text: .text%__1cQCompilerCounters2t6MpkcipnGThread__v_; text: .text%__1cOGenerateOopMapRdo_multianewarray6Mii_v_; text: .text%__1cNCompileBrokerUcompiler_thread_loop6F_v_; -text: .text%__1cbFpartialSubtypeCheck_vs_zeroNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%jni_CallStaticObjectMethodV: jni.o; text: .text%__1cNTemplateTableMfast_xaccess6FnITosState__v_; text: .text%__1cJMemRegionFminus6kMk0_0_; @@ -3836,12 +3602,10 @@ text: .text%__1cGThreadbArecord_stack_base_and_size6M_v_; text: .text%__1cNTemplateTableHcall_VM6FpnMRegisterImpl_pC2_v_; text: .text%JVM_RegisterSignal; text: .text%JVM_FindSignal; -text: .text%__1cTMaskFillerForNative2t6MnMmethodHandle_pIi_v_: oopMapCache.o; text: .text%jio_vsnprintf; text: .text%__1cQshrL_reg_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cZInterpreterMacroAssemblerTprofile_switch_case6MpnMRegisterImpl_222_v_; text: .text%__1cOCompilerThread2t6MpnMCompileQdDueue_pnQCompilerCounters__v_; -text: .text%__1cOPSVirtualSpace2t6MnNReservedSpace_I_v_; text: .text%__1cVcompiler_thread_entry6FpnKJavaThread_pnGThread__v_: thread.o; text: .text%__1cNIdealLoopTreeUmerge_many_backedges6MpnOPhaseIdealLoop__v_; text: .text%__1cODeoptimizationLUnrollBlock2T6M_v_; @@ -3857,17 +3621,13 @@ text: .text%__1cLstoreF0NodeLout_RegMask6kM_rknHRegMask__; text: .text%__1cZInterpreterMacroAssemblerWprofile_switch_default6MpnMRegisterImpl__v_; text: .text%__1cTAbstract_VM_VersionOvm_info_string6F_pkc_; text: .text%__1cJStubQdDueue2t6MpnNStubInterface_ipnFMutex_pkc_v_; -text: .text%__1cSconvF2I_helperNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cHThreadsbFdeoptimized_wrt_marked_nmethods6F_v_; -text: .text%__1cbAconvL2D_reg_slow_fxtofNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cOstackSlotFOperEdisp6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; text: .text%__1cOstackSlotFOperEbase6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; text: .text%__1cOstackSlotFOperFindex6kMpnNPhaseRegAlloc_pknENode_i_i_: ad_sparc.o; -text: .text%__1cPconvF2I_regNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cNTemplateTableGlconst6Fi_v_; text: .text%__1cLstoreC0NodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cMPeriodicTaskGenroll6M_v_; -text: .text%__1cMPeriodicTask2t6MI_v_; text: .text%__1cNTemplateTableHcastore6F_v_; text: .text%Unsafe_CompareAndSwapObject; text: .text%__1cLNamedThread2t6M_v_; @@ -3913,7 +3673,6 @@ text: .text%__1cLMoveF2INodeFValue6kMpnOPhaseTransform__pknEType__; text: .text%__1cLOptoRuntimeIl2f_Type6F_pknITypeFunc__; text: .text%__1cOMacroAssemblerUcalc_mem_param_words6MpnMRegisterImpl_2_v_; text: .text%__1cZInterpreterMacroAssemblerLprofile_ret6MnITosState_pnMRegisterImpl_3_v_; -text: .text%__1cZInterpreterMacroAssemblerUprofile_virtual_call6MpnMRegisterImpl_2_v_; text: .text%__1cZInterpreterMacroAssemblerMprofile_call6MpnMRegisterImpl__v_; text: .text%__1cLklassVtableQindex_of_miranda6MpnNsymbolOopDesc_2_i_; text: .text%__1cZInterpreterMacroAssemblerSupdate_mdp_for_ret6MnITosState_pnMRegisterImpl__v_; @@ -3922,7 +3681,6 @@ text: .text%__1cUInterpreterGeneratorLlock_method6M_v_; text: .text%__1cZInterpreterMacroAssemblerOthrow_if_not_26MpCpnMRegisterImpl_rnFLabel__v_; text: .text%__1cZInterpreterMacroAssemblerQthrow_if_not_1_x6MnJAssemblerJCondition_rnFLabel__v_; text: .text%__1cZInterpreterMacroAssemblerZget_4_byte_integer_at_bcp6MipnMRegisterImpl_2n0AKsetCCOrNot__v_; -text: .text%__1cCosHrealloc6FpvI_1_; text: .text%__1cODeoptimizationVdeoptimize_dependents6F_i_; text: .text%__1cFStateO_sub_Op_CMoveL6MpknENode__v_; text: .text%__1cZInterpreterMacroAssemblerRaccess_local_long6MpnMRegisterImpl_2_v_; @@ -4001,19 +3759,15 @@ text: .text%__1cSThreadLocalStorageHpd_init6F_v_; text: .text%__1cVMoveF2I_stack_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cVMoveL2D_stack_regNodeEemit6kMrnKCodeBuffer_pnNPhaseRegAlloc__v_; text: .text%__1cWinvocationCounter_init6F_v_; -text: .text%__1cKTypeOopPtrEmake6FnHTypePtrDPTR_i_pk0_; text: .text%__1cKTypeOopPtrFxdual6kM_pknEType__; text: .text%__1cFParseMjump_if_join6MpnENode_2_2_; text: .text%__1cSinstanceKlassKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; text: .text%__1cSinstanceKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: instanceKlassKlass.o; -text: .text%__1cLconvP2BNodeGExpand6MpnFState_rnJNode_List__pnIMachNode__; text: .text%__1cETypeRInitialize_shared6FpnHCompile__v_; text: .text%__1cQinstanceRefKlassZupdate_nonstatic_oop_maps6FpnMklassOopDesc__v_; text: .text%__1cVInterfaceSupport_init6F_v_; -text: .text%__1cZInterpreterMacroAssemblerSsuper_call_VM_leaf6MpnMRegisterImpl_pC2_v_; text: .text%__1cPGenerationSizerQinitialize_flags6M_v_: parallelScavengeHeap.o; text: .text%__1cZInterpreterMacroAssemblerPdispatch_normal6MnITosState__v_; -text: .text%__1cJTimeStampMmilliseconds6kM_x_; text: .text%__1cDhpiZinitialize_socket_library6F_i_; text: .text%__1cDhpiYinitialize_get_interface6FpnIvm_calls__v_; text: .text%__1cWInlineCacheBuffer_init6F_v_; @@ -4030,14 +3784,12 @@ text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: ad_sparc_expand.o; text: .text%__1cMexit_globals6F_v_; text: .text%__1cSset_init_completed6F_v_; text: .text%__1cNinstanceKlassZrelease_C_heap_structures6M_v_; -text: .text%__1cJTimeStampJupdate_to6Mx_v_; text: .text%__1cUParallelScavengeHeapItop_addr6kM_ppnIHeapWord__: parallelScavengeHeap.o; text: .text%__1cCosHSolarisXinstall_signal_handlers6F_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: interp_masm_sparc.o; text: .text%__1cQinterpreter_init6F_v_; text: .text%__1cbCAbstractInterpreterGenerator2t6MpnJStubQdDueue__v_; text: .text%__1cRlwp_priocntl_init6F_i_: os_solaris.o; -text: .text%__1cNpriocntl_stub6FinGidtype_lipc_l_: os_solaris.o; text: .text%__1cbCAbstractInterpreterGeneratorMgenerate_all6M_v_; text: .text%__1cCosLsignal_wait6F_i_; text: .text%__1cCosNsignal_notify6Fi_v_; @@ -4050,7 +3802,6 @@ text: .text%__1cUParallelScavengeHeapEheap6F_p0_; text: .text%__1cUParallelScavengeHeapNgc_threads_do6kMpnNThreadClosure__v_; text: .text%__1cUParallelScavengeHeapYpermanent_object_iterate6MpnNObjectClosure__v_; text: .text%__1cKcmpOpFOperNgreater_equal6kM_i_: ad_sparc_clone.o; -text: .text%__1cUParallelScavengeHeapMmax_capacity6kM_I_; text: .text%__1cUParallelScavengeHeapPpost_initialize6M_v_; text: .text%__1cUParallelScavengeHeapKinitialize6M_i_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: parGCAllocBuffer.o; @@ -4067,8 +3818,6 @@ text: .text%__1cVjni_GetLongField_addr6F_pC_; text: .text%__1cNIdealLoopTreeQsplit_outer_loop6MpnOPhaseIdealLoop__v_; text: .text%__1cRLowMemoryDetectorKinitialize6F_v_; text: .text%__1cRLowMemoryDetectorbGlow_memory_detector_thread_entry6FpnKJavaThread_pnGThread__v_; -text: .text%__1cNReservedSpaceUpage_align_size_down6FI_I_; -text: .text%__1cNReservedSpaceYallocation_align_size_up6FI_I_; text: .text%__1cTloadL_unalignedNodeEsize6kMpnNPhaseRegAlloc__I_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: machnode.o; text: .text%__1cPmanagement_init6F_v_; @@ -4076,7 +3825,6 @@ text: .text%__1cOvmStructs_init6F_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: vmStructs.o; text: .text%__1cJvmSymbolsKinitialize6FpnGThread__v_; text: .text%__1cKManagementKinitialize6FpnGThread__v_; -text: .text%__1cKManagementWrecord_vm_startup_time6Fxx_v_; text: .text%__1cIVMThreadGcreate6F_v_; text: .text%__1cIVMThreadDrun6M_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: management.o; @@ -4103,11 +3851,9 @@ text: .text%__1cLmethodKlassOset_alloc_size6MI_v_: methodKlass.o; text: .text%__1cQvtableStubs_init6F_v_; text: .text%__1cKi0RegPOperKin_RegMask6kMi_pknHRegMask__; text: .text%__1cKg1RegPOperKin_RegMask6kMi_pknHRegMask__; -text: .text%__1cFVTuneEexit6F_v_; text: .text%__1cLmethodKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: methodKlass.o; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: methodLiveness.o; text: .text%__1cMMutableSpaceOobject_iterate6MpnNObjectClosure__v_; -text: .text%__1cKvtune_init6F_v_; text: .text%__1cKmutex_init6F_v_; text: .text%__1cQaccessFlags_init6F_v_; text: .text%__1cOMacroAssemblerMcall_VM_leaf6MpnMRegisterImpl_pC222_v_; @@ -4136,7 +3882,6 @@ text: .text%__1cQJNI_FastGetFieldbDgenerate_fast_get_short_field6F_pC_; text: .text%__1cQJNI_FastGetFieldbBgenerate_fast_get_int_field6F_pC_; text: .text%__1cQJNI_FastGetFieldbCgenerate_fast_get_long_field6F_pC_; text: .text%__1cTtypeArrayKlassKlassSallocate_permanent6kMrnLKlassHandle_ipnGThread__pv_: typeArrayKlassKlass.o; -text: .text%__1cIUniversePcheck_alignment6FIIpkc_v_; text: .text%__1cIUniverseHgenesis6FpnGThread__v_; text: .text%__1cVquicken_jni_functions6F_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: oopMap.o; @@ -4222,7 +3967,6 @@ text: .text%__1cJBytecodesNpd_initialize6F_v_; text: .text%__1cHCompileRpd_compiler2_init6F_v_; text: .text%__1cKC2CompilerKinitialize6M_v_; text: .text%__1cRCardTableModRefBS2t6MnJMemRegion_i_v_; -text: .text%__1cRCardTableModRefBSbBct_max_alignment_constraint6F_I_; text: .text%__1cMciArrayKlass2t6MpnIciSymbol_ipnHciKlass__v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: relocInfo.o; text: .text%__1cMciKlassKlassEmake6F_p0_; @@ -4267,13 +4011,9 @@ text: .text%__1cNTemplateTableDnop6F_v_; text: .text%__1cNTemplateTableSshouldnotreachhere6F_v_; text: .text%__1cNTemplateTableLaconst_null6F_v_; text: .text%__1cKPSYoungGenbCreset_survivors_after_shrink6M_v_; -text: .text%__1cKPSYoungGenQlimit_gen_shrink6MI_I_; -text: .text%__1cKPSYoungGenRavailable_to_live6M_I_; text: .text%__1cSDeoptimizationBlobGcreate6FpnKCodeBuffer_pnJOopMapSet_iiii_p0_; text: .text%__1cLOptoRuntimeUmultianewarray2_Type6F_pknITypeFunc__; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: ad_sparc_pipeline.o; -text: .text%__1cUAdjoiningGenerations2t6MnNReservedSpace_IIIIIII_v_; -text: .text%__1cWAdjoiningVirtualSpaces2t6MnNReservedSpace_III_v_; text: .text%__1cOchunkpool_init6F_v_; text: .text%__1cFChunkbDstart_chunk_pool_cleaner_task6F_v_; text: .text%__1cJArgumentsWinit_system_properties6F_v_; @@ -4367,7 +4107,6 @@ text: .text%__1cNGCTaskManagerKinitialize6M_v_; text: .text%__1cNGCTaskManagerKthreads_do6MpnNThreadClosure__v_; text: .text%__1cPPerfDataManagerHdestroy6F_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: genCollectedHeap.o; -text: .text%__1cJGenRemSetYmax_alignment_constraint6Fn0AEName__I_; text: .text%__1cWResolveOopMapConflictsUdo_potential_rewrite6MpnGThread__nMmethodHandle__; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: generateOopMap.o; text: .text%__1cOThreadCriticalKinitialize6F_v_; @@ -4389,7 +4128,6 @@ text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: fprofiler.o; text: .text%__1cFframeVinterpreter_frame_mdp6kM_pC_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: phase.o; text: .text%__1cKPerfMemoryUdelete_memory_region6F_v_; -text: .text%__1cKPerfMemoryUcreate_memory_region6FI_v_; text: .text%__1cbBcleanup_sharedmem_resources6Fpkc_v_: perfMemory_solaris.o; text: .text%__1cPperfMemory_exit6F_v_; text: .text%__1cPperfMemory_init6F_v_; @@ -4420,9 +4158,6 @@ text: .text%__1cNTemplateTableGcaload6F_v_; text: .text%__1cNTemplateTableMfast_icaload6F_v_; text: .text%__1cNTemplateTableGsaload6F_v_; text: .text%__1cKPSYoungGenPinitialize_work6M_v_; -text: .text%__1cKPSYoungGenKinitialize6MnNReservedSpace_I_v_; -text: .text%__1cKPSYoungGenYinitialize_virtual_space6MnNReservedSpace_I_v_; -text: .text%__1cKPSYoungGen2t6MIII_v_; text: .text%__1cNTemplateTableHaload_06F_v_; text: .text%__1cNTemplateTableGistore6F_v_; text: .text%__1cNTemplateTableGlstore6F_v_; @@ -4440,15 +4175,10 @@ text: .text%__1cNTemplateTableLtableswitch6F_v_; text: .text%__1cNTemplateTableMlookupswitch6F_v_; text: .text%__1cNTemplateTableRfast_linearswitch6F_v_; text: .text%__1cNTemplateTableRfast_binaryswitch6F_v_; -text: .text%__1cNCompileBrokerVinit_compiler_threads6Fi_v_; -text: .text%__1cJPSPermGen2t6MnNReservedSpace_IIIIpkci_v_; text: .text%__1cNCompileBrokerQset_should_block6F_v_; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: compileBroker.o; text: .text%__1cNTemplateTableIgetfield6Fi_v_; text: .text%__1cNTemplateTableJgetstatic6Fi_v_; -text: .text%__1cIPSOldGenKinitialize6MnNReservedSpace_Ipkci_v_; -text: .text%__1cIPSOldGen2t6MIIIpkci_v_; -text: .text%__1cIPSOldGen2t6MnNReservedSpace_IIIIpkci_v_; text: .text%__1cVcompiledICHolderKlassMcreate_klass6FpnGThread__pnMklassOopDesc__; text: .text%__1cU__STATIC_CONSTRUCTOR6F_v_: psMarkSweep.o; text: .text%__1cNTemplateTableIputfield6Fi_v_; diff --git a/hotspot/make/solaris/makefiles/sparcWorks.make b/hotspot/make/solaris/makefiles/sparcWorks.make index 34b279b7266..8e13e44063d 100644 --- a/hotspot/make/solaris/makefiles/sparcWorks.make +++ b/hotspot/make/solaris/makefiles/sparcWorks.make @@ -51,9 +51,9 @@ ifeq ($(JRE_RELEASE_VER),1.6.0) VALIDATED_COMPILER_REVS := 5.8 VALIDATED_C_COMPILER_REVS := 5.8 else - # Validated compilers for JDK7 are SS12 (5.9) or SS12 update 1 (5.10) - VALIDATED_COMPILER_REVS := 5.9 5.10 - VALIDATED_C_COMPILER_REVS := 5.9 5.10 + # Validated compiler for JDK7 is SS12 update 1 + patches (5.10) + VALIDATED_COMPILER_REVS := 5.10 + VALIDATED_C_COMPILER_REVS := 5.10 endif # Warning messages about not using the above validated versions diff --git a/hotspot/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp b/hotspot/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp index 709259740f5..4eb6680dfa8 100644 --- a/hotspot/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/c1_CodeStubs_sparc.cpp @@ -32,6 +32,7 @@ RangeCheckStub::RangeCheckStub(CodeEmitInfo* info, LIR_Opr index, : _throw_index_out_of_bounds_exception(throw_index_out_of_bounds_exception) , _index(index) { + assert(info != NULL, "must have info"); _info = new CodeEmitInfo(info); } diff --git a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp index 143cd93f17e..7d10f9ba013 100644 --- a/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp @@ -420,7 +420,8 @@ int LIR_Assembler::emit_unwind_handler() { } if (compilation()->env()->dtrace_method_probes()) { - jobject2reg(method()->constant_encoding(), O0); + __ mov(G2_thread, O0); + jobject2reg(method()->constant_encoding(), O1); __ call(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit), relocInfo::runtime_call_type); __ delayed()->nop(); } diff --git a/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp b/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp index dbdf2027dfe..2566f3f8227 100644 --- a/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp +++ b/hotspot/src/cpu/sparc/vm/c1_LIRGenerator_sparc.cpp @@ -311,7 +311,7 @@ void LIRGenerator::store_stack_parameter (LIR_Opr item, ByteSize offset_from_sp) void LIRGenerator::do_StoreIndexed(StoreIndexed* x) { - assert(x->is_root(),""); + assert(x->is_pinned(),""); bool needs_range_check = true; bool use_length = x->length() != NULL; bool obj_store = x->elt_type() == T_ARRAY || x->elt_type() == T_OBJECT; @@ -386,7 +386,7 @@ void LIRGenerator::do_StoreIndexed(StoreIndexed* x) { void LIRGenerator::do_MonitorEnter(MonitorEnter* x) { - assert(x->is_root(),""); + assert(x->is_pinned(),""); LIRItem obj(x->obj(), this); obj.load_item(); @@ -398,7 +398,7 @@ void LIRGenerator::do_MonitorEnter(MonitorEnter* x) { CodeEmitInfo* info_for_exception = NULL; if (x->needs_null_check()) { - info_for_exception = state_for(x, x->lock_stack_before()); + info_for_exception = state_for(x); } // this CodeEmitInfo must not have the xhandlers because here the @@ -409,7 +409,7 @@ void LIRGenerator::do_MonitorEnter(MonitorEnter* x) { void LIRGenerator::do_MonitorExit(MonitorExit* x) { - assert(x->is_root(),""); + assert(x->is_pinned(),""); LIRItem obj(x->obj(), this); obj.dont_load_item(); @@ -871,10 +871,11 @@ void LIRGenerator::do_NewInstance(NewInstance* x) { // This instruction can be deoptimized in the slow path : use // O0 as result register. const LIR_Opr reg = result_register_for(x->type()); - +#ifndef PRODUCT if (PrintNotLoaded && !x->klass()->is_loaded()) { - tty->print_cr(" ###class not loaded at new bci %d", x->bci()); + tty->print_cr(" ###class not loaded at new bci %d", x->printable_bci()); } +#endif CodeEmitInfo* info = state_for(x, x->state()); LIR_Opr tmp1 = FrameMap::G1_oop_opr; LIR_Opr tmp2 = FrameMap::G3_oop_opr; @@ -1018,7 +1019,7 @@ void LIRGenerator::do_CheckCast(CheckCast* x) { obj.load_item(); LIR_Opr out_reg = rlock_result(x); CodeStub* stub; - CodeEmitInfo* info_for_exception = state_for(x, x->state()->copy_locks()); + CodeEmitInfo* info_for_exception = state_for(x); if (x->is_incompatible_class_change_check()) { assert(patching_info == NULL, "can't patch this"); diff --git a/hotspot/src/cpu/x86/vm/c1_CodeStubs_x86.cpp b/hotspot/src/cpu/x86/vm/c1_CodeStubs_x86.cpp index 42269daf59e..f5bea330c2f 100644 --- a/hotspot/src/cpu/x86/vm/c1_CodeStubs_x86.cpp +++ b/hotspot/src/cpu/x86/vm/c1_CodeStubs_x86.cpp @@ -83,7 +83,8 @@ RangeCheckStub::RangeCheckStub(CodeEmitInfo* info, LIR_Opr index, : _throw_index_out_of_bounds_exception(throw_index_out_of_bounds_exception) , _index(index) { - _info = info == NULL ? NULL : new CodeEmitInfo(info); + assert(info != NULL, "must have info"); + _info = new CodeEmitInfo(info); } diff --git a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp index 7e1be01c322..fa0ef0c8bf5 100644 --- a/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp +++ b/hotspot/src/cpu/x86/vm/c1_LIRAssembler_x86.cpp @@ -488,7 +488,9 @@ int LIR_Assembler::emit_unwind_handler() { } if (compilation()->env()->dtrace_method_probes()) { - __ movoop(Address(rsp, 0), method()->constant_encoding()); + __ get_thread(rax); + __ movptr(Address(rsp, 0), rax); + __ movoop(Address(rsp, sizeof(void*)), method()->constant_encoding()); __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, SharedRuntime::dtrace_method_exit))); } @@ -1616,8 +1618,7 @@ void LIR_Assembler::emit_alloc_array(LIR_OpAllocArray* op) { void LIR_Assembler::type_profile_helper(Register mdo, ciMethodData *md, ciProfileData *data, Register recv, Label* update_done) { - uint i; - for (i = 0; i < ReceiverTypeData::row_limit(); i++) { + for (uint i = 0; i < ReceiverTypeData::row_limit(); i++) { Label next_test; // See if the receiver is receiver[n]. __ cmpptr(recv, Address(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i)))); @@ -1629,7 +1630,7 @@ void LIR_Assembler::type_profile_helper(Register mdo, } // Didn't find receiver; find next empty slot and fill it in - for (i = 0; i < ReceiverTypeData::row_limit(); i++) { + for (uint i = 0; i < ReceiverTypeData::row_limit(); i++) { Label next_test; Address recv_addr(mdo, md->byte_offset_of_slot(data, ReceiverTypeData::receiver_offset(i))); __ cmpptr(recv_addr, (intptr_t)NULL_WORD); diff --git a/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp b/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp index 05df6bda708..dd8bc8d9962 100644 --- a/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp +++ b/hotspot/src/cpu/x86/vm/c1_LIRGenerator_x86.cpp @@ -107,7 +107,7 @@ bool LIRGenerator::can_store_as_constant(Value v, BasicType type) const { return false; } Constant* c = v->as_Constant(); - if (c && c->state() == NULL) { + if (c && c->state_before() == NULL) { // constants of any type can be stored directly, except for // unloaded object constants. return true; @@ -250,7 +250,7 @@ void LIRGenerator::store_stack_parameter (LIR_Opr item, ByteSize offset_from_sp) void LIRGenerator::do_StoreIndexed(StoreIndexed* x) { - assert(x->is_root(),""); + assert(x->is_pinned(),""); bool needs_range_check = true; bool use_length = x->length() != NULL; bool obj_store = x->elt_type() == T_ARRAY || x->elt_type() == T_OBJECT; @@ -325,7 +325,7 @@ void LIRGenerator::do_StoreIndexed(StoreIndexed* x) { void LIRGenerator::do_MonitorEnter(MonitorEnter* x) { - assert(x->is_root(),""); + assert(x->is_pinned(),""); LIRItem obj(x->obj(), this); obj.load_item(); @@ -341,7 +341,7 @@ void LIRGenerator::do_MonitorEnter(MonitorEnter* x) { CodeEmitInfo* info_for_exception = NULL; if (x->needs_null_check()) { - info_for_exception = state_for(x, x->lock_stack_before()); + info_for_exception = state_for(x); } // this CodeEmitInfo must not have the xhandlers because here the // object is already locked (xhandlers expect object to be unlocked) @@ -352,7 +352,7 @@ void LIRGenerator::do_MonitorEnter(MonitorEnter* x) { void LIRGenerator::do_MonitorExit(MonitorExit* x) { - assert(x->is_root(),""); + assert(x->is_pinned(),""); LIRItem obj(x->obj(), this); obj.dont_load_item(); @@ -984,9 +984,11 @@ void LIRGenerator::do_Convert(Convert* x) { void LIRGenerator::do_NewInstance(NewInstance* x) { +#ifndef PRODUCT if (PrintNotLoaded && !x->klass()->is_loaded()) { - tty->print_cr(" ###class not loaded at new bci %d", x->bci()); + tty->print_cr(" ###class not loaded at new bci %d", x->printable_bci()); } +#endif CodeEmitInfo* info = state_for(x, x->state()); LIR_Opr reg = result_register_for(x->type()); LIR_Opr klass_reg = new_register(objectType); @@ -1127,7 +1129,7 @@ void LIRGenerator::do_CheckCast(CheckCast* x) { obj.load_item(); // info for exceptions - CodeEmitInfo* info_for_exception = state_for(x, x->state()->copy_locks()); + CodeEmitInfo* info_for_exception = state_for(x); CodeStub* stub; if (x->is_incompatible_class_change_check()) { diff --git a/hotspot/src/cpu/x86/vm/methodHandles_x86.cpp b/hotspot/src/cpu/x86/vm/methodHandles_x86.cpp index b6c08684fff..2343fbf2fc0 100644 --- a/hotspot/src/cpu/x86/vm/methodHandles_x86.cpp +++ b/hotspot/src/cpu/x86/vm/methodHandles_x86.cpp @@ -346,7 +346,7 @@ void trace_method_handle_stub(const char* adaptername, if (stack_dump_count > 64) stack_dump_count = 48; for (i = 0; i < stack_dump_count; i += 4) { printf(" dump at SP[%d] "INTPTR_FORMAT": "INTPTR_FORMAT" "INTPTR_FORMAT" "INTPTR_FORMAT" "INTPTR_FORMAT"\n", - i, (intptr_t)&entry_sp[i+0], entry_sp[i+0], entry_sp[i+1], entry_sp[i+2], entry_sp[i+3]); + i, (intptr_t) &entry_sp[i+0], entry_sp[i+0], entry_sp[i+1], entry_sp[i+2], entry_sp[i+3]); } print_method_handle(mh); } diff --git a/hotspot/src/cpu/x86/vm/x86_64.ad b/hotspot/src/cpu/x86/vm/x86_64.ad index b0f73012f5f..3978169943d 100644 --- a/hotspot/src/cpu/x86/vm/x86_64.ad +++ b/hotspot/src/cpu/x86/vm/x86_64.ad @@ -7349,43 +7349,6 @@ instruct bytes_reverse_short(rRegI dst) %{ ins_pipe( ialu_reg ); %} -instruct loadI_reversed(rRegI dst, memory src) %{ - match(Set dst (ReverseBytesI (LoadI src))); - - format %{ "bswap_movl $dst, $src" %} - opcode(0x8B, 0x0F, 0xC8); /* Opcode 8B 0F C8 */ - ins_encode(REX_reg_mem(dst, src), OpcP, reg_mem(dst, src), REX_reg(dst), OpcS, opc3_reg(dst)); - ins_pipe( ialu_reg_mem ); -%} - -instruct loadL_reversed(rRegL dst, memory src) %{ - match(Set dst (ReverseBytesL (LoadL src))); - - format %{ "bswap_movq $dst, $src" %} - opcode(0x8B, 0x0F, 0xC8); /* Opcode 8B 0F C8 */ - ins_encode(REX_reg_mem_wide(dst, src), OpcP, reg_mem(dst, src), REX_reg_wide(dst), OpcS, opc3_reg(dst)); - ins_pipe( ialu_reg_mem ); -%} - -instruct storeI_reversed(memory dst, rRegI src) %{ - match(Set dst (StoreI dst (ReverseBytesI src))); - - format %{ "movl_bswap $dst, $src" %} - opcode(0x0F, 0xC8, 0x89); /* Opcode 0F C8 89 */ - ins_encode( REX_reg(src), OpcP, opc2_reg(src), REX_reg_mem(src, dst), OpcT, reg_mem(src, dst) ); - ins_pipe( ialu_mem_reg ); -%} - -instruct storeL_reversed(memory dst, rRegL src) %{ - match(Set dst (StoreL dst (ReverseBytesL src))); - - format %{ "movq_bswap $dst, $src" %} - opcode(0x0F, 0xC8, 0x89); /* Opcode 0F C8 89 */ - ins_encode( REX_reg_wide(src), OpcP, opc2_reg(src), REX_reg_mem_wide(src, dst), OpcT, reg_mem(src, dst) ); - ins_pipe( ialu_mem_reg ); -%} - - //---------- Zeros Count Instructions ------------------------------------------ instruct countLeadingZerosI(rRegI dst, rRegI src, rFlagsReg cr) %{ diff --git a/hotspot/src/share/vm/c1/c1_CFGPrinter.cpp b/hotspot/src/share/vm/c1/c1_CFGPrinter.cpp index 4a72b166f90..fa1e08ff0f4 100644 --- a/hotspot/src/share/vm/c1/c1_CFGPrinter.cpp +++ b/hotspot/src/share/vm/c1/c1_CFGPrinter.cpp @@ -174,31 +174,6 @@ void CFGPrinterOutput::print_state(BlockBegin* block) { int index; Value value; - if (state->stack_size() > 0) { - print_begin("stack"); - print("size %d", state->stack_size()); - - for_each_stack_value(state, index, value) { - ip.print_phi(index, value, block); - print_operand(value); - output()->cr(); - } - - print_end("stack"); - } - - if (state->locks_size() > 0) { - print_begin("locks"); - print("size %d", state->locks_size()); - - for_each_lock_value(state, index, value) { - ip.print_phi(index, value, block); - print_operand(value); - output()->cr(); - } - print_end("locks"); - } - for_each_state(state) { print_begin("locals"); print("size %d", state->locals_size()); @@ -210,6 +185,33 @@ void CFGPrinterOutput::print_state(BlockBegin* block) { output()->cr(); } print_end("locals"); + + if (state->stack_size() > 0) { + print_begin("stack"); + print("size %d", state->stack_size()); + print("method \"%s\"", method_name(state->scope()->method())); + + for_each_stack_value(state, index, value) { + ip.print_phi(index, value, block); + print_operand(value); + output()->cr(); + } + + print_end("stack"); + } + + if (state->locks_size() > 0) { + print_begin("locks"); + print("size %d", state->locks_size()); + print("method \"%s\"", method_name(state->scope()->method())); + + for_each_lock_value(state, index, value) { + ip.print_phi(index, value, block); + print_operand(value); + output()->cr(); + } + print_end("locks"); + } } print_end("states"); @@ -230,7 +232,8 @@ void CFGPrinterOutput::print_HIR(Value instr) { if (instr->is_pinned()) { output()->put('.'); } - output()->print("%d %d ", instr->bci(), instr->use_count()); + + output()->print("%d %d ", instr->printable_bci(), instr->use_count()); print_operand(instr); @@ -271,7 +274,7 @@ void CFGPrinterOutput::print_block(BlockBegin* block) { print("name \"B%d\"", block->block_id()); print("from_bci %d", block->bci()); - print("to_bci %d", (block->end() == NULL ? -1 : block->end()->bci())); + print("to_bci %d", (block->end() == NULL ? -1 : block->end()->printable_bci())); output()->indent(); output()->print("predecessors "); diff --git a/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp b/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp index ec89b0edd06..024e1ed369a 100644 --- a/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp +++ b/hotspot/src/share/vm/c1/c1_Canonicalizer.cpp @@ -205,7 +205,7 @@ void Canonicalizer::do_StoreField (StoreField* x) { // limit this optimization to current block if (value != NULL && in_current_block(conv)) { set_canonical(new StoreField(x->obj(), x->offset(), x->field(), value, x->is_static(), - x->lock_stack(), x->state_before(), x->is_loaded(), x->is_initialized())); + x->state_before(), x->is_loaded(), x->is_initialized())); return; } } @@ -256,7 +256,7 @@ void Canonicalizer::do_StoreIndexed (StoreIndexed* x) { // limit this optimization to current block if (value != NULL && in_current_block(conv)) { set_canonical(new StoreIndexed(x->array(), x->index(), x->length(), - x->elt_type(), value, x->lock_stack())); + x->elt_type(), value, x->state_before())); return; } } @@ -667,7 +667,7 @@ void Canonicalizer::do_If(If* x) { } } set_canonical(canon); - set_bci(cmp->bci()); + set_bci(cmp->state_before()->bci()); } } } else if (l->as_InstanceOf() != NULL) { @@ -685,7 +685,7 @@ void Canonicalizer::do_If(If* x) { set_canonical(new Goto(is_inst_sux, x->state_before(), x->is_safepoint())); } else { // successors differ => simplify to: IfInstanceOf - set_canonical(new IfInstanceOf(inst->klass(), inst->obj(), true, inst->bci(), is_inst_sux, no_inst_sux)); + set_canonical(new IfInstanceOf(inst->klass(), inst->obj(), true, inst->state_before()->bci(), is_inst_sux, no_inst_sux)); } } } else if (rt == objectNull && (l->as_NewInstance() || l->as_NewArray())) { diff --git a/hotspot/src/share/vm/c1/c1_Compilation.hpp b/hotspot/src/share/vm/c1/c1_Compilation.hpp index a66db089173..cb3ae41c421 100644 --- a/hotspot/src/share/vm/c1/c1_Compilation.hpp +++ b/hotspot/src/share/vm/c1/c1_Compilation.hpp @@ -22,7 +22,6 @@ * */ -class BlockBegin; class CompilationResourceObj; class XHandlers; class ExceptionInfo; diff --git a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp index 5b7b7045aa2..d41930644a0 100644 --- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp +++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp @@ -659,7 +659,6 @@ GraphBuilder::ScopeData::ScopeData(ScopeData* parent) , _jsr_xhandlers(NULL) , _caller_stack_size(-1) , _continuation(NULL) - , _continuation_state(NULL) , _num_returns(0) , _cleanup_block(NULL) , _cleanup_return_prev(NULL) @@ -795,14 +794,6 @@ void GraphBuilder::sort_top_into_worklist(BlockList* worklist, BlockBegin* top) if (i >= -1) worklist->at_put(i + 1, top); } -int GraphBuilder::ScopeData::caller_stack_size() const { - ValueStack* state = scope()->caller_state(); - if (state == NULL) { - return 0; - } - return state->stack_size(); -} - BlockBegin* GraphBuilder::ScopeData::remove_from_work_list() { if (is_work_list_empty()) { @@ -880,7 +871,7 @@ void GraphBuilder::load_constant() { ciObject* obj = con.as_object(); if (!obj->is_loaded() || (PatchALot && obj->klass() != ciEnv::current()->String_klass())) { - patch_state = state()->copy(); + patch_state = copy_state_before(); t = new ObjectConstant(obj); } else { assert(!obj->is_klass(), "must be java_mirror of klass"); @@ -902,7 +893,8 @@ void GraphBuilder::load_constant() { void GraphBuilder::load_local(ValueType* type, int index) { - Value x = state()->load_local(index); + Value x = state()->local_at(index); + assert(x != NULL && !x->type()->is_illegal(), "access of illegal local variable"); push(type, x); } @@ -942,19 +934,21 @@ void GraphBuilder::store_local(ValueStack* state, Value x, ValueType* type, int void GraphBuilder::load_indexed(BasicType type) { + ValueStack* state_before = copy_state_for_exception(); Value index = ipop(); Value array = apop(); Value length = NULL; if (CSEArrayLength || (array->as_AccessField() && array->as_AccessField()->field()->is_constant()) || (array->as_NewArray() && array->as_NewArray()->length() && array->as_NewArray()->length()->type()->is_constant())) { - length = append(new ArrayLength(array, lock_stack())); + length = append(new ArrayLength(array, state_before)); } - push(as_ValueType(type), append(new LoadIndexed(array, index, length, type, lock_stack()))); + push(as_ValueType(type), append(new LoadIndexed(array, index, length, type, state_before))); } void GraphBuilder::store_indexed(BasicType type) { + ValueStack* state_before = copy_state_for_exception(); Value value = pop(as_ValueType(type)); Value index = ipop(); Value array = apop(); @@ -962,9 +956,9 @@ void GraphBuilder::store_indexed(BasicType type) { if (CSEArrayLength || (array->as_AccessField() && array->as_AccessField()->field()->is_constant()) || (array->as_NewArray() && array->as_NewArray()->length() && array->as_NewArray()->length()->type()->is_constant())) { - length = append(new ArrayLength(array, lock_stack())); + length = append(new ArrayLength(array, state_before)); } - StoreIndexed* result = new StoreIndexed(array, index, length, type, value, lock_stack()); + StoreIndexed* result = new StoreIndexed(array, index, length, type, value, state_before); append(result); _memory->store_value(value); @@ -1063,12 +1057,12 @@ void GraphBuilder::stack_op(Bytecodes::Code code) { } -void GraphBuilder::arithmetic_op(ValueType* type, Bytecodes::Code code, ValueStack* stack) { +void GraphBuilder::arithmetic_op(ValueType* type, Bytecodes::Code code, ValueStack* state_before) { Value y = pop(type); Value x = pop(type); // NOTE: strictfp can be queried from current method since we don't // inline methods with differing strictfp bits - Value res = new ArithmeticOp(code, x, y, method()->is_strict(), stack); + Value res = new ArithmeticOp(code, x, y, method()->is_strict(), state_before); // Note: currently single-precision floating-point rounding on Intel is handled at the LIRGenerator level res = append(res); if (method()->is_strict()) { @@ -1132,7 +1126,7 @@ void GraphBuilder::logic_op(ValueType* type, Bytecodes::Code code) { void GraphBuilder::compare_op(ValueType* type, Bytecodes::Code code) { - ValueStack* state_before = state()->copy(); + ValueStack* state_before = copy_state_before(); Value y = pop(type); Value x = pop(type); ipush(append(new CompareOp(code, x, y, state_before))); @@ -1217,7 +1211,7 @@ void GraphBuilder::if_node(Value x, If::Condition cond, Value y, ValueStack* sta void GraphBuilder::if_zero(ValueType* type, If::Condition cond) { Value y = append(new Constant(intZero)); - ValueStack* state_before = state()->copy(); + ValueStack* state_before = copy_state_before(); Value x = ipop(); if_node(x, cond, y, state_before); } @@ -1225,14 +1219,14 @@ void GraphBuilder::if_zero(ValueType* type, If::Condition cond) { void GraphBuilder::if_null(ValueType* type, If::Condition cond) { Value y = append(new Constant(objectNull)); - ValueStack* state_before = state()->copy(); + ValueStack* state_before = copy_state_before(); Value x = apop(); if_node(x, cond, y, state_before); } void GraphBuilder::if_same(ValueType* type, If::Condition cond) { - ValueStack* state_before = state()->copy(); + ValueStack* state_before = copy_state_before(); Value y = pop(type); Value x = pop(type); if_node(x, cond, y, state_before); @@ -1282,7 +1276,7 @@ void GraphBuilder::table_switch() { BlockBegin* tsux = block_at(bci() + switch_->dest_offset_at(0)); BlockBegin* fsux = block_at(bci() + switch_->default_offset()); bool is_bb = tsux->bci() < bci() || fsux->bci() < bci(); - ValueStack* state_before = is_bb ? state() : NULL; + ValueStack* state_before = is_bb ? copy_state_before() : NULL; append(new If(ipop(), If::eql, true, key, tsux, fsux, state_before, is_bb)); } else { // collect successors @@ -1295,7 +1289,7 @@ void GraphBuilder::table_switch() { } // add default successor sux->at_put(i, block_at(bci() + switch_->default_offset())); - ValueStack* state_before = has_bb ? state() : NULL; + ValueStack* state_before = has_bb ? copy_state_before() : NULL; append(new TableSwitch(ipop(), sux, switch_->low_key(), state_before, has_bb)); } } @@ -1314,7 +1308,7 @@ void GraphBuilder::lookup_switch() { BlockBegin* tsux = block_at(bci() + pair->offset()); BlockBegin* fsux = block_at(bci() + switch_->default_offset()); bool is_bb = tsux->bci() < bci() || fsux->bci() < bci(); - ValueStack* state_before = is_bb ? state() : NULL; + ValueStack* state_before = is_bb ? copy_state_before() : NULL; append(new If(ipop(), If::eql, true, key, tsux, fsux, state_before, is_bb)); } else { // collect successors & keys @@ -1330,7 +1324,7 @@ void GraphBuilder::lookup_switch() { } // add default successor sux->at_put(i, block_at(bci() + switch_->default_offset())); - ValueStack* state_before = has_bb ? state() : NULL; + ValueStack* state_before = has_bb ? copy_state_before() : NULL; append(new LookupSwitch(ipop(), sux, keys, state_before, has_bb)); } } @@ -1340,7 +1334,7 @@ void GraphBuilder::call_register_finalizer() { // the registration on return. // Gather some type information about the receiver - Value receiver = state()->load_local(0); + Value receiver = state()->local_at(0); assert(receiver != NULL, "must have a receiver"); ciType* declared_type = receiver->declared_type(); ciType* exact_type = receiver->exact_type(); @@ -1373,10 +1367,11 @@ void GraphBuilder::call_register_finalizer() { if (needs_check) { // Perform the registration of finalizable objects. + ValueStack* state_before = copy_state_for_exception(); load_local(objectType, 0); append_split(new Intrinsic(voidType, vmIntrinsics::_Object_init, state()->pop_arguments(1), - true, lock_stack(), true)); + true, state_before, true)); } } @@ -1395,12 +1390,14 @@ void GraphBuilder::method_return(Value x) { // If the inlined method is synchronized, the monitor must be // released before we jump to the continuation block. if (method()->is_synchronized()) { - int i = state()->caller_state()->locks_size(); - assert(state()->locks_size() == i + 1, "receiver must be locked here"); - monitorexit(state()->lock_at(i), SynchronizationEntryBCI); + assert(state()->locks_size() == 1, "receiver must be locked here"); + monitorexit(state()->lock_at(0), SynchronizationEntryBCI); } - state()->truncate_stack(caller_stack_size()); + // State at end of inlined method is the state of the caller + // without the method parameters on stack, including the + // return value, if any, of the inlined method on operand stack. + set_state(state()->caller_state()->copy_for_parsing()); if (x != NULL) { state()->push(x->type(), x); } @@ -1412,14 +1409,6 @@ void GraphBuilder::method_return(Value x) { set_inline_cleanup_info(_block, _last, state()); } - // State at end of inlined method is the state of the caller - // without the method parameters on stack, including the - // return value, if any, of the inlined method on operand stack. - set_state(scope_data()->continuation_state()->copy()); - if (x) { - state()->push(x->type(), x); - } - // The current bci() is in the wrong scope, so use the bci() of // the continuation point. append_with_bci(goto_callee, scope_data()->continuation()->bci()); @@ -1455,11 +1444,11 @@ void GraphBuilder::access_field(Bytecodes::Code code) { field->will_link(method()->holder(), code); const bool is_initialized = is_loaded && holder->is_initialized(); - ValueStack* state_copy = NULL; + ValueStack* state_before = NULL; if (!is_initialized || PatchALot) { // save state before instruction for debug info when // deoptimization happens during patching - state_copy = state()->copy(); + state_before = copy_state_before(); } Value obj = NULL; @@ -1468,9 +1457,9 @@ void GraphBuilder::access_field(Bytecodes::Code code) { // fully initialized and resolved in this constant pool. The will_link test // above essentially checks if this class is resolved in this constant pool // so, the is_initialized flag should be suffiect. - if (state_copy != NULL) { + if (state_before != NULL) { // build a patching constant - obj = new Constant(new ClassConstant(holder), state_copy); + obj = new Constant(new ClassConstant(holder), state_before); } else { obj = new Constant(new ClassConstant(holder)); } @@ -1499,25 +1488,32 @@ void GraphBuilder::access_field(Bytecodes::Code code) { } if (constant != NULL) { push(type, append(constant)); - state_copy = NULL; // Not a potential deoptimization point (see set_state_before logic below) } else { + if (state_before == NULL) { + state_before = copy_state_for_exception(); + } push(type, append(new LoadField(append(obj), offset, field, true, - lock_stack(), state_copy, is_loaded, is_initialized))); + state_before, is_loaded, is_initialized))); } break; } case Bytecodes::_putstatic: { Value val = pop(type); - append(new StoreField(append(obj), offset, field, val, true, lock_stack(), state_copy, is_loaded, is_initialized)); + if (state_before == NULL) { + state_before = copy_state_for_exception(); + } + append(new StoreField(append(obj), offset, field, val, true, state_before, is_loaded, is_initialized)); } break; case Bytecodes::_getfield : { - LoadField* load = new LoadField(apop(), offset, field, false, lock_stack(), state_copy, is_loaded, true); + if (state_before == NULL) { + state_before = copy_state_for_exception(); + } + LoadField* load = new LoadField(apop(), offset, field, false, state_before, is_loaded, true); Value replacement = is_loaded ? _memory->load(load) : load; if (replacement != load) { - assert(replacement->bci() != -99 || replacement->as_Phi() || replacement->as_Local(), - "should already by linked"); + assert(replacement->is_linked() || !replacement->can_be_linked(), "should already by linked"); push(type, replacement); } else { push(type, append(load)); @@ -1527,7 +1523,10 @@ void GraphBuilder::access_field(Bytecodes::Code code) { case Bytecodes::_putfield : { Value val = pop(type); - StoreField* store = new StoreField(apop(), offset, field, val, false, lock_stack(), state_copy, is_loaded, true); + if (state_before == NULL) { + state_before = copy_state_for_exception(); + } + StoreField* store = new StoreField(apop(), offset, field, val, false, state_before, is_loaded, true); if (is_loaded) store = _memory->store(store); if (store != NULL) { append(store); @@ -1647,7 +1646,7 @@ void GraphBuilder::invoke(Bytecodes::Code code) { actual_recv = target->holder(); // insert a check it's really the expected class. - CheckCast* c = new CheckCast(klass, receiver, NULL); + CheckCast* c = new CheckCast(klass, receiver, copy_state_for_exception()); c->set_incompatible_class_change_check(); c->set_direct_compare(klass->is_final()); append_split(c); @@ -1732,7 +1731,7 @@ void GraphBuilder::invoke(Bytecodes::Code code) { // We require the debug info to be the "state before" because // invokedynamics may deoptimize. - ValueStack* state_before = is_invokedynamic ? state()->copy() : NULL; + ValueStack* state_before = is_invokedynamic ? copy_state_before() : copy_state_exhandling(); Values* args = state()->pop_arguments(target->arg_size_no_receiver()); Value recv = has_receiver ? apop() : NULL; @@ -1795,24 +1794,26 @@ void GraphBuilder::invoke(Bytecodes::Code code) { void GraphBuilder::new_instance(int klass_index) { + ValueStack* state_before = copy_state_exhandling(); bool will_link; ciKlass* klass = stream()->get_klass(will_link); assert(klass->is_instance_klass(), "must be an instance klass"); - NewInstance* new_instance = new NewInstance(klass->as_instance_klass()); + NewInstance* new_instance = new NewInstance(klass->as_instance_klass(), state_before); _memory->new_instance(new_instance); apush(append_split(new_instance)); } void GraphBuilder::new_type_array() { - apush(append_split(new NewTypeArray(ipop(), (BasicType)stream()->get_index()))); + ValueStack* state_before = copy_state_exhandling(); + apush(append_split(new NewTypeArray(ipop(), (BasicType)stream()->get_index(), state_before))); } void GraphBuilder::new_object_array() { bool will_link; ciKlass* klass = stream()->get_klass(will_link); - ValueStack* state_before = !klass->is_loaded() || PatchALot ? state()->copy() : NULL; + ValueStack* state_before = !klass->is_loaded() || PatchALot ? copy_state_before() : copy_state_exhandling(); NewArray* n = new NewObjectArray(klass, ipop(), state_before); apush(append_split(n)); } @@ -1838,7 +1839,7 @@ bool GraphBuilder::direct_compare(ciKlass* k) { void GraphBuilder::check_cast(int klass_index) { bool will_link; ciKlass* klass = stream()->get_klass(will_link); - ValueStack* state_before = !klass->is_loaded() || PatchALot ? state()->copy() : NULL; + ValueStack* state_before = !klass->is_loaded() || PatchALot ? copy_state_before() : copy_state_for_exception(); CheckCast* c = new CheckCast(klass, apop(), state_before); apush(append_split(c)); c->set_direct_compare(direct_compare(klass)); @@ -1859,7 +1860,7 @@ void GraphBuilder::check_cast(int klass_index) { void GraphBuilder::instance_of(int klass_index) { bool will_link; ciKlass* klass = stream()->get_klass(will_link); - ValueStack* state_before = !klass->is_loaded() || PatchALot ? state()->copy() : NULL; + ValueStack* state_before = !klass->is_loaded() || PatchALot ? copy_state_before() : copy_state_exhandling(); InstanceOf* i = new InstanceOf(klass, apop(), state_before); ipush(append_split(i)); i->set_direct_compare(direct_compare(klass)); @@ -1879,25 +1880,13 @@ void GraphBuilder::instance_of(int klass_index) { void GraphBuilder::monitorenter(Value x, int bci) { // save state before locking in case of deoptimization after a NullPointerException - ValueStack* lock_stack_before = lock_stack(); - append_with_bci(new MonitorEnter(x, state()->lock(scope(), x), lock_stack_before), bci); + ValueStack* state_before = copy_state_for_exception_with_bci(bci); + append_with_bci(new MonitorEnter(x, state()->lock(x), state_before), bci); kill_all(); } void GraphBuilder::monitorexit(Value x, int bci) { - // Note: the comment below is only relevant for the case where we do - // not deoptimize due to asynchronous exceptions (!(DeoptC1 && - // DeoptOnAsyncException), which is not used anymore) - - // Note: Potentially, the monitor state in an exception handler - // can be wrong due to wrong 'initialization' of the handler - // via a wrong asynchronous exception path. This can happen, - // if the exception handler range for asynchronous exceptions - // is too long (see also java bug 4327029, and comment in - // GraphBuilder::handle_exception()). This may cause 'under- - // flow' of the monitor stack => bailout instead. - if (state()->locks_size() < 1) BAILOUT("monitor stack underflow"); append_with_bci(new MonitorExit(x, state()->unlock()), bci); kill_all(); } @@ -1906,7 +1895,7 @@ void GraphBuilder::monitorexit(Value x, int bci) { void GraphBuilder::new_multi_array(int dimensions) { bool will_link; ciKlass* klass = stream()->get_klass(will_link); - ValueStack* state_before = !klass->is_loaded() || PatchALot ? state()->copy() : NULL; + ValueStack* state_before = !klass->is_loaded() || PatchALot ? copy_state_before() : copy_state_exhandling(); Values* dims = new Values(dimensions, NULL); // fill in all dimensions @@ -1921,8 +1910,10 @@ void GraphBuilder::new_multi_array(int dimensions) { void GraphBuilder::throw_op(int bci) { // We require that the debug info for a Throw be the "state before" // the Throw (i.e., exception oop is still on TOS) - ValueStack* state_before = state()->copy(); + ValueStack* state_before = copy_state_before_with_bci(bci); Throw* t = new Throw(apop(), state_before); + // operand stack not needed after a throw + state()->truncate_stack(0); append_with_bci(t, bci); } @@ -1947,60 +1938,62 @@ Value GraphBuilder::round_fp(Value fp_value) { Instruction* GraphBuilder::append_with_bci(Instruction* instr, int bci) { Canonicalizer canon(compilation(), instr, bci); Instruction* i1 = canon.canonical(); - if (i1->bci() != -99) { + if (i1->is_linked() || !i1->can_be_linked()) { // Canonicalizer returned an instruction which was already // appended so simply return it. return i1; - } else if (UseLocalValueNumbering) { + } + + if (UseLocalValueNumbering) { // Lookup the instruction in the ValueMap and add it to the map if // it's not found. Instruction* i2 = vmap()->find_insert(i1); if (i2 != i1) { // found an entry in the value map, so just return it. - assert(i2->bci() != -1, "should already be linked"); + assert(i2->is_linked(), "should already be linked"); return i2; } ValueNumberingEffects vne(vmap()); i1->visit(&vne); } - if (i1->as_Phi() == NULL && i1->as_Local() == NULL) { - // i1 was not eliminated => append it - assert(i1->next() == NULL, "shouldn't already be linked"); - _last = _last->set_next(i1, canon.bci()); - if (++_instruction_count >= InstructionCountCutoff - && !bailed_out()) { - // set the bailout state but complete normal processing. We - // might do a little more work before noticing the bailout so we - // want processing to continue normally until it's noticed. - bailout("Method and/or inlining is too large"); - } + // i1 was not eliminated => append it + assert(i1->next() == NULL, "shouldn't already be linked"); + _last = _last->set_next(i1, canon.bci()); + + if (++_instruction_count >= InstructionCountCutoff && !bailed_out()) { + // set the bailout state but complete normal processing. We + // might do a little more work before noticing the bailout so we + // want processing to continue normally until it's noticed. + bailout("Method and/or inlining is too large"); + } #ifndef PRODUCT - if (PrintIRDuringConstruction) { - InstructionPrinter ip; - ip.print_line(i1); - if (Verbose) { - state()->print(); - } + if (PrintIRDuringConstruction) { + InstructionPrinter ip; + ip.print_line(i1); + if (Verbose) { + state()->print(); } + } #endif - assert(_last == i1, "adjust code below"); - StateSplit* s = i1->as_StateSplit(); - if (s != NULL && i1->as_BlockEnd() == NULL) { - if (EliminateFieldAccess) { - Intrinsic* intrinsic = s->as_Intrinsic(); - if (s->as_Invoke() != NULL || (intrinsic && !intrinsic->preserves_state())) { - _memory->kill(); - } + + // save state after modification of operand stack for StateSplit instructions + StateSplit* s = i1->as_StateSplit(); + if (s != NULL) { + if (EliminateFieldAccess) { + Intrinsic* intrinsic = s->as_Intrinsic(); + if (s->as_Invoke() != NULL || (intrinsic && !intrinsic->preserves_state())) { + _memory->kill(); } - s->set_state(state()->copy()); - } - // set up exception handlers for this instruction if necessary - if (i1->can_trap()) { - assert(exception_state() != NULL || !has_handler(), "must have setup exception state"); - i1->set_exception_handlers(handle_exception(bci)); } + s->set_state(state()->copy(ValueStack::StateAfter, canon.bci())); + } + + // set up exception handlers for this instruction if necessary + if (i1->can_trap()) { + i1->set_exception_handlers(handle_exception(i1)); + assert(i1->exception_state() != NULL || !i1->needs_exception_state() || bailed_out(), "handle_exception must set exception state"); } return i1; } @@ -2032,26 +2025,30 @@ void GraphBuilder::null_check(Value value) { } } } - append(new NullCheck(value, lock_stack())); + append(new NullCheck(value, copy_state_for_exception())); } -XHandlers* GraphBuilder::handle_exception(int cur_bci) { - // fast path if it is guaranteed that no exception handlers are present - if (!has_handler()) { - // TODO: check if return NULL is possible (avoids empty lists) +XHandlers* GraphBuilder::handle_exception(Instruction* instruction) { + if (!has_handler() && (!instruction->needs_exception_state() || instruction->exception_state() != NULL)) { + assert(instruction->exception_state() == NULL + || instruction->exception_state()->kind() == ValueStack::EmptyExceptionState + || (instruction->exception_state()->kind() == ValueStack::ExceptionState && _compilation->env()->jvmti_can_access_local_variables()), + "exception_state should be of exception kind"); return new XHandlers(); } XHandlers* exception_handlers = new XHandlers(); ScopeData* cur_scope_data = scope_data(); - ValueStack* s = exception_state(); + ValueStack* cur_state = instruction->state_before(); + ValueStack* prev_state = NULL; int scope_count = 0; - assert(s != NULL, "exception state must be set"); + assert(cur_state != NULL, "state_before must be set"); do { - assert(cur_scope_data->scope() == s->scope(), "scopes do not match"); + int cur_bci = cur_state->bci(); + assert(cur_scope_data->scope() == cur_state->scope(), "scopes do not match"); assert(cur_bci == SynchronizationEntryBCI || cur_bci == cur_scope_data->stream()->cur_bci(), "invalid bci"); // join with all potential exception handlers @@ -2075,10 +2072,15 @@ XHandlers* GraphBuilder::handle_exception(int cur_bci) { // previously this was a BAILOUT, but this is not necessary // now because asynchronous exceptions are not handled this way. - assert(entry->state() == NULL || s->locks_size() == entry->state()->locks_size(), "locks do not match"); + assert(entry->state() == NULL || cur_state->total_locks_size() == entry->state()->total_locks_size(), "locks do not match"); // xhandler start with an empty expression stack - s->truncate_stack(cur_scope_data->caller_stack_size()); + if (cur_state->stack_size() != 0) { + cur_state = cur_state->copy(ValueStack::ExceptionState, cur_state->bci()); + } + if (instruction->exception_state() == NULL) { + instruction->set_exception_state(cur_state); + } // Note: Usually this join must work. However, very // complicated jsr-ret structures where we don't ret from @@ -2087,12 +2089,12 @@ XHandlers* GraphBuilder::handle_exception(int cur_bci) { // The only test case we've seen so far which exhibits this // problem is caught by the infinite recursion test in // GraphBuilder::jsr() if the join doesn't work. - if (!entry->try_merge(s)) { + if (!entry->try_merge(cur_state)) { BAILOUT_("error while joining with exception handler, prob. due to complicated jsr/rets", exception_handlers); } // add current state for correct handling of phi functions at begin of xhandler - int phi_operand = entry->add_exception_state(s); + int phi_operand = entry->add_exception_state(cur_state); // add entry to the list of xhandlers of this block _block->add_exception_handler(entry); @@ -2119,26 +2121,39 @@ XHandlers* GraphBuilder::handle_exception(int cur_bci) { } } + if (exception_handlers->length() == 0) { + // This scope and all callees do not handle exceptions, so the local + // variables of this scope are not needed. However, the scope itself is + // required for a correct exception stack trace -> clear out the locals. + if (_compilation->env()->jvmti_can_access_local_variables()) { + cur_state = cur_state->copy(ValueStack::ExceptionState, cur_state->bci()); + } else { + cur_state = cur_state->copy(ValueStack::EmptyExceptionState, cur_state->bci()); + } + if (prev_state != NULL) { + prev_state->set_caller_state(cur_state); + } + if (instruction->exception_state() == NULL) { + instruction->set_exception_state(cur_state); + } + } + // Set up iteration for next time. // If parsing a jsr, do not grab exception handlers from the // parent scopes for this method (already got them, and they // needed to be cloned) - if (cur_scope_data->parsing_jsr()) { - IRScope* tmp_scope = cur_scope_data->scope(); - while (cur_scope_data->parent() != NULL && - cur_scope_data->parent()->scope() == tmp_scope) { - cur_scope_data = cur_scope_data->parent(); - } - } - if (cur_scope_data != NULL) { - if (cur_scope_data->parent() != NULL) { - // must use pop_scope instead of caller_state to preserve all monitors - s = s->pop_scope(); - } - cur_bci = cur_scope_data->scope()->caller_bci(); + + while (cur_scope_data->parsing_jsr()) { cur_scope_data = cur_scope_data->parent(); - scope_count++; } + + assert(cur_scope_data->scope() == cur_state->scope(), "scopes do not match"); + assert(cur_state->locks_size() == 0 || cur_state->locks_size() == 1, "unlocking must be done in a catchall exception handler"); + + prev_state = cur_state; + cur_state = cur_state->caller_state(); + cur_scope_data = cur_scope_data->parent(); + scope_count++; } while (cur_scope_data != NULL); return exception_handlers; @@ -2243,14 +2258,10 @@ void PhiSimplifier::block_do(BlockBegin* b) { ); ValueStack* state = b->state()->caller_state(); - int index; - Value value; - for_each_state(state) { - for_each_local_value(state, index, value) { - Phi* phi = value->as_Phi(); - assert(phi == NULL || phi->block() != b, "must not have phi function to simplify in caller state"); - } - } + for_each_state_value(state, value, + Phi* phi = value->as_Phi(); + assert(phi == NULL || phi->block() != b, "must not have phi function to simplify in caller state"); + ); #endif } @@ -2265,7 +2276,7 @@ void GraphBuilder::connect_to_end(BlockBegin* beg) { // setup iteration kill_all(); _block = beg; - _state = beg->state()->copy(); + _state = beg->state()->copy_for_parsing(); _last = beg; iterate_bytecodes_for_block(beg->bci()); } @@ -2301,14 +2312,7 @@ BlockEnd* GraphBuilder::iterate_bytecodes_for_block(int bci) { while (!bailed_out() && last()->as_BlockEnd() == NULL && (code = stream()->next()) != ciBytecodeStream::EOBC() && (block_at(s.cur_bci()) == NULL || block_at(s.cur_bci()) == block())) { - - if (has_handler() && can_trap(method(), code)) { - // copy the state because it is modified before handle_exception is called - set_exception_state(state()->copy()); - } else { - // handle_exception is not called for this bytecode - set_exception_state(NULL); - } + assert(state()->kind() == ValueStack::Parsing, "invalid state kind"); // Check for active jsr during OSR compilation if (compilation()->is_osr_compile() @@ -2433,12 +2437,12 @@ BlockEnd* GraphBuilder::iterate_bytecodes_for_block(int bci) { case Bytecodes::_lmul : arithmetic_op(longType , code); break; case Bytecodes::_fmul : arithmetic_op(floatType , code); break; case Bytecodes::_dmul : arithmetic_op(doubleType, code); break; - case Bytecodes::_idiv : arithmetic_op(intType , code, lock_stack()); break; - case Bytecodes::_ldiv : arithmetic_op(longType , code, lock_stack()); break; + case Bytecodes::_idiv : arithmetic_op(intType , code, copy_state_for_exception()); break; + case Bytecodes::_ldiv : arithmetic_op(longType , code, copy_state_for_exception()); break; case Bytecodes::_fdiv : arithmetic_op(floatType , code); break; case Bytecodes::_ddiv : arithmetic_op(doubleType, code); break; - case Bytecodes::_irem : arithmetic_op(intType , code, lock_stack()); break; - case Bytecodes::_lrem : arithmetic_op(longType , code, lock_stack()); break; + case Bytecodes::_irem : arithmetic_op(intType , code, copy_state_for_exception()); break; + case Bytecodes::_lrem : arithmetic_op(longType , code, copy_state_for_exception()); break; case Bytecodes::_frem : arithmetic_op(floatType , code); break; case Bytecodes::_drem : arithmetic_op(doubleType, code); break; case Bytecodes::_ineg : negate_op(intType ); break; @@ -2515,11 +2519,10 @@ BlockEnd* GraphBuilder::iterate_bytecodes_for_block(int bci) { case Bytecodes::_new : new_instance(s.get_index_u2()); break; case Bytecodes::_newarray : new_type_array(); break; case Bytecodes::_anewarray : new_object_array(); break; - case Bytecodes::_arraylength : ipush(append(new ArrayLength(apop(), lock_stack()))); break; + case Bytecodes::_arraylength : { ValueStack* state_before = copy_state_for_exception(); ipush(append(new ArrayLength(apop(), state_before))); break; } case Bytecodes::_athrow : throw_op(s.cur_bci()); break; case Bytecodes::_checkcast : check_cast(s.get_index_u2()); break; case Bytecodes::_instanceof : instance_of(s.get_index_u2()); break; - // Note: we do not have special handling for the monitorenter bytecode if DeoptC1 && DeoptOnAsyncException case Bytecodes::_monitorenter : monitorenter(apop(), s.cur_bci()); break; case Bytecodes::_monitorexit : monitorexit (apop(), s.cur_bci()); break; case Bytecodes::_wide : ShouldNotReachHere(); break; @@ -2546,28 +2549,22 @@ BlockEnd* GraphBuilder::iterate_bytecodes_for_block(int bci) { if (end == NULL) { // all blocks must end with a BlockEnd instruction => add a Goto end = new Goto(block_at(s.cur_bci()), false); - _last = _last->set_next(end, prev_bci); + append(end); } assert(end == last()->as_BlockEnd(), "inconsistency"); - // if the method terminates, we don't need the stack anymore - if (end->as_Return() != NULL) { - state()->clear_stack(); - } else if (end->as_Throw() != NULL) { - // May have exception handler in caller scopes - state()->truncate_stack(scope()->lock_stack_size()); - } + assert(end->state() != NULL, "state must already be present"); + assert(end->as_Return() == NULL || end->as_Throw() == NULL || end->state()->stack_size() == 0, "stack not needed for return and throw"); // connect to begin & set state // NOTE that inlining may have changed the block we are parsing block()->set_end(end); - end->set_state(state()); // propagate state for (int i = end->number_of_sux() - 1; i >= 0; i--) { BlockBegin* sux = end->sux_at(i); assert(sux->is_predecessor(block()), "predecessor missing"); // be careful, bailout if bytecodes are strange - if (!sux->try_merge(state())) BAILOUT_("block join failed", NULL); + if (!sux->try_merge(end->state())) BAILOUT_("block join failed", NULL); scope_data()->add_to_work_list(end->sux_at(i)); } @@ -2605,7 +2602,6 @@ void GraphBuilder::iterate_all_blocks(bool start_in_current_block_for_inlining) bool GraphBuilder::_can_trap [Bytecodes::number_of_java_codes]; -bool GraphBuilder::_is_async[Bytecodes::number_of_java_codes]; void GraphBuilder::initialize() { // the following bytecodes are assumed to potentially @@ -2657,67 +2653,14 @@ void GraphBuilder::initialize() { , Bytecodes::_multianewarray }; - // the following bytecodes are assumed to potentially - // throw asynchronous exceptions in compiled code due - // to safepoints (note: these entries could be merged - // with the can_trap_list - however, we need to know - // which ones are asynchronous for now - see also the - // comment in GraphBuilder::handle_exception) - Bytecodes::Code is_async_list[] = - { Bytecodes::_ifeq - , Bytecodes::_ifne - , Bytecodes::_iflt - , Bytecodes::_ifge - , Bytecodes::_ifgt - , Bytecodes::_ifle - , Bytecodes::_if_icmpeq - , Bytecodes::_if_icmpne - , Bytecodes::_if_icmplt - , Bytecodes::_if_icmpge - , Bytecodes::_if_icmpgt - , Bytecodes::_if_icmple - , Bytecodes::_if_acmpeq - , Bytecodes::_if_acmpne - , Bytecodes::_goto - , Bytecodes::_jsr - , Bytecodes::_ret - , Bytecodes::_tableswitch - , Bytecodes::_lookupswitch - , Bytecodes::_ireturn - , Bytecodes::_lreturn - , Bytecodes::_freturn - , Bytecodes::_dreturn - , Bytecodes::_areturn - , Bytecodes::_return - , Bytecodes::_ifnull - , Bytecodes::_ifnonnull - , Bytecodes::_goto_w - , Bytecodes::_jsr_w - }; - // inititialize trap tables for (int i = 0; i < Bytecodes::number_of_java_codes; i++) { _can_trap[i] = false; - _is_async[i] = false; } // set standard trap info for (uint j = 0; j < ARRAY_SIZE(can_trap_list); j++) { _can_trap[can_trap_list[j]] = true; } - - // We now deoptimize if an asynchronous exception is thrown. This - // considerably cleans up corner case issues related to javac's - // incorrect exception handler ranges for async exceptions and - // allows us to precisely analyze the types of exceptions from - // certain bytecodes. - if (!(DeoptC1 && DeoptOnAsyncException)) { - // set asynchronous trap info - for (uint k = 0; k < ARRAY_SIZE(is_async_list); k++) { - assert(!_can_trap[is_async_list[k]], "can_trap_list and is_async_list should be disjoint"); - _can_trap[is_async_list[k]] = true; - _is_async[is_async_list[k]] = true; - } - } } @@ -2733,7 +2676,7 @@ BlockBegin* GraphBuilder::header_block(BlockBegin* entry, BlockBegin::Flag f, Va h->set_end(g); h->set(f); // setup header block end state - ValueStack* s = state->copy(); // can use copy since stack is empty (=> no phis) + ValueStack* s = state->copy(ValueStack::StateAfter, entry->bci()); // can use copy since stack is empty (=> no phis) assert(s->stack_is_empty(), "must have empty stack at entry point"); g->set_state(s); return h; @@ -2768,8 +2711,8 @@ BlockBegin* GraphBuilder::setup_start_block(int osr_bci, BlockBegin* std_entry, start->set_next(base, 0); start->set_end(base); // create & setup state for start block - start->set_state(state->copy()); - base->set_state(state->copy()); + start->set_state(state->copy(ValueStack::StateAfter, std_entry->bci())); + base->set_state(state->copy(ValueStack::StateAfter, std_entry->bci())); if (base->std_entry()->state() == NULL) { // setup states for header blocks @@ -2803,6 +2746,7 @@ void GraphBuilder::setup_osr_entry_block() { kill_all(); _block = _osr_entry; _state = _osr_entry->state()->copy(); + assert(_state->bci() == osr_bci, "mismatch"); _last = _osr_entry; Value e = append(new OsrEntry()); e->set_needs_null_check(false); @@ -2852,7 +2796,6 @@ void GraphBuilder::setup_osr_entry_block() { assert(state->caller_state() == NULL, "should be top scope"); state->clear_locals(); Goto* g = new Goto(target, false); - g->set_state(_state->copy()); append(g); _osr_entry->set_end(g); target->merge(_osr_entry->end()->state()); @@ -2862,7 +2805,7 @@ void GraphBuilder::setup_osr_entry_block() { ValueStack* GraphBuilder::state_at_entry() { - ValueStack* state = new ValueStack(scope(), method()->max_locals(), method()->max_stack()); + ValueStack* state = new ValueStack(scope(), NULL); // Set up locals for receiver int idx = 0; @@ -2886,7 +2829,7 @@ ValueStack* GraphBuilder::state_at_entry() { // lock synchronized method if (method()->is_synchronized()) { - state->lock(scope(), NULL); + state->lock(NULL); } return state; @@ -2895,7 +2838,6 @@ ValueStack* GraphBuilder::state_at_entry() { GraphBuilder::GraphBuilder(Compilation* compilation, IRScope* scope) : _scope_data(NULL) - , _exception_state(NULL) , _instruction_count(0) , _osr_entry(NULL) , _memory(new MemoryBuffer()) @@ -2919,7 +2861,6 @@ GraphBuilder::GraphBuilder(Compilation* compilation, IRScope* scope) // complete graph _vmap = new ValueMap(); - scope->compute_lock_stack_size(); switch (scope->method()->intrinsic_id()) { case vmIntrinsics::_dabs : // fall through case vmIntrinsics::_dsqrt : // fall through @@ -2945,7 +2886,7 @@ GraphBuilder::GraphBuilder(Compilation* compilation, IRScope* scope) // setup the initial block state _block = start_block; - _state = start_block->state()->copy(); + _state = start_block->state()->copy_for_parsing(); _last = start_block; load_local(doubleType, 0); @@ -2957,7 +2898,6 @@ GraphBuilder::GraphBuilder(Compilation* compilation, IRScope* scope) // connect the begin and end blocks and we're all done. BlockEnd* end = last()->as_BlockEnd(); block()->set_end(end); - end->set_state(state()); break; } default: @@ -2988,13 +2928,38 @@ GraphBuilder::GraphBuilder(Compilation* compilation, IRScope* scope) } -ValueStack* GraphBuilder::lock_stack() { - // return a new ValueStack representing just the current lock stack - // (for debug info at safepoints in exception throwing or handling) - ValueStack* new_stack = state()->copy_locks(); - return new_stack; +ValueStack* GraphBuilder::copy_state_before() { + return copy_state_before_with_bci(bci()); } +ValueStack* GraphBuilder::copy_state_exhandling() { + return copy_state_exhandling_with_bci(bci()); +} + +ValueStack* GraphBuilder::copy_state_for_exception() { + return copy_state_for_exception_with_bci(bci()); +} + +ValueStack* GraphBuilder::copy_state_before_with_bci(int bci) { + return state()->copy(ValueStack::StateBefore, bci); +} + +ValueStack* GraphBuilder::copy_state_exhandling_with_bci(int bci) { + if (!has_handler()) return NULL; + return state()->copy(ValueStack::StateBefore, bci); +} + +ValueStack* GraphBuilder::copy_state_for_exception_with_bci(int bci) { + ValueStack* s = copy_state_exhandling_with_bci(bci); + if (s == NULL) { + if (_compilation->env()->jvmti_can_access_local_variables()) { + s = state()->copy(ValueStack::ExceptionState, bci); + } else { + s = state()->copy(ValueStack::EmptyExceptionState, bci); + } + } + return s; +} int GraphBuilder::recursive_inline_level(ciMethod* cur_callee) const { int recur_level = 0; @@ -3177,9 +3142,9 @@ bool GraphBuilder::try_inline_intrinsics(ciMethod* callee) { // create intrinsic node const bool has_receiver = !callee->is_static(); ValueType* result_type = as_ValueType(callee->return_type()); + ValueStack* state_before = copy_state_for_exception(); Values* args = state()->pop_arguments(callee->arg_size()); - ValueStack* locks = lock_stack(); if (is_profiling()) { // Don't profile in the special case where the root method @@ -3198,7 +3163,7 @@ bool GraphBuilder::try_inline_intrinsics(ciMethod* callee) { } } - Intrinsic* result = new Intrinsic(result_type, id, args, has_receiver, lock_stack(), + Intrinsic* result = new Intrinsic(result_type, id, args, has_receiver, state_before, preserves_state, cantrap); // append instruction & push result Value value = append_split(result); @@ -3236,10 +3201,9 @@ bool GraphBuilder::try_inline_jsr(int jsr_dest_bci) { assert(jsr_start_block != NULL, "jsr start block must exist"); assert(!jsr_start_block->is_set(BlockBegin::was_visited_flag), "should not have visited jsr yet"); Goto* goto_sub = new Goto(jsr_start_block, false); - goto_sub->set_state(state()); // Must copy state to avoid wrong sharing when parsing bytecodes assert(jsr_start_block->state() == NULL, "should have fresh jsr starting block"); - jsr_start_block->set_state(state()->copy()); + jsr_start_block->set_state(copy_state_before_with_bci(jsr_dest_bci)); append(goto_sub); _block->set_end(goto_sub); _last = _block = jsr_start_block; @@ -3290,7 +3254,6 @@ bool GraphBuilder::try_inline_jsr(int jsr_dest_bci) { void GraphBuilder::inline_sync_entry(Value lock, BlockBegin* sync_handler) { assert(lock != NULL && sync_handler != NULL, "lock or handler missing"); - set_exception_state(state()->copy()); monitorenter(lock, SynchronizationEntryBCI); assert(_last->as_MonitorEnter() != NULL, "monitor enter expected"); _last->set_needs_null_check(false); @@ -3332,7 +3295,7 @@ void GraphBuilder::fill_sync_handler(Value lock, BlockBegin* sync_handler, bool int bci = SynchronizationEntryBCI; if (lock) { assert(state()->locks_size() > 0 && state()->lock_at(state()->locks_size() - 1) == lock, "lock is missing"); - if (lock->bci() == -99) { + if (!lock->is_linked()) { lock = append_with_bci(lock, -1); } @@ -3342,21 +3305,17 @@ void GraphBuilder::fill_sync_handler(Value lock, BlockBegin* sync_handler, bool // exit the context of the synchronized method if (!default_handler) { pop_scope(); - _state = _state->copy(); - bci = _state->scope()->caller_bci(); - _state = _state->pop_scope()->copy(); + bci = _state->caller_state()->bci(); + _state = _state->caller_state()->copy_for_parsing(); } } // perform the throw as if at the the call site apush(exception); - - set_exception_state(state()->copy()); throw_op(bci); BlockEnd* end = last()->as_BlockEnd(); block()->set_end(end); - end->set_state(state()); _block = orig_block; _state = orig_state; @@ -3446,7 +3405,7 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known) { profile_call(recv, holder_known ? callee->holder() : NULL); } if (profile_inlined_calls()) { - profile_invocation(callee, state(), 0); + profile_invocation(callee, copy_state_before()); } } @@ -3487,7 +3446,7 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known) { // Pass parameters into callee state: add assignments // note: this will also ensure that all arguments are computed before being passed ValueStack* callee_state = state(); - ValueStack* caller_state = scope()->caller_state(); + ValueStack* caller_state = state()->caller_state(); { int i = args_base; while (i < caller_state->stack_size()) { const int par_no = i - args_base; @@ -3502,16 +3461,7 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known) { // Note that we preserve locals state in case we can use it later // (see use of pop_scope() below) caller_state->truncate_stack(args_base); - callee_state->truncate_stack(args_base); - - // Setup state that is used at returns form the inlined method. - // This is essentially the state of the continuation block, - // but without the return value on stack, if any, this will - // be pushed at the return instruction (see method_return). - scope_data()->set_continuation_state(caller_state->copy()); - - // Compute lock stack size for callee scope now that args have been passed - scope()->compute_lock_stack_size(); + assert(callee_state->stack_size() == 0, "callee stack must be empty"); Value lock; BlockBegin* sync_handler; @@ -3520,11 +3470,8 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known) { if (callee->is_synchronized()) { lock = callee->is_static() ? append(new Constant(new InstanceConstant(callee->holder()->java_mirror()))) : state()->local_at(0); - sync_handler = new BlockBegin(-1); + sync_handler = new BlockBegin(SynchronizationEntryBCI); inline_sync_entry(lock, sync_handler); - - // recompute the lock stack size - scope()->compute_lock_stack_size(); } @@ -3532,7 +3479,6 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known) { if (callee_start_block != NULL) { assert(callee_start_block->is_set(BlockBegin::parser_loop_header_flag), "must be loop header"); Goto* goto_callee = new Goto(callee_start_block, false); - goto_callee->set_state(state()); // The state for this goto is in the scope of the callee, so use // the entry bci for the callee instead of the call site bci. append_with_bci(goto_callee, 0); @@ -3579,7 +3525,7 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known) { && block() == orig_block && block() == inline_cleanup_block()) { _last = inline_cleanup_return_prev(); - _state = inline_cleanup_state()->pop_scope(); + _state = inline_cleanup_state(); } else if (continuation_preds == cont->number_of_preds()) { // Inlining caused that the instructions after the invoke in the // caller are not reachable any more. So skip filling this block @@ -3645,8 +3591,7 @@ void GraphBuilder::push_scope(ciMethod* callee, BlockBegin* continuation) { blb.bci2block()->at_put(0, NULL); } - callee_scope->set_caller_state(state()); - set_state(state()->push_scope(callee_scope)); + set_state(new ValueStack(callee_scope, state()->copy(ValueStack::CallerState, bci()))); ScopeData* data = new ScopeData(scope_data()); data->set_scope(callee_scope); @@ -3670,10 +3615,6 @@ void GraphBuilder::push_scope_for_jsr(BlockBegin* jsr_continuation, int jsr_dest data->set_scope(scope()); data->setup_jsr_xhandlers(); data->set_continuation(continuation()); - if (continuation() != NULL) { - assert(continuation_state() != NULL, ""); - data->set_continuation_state(continuation_state()->copy()); - } data->set_jsr_continuation(jsr_continuation); _scope_data = data; } @@ -3768,6 +3709,7 @@ bool GraphBuilder::append_unsafe_prefetch(ciMethod* callee, bool is_static, bool void GraphBuilder::append_unsafe_CAS(ciMethod* callee) { + ValueStack* state_before = copy_state_for_exception(); ValueType* result_type = as_ValueType(callee->return_type()); assert(result_type->is_int(), "int result"); Values* args = state()->pop_arguments(callee->arg_size()); @@ -3796,7 +3738,7 @@ void GraphBuilder::append_unsafe_CAS(ciMethod* callee) { // know which ones so mark the state as no preserved. This will // cause CSE to invalidate memory across it. bool preserves_state = false; - Intrinsic* result = new Intrinsic(result_type, callee->intrinsic_id(), args, false, lock_stack(), preserves_state); + Intrinsic* result = new Intrinsic(result_type, callee->intrinsic_id(), args, false, state_before, preserves_state); append_split(result); push(result_type, result); compilation()->set_has_unsafe_access(true); @@ -3838,6 +3780,6 @@ void GraphBuilder::profile_call(Value recv, ciKlass* known_holder) { append(new ProfileCall(method(), bci(), recv, known_holder)); } -void GraphBuilder::profile_invocation(ciMethod* callee, ValueStack* state, int bci) { - append(new ProfileInvoke(callee, state, bci)); +void GraphBuilder::profile_invocation(ciMethod* callee, ValueStack* state) { + append(new ProfileInvoke(callee, state)); } diff --git a/hotspot/src/share/vm/c1/c1_GraphBuilder.hpp b/hotspot/src/share/vm/c1/c1_GraphBuilder.hpp index 1a6c6f28d22..26c1b96a0f7 100644 --- a/hotspot/src/share/vm/c1/c1_GraphBuilder.hpp +++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.hpp @@ -58,9 +58,6 @@ class GraphBuilder VALUE_OBJ_CLASS_SPEC { // BlockEnds. BlockBegin* _continuation; - // Without return value of inlined method on stack - ValueStack* _continuation_state; - // Was this ScopeData created only for the parsing and inlining of // a jsr? bool _parsing_jsr; @@ -125,14 +122,10 @@ class GraphBuilder VALUE_OBJ_CLASS_SPEC { void set_stream(ciBytecodeStream* stream) { _stream = stream; } intx max_inline_size() const { return _max_inline_size; } - int caller_stack_size() const; BlockBegin* continuation() const { return _continuation; } void set_continuation(BlockBegin* cont) { _continuation = cont; } - ValueStack* continuation_state() const { return _continuation_state; } - void set_continuation_state(ValueStack* s) { _continuation_state = s; } - // Indicates whether this ScopeData was pushed only for the // parsing and inlining of a jsr bool parsing_jsr() const { return _parsing_jsr; } @@ -163,7 +156,6 @@ class GraphBuilder VALUE_OBJ_CLASS_SPEC { // for all GraphBuilders static bool _can_trap[Bytecodes::number_of_java_codes]; - static bool _is_async[Bytecodes::number_of_java_codes]; // for each instance of GraphBuilder ScopeData* _scope_data; // Per-scope data; used for inlining @@ -179,7 +171,6 @@ class GraphBuilder VALUE_OBJ_CLASS_SPEC { // for each call to connect_to_end; can also be set by inliner BlockBegin* _block; // the current block ValueStack* _state; // the current execution state - ValueStack* _exception_state; // state that will be used by handle_exception Instruction* _last; // the last instruction added bool _skip_block; // skip processing of the rest of this block @@ -194,8 +185,6 @@ class GraphBuilder VALUE_OBJ_CLASS_SPEC { ValueStack* state() const { return _state; } void set_state(ValueStack* state) { _state = state; } IRScope* scope() const { return scope_data()->scope(); } - ValueStack* exception_state() const { return _exception_state; } - void set_exception_state(ValueStack* s) { _exception_state = s; } ciMethod* method() const { return scope()->method(); } ciBytecodeStream* stream() const { return scope_data()->stream(); } Instruction* last() const { return _last; } @@ -230,7 +219,7 @@ class GraphBuilder VALUE_OBJ_CLASS_SPEC { void load_indexed (BasicType type); void store_indexed(BasicType type); void stack_op(Bytecodes::Code code); - void arithmetic_op(ValueType* type, Bytecodes::Code code, ValueStack* lock_stack = NULL); + void arithmetic_op(ValueType* type, Bytecodes::Code code, ValueStack* state_before = NULL); void negate_op(ValueType* type); void shift_op(ValueType* type, Bytecodes::Code code); void logic_op(ValueType* type, Bytecodes::Code code); @@ -267,12 +256,8 @@ class GraphBuilder VALUE_OBJ_CLASS_SPEC { Instruction* append_split(StateSplit* instr); // other helpers - static bool is_async(Bytecodes::Code code) { - assert(0 <= code && code < Bytecodes::number_of_java_codes, "illegal bytecode"); - return _is_async[code]; - } BlockBegin* block_at(int bci) { return scope_data()->block_at(bci); } - XHandlers* handle_exception(int bci); + XHandlers* handle_exception(Instruction* instruction); void connect_to_end(BlockBegin* beg); void null_check(Value value); void eliminate_redundant_phis(BlockBegin* start); @@ -283,7 +268,28 @@ class GraphBuilder VALUE_OBJ_CLASS_SPEC { void kill_all(); - ValueStack* lock_stack(); + // use of state copy routines (try to minimize unnecessary state + // object allocations): + + // - if the instruction unconditionally needs a full copy of the + // state (for patching for example), then use copy_state_before* + + // - if the instruction needs a full copy of the state only for + // handler generation (Instruction::needs_exception_state() returns + // false) then use copy_state_exhandling* + + // - if the instruction needs either a full copy of the state for + // handler generation and a least a minimal copy of the state (as + // returned by Instruction::exception_state()) for debug info + // generation (that is when Instruction::needs_exception_state() + // returns true) then use copy_state_for_exception* + + ValueStack* copy_state_before_with_bci(int bci); + ValueStack* copy_state_before(); + ValueStack* copy_state_exhandling_with_bci(int bci); + ValueStack* copy_state_exhandling(); + ValueStack* copy_state_for_exception_with_bci(int bci); + ValueStack* copy_state_for_exception(); // // Inlining support @@ -292,9 +298,7 @@ class GraphBuilder VALUE_OBJ_CLASS_SPEC { // accessors bool parsing_jsr() const { return scope_data()->parsing_jsr(); } BlockBegin* continuation() const { return scope_data()->continuation(); } - ValueStack* continuation_state() const { return scope_data()->continuation_state(); } BlockBegin* jsr_continuation() const { return scope_data()->jsr_continuation(); } - int caller_stack_size() const { return scope_data()->caller_stack_size(); } void set_continuation(BlockBegin* continuation) { scope_data()->set_continuation(continuation); } void set_inline_cleanup_info(BlockBegin* block, Instruction* return_prev, @@ -343,7 +347,7 @@ class GraphBuilder VALUE_OBJ_CLASS_SPEC { NOT_PRODUCT(void print_inline_result(ciMethod* callee, bool res);) void profile_call(Value recv, ciKlass* predicted_holder); - void profile_invocation(ciMethod* inlinee, ValueStack* state, int bci); + void profile_invocation(ciMethod* inlinee, ValueStack* state); // Shortcuts to profiling control. bool is_profiling() { return _compilation->is_profiling(); } diff --git a/hotspot/src/share/vm/c1/c1_IR.cpp b/hotspot/src/share/vm/c1/c1_IR.cpp index cb5e2098ece..d916f04ffc6 100644 --- a/hotspot/src/share/vm/c1/c1_IR.cpp +++ b/hotspot/src/share/vm/c1/c1_IR.cpp @@ -116,24 +116,6 @@ bool XHandler::equals(XHandler* other) const { // Implementation of IRScope - -BlockBegin* IRScope::header_block(BlockBegin* entry, BlockBegin::Flag f, ValueStack* state) { - if (entry == NULL) return NULL; - assert(entry->is_set(f), "entry/flag mismatch"); - // create header block - BlockBegin* h = new BlockBegin(entry->bci()); - BlockEnd* g = new Goto(entry, false); - h->set_next(g, entry->bci()); - h->set_end(g); - h->set(f); - // setup header block end state - ValueStack* s = state->copy(); // can use copy since stack is empty (=> no phis) - assert(s->stack_is_empty(), "must have empty stack at entry point"); - g->set_state(s); - return h; -} - - BlockBegin* IRScope::build_graph(Compilation* compilation, int osr_bci) { GraphBuilder gm(compilation, this); NOT_PRODUCT(if (PrintValueNumbering && Verbose) gm.print_stats()); @@ -145,12 +127,9 @@ BlockBegin* IRScope::build_graph(Compilation* compilation, int osr_bci) { IRScope::IRScope(Compilation* compilation, IRScope* caller, int caller_bci, ciMethod* method, int osr_bci, bool create_graph) : _callees(2) , _compilation(compilation) -, _lock_stack_size(-1) , _requires_phi_function(method->max_locals()) { _caller = caller; - _caller_bci = caller == NULL ? -1 : caller_bci; - _caller_state = NULL; // Must be set later if needed _level = caller == NULL ? 0 : caller->level() + 1; _method = method; _xhandlers = new XHandlers(method); @@ -182,32 +161,6 @@ int IRScope::max_stack() const { } -void IRScope::compute_lock_stack_size() { - if (!InlineMethodsWithExceptionHandlers) { - _lock_stack_size = 0; - return; - } - - // Figure out whether we have to preserve expression stack elements - // for parent scopes, and if so, how many - IRScope* cur_scope = this; - while (cur_scope != NULL && !cur_scope->xhandlers()->has_handlers()) { - cur_scope = cur_scope->caller(); - } - _lock_stack_size = (cur_scope == NULL ? 0 : - (cur_scope->caller_state() == NULL ? 0 : - cur_scope->caller_state()->stack_size())); -} - -int IRScope::top_scope_bci() const { - assert(!is_top_scope(), "no correct answer for top scope possible"); - const IRScope* scope = this; - while (!scope->caller()->is_top_scope()) { - scope = scope->caller(); - } - return scope->caller_bci(); -} - bool IRScopeDebugInfo::should_reexecute() { ciMethod* cur_method = scope()->method(); int cur_bci = bci(); @@ -222,37 +175,24 @@ bool IRScopeDebugInfo::should_reexecute() { // Implementation of CodeEmitInfo // Stack must be NON-null -CodeEmitInfo::CodeEmitInfo(int bci, ValueStack* stack, XHandlers* exception_handlers) +CodeEmitInfo::CodeEmitInfo(ValueStack* stack, XHandlers* exception_handlers) : _scope(stack->scope()) - , _bci(bci) , _scope_debug_info(NULL) , _oop_map(NULL) , _stack(stack) , _exception_handlers(exception_handlers) - , _next(NULL) - , _id(-1) , _is_method_handle_invoke(false) { assert(_stack != NULL, "must be non null"); - assert(_bci == SynchronizationEntryBCI || Bytecodes::is_defined(scope()->method()->java_code_at_bci(_bci)), "make sure bci points at a real bytecode"); } -CodeEmitInfo::CodeEmitInfo(CodeEmitInfo* info, bool lock_stack_only) +CodeEmitInfo::CodeEmitInfo(CodeEmitInfo* info, ValueStack* stack) : _scope(info->_scope) , _exception_handlers(NULL) - , _bci(info->_bci) , _scope_debug_info(NULL) , _oop_map(NULL) + , _stack(stack == NULL ? info->_stack : stack) , _is_method_handle_invoke(info->_is_method_handle_invoke) { - if (lock_stack_only) { - if (info->_stack != NULL) { - _stack = info->_stack->copy_locks(); - } else { - _stack = NULL; - } - } else { - _stack = info->_stack; - } // deep copy of exception handlers if (info->_exception_handlers != NULL) { @@ -273,8 +213,6 @@ void CodeEmitInfo::add_register_oop(LIR_Opr opr) { assert(_oop_map != NULL, "oop map must already exist"); assert(opr->is_single_cpu(), "should not call otherwise"); - int frame_size = frame_map()->framesize(); - int arg_count = frame_map()->oop_map_arg_count(); VMReg name = frame_map()->regname(opr); _oop_map->set_oop(name); } @@ -383,8 +321,7 @@ class UseCountComputer: public ValueVisitor, BlockClosure { void visit(Value* n) { // Local instructions and Phis for expression stack values at the // start of basic blocks are not added to the instruction list - if ((*n)->bci() == -99 && (*n)->as_Local() == NULL && - (*n)->as_Phi() == NULL) { + if (!(*n)->is_linked()&& (*n)->can_be_linked()) { assert(false, "a node was not appended to the graph"); Compilation::current()->bailout("a node was not appended to the graph"); } @@ -1338,7 +1275,7 @@ void SubstitutionResolver::block_do(BlockBegin* block) { // need to remove this instruction from the instruction stream if (n->subst() != n) { assert(last != NULL, "must have last"); - last->set_next(n->next(), n->next()->bci()); + last->set_next(n->next()); } else { last = n; } diff --git a/hotspot/src/share/vm/c1/c1_IR.hpp b/hotspot/src/share/vm/c1/c1_IR.hpp index 05ef1789f85..35204c21f8e 100644 --- a/hotspot/src/share/vm/c1/c1_IR.hpp +++ b/hotspot/src/share/vm/c1/c1_IR.hpp @@ -132,8 +132,6 @@ class IRScope: public CompilationResourceObj { // hierarchy Compilation* _compilation; // the current compilation IRScope* _caller; // the caller scope, or NULL - int _caller_bci; // the caller bci of the corresponding (inlined) invoke, or < 0 - ValueStack* _caller_state; // the caller state, or NULL int _level; // the inlining level ciMethod* _method; // the corresponding method IRScopeList _callees; // the inlined method scopes @@ -144,15 +142,9 @@ class IRScope: public CompilationResourceObj { bool _monitor_pairing_ok; // the monitor pairing info BlockBegin* _start; // the start block, successsors are method entries - // lock stack management - int _lock_stack_size; // number of expression stack elements which, if present, - // must be spilled to the stack because of exception - // handling inside inlined methods - BitMap _requires_phi_function; // bit is set if phi functions at loop headers are necessary for a local variable // helper functions - BlockBegin* header_block(BlockBegin* entry, BlockBegin::Flag f, ValueStack* state); BlockBegin* build_graph(Compilation* compilation, int osr_bci); public: @@ -162,33 +154,16 @@ class IRScope: public CompilationResourceObj { // accessors Compilation* compilation() const { return _compilation; } IRScope* caller() const { return _caller; } - int caller_bci() const { return _caller_bci; } - ValueStack* caller_state() const { return _caller_state; } int level() const { return _level; } ciMethod* method() const { return _method; } int max_stack() const; // NOTE: expensive - int lock_stack_size() const { - assert(_lock_stack_size != -1, "uninitialized"); - return _lock_stack_size; - } BitMap& requires_phi_function() { return _requires_phi_function; } - // mutators - // Needed because caller state is not ready at time of IRScope construction - void set_caller_state(ValueStack* state) { _caller_state = state; } - // Needed because caller state changes after IRScope construction. - // Computes number of expression stack elements whose state must be - // preserved in the case of an exception; these may be seen by - // caller scopes. Zero when inlining of methods containing exception - // handlers is disabled, otherwise a conservative approximation. - void compute_lock_stack_size(); - // hierarchy bool is_top_scope() const { return _caller == NULL; } void add_callee(IRScope* callee) { _callees.append(callee); } int number_of_callees() const { return _callees.length(); } IRScope* callee_no(int i) const { return _callees.at(i); } - int top_scope_bci() const; // accessors, graph bool is_valid() const { return start() != NULL; } @@ -266,9 +241,6 @@ class CodeEmitInfo: public CompilationResourceObj { XHandlers* _exception_handlers; OopMap* _oop_map; ValueStack* _stack; // used by deoptimization (contains also monitors - int _bci; - CodeEmitInfo* _next; - int _id; bool _is_method_handle_invoke; // true if the associated call site is a MethodHandle call site. FrameMap* frame_map() const { return scope()->compilation()->frame_map(); } @@ -277,23 +249,10 @@ class CodeEmitInfo: public CompilationResourceObj { public: // use scope from ValueStack - CodeEmitInfo(int bci, ValueStack* stack, XHandlers* exception_handlers); - - // used by natives - CodeEmitInfo(IRScope* scope, int bci) - : _scope(scope) - , _bci(bci) - , _oop_map(NULL) - , _scope_debug_info(NULL) - , _stack(NULL) - , _exception_handlers(NULL) - , _next(NULL) - , _id(-1) - , _is_method_handle_invoke(false) { - } + CodeEmitInfo(ValueStack* stack, XHandlers* exception_handlers); // make a copy - CodeEmitInfo(CodeEmitInfo* info, bool lock_stack_only = false); + CodeEmitInfo(CodeEmitInfo* info, ValueStack* stack = NULL); // accessors OopMap* oop_map() { return _oop_map; } @@ -301,17 +260,10 @@ class CodeEmitInfo: public CompilationResourceObj { IRScope* scope() const { return _scope; } XHandlers* exception_handlers() const { return _exception_handlers; } ValueStack* stack() const { return _stack; } - int bci() const { return _bci; } void add_register_oop(LIR_Opr opr); void record_debug_info(DebugInformationRecorder* recorder, int pc_offset); - CodeEmitInfo* next() const { return _next; } - void set_next(CodeEmitInfo* next) { _next = next; } - - int id() const { return _id; } - void set_id(int id) { _id = id; } - bool is_method_handle_invoke() const { return _is_method_handle_invoke; } void set_is_method_handle_invoke(bool x) { _is_method_handle_invoke = x; } }; diff --git a/hotspot/src/share/vm/c1/c1_Instruction.cpp b/hotspot/src/share/vm/c1/c1_Instruction.cpp index e0728b2f304..14c834d1f42 100644 --- a/hotspot/src/share/vm/c1/c1_Instruction.cpp +++ b/hotspot/src/share/vm/c1/c1_Instruction.cpp @@ -29,13 +29,6 @@ // Implementation of Instruction -#ifdef ASSERT -void Instruction::create_hi_word() { - assert(type()->is_double_word() && _hi_word == NULL, "only double word has high word"); - _hi_word = new HiWord(this); -} -#endif - Instruction::Condition Instruction::mirror(Condition cond) { switch (cond) { case eql: return eql; @@ -63,6 +56,15 @@ Instruction::Condition Instruction::negate(Condition cond) { return eql; } +void Instruction::update_exception_state(ValueStack* state) { + if (state != NULL && (state->kind() == ValueStack::EmptyExceptionState || state->kind() == ValueStack::ExceptionState)) { + assert(state->kind() == ValueStack::EmptyExceptionState || Compilation::current()->env()->jvmti_can_access_local_variables(), "unexpected state kind"); + _exception_state = state; + } else { + _exception_state = NULL; + } +} + Instruction* Instruction::prev(BlockBegin* block) { Instruction* p = NULL; @@ -75,7 +77,24 @@ Instruction* Instruction::prev(BlockBegin* block) { } +void Instruction::state_values_do(ValueVisitor* f) { + if (state_before() != NULL) { + state_before()->values_do(f); + } + if (exception_state() != NULL){ + exception_state()->values_do(f); + } +} + + #ifndef PRODUCT +void Instruction::check_state(ValueStack* state) { + if (state != NULL) { + state->verify(); + } +} + + void Instruction::print() { InstructionPrinter ip; print(ip); @@ -190,35 +209,6 @@ ciType* CheckCast::exact_type() const { return NULL; } - -void ArithmeticOp::other_values_do(ValueVisitor* f) { - if (lock_stack() != NULL) lock_stack()->values_do(f); -} - -void NullCheck::other_values_do(ValueVisitor* f) { - lock_stack()->values_do(f); -} - -void AccessArray::other_values_do(ValueVisitor* f) { - if (lock_stack() != NULL) lock_stack()->values_do(f); -} - - -// Implementation of AccessField - -void AccessField::other_values_do(ValueVisitor* f) { - if (state_before() != NULL) state_before()->values_do(f); - if (lock_stack() != NULL) lock_stack()->values_do(f); -} - - -// Implementation of StoreIndexed - -IRScope* StoreIndexed::scope() const { - return lock_stack()->scope(); -} - - // Implementation of ArithmeticOp bool ArithmeticOp::is_commutative() const { @@ -266,13 +256,6 @@ bool LogicOp::is_commutative() const { } -// Implementation of CompareOp - -void CompareOp::other_values_do(ValueVisitor* f) { - if (state_before() != NULL) state_before()->values_do(f); -} - - // Implementation of IfOp bool IfOp::is_commutative() const { @@ -301,6 +284,7 @@ IRScope* StateSplit::scope() const { void StateSplit::state_values_do(ValueVisitor* f) { + Instruction::state_values_do(f); if (state() != NULL) state()->values_do(f); } @@ -316,30 +300,17 @@ void BlockBegin::state_values_do(ValueVisitor* f) { } -void MonitorEnter::state_values_do(ValueVisitor* f) { - StateSplit::state_values_do(f); - _lock_stack_before->values_do(f); -} - - -void Intrinsic::state_values_do(ValueVisitor* f) { - StateSplit::state_values_do(f); - if (lock_stack() != NULL) lock_stack()->values_do(f); -} - - // Implementation of Invoke Invoke::Invoke(Bytecodes::Code code, ValueType* result_type, Value recv, Values* args, int vtable_index, ciMethod* target, ValueStack* state_before) - : StateSplit(result_type) + : StateSplit(result_type, state_before) , _code(code) , _recv(recv) , _args(args) , _vtable_index(vtable_index) , _target(target) - , _state_before(state_before) { set_flag(TargetIsLoadedFlag, target->is_loaded()); set_flag(TargetIsFinalFlag, target_is_loaded() && target->is_final_method()); @@ -376,7 +347,7 @@ void Invoke::state_values_do(ValueVisitor* f) { // Implementation of Contant intx Constant::hash() const { - if (_state == NULL) { + if (state_before() == NULL) { switch (type()->tag()) { case intTag: return HASH2(name(), type()->as_IntConstant()->value()); @@ -499,25 +470,6 @@ BlockBegin* Constant::compare(Instruction::Condition cond, Value right, } -void Constant::other_values_do(ValueVisitor* f) { - if (state() != NULL) state()->values_do(f); -} - - -// Implementation of NewArray - -void NewArray::other_values_do(ValueVisitor* f) { - if (state_before() != NULL) state_before()->values_do(f); -} - - -// Implementation of TypeCheck - -void TypeCheck::other_values_do(ValueVisitor* f) { - if (state_before() != NULL) state_before()->values_do(f); -} - - // Implementation of BlockBegin void BlockBegin::set_end(BlockEnd* end) { @@ -604,23 +556,14 @@ void BlockBegin::substitute_sux(BlockBegin* old_sux, BlockBegin* new_sux) { // of the inserted block, without recomputing the values of the other blocks // in the CFG. Therefore the value of "depth_first_number" in BlockBegin becomes meaningless. BlockBegin* BlockBegin::insert_block_between(BlockBegin* sux) { - // Try to make the bci close to a block with a single pred or sux, - // since this make the block layout algorithm work better. - int bci = -1; - if (sux->number_of_preds() == 1) { - bci = sux->bci(); - } else { - bci = end()->bci(); - } - - BlockBegin* new_sux = new BlockBegin(bci); + BlockBegin* new_sux = new BlockBegin(-99); // mark this block (special treatment when block order is computed) new_sux->set(critical_edge_split_flag); // This goto is not a safepoint. Goto* e = new Goto(sux, false); - new_sux->set_next(e, bci); + new_sux->set_next(e, end()->state()->bci()); new_sux->set_end(e); // setup states ValueStack* s = end()->state(); @@ -763,7 +706,7 @@ bool BlockBegin::try_merge(ValueStack* new_state) { } // copy state because it is altered - new_state = new_state->copy(); + new_state = new_state->copy(ValueStack::BlockBeginState, bci()); // Use method liveness to invalidate dead locals MethodLivenessResult liveness = new_state->scope()->method()->liveness_at_bci(bci()); @@ -800,19 +743,9 @@ bool BlockBegin::try_merge(ValueStack* new_state) { // initialize state of block set_state(new_state); - } else if (existing_state->is_same_across_scopes(new_state)) { + } else if (existing_state->is_same(new_state)) { TRACE_PHI(tty->print_cr("exisiting state found")); - // Inlining may cause the local state not to match up, so walk up - // the new state until we get to the same scope as the - // existing and then start processing from there. - while (existing_state->scope() != new_state->scope()) { - new_state = new_state->caller_state(); - assert(new_state != NULL, "could not match up scopes"); - - assert(false, "check if this is necessary"); - } - assert(existing_state->scope() == new_state->scope(), "not matching"); assert(existing_state->locals_size() == new_state->locals_size(), "not matching"); assert(existing_state->stack_size() == new_state->stack_size(), "not matching"); @@ -969,11 +902,6 @@ void BlockEnd::substitute_sux(BlockBegin* old_sux, BlockBegin* new_sux) { } -void BlockEnd::other_values_do(ValueVisitor* f) { - if (state_before() != NULL) state_before()->values_do(f); -} - - // Implementation of Phi // Normal phi functions take their operands from the last instruction of the @@ -1006,11 +934,6 @@ int Phi::operand_count() const { } -// Implementation of Throw - -void Throw::state_values_do(ValueVisitor* f) { - BlockEnd::state_values_do(f); -} void ProfileInvoke::state_values_do(ValueVisitor* f) { if (state() != NULL) state()->values_do(f); diff --git a/hotspot/src/share/vm/c1/c1_Instruction.hpp b/hotspot/src/share/vm/c1/c1_Instruction.hpp index 52b2f84a76f..fa684e4b1a5 100644 --- a/hotspot/src/share/vm/c1/c1_Instruction.hpp +++ b/hotspot/src/share/vm/c1/c1_Instruction.hpp @@ -38,7 +38,6 @@ typedef LIR_OprDesc* LIR_Opr; // serve factoring. class Instruction; -class HiWord; class Phi; class Local; class Constant; @@ -149,7 +148,6 @@ class BlockList: public _BlockList { class InstructionVisitor: public StackObj { public: - void do_HiWord (HiWord* x) { ShouldNotReachHere(); } virtual void do_Phi (Phi* x) = 0; virtual void do_Local (Local* x) = 0; virtual void do_Constant (Constant* x) = 0; @@ -272,7 +270,9 @@ class InstructionVisitor: public StackObj { class Instruction: public CompilationResourceObj { private: int _id; // the unique instruction id - int _bci; // the instruction bci +#ifndef PRODUCT + int _printable_bci; // the bci of the instruction for printing +#endif int _use_count; // the number of instructions refering to this value (w/o prev/next); only roots can have use count = 0 or > 1 int _pin_state; // set of PinReason describing the reason for pinning ValueType* _type; // the instruction value type @@ -281,17 +281,18 @@ class Instruction: public CompilationResourceObj { LIR_Opr _operand; // LIR specific information unsigned int _flags; // Flag bits + ValueStack* _state_before; // Copy of state with input operands still on stack (or NULL) + ValueStack* _exception_state; // Copy of state for exception handling XHandlers* _exception_handlers; // Flat list of exception handlers covering this instruction -#ifdef ASSERT - HiWord* _hi_word; -#endif - friend class UseCountComputer; friend class BlockBegin; + void update_exception_state(ValueStack* state); + + bool has_printable_bci() const { return NOT_PRODUCT(_printable_bci != -99) PRODUCT_ONLY(false); } + protected: - void set_bci(int bci) { assert(bci == SynchronizationEntryBCI || bci >= 0, "illegal bci"); _bci = bci; } void set_type(ValueType* type) { assert(type != NULL, "type must exist"); _type = type; @@ -325,6 +326,7 @@ class Instruction: public CompilationResourceObj { NeedsPatchingFlag, ThrowIncompatibleClassChangeErrorFlag, ProfileMDOFlag, + IsLinkedInBlockFlag, InstructionLastFlag }; @@ -356,31 +358,31 @@ class Instruction: public CompilationResourceObj { } // creation - Instruction(ValueType* type, bool type_is_constant = false, bool create_hi = true) - : _bci(-99) - , _use_count(0) + Instruction(ValueType* type, ValueStack* state_before = NULL, bool type_is_constant = false) + : _use_count(0) +#ifndef PRODUCT + , _printable_bci(-99) +#endif , _pin_state(0) , _type(type) , _next(NULL) , _subst(NULL) , _flags(0) , _operand(LIR_OprFact::illegalOpr) + , _state_before(state_before) , _exception_handlers(NULL) -#ifdef ASSERT - , _hi_word(NULL) -#endif { + check_state(state_before); assert(type != NULL && (!type->is_constant() || type_is_constant), "type must exist"); -#ifdef ASSERT - if (create_hi && type->is_double_word()) { - create_hi_word(); - } -#endif + update_exception_state(_state_before); } // accessors int id() const { return _id; } - int bci() const { return _bci; } +#ifndef PRODUCT + int printable_bci() const { assert(has_printable_bci(), "_printable_bci should have been set"); return _printable_bci; } + void set_printable_bci(int bci) { NOT_PRODUCT(_printable_bci = bci;) } +#endif int use_count() const { return _use_count; } int pin_state() const { return _pin_state; } bool is_pinned() const { return _pin_state != 0 || PinAllInstructions; } @@ -393,9 +395,13 @@ class Instruction: public CompilationResourceObj { void set_needs_null_check(bool f) { set_flag(NeedsNullCheckFlag, f); } bool needs_null_check() const { return check_flag(NeedsNullCheckFlag); } + bool is_linked() const { return check_flag(IsLinkedInBlockFlag); } + bool can_be_linked() { return as_Local() == NULL && as_Phi() == NULL; } bool has_uses() const { return use_count() > 0; } - bool is_root() const { return is_pinned() || use_count() > 1; } + ValueStack* state_before() const { return _state_before; } + ValueStack* exception_state() const { return _exception_state; } + virtual bool needs_exception_state() const { return true; } XHandlers* exception_handlers() const { return _exception_handlers; } // manipulation @@ -403,19 +409,25 @@ class Instruction: public CompilationResourceObj { void pin() { _pin_state |= PinUnknown; } // DANGEROUS: only used by EliminateStores void unpin(PinReason reason) { assert((reason & PinUnknown) == 0, "can't unpin unknown state"); _pin_state &= ~reason; } - virtual void set_lock_stack(ValueStack* l) { /* do nothing*/ } - virtual ValueStack* lock_stack() const { return NULL; } - Instruction* set_next(Instruction* next, int bci) { - if (next != NULL) { - assert(as_BlockEnd() == NULL, "BlockEnd instructions must have no next"); - assert(next->as_Phi() == NULL && next->as_Local() == NULL, "shouldn't link these instructions into list"); - next->set_bci(bci); - } + Instruction* set_next(Instruction* next) { + assert(next->has_printable_bci(), "_printable_bci should have been set"); + assert(next != NULL, "must not be NULL"); + assert(as_BlockEnd() == NULL, "BlockEnd instructions must have no next"); + assert(next->can_be_linked(), "shouldn't link these instructions into list"); + + next->set_flag(Instruction::IsLinkedInBlockFlag, true); _next = next; return next; } + Instruction* set_next(Instruction* next, int bci) { +#ifndef PRODUCT + next->set_printable_bci(bci); +#endif + return set_next(next); + } + void set_subst(Instruction* subst) { assert(subst == NULL || type()->base() == subst->type()->base() || @@ -423,14 +435,7 @@ class Instruction: public CompilationResourceObj { _subst = subst; } void set_exception_handlers(XHandlers *xhandlers) { _exception_handlers = xhandlers; } - -#ifdef ASSERT - // HiWord is used for debugging and is allocated early to avoid - // allocation at inconvenient points - HiWord* hi_word() { return _hi_word; } - void create_hi_word(); -#endif - + void set_exception_state(ValueStack* s) { check_state(s); _exception_state = s; } // machine-specifics void set_operand(LIR_Opr operand) { assert(operand != LIR_OprFact::illegalOpr, "operand must exist"); _operand = operand; } @@ -438,7 +443,6 @@ class Instruction: public CompilationResourceObj { // generic virtual Instruction* as_Instruction() { return this; } // to satisfy HASHING1 macro - virtual HiWord* as_HiWord() { return NULL; } virtual Phi* as_Phi() { return NULL; } virtual Local* as_Local() { return NULL; } virtual Constant* as_Constant() { return NULL; } @@ -493,7 +497,7 @@ class Instruction: public CompilationResourceObj { virtual bool can_trap() const { return false; } virtual void input_values_do(ValueVisitor* f) = 0; - virtual void state_values_do(ValueVisitor* f) { /* usually no state - override on demand */ } + virtual void state_values_do(ValueVisitor* f); virtual void other_values_do(ValueVisitor* f) { /* usually no other - override on demand */ } void values_do(ValueVisitor* f) { input_values_do(f); state_values_do(f); other_values_do(f); } @@ -505,6 +509,7 @@ class Instruction: public CompilationResourceObj { HASHING1(Instruction, false, id()) // hashing disabled by default // debugging + static void check_state(ValueStack* state) PRODUCT_RETURN; void print() PRODUCT_RETURN; void print_line() PRODUCT_RETURN; void print(InstructionPrinter& ip) PRODUCT_RETURN; @@ -541,40 +546,6 @@ class AssertValues: public ValueVisitor { #endif // ASSERT -// A HiWord occupies the 'high word' of a 2-word -// expression stack entry. Hi & lo words must be -// paired on the expression stack (otherwise the -// bytecode sequence is illegal). Note that 'hi' -// refers to the IR expression stack format and -// does *not* imply a machine word ordering. No -// HiWords are used in optimized mode for speed, -// but NULL pointers are used instead. - -LEAF(HiWord, Instruction) - private: - Value _lo_word; - - public: - // creation - HiWord(Value lo_word) - : Instruction(illegalType, false, false), - _lo_word(lo_word) { - // hi-words are also allowed for illegal lo-words - assert(lo_word->type()->is_double_word() || lo_word->type()->is_illegal(), - "HiWord must be used for 2-word values only"); - } - - // accessors - Value lo_word() const { return _lo_word->subst(); } - - // for invalidating of HiWords - void make_illegal() { set_type(illegalType); } - - // generic - virtual void input_values_do(ValueVisitor* f) { ShouldNotReachHere(); } -}; - - // A Phi is a phi function in the sense of SSA form. It stands for // the value of a local variable at the beginning of a join block. // A Phi consists of n operands, one for every incoming branch. @@ -656,31 +627,25 @@ LEAF(Local, Instruction) LEAF(Constant, Instruction) - ValueStack* _state; - public: // creation Constant(ValueType* type): - Instruction(type, true) - , _state(NULL) { + Instruction(type, NULL, true) + { assert(type->is_constant(), "must be a constant"); } - Constant(ValueType* type, ValueStack* state): - Instruction(type, true) - , _state(state) { - assert(state != NULL, "only used for constants which need patching"); + Constant(ValueType* type, ValueStack* state_before): + Instruction(type, state_before, true) + { + assert(state_before != NULL, "only used for constants which need patching"); assert(type->is_constant(), "must be a constant"); // since it's patching it needs to be pinned pin(); } - ValueStack* state() const { return _state; } - - // generic - virtual bool can_trap() const { return state() != NULL; } + virtual bool can_trap() const { return state_before() != NULL; } virtual void input_values_do(ValueVisitor* f) { /* no values */ } - virtual void other_values_do(ValueVisitor* f); virtual intx hash() const; virtual bool is_equal(Value v) const; @@ -695,20 +660,16 @@ BASE(AccessField, Instruction) Value _obj; int _offset; ciField* _field; - ValueStack* _state_before; // state is set only for unloaded or uninitialized fields - ValueStack* _lock_stack; // contains lock and scope information NullCheck* _explicit_null_check; // For explicit null check elimination public: // creation - AccessField(Value obj, int offset, ciField* field, bool is_static, ValueStack* lock_stack, + AccessField(Value obj, int offset, ciField* field, bool is_static, ValueStack* state_before, bool is_loaded, bool is_initialized) - : Instruction(as_ValueType(field->type()->basic_type())) + : Instruction(as_ValueType(field->type()->basic_type()), state_before) , _obj(obj) , _offset(offset) , _field(field) - , _lock_stack(lock_stack) - , _state_before(state_before) , _explicit_null_check(NULL) { set_needs_null_check(!is_static); @@ -734,13 +695,11 @@ BASE(AccessField, Instruction) bool is_static() const { return check_flag(IsStaticFlag); } bool is_loaded() const { return check_flag(IsLoadedFlag); } bool is_initialized() const { return check_flag(IsInitializedFlag); } - ValueStack* state_before() const { return _state_before; } - ValueStack* lock_stack() const { return _lock_stack; } NullCheck* explicit_null_check() const { return _explicit_null_check; } bool needs_patching() const { return check_flag(NeedsPatchingFlag); } // manipulation - void set_lock_stack(ValueStack* l) { _lock_stack = l; } + // Under certain circumstances, if a previous NullCheck instruction // proved the target object non-null, we can eliminate the explicit // null check and do an implicit one, simply specifying the debug @@ -751,16 +710,15 @@ BASE(AccessField, Instruction) // generic virtual bool can_trap() const { return needs_null_check() || needs_patching(); } virtual void input_values_do(ValueVisitor* f) { f->visit(&_obj); } - virtual void other_values_do(ValueVisitor* f); }; LEAF(LoadField, AccessField) public: // creation - LoadField(Value obj, int offset, ciField* field, bool is_static, ValueStack* lock_stack, + LoadField(Value obj, int offset, ciField* field, bool is_static, ValueStack* state_before, bool is_loaded, bool is_initialized) - : AccessField(obj, offset, field, is_static, lock_stack, state_before, is_loaded, is_initialized) + : AccessField(obj, offset, field, is_static, state_before, is_loaded, is_initialized) {} ciType* declared_type() const; @@ -777,9 +735,9 @@ LEAF(StoreField, AccessField) public: // creation - StoreField(Value obj, int offset, ciField* field, Value value, bool is_static, ValueStack* lock_stack, + StoreField(Value obj, int offset, ciField* field, Value value, bool is_static, ValueStack* state_before, bool is_loaded, bool is_initialized) - : AccessField(obj, offset, field, is_static, lock_stack, state_before, is_loaded, is_initialized) + : AccessField(obj, offset, field, is_static, state_before, is_loaded, is_initialized) , _value(value) { set_flag(NeedsWriteBarrierFlag, as_ValueType(field_type())->is_object()); @@ -799,29 +757,23 @@ LEAF(StoreField, AccessField) BASE(AccessArray, Instruction) private: Value _array; - ValueStack* _lock_stack; public: // creation - AccessArray(ValueType* type, Value array, ValueStack* lock_stack) - : Instruction(type) + AccessArray(ValueType* type, Value array, ValueStack* state_before) + : Instruction(type, state_before) , _array(array) - , _lock_stack(lock_stack) { + { set_needs_null_check(true); ASSERT_VALUES pin(); // instruction with side effect (null exception or range check throwing) } Value array() const { return _array; } - ValueStack* lock_stack() const { return _lock_stack; } - - // setters - void set_lock_stack(ValueStack* l) { _lock_stack = l; } // generic virtual bool can_trap() const { return needs_null_check(); } virtual void input_values_do(ValueVisitor* f) { f->visit(&_array); } - virtual void other_values_do(ValueVisitor* f); }; @@ -831,8 +783,8 @@ LEAF(ArrayLength, AccessArray) public: // creation - ArrayLength(Value array, ValueStack* lock_stack) - : AccessArray(intType, array, lock_stack) + ArrayLength(Value array, ValueStack* state_before) + : AccessArray(intType, array, state_before) , _explicit_null_check(NULL) {} // accessors @@ -855,8 +807,8 @@ BASE(AccessIndexed, AccessArray) public: // creation - AccessIndexed(Value array, Value index, Value length, BasicType elt_type, ValueStack* lock_stack) - : AccessArray(as_ValueType(elt_type), array, lock_stack) + AccessIndexed(Value array, Value index, Value length, BasicType elt_type, ValueStack* state_before) + : AccessArray(as_ValueType(elt_type), array, state_before) , _index(index) , _length(length) , _elt_type(elt_type) @@ -883,8 +835,8 @@ LEAF(LoadIndexed, AccessIndexed) public: // creation - LoadIndexed(Value array, Value index, Value length, BasicType elt_type, ValueStack* lock_stack) - : AccessIndexed(array, index, length, elt_type, lock_stack) + LoadIndexed(Value array, Value index, Value length, BasicType elt_type, ValueStack* state_before) + : AccessIndexed(array, index, length, elt_type, state_before) , _explicit_null_check(NULL) {} // accessors @@ -910,8 +862,8 @@ LEAF(StoreIndexed, AccessIndexed) int _profiled_bci; public: // creation - StoreIndexed(Value array, Value index, Value length, BasicType elt_type, Value value, ValueStack* lock_stack) - : AccessIndexed(array, index, length, elt_type, lock_stack) + StoreIndexed(Value array, Value index, Value length, BasicType elt_type, Value value, ValueStack* state_before) + : AccessIndexed(array, index, length, elt_type, state_before) , _value(value), _profiled_method(NULL), _profiled_bci(0) { set_flag(NeedsWriteBarrierFlag, (as_ValueType(elt_type)->is_object())); @@ -922,7 +874,6 @@ LEAF(StoreIndexed, AccessIndexed) // accessors Value value() const { return _value; } - IRScope* scope() const; // the state's scope bool needs_write_barrier() const { return check_flag(NeedsWriteBarrierFlag); } bool needs_store_check() const { return check_flag(NeedsStoreCheckFlag); } // Helpers for methodDataOop profiling @@ -963,7 +914,12 @@ BASE(Op2, Instruction) public: // creation - Op2(ValueType* type, Bytecodes::Code op, Value x, Value y) : Instruction(type), _op(op), _x(x), _y(y) { + Op2(ValueType* type, Bytecodes::Code op, Value x, Value y, ValueStack* state_before = NULL) + : Instruction(type, state_before) + , _op(op) + , _x(x) + , _y(y) + { ASSERT_VALUES } @@ -985,28 +941,21 @@ BASE(Op2, Instruction) LEAF(ArithmeticOp, Op2) - private: - ValueStack* _lock_stack; // used only for division operations public: // creation - ArithmeticOp(Bytecodes::Code op, Value x, Value y, bool is_strictfp, ValueStack* lock_stack) - : Op2(x->type()->meet(y->type()), op, x, y) - , _lock_stack(lock_stack) { + ArithmeticOp(Bytecodes::Code op, Value x, Value y, bool is_strictfp, ValueStack* state_before) + : Op2(x->type()->meet(y->type()), op, x, y, state_before) + { set_flag(IsStrictfpFlag, is_strictfp); if (can_trap()) pin(); } // accessors - ValueStack* lock_stack() const { return _lock_stack; } bool is_strictfp() const { return check_flag(IsStrictfpFlag); } - // setters - void set_lock_stack(ValueStack* l) { _lock_stack = l; } - // generic virtual bool is_commutative() const; virtual bool can_trap() const; - virtual void other_values_do(ValueVisitor* f); HASHING3(Op2, true, op(), x()->subst(), y()->subst()) }; @@ -1033,21 +982,14 @@ LEAF(LogicOp, Op2) LEAF(CompareOp, Op2) - private: - ValueStack* _state_before; // for deoptimization, when canonicalizing public: // creation CompareOp(Bytecodes::Code op, Value x, Value y, ValueStack* state_before) - : Op2(intType, op, x, y) - , _state_before(state_before) + : Op2(intType, op, x, y, state_before) {} - // accessors - ValueStack* state_before() const { return _state_before; } - // generic HASHING3(Op2, true, op(), x()->subst(), y()->subst()) - virtual void other_values_do(ValueVisitor* f); }; @@ -1103,11 +1045,13 @@ LEAF(Convert, Instruction) LEAF(NullCheck, Instruction) private: Value _obj; - ValueStack* _lock_stack; public: // creation - NullCheck(Value obj, ValueStack* lock_stack) : Instruction(obj->type()->base()), _obj(obj), _lock_stack(lock_stack) { + NullCheck(Value obj, ValueStack* state_before) + : Instruction(obj->type()->base(), state_before) + , _obj(obj) + { ASSERT_VALUES set_can_trap(true); assert(_obj->type()->is_object(), "null check must be applied to objects only"); @@ -1116,16 +1060,13 @@ LEAF(NullCheck, Instruction) // accessors Value obj() const { return _obj; } - ValueStack* lock_stack() const { return _lock_stack; } // setters - void set_lock_stack(ValueStack* l) { _lock_stack = l; } void set_can_trap(bool can_trap) { set_flag(CanTrapFlag, can_trap); } // generic virtual bool can_trap() const { return check_flag(CanTrapFlag); /* null-check elimination sets to false */ } virtual void input_values_do(ValueVisitor* f) { f->visit(&_obj); } - virtual void other_values_do(ValueVisitor* f); HASHING1(NullCheck, true, obj()->subst()) }; @@ -1139,7 +1080,10 @@ BASE(StateSplit, Instruction) public: // creation - StateSplit(ValueType* type) : Instruction(type), _state(NULL) { + StateSplit(ValueType* type, ValueStack* state_before = NULL) + : Instruction(type, state_before) + , _state(NULL) + { pin(PinStateSplitConstructor); } @@ -1148,7 +1092,7 @@ BASE(StateSplit, Instruction) IRScope* scope() const; // the state's scope // manipulation - void set_state(ValueStack* state) { _state = state; } + void set_state(ValueStack* state) { assert(_state == NULL, "overwriting existing state"); check_state(state); _state = state; } // generic virtual void input_values_do(ValueVisitor* f) { /* no values */ } @@ -1164,7 +1108,6 @@ LEAF(Invoke, StateSplit) BasicTypeList* _signature; int _vtable_index; ciMethod* _target; - ValueStack* _state_before; // Required for deoptimization. public: // creation @@ -1180,7 +1123,6 @@ LEAF(Invoke, StateSplit) int vtable_index() const { return _vtable_index; } BasicTypeList* signature() const { return _signature; } ciMethod* target() const { return _target; } - ValueStack* state_before() const { return _state_before; } // Returns false if target is not loaded bool target_is_final() const { return check_flag(TargetIsFinalFlag); } @@ -1191,6 +1133,8 @@ LEAF(Invoke, StateSplit) // JSR 292 support bool is_invokedynamic() const { return code() == Bytecodes::_invokedynamic; } + virtual bool needs_exception_state() const { return false; } + // generic virtual bool can_trap() const { return true; } virtual void input_values_do(ValueVisitor* f) { @@ -1208,11 +1152,16 @@ LEAF(NewInstance, StateSplit) public: // creation - NewInstance(ciInstanceKlass* klass) : StateSplit(instanceType), _klass(klass) {} + NewInstance(ciInstanceKlass* klass, ValueStack* state_before) + : StateSplit(instanceType, state_before) + , _klass(klass) + {} // accessors ciInstanceKlass* klass() const { return _klass; } + virtual bool needs_exception_state() const { return false; } + // generic virtual bool can_trap() const { return true; } ciType* exact_type() const; @@ -1222,22 +1171,24 @@ LEAF(NewInstance, StateSplit) BASE(NewArray, StateSplit) private: Value _length; - ValueStack* _state_before; public: // creation - NewArray(Value length, ValueStack* state_before) : StateSplit(objectType), _length(length), _state_before(state_before) { + NewArray(Value length, ValueStack* state_before) + : StateSplit(objectType, state_before) + , _length(length) + { // Do not ASSERT_VALUES since length is NULL for NewMultiArray } // accessors - ValueStack* state_before() const { return _state_before; } Value length() const { return _length; } + virtual bool needs_exception_state() const { return false; } + // generic virtual bool can_trap() const { return true; } virtual void input_values_do(ValueVisitor* f) { StateSplit::input_values_do(f); f->visit(&_length); } - virtual void other_values_do(ValueVisitor* f); }; @@ -1247,7 +1198,10 @@ LEAF(NewTypeArray, NewArray) public: // creation - NewTypeArray(Value length, BasicType elt_type) : NewArray(length, NULL), _elt_type(elt_type) {} + NewTypeArray(Value length, BasicType elt_type, ValueStack* state_before) + : NewArray(length, state_before) + , _elt_type(elt_type) + {} // accessors BasicType elt_type() const { return _elt_type; } @@ -1303,7 +1257,6 @@ BASE(TypeCheck, StateSplit) private: ciKlass* _klass; Value _obj; - ValueStack* _state_before; ciMethod* _profiled_method; int _profiled_bci; @@ -1311,14 +1264,13 @@ BASE(TypeCheck, StateSplit) public: // creation TypeCheck(ciKlass* klass, Value obj, ValueType* type, ValueStack* state_before) - : StateSplit(type), _klass(klass), _obj(obj), _state_before(state_before), + : StateSplit(type, state_before), _klass(klass), _obj(obj), _profiled_method(NULL), _profiled_bci(0) { ASSERT_VALUES set_direct_compare(false); } // accessors - ValueStack* state_before() const { return _state_before; } ciKlass* klass() const { return _klass; } Value obj() const { return _obj; } bool is_loaded() const { return klass() != NULL; } @@ -1330,7 +1282,6 @@ BASE(TypeCheck, StateSplit) // generic virtual bool can_trap() const { return true; } virtual void input_values_do(ValueVisitor* f) { StateSplit::input_values_do(f); f->visit(&_obj); } - virtual void other_values_do(ValueVisitor* f); // Helpers for methodDataOop profiling void set_should_profile(bool value) { set_flag(ProfileMDOFlag, value); } @@ -1364,6 +1315,8 @@ LEAF(InstanceOf, TypeCheck) public: // creation InstanceOf(ciKlass* klass, Value obj, ValueStack* state_before) : TypeCheck(klass, obj, intType, state_before) {} + + virtual bool needs_exception_state() const { return false; } }; @@ -1374,8 +1327,8 @@ BASE(AccessMonitor, StateSplit) public: // creation - AccessMonitor(Value obj, int monitor_no) - : StateSplit(illegalType) + AccessMonitor(Value obj, int monitor_no, ValueStack* state_before = NULL) + : StateSplit(illegalType, state_before) , _obj(obj) , _monitor_no(monitor_no) { @@ -1393,22 +1346,14 @@ BASE(AccessMonitor, StateSplit) LEAF(MonitorEnter, AccessMonitor) - private: - ValueStack* _lock_stack_before; - public: // creation - MonitorEnter(Value obj, int monitor_no, ValueStack* lock_stack_before) - : AccessMonitor(obj, monitor_no) - , _lock_stack_before(lock_stack_before) + MonitorEnter(Value obj, int monitor_no, ValueStack* state_before) + : AccessMonitor(obj, monitor_no, state_before) { ASSERT_VALUES } - // accessors - ValueStack* lock_stack_before() const { return _lock_stack_before; } - virtual void state_values_do(ValueVisitor* f); - // generic virtual bool can_trap() const { return true; } }; @@ -1417,7 +1362,11 @@ LEAF(MonitorEnter, AccessMonitor) LEAF(MonitorExit, AccessMonitor) public: // creation - MonitorExit(Value obj, int monitor_no) : AccessMonitor(obj, monitor_no) {} + MonitorExit(Value obj, int monitor_no) + : AccessMonitor(obj, monitor_no, NULL) + { + ASSERT_VALUES + } }; @@ -1425,7 +1374,6 @@ LEAF(Intrinsic, StateSplit) private: vmIntrinsics::ID _id; Values* _args; - ValueStack* _lock_stack; Value _recv; public: @@ -1440,13 +1388,12 @@ LEAF(Intrinsic, StateSplit) vmIntrinsics::ID id, Values* args, bool has_receiver, - ValueStack* lock_stack, + ValueStack* state_before, bool preserves_state, bool cantrap = true) - : StateSplit(type) + : StateSplit(type, state_before) , _id(id) , _args(args) - , _lock_stack(lock_stack) , _recv(NULL) { assert(args != NULL, "args must exist"); @@ -1468,7 +1415,6 @@ LEAF(Intrinsic, StateSplit) vmIntrinsics::ID id() const { return _id; } int number_of_arguments() const { return _args->length(); } Value argument_at(int i) const { return _args->at(i); } - ValueStack* lock_stack() const { return _lock_stack; } bool has_receiver() const { return (_recv != NULL); } Value receiver() const { assert(has_receiver(), "must have receiver"); return _recv; } @@ -1480,8 +1426,6 @@ LEAF(Intrinsic, StateSplit) StateSplit::input_values_do(f); for (int i = 0; i < _args->length(); i++) f->visit(_args->adr_at(i)); } - virtual void state_values_do(ValueVisitor* f); - }; @@ -1490,6 +1434,7 @@ class LIR_List; LEAF(BlockBegin, StateSplit) private: int _block_id; // the unique block id + int _bci; // start-bci of block int _depth_first_number; // number of this block in a depth-first ordering int _linear_scan_number; // number of this block in linear-scan ordering int _loop_depth; // the loop nesting level of this block @@ -1546,6 +1491,7 @@ LEAF(BlockBegin, StateSplit) // creation BlockBegin(int bci) : StateSplit(illegalType) + , _bci(bci) , _depth_first_number(-1) , _linear_scan_number(-1) , _loop_depth(0) @@ -1570,11 +1516,14 @@ LEAF(BlockBegin, StateSplit) , _total_preds(0) , _stores_to_locals() { - set_bci(bci); +#ifndef PRODUCT + set_printable_bci(bci); +#endif } // accessors int block_id() const { return _block_id; } + int bci() const { return _bci; } BlockList* successors() { return &_successors; } BlockBegin* dominator() const { return _dominator; } int loop_depth() const { return _loop_depth; } @@ -1596,7 +1545,6 @@ LEAF(BlockBegin, StateSplit) BitMap& stores_to_locals() { return _stores_to_locals; } // manipulation - void set_bci(int bci) { Instruction::set_bci(bci); } void set_dominator(BlockBegin* dom) { _dominator = dom; } void set_loop_depth(int d) { _loop_depth = d; } void set_depth_first_number(int dfn) { _depth_first_number = dfn; } @@ -1694,7 +1642,6 @@ BASE(BlockEnd, StateSplit) private: BlockBegin* _begin; BlockList* _sux; - ValueStack* _state_before; protected: BlockList* sux() const { return _sux; } @@ -1710,24 +1657,20 @@ BASE(BlockEnd, StateSplit) public: // creation BlockEnd(ValueType* type, ValueStack* state_before, bool is_safepoint) - : StateSplit(type) + : StateSplit(type, state_before) , _begin(NULL) , _sux(NULL) - , _state_before(state_before) { + { set_flag(IsSafepointFlag, is_safepoint); } // accessors - ValueStack* state_before() const { return _state_before; } bool is_safepoint() const { return check_flag(IsSafepointFlag); } BlockBegin* begin() const { return _begin; } // manipulation void set_begin(BlockBegin* begin); - // generic - virtual void other_values_do(ValueVisitor* f); - // successors int number_of_sux() const { return _sux != NULL ? _sux->length() : 0; } BlockBegin* sux_at(int i) const { return _sux->at(i); } @@ -1919,6 +1862,8 @@ BASE(Switch, BlockEnd) Value tag() const { return _tag; } int length() const { return number_of_sux() - 1; } + virtual bool needs_exception_state() const { return false; } + // generic virtual void input_values_do(ValueVisitor* f) { BlockEnd::input_values_do(f); f->visit(&_tag); } }; @@ -1996,7 +1941,6 @@ LEAF(Throw, BlockEnd) // generic virtual bool can_trap() const { return true; } virtual void input_values_do(ValueVisitor* f) { BlockEnd::input_values_do(f); f->visit(&_exception); } - virtual void state_values_do(ValueVisitor* f); }; @@ -2022,9 +1966,9 @@ LEAF(OsrEntry, Instruction) public: // creation #ifdef _LP64 - OsrEntry() : Instruction(longType, false) { pin(); } + OsrEntry() : Instruction(longType) { pin(); } #else - OsrEntry() : Instruction(intType, false) { pin(); } + OsrEntry() : Instruction(intType) { pin(); } #endif // generic @@ -2036,7 +1980,7 @@ LEAF(OsrEntry, Instruction) LEAF(ExceptionObject, Instruction) public: // creation - ExceptionObject() : Instruction(objectType, false) { + ExceptionObject() : Instruction(objectType) { pin(); } @@ -2091,7 +2035,6 @@ BASE(UnsafeOp, Instruction) // generic virtual void input_values_do(ValueVisitor* f) { } - virtual void other_values_do(ValueVisitor* f) { } }; @@ -2303,13 +2246,11 @@ LEAF(ProfileInvoke, Instruction) private: ciMethod* _inlinee; ValueStack* _state; - int _bci_of_invoke; public: - ProfileInvoke(ciMethod* inlinee, ValueStack* state, int bci) + ProfileInvoke(ciMethod* inlinee, ValueStack* state) : Instruction(voidType) , _inlinee(inlinee) - , _bci_of_invoke(bci) , _state(state) { // The ProfileInvoke has side-effects and must occur precisely where located QQQ??? @@ -2318,7 +2259,6 @@ LEAF(ProfileInvoke, Instruction) ciMethod* inlinee() { return _inlinee; } ValueStack* state() { return _state; } - int bci_of_invoke() { return _bci_of_invoke; } virtual void input_values_do(ValueVisitor*) {} virtual void state_values_do(ValueVisitor*); }; diff --git a/hotspot/src/share/vm/c1/c1_InstructionPrinter.cpp b/hotspot/src/share/vm/c1/c1_InstructionPrinter.cpp index 84e7b6fb897..c88a9a60a8c 100644 --- a/hotspot/src/share/vm/c1/c1_InstructionPrinter.cpp +++ b/hotspot/src/share/vm/c1/c1_InstructionPrinter.cpp @@ -316,7 +316,7 @@ void InstructionPrinter::print_head() { void InstructionPrinter::print_line(Instruction* instr) { // print instruction data on one line if (instr->is_pinned()) output()->put('.'); - fill_to(bci_pos ); output()->print("%d", instr->bci()); + fill_to(bci_pos ); output()->print("%d", instr->printable_bci()); fill_to(use_pos ); output()->print("%d", instr->use_count()); fill_to(temp_pos ); print_temp(instr); fill_to(instr_pos); print_instr(instr); @@ -569,7 +569,7 @@ void InstructionPrinter::do_BlockBegin(BlockBegin* x) { if (printed_flag) output()->print(") "); // print block bci range - output()->print("[%d, %d]", x->bci(), (end == NULL ? -1 : end->bci())); + output()->print("[%d, %d]", x->bci(), (end == NULL ? -1 : end->printable_bci())); // print block successors if (end != NULL && end->number_of_sux() > 0) { diff --git a/hotspot/src/share/vm/c1/c1_LIR.cpp b/hotspot/src/share/vm/c1/c1_LIR.cpp index 3b04fc45dc5..62a3a81c94d 100644 --- a/hotspot/src/share/vm/c1/c1_LIR.cpp +++ b/hotspot/src/share/vm/c1/c1_LIR.cpp @@ -211,6 +211,7 @@ void LIR_OprDesc::validate_type() const { case T_BYTE: case T_SHORT: case T_INT: + case T_ADDRESS: case T_OBJECT: case T_ARRAY: assert((kind_field() == cpu_register || kind_field() == stack_value) && @@ -1519,7 +1520,7 @@ static void print_block(BlockBegin* x) { if (x->is_set(BlockBegin::linear_scan_loop_end_flag)) tty->print("le "); // print block bci range - tty->print("[%d, %d] ", x->bci(), (end == NULL ? -1 : end->bci())); + tty->print("[%d, %d] ", x->bci(), (end == NULL ? -1 : end->printable_bci())); // print predecessors and successors if (x->number_of_preds() > 0) { @@ -1575,7 +1576,7 @@ void LIR_Op::print_on(outputStream* out) const { } out->print(name()); out->print(" "); print_instr(out); - if (info() != NULL) out->print(" [bci:%d]", info()->bci()); + if (info() != NULL) out->print(" [bci:%d]", info()->stack()->bci()); #ifdef ASSERT if (Verbose && _file != NULL) { out->print(" (%s:%d)", _file, _line); @@ -1780,7 +1781,7 @@ void LIR_OpBranch::print_instr(outputStream* out) const { out->print("["); stub()->print_name(out); out->print(": 0x%x]", stub()); - if (stub()->info() != NULL) out->print(" [bci:%d]", stub()->info()->bci()); + if (stub()->info() != NULL) out->print(" [bci:%d]", stub()->info()->stack()->bci()); } else { out->print("[label:0x%x] ", label()); } @@ -1895,7 +1896,7 @@ void LIR_OpTypeCheck::print_instr(outputStream* out) const { tmp2()->print(out); out->print(" "); tmp3()->print(out); out->print(" "); result_opr()->print(out); out->print(" "); - if (info_for_exception() != NULL) out->print(" [bci:%d]", info_for_exception()->bci()); + if (info_for_exception() != NULL) out->print(" [bci:%d]", info_for_exception()->stack()->bci()); } diff --git a/hotspot/src/share/vm/c1/c1_LIR.hpp b/hotspot/src/share/vm/c1/c1_LIR.hpp index 44393aa8fb3..b6076e8421b 100644 --- a/hotspot/src/share/vm/c1/c1_LIR.hpp +++ b/hotspot/src/share/vm/c1/c1_LIR.hpp @@ -280,7 +280,7 @@ class LIR_OprDesc: public CompilationResourceObj { , int_type = 1 << type_shift , long_type = 2 << type_shift , object_type = 3 << type_shift - , pointer_type = 4 << type_shift + , address_type = 4 << type_shift , float_type = 5 << type_shift , double_type = 6 << type_shift }; @@ -303,6 +303,7 @@ class LIR_OprDesc: public CompilationResourceObj { case T_BYTE: case T_SHORT: case T_INT: + case T_ADDRESS: case T_OBJECT: case T_ARRAY: return single_size; @@ -456,6 +457,7 @@ inline LIR_OprDesc::OprType as_OprType(BasicType type) { case T_DOUBLE: return LIR_OprDesc::double_type; case T_OBJECT: case T_ARRAY: return LIR_OprDesc::object_type; + case T_ADDRESS: return LIR_OprDesc::address_type; case T_ILLEGAL: // fall through default: ShouldNotReachHere(); return LIR_OprDesc::unknown_type; } @@ -468,6 +470,7 @@ inline BasicType as_BasicType(LIR_OprDesc::OprType t) { case LIR_OprDesc::float_type: return T_FLOAT; case LIR_OprDesc::double_type: return T_DOUBLE; case LIR_OprDesc::object_type: return T_OBJECT; + case LIR_OprDesc::address_type: return T_ADDRESS; case LIR_OprDesc::unknown_type: // fall through default: ShouldNotReachHere(); return T_ILLEGAL; } @@ -550,8 +553,24 @@ class LIR_OprFact: public AllStatic { static LIR_Opr illegalOpr; - static LIR_Opr single_cpu(int reg) { return (LIR_Opr)(intptr_t)((reg << LIR_OprDesc::reg1_shift) | LIR_OprDesc::int_type | LIR_OprDesc::cpu_register | LIR_OprDesc::single_size); } - static LIR_Opr single_cpu_oop(int reg) { return (LIR_Opr)(intptr_t)((reg << LIR_OprDesc::reg1_shift) | LIR_OprDesc::object_type | LIR_OprDesc::cpu_register | LIR_OprDesc::single_size); } + static LIR_Opr single_cpu(int reg) { + return (LIR_Opr)(intptr_t)((reg << LIR_OprDesc::reg1_shift) | + LIR_OprDesc::int_type | + LIR_OprDesc::cpu_register | + LIR_OprDesc::single_size); + } + static LIR_Opr single_cpu_oop(int reg) { + return (LIR_Opr)(intptr_t)((reg << LIR_OprDesc::reg1_shift) | + LIR_OprDesc::object_type | + LIR_OprDesc::cpu_register | + LIR_OprDesc::single_size); + } + static LIR_Opr single_cpu_address(int reg) { + return (LIR_Opr)(intptr_t)((reg << LIR_OprDesc::reg1_shift) | + LIR_OprDesc::address_type | + LIR_OprDesc::cpu_register | + LIR_OprDesc::single_size); + } static LIR_Opr double_cpu(int reg1, int reg2) { LP64_ONLY(assert(reg1 == reg2, "must be identical")); return (LIR_Opr)(intptr_t)((reg1 << LIR_OprDesc::reg1_shift) | @@ -633,6 +652,14 @@ class LIR_OprFact: public AllStatic { LIR_OprDesc::virtual_mask); break; + case T_ADDRESS: + res = (LIR_Opr)(intptr_t)((index << LIR_OprDesc::data_shift) | + LIR_OprDesc::address_type | + LIR_OprDesc::cpu_register | + LIR_OprDesc::single_size | + LIR_OprDesc::virtual_mask); + break; + case T_LONG: res = (LIR_Opr)(intptr_t)((index << LIR_OprDesc::data_shift) | LIR_OprDesc::long_type | @@ -721,6 +748,13 @@ class LIR_OprFact: public AllStatic { LIR_OprDesc::single_size); break; + case T_ADDRESS: + res = (LIR_Opr)(intptr_t)((index << LIR_OprDesc::data_shift) | + LIR_OprDesc::address_type | + LIR_OprDesc::stack_value | + LIR_OprDesc::single_size); + break; + case T_LONG: res = (LIR_Opr)(intptr_t)((index << LIR_OprDesc::data_shift) | LIR_OprDesc::long_type | diff --git a/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp b/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp index de2a1a9f21d..95127d8abae 100644 --- a/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp +++ b/hotspot/src/share/vm/c1/c1_LIRAssembler.cpp @@ -35,7 +35,7 @@ void LIR_Assembler::patching_epilog(PatchingStub* patch, LIR_PatchCode patch_cod append_patching_stub(patch); #ifdef ASSERT - Bytecodes::Code code = info->scope()->method()->java_code_at_bci(info->bci()); + Bytecodes::Code code = info->scope()->method()->java_code_at_bci(info->stack()->bci()); if (patch->id() == PatchingStub::access_field_id) { switch (code) { case Bytecodes::_putstatic: @@ -221,7 +221,7 @@ void LIR_Assembler::emit_block(BlockBegin* block) { #ifndef PRODUCT if (CommentedAssembly) { stringStream st; - st.print_cr(" block B%d [%d, %d]", block->block_id(), block->bci(), block->end()->bci()); + st.print_cr(" block B%d [%d, %d]", block->block_id(), block->bci(), block->end()->printable_bci()); _masm->block_comment(st.as_string()); } #endif @@ -312,7 +312,7 @@ void LIR_Assembler::add_call_info(int pc_offset, CodeEmitInfo* cinfo) { static ValueStack* debug_info(Instruction* ins) { StateSplit* ss = ins->as_StateSplit(); if (ss != NULL) return ss->state(); - return ins->lock_stack(); + return ins->state_before(); } void LIR_Assembler::process_debug_info(LIR_Op* op) { @@ -327,8 +327,7 @@ void LIR_Assembler::process_debug_info(LIR_Op* op) { if (vstack == NULL) return; if (_pending_non_safepoint != NULL) { // Got some old debug info. Get rid of it. - if (_pending_non_safepoint->bci() == src->bci() && - debug_info(_pending_non_safepoint) == vstack) { + if (debug_info(_pending_non_safepoint) == vstack) { _pending_non_safepoint_offset = pc_offset; return; } @@ -358,7 +357,7 @@ static ValueStack* nth_oldest(ValueStack* s, int n, int& bci_result) { ValueStack* tc = t->caller_state(); if (tc == NULL) return s; t = tc; - bci_result = s->scope()->caller_bci(); + bci_result = tc->bci(); s = s->caller_state(); } } @@ -366,7 +365,7 @@ static ValueStack* nth_oldest(ValueStack* s, int n, int& bci_result) { void LIR_Assembler::record_non_safepoint_debug_info() { int pc_offset = _pending_non_safepoint_offset; ValueStack* vstack = debug_info(_pending_non_safepoint); - int bci = _pending_non_safepoint->bci(); + int bci = vstack->bci(); DebugInformationRecorder* debug_info = compilation()->debug_info_recorder(); assert(debug_info->recording_non_safepoints(), "sanity"); @@ -380,7 +379,7 @@ void LIR_Assembler::record_non_safepoint_debug_info() { if (s == NULL) break; IRScope* scope = s->scope(); //Always pass false for reexecute since these ScopeDescs are never used for deopt - debug_info->describe_scope(pc_offset, scope->method(), s_bci, false/*reexecute*/); + debug_info->describe_scope(pc_offset, scope->method(), s->bci(), false/*reexecute*/); } debug_info->end_non_safepoint(pc_offset); diff --git a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp index e519cfcfb1d..332f193e28e 100644 --- a/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp +++ b/hotspot/src/share/vm/c1/c1_LIRGenerator.cpp @@ -386,18 +386,26 @@ void LIRGenerator::walk(Value instr) { CodeEmitInfo* LIRGenerator::state_for(Instruction* x, ValueStack* state, bool ignore_xhandler) { - int index; - Value value; - for_each_stack_value(state, index, value) { - assert(value->subst() == value, "missed substition"); - if (!value->is_pinned() && value->as_Constant() == NULL && value->as_Local() == NULL) { - walk(value); - assert(value->operand()->is_valid(), "must be evaluated now"); - } - } + assert(state != NULL, "state must be defined"); + ValueStack* s = state; - int bci = x->bci(); for_each_state(s) { + if (s->kind() == ValueStack::EmptyExceptionState) { + assert(s->stack_size() == 0 && s->locals_size() == 0 && (s->locks_size() == 0 || s->locks_size() == 1), "state must be empty"); + continue; + } + + int index; + Value value; + for_each_stack_value(s, index, value) { + assert(value->subst() == value, "missed substitution"); + if (!value->is_pinned() && value->as_Constant() == NULL && value->as_Local() == NULL) { + walk(value); + assert(value->operand()->is_valid(), "must be evaluated now"); + } + } + + int bci = s->bci(); IRScope* scope = s->scope(); ciMethod* method = scope->method(); @@ -428,15 +436,14 @@ CodeEmitInfo* LIRGenerator::state_for(Instruction* x, ValueStack* state, bool ig } } } - bci = scope->caller_bci(); } - return new CodeEmitInfo(x->bci(), state, ignore_xhandler ? NULL : x->exception_handlers()); + return new CodeEmitInfo(state, ignore_xhandler ? NULL : x->exception_handlers()); } CodeEmitInfo* LIRGenerator::state_for(Instruction* x) { - return state_for(x, x->lock_stack()); + return state_for(x, x->exception_state()); } @@ -900,18 +907,14 @@ void LIRGenerator::move_to_phi(ValueStack* cur_state) { Value sux_value; int index; + assert(cur_state->scope() == sux_state->scope(), "not matching"); + assert(cur_state->locals_size() == sux_state->locals_size(), "not matching"); + assert(cur_state->stack_size() == sux_state->stack_size(), "not matching"); + for_each_stack_value(sux_state, index, sux_value) { move_to_phi(&resolver, cur_state->stack_at(index), sux_value); } - // Inlining may cause the local state not to match up, so walk up - // the caller state until we get to the same scope as the - // successor and then start processing from there. - while (cur_state->scope() != sux_state->scope()) { - cur_state = cur_state->caller_state(); - assert(cur_state != NULL, "scopes don't match up"); - } - for_each_local_value(sux_state, index, sux_value) { move_to_phi(&resolver, cur_state->local_at(index), sux_value); } @@ -936,7 +939,6 @@ LIR_Opr LIRGenerator::new_register(BasicType type) { } } _virtual_register_number += 1; - if (type == T_ADDRESS) type = T_INT; return LIR_OprFact::virtual_register(vreg, type); } @@ -1024,10 +1026,10 @@ void LIRGenerator::do_Phi(Phi* x) { // Code for a constant is generated lazily unless the constant is frequently used and can't be inlined. void LIRGenerator::do_Constant(Constant* x) { - if (x->state() != NULL) { + if (x->state_before() != NULL) { // Any constant with a ValueStack requires patching so emit the patch here LIR_Opr reg = rlock_result(x); - CodeEmitInfo* info = state_for(x, x->state()); + CodeEmitInfo* info = state_for(x, x->state_before()); __ oop2reg_patch(NULL, reg, info); } else if (x->use_count() > 1 && !can_inline_as_constant(x)) { if (!x->is_pinned()) { @@ -1103,7 +1105,7 @@ void LIRGenerator::do_getClass(Intrinsic* x) { // need to perform the null check on the rcvr CodeEmitInfo* info = NULL; if (x->needs_null_check()) { - info = state_for(x, x->state()->copy_locks()); + info = state_for(x); } __ move(new LIR_Address(rcvr.result(), oopDesc::klass_offset_in_bytes(), T_OBJECT), result, info); __ move(new LIR_Address(result, Klass::java_mirror_offset_in_bytes() + @@ -1482,7 +1484,7 @@ void LIRGenerator::do_StoreField(StoreField* x) { } else if (x->needs_null_check()) { NullCheck* nc = x->explicit_null_check(); if (nc == NULL) { - info = state_for(x, x->lock_stack()); + info = state_for(x); } else { info = state_for(nc); } @@ -1510,10 +1512,12 @@ void LIRGenerator::do_StoreField(StoreField* x) { set_no_result(x); +#ifndef PRODUCT if (PrintNotLoaded && needs_patching) { tty->print_cr(" ###class not loaded at store_%s bci %d", - x->is_static() ? "static" : "field", x->bci()); + x->is_static() ? "static" : "field", x->printable_bci()); } +#endif if (x->needs_null_check() && (needs_patching || @@ -1576,7 +1580,7 @@ void LIRGenerator::do_LoadField(LoadField* x) { } else if (x->needs_null_check()) { NullCheck* nc = x->explicit_null_check(); if (nc == NULL) { - info = state_for(x, x->lock_stack()); + info = state_for(x); } else { info = state_for(nc); } @@ -1586,10 +1590,12 @@ void LIRGenerator::do_LoadField(LoadField* x) { object.load_item(); +#ifndef PRODUCT if (PrintNotLoaded && needs_patching) { tty->print_cr(" ###class not loaded at load_%s bci %d", - x->is_static() ? "static" : "field", x->bci()); + x->is_static() ? "static" : "field", x->printable_bci()); } +#endif if (x->needs_null_check() && (needs_patching || @@ -1782,7 +1788,7 @@ void LIRGenerator::do_Throw(Throw* x) { if (GenerateCompilerNullChecks && (x->exception()->as_NewInstance() == NULL && x->exception()->as_ExceptionObject() == NULL)) { // if the exception object wasn't created using new then it might be null. - __ null_check(exception_opr, new CodeEmitInfo(info, true)); + __ null_check(exception_opr, new CodeEmitInfo(info, x->state()->copy(ValueStack::ExceptionState, x->state()->bci()))); } if (compilation()->env()->jvmti_can_post_on_exceptions()) { @@ -2128,7 +2134,6 @@ void LIRGenerator::do_TableSwitch(TableSwitch* x) { int lo_key = x->lo_key(); int hi_key = x->hi_key(); int len = x->length(); - CodeEmitInfo* info = state_for(x, x->state()); LIR_Opr value = tag.result(); if (UseTableRanges) { do_SwitchRanges(create_lookup_ranges(x), value, x->default_sux()); @@ -2187,7 +2192,7 @@ void LIRGenerator::do_Goto(Goto* x) { // increment backedge counter if needed CodeEmitInfo* info = state_for(x, state); - increment_backedge_counter(info, info->bci()); + increment_backedge_counter(info, info->stack()->bci()); CodeEmitInfo* safepoint_info = state_for(x, state); __ safepoint(safepoint_poll_register(), safepoint_info); } @@ -2294,7 +2299,7 @@ void LIRGenerator::do_Base(Base* x) { LIR_Opr lock = new_register(T_INT); __ load_stack_address_monitor(0, lock); - CodeEmitInfo* info = new CodeEmitInfo(SynchronizationEntryBCI, scope()->start()->state(), NULL); + CodeEmitInfo* info = new CodeEmitInfo(scope()->start()->state()->copy(ValueStack::StateBefore, SynchronizationEntryBCI), NULL); CodeStub* slow_path = new MonitorEnterStub(obj, lock, info); // receiver is guaranteed non-NULL so don't need CodeEmitInfo @@ -2304,7 +2309,7 @@ void LIRGenerator::do_Base(Base* x) { // increment invocation counters if needed if (!method()->is_accessor()) { // Accessors do not have MDOs, so no counting. - CodeEmitInfo* info = new CodeEmitInfo(InvocationEntryBci, scope()->start()->state(), NULL); + CodeEmitInfo* info = new CodeEmitInfo(scope()->start()->state()->copy(ValueStack::StateBefore, SynchronizationEntryBCI), NULL); increment_invocation_counter(info); } @@ -2464,7 +2469,7 @@ void LIRGenerator::do_Invoke(Invoke* x) { break; case Bytecodes::_invokedynamic: { ciBytecodeStream bcs(x->scope()->method()); - bcs.force_bci(x->bci()); + bcs.force_bci(x->state()->bci()); assert(bcs.cur_bc() == Bytecodes::_invokedynamic, "wrong stream"); ciCPCache* cpcache = bcs.get_cpcache(); @@ -2829,4 +2834,3 @@ LIR_Opr LIRGenerator::call_runtime(BasicTypeArray* signature, LIRItemList* args, } return result; } - diff --git a/hotspot/src/share/vm/c1/c1_LinearScan.cpp b/hotspot/src/share/vm/c1/c1_LinearScan.cpp index b5adb2db479..166c9fd844b 100644 --- a/hotspot/src/share/vm/c1/c1_LinearScan.cpp +++ b/hotspot/src/share/vm/c1/c1_LinearScan.cpp @@ -2018,6 +2018,12 @@ LIR_Opr LinearScan::calc_operand_for_interval(const Interval* interval) { return LIR_OprFact::single_cpu_oop(assigned_reg); } + case T_ADDRESS: { + assert(assigned_reg >= pd_first_cpu_reg && assigned_reg <= pd_last_cpu_reg, "no cpu register"); + assert(interval->assigned_regHi() == any_reg, "must not have hi register"); + return LIR_OprFact::single_cpu_address(assigned_reg); + } + #ifdef __SOFTFP__ case T_FLOAT: // fall through #endif // __SOFTFP__ @@ -2268,8 +2274,8 @@ void assert_equal(IRScopeDebugInfo* d1, IRScopeDebugInfo* d2) { } void check_stack_depth(CodeEmitInfo* info, int stack_end) { - if (info->bci() != SynchronizationEntryBCI && !info->scope()->method()->is_native()) { - Bytecodes::Code code = info->scope()->method()->java_code_at_bci(info->bci()); + if (info->stack()->bci() != SynchronizationEntryBCI && !info->scope()->method()->is_native()) { + Bytecodes::Code code = info->scope()->method()->java_code_at_bci(info->stack()->bci()); switch (code) { case Bytecodes::_ifnull : // fall through case Bytecodes::_ifnonnull : // fall through @@ -2373,7 +2379,7 @@ OopMap* LinearScan::compute_oop_map(IntervalWalker* iw, LIR_Op* op, CodeEmitInfo // add oops from lock stack assert(info->stack() != NULL, "CodeEmitInfo must always have a stack"); - int locks_count = info->stack()->locks_size(); + int locks_count = info->stack()->total_locks_size(); for (int i = 0; i < locks_count; i++) { map->set_oop(frame_map()->monitor_object_regname(i)); } @@ -2756,19 +2762,13 @@ int LinearScan::append_scope_value(int op_id, Value value, GrowableArraycaller_state(); + ValueStack* caller_state = cur_state->caller_state(); if (caller_state != NULL) { // process recursively to compute outermost scope first - stack_begin = caller_state->stack_size(); - locks_begin = caller_state->locks_size(); - caller_debug_info = compute_debug_info_for_scope(op_id, cur_scope->caller(), caller_state, innermost_state, cur_scope->caller_bci(), stack_begin, locks_begin); - } else { - stack_begin = 0; - locks_begin = 0; + caller_debug_info = compute_debug_info_for_scope(op_id, cur_scope->caller(), caller_state, innermost_state); } // initialize these to null. @@ -2779,7 +2779,7 @@ IRScopeDebugInfo* LinearScan::compute_debug_info_for_scope(int op_id, IRScope* c GrowableArray* monitors = NULL; // describe local variable values - int nof_locals = cur_scope->method()->max_locals(); + int nof_locals = cur_state->locals_size(); if (nof_locals > 0) { locals = new GrowableArray(nof_locals); @@ -2794,45 +2794,41 @@ IRScopeDebugInfo* LinearScan::compute_debug_info_for_scope(int op_id, IRScope* c } assert(locals->length() == cur_scope->method()->max_locals(), "wrong number of locals"); assert(locals->length() == cur_state->locals_size(), "wrong number of locals"); + } else if (cur_scope->method()->max_locals() > 0) { + assert(cur_state->kind() == ValueStack::EmptyExceptionState, "should be"); + nof_locals = cur_scope->method()->max_locals(); + locals = new GrowableArray(nof_locals); + for(int i = 0; i < nof_locals; i++) { + locals->append(&_illegal_value); + } } - // describe expression stack - // - // When we inline methods containing exception handlers, the - // "lock_stacks" are changed to preserve expression stack values - // in caller scopes when exception handlers are present. This - // can cause callee stacks to be smaller than caller stacks. - if (stack_end > innermost_state->stack_size()) { - stack_end = innermost_state->stack_size(); - } - - - - int nof_stack = stack_end - stack_begin; + int nof_stack = cur_state->stack_size(); if (nof_stack > 0) { expressions = new GrowableArray(nof_stack); - int pos = stack_begin; - while (pos < stack_end) { - Value expression = innermost_state->stack_at_inc(pos); + int pos = 0; + while (pos < nof_stack) { + Value expression = cur_state->stack_at_inc(pos); append_scope_value(op_id, expression, expressions); - assert(expressions->length() + stack_begin == pos, "must match"); + assert(expressions->length() == pos, "must match"); } + assert(expressions->length() == cur_state->stack_size(), "wrong number of stack entries"); } // describe monitors - assert(locks_begin <= locks_end, "error in scope iteration"); - int nof_locks = locks_end - locks_begin; + int nof_locks = cur_state->locks_size(); if (nof_locks > 0) { + int lock_offset = cur_state->caller_state() != NULL ? cur_state->caller_state()->total_locks_size() : 0; monitors = new GrowableArray(nof_locks); - for (int i = locks_begin; i < locks_end; i++) { - monitors->append(location_for_monitor_index(i)); + for (int i = 0; i < nof_locks; i++) { + monitors->append(location_for_monitor_index(lock_offset + i)); } } - return new IRScopeDebugInfo(cur_scope, cur_bci, locals, expressions, monitors, caller_debug_info); + return new IRScopeDebugInfo(cur_scope, cur_state->bci(), locals, expressions, monitors, caller_debug_info); } @@ -2844,17 +2840,14 @@ void LinearScan::compute_debug_info(CodeEmitInfo* info, int op_id) { assert(innermost_scope != NULL && innermost_state != NULL, "why is it missing?"); - int stack_end = innermost_state->stack_size(); - int locks_end = innermost_state->locks_size(); - - DEBUG_ONLY(check_stack_depth(info, stack_end)); + DEBUG_ONLY(check_stack_depth(info, innermost_state->stack_size())); if (info->_scope_debug_info == NULL) { // compute debug information - info->_scope_debug_info = compute_debug_info_for_scope(op_id, innermost_scope, innermost_state, innermost_state, info->bci(), stack_end, locks_end); + info->_scope_debug_info = compute_debug_info_for_scope(op_id, innermost_scope, innermost_state, innermost_state); } else { // debug information already set. Check that it is correct from the current point of view - DEBUG_ONLY(assert_equal(info->_scope_debug_info, compute_debug_info_for_scope(op_id, innermost_scope, innermost_state, innermost_state, info->bci(), stack_end, locks_end))); + DEBUG_ONLY(assert_equal(info->_scope_debug_info, compute_debug_info_for_scope(op_id, innermost_scope, innermost_state, innermost_state))); } } diff --git a/hotspot/src/share/vm/c1/c1_LinearScan.hpp b/hotspot/src/share/vm/c1/c1_LinearScan.hpp index 9d5b2171e52..a161c679991 100644 --- a/hotspot/src/share/vm/c1/c1_LinearScan.hpp +++ b/hotspot/src/share/vm/c1/c1_LinearScan.hpp @@ -346,7 +346,7 @@ class LinearScan : public CompilationResourceObj { int append_scope_value_for_operand(LIR_Opr opr, GrowableArray* scope_values); int append_scope_value(int op_id, Value value, GrowableArray* scope_values); - IRScopeDebugInfo* compute_debug_info_for_scope(int op_id, IRScope* cur_scope, ValueStack* cur_state, ValueStack* innermost_state, int cur_bci, int stack_end, int locks_end); + IRScopeDebugInfo* compute_debug_info_for_scope(int op_id, IRScope* cur_scope, ValueStack* cur_state, ValueStack* innermost_state); void compute_debug_info(CodeEmitInfo* info, int op_id); void assign_reg_num(LIR_OpList* instructions, IntervalWalker* iw); diff --git a/hotspot/src/share/vm/c1/c1_Optimizer.cpp b/hotspot/src/share/vm/c1/c1_Optimizer.cpp index d3d51cedb09..bb5cd837ecd 100644 --- a/hotspot/src/share/vm/c1/c1_Optimizer.cpp +++ b/hotspot/src/share/vm/c1/c1_Optimizer.cpp @@ -140,25 +140,27 @@ class CE_Eliminator: public BlockClosure { // with an IfOp followed by a Goto // cut if_ away and get node before Instruction* cur_end = if_->prev(block); - int bci = if_->bci(); // append constants of true- and false-block if necessary // clone constants because original block must not be destroyed assert((t_value != f_const && f_value != t_const) || t_const == f_const, "mismatch"); if (t_value == t_const) { t_value = new Constant(t_const->type()); - cur_end = cur_end->set_next(t_value, bci); + NOT_PRODUCT(t_value->set_printable_bci(if_->printable_bci())); + cur_end = cur_end->set_next(t_value); } if (f_value == f_const) { f_value = new Constant(f_const->type()); - cur_end = cur_end->set_next(f_value, bci); + NOT_PRODUCT(f_value->set_printable_bci(if_->printable_bci())); + cur_end = cur_end->set_next(f_value); } // it is very unlikely that the condition can be statically decided // (this was checked previously by the Canonicalizer), so always // append IfOp Value result = new IfOp(if_->x(), if_->cond(), if_->y(), t_value, f_value); - cur_end = cur_end->set_next(result, bci); + NOT_PRODUCT(result->set_printable_bci(if_->printable_bci())); + cur_end = cur_end->set_next(result); // append Goto to successor ValueStack* state_before = if_->is_safepoint() ? if_->state_before() : NULL; @@ -167,16 +169,15 @@ class CE_Eliminator: public BlockClosure { // prepare state for Goto ValueStack* goto_state = if_->state(); while (sux_state->scope() != goto_state->scope()) { - goto_state = goto_state->pop_scope(); + goto_state = goto_state->caller_state(); assert(goto_state != NULL, "states do not match up"); } - goto_state = goto_state->copy(); + goto_state = goto_state->copy(ValueStack::StateAfter, goto_state->bci()); goto_state->push(result->type(), result); - assert(goto_state->is_same_across_scopes(sux_state), "states must match now"); + assert(goto_state->is_same(sux_state), "states must match now"); goto_->set_state(goto_state); - // Steal the bci for the goto from the sux - cur_end = cur_end->set_next(goto_, sux->bci()); + cur_end = cur_end->set_next(goto_, goto_state->bci()); // Adjust control flow graph BlockBegin::disconnect_edge(block, t_block); @@ -251,10 +252,8 @@ class BlockMerger: public BlockClosure { // no phi functions must be present at beginning of sux ValueStack* sux_state = sux->state(); ValueStack* end_state = end->state(); - while (end_state->scope() != sux_state->scope()) { - // match up inlining level - end_state = end_state->pop_scope(); - } + + assert(end_state->scope() == sux_state->scope(), "scopes must match"); assert(end_state->stack_size() == sux_state->stack_size(), "stack not equal"); assert(end_state->locals_size() == sux_state->locals_size(), "locals not equal"); @@ -273,7 +272,7 @@ class BlockMerger: public BlockClosure { Instruction* prev = end->prev(block); Instruction* next = sux->next(); assert(prev->as_BlockEnd() == NULL, "must not be a BlockEnd"); - prev->set_next(next, next->bci()); + prev->set_next(next); sux->disconnect_from_graph(); block->set_end(sux->end()); // add exception handlers of deleted block, if any @@ -337,7 +336,8 @@ class BlockMerger: public BlockClosure { newif->set_state(if_->state()->copy()); assert(prev->next() == if_, "must be guaranteed by above search"); - prev->set_next(newif, if_->bci()); + NOT_PRODUCT(newif->set_printable_bci(if_->printable_bci())); + prev->set_next(newif); block->set_end(newif); _merge_count++; @@ -705,7 +705,7 @@ void NullCheckEliminator::iterate_one(BlockBegin* block) { // visiting instructions which are references in other blocks or // visiting instructions more than once. mark_visitable(instr); - if (instr->is_root() || instr->can_trap() || (instr->as_NullCheck() != NULL)) { + if (instr->is_pinned() || instr->can_trap() || (instr->as_NullCheck() != NULL)) { mark_visited(instr); instr->input_values_do(this); instr->visit(&_visitor); diff --git a/hotspot/src/share/vm/c1/c1_ValueStack.cpp b/hotspot/src/share/vm/c1/c1_ValueStack.cpp index 261176507b3..40dfadbff61 100644 --- a/hotspot/src/share/vm/c1/c1_ValueStack.cpp +++ b/hotspot/src/share/vm/c1/c1_ValueStack.cpp @@ -28,55 +28,60 @@ // Implementation of ValueStack -ValueStack::ValueStack(IRScope* scope, int locals_size, int max_stack_size) +ValueStack::ValueStack(IRScope* scope, ValueStack* caller_state) : _scope(scope) -, _locals(locals_size, NULL) -, _stack(max_stack_size) -, _lock_stack(false) -, _locks(1) +, _caller_state(caller_state) +, _bci(-99) +, _kind(Parsing) +, _locals(scope->method()->max_locals(), NULL) +, _stack(scope->method()->max_stack()) +, _locks() { - assert(scope != NULL, "scope must exist"); -} - -ValueStack* ValueStack::copy() { - ValueStack* s = new ValueStack(scope(), locals_size(), max_stack_size()); - s->_stack.appendAll(&_stack); - s->_locks.appendAll(&_locks); - s->replace_locals(this); - return s; + verify(); } -ValueStack* ValueStack::copy_locks() { - int sz = scope()->lock_stack_size(); - if (stack_size() == 0) { - sz = 0; +ValueStack::ValueStack(ValueStack* copy_from, Kind kind, int bci) + : _scope(copy_from->scope()) + , _caller_state(copy_from->caller_state()) + , _bci(bci) + , _kind(kind) + , _locals() + , _stack() + , _locks(copy_from->locks_size()) +{ + assert(kind != EmptyExceptionState || !Compilation::current()->env()->jvmti_can_access_local_variables(), "need locals"); + if (kind != EmptyExceptionState) { + // only allocate space if we need to copy the locals-array + _locals = Values(copy_from->locals_size()); + _locals.appendAll(©_from->_locals); } - ValueStack* s = new ValueStack(scope(), locals_size(), sz); - s->_lock_stack = true; - s->_locks.appendAll(&_locks); - s->replace_locals(this); - if (sz > 0) { - assert(sz <= stack_size(), "lock stack underflow"); - for (int i = 0; i < sz; i++) { - s->_stack.append(_stack[i]); + + if (kind != ExceptionState && kind != EmptyExceptionState) { + if (kind == Parsing) { + // stack will be modified, so reserve enough space to avoid resizing + _stack = Values(scope()->method()->max_stack()); + } else { + // stack will not be modified, so do not waste space + _stack = Values(copy_from->stack_size()); } + _stack.appendAll(©_from->_stack); } - return s; + + _locks.appendAll(©_from->_locks); + + verify(); } + bool ValueStack::is_same(ValueStack* s) { - assert(s != NULL, "state must exist"); - assert(scope () == s->scope (), "scopes must correspond"); - assert(locals_size() == s->locals_size(), "locals sizes must correspond"); - return is_same_across_scopes(s); -} + if (scope() != s->scope()) return false; + if (caller_state() != s->caller_state()) return false; + if (locals_size() != s->locals_size()) return false; + if (stack_size() != s->stack_size()) return false; + if (locks_size() != s->locks_size()) return false; -bool ValueStack::is_same_across_scopes(ValueStack* s) { - assert(s != NULL, "state must exist"); - assert(stack_size () == s->stack_size (), "stack sizes must correspond"); - assert(locks_size () == s->locks_size (), "locks sizes must correspond"); // compare each stack element with the corresponding stack element of s int index; Value value; @@ -89,12 +94,6 @@ bool ValueStack::is_same_across_scopes(ValueStack* s) { return true; } - -ValueStack* ValueStack::caller_state() const { - return scope()->caller_state(); -} - - void ValueStack::clear_locals() { for (int i = _locals.length() - 1; i >= 0; i--) { _locals.at_put(i, NULL); @@ -102,13 +101,6 @@ void ValueStack::clear_locals() { } -void ValueStack::replace_locals(ValueStack* with) { - assert(locals_size() == with->locals_size(), "number of locals must match"); - for (int i = locals_size() - 1; i >= 0; i--) { - _locals.at_put(i, with->_locals.at(i)); - } -} - void ValueStack::pin_stack_for_linear_scan() { for_each_state_value(this, v, if (v->as_Constant() == NULL && v->as_Local() == NULL) { @@ -123,33 +115,25 @@ void ValueStack::apply(Values list, ValueVisitor* f) { for (int i = 0; i < list.length(); i++) { Value* va = list.adr_at(i); Value v0 = *va; - if (v0 != NULL) { - if (!v0->type()->is_illegal()) { - assert(v0->as_HiWord() == NULL, "should never see HiWord during traversal"); - f->visit(va); + if (v0 != NULL && !v0->type()->is_illegal()) { + f->visit(va); #ifdef ASSERT - Value v1 = *va; - if (v0 != v1) { - assert(v1->type()->is_illegal() || v0->type()->tag() == v1->type()->tag(), "types must match"); - if (v0->type()->is_double_word()) { - list.at_put(i + 1, v0->hi_word()); - } - } + Value v1 = *va; + assert(v1->type()->is_illegal() || v0->type()->tag() == v1->type()->tag(), "types must match"); + assert(!v1->type()->is_double_word() || list.at(i + 1) == NULL, "hi-word of doubleword value must be NULL"); #endif - if (v0->type()->is_double_word()) i++; - } + if (v0->type()->is_double_word()) i++; } } } void ValueStack::values_do(ValueVisitor* f) { - apply(_stack, f); - apply(_locks, f); - ValueStack* state = this; for_each_state(state) { apply(state->_locals, f); + apply(state->_stack, f); + apply(state->_locks, f); } } @@ -164,52 +148,26 @@ Values* ValueStack::pop_arguments(int argument_size) { } -int ValueStack::lock(IRScope* scope, Value obj) { +int ValueStack::total_locks_size() const { + int num_locks = 0; + const ValueStack* state = this; + for_each_state(state) { + num_locks += state->locks_size(); + } + return num_locks; +} + +int ValueStack::lock(Value obj) { _locks.push(obj); - scope->set_min_number_of_locks(locks_size()); - return locks_size() - 1; + int num_locks = total_locks_size(); + scope()->set_min_number_of_locks(num_locks); + return num_locks - 1; } int ValueStack::unlock() { _locks.pop(); - return locks_size(); -} - - -ValueStack* ValueStack::push_scope(IRScope* scope) { - assert(scope->caller() == _scope, "scopes must have caller/callee relationship"); - ValueStack* res = new ValueStack(scope, - scope->method()->max_locals(), - max_stack_size() + scope->method()->max_stack()); - // Preserves stack and monitors. - res->_stack.appendAll(&_stack); - res->_locks.appendAll(&_locks); - assert(res->_stack.size() <= res->max_stack_size(), "stack overflow"); - return res; -} - - -ValueStack* ValueStack::pop_scope() { - assert(_scope->caller() != NULL, "scope must have caller"); - IRScope* scope = _scope->caller(); - int max_stack = max_stack_size() - _scope->method()->max_stack(); - assert(max_stack >= 0, "stack underflow"); - ValueStack* res = new ValueStack(scope, - scope->method()->max_locals(), - max_stack); - // Preserves stack and monitors. Restores local and store state from caller scope. - res->_stack.appendAll(&_stack); - res->_locks.appendAll(&_locks); - ValueStack* caller = caller_state(); - if (caller != NULL) { - for (int i = 0; i < caller->_locals.length(); i++) { - res->_locals.at_put(i, caller->_locals.at(i)); - } - assert(res->_locals.length() == res->scope()->method()->max_locals(), "just checking"); - } - assert(res->_stack.size() <= res->max_stack_size(), "stack overflow"); - return res; + return total_locks_size(); } @@ -220,11 +178,7 @@ void ValueStack::setup_phi_for_stack(BlockBegin* b, int index) { Value phi = new Phi(t, b, -index - 1); _stack[index] = phi; -#ifdef ASSERT - if (t->is_double_word()) { - _stack[index + 1] = phi->hi_word(); - } -#endif + assert(!t->is_double_word() || _stack.at(index + 1) == NULL, "hi-word of doubleword value must be NULL"); } void ValueStack::setup_phi_for_local(BlockBegin* b, int index) { @@ -236,7 +190,9 @@ void ValueStack::setup_phi_for_local(BlockBegin* b, int index) { } #ifndef PRODUCT + void ValueStack::print() { + scope()->method()->print_name(); if (stack_is_empty()) { tty->print_cr("empty stack"); } else { @@ -244,18 +200,20 @@ void ValueStack::print() { for (int i = 0; i < stack_size();) { Value t = stack_at_inc(i); tty->print("%2d ", i); + tty->print("%c%d ", t->type()->tchar(), t->id()); ip.print_instr(t); tty->cr(); } } if (!no_active_locks()) { InstructionPrinter ip; - for (int i = 0; i < locks_size(); i--) { + for (int i = 0; i < locks_size(); i++) { Value t = lock_at(i); tty->print("lock %2d ", i); if (t == NULL) { tty->print("this"); } else { + tty->print("%c%d ", t->type()->tchar(), t->id()); ip.print_instr(t); } tty->cr(); @@ -270,16 +228,55 @@ void ValueStack::print() { tty->print("null"); i ++; } else { + tty->print("%c%d ", l->type()->tchar(), l->id()); ip.print_instr(l); if (l->type()->is_illegal() || l->type()->is_single_word()) i ++; else i += 2; } tty->cr(); } } + + if (caller_state() != NULL) { + caller_state()->print(); + } } void ValueStack::verify() { - Unimplemented(); + assert(scope() != NULL, "scope must exist"); + if (caller_state() != NULL) { + assert(caller_state()->scope() == scope()->caller(), "invalid caller scope"); + caller_state()->verify(); + } + + if (kind() == Parsing) { + assert(bci() == -99, "bci not defined during parsing"); + } else { + assert(bci() >= -1, "bci out of range"); + assert(bci() < scope()->method()->code_size(), "bci out of range"); + assert(bci() == SynchronizationEntryBCI || Bytecodes::is_defined(scope()->method()->java_code_at_bci(bci())), "make sure bci points at a real bytecode"); + assert(scope()->method()->liveness_at_bci(bci()).is_valid(), "liveness at bci must be valid"); + } + + int i; + for (i = 0; i < stack_size(); i++) { + Value v = _stack.at(i); + if (v == NULL) { + assert(_stack.at(i - 1)->type()->is_double_word(), "only hi-words are NULL on stack"); + } else if (v->type()->is_double_word()) { + assert(_stack.at(i + 1) == NULL, "hi-word must be NULL"); + } + } + + for (i = 0; i < locals_size(); i++) { + Value v = _locals.at(i); + if (v != NULL && v->type()->is_double_word()) { + assert(_locals.at(i + 1) == NULL, "hi-word must be NULL"); + } + } + + for_each_state_value(this, v, + assert(v != NULL, "just test if state-iteration succeeds"); + ); } #endif // PRODUCT diff --git a/hotspot/src/share/vm/c1/c1_ValueStack.hpp b/hotspot/src/share/vm/c1/c1_ValueStack.hpp index 9e254bf0dcd..0108131fd13 100644 --- a/hotspot/src/share/vm/c1/c1_ValueStack.hpp +++ b/hotspot/src/share/vm/c1/c1_ValueStack.hpp @@ -23,9 +23,23 @@ */ class ValueStack: public CompilationResourceObj { + public: + enum Kind { + Parsing, // During abstract interpretation in GraphBuilder + CallerState, // Caller state when inlining + StateBefore, // Before before execution of instruction + StateAfter, // After execution of instruction + ExceptionState, // Exception handling of instruction + EmptyExceptionState, // Exception handling of instructions not covered by an xhandler + BlockBeginState // State of BlockBegin instruction with phi functions of this block + }; + private: IRScope* _scope; // the enclosing scope - bool _lock_stack; // indicates that this ValueStack is for an exception site + ValueStack* _caller_state; + int _bci; + Kind _kind; + Values _locals; // the locals Values _stack; // the expression stack Values _locks; // the monitor stack (holding the locked values) @@ -36,100 +50,84 @@ class ValueStack: public CompilationResourceObj { } Value check(ValueTag tag, Value t, Value h) { - assert(h->as_HiWord()->lo_word() == t, "incorrect stack pair"); + assert(h == NULL, "hi-word of doubleword value must be NULL"); return check(tag, t); } // helper routine static void apply(Values list, ValueVisitor* f); + // for simplified copying + ValueStack(ValueStack* copy_from, Kind kind, int bci); + public: // creation - ValueStack(IRScope* scope, int locals_size, int max_stack_size); + ValueStack(IRScope* scope, ValueStack* caller_state); + + ValueStack* copy() { return new ValueStack(this, _kind, _bci); } + ValueStack* copy(Kind new_kind, int new_bci) { return new ValueStack(this, new_kind, new_bci); } + ValueStack* copy_for_parsing() { return new ValueStack(this, Parsing, -99); } + + void set_caller_state(ValueStack* s) { + assert(kind() == EmptyExceptionState || + (Compilation::current()->env()->jvmti_can_access_local_variables() && kind() == ExceptionState), + "only EmptyExceptionStates can be modified"); + _caller_state = s; + } - // merging - ValueStack* copy(); // returns a copy of this w/ cleared locals - ValueStack* copy_locks(); // returns a copy of this w/ cleared locals and stack - // Note that when inlining of methods with exception - // handlers is enabled, this stack may have a - // non-empty expression stack (size defined by - // scope()->lock_stack_size()) bool is_same(ValueStack* s); // returns true if this & s's types match (w/o checking locals) - bool is_same_across_scopes(ValueStack* s); // same as is_same but returns true even if stacks are in different scopes (used for block merging w/inlining) // accessors IRScope* scope() const { return _scope; } - bool is_lock_stack() const { return _lock_stack; } + ValueStack* caller_state() const { return _caller_state; } + int bci() const { return _bci; } + Kind kind() const { return _kind; } + int locals_size() const { return _locals.length(); } int stack_size() const { return _stack.length(); } int locks_size() const { return _locks.length(); } - int max_stack_size() const { return _stack.capacity(); } bool stack_is_empty() const { return _stack.is_empty(); } bool no_active_locks() const { return _locks.is_empty(); } - ValueStack* caller_state() const; + int total_locks_size() const; // locals access void clear_locals(); // sets all locals to NULL; - // Kill local i. Also kill local i+1 if i was a long or double. void invalidate_local(int i) { - Value x = _locals.at(i); - if (x != NULL && x->type()->is_double_word()) { - assert(_locals.at(i + 1)->as_HiWord()->lo_word() == x, "locals inconsistent"); - _locals.at_put(i + 1, NULL); - } + assert(_locals.at(i)->type()->is_single_word() || + _locals.at(i + 1) == NULL, "hi-word of doubleword value must be NULL"); _locals.at_put(i, NULL); } - - Value load_local(int i) const { + Value local_at(int i) const { Value x = _locals.at(i); - if (x != NULL && x->type()->is_illegal()) return NULL; - assert(x == NULL || x->as_HiWord() == NULL, "index points to hi word"); - assert(x == NULL || x->type()->is_illegal() || x->type()->is_single_word() || x == _locals.at(i+1)->as_HiWord()->lo_word(), "locals inconsistent"); + assert(x == NULL || x->type()->is_single_word() || + _locals.at(i + 1) == NULL, "hi-word of doubleword value must be NULL"); return x; } - Value local_at(int i) const { return _locals.at(i); } - - // Store x into local i. void store_local(int i, Value x) { - // Kill the old value - invalidate_local(i); - _locals.at_put(i, x); - - // Writing a double word can kill other locals - if (x != NULL && x->type()->is_double_word()) { - // If x + i was the start of a double word local then kill i + 2. - Value x2 = _locals.at(i + 1); - if (x2 != NULL && x2->type()->is_double_word()) { - _locals.at_put(i + 2, NULL); - } - - // If x is a double word local, also update i + 1. -#ifdef ASSERT - _locals.at_put(i + 1, x->hi_word()); -#else - _locals.at_put(i + 1, NULL); -#endif - } - // If x - 1 was the start of a double word local then kill i - 1. + // When overwriting local i, check if i - 1 was the start of a + // double word local and kill it. if (i > 0) { Value prev = _locals.at(i - 1); if (prev != NULL && prev->type()->is_double_word()) { _locals.at_put(i - 1, NULL); } } - } - void replace_locals(ValueStack* with); + _locals.at_put(i, x); + if (x->type()->is_double_word()) { + // hi-word of doubleword value is always NULL + _locals.at_put(i + 1, NULL); + } + } // stack access Value stack_at(int i) const { Value x = _stack.at(i); - assert(x->as_HiWord() == NULL, "index points to hi word"); assert(x->type()->is_single_word() || - x->subst() == _stack.at(i+1)->as_HiWord()->lo_word(), "stack inconsistent"); + _stack.at(i + 1) == NULL, "hi-word of doubleword value must be NULL"); return x; } @@ -146,7 +144,6 @@ class ValueStack: public CompilationResourceObj { void values_do(ValueVisitor* f); // untyped manipulation (for dup_x1, etc.) - void clear_stack() { _stack.clear(); } void truncate_stack(int size) { _stack.trunc_to(size); } void raw_push(Value t) { _stack.push(t); } Value raw_pop() { return _stack.pop(); } @@ -156,15 +153,8 @@ class ValueStack: public CompilationResourceObj { void fpush(Value t) { _stack.push(check(floatTag , t)); } void apush(Value t) { _stack.push(check(objectTag , t)); } void rpush(Value t) { _stack.push(check(addressTag, t)); } -#ifdef ASSERT - // in debug mode, use HiWord for 2-word values - void lpush(Value t) { _stack.push(check(longTag , t)); _stack.push(new HiWord(t)); } - void dpush(Value t) { _stack.push(check(doubleTag , t)); _stack.push(new HiWord(t)); } -#else - // in optimized mode, use NULL for 2-word values void lpush(Value t) { _stack.push(check(longTag , t)); _stack.push(NULL); } void dpush(Value t) { _stack.push(check(doubleTag , t)); _stack.push(NULL); } -#endif // ASSERT void push(ValueType* type, Value t) { switch (type->tag()) { @@ -182,15 +172,8 @@ class ValueStack: public CompilationResourceObj { Value fpop() { return check(floatTag , _stack.pop()); } Value apop() { return check(objectTag , _stack.pop()); } Value rpop() { return check(addressTag, _stack.pop()); } -#ifdef ASSERT - // in debug mode, check for HiWord consistency Value lpop() { Value h = _stack.pop(); return check(longTag , _stack.pop(), h); } Value dpop() { Value h = _stack.pop(); return check(doubleTag, _stack.pop(), h); } -#else - // in optimized mode, ignore HiWord since it is NULL - Value lpop() { _stack.pop(); return check(longTag , _stack.pop()); } - Value dpop() { _stack.pop(); return check(doubleTag, _stack.pop()); } -#endif // ASSERT Value pop(ValueType* type) { switch (type->tag()) { @@ -208,16 +191,10 @@ class ValueStack: public CompilationResourceObj { Values* pop_arguments(int argument_size); // locks access - int lock (IRScope* scope, Value obj); + int lock (Value obj); int unlock(); Value lock_at(int i) const { return _locks.at(i); } - // Inlining support - ValueStack* push_scope(IRScope* scope); // "Push" new scope, returning new resulting stack - // Preserves stack and locks, destroys locals - ValueStack* pop_scope(); // "Pop" topmost scope, returning new resulting stack - // Preserves stack and locks, destroys locals - // SSA form IR support void setup_phi_for_stack(BlockBegin* b, int index); void setup_phi_for_local(BlockBegin* b, int index); @@ -298,16 +275,18 @@ class ValueStack: public CompilationResourceObj { { \ int cur_index; \ ValueStack* cur_state = v_state; \ - Value v_value; \ - { \ - for_each_stack_value(cur_state, cur_index, v_value) { \ - v_code; \ - } \ - } \ + Value v_value; \ for_each_state(cur_state) { \ - for_each_local_value(cur_state, cur_index, v_value) { \ - v_code; \ + { \ + for_each_local_value(cur_state, cur_index, v_value) { \ + v_code; \ + } \ } \ + { \ + for_each_stack_value(cur_state, cur_index, v_value) { \ + v_code; \ + } \ + } \ } \ } diff --git a/hotspot/src/share/vm/c1/c1_globals.hpp b/hotspot/src/share/vm/c1/c1_globals.hpp index 25633a63832..e6a3f6ad7ca 100644 --- a/hotspot/src/share/vm/c1/c1_globals.hpp +++ b/hotspot/src/share/vm/c1/c1_globals.hpp @@ -216,9 +216,6 @@ develop(bool, DeoptC1, true, \ "Use deoptimization in C1") \ \ - develop(bool, DeoptOnAsyncException, true, \ - "Deoptimize upon Thread.stop(); improves precision of IR") \ - \ develop(bool, PrintBailouts, false, \ "Print bailout and its reason") \ \ diff --git a/hotspot/src/share/vm/ci/ciMethod.cpp b/hotspot/src/share/vm/ci/ciMethod.cpp index 5b09d03a1e5..9d12b27f110 100644 --- a/hotspot/src/share/vm/ci/ciMethod.cpp +++ b/hotspot/src/share/vm/ci/ciMethod.cpp @@ -735,7 +735,11 @@ int ciMethod::scale_count(int count, float prof_factor) { // Return true if the method is an instance of one of the two // signature-polymorphic MethodHandle methods, invokeExact or invokeGeneric. bool ciMethod::is_method_handle_invoke() const { - if (!is_loaded()) return false; + if (!is_loaded()) { + bool flag = (holder()->name() == ciSymbol::java_dyn_MethodHandle() && + methodOopDesc::is_method_handle_invoke_name(name()->sid())); + return flag; + } VM_ENTRY_MARK; return get_methodOop()->is_method_handle_invoke(); } @@ -975,7 +979,7 @@ int ciMethod::instructions_size(int comp_level) { GUARDED_VM_ENTRY( nmethod* code = get_methodOop()->code(); if (code != NULL && (comp_level == CompLevel_any || comp_level == code->comp_level())) { - return code->code_end() - code->verified_entry_point(); + return code->insts_end() - code->verified_entry_point(); } return 0; ) diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp index 78c9dc11103..96388d07be9 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsCollectorPolicy.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2010, 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 @@ -39,7 +39,7 @@ void ConcurrentMarkSweepPolicy::initialize_generations() { if (_generations == NULL) vm_exit_during_initialization("Unable to allocate gen spec"); - if (UseParNewGC && ParallelGCThreads > 0) { + if (ParNewGeneration::in_use()) { if (UseAdaptiveSizePolicy) { _generations[0] = new GenerationSpec(Generation::ASParNew, _initial_gen0_size, _max_gen0_size); @@ -79,7 +79,7 @@ void ConcurrentMarkSweepPolicy::initialize_size_policy(size_t init_eden_size, void ConcurrentMarkSweepPolicy::initialize_gc_policy_counters() { // initialize the policy counters - 2 collectors, 3 generations - if (UseParNewGC && ParallelGCThreads > 0) { + if (ParNewGeneration::in_use()) { _gc_policy_counters = new GCPolicyCounters("ParNew:CMS", 2, 3); } else { @@ -102,7 +102,7 @@ void ASConcurrentMarkSweepPolicy::initialize_gc_policy_counters() { assert(size_policy() != NULL, "A size policy is required"); // initialize the policy counters - 2 collectors, 3 generations - if (UseParNewGC && ParallelGCThreads > 0) { + if (ParNewGeneration::in_use()) { _gc_policy_counters = new CMSGCAdaptivePolicyCounters("ParNew:CMS", 2, 3, size_policy()); } diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.cpp index 9d5929d0c81..f04b8a46772 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2010, 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 @@ -50,6 +50,18 @@ HeapWord* CMSPermGen::mem_allocate(size_t size) { } } +HeapWord* CMSPermGen::request_expand_and_allocate(Generation* gen, + size_t size, + GCCause::Cause prev_cause /* ignored */) { + HeapWord* obj = gen->expand_and_allocate(size, false); + if (gen->capacity() >= _capacity_expansion_limit) { + set_capacity_expansion_limit(gen->capacity() + MaxPermHeapExpansion); + assert(((ConcurrentMarkSweepGeneration*)gen)->should_concurrent_collect(), + "Should kick off a collection if one not in progress"); + } + return obj; +} + void CMSPermGen::compute_new_size() { _gen->compute_new_size(); } diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.hpp index 3c9d9f7f767..fd675623ea8 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/cmsPermGen.hpp @@ -33,6 +33,10 @@ class CMSPermGen: public PermGen { // The "generation" view. ConcurrentMarkSweepGeneration* _gen; + // Override default implementation from PermGen + virtual HeapWord* request_expand_and_allocate(Generation* gen, size_t size, + GCCause::Cause prev_cause); + public: CMSPermGen(ReservedSpace rs, size_t initial_byte_size, CardTableRS* ct, FreeBlockDictionary::DictionaryChoice); diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp index 7c1d13de3f8..847b56d0b2d 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp @@ -124,7 +124,8 @@ CompactibleFreeListSpace::CompactibleFreeListSpace(BlockOffsetSharedArray* bs, checkFreeListConsistency(); // Initialize locks for parallel case. - if (ParallelGCThreads > 0) { + + if (CollectedHeap::use_parallel_gc_threads()) { for (size_t i = IndexSetStart; i < IndexSetSize; i += IndexSetStride) { _indexedFreeListParLocks[i] = new Mutex(Mutex::leaf - 1, // == ExpandHeap_lock - 1 "a freelist par lock", @@ -1071,7 +1072,8 @@ bool CompactibleFreeListSpace::block_is_obj(const HeapWord* p) const { // at address below "p" in finding the object that contains "p" // and those objects (if garbage) may have been modified to hold // live range information. - // assert(ParallelGCThreads > 0 || _bt.block_start(p) == p, "Should be a block boundary"); + // assert(CollectedHeap::use_parallel_gc_threads() || _bt.block_start(p) == p, + // "Should be a block boundary"); if (FreeChunk::indicatesFreeChunk(p)) return false; klassOop k = oop(p)->klass_or_null(); if (k != NULL) { @@ -2932,7 +2934,9 @@ initialize_sequential_subtasks_for_rescan(int n_threads) { "n_tasks calculation incorrect"); SequentialSubTasksDone* pst = conc_par_seq_tasks(); assert(!pst->valid(), "Clobbering existing data?"); - pst->set_par_threads(n_threads); + // Sets the condition for completion of the subtask (how many threads + // need to finish in order to be done). + pst->set_n_threads(n_threads); pst->set_n_tasks((int)n_tasks); } @@ -2972,6 +2976,8 @@ initialize_sequential_subtasks_for_marking(int n_threads, "n_tasks calculation incorrect"); SequentialSubTasksDone* pst = conc_par_seq_tasks(); assert(!pst->valid(), "Clobbering existing data?"); - pst->set_par_threads(n_threads); + // Sets the condition for completion of the subtask (how many threads + // need to finish in order to be done). + pst->set_n_threads(n_threads); pst->set_n_tasks((int)n_tasks); } diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp index aab22dacf17..2573d31a808 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp @@ -195,7 +195,7 @@ ConcurrentMarkSweepGeneration::ConcurrentMarkSweepGeneration( "Offset of FreeChunk::_prev within FreeChunk must match" " that of OopDesc::_klass within OopDesc"); ) - if (ParallelGCThreads > 0) { + if (CollectedHeap::use_parallel_gc_threads()) { typedef CMSParGCThreadState* CMSParGCThreadStatePtr; _par_gc_thread_states = NEW_C_HEAP_ARRAY(CMSParGCThreadStatePtr, ParallelGCThreads); @@ -540,8 +540,6 @@ CMSCollector::CMSCollector(ConcurrentMarkSweepGeneration* cmsGen, _is_alive_closure(_span, &_markBitMap), _restart_addr(NULL), _overflow_list(NULL), - _preserved_oop_stack(NULL), - _preserved_mark_stack(NULL), _stats(cmsGen), _eden_chunk_array(NULL), // may be set in ctor body _eden_chunk_capacity(0), // -- ditto -- @@ -616,7 +614,7 @@ CMSCollector::CMSCollector(ConcurrentMarkSweepGeneration* cmsGen, } // Support for multi-threaded concurrent phases - if (ParallelGCThreads > 0 && CMSConcurrentMTEnabled) { + if (CollectedHeap::use_parallel_gc_threads() && CMSConcurrentMTEnabled) { if (FLAG_IS_DEFAULT(ConcGCThreads)) { // just for now FLAG_SET_DEFAULT(ConcGCThreads, (ParallelGCThreads + 3)/4); @@ -628,6 +626,8 @@ CMSCollector::CMSCollector(ConcurrentMarkSweepGeneration* cmsGen, warning("GC/CMS: _conc_workers allocation failure: " "forcing -CMSConcurrentMTEnabled"); CMSConcurrentMTEnabled = false; + } else { + _conc_workers->initialize_workers(); } } else { CMSConcurrentMTEnabled = false; @@ -936,7 +936,7 @@ void ConcurrentMarkSweepGeneration::reset_after_compaction() { // along with all the other pointers into the heap but // compaction is expected to be a rare event with // a heap using cms so don't do it without seeing the need. - if (ParallelGCThreads > 0) { + if (CollectedHeap::use_parallel_gc_threads()) { for (uint i = 0; i < ParallelGCThreads; i++) { _par_gc_thread_states[i]->promo.reset(); } @@ -2630,7 +2630,8 @@ void CMSCollector::gc_prologue(bool full) { // Should call gc_prologue_work() for all cms gens we are responsible for bool registerClosure = _collectorState >= Marking && _collectorState < Sweeping; - ModUnionClosure* muc = ParallelGCThreads > 0 ? &_modUnionClosurePar + ModUnionClosure* muc = CollectedHeap::use_parallel_gc_threads() ? + &_modUnionClosurePar : &_modUnionClosure; _cmsGen->gc_prologue_work(full, registerClosure, muc); _permGen->gc_prologue_work(full, registerClosure, muc); @@ -2731,7 +2732,7 @@ void ConcurrentMarkSweepGeneration::gc_epilogue(bool full) { collector()->gc_epilogue(full); // Also reset promotion tracking in par gc thread states. - if (ParallelGCThreads > 0) { + if (CollectedHeap::use_parallel_gc_threads()) { for (uint i = 0; i < ParallelGCThreads; i++) { _par_gc_thread_states[i]->promo.stopTrackingPromotions(i); } @@ -3263,6 +3264,7 @@ HeapWord* ConcurrentMarkSweepGeneration::expand_and_allocate(size_t word_size, bool tlab, bool parallel) { + CMSSynchronousYieldRequest yr; assert(!tlab, "Can't deal with TLAB allocation"); MutexLockerEx x(freelistLock(), Mutex::_no_safepoint_check_flag); expand(word_size*HeapWordSize, MinHeapDeltaBytes, @@ -3709,35 +3711,42 @@ class CMSConcMarkingTask; class CMSConcMarkingTerminator: public ParallelTaskTerminator { CMSCollector* _collector; CMSConcMarkingTask* _task; - bool _yield; - protected: - virtual void yield(); public: + virtual void yield(); + // "n_threads" is the number of threads to be terminated. // "queue_set" is a set of work queues of other threads. // "collector" is the CMS collector associated with this task terminator. // "yield" indicates whether we need the gang as a whole to yield. - CMSConcMarkingTerminator(int n_threads, TaskQueueSetSuper* queue_set, - CMSCollector* collector, bool yield) : + CMSConcMarkingTerminator(int n_threads, TaskQueueSetSuper* queue_set, CMSCollector* collector) : ParallelTaskTerminator(n_threads, queue_set), - _collector(collector), - _yield(yield) { } + _collector(collector) { } void set_task(CMSConcMarkingTask* task) { _task = task; } }; +class CMSConcMarkingTerminatorTerminator: public TerminatorTerminator { + CMSConcMarkingTask* _task; + public: + bool should_exit_termination(); + void set_task(CMSConcMarkingTask* task) { + _task = task; + } +}; + // MT Concurrent Marking Task class CMSConcMarkingTask: public YieldingFlexibleGangTask { CMSCollector* _collector; - YieldingFlexibleWorkGang* _workers; // the whole gang int _n_workers; // requested/desired # workers bool _asynch; bool _result; CompactibleFreeListSpace* _cms_space; CompactibleFreeListSpace* _perm_space; - HeapWord* _global_finger; + char _pad_front[64]; // padding to ... + HeapWord* _global_finger; // ... avoid sharing cache line + char _pad_back[64]; HeapWord* _restart_addr; // Exposed here for yielding support @@ -3745,28 +3754,30 @@ class CMSConcMarkingTask: public YieldingFlexibleGangTask { // The per thread work queues, available here for stealing OopTaskQueueSet* _task_queues; + + // Termination (and yielding) support CMSConcMarkingTerminator _term; + CMSConcMarkingTerminatorTerminator _term_term; public: CMSConcMarkingTask(CMSCollector* collector, CompactibleFreeListSpace* cms_space, CompactibleFreeListSpace* perm_space, - bool asynch, int n_workers, + bool asynch, YieldingFlexibleWorkGang* workers, OopTaskQueueSet* task_queues): YieldingFlexibleGangTask("Concurrent marking done multi-threaded"), _collector(collector), _cms_space(cms_space), _perm_space(perm_space), - _asynch(asynch), _n_workers(n_workers), _result(true), - _workers(workers), _task_queues(task_queues), - _term(n_workers, task_queues, _collector, asynch), + _asynch(asynch), _n_workers(0), _result(true), + _task_queues(task_queues), + _term(_n_workers, task_queues, _collector), _bit_map_lock(collector->bitMapLock()) { - assert(n_workers <= workers->total_workers(), - "Else termination won't work correctly today"); // XXX FIX ME! - _requested_size = n_workers; + _requested_size = _n_workers; _term.set_task(this); + _term_term.set_task(this); assert(_cms_space->bottom() < _perm_space->bottom(), "Finger incorrectly initialized below"); _restart_addr = _global_finger = _cms_space->bottom(); @@ -3781,7 +3792,16 @@ class CMSConcMarkingTask: public YieldingFlexibleGangTask { CMSConcMarkingTerminator* terminator() { return &_term; } + virtual void set_for_termination(int active_workers) { + terminator()->reset_for_reuse(active_workers); + } + void work(int i); + bool should_yield() { + return ConcurrentMarkSweepThread::should_yield() + && !_collector->foregroundGCIsActive() + && _asynch; + } virtual void coordinator_yield(); // stuff done by coordinator bool result() { return _result; } @@ -3803,10 +3823,17 @@ class CMSConcMarkingTask: public YieldingFlexibleGangTask { void bump_global_finger(HeapWord* f); }; +bool CMSConcMarkingTerminatorTerminator::should_exit_termination() { + assert(_task != NULL, "Error"); + return _task->yielding(); + // Note that we do not need the disjunct || _task->should_yield() above + // because we want terminating threads to yield only if the task + // is already in the midst of yielding, which happens only after at least one + // thread has yielded. +} + void CMSConcMarkingTerminator::yield() { - if (ConcurrentMarkSweepThread::should_yield() && - !_collector->foregroundGCIsActive() && - _yield) { + if (_task->should_yield()) { _task->yield(); } else { ParallelTaskTerminator::yield(); @@ -4031,6 +4058,7 @@ void CMSConcMarkingTask::do_scan_and_mark(int i, CompactibleFreeListSpace* sp) { class Par_ConcMarkingClosure: public Par_KlassRememberingOopClosure { private: + CMSConcMarkingTask* _task; MemRegion _span; CMSBitMap* _bit_map; CMSMarkStack* _overflow_stack; @@ -4038,11 +4066,12 @@ class Par_ConcMarkingClosure: public Par_KlassRememberingOopClosure { protected: DO_OOP_WORK_DEFN public: - Par_ConcMarkingClosure(CMSCollector* collector, OopTaskQueue* work_queue, + Par_ConcMarkingClosure(CMSCollector* collector, CMSConcMarkingTask* task, OopTaskQueue* work_queue, CMSBitMap* bit_map, CMSMarkStack* overflow_stack, CMSMarkStack* revisit_stack): Par_KlassRememberingOopClosure(collector, NULL, revisit_stack), - _span(_collector->_span), + _task(task), + _span(collector->_span), _work_queue(work_queue), _bit_map(bit_map), _overflow_stack(overflow_stack) @@ -4051,6 +4080,11 @@ class Par_ConcMarkingClosure: public Par_KlassRememberingOopClosure { virtual void do_oop(narrowOop* p); void trim_queue(size_t max); void handle_stack_overflow(HeapWord* lost); + void do_yield_check() { + if (_task->should_yield()) { + _task->yield(); + } + } }; // Grey object scanning during work stealing phase -- @@ -4094,6 +4128,7 @@ void Par_ConcMarkingClosure::do_oop(oop obj) { handle_stack_overflow(addr); } } // Else, some other thread got there first + do_yield_check(); } } @@ -4109,6 +4144,7 @@ void Par_ConcMarkingClosure::trim_queue(size_t max) { assert(_span.contains((HeapWord*)new_oop), "Not in span"); assert(new_oop->is_parsable(), "Should be parsable"); new_oop->oop_iterate(this); // do_oop() above + do_yield_check(); } } } @@ -4136,7 +4172,7 @@ void CMSConcMarkingTask::do_work_steal(int i) { CMSMarkStack* ovflw = &(_collector->_markStack); CMSMarkStack* revisit = &(_collector->_revisitStack); int* seed = _collector->hash_seed(i); - Par_ConcMarkingClosure cl(_collector, work_q, bm, ovflw, revisit); + Par_ConcMarkingClosure cl(_collector, this, work_q, bm, ovflw, revisit); while (true) { cl.trim_queue(0); assert(work_q->size() == 0, "Should have been emptied above"); @@ -4149,9 +4185,11 @@ void CMSConcMarkingTask::do_work_steal(int i) { assert(obj_to_scan->is_oop(), "Should be an oop"); assert(bm->isMarked((HeapWord*)obj_to_scan), "Grey object"); obj_to_scan->oop_iterate(&cl); - } else if (terminator()->offer_termination()) { + } else if (terminator()->offer_termination(&_term_term)) { assert(work_q->size() == 0, "Impossible!"); break; + } else if (yielding() || should_yield()) { + yield(); } } } @@ -4220,9 +4258,12 @@ bool CMSCollector::do_marking_mt(bool asynch) { CompactibleFreeListSpace* cms_space = _cmsGen->cmsSpace(); CompactibleFreeListSpace* perm_space = _permGen->cmsSpace(); - CMSConcMarkingTask tsk(this, cms_space, perm_space, - asynch, num_workers /* number requested XXX */, - conc_workers(), task_queues()); + CMSConcMarkingTask tsk(this, + cms_space, + perm_space, + asynch, + conc_workers(), + task_queues()); // Since the actual number of workers we get may be different // from the number we requested above, do we need to do anything different @@ -4326,6 +4367,10 @@ void CMSCollector::preclean() { verify_overflow_empty(); _abort_preclean = false; if (CMSPrecleaningEnabled) { + // Precleaning is currently not MT but the reference processor + // may be set for MT. Disable it temporarily here. + ReferenceProcessor* rp = ref_processor(); + ReferenceProcessorMTProcMutator z(rp, false); _eden_chunk_index = 0; size_t used = get_eden_used(); size_t capacity = get_eden_capacity(); @@ -4918,7 +4963,7 @@ void CMSCollector::checkpointRootsFinalWork(bool asynch, // dirtied since the first checkpoint in this GC cycle and prior to // the most recent young generation GC, minus those cleaned up by the // concurrent precleaning. - if (CMSParallelRemarkEnabled && ParallelGCThreads > 0) { + if (CMSParallelRemarkEnabled && CollectedHeap::use_parallel_gc_threads()) { TraceTime t("Rescan (parallel) ", PrintGCDetails, false, gclog_or_tty); do_remark_parallel(); } else { @@ -5012,7 +5057,6 @@ void CMSCollector::checkpointRootsFinalWork(bool asynch, // Parallel remark task class CMSParRemarkTask: public AbstractGangTask { CMSCollector* _collector; - WorkGang* _workers; int _n_workers; CompactibleFreeListSpace* _cms_space; CompactibleFreeListSpace* _perm_space; @@ -5025,21 +5069,21 @@ class CMSParRemarkTask: public AbstractGangTask { CMSParRemarkTask(CMSCollector* collector, CompactibleFreeListSpace* cms_space, CompactibleFreeListSpace* perm_space, - int n_workers, WorkGang* workers, + int n_workers, FlexibleWorkGang* workers, OopTaskQueueSet* task_queues): AbstractGangTask("Rescan roots and grey objects in parallel"), _collector(collector), _cms_space(cms_space), _perm_space(perm_space), _n_workers(n_workers), - _workers(workers), _task_queues(task_queues), - _term(workers->total_workers(), task_queues) { } + _term(n_workers, task_queues) { } OopTaskQueueSet* task_queues() { return _task_queues; } OopTaskQueue* work_queue(int i) { return task_queues()->queue(i); } ParallelTaskTerminator* terminator() { return &_term; } + int n_workers() { return _n_workers; } void work(int i); @@ -5057,6 +5101,11 @@ class CMSParRemarkTask: public AbstractGangTask { void do_work_steal(int i, Par_MarkRefsIntoAndScanClosure* cl, int* seed); }; +// work_queue(i) is passed to the closure +// Par_MarkRefsIntoAndScanClosure. The "i" parameter +// also is passed to do_dirty_card_rescan_tasks() and to +// do_work_steal() to select the i-th task_queue. + void CMSParRemarkTask::work(int i) { elapsedTimer _timer; ResourceMark rm; @@ -5128,6 +5177,7 @@ void CMSParRemarkTask::work(int i) { // Do the rescan tasks for each of the two spaces // (cms_space and perm_space) in turn. + // "i" is passed to select the "i-th" task_queue do_dirty_card_rescan_tasks(_cms_space, i, &par_mrias_cl); do_dirty_card_rescan_tasks(_perm_space, i, &par_mrias_cl); _timer.stop(); @@ -5150,6 +5200,7 @@ void CMSParRemarkTask::work(int i) { } } +// Note that parameter "i" is not used. void CMSParRemarkTask::do_young_space_rescan(int i, Par_MarkRefsIntoAndScanClosure* cl, ContiguousSpace* space, @@ -5309,8 +5360,13 @@ CMSParRemarkTask::do_work_steal(int i, Par_MarkRefsIntoAndScanClosure* cl, size_t num_from_overflow_list = MIN2((size_t)(work_q->max_elems() - work_q->size())/4, (size_t)ParGCDesiredObjsFromOverflowList); // Now check if there's any work in the overflow list + // Passing ParallelGCThreads as the third parameter, no_of_gc_threads, + // only affects the number of attempts made to get work from the + // overflow list and does not affect the number of workers. Just + // pass ParallelGCThreads so this behavior is unchanged. if (_collector->par_take_from_overflow_list(num_from_overflow_list, - work_q)) { + work_q, + ParallelGCThreads)) { // found something in global overflow list; // not yet ready to go stealing work from others. // We'd like to assert(work_q->size() != 0, ...) @@ -5367,11 +5423,12 @@ void CMSCollector::reset_survivor_plab_arrays() { // Merge the per-thread plab arrays into the global survivor chunk // array which will provide the partitioning of the survivor space // for CMS rescan. -void CMSCollector::merge_survivor_plab_arrays(ContiguousSpace* surv) { +void CMSCollector::merge_survivor_plab_arrays(ContiguousSpace* surv, + int no_of_gc_threads) { assert(_survivor_plab_array != NULL, "Error"); assert(_survivor_chunk_array != NULL, "Error"); assert(_collectorState == FinalMarking, "Error"); - for (uint j = 0; j < ParallelGCThreads; j++) { + for (int j = 0; j < no_of_gc_threads; j++) { _cursor[j] = 0; } HeapWord* top = surv->top(); @@ -5379,7 +5436,7 @@ void CMSCollector::merge_survivor_plab_arrays(ContiguousSpace* surv) { for (i = 0; i < _survivor_chunk_capacity; i++) { // all sca entries HeapWord* min_val = top; // Higher than any PLAB address uint min_tid = 0; // position of min_val this round - for (uint j = 0; j < ParallelGCThreads; j++) { + for (int j = 0; j < no_of_gc_threads; j++) { ChunkArray* cur_sca = &_survivor_plab_array[j]; if (_cursor[j] == cur_sca->end()) { continue; @@ -5413,7 +5470,7 @@ void CMSCollector::merge_survivor_plab_arrays(ContiguousSpace* surv) { // Verify that we used up all the recorded entries #ifdef ASSERT size_t total = 0; - for (uint j = 0; j < ParallelGCThreads; j++) { + for (int j = 0; j < no_of_gc_threads; j++) { assert(_cursor[j] == _survivor_plab_array[j].end(), "Ctl pt invariant"); total += _cursor[j]; } @@ -5448,13 +5505,15 @@ initialize_sequential_subtasks_for_young_gen_rescan(int n_threads) { // Each valid entry in [0, _eden_chunk_index) represents a task. size_t n_tasks = _eden_chunk_index + 1; assert(n_tasks == 1 || _eden_chunk_array != NULL, "Error"); - pst->set_par_threads(n_threads); + // Sets the condition for completion of the subtask (how many threads + // need to finish in order to be done). + pst->set_n_threads(n_threads); pst->set_n_tasks((int)n_tasks); } // Merge the survivor plab arrays into _survivor_chunk_array if (_survivor_plab_array != NULL) { - merge_survivor_plab_arrays(dng->from()); + merge_survivor_plab_arrays(dng->from(), n_threads); } else { assert(_survivor_chunk_index == 0, "Error"); } @@ -5463,7 +5522,9 @@ initialize_sequential_subtasks_for_young_gen_rescan(int n_threads) { { SequentialSubTasksDone* pst = dng->to()->par_seq_tasks(); assert(!pst->valid(), "Clobbering existing data?"); - pst->set_par_threads(n_threads); + // Sets the condition for completion of the subtask (how many threads + // need to finish in order to be done). + pst->set_n_threads(n_threads); pst->set_n_tasks(1); assert(pst->valid(), "Error"); } @@ -5474,7 +5535,9 @@ initialize_sequential_subtasks_for_young_gen_rescan(int n_threads) { assert(!pst->valid(), "Clobbering existing data?"); size_t n_tasks = _survivor_chunk_index + 1; assert(n_tasks == 1 || _survivor_chunk_array != NULL, "Error"); - pst->set_par_threads(n_threads); + // Sets the condition for completion of the subtask (how many threads + // need to finish in order to be done). + pst->set_n_threads(n_threads); pst->set_n_tasks((int)n_tasks); assert(pst->valid(), "Error"); } @@ -5483,7 +5546,7 @@ initialize_sequential_subtasks_for_young_gen_rescan(int n_threads) { // Parallel version of remark void CMSCollector::do_remark_parallel() { GenCollectedHeap* gch = GenCollectedHeap::heap(); - WorkGang* workers = gch->workers(); + FlexibleWorkGang* workers = gch->workers(); assert(workers != NULL, "Need parallel worker threads."); int n_workers = workers->total_workers(); CompactibleFreeListSpace* cms_space = _cmsGen->cmsSpace(); @@ -5636,13 +5699,11 @@ void CMSCollector::do_remark_non_parallel() { //////////////////////////////////////////////////////// // Parallel Reference Processing Task Proxy Class //////////////////////////////////////////////////////// -class CMSRefProcTaskProxy: public AbstractGangTask { +class CMSRefProcTaskProxy: public AbstractGangTaskWOopQueues { typedef AbstractRefProcTaskExecutor::ProcessTask ProcessTask; CMSCollector* _collector; CMSBitMap* _mark_bit_map; const MemRegion _span; - OopTaskQueueSet* _task_queues; - ParallelTaskTerminator _term; ProcessTask& _task; public: @@ -5650,24 +5711,21 @@ public: CMSCollector* collector, const MemRegion& span, CMSBitMap* mark_bit_map, - int total_workers, + AbstractWorkGang* workers, OopTaskQueueSet* task_queues): - AbstractGangTask("Process referents by policy in parallel"), + AbstractGangTaskWOopQueues("Process referents by policy in parallel", + task_queues), _task(task), - _collector(collector), _span(span), _mark_bit_map(mark_bit_map), - _task_queues(task_queues), - _term(total_workers, task_queues) + _collector(collector), _span(span), _mark_bit_map(mark_bit_map) { assert(_collector->_span.equals(_span) && !_span.is_empty(), "Inconsistency in _span"); } - OopTaskQueueSet* task_queues() { return _task_queues; } + OopTaskQueueSet* task_queues() { return queues(); } OopTaskQueue* work_queue(int i) { return task_queues()->queue(i); } - ParallelTaskTerminator* terminator() { return &_term; } - void do_work_steal(int i, CMSParDrainMarkingStackClosure* drain, CMSParKeepAliveClosure* keep_alive, @@ -5739,8 +5797,13 @@ void CMSRefProcTaskProxy::do_work_steal(int i, size_t num_from_overflow_list = MIN2((size_t)(work_q->max_elems() - work_q->size())/4, (size_t)ParGCDesiredObjsFromOverflowList); // Now check if there's any work in the overflow list + // Passing ParallelGCThreads as the third parameter, no_of_gc_threads, + // only affects the number of attempts made to get work from the + // overflow list and does not affect the number of workers. Just + // pass ParallelGCThreads so this behavior is unchanged. if (_collector->par_take_from_overflow_list(num_from_overflow_list, - work_q)) { + work_q, + ParallelGCThreads)) { // Found something in global overflow list; // not yet ready to go stealing work from others. // We'd like to assert(work_q->size() != 0, ...) @@ -5773,13 +5836,12 @@ void CMSRefProcTaskProxy::do_work_steal(int i, void CMSRefProcTaskExecutor::execute(ProcessTask& task) { GenCollectedHeap* gch = GenCollectedHeap::heap(); - WorkGang* workers = gch->workers(); + FlexibleWorkGang* workers = gch->workers(); assert(workers != NULL, "Need parallel worker threads."); - int n_workers = workers->total_workers(); CMSRefProcTaskProxy rp_task(task, &_collector, _collector.ref_processor()->span(), _collector.markBitMap(), - n_workers, _collector.task_queues()); + workers, _collector.task_queues()); workers->run_task(&rp_task); } @@ -5787,7 +5849,7 @@ void CMSRefProcTaskExecutor::execute(EnqueueTask& task) { GenCollectedHeap* gch = GenCollectedHeap::heap(); - WorkGang* workers = gch->workers(); + FlexibleWorkGang* workers = gch->workers(); assert(workers != NULL, "Need parallel worker threads."); CMSRefEnqueueTaskProxy enq_task(task); workers->run_task(&enq_task); @@ -5814,6 +5876,14 @@ void CMSCollector::refProcessingWork(bool asynch, bool clear_all_soft_refs) { { TraceTime t("weak refs processing", PrintGCDetails, false, gclog_or_tty); if (rp->processing_is_mt()) { + // Set the degree of MT here. If the discovery is done MT, there + // may have been a different number of threads doing the discovery + // and a different number of discovered lists may have Ref objects. + // That is OK as long as the Reference lists are balanced (see + // balance_all_queues() and balance_queues()). + + + rp->set_mt_degree(ParallelGCThreads); CMSRefProcTaskExecutor task_executor(*this); rp->process_discovered_references(&_is_alive_closure, &cmsKeepAliveClosure, @@ -5874,6 +5944,7 @@ void CMSCollector::refProcessingWork(bool asynch, bool clear_all_soft_refs) { rp->set_enqueuing_is_done(true); if (rp->processing_is_mt()) { + rp->balance_all_queues(); CMSRefProcTaskExecutor task_executor(*this); rp->enqueue_discovered_references(&task_executor); } else { @@ -8708,7 +8779,8 @@ bool CMSCollector::take_from_overflow_list(size_t num, CMSMarkStack* stack) { // similar changes might be needed. // CR 6797058 has been filed to consolidate the common code. bool CMSCollector::par_take_from_overflow_list(size_t num, - OopTaskQueue* work_q) { + OopTaskQueue* work_q, + int no_of_gc_threads) { assert(work_q->size() == 0, "First empty local work queue"); assert(num < work_q->max_elems(), "Can't bite more than we can chew"); if (_overflow_list == NULL) { @@ -8717,7 +8789,9 @@ bool CMSCollector::par_take_from_overflow_list(size_t num, // Grab the entire list; we'll put back a suffix oop prefix = (oop)Atomic::xchg_ptr(BUSY, &_overflow_list); Thread* tid = Thread::current(); - size_t CMSOverflowSpinCount = (size_t)ParallelGCThreads; + // Before "no_of_gc_threads" was introduced CMSOverflowSpinCount was + // set to ParallelGCThreads. + size_t CMSOverflowSpinCount = (size_t) no_of_gc_threads; // was ParallelGCThreads; size_t sleep_time_millis = MAX2((size_t)1, num/100); // If the list is busy, we spin for a short while, // sleeping between attempts to get the list. @@ -8867,23 +8941,10 @@ void CMSCollector::par_push_on_overflow_list(oop p) { // failures where possible, thus, incrementally hardening the VM // in such low resource situations. void CMSCollector::preserve_mark_work(oop p, markOop m) { - if (_preserved_oop_stack == NULL) { - assert(_preserved_mark_stack == NULL, - "bijection with preserved_oop_stack"); - // Allocate the stacks - _preserved_oop_stack = new (ResourceObj::C_HEAP) - GrowableArray(PreserveMarkStackSize, true); - _preserved_mark_stack = new (ResourceObj::C_HEAP) - GrowableArray(PreserveMarkStackSize, true); - if (_preserved_oop_stack == NULL || _preserved_mark_stack == NULL) { - vm_exit_out_of_memory(2* PreserveMarkStackSize * sizeof(oop) /* punt */, - "Preserved Mark/Oop Stack for CMS (C-heap)"); - } - } - _preserved_oop_stack->push(p); - _preserved_mark_stack->push(m); + _preserved_oop_stack.push(p); + _preserved_mark_stack.push(m); assert(m == p->mark(), "Mark word changed"); - assert(_preserved_oop_stack->length() == _preserved_mark_stack->length(), + assert(_preserved_oop_stack.size() == _preserved_mark_stack.size(), "bijection"); } @@ -8925,42 +8986,30 @@ void CMSCollector::par_preserve_mark_if_necessary(oop p) { // effect on performance so great that this will // likely just be in the noise anyway. void CMSCollector::restore_preserved_marks_if_any() { - if (_preserved_oop_stack == NULL) { - assert(_preserved_mark_stack == NULL, - "bijection with preserved_oop_stack"); - return; - } - assert(SafepointSynchronize::is_at_safepoint(), "world should be stopped"); assert(Thread::current()->is_ConcurrentGC_thread() || Thread::current()->is_VM_thread(), "should be single-threaded"); + assert(_preserved_oop_stack.size() == _preserved_mark_stack.size(), + "bijection"); - int length = _preserved_oop_stack->length(); - assert(_preserved_mark_stack->length() == length, "bijection"); - for (int i = 0; i < length; i++) { - oop p = _preserved_oop_stack->at(i); + while (!_preserved_oop_stack.is_empty()) { + oop p = _preserved_oop_stack.pop(); assert(p->is_oop(), "Should be an oop"); assert(_span.contains(p), "oop should be in _span"); assert(p->mark() == markOopDesc::prototype(), "Set when taken from overflow list"); - markOop m = _preserved_mark_stack->at(i); + markOop m = _preserved_mark_stack.pop(); p->set_mark(m); } - _preserved_mark_stack->clear(); - _preserved_oop_stack->clear(); - assert(_preserved_mark_stack->is_empty() && - _preserved_oop_stack->is_empty(), + assert(_preserved_mark_stack.is_empty() && _preserved_oop_stack.is_empty(), "stacks were cleared above"); } #ifndef PRODUCT bool CMSCollector::no_preserved_marks() const { - return ( ( _preserved_mark_stack == NULL - && _preserved_oop_stack == NULL) - || ( _preserved_mark_stack->is_empty() - && _preserved_oop_stack->is_empty())); + return _preserved_mark_stack.is_empty() && _preserved_oop_stack.is_empty(); } #endif @@ -9256,4 +9305,3 @@ TraceCMSMemoryManagerStats::TraceCMSMemoryManagerStats(): TraceMemoryManagerStat true /* recordGCEndTime */, true /* countCollection */ ); } - diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp index 3302d78a906..7a0670734e4 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.hpp @@ -537,8 +537,8 @@ class CMSCollector: public CHeapObj { // The following array-pair keeps track of mark words // displaced for accomodating overflow list above. // This code will likely be revisited under RFE#4922830. - GrowableArray* _preserved_oop_stack; - GrowableArray* _preserved_mark_stack; + Stack _preserved_oop_stack; + Stack _preserved_mark_stack; int* _hash_seed; @@ -729,7 +729,9 @@ class CMSCollector: public CHeapObj { // Support for marking stack overflow handling bool take_from_overflow_list(size_t num, CMSMarkStack* to_stack); - bool par_take_from_overflow_list(size_t num, OopTaskQueue* to_work_q); + bool par_take_from_overflow_list(size_t num, + OopTaskQueue* to_work_q, + int no_of_gc_threads); void push_on_overflow_list(oop p); void par_push_on_overflow_list(oop p); // the following is, obviously, not, in general, "MT-stable" @@ -768,7 +770,7 @@ class CMSCollector: public CHeapObj { void abortable_preclean(); // Preclean while looking for possible abort void initialize_sequential_subtasks_for_young_gen_rescan(int i); // Helper function for above; merge-sorts the per-thread plab samples - void merge_survivor_plab_arrays(ContiguousSpace* surv); + void merge_survivor_plab_arrays(ContiguousSpace* surv, int no_of_gc_threads); // Resets (i.e. clears) the per-thread plab sample vectors void reset_survivor_plab_arrays(); diff --git a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp index e83573ca0c0..26eac7c37c0 100644 --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepThread.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2010, 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 @@ -123,24 +123,44 @@ class ConcurrentMarkSweepThread: public ConcurrentGCThread { // or given timeout, whichever is earlier. void wait_on_cms_lock(long t); // milliseconds - // The CMS thread will yield during the work portion of it's cycle + // The CMS thread will yield during the work portion of its cycle // only when requested to. Both synchronous and asychronous requests - // are provided. A synchronous request is used for young gen - // collections and direct allocations. The requesting thread increments - // pending_yields at the beginning of an operation, and decrements it when - // the operation is completed. The CMS thread yields when pending_yields - // is positive. An asynchronous request is used by iCMS in the stop_icms() - // operation. A single yield satisfies the outstanding asynch yield requests. - // The requesting thread increments both pending_yields and pending_decrements. - // After yielding, the CMS thread decrements both by the amount in - // pending_decrements. + // are provided: + // (1) A synchronous request is used for young gen collections and + // for direct allocations. The requesting thread increments + // _pending_yields at the beginning of an operation, and decrements + // _pending_yields when that operation is completed. + // In turn, the CMS thread yields when _pending_yields is positive, + // and continues to yield until the value reverts to 0. + // (2) An asynchronous request, on the other hand, is used by iCMS + // for the stop_icms() operation. A single yield satisfies all of + // the outstanding asynch yield requests, of which there may + // occasionally be several in close succession. To accomplish + // this, an asynch-requesting thread atomically increments both + // _pending_yields and _pending_decrements. An asynchr requesting + // thread does not wait and "acknowledge" completion of an operation + // and deregister the request, like the synchronous version described + // above does. In turn, after yielding, the CMS thread decrements both + // _pending_yields and _pending_decrements by the value seen in + // _pending_decrements before the decrement. + // NOTE: The above scheme is isomorphic to having two request counters, + // one for async requests and one for sync requests, and for the CMS thread + // to check the sum of the two counters to decide whether it should yield + // and to clear only the async counter when it yields. However, it turns out + // to be more efficient for CMS code to just check a single counter + // _pending_yields that holds the sum (of both sync and async requests), and + // a second counter _pending_decrements that only holds the async requests, + // for greater efficiency, since in a typical CMS run, there are many more + // pontential (i.e. static) yield points than there are actual + // (i.e. dynamic) yields because of requests, which are few and far between. + // // Note that, while "_pending_yields >= _pending_decrements" is an invariant, // we cannot easily test that invariant, since the counters are manipulated via // atomic instructions without explicit locking and we cannot read // the two counters atomically together: one suggestion is to // use (for example) 16-bit counters so as to be able to read the // two counters atomically even on 32-bit platforms. Notice that - // the second assert in acknowledge_yield_request() does indeed + // the second assert in acknowledge_yield_request() below does indeed // check a form of the above invariant, albeit indirectly. static void increment_pending_yields() { @@ -152,6 +172,7 @@ class ConcurrentMarkSweepThread: public ConcurrentGCThread { assert(_pending_yields >= 0, "can't be negative"); } static void asynchronous_yield_request() { + assert(CMSIncrementalMode, "Currently only used w/iCMS"); increment_pending_yields(); Atomic::inc(&_pending_decrements); assert(_pending_decrements >= 0, "can't be negative"); @@ -159,6 +180,7 @@ class ConcurrentMarkSweepThread: public ConcurrentGCThread { static void acknowledge_yield_request() { jint decrement = _pending_decrements; if (decrement > 0) { + assert(CMSIncrementalMode, "Currently only used w/iCMS"); // Order important to preserve: _pending_yields >= _pending_decrements Atomic::add(-decrement, &_pending_decrements); Atomic::add(-decrement, &_pending_yields); @@ -195,7 +217,7 @@ inline void ConcurrentMarkSweepThread::trace_state(const char* desc) { } } -// For scoped increment/decrement of yield requests +// For scoped increment/decrement of (synchronous) yield requests class CMSSynchronousYieldRequest: public StackObj { public: CMSSynchronousYieldRequest() { diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp index 4dd197ebd27..5bf7faec667 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2010, 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 @@ -278,15 +278,16 @@ CMRegionStack::~CMRegionStack() { if (_base != NULL) FREE_C_HEAP_ARRAY(oop, _base); } -void CMRegionStack::push(MemRegion mr) { +void CMRegionStack::push_lock_free(MemRegion mr) { assert(mr.word_size() > 0, "Precondition"); while (true) { - if (isFull()) { + jint index = _index; + + if (index >= _capacity) { _overflow = true; return; } // Otherwise... - jint index = _index; jint next_index = index+1; jint res = Atomic::cmpxchg(next_index, &_index, index); if (res == index) { @@ -297,19 +298,17 @@ void CMRegionStack::push(MemRegion mr) { } } -// Currently we do not call this at all. Normally we would call it -// during the concurrent marking / remark phases but we now call -// the lock-based version instead. But we might want to resurrect this -// code in the future. So, we'll leave it here commented out. -#if 0 -MemRegion CMRegionStack::pop() { +// Lock-free pop of the region stack. Called during the concurrent +// marking / remark phases. Should only be called in tandem with +// other lock-free pops. +MemRegion CMRegionStack::pop_lock_free() { while (true) { - // Otherwise... jint index = _index; if (index == 0) { return MemRegion(); } + // Otherwise... jint next_index = index-1; jint res = Atomic::cmpxchg(next_index, &_index, index); if (res == index) { @@ -326,7 +325,11 @@ MemRegion CMRegionStack::pop() { // Otherwise, we need to try again. } } -#endif // 0 + +#if 0 +// The routines that manipulate the region stack with a lock are +// not currently used. They should be retained, however, as a +// diagnostic aid. void CMRegionStack::push_with_lock(MemRegion mr) { assert(mr.word_size() > 0, "Precondition"); @@ -361,6 +364,7 @@ MemRegion CMRegionStack::pop_with_lock() { } } } +#endif bool CMRegionStack::invalidate_entries_into_cset() { bool result = false; @@ -583,10 +587,13 @@ ConcurrentMark::ConcurrentMark(ReservedSpace rs, #endif guarantee(parallel_marking_threads() > 0, "peace of mind"); - _parallel_workers = new WorkGang("G1 Parallel Marking Threads", - (int) parallel_marking_threads(), false, true); - if (_parallel_workers == NULL) + _parallel_workers = new FlexibleWorkGang("G1 Parallel Marking Threads", + (int) _parallel_marking_threads, false, true); + if (_parallel_workers == NULL) { vm_exit_during_initialization("Failed necessary allocation."); + } else { + _parallel_workers->initialize_workers(); + } } // so that the call below can read a sensible value @@ -645,8 +652,9 @@ void ConcurrentMark::reset() { // We do reset all of them, since different phases will use // different number of active threads. So, it's easiest to have all // of them ready. - for (int i = 0; i < (int) _max_task_num; ++i) + for (int i = 0; i < (int) _max_task_num; ++i) { _tasks[i]->reset(_nextMarkBitMap); + } // we need this to make sure that the flag is on during the evac // pause with initial mark piggy-backed @@ -985,7 +993,7 @@ void ConcurrentMark::grayRegionIfNecessary(MemRegion mr) { "below the finger, pushing it", mr.start(), mr.end()); - if (!region_stack_push(mr)) { + if (!region_stack_push_lock_free(mr)) { if (verbose_low()) gclog_or_tty->print_cr("[global] region stack has overflown."); } @@ -1451,7 +1459,7 @@ public: _bm, _g1h->concurrent_mark(), _region_bm, _card_bm); calccl.no_yield(); - if (ParallelGCThreads > 0) { + if (G1CollectedHeap::use_parallel_gc_threads()) { _g1h->heap_region_par_iterate_chunked(&calccl, i, HeapRegion::FinalCountClaimValue); } else { @@ -1531,7 +1539,7 @@ public: G1NoteEndOfConcMarkClosure g1_note_end(_g1h, &_par_cleanup_thread_state[i]->list, i); - if (ParallelGCThreads > 0) { + if (G1CollectedHeap::use_parallel_gc_threads()) { _g1h->heap_region_par_iterate_chunked(&g1_note_end, i, HeapRegion::NoteEndClaimValue); } else { @@ -1575,7 +1583,7 @@ public: {} void work(int i) { - if (ParallelGCThreads > 0) { + if (G1CollectedHeap::use_parallel_gc_threads()) { _g1rs->scrub_par(_region_bm, _card_bm, i, HeapRegion::ScrubRemSetClaimValue); } else { @@ -1647,7 +1655,7 @@ void ConcurrentMark::cleanup() { // Do counting once more with the world stopped for good measure. G1ParFinalCountTask g1_par_count_task(g1h, nextMarkBitMap(), &_region_bm, &_card_bm); - if (ParallelGCThreads > 0) { + if (G1CollectedHeap::use_parallel_gc_threads()) { assert(g1h->check_heap_region_claim_values( HeapRegion::InitialClaimValue), "sanity check"); @@ -1695,7 +1703,7 @@ void ConcurrentMark::cleanup() { // Note end of marking in all heap regions. double note_end_start = os::elapsedTime(); G1ParNoteEndTask g1_par_note_end_task(g1h, _par_cleanup_thread_state); - if (ParallelGCThreads > 0) { + if (G1CollectedHeap::use_parallel_gc_threads()) { int n_workers = g1h->workers()->total_workers(); g1h->set_par_threads(n_workers); g1h->workers()->run_task(&g1_par_note_end_task); @@ -1720,7 +1728,7 @@ void ConcurrentMark::cleanup() { if (G1ScrubRemSets) { double rs_scrub_start = os::elapsedTime(); G1ParScrubRemSetTask g1_par_scrub_rs_task(g1h, &_region_bm, &_card_bm); - if (ParallelGCThreads > 0) { + if (G1CollectedHeap::use_parallel_gc_threads()) { int n_workers = g1h->workers()->total_workers(); g1h->set_par_threads(n_workers); g1h->workers()->run_task(&g1_par_scrub_rs_task); @@ -1934,7 +1942,7 @@ void ConcurrentMark::checkpointRootsFinalWork() { g1h->ensure_parsability(false); - if (ParallelGCThreads > 0) { + if (G1CollectedHeap::use_parallel_gc_threads()) { G1CollectedHeap::StrongRootsScope srs(g1h); // this is remark, so we'll use up all available threads int active_workers = ParallelGCThreads; @@ -2330,6 +2338,39 @@ ConcurrentMark::claim_region(int task_num) { return NULL; } +bool ConcurrentMark::invalidate_aborted_regions_in_cset() { + bool result = false; + for (int i = 0; i < (int)_max_task_num; ++i) { + CMTask* the_task = _tasks[i]; + MemRegion mr = the_task->aborted_region(); + if (mr.start() != NULL) { + assert(mr.end() != NULL, "invariant"); + assert(mr.word_size() > 0, "invariant"); + HeapRegion* hr = _g1h->heap_region_containing(mr.start()); + assert(hr != NULL, "invariant"); + if (hr->in_collection_set()) { + // The region points into the collection set + the_task->set_aborted_region(MemRegion()); + result = true; + } + } + } + return result; +} + +bool ConcurrentMark::has_aborted_regions() { + for (int i = 0; i < (int)_max_task_num; ++i) { + CMTask* the_task = _tasks[i]; + MemRegion mr = the_task->aborted_region(); + if (mr.start() != NULL) { + assert(mr.end() != NULL, "invariant"); + assert(mr.word_size() > 0, "invariant"); + return true; + } + } + return false; +} + void ConcurrentMark::oops_do(OopClosure* cl) { if (_markStack.size() > 0 && verbose_low()) gclog_or_tty->print_cr("[global] scanning the global marking stack, " @@ -2348,13 +2389,22 @@ void ConcurrentMark::oops_do(OopClosure* cl) { queue->oops_do(cl); } - // finally, invalidate any entries that in the region stack that + // Invalidate any entries, that are in the region stack, that // point into the collection set if (_regionStack.invalidate_entries_into_cset()) { // otherwise, any gray objects copied during the evacuation pause // might not be visited. assert(_should_gray_objects, "invariant"); } + + // Invalidate any aborted regions, recorded in the individual CM + // tasks, that point into the collection set. + if (invalidate_aborted_regions_in_cset()) { + // otherwise, any gray objects copied during the evacuation pause + // might not be visited. + assert(_should_gray_objects, "invariant"); + } + } void ConcurrentMark::clear_marking_state() { @@ -2635,7 +2685,7 @@ void ConcurrentMark::newCSet() { // irrespective whether all collection set regions are below the // finger, if the region stack is not empty. This is expected to be // a rare case, so I don't think it's necessary to be smarted about it. - if (!region_stack_empty()) + if (!region_stack_empty() || has_aborted_regions()) _should_gray_objects = true; } @@ -2654,8 +2704,10 @@ void ConcurrentMark::abort() { _nextMarkBitMap->clearAll(); // Empty mark stack clear_marking_state(); - for (int i = 0; i < (int)_max_task_num; ++i) + for (int i = 0; i < (int)_max_task_num; ++i) { _tasks[i]->clear_region_fields(); + _tasks[i]->clear_aborted_region(); + } _has_aborted = true; SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set(); @@ -2933,6 +2985,7 @@ void CMTask::reset(CMBitMap* nextMarkBitMap) { _nextMarkBitMap = nextMarkBitMap; clear_region_fields(); + clear_aborted_region(); _calls = 0; _elapsed_time_ms = 0.0; @@ -3369,14 +3422,14 @@ void CMTask::drain_satb_buffers() { CMObjectClosure oc(this); SATBMarkQueueSet& satb_mq_set = JavaThread::satb_mark_queue_set(); - if (ParallelGCThreads > 0) + if (G1CollectedHeap::use_parallel_gc_threads()) satb_mq_set.set_par_closure(_task_id, &oc); else satb_mq_set.set_closure(&oc); // This keeps claiming and applying the closure to completed buffers // until we run out of buffers or we need to abort. - if (ParallelGCThreads > 0) { + if (G1CollectedHeap::use_parallel_gc_threads()) { while (!has_aborted() && satb_mq_set.par_apply_closure_to_completed_buffer(_task_id)) { if (_cm->verbose_medium()) @@ -3396,7 +3449,7 @@ void CMTask::drain_satb_buffers() { if (!concurrent() && !has_aborted()) { // We should only do this during remark. - if (ParallelGCThreads > 0) + if (G1CollectedHeap::use_parallel_gc_threads()) satb_mq_set.par_iterate_closure_all_threads(_task_id); else satb_mq_set.iterate_closure_all_threads(); @@ -3408,7 +3461,7 @@ void CMTask::drain_satb_buffers() { concurrent() || satb_mq_set.completed_buffers_num() == 0, "invariant"); - if (ParallelGCThreads > 0) + if (G1CollectedHeap::use_parallel_gc_threads()) satb_mq_set.set_par_closure(_task_id, NULL); else satb_mq_set.set_closure(NULL); @@ -3425,20 +3478,32 @@ void CMTask::drain_region_stack(BitMapClosure* bc) { assert(_region_finger == NULL, "it should be NULL when we're not scanning a region"); - if (!_cm->region_stack_empty()) { + if (!_cm->region_stack_empty() || !_aborted_region.is_empty()) { if (_cm->verbose_low()) gclog_or_tty->print_cr("[%d] draining region stack, size = %d", _task_id, _cm->region_stack_size()); - MemRegion mr = _cm->region_stack_pop_with_lock(); - // it returns MemRegion() if the pop fails - statsOnly(if (mr.start() != NULL) ++_region_stack_pops ); + MemRegion mr; + + if (!_aborted_region.is_empty()) { + mr = _aborted_region; + _aborted_region = MemRegion(); + + if (_cm->verbose_low()) + gclog_or_tty->print_cr("[%d] scanning aborted region [ " PTR_FORMAT ", " PTR_FORMAT " )", + _task_id, mr.start(), mr.end()); + } else { + mr = _cm->region_stack_pop_lock_free(); + // it returns MemRegion() if the pop fails + statsOnly(if (mr.start() != NULL) ++_region_stack_pops ); + } while (mr.start() != NULL) { if (_cm->verbose_medium()) gclog_or_tty->print_cr("[%d] we are scanning region " "["PTR_FORMAT", "PTR_FORMAT")", _task_id, mr.start(), mr.end()); + assert(mr.end() <= _cm->finger(), "otherwise the region shouldn't be on the stack"); assert(!mr.is_empty(), "Only non-empty regions live on the region stack"); @@ -3451,7 +3516,7 @@ void CMTask::drain_region_stack(BitMapClosure* bc) { if (has_aborted()) mr = MemRegion(); else { - mr = _cm->region_stack_pop_with_lock(); + mr = _cm->region_stack_pop_lock_free(); // it returns MemRegion() if the pop fails statsOnly(if (mr.start() != NULL) ++_region_stack_pops ); } @@ -3465,6 +3530,10 @@ void CMTask::drain_region_stack(BitMapClosure* bc) { // have definitely set _region_finger to something non-null. assert(_region_finger != NULL, "invariant"); + // Make sure that any previously aborted region has been + // cleared. + assert(_aborted_region.is_empty(), "aborted region not cleared"); + // The iteration was actually aborted. So now _region_finger // points to the address of the object we last scanned. If we // leave it there, when we restart this task, we will rescan @@ -3477,14 +3546,14 @@ void CMTask::drain_region_stack(BitMapClosure* bc) { if (!newRegion.is_empty()) { if (_cm->verbose_low()) { - gclog_or_tty->print_cr("[%d] pushing unscanned region" - "[" PTR_FORMAT "," PTR_FORMAT ") on region stack", + gclog_or_tty->print_cr("[%d] recording unscanned region" + "[" PTR_FORMAT "," PTR_FORMAT ") in CMTask", _task_id, newRegion.start(), newRegion.end()); } - // Now push the part of the region we didn't scan on the - // region stack to make sure a task scans it later. - _cm->region_stack_push_with_lock(newRegion); + // Now record the part of the region we didn't scan to + // make sure this task scans it later. + _aborted_region = newRegion; } // break from while mr = MemRegion(); @@ -3654,6 +3723,8 @@ void CMTask::do_marking_step(double time_target_ms) { assert(concurrent() || _cm->region_stack_empty(), "the region stack should have been cleared before remark"); + assert(concurrent() || !_cm->has_aborted_regions(), + "aborted regions should have been cleared before remark"); assert(_region_finger == NULL, "this should be non-null only when a region is being scanned"); @@ -3943,6 +4014,7 @@ void CMTask::do_marking_step(double time_target_ms) { // that, if a condition is false, we can immediately find out // which one. guarantee(_cm->out_of_regions(), "only way to reach here"); + guarantee(_aborted_region.is_empty(), "only way to reach here"); guarantee(_cm->region_stack_empty(), "only way to reach here"); guarantee(_cm->mark_stack_empty(), "only way to reach here"); guarantee(_task_queue->size() == 0, "only way to reach here"); @@ -4042,7 +4114,8 @@ CMTask::CMTask(int task_id, _nextMarkBitMap(NULL), _hash_seed(17), _task_queue(task_queue), _task_queues(task_queues), - _oop_closure(NULL) { + _oop_closure(NULL), + _aborted_region(MemRegion()) { guarantee(task_queue != NULL, "invariant"); guarantee(task_queues != NULL, "invariant"); diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp index 6791ebcedd9..3bc06d0b1cf 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMark.hpp @@ -250,21 +250,23 @@ public: // This is lock-free; assumes that it will only be called in parallel // with other "push" operations (no pops). - void push(MemRegion mr); - -#if 0 - // This is currently not used. See the comment in the .cpp file. + void push_lock_free(MemRegion mr); // Lock-free; assumes that it will only be called in parallel // with other "pop" operations (no pushes). - MemRegion pop(); -#endif // 0 + MemRegion pop_lock_free(); + +#if 0 + // The routines that manipulate the region stack with a lock are + // not currently used. They should be retained, however, as a + // diagnostic aid. // These two are the implementations that use a lock. They can be // called concurrently with each other but they should not be called // concurrently with the lock-free versions (push() / pop()). void push_with_lock(MemRegion mr); MemRegion pop_with_lock(); +#endif bool isEmpty() { return _index == 0; } bool isFull() { return _index == _capacity; } @@ -398,6 +400,7 @@ protected: volatile bool _concurrent; // set at the end of a Full GC so that marking aborts volatile bool _has_aborted; + // used when remark aborts due to an overflow to indicate that // another concurrent marking phase should start volatile bool _restart_for_overflow; @@ -548,23 +551,30 @@ public: bool mark_stack_overflow() { return _markStack.overflow(); } bool mark_stack_empty() { return _markStack.isEmpty(); } - // Manipulation of the region stack - bool region_stack_push(MemRegion mr) { + // (Lock-free) Manipulation of the region stack + bool region_stack_push_lock_free(MemRegion mr) { // Currently we only call the lock-free version during evacuation // pauses. assert(SafepointSynchronize::is_at_safepoint(), "world should be stopped"); - _regionStack.push(mr); + _regionStack.push_lock_free(mr); if (_regionStack.overflow()) { set_has_overflown(); return false; } return true; } + + // Lock-free version of region-stack pop. Should only be + // called in tandem with other lock-free pops. + MemRegion region_stack_pop_lock_free() { + return _regionStack.pop_lock_free(); + } + #if 0 - // Currently this is not used. See the comment in the .cpp file. - MemRegion region_stack_pop() { return _regionStack.pop(); } -#endif // 0 + // The routines that manipulate the region stack with a lock are + // not currently used. They should be retained, however, as a + // diagnostic aid. bool region_stack_push_with_lock(MemRegion mr) { // Currently we only call the lock-based version during either @@ -579,6 +589,7 @@ public: } return true; } + MemRegion region_stack_pop_with_lock() { // Currently we only call the lock-based version during either // concurrent marking or remark. @@ -587,11 +598,21 @@ public: return _regionStack.pop_with_lock(); } +#endif int region_stack_size() { return _regionStack.size(); } bool region_stack_overflow() { return _regionStack.overflow(); } bool region_stack_empty() { return _regionStack.isEmpty(); } + // Iterate over any regions that were aborted while draining the + // region stack (any such regions are saved in the corresponding + // CMTask) and invalidate (i.e. assign to the empty MemRegion()) + // any regions that point into the collection set. + bool invalidate_aborted_regions_in_cset(); + + // Returns true if there are any aborted memory regions. + bool has_aborted_regions(); + bool concurrent_marking_in_progress() { return _concurrent_marking_in_progress; } @@ -856,6 +877,15 @@ private: // stack. HeapWord* _region_finger; + // If we abort while scanning a region we record the remaining + // unscanned portion and check this field when marking restarts. + // This avoids having to push on the region stack while other + // marking threads may still be popping regions. + // If we were to push the unscanned portion directly to the + // region stack then we would need to using locking versions + // of the push and pop operations. + MemRegion _aborted_region; + // the number of words this task has scanned size_t _words_scanned; // When _words_scanned reaches this limit, the regular clock is @@ -1012,6 +1042,15 @@ public: void clear_has_aborted() { _has_aborted = false; } bool claimed() { return _claimed; } + // Support routines for the partially scanned region that may be + // recorded as a result of aborting while draining the CMRegionStack + MemRegion aborted_region() { return _aborted_region; } + void set_aborted_region(MemRegion mr) + { _aborted_region = mr; } + + // Clears any recorded partially scanned region + void clear_aborted_region() { set_aborted_region(MemRegion()); } + void set_oop_closure(OopClosure* oop_closure) { _oop_closure = oop_closure; } diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp index 88d9e01d0ab..f2f8ed9de01 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.cpp @@ -303,9 +303,10 @@ void ConcurrentMarkThread::print_on(outputStream* st) const { } void ConcurrentMarkThread::sleepBeforeNextCycle() { - clear_in_progress(); // We join here because we don't want to do the "shouldConcurrentMark()" // below while the world is otherwise stopped. + assert(!in_progress(), "should have been cleared"); + MutexLockerEx x(CGC_lock, Mutex::_no_safepoint_check_flag); while (!started()) { CGC_lock->wait(Mutex::_no_safepoint_check_flag); diff --git a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.hpp b/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.hpp index c6480c90dc0..92361551c5c 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/concurrentMarkThread.hpp @@ -69,12 +69,12 @@ class ConcurrentMarkThread: public ConcurrentGCThread { ConcurrentMark* cm() { return _cm; } - void set_started() { _started = true; } - void clear_started() { _started = false; } + void set_started() { assert(!_in_progress, "cycle in progress"); _started = true; } + void clear_started() { assert(_in_progress, "must be starting a cycle"); _started = false; } bool started() { return _started; } - void set_in_progress() { _in_progress = true; } - void clear_in_progress() { _in_progress = false; } + void set_in_progress() { assert(_started, "must be starting a cycle"); _in_progress = true; } + void clear_in_progress() { assert(!_started, "must not be starting a new cycle"); _in_progress = false; } bool in_progress() { return _in_progress; } // This flag returns true from the moment a marking cycle is diff --git a/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp b/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp index 524c0c25681..9f6d95f00a2 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/dirtyCardQueue.hpp @@ -37,11 +37,10 @@ public: class DirtyCardQueue: public PtrQueue { public: DirtyCardQueue(PtrQueueSet* qset_, bool perm = false) : - PtrQueue(qset_, perm) - { - // Dirty card queues are always active. - _active = true; - } + // Dirty card queues are always active, so we create them with their + // active field set to true. + PtrQueue(qset_, perm, true /* active */) { } + // Apply the closure to all elements, and reset the index to make the // buffer empty. If a closure application returns "false", return // "false" immediately, halting the iteration. If "consume" is true, diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp index 07425538987..c72e154c494 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp @@ -961,7 +961,8 @@ void G1CollectedHeap::do_collection(bool explicit_gc, } // Rebuild remembered sets of all regions. - if (ParallelGCThreads > 0) { + + if (G1CollectedHeap::use_parallel_gc_threads()) { ParRebuildRSTask rebuild_rs_task(this); assert(check_heap_region_claim_values( HeapRegion::InitialClaimValue), "sanity check"); @@ -1784,6 +1785,14 @@ void G1CollectedHeap::increment_full_collections_completed(bool outer) { _full_collections_completed += 1; + // We need to clear the "in_progress" flag in the CM thread before + // we wake up any waiters (especially when ExplicitInvokesConcurrent + // is set) so that if a waiter requests another System.gc() it doesn't + // incorrectly see that a marking cyle is still in progress. + if (outer) { + _cmThread->clear_in_progress(); + } + // This notify_all() will ensure that a thread that called // System.gc() with (with ExplicitGCInvokesConcurrent set or not) // and it's waiting for a full GC to finish will be woken up. It is @@ -1960,7 +1969,7 @@ G1CollectedHeap::heap_region_par_iterate_chunked(HeapRegionClosure* cl, int worker, jint claim_value) { const size_t regions = n_regions(); - const size_t worker_num = (ParallelGCThreads > 0 ? ParallelGCThreads : 1); + const size_t worker_num = (G1CollectedHeap::use_parallel_gc_threads() ? ParallelGCThreads : 1); // try to spread out the starting points of the workers const size_t start_index = regions / worker_num * (size_t) worker; @@ -2527,7 +2536,7 @@ void G1CollectedHeap::print_on_extended(outputStream* st) const { } void G1CollectedHeap::print_gc_threads_on(outputStream* st) const { - if (ParallelGCThreads > 0) { + if (G1CollectedHeap::use_parallel_gc_threads()) { workers()->print_worker_threads_on(st); } @@ -2543,7 +2552,7 @@ void G1CollectedHeap::print_gc_threads_on(outputStream* st) const { } void G1CollectedHeap::gc_threads_do(ThreadClosure* tc) const { - if (ParallelGCThreads > 0) { + if (G1CollectedHeap::use_parallel_gc_threads()) { workers()->threads_do(tc); } tc->do_thread(_cmThread); @@ -3083,7 +3092,7 @@ void G1CollectedHeap::set_gc_alloc_region(int purpose, HeapRegion* r) { if (r != NULL) { r_used = r->used(); - if (ParallelGCThreads > 0) { + if (G1CollectedHeap::use_parallel_gc_threads()) { // need to take the lock to guard against two threads calling // get_gc_alloc_region concurrently (very unlikely but...) MutexLockerEx x(ParGCRareEvent_lock, Mutex::_no_safepoint_check_flag); @@ -4182,6 +4191,8 @@ public: // *** Common G1 Evacuation Stuff +// This method is run in a GC worker. + void G1CollectedHeap:: g1_process_strong_roots(bool collecting_perm_gen, @@ -4259,7 +4270,7 @@ public: }; void G1CollectedHeap::save_marks() { - if (ParallelGCThreads == 0) { + if (!CollectedHeap::use_parallel_gc_threads()) { SaveMarksClosure sm; heap_region_iterate(&sm); } @@ -4284,7 +4295,7 @@ void G1CollectedHeap::evacuate_collection_set() { assert(dirty_card_queue_set().completed_buffers_num() == 0, "Should be empty"); double start_par = os::elapsedTime(); - if (ParallelGCThreads > 0) { + if (G1CollectedHeap::use_parallel_gc_threads()) { // The individual threads will set their evac-failure closures. StrongRootsScope srs(this); if (ParallelGCVerbose) G1ParScanThreadState::print_termination_stats_hdr(); diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp index a342d698d3b..50869e301fb 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp @@ -656,6 +656,9 @@ protected: bool _unclean_regions_coming; public: + + SubTasksDone* process_strong_tasks() { return _process_strong_tasks; } + void set_refine_cte_cl_concurrency(bool concurrent); RefToScanQueue *task_queue(int i) const; @@ -684,7 +687,7 @@ public: void set_par_threads(int t) { SharedHeap::set_par_threads(t); - _process_strong_tasks->set_par_threads(t); + _process_strong_tasks->set_n_threads(t); } virtual CollectedHeap::Name kind() const { @@ -1688,8 +1691,8 @@ public: ref = new_ref; } - int refs_to_scan() { return refs()->size(); } - int overflowed_refs_to_scan() { return refs()->overflow_stack()->length(); } + int refs_to_scan() { return (int)refs()->size(); } + int overflowed_refs_to_scan() { return (int)refs()->overflow_stack()->size(); } template void update_rs(HeapRegion* from, T* p, int tid) { if (G1DeferredRSUpdate) { diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp index 4f8e5d1520a..896dba17e03 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp @@ -72,7 +72,10 @@ static double non_young_other_cost_per_region_ms_defaults[] = { // G1CollectorPolicy::G1CollectorPolicy() : - _parallel_gc_threads((ParallelGCThreads > 0) ? ParallelGCThreads : 1), + _parallel_gc_threads(G1CollectedHeap::use_parallel_gc_threads() + ? ParallelGCThreads : 1), + + _n_pauses(0), _recent_CH_strong_roots_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)), _recent_G1_strong_roots_times_ms(new TruncatedSeq(NumPrevPausesForHeuristics)), @@ -1073,7 +1076,7 @@ void G1CollectorPolicy::print_stats (int level, } double G1CollectorPolicy::avg_value (double* data) { - if (ParallelGCThreads > 0) { + if (G1CollectedHeap::use_parallel_gc_threads()) { double ret = 0.0; for (uint i = 0; i < ParallelGCThreads; ++i) ret += data[i]; @@ -1084,7 +1087,7 @@ double G1CollectorPolicy::avg_value (double* data) { } double G1CollectorPolicy::max_value (double* data) { - if (ParallelGCThreads > 0) { + if (G1CollectedHeap::use_parallel_gc_threads()) { double ret = data[0]; for (uint i = 1; i < ParallelGCThreads; ++i) if (data[i] > ret) @@ -1096,7 +1099,7 @@ double G1CollectorPolicy::max_value (double* data) { } double G1CollectorPolicy::sum_of_values (double* data) { - if (ParallelGCThreads > 0) { + if (G1CollectedHeap::use_parallel_gc_threads()) { double sum = 0.0; for (uint i = 0; i < ParallelGCThreads; i++) sum += data[i]; @@ -1110,7 +1113,7 @@ double G1CollectorPolicy::max_sum (double* data1, double* data2) { double ret = data1[0] + data2[0]; - if (ParallelGCThreads > 0) { + if (G1CollectedHeap::use_parallel_gc_threads()) { for (uint i = 1; i < ParallelGCThreads; ++i) { double data = data1[i] + data2[i]; if (data > ret) @@ -1126,7 +1129,7 @@ double G1CollectorPolicy::max_sum (double* data1, void G1CollectorPolicy::record_collection_pause_end() { double end_time_sec = os::elapsedTime(); double elapsed_ms = _last_pause_time_ms; - bool parallel = ParallelGCThreads > 0; + bool parallel = G1CollectedHeap::use_parallel_gc_threads(); double evac_ms = (end_time_sec - _cur_G1_strong_roots_end_sec) * 1000.0; size_t rs_size = _cur_collection_pause_used_regions_at_start - collection_set_size(); @@ -1941,7 +1944,7 @@ G1CollectorPolicy::recent_avg_survival_fraction_work(TruncatedSeq* surviving, // Further, we're now always doing parallel collection. But I'm still // leaving this here as a placeholder for a more precise assertion later. // (DLD, 10/05.) - assert((true || ParallelGCThreads > 0) || + assert((true || G1CollectedHeap::use_parallel_gc_threads()) || _g1->evacuation_failed() || recent_survival_rate <= 1.0, "Or bad frac"); return recent_survival_rate; @@ -1961,7 +1964,7 @@ G1CollectorPolicy::last_survival_fraction_work(TruncatedSeq* surviving, // Further, we're now always doing parallel collection. But I'm still // leaving this here as a placeholder for a more precise assertion later. // (DLD, 10/05.) - assert((true || ParallelGCThreads > 0) || + assert((true || G1CollectedHeap::use_parallel_gc_threads()) || last_survival_rate <= 1.0, "Or bad frac"); return last_survival_rate; } else { @@ -2121,7 +2124,7 @@ void G1CollectorPolicy::check_other_times(int level, } void G1CollectorPolicy::print_summary(PauseSummary* summary) const { - bool parallel = ParallelGCThreads > 0; + bool parallel = G1CollectedHeap::use_parallel_gc_threads(); MainBodySummary* body_summary = summary->main_body_summary(); if (summary->get_total_seq()->num() > 0) { print_summary_sd(0, "Evacuation Pauses", summary->get_total_seq()); @@ -2559,7 +2562,7 @@ record_concurrent_mark_cleanup_end(size_t freed_bytes, gclog_or_tty->print_cr(" clear marked regions + work1: %8.3f ms.", (clear_marked_end - start)*1000.0); } - if (ParallelGCThreads > 0) { + if (G1CollectedHeap::use_parallel_gc_threads()) { const size_t OverpartitionFactor = 4; const size_t MinWorkUnit = 8; const size_t WorkUnit = diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp index 465f7d17161..0839d11404b 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp @@ -101,22 +101,6 @@ void G1MarkSweep::allocate_stacks() { GenMarkSweep::_preserved_count_max = 0; GenMarkSweep::_preserved_marks = NULL; GenMarkSweep::_preserved_count = 0; - GenMarkSweep::_preserved_mark_stack = NULL; - GenMarkSweep::_preserved_oop_stack = NULL; - - GenMarkSweep::_marking_stack = - new (ResourceObj::C_HEAP) GrowableArray(4000, true); - GenMarkSweep::_objarray_stack = - new (ResourceObj::C_HEAP) GrowableArray(50, true); - - int size = SystemDictionary::number_of_classes() * 2; - GenMarkSweep::_revisit_klass_stack = - new (ResourceObj::C_HEAP) GrowableArray(size, true); - // (#klass/k)^2 for k ~ 10 appears a better fit, but this will have to do - // for now until we have a chance to work out a more optimal setting. - GenMarkSweep::_revisit_mdo_stack = - new (ResourceObj::C_HEAP) GrowableArray(size*2, true); - } void G1MarkSweep::mark_sweep_phase1(bool& marked_for_unloading, @@ -145,7 +129,7 @@ void G1MarkSweep::mark_sweep_phase1(bool& marked_for_unloading, // Follow system dictionary roots and unload classes bool purged_class = SystemDictionary::do_unloading(&GenMarkSweep::is_alive); - assert(GenMarkSweep::_marking_stack->is_empty(), + assert(GenMarkSweep::_marking_stack.is_empty(), "stack should be empty by now"); // Follow code cache roots (has to be done after system dictionary, @@ -157,19 +141,19 @@ void G1MarkSweep::mark_sweep_phase1(bool& marked_for_unloading, // Update subklass/sibling/implementor links of live klasses GenMarkSweep::follow_weak_klass_links(); - assert(GenMarkSweep::_marking_stack->is_empty(), + assert(GenMarkSweep::_marking_stack.is_empty(), "stack should be empty by now"); // Visit memoized MDO's and clear any unmarked weak refs GenMarkSweep::follow_mdo_weak_refs(); - assert(GenMarkSweep::_marking_stack->is_empty(), "just drained"); + assert(GenMarkSweep::_marking_stack.is_empty(), "just drained"); // Visit symbol and interned string tables and delete unmarked oops SymbolTable::unlink(&GenMarkSweep::is_alive); StringTable::unlink(&GenMarkSweep::is_alive); - assert(GenMarkSweep::_marking_stack->is_empty(), + assert(GenMarkSweep::_marking_stack.is_empty(), "stack should be empty by now"); } diff --git a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp index 19ec341f980..6c79abcf8ba 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp +++ b/hotspot/src/share/vm/gc_implementation/g1/g1RemSet.cpp @@ -523,7 +523,7 @@ prepare_for_oops_into_collection_set_do() { assert(!_traversal_in_progress, "Invariant between iterations."); set_traversal(true); if (ParallelGCThreads > 0) { - _seq_task->set_par_threads((int)n_workers()); + _seq_task->set_n_threads((int)n_workers()); } guarantee( _cards_scanned == NULL, "invariant" ); _cards_scanned = NEW_C_HEAP_ARRAY(size_t, n_workers()); diff --git a/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.hpp b/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.hpp index bbd4788e89f..c66973b0cad 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/ptrQueue.hpp @@ -89,6 +89,10 @@ public: return _buf == NULL ? 0 : _sz - _index; } + bool is_empty() { + return _buf == NULL || _sz == _index; + } + // Set the "active" property of the queue to "b". An enqueue to an // inactive thread is a no-op. Setting a queue to inactive resets its // log to the empty state. diff --git a/hotspot/src/share/vm/gc_implementation/g1/satbQueue.hpp b/hotspot/src/share/vm/gc_implementation/g1/satbQueue.hpp index 49f824463e9..6a1f50e2b31 100644 --- a/hotspot/src/share/vm/gc_implementation/g1/satbQueue.hpp +++ b/hotspot/src/share/vm/gc_implementation/g1/satbQueue.hpp @@ -29,7 +29,12 @@ class JavaThread; class ObjPtrQueue: public PtrQueue { public: ObjPtrQueue(PtrQueueSet* qset_, bool perm = false) : - PtrQueue(qset_, perm, qset_->is_active()) { } + // SATB queues are only active during marking cycles. We create + // them with their active field set to false. If a thread is + // created during a cycle and its SATB queue needs to be activated + // before the thread starts running, we'll need to set its active + // field to true. This is done in JavaThread::initialize_queues(). + PtrQueue(qset_, perm, false /* active */) { } // Apply the closure to all elements, and reset the index to make the // buffer empty. void apply_closure(ObjectClosure* cl); diff --git a/hotspot/src/share/vm/gc_implementation/includeDB_gc_concurrentMarkSweep b/hotspot/src/share/vm/gc_implementation/includeDB_gc_concurrentMarkSweep index 6efae46edd1..7f1a077007a 100644 --- a/hotspot/src/share/vm/gc_implementation/includeDB_gc_concurrentMarkSweep +++ b/hotspot/src/share/vm/gc_implementation/includeDB_gc_concurrentMarkSweep @@ -171,6 +171,7 @@ concurrentMarkSweepGeneration.hpp generation.hpp concurrentMarkSweepGeneration.hpp generationCounters.hpp concurrentMarkSweepGeneration.hpp memoryService.hpp concurrentMarkSweepGeneration.hpp mutexLocker.hpp +concurrentMarkSweepGeneration.hpp stack.inline.hpp concurrentMarkSweepGeneration.hpp taskqueue.hpp concurrentMarkSweepGeneration.hpp virtualspace.hpp concurrentMarkSweepGeneration.hpp yieldingWorkgroup.hpp diff --git a/hotspot/src/share/vm/gc_implementation/includeDB_gc_parallelScavenge b/hotspot/src/share/vm/gc_implementation/includeDB_gc_parallelScavenge index 83eae5eebe7..1d91dce282d 100644 --- a/hotspot/src/share/vm/gc_implementation/includeDB_gc_parallelScavenge +++ b/hotspot/src/share/vm/gc_implementation/includeDB_gc_parallelScavenge @@ -187,9 +187,11 @@ psCompactionManager.cpp parMarkBitMap.hpp psCompactionManager.cpp psParallelCompact.hpp psCompactionManager.cpp psCompactionManager.hpp psCompactionManager.cpp psOldGen.hpp +psCompactionManager.cpp stack.inline.hpp psCompactionManager.cpp systemDictionary.hpp psCompactionManager.hpp allocation.hpp +psCompactionManager.hpp stack.hpp psCompactionManager.hpp taskqueue.hpp psCompactionManager.inline.hpp psCompactionManager.hpp @@ -233,12 +235,14 @@ psMarkSweep.cpp referencePolicy.hpp psMarkSweep.cpp referenceProcessor.hpp psMarkSweep.cpp safepoint.hpp psMarkSweep.cpp spaceDecorator.hpp +psMarkSweep.cpp stack.inline.hpp psMarkSweep.cpp symbolTable.hpp psMarkSweep.cpp systemDictionary.hpp psMarkSweep.cpp vmThread.hpp psMarkSweep.hpp markSweep.inline.hpp psMarkSweep.hpp collectorCounters.hpp +psMarkSweep.hpp stack.hpp psMarkSweepDecorator.cpp liveRange.hpp psMarkSweepDecorator.cpp markSweep.inline.hpp @@ -280,6 +284,7 @@ psParallelCompact.cpp psYoungGen.hpp psParallelCompact.cpp referencePolicy.hpp psParallelCompact.cpp referenceProcessor.hpp psParallelCompact.cpp safepoint.hpp +psParallelCompact.cpp stack.inline.hpp psParallelCompact.cpp symbolTable.hpp psParallelCompact.cpp systemDictionary.hpp psParallelCompact.cpp vmThread.hpp @@ -367,6 +372,7 @@ psScavenge.cpp referencePolicy.hpp psScavenge.cpp referenceProcessor.hpp psScavenge.cpp resourceArea.hpp psScavenge.cpp spaceDecorator.hpp +psScavenge.cpp stack.inline.hpp psScavenge.cpp threadCritical.hpp psScavenge.cpp vmThread.hpp psScavenge.cpp vm_operations.hpp @@ -376,6 +382,7 @@ psScavenge.hpp cardTableExtension.hpp psScavenge.hpp collectorCounters.hpp psScavenge.hpp oop.hpp psScavenge.hpp psVirtualspace.hpp +psScavenge.hpp stack.hpp psScavenge.inline.hpp cardTableExtension.hpp psScavenge.inline.hpp parallelScavengeHeap.hpp diff --git a/hotspot/src/share/vm/gc_implementation/includeDB_gc_serial b/hotspot/src/share/vm/gc_implementation/includeDB_gc_serial index ef4508a1540..df6272f68c7 100644 --- a/hotspot/src/share/vm/gc_implementation/includeDB_gc_serial +++ b/hotspot/src/share/vm/gc_implementation/includeDB_gc_serial @@ -93,11 +93,13 @@ markSweep.cpp oop.inline.hpp markSweep.hpp growableArray.hpp markSweep.hpp markOop.hpp markSweep.hpp oop.hpp +markSweep.hpp stack.hpp markSweep.hpp timer.hpp markSweep.hpp universe.hpp markSweep.inline.hpp collectedHeap.hpp markSweep.inline.hpp markSweep.hpp +markSweep.inline.hpp stack.inline.hpp mutableSpace.hpp immutableSpace.hpp mutableSpace.hpp memRegion.hpp diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp b/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp index 740bef3a801..77e6a757d46 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parCardTableModRefBS.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2010 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,7 @@ void CardTableModRefBS::par_non_clean_card_iterate_work(Space* sp, MemRegion mr, int n_strides = n_threads * StridesPerThread; SequentialSubTasksDone* pst = sp->par_seq_tasks(); - pst->set_par_threads(n_threads); + pst->set_n_threads(n_threads); pst->set_n_tasks(n_strides); int stride = 0; diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp index e31e2854664..2aa4e7f4447 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.cpp @@ -34,12 +34,12 @@ ParScanThreadState::ParScanThreadState(Space* to_space_, Generation* old_gen_, int thread_num_, ObjToScanQueueSet* work_queue_set_, - GrowableArray** overflow_stack_set_, + Stack* overflow_stacks_, size_t desired_plab_sz_, ParallelTaskTerminator& term_) : _to_space(to_space_), _old_gen(old_gen_), _young_gen(gen_), _thread_num(thread_num_), _work_queue(work_queue_set_->queue(thread_num_)), _to_space_full(false), - _overflow_stack(overflow_stack_set_[thread_num_]), + _overflow_stack(overflow_stacks_ ? overflow_stacks_ + thread_num_ : NULL), _ageTable(false), // false ==> not the global age table, no perf data. _to_space_alloc_buffer(desired_plab_sz_), _to_space_closure(gen_, this), _old_gen_closure(gen_, this), @@ -159,11 +159,12 @@ bool ParScanThreadState::take_from_overflow_stack() { assert(ParGCUseLocalOverflow, "Else should not call"); assert(young_gen()->overflow_list() == NULL, "Error"); ObjToScanQueue* queue = work_queue(); - GrowableArray* of_stack = overflow_stack(); - uint num_overflow_elems = of_stack->length(); - uint num_take_elems = MIN2(MIN2((queue->max_elems() - queue->size())/4, - (juint)ParGCDesiredObjsFromOverflowList), - num_overflow_elems); + Stack* const of_stack = overflow_stack(); + const size_t num_overflow_elems = of_stack->size(); + const size_t space_available = queue->max_elems() - queue->size(); + const size_t num_take_elems = MIN3(space_available / 4, + ParGCDesiredObjsFromOverflowList, + num_overflow_elems); // Transfer the most recent num_take_elems from the overflow // stack to our work queue. for (size_t i = 0; i != num_take_elems; i++) { @@ -271,7 +272,7 @@ public: ParNewGeneration& gen, Generation& old_gen, ObjToScanQueueSet& queue_set, - GrowableArray** overflow_stacks_, + Stack* overflow_stacks_, size_t desired_plab_sz, ParallelTaskTerminator& term); @@ -302,17 +303,19 @@ private: ParScanThreadStateSet::ParScanThreadStateSet( int num_threads, Space& to_space, ParNewGeneration& gen, Generation& old_gen, ObjToScanQueueSet& queue_set, - GrowableArray** overflow_stack_set_, + Stack* overflow_stacks, size_t desired_plab_sz, ParallelTaskTerminator& term) : ResourceArray(sizeof(ParScanThreadState), num_threads), _gen(gen), _next_gen(old_gen), _term(term) { assert(num_threads > 0, "sanity check!"); + assert(ParGCUseLocalOverflow == (overflow_stacks != NULL), + "overflow_stack allocation mismatch"); // Initialize states. for (int i = 0; i < num_threads; ++i) { new ((ParScanThreadState*)_data + i) ParScanThreadState(&to_space, &gen, &old_gen, i, &queue_set, - overflow_stack_set_, desired_plab_sz, term); + overflow_stacks, desired_plab_sz, term); } } @@ -596,14 +599,11 @@ ParNewGeneration(ReservedSpace rs, size_t initial_byte_size, int level) for (uint i2 = 0; i2 < ParallelGCThreads; i2++) _task_queues->queue(i2)->initialize(); - _overflow_stacks = NEW_C_HEAP_ARRAY(GrowableArray*, ParallelGCThreads); - guarantee(_overflow_stacks != NULL, "Overflow stack set allocation failure"); - for (uint i = 0; i < ParallelGCThreads; i++) { - if (ParGCUseLocalOverflow) { - _overflow_stacks[i] = new (ResourceObj::C_HEAP) GrowableArray(512, true); - guarantee(_overflow_stacks[i] != NULL, "Overflow Stack allocation failure."); - } else { - _overflow_stacks[i] = NULL; + _overflow_stacks = NULL; + if (ParGCUseLocalOverflow) { + _overflow_stacks = NEW_C_HEAP_ARRAY(Stack, ParallelGCThreads); + for (size_t i = 0; i < ParallelGCThreads; ++i) { + new (_overflow_stacks + i) Stack(); } } @@ -937,12 +937,9 @@ void ParNewGeneration::collect(bool full, } else { assert(HandlePromotionFailure, "Should only be here if promotion failure handling is on"); - if (_promo_failure_scan_stack != NULL) { - // Can be non-null because of reference processing. - // Free stack with its elements. - delete _promo_failure_scan_stack; - _promo_failure_scan_stack = NULL; - } + assert(_promo_failure_scan_stack.is_empty(), "post condition"); + _promo_failure_scan_stack.clear(true); // Clear cached segments. + remove_forwarding_pointers(); if (PrintGCDetails) { gclog_or_tty->print(" (promotion failed)"); @@ -1397,8 +1394,8 @@ bool ParNewGeneration::take_from_overflow_list_work(ParScanThreadState* par_scan size_t objsFromOverflow = MIN2((size_t)(work_q->max_elems() - work_q->size())/4, (size_t)ParGCDesiredObjsFromOverflowList); - assert(par_scan_state->overflow_stack() == NULL, "Error"); assert(!UseCompressedOops, "Error"); + assert(par_scan_state->overflow_stack() == NULL, "Error"); if (_overflow_list == NULL) return false; // Otherwise, there was something there; try claiming the list. @@ -1533,3 +1530,7 @@ void ParNewGeneration::ref_processor_init() const char* ParNewGeneration::name() const { return "par new generation"; } + +bool ParNewGeneration::in_use() { + return UseParNewGC && ParallelGCThreads > 0; +} diff --git a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp index a3090ebf452..c10531f4f1d 100644 --- a/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp +++ b/hotspot/src/share/vm/gc_implementation/parNew/parNewGeneration.hpp @@ -52,7 +52,7 @@ class ParScanThreadState { friend class ParScanThreadStateSet; private: ObjToScanQueue *_work_queue; - GrowableArray* _overflow_stack; + Stack* const _overflow_stack; ParGCAllocBuffer _to_space_alloc_buffer; @@ -120,7 +120,7 @@ class ParScanThreadState { ParScanThreadState(Space* to_space_, ParNewGeneration* gen_, Generation* old_gen_, int thread_num_, ObjToScanQueueSet* work_queue_set_, - GrowableArray** overflow_stack_set_, + Stack* overflow_stacks_, size_t desired_plab_sz_, ParallelTaskTerminator& term_); @@ -144,7 +144,7 @@ class ParScanThreadState { void trim_queues(int max_size); // Private overflow stack usage - GrowableArray* overflow_stack() { return _overflow_stack; } + Stack* overflow_stack() { return _overflow_stack; } bool take_from_overflow_stack(); void push_on_overflow_stack(oop p); @@ -301,7 +301,7 @@ class ParNewGeneration: public DefNewGeneration { ObjToScanQueueSet* _task_queues; // Per-worker-thread local overflow stacks - GrowableArray** _overflow_stacks; + Stack* _overflow_stacks; // Desired size of survivor space plab's PLABStats _plab_stats; @@ -350,6 +350,8 @@ class ParNewGeneration: public DefNewGeneration { delete _task_queues; } + static bool in_use(); + virtual void ref_processor_init(); virtual Generation::Name kind() { return Generation::ParNew; } virtual const char* name() const; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp index c7415706adf..27b67627309 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.cpp @@ -59,8 +59,6 @@ void MarkFromRootsTask::do_it(GCTaskManager* manager, uint which) { PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty)); ParCompactionManager* cm = ParCompactionManager::gc_thread_compaction_manager(which); - assert(cm->stacks_have_been_allocated(), - "Stack space has not been allocated"); PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); switch (_root_type) { @@ -119,7 +117,6 @@ void MarkFromRootsTask::do_it(GCTaskManager* manager, uint which) { // Do the real work cm->follow_marking_stacks(); - // cm->deallocate_stacks(); } @@ -135,8 +132,6 @@ void RefProcTaskProxy::do_it(GCTaskManager* manager, uint which) PrintGCDetails && TraceParallelOldGCTasks, true, gclog_or_tty)); ParCompactionManager* cm = ParCompactionManager::gc_thread_compaction_manager(which); - assert(cm->stacks_have_been_allocated(), - "Stack space has not been allocated"); PSParallelCompact::MarkAndPushClosure mark_and_push_closure(cm); PSParallelCompact::FollowStackClosure follow_stack_closure(cm); _rp_task.work(_work_id, *PSParallelCompact::is_alive_closure(), diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.hpp index 1d67062f8c4..3bc4f1b6f94 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/pcTasks.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, 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 @@ -242,7 +242,11 @@ class UpdateDensePrefixTask : public GCTask { // class DrainStacksCompactionTask : public GCTask { + uint _stack_index; + uint stack_index() { return _stack_index; } public: + DrainStacksCompactionTask(uint stack_index) : GCTask(), + _stack_index(stack_index) {}; char* name() { return (char *)"drain-region-task"; } virtual void do_it(GCTaskManager* manager, uint which); }; diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp index a42bbaba412..1ce20cdbf2b 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.cpp @@ -46,23 +46,6 @@ ParCompactionManager::ParCompactionManager() : marking_stack()->initialize(); _objarray_stack.initialize(); region_stack()->initialize(); - - // Note that _revisit_klass_stack is allocated out of the - // C heap (as opposed to out of ResourceArena). - int size = - (SystemDictionary::number_of_classes() * 2) * 2 / ParallelGCThreads; - _revisit_klass_stack = new (ResourceObj::C_HEAP) GrowableArray(size, true); - // From some experiments (#klass/k)^2 for k = 10 seems a better fit, but this will - // have to do for now until we are able to investigate a more optimal setting. - _revisit_mdo_stack = new (ResourceObj::C_HEAP) GrowableArray(size*2, true); -} - -ParCompactionManager::~ParCompactionManager() { - delete _revisit_klass_stack; - delete _revisit_mdo_stack; - // _manager_array and _stack_array are statics - // shared with all instances of ParCompactionManager - // should not be deallocated. } void ParCompactionManager::initialize(ParMarkBitMap* mbm) { @@ -134,9 +117,9 @@ ParCompactionManager::gc_thread_compaction_manager(int index) { } void ParCompactionManager::reset() { - for(uint i=0; irevisit_klass_stack()->clear(); - manager_array(i)->revisit_mdo_stack()->clear(); + for(uint i = 0; i < ParallelGCThreads + 1; i++) { + assert(manager_array(i)->revisit_klass_stack()->is_empty(), "sanity"); + assert(manager_array(i)->revisit_mdo_stack()->is_empty(), "sanity"); } } @@ -178,10 +161,3 @@ void ParCompactionManager::drain_region_stacks() { } } while (!region_stack()->is_empty()); } - -#ifdef ASSERT -bool ParCompactionManager::stacks_have_been_allocated() { - return (revisit_klass_stack()->data_addr() != NULL && - revisit_mdo_stack()->data_addr() != NULL); -} -#endif diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp index 101f19dc46d..24723c9e7bb 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psCompactionManager.hpp @@ -80,10 +80,9 @@ private: // type of TaskQueue. RegionTaskQueue _region_stack; -#if 1 // does this happen enough to need a per thread stack? - GrowableArray* _revisit_klass_stack; - GrowableArray* _revisit_mdo_stack; -#endif + Stack _revisit_klass_stack; + Stack _revisit_mdo_stack; + static ParMarkBitMap* _mark_bitmap; Action _action; @@ -113,10 +112,7 @@ private: inline static ParCompactionManager* manager_array(int index); ParCompactionManager(); - ~ParCompactionManager(); - void allocate_stacks(); - void deallocate_stacks(); ParMarkBitMap* mark_bitmap() { return _mark_bitmap; } // Take actions in preparation for a compaction. @@ -129,11 +125,8 @@ private: bool should_verify_only(); bool should_reset_only(); -#if 1 - // Probably stays as a growable array - GrowableArray* revisit_klass_stack() { return _revisit_klass_stack; } - GrowableArray* revisit_mdo_stack() { return _revisit_mdo_stack; } -#endif + Stack* revisit_klass_stack() { return &_revisit_klass_stack; } + Stack* revisit_mdo_stack() { return &_revisit_mdo_stack; } // Save for later processing. Must not fail. inline void push(oop obj) { _marking_stack.push(obj); } @@ -162,10 +155,6 @@ private: // Process tasks remaining on any stack void drain_region_stacks(); - // Debugging support -#ifdef ASSERT - bool stacks_have_been_allocated(); -#endif }; inline ParCompactionManager* ParCompactionManager::manager_array(int index) { diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp index 9006652c092..9905cfe82ed 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psMarkSweep.cpp @@ -466,33 +466,16 @@ void PSMarkSweep::allocate_stacks() { _preserved_count_max = pointer_delta(to_space->end(), to_space->top(), sizeof(jbyte)); // Now divide by the size of a PreservedMark _preserved_count_max /= sizeof(PreservedMark); - - _preserved_mark_stack = NULL; - _preserved_oop_stack = NULL; - - _marking_stack = new (ResourceObj::C_HEAP) GrowableArray(4000, true); - _objarray_stack = new (ResourceObj::C_HEAP) GrowableArray(50, true); - - int size = SystemDictionary::number_of_classes() * 2; - _revisit_klass_stack = new (ResourceObj::C_HEAP) GrowableArray(size, true); - // (#klass/k)^2, for k ~ 10 appears a better setting, but this will have to do for - // now until we investigate a more optimal setting. - _revisit_mdo_stack = new (ResourceObj::C_HEAP) GrowableArray(size*2, true); } void PSMarkSweep::deallocate_stacks() { - if (_preserved_oop_stack) { - delete _preserved_mark_stack; - _preserved_mark_stack = NULL; - delete _preserved_oop_stack; - _preserved_oop_stack = NULL; - } - - delete _marking_stack; - delete _objarray_stack; - delete _revisit_klass_stack; - delete _revisit_mdo_stack; + _preserved_mark_stack.clear(true); + _preserved_oop_stack.clear(true); + _marking_stack.clear(); + _objarray_stack.clear(true); + _revisit_klass_stack.clear(true); + _revisit_mdo_stack.clear(true); } void PSMarkSweep::mark_sweep_phase1(bool clear_all_softrefs) { @@ -542,17 +525,17 @@ void PSMarkSweep::mark_sweep_phase1(bool clear_all_softrefs) { // Update subklass/sibling/implementor links of live klasses follow_weak_klass_links(); - assert(_marking_stack->is_empty(), "just drained"); + assert(_marking_stack.is_empty(), "just drained"); // Visit memoized mdo's and clear unmarked weak refs follow_mdo_weak_refs(); - assert(_marking_stack->is_empty(), "just drained"); + assert(_marking_stack.is_empty(), "just drained"); // Visit symbol and interned string tables and delete unmarked oops SymbolTable::unlink(is_alive_closure()); StringTable::unlink(is_alive_closure()); - assert(_marking_stack->is_empty(), "stack should be empty by now"); + assert(_marking_stack.is_empty(), "stack should be empty by now"); } diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp index ac7b23575bb..57ff986c3ec 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psParallelCompact.cpp @@ -2170,6 +2170,16 @@ void PSParallelCompact::invoke_no_policy(bool maximum_heap_compaction) { heap->update_counters(); } +#ifdef ASSERT + for (size_t i = 0; i < ParallelGCThreads + 1; ++i) { + ParCompactionManager* const cm = + ParCompactionManager::manager_array(int(i)); + assert(cm->marking_stack()->is_empty(), "should be empty"); + assert(cm->region_stack()->is_empty(), "should be empty"); + assert(cm->revisit_klass_stack()->is_empty(), "should be empty"); + } +#endif // ASSERT + if (VerifyAfterGC && heap->total_collections() >= VerifyGCStartAt) { HandleMark hm; // Discard invalid handles created during verification gclog_or_tty->print(" VerifyAfterGC:"); @@ -2449,7 +2459,7 @@ void PSParallelCompact::enqueue_region_draining_tasks(GCTaskQueue* q, const unsigned int task_count = MAX2(parallel_gc_threads, 1U); for (unsigned int j = 0; j < task_count; j++) { - q->enqueue(new DrainStacksCompactionTask()); + q->enqueue(new DrainStacksCompactionTask(j)); } // Find all regions that are available (can be filled immediately) and @@ -2711,21 +2721,22 @@ PSParallelCompact::follow_weak_klass_links() { // All klasses on the revisit stack are marked at this point. // Update and follow all subklass, sibling and implementor links. if (PrintRevisitStats) { - gclog_or_tty->print_cr("#classes in system dictionary = %d", SystemDictionary::number_of_classes()); + gclog_or_tty->print_cr("#classes in system dictionary = %d", + SystemDictionary::number_of_classes()); } for (uint i = 0; i < ParallelGCThreads + 1; i++) { ParCompactionManager* cm = ParCompactionManager::manager_array(i); KeepAliveClosure keep_alive_closure(cm); - int length = cm->revisit_klass_stack()->length(); + Stack* const rks = cm->revisit_klass_stack(); if (PrintRevisitStats) { - gclog_or_tty->print_cr("Revisit klass stack[%d] length = %d", i, length); + gclog_or_tty->print_cr("Revisit klass stack[%u] length = " SIZE_FORMAT, + i, rks->size()); } - for (int j = 0; j < length; j++) { - cm->revisit_klass_stack()->at(j)->follow_weak_klass_links( - is_alive_closure(), - &keep_alive_closure); + while (!rks->is_empty()) { + Klass* const k = rks->pop(); + k->follow_weak_klass_links(is_alive_closure(), &keep_alive_closure); } - // revisit_klass_stack is cleared in reset() + cm->follow_marking_stacks(); } } @@ -2744,19 +2755,20 @@ void PSParallelCompact::follow_mdo_weak_refs() { // we can visit and clear any weak references from MDO's which // we memoized during the strong marking phase. if (PrintRevisitStats) { - gclog_or_tty->print_cr("#classes in system dictionary = %d", SystemDictionary::number_of_classes()); + gclog_or_tty->print_cr("#classes in system dictionary = %d", + SystemDictionary::number_of_classes()); } for (uint i = 0; i < ParallelGCThreads + 1; i++) { ParCompactionManager* cm = ParCompactionManager::manager_array(i); - GrowableArray* rms = cm->revisit_mdo_stack(); - int length = rms->length(); + Stack* rms = cm->revisit_mdo_stack(); if (PrintRevisitStats) { - gclog_or_tty->print_cr("Revisit MDO stack[%d] length = %d", i, length); + gclog_or_tty->print_cr("Revisit MDO stack[%u] size = " SIZE_FORMAT, + i, rms->size()); } - for (int j = 0; j < length; j++) { - rms->at(j)->follow_weak_refs(is_alive_closure()); + while (!rms->is_empty()) { + rms->pop()->follow_weak_refs(is_alive_closure()); } - // revisit_mdo_stack is cleared in reset() + cm->follow_marking_stacks(); } } diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp index 1e73d11d1e3..5a805786266 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psPromotionManager.cpp @@ -185,7 +185,6 @@ void PSPromotionManager::reset() { void PSPromotionManager::drain_stacks_depth(bool totally_drain) { - assert(claimed_stack_depth()->overflow_stack() != NULL, "invariant"); totally_drain = totally_drain || _totally_drain; #ifdef ASSERT diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp index 0ea076812b0..96add27c729 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp @@ -34,9 +34,10 @@ bool PSScavenge::_survivor_overflow = false; int PSScavenge::_tenuring_threshold = 0; HeapWord* PSScavenge::_young_generation_boundary = NULL; elapsedTimer PSScavenge::_accumulated_time; -GrowableArray* PSScavenge::_preserved_mark_stack = NULL; -GrowableArray* PSScavenge::_preserved_oop_stack = NULL; +Stack PSScavenge::_preserved_mark_stack; +Stack PSScavenge::_preserved_oop_stack; CollectorCounters* PSScavenge::_counters = NULL; +bool PSScavenge::_promotion_failed = false; // Define before use class PSIsAliveClosure: public BoolObjectClosure { @@ -223,6 +224,9 @@ bool PSScavenge::invoke_no_policy() { assert(SafepointSynchronize::is_at_safepoint(), "should be at safepoint"); assert(Thread::current() == (Thread*)VMThread::vm_thread(), "should be in vm thread"); + assert(_preserved_mark_stack.is_empty(), "should be empty"); + assert(_preserved_oop_stack.is_empty(), "should be empty"); + TimeStamp scavenge_entry; TimeStamp scavenge_midpoint; TimeStamp scavenge_exit; @@ -636,24 +640,20 @@ void PSScavenge::clean_up_failed_promotion() { young_gen->object_iterate(&unforward_closure); if (PrintGC && Verbose) { - gclog_or_tty->print_cr("Restoring %d marks", - _preserved_oop_stack->length()); + gclog_or_tty->print_cr("Restoring %d marks", _preserved_oop_stack.size()); } // Restore any saved marks. - for (int i=0; i < _preserved_oop_stack->length(); i++) { - oop obj = _preserved_oop_stack->at(i); - markOop mark = _preserved_mark_stack->at(i); + while (!_preserved_oop_stack.is_empty()) { + oop obj = _preserved_oop_stack.pop(); + markOop mark = _preserved_mark_stack.pop(); obj->set_mark(mark); } - // Deallocate the preserved mark and oop stacks. - // The stacks were allocated as CHeap objects, so - // we must call delete to prevent mem leaks. - delete _preserved_mark_stack; - _preserved_mark_stack = NULL; - delete _preserved_oop_stack; - _preserved_oop_stack = NULL; + // Clear the preserved mark and oop stack caches. + _preserved_mark_stack.clear(true); + _preserved_oop_stack.clear(true); + _promotion_failed = false; } // Reset the PromotionFailureALot counters. @@ -661,27 +661,16 @@ void PSScavenge::clean_up_failed_promotion() { } // This method is called whenever an attempt to promote an object -// fails. Some markOops will need preserving, some will not. Note +// fails. Some markOops will need preservation, some will not. Note // that the entire eden is traversed after a failed promotion, with // all forwarded headers replaced by the default markOop. This means // it is not neccessary to preserve most markOops. void PSScavenge::oop_promotion_failed(oop obj, markOop obj_mark) { - if (_preserved_mark_stack == NULL) { - ThreadCritical tc; // Lock and retest - if (_preserved_mark_stack == NULL) { - assert(_preserved_oop_stack == NULL, "Sanity"); - _preserved_mark_stack = new (ResourceObj::C_HEAP) GrowableArray(40, true); - _preserved_oop_stack = new (ResourceObj::C_HEAP) GrowableArray(40, true); - } - } - - // Because we must hold the ThreadCritical lock before using - // the stacks, we should be safe from observing partial allocations, - // which are also guarded by the ThreadCritical lock. + _promotion_failed = true; if (obj_mark->must_be_preserved_for_promotion_failure(obj)) { ThreadCritical tc; - _preserved_oop_stack->push(obj); - _preserved_mark_stack->push(obj_mark); + _preserved_oop_stack.push(obj); + _preserved_mark_stack.push(obj_mark); } } diff --git a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp index f41372bb0d4..836106d8a5c 100644 --- a/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp +++ b/hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.hpp @@ -61,9 +61,10 @@ class PSScavenge: AllStatic { static HeapWord* _young_generation_boundary; // The lowest address possible for the young_gen. // This is used to decide if an oop should be scavenged, // cards should be marked, etc. - static GrowableArray* _preserved_mark_stack; // List of marks to be restored after failed promotion - static GrowableArray* _preserved_oop_stack; // List of oops that need their mark restored. + static Stack _preserved_mark_stack; // List of marks to be restored after failed promotion + static Stack _preserved_oop_stack; // List of oops that need their mark restored. static CollectorCounters* _counters; // collector performance counters + static bool _promotion_failed; static void clean_up_failed_promotion(); @@ -79,8 +80,7 @@ class PSScavenge: AllStatic { // Accessors static int tenuring_threshold() { return _tenuring_threshold; } static elapsedTimer* accumulated_time() { return &_accumulated_time; } - static bool promotion_failed() - { return _preserved_mark_stack != NULL; } + static bool promotion_failed() { return _promotion_failed; } static int consecutive_skipped_scavenges() { return _consecutive_skipped_scavenges; } diff --git a/hotspot/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp b/hotspot/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp index 65643f818b5..6b81ed95f1b 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/concurrentGCThread.cpp @@ -185,7 +185,7 @@ SurrogateLockerThread* SurrogateLockerThread::make(TRAPS) { instanceKlassHandle klass (THREAD, k); instanceHandle thread_oop = klass->allocate_instance_handle(CHECK_NULL); - const char thread_name[] = "Surrogate Locker Thread (CMS)"; + const char thread_name[] = "Surrogate Locker Thread (Concurrent GC)"; Handle string = java_lang_String::create_from_str(thread_name, CHECK_NULL); // Initialize thread_oop to put it into the system threadGroup diff --git a/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp b/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp index e6f1deec687..5ddfbf039ab 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp +++ b/hotspot/src/share/vm/gc_implementation/shared/markSweep.cpp @@ -25,13 +25,13 @@ #include "incls/_precompiled.incl" #include "incls/_markSweep.cpp.incl" -GrowableArray* MarkSweep::_marking_stack = NULL; -GrowableArray* MarkSweep::_objarray_stack = NULL; -GrowableArray* MarkSweep::_revisit_klass_stack = NULL; -GrowableArray* MarkSweep::_revisit_mdo_stack = NULL; +Stack MarkSweep::_marking_stack; +Stack MarkSweep::_revisit_mdo_stack; +Stack MarkSweep::_revisit_klass_stack; +Stack MarkSweep::_objarray_stack; -GrowableArray* MarkSweep::_preserved_oop_stack = NULL; -GrowableArray* MarkSweep::_preserved_mark_stack= NULL; +Stack MarkSweep::_preserved_oop_stack; +Stack MarkSweep::_preserved_mark_stack; size_t MarkSweep::_preserved_count = 0; size_t MarkSweep::_preserved_count_max = 0; PreservedMark* MarkSweep::_preserved_marks = NULL; @@ -58,37 +58,42 @@ GrowableArray * MarkSweep::_last_gc_live_oops_size = NULL; #endif void MarkSweep::revisit_weak_klass_link(Klass* k) { - _revisit_klass_stack->push(k); + _revisit_klass_stack.push(k); } void MarkSweep::follow_weak_klass_links() { // All klasses on the revisit stack are marked at this point. // Update and follow all subklass, sibling and implementor links. if (PrintRevisitStats) { - gclog_or_tty->print_cr("#classes in system dictionary = %d", SystemDictionary::number_of_classes()); - gclog_or_tty->print_cr("Revisit klass stack length = %d", _revisit_klass_stack->length()); + gclog_or_tty->print_cr("#classes in system dictionary = %d", + SystemDictionary::number_of_classes()); + gclog_or_tty->print_cr("Revisit klass stack size = " SIZE_FORMAT, + _revisit_klass_stack.size()); } - for (int i = 0; i < _revisit_klass_stack->length(); i++) { - _revisit_klass_stack->at(i)->follow_weak_klass_links(&is_alive,&keep_alive); + while (!_revisit_klass_stack.is_empty()) { + Klass* const k = _revisit_klass_stack.pop(); + k->follow_weak_klass_links(&is_alive, &keep_alive); } follow_stack(); } void MarkSweep::revisit_mdo(DataLayout* p) { - _revisit_mdo_stack->push(p); + _revisit_mdo_stack.push(p); } void MarkSweep::follow_mdo_weak_refs() { // All strongly reachable oops have been marked at this point; // we can visit and clear any weak references from MDO's which // we memoized during the strong marking phase. - assert(_marking_stack->is_empty(), "Marking stack should be empty"); + assert(_marking_stack.is_empty(), "Marking stack should be empty"); if (PrintRevisitStats) { - gclog_or_tty->print_cr("#classes in system dictionary = %d", SystemDictionary::number_of_classes()); - gclog_or_tty->print_cr("Revisit MDO stack length = %d", _revisit_mdo_stack->length()); + gclog_or_tty->print_cr("#classes in system dictionary = %d", + SystemDictionary::number_of_classes()); + gclog_or_tty->print_cr("Revisit MDO stack size = " SIZE_FORMAT, + _revisit_mdo_stack.size()); } - for (int i = 0; i < _revisit_mdo_stack->length(); i++) { - _revisit_mdo_stack->at(i)->follow_weak_refs(&is_alive); + while (!_revisit_mdo_stack.is_empty()) { + _revisit_mdo_stack.pop()->follow_weak_refs(&is_alive); } follow_stack(); } @@ -106,41 +111,37 @@ void MarkSweep::MarkAndPushClosure::do_oop(narrowOop* p) { mark_and_push(p); } void MarkSweep::follow_stack() { do { - while (!_marking_stack->is_empty()) { - oop obj = _marking_stack->pop(); + while (!_marking_stack.is_empty()) { + oop obj = _marking_stack.pop(); assert (obj->is_gc_marked(), "p must be marked"); obj->follow_contents(); } // Process ObjArrays one at a time to avoid marking stack bloat. - if (!_objarray_stack->is_empty()) { - ObjArrayTask task = _objarray_stack->pop(); + if (!_objarray_stack.is_empty()) { + ObjArrayTask task = _objarray_stack.pop(); objArrayKlass* const k = (objArrayKlass*)task.obj()->blueprint(); k->oop_follow_contents(task.obj(), task.index()); } - } while (!_marking_stack->is_empty() || !_objarray_stack->is_empty()); + } while (!_marking_stack.is_empty() || !_objarray_stack.is_empty()); } MarkSweep::FollowStackClosure MarkSweep::follow_stack_closure; void MarkSweep::FollowStackClosure::do_void() { follow_stack(); } -// We preserve the mark which should be replaced at the end and the location that it -// will go. Note that the object that this markOop belongs to isn't currently at that -// address but it will be after phase4 +// We preserve the mark which should be replaced at the end and the location +// that it will go. Note that the object that this markOop belongs to isn't +// currently at that address but it will be after phase4 void MarkSweep::preserve_mark(oop obj, markOop mark) { - // we try to store preserved marks in the to space of the new generation since this - // is storage which should be available. Most of the time this should be sufficient - // space for the marks we need to preserve but if it isn't we fall back in using - // GrowableArrays to keep track of the overflow. + // We try to store preserved marks in the to space of the new generation since + // this is storage which should be available. Most of the time this should be + // sufficient space for the marks we need to preserve but if it isn't we fall + // back to using Stacks to keep track of the overflow. if (_preserved_count < _preserved_count_max) { _preserved_marks[_preserved_count++].init(obj, mark); } else { - if (_preserved_mark_stack == NULL) { - _preserved_mark_stack = new (ResourceObj::C_HEAP) GrowableArray(40, true); - _preserved_oop_stack = new (ResourceObj::C_HEAP) GrowableArray(40, true); - } - _preserved_mark_stack->push(mark); - _preserved_oop_stack->push(obj); + _preserved_mark_stack.push(mark); + _preserved_oop_stack.push(obj); } } @@ -151,8 +152,7 @@ void MarkSweep::AdjustPointerClosure::do_oop(oop* p) { adjust_pointer(p, _ void MarkSweep::AdjustPointerClosure::do_oop(narrowOop* p) { adjust_pointer(p, _is_root); } void MarkSweep::adjust_marks() { - assert(_preserved_oop_stack == NULL || - _preserved_oop_stack->length() == _preserved_mark_stack->length(), + assert( _preserved_oop_stack.size() == _preserved_mark_stack.size(), "inconsistent preserved oop stacks"); // adjust the oops we saved earlier @@ -161,21 +161,19 @@ void MarkSweep::adjust_marks() { } // deal with the overflow stack - if (_preserved_oop_stack) { - for (int i = 0; i < _preserved_oop_stack->length(); i++) { - oop* p = _preserved_oop_stack->adr_at(i); - adjust_pointer(p); - } + StackIterator iter(_preserved_oop_stack); + while (!iter.is_empty()) { + oop* p = iter.next_addr(); + adjust_pointer(p); } } void MarkSweep::restore_marks() { - assert(_preserved_oop_stack == NULL || - _preserved_oop_stack->length() == _preserved_mark_stack->length(), + assert(_preserved_oop_stack.size() == _preserved_mark_stack.size(), "inconsistent preserved oop stacks"); if (PrintGC && Verbose) { - gclog_or_tty->print_cr("Restoring %d marks", _preserved_count + - (_preserved_oop_stack ? _preserved_oop_stack->length() : 0)); + gclog_or_tty->print_cr("Restoring %d marks", + _preserved_count + _preserved_oop_stack.size()); } // restore the marks we saved earlier @@ -184,12 +182,10 @@ void MarkSweep::restore_marks() { } // deal with the overflow - if (_preserved_oop_stack) { - for (int i = 0; i < _preserved_oop_stack->length(); i++) { - oop obj = _preserved_oop_stack->at(i); - markOop mark = _preserved_mark_stack->at(i); - obj->set_mark(mark); - } + while (!_preserved_oop_stack.is_empty()) { + oop obj = _preserved_oop_stack.pop(); + markOop mark = _preserved_mark_stack.pop(); + obj->set_mark(mark); } } diff --git a/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp b/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp index add0a966d86..a4939080bf3 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/markSweep.hpp @@ -104,23 +104,22 @@ class MarkSweep : AllStatic { friend class KeepAliveClosure; friend class VM_MarkSweep; friend void marksweep_init(); - friend class DataLayout; // // Vars // protected: // Traversal stacks used during phase1 - static GrowableArray* _marking_stack; - static GrowableArray* _objarray_stack; + static Stack _marking_stack; + static Stack _objarray_stack; // Stack for live klasses to revisit at end of marking phase - static GrowableArray* _revisit_klass_stack; + static Stack _revisit_klass_stack; // Set (stack) of MDO's to revisit at end of marking phase - static GrowableArray* _revisit_mdo_stack; + static Stack _revisit_mdo_stack; // Space for storing/restoring mark word - static GrowableArray* _preserved_mark_stack; - static GrowableArray* _preserved_oop_stack; + static Stack _preserved_mark_stack; + static Stack _preserved_oop_stack; static size_t _preserved_count; static size_t _preserved_count_max; static PreservedMark* _preserved_marks; diff --git a/hotspot/src/share/vm/gc_implementation/shared/markSweep.inline.hpp b/hotspot/src/share/vm/gc_implementation/shared/markSweep.inline.hpp index 7570a9c097a..933e3baad3e 100644 --- a/hotspot/src/share/vm/gc_implementation/shared/markSweep.inline.hpp +++ b/hotspot/src/share/vm/gc_implementation/shared/markSweep.inline.hpp @@ -72,7 +72,7 @@ template inline void MarkSweep::mark_and_push(T* p) { oop obj = oopDesc::decode_heap_oop_not_null(heap_oop); if (!obj->mark()->is_marked()) { mark_object(obj); - _marking_stack->push(obj); + _marking_stack.push(obj); } } } @@ -80,7 +80,7 @@ template inline void MarkSweep::mark_and_push(T* p) { void MarkSweep::push_objarray(oop obj, size_t index) { ObjArrayTask task(obj, index); assert(task.is_valid(), "bad ObjArrayTask"); - _objarray_stack->push(task); + _objarray_stack.push(task); } template inline void MarkSweep::adjust_pointer(T* p, bool isroot) { diff --git a/hotspot/src/share/vm/gc_interface/collectedHeap.cpp b/hotspot/src/share/vm/gc_interface/collectedHeap.cpp index 6fd9f0228c8..ad13d8bb4d5 100644 --- a/hotspot/src/share/vm/gc_interface/collectedHeap.cpp +++ b/hotspot/src/share/vm/gc_interface/collectedHeap.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2010, 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,9 @@ size_t CollectedHeap::_filler_array_max_size = 0; // Memory state functions. -CollectedHeap::CollectedHeap() + +CollectedHeap::CollectedHeap() : _n_par_threads(0) + { const size_t max_len = size_t(arrayOopDesc::max_array_length(T_INT)); const size_t elements_per_word = HeapWordSize / sizeof(jint); diff --git a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp index c30989af6ce..c737eb1da66 100644 --- a/hotspot/src/share/vm/gc_interface/collectedHeap.hpp +++ b/hotspot/src/share/vm/gc_interface/collectedHeap.hpp @@ -59,6 +59,8 @@ class CollectedHeap : public CHeapObj { MemRegion _reserved; BarrierSet* _barrier_set; bool _is_gc_active; + int _n_par_threads; + unsigned int _total_collections; // ... started unsigned int _total_full_collections; // ... started NOT_PRODUCT(volatile size_t _promotion_failure_alot_count;) @@ -293,6 +295,12 @@ class CollectedHeap : public CHeapObj { } GCCause::Cause gc_cause() { return _gc_cause; } + // Number of threads currently working on GC tasks. + int n_par_threads() { return _n_par_threads; } + + // May be overridden to set additional parallelism. + virtual void set_par_threads(int t) { _n_par_threads = t; }; + // Preload classes into the shared portion of the heap, and then dump // that data to a file so that it can be loaded directly by another // VM (then terminate). @@ -606,6 +614,14 @@ class CollectedHeap : public CHeapObj { return (CIFireOOMAt > 1 && _fire_out_of_memory_count >= CIFireOOMAt); } #endif + + public: + // This is a convenience method that is used in cases where + // the actual number of GC worker threads is not pertinent but + // only whether there more than 0. Use of this method helps + // reduce the occurrence of ParallelGCThreads to uses where the + // actual number may be germane. + static bool use_parallel_gc_threads() { return ParallelGCThreads > 0; } }; // Class to set and reset the GC cause for a CollectedHeap. diff --git a/hotspot/src/share/vm/includeDB_compiler1 b/hotspot/src/share/vm/includeDB_compiler1 index 18ff024df70..f578561609e 100644 --- a/hotspot/src/share/vm/includeDB_compiler1 +++ b/hotspot/src/share/vm/includeDB_compiler1 @@ -448,3 +448,7 @@ thread.cpp c1_Compiler.hpp top.hpp c1_globals.hpp vmStructs.hpp c1_Runtime1.hpp + +c1_Canonicalizer.cpp c1_ValueStack.hpp + +c1_LIR.cpp c1_ValueStack.hpp diff --git a/hotspot/src/share/vm/includeDB_core b/hotspot/src/share/vm/includeDB_core index f7362cdedc4..14d78e91d41 100644 --- a/hotspot/src/share/vm/includeDB_core +++ b/hotspot/src/share/vm/includeDB_core @@ -1437,12 +1437,14 @@ defNewGeneration.cpp oop.inline.hpp defNewGeneration.cpp referencePolicy.hpp defNewGeneration.cpp space.inline.hpp defNewGeneration.cpp spaceDecorator.hpp +defNewGeneration.cpp stack.inline.hpp defNewGeneration.cpp thread_.inline.hpp defNewGeneration.hpp ageTable.hpp defNewGeneration.hpp cSpaceCounters.hpp defNewGeneration.hpp generation.inline.hpp defNewGeneration.hpp generationCounters.hpp +defNewGeneration.hpp stack.hpp defNewGeneration.inline.hpp cardTableRS.hpp defNewGeneration.inline.hpp defNewGeneration.hpp @@ -3462,6 +3464,7 @@ permGen.hpp gcCause.hpp permGen.hpp generation.hpp permGen.hpp handles.hpp permGen.hpp iterator.hpp +permGen.hpp mutexLocker.hpp permGen.hpp virtualspace.hpp placeholders.cpp fieldType.hpp @@ -3872,6 +3875,10 @@ specialized_oop_closures.cpp specialized_oop_closures.hpp specialized_oop_closures.hpp atomic.hpp +stack.hpp allocation.inline.hpp + +stack.inline.hpp stack.hpp + stackMapFrame.cpp globalDefinitions.hpp stackMapFrame.cpp handles.inline.hpp stackMapFrame.cpp oop.inline.hpp @@ -4116,6 +4123,7 @@ task.hpp top.hpp taskqueue.cpp debug.hpp taskqueue.cpp oop.inline.hpp taskqueue.cpp os.hpp +taskqueue.cpp stack.inline.hpp taskqueue.cpp taskqueue.hpp taskqueue.cpp thread_.inline.hpp @@ -4123,6 +4131,7 @@ taskqueue.hpp allocation.hpp taskqueue.hpp allocation.inline.hpp taskqueue.hpp mutex.hpp taskqueue.hpp orderAccess_.inline.hpp +taskqueue.hpp stack.hpp templateInterpreter.cpp interpreter.hpp templateInterpreter.cpp interpreterGenerator.hpp @@ -4742,6 +4751,7 @@ workgroup.cpp allocation.inline.hpp workgroup.cpp os.hpp workgroup.cpp workgroup.hpp +workgroup.hpp taskqueue.hpp workgroup.hpp thread_.inline.hpp xmlstream.cpp allocation.hpp diff --git a/hotspot/src/share/vm/memory/allocation.hpp b/hotspot/src/share/vm/memory/allocation.hpp index a9f363b499b..7918d9f00b5 100644 --- a/hotspot/src/share/vm/memory/allocation.hpp +++ b/hotspot/src/share/vm/memory/allocation.hpp @@ -289,16 +289,17 @@ private: // One of the following macros must be used when allocating // an array or object from an arena -#define NEW_ARENA_ARRAY(arena, type, size)\ - (type*) arena->Amalloc((size) * sizeof(type)) +#define NEW_ARENA_ARRAY(arena, type, size) \ + (type*) (arena)->Amalloc((size) * sizeof(type)) -#define REALLOC_ARENA_ARRAY(arena, type, old, old_size, new_size)\ - (type*) arena->Arealloc((char*)(old), (old_size) * sizeof(type), (new_size) * sizeof(type) ) +#define REALLOC_ARENA_ARRAY(arena, type, old, old_size, new_size) \ + (type*) (arena)->Arealloc((char*)(old), (old_size) * sizeof(type), \ + (new_size) * sizeof(type) ) -#define FREE_ARENA_ARRAY(arena, type, old, size)\ - arena->Afree((char*)(old), (size) * sizeof(type)) +#define FREE_ARENA_ARRAY(arena, type, old, size) \ + (arena)->Afree((char*)(old), (size) * sizeof(type)) -#define NEW_ARENA_OBJ(arena, type)\ +#define NEW_ARENA_OBJ(arena, type) \ NEW_ARENA_ARRAY(arena, type, 1) diff --git a/hotspot/src/share/vm/memory/defNewGeneration.cpp b/hotspot/src/share/vm/memory/defNewGeneration.cpp index 8cce52edeee..ac7cc267f23 100644 --- a/hotspot/src/share/vm/memory/defNewGeneration.cpp +++ b/hotspot/src/share/vm/memory/defNewGeneration.cpp @@ -87,9 +87,7 @@ void DefNewGeneration::FastEvacuateFollowersClosure::do_void() { _gch->oop_since_save_marks_iterate(_level, _scan_cur_or_nonheap, _scan_older); } while (!_gch->no_allocs_since_save_marks(_level)); - guarantee(_gen->promo_failure_scan_stack() == NULL - || _gen->promo_failure_scan_stack()->length() == 0, - "Failed to finish scan"); + guarantee(_gen->promo_failure_scan_is_complete(), "Failed to finish scan"); } ScanClosure::ScanClosure(DefNewGeneration* g, bool gc_barrier) : @@ -130,9 +128,6 @@ DefNewGeneration::DefNewGeneration(ReservedSpace rs, int level, const char* policy) : Generation(rs, initial_size, level), - _objs_with_preserved_marks(NULL), - _preserved_marks_of_objs(NULL), - _promo_failure_scan_stack(NULL), _promo_failure_drain_in_progress(false), _should_allocate_from_space(false) { @@ -604,12 +599,8 @@ void DefNewGeneration::collect(bool full, } else { assert(HandlePromotionFailure, "Should not be here unless promotion failure handling is on"); - assert(_promo_failure_scan_stack != NULL && - _promo_failure_scan_stack->length() == 0, "post condition"); - - // deallocate stack and it's elements - delete _promo_failure_scan_stack; - _promo_failure_scan_stack = NULL; + assert(_promo_failure_scan_stack.is_empty(), "post condition"); + _promo_failure_scan_stack.clear(true); // Clear cached segments. remove_forwarding_pointers(); if (PrintGCDetails) { @@ -620,7 +611,7 @@ void DefNewGeneration::collect(bool full, // case there can be live objects in to-space // as a result of a partial evacuation of eden // and from-space. - swap_spaces(); // For the sake of uniformity wrt ParNewGeneration::collect(). + swap_spaces(); // For uniformity wrt ParNewGeneration. from()->set_next_compaction_space(to()); gch->set_incremental_collection_will_fail(); @@ -653,34 +644,23 @@ void DefNewGeneration::remove_forwarding_pointers() { RemoveForwardPointerClosure rspc; eden()->object_iterate(&rspc); from()->object_iterate(&rspc); + // Now restore saved marks, if any. - if (_objs_with_preserved_marks != NULL) { - assert(_preserved_marks_of_objs != NULL, "Both or none."); - assert(_objs_with_preserved_marks->length() == - _preserved_marks_of_objs->length(), "Both or none."); - for (int i = 0; i < _objs_with_preserved_marks->length(); i++) { - oop obj = _objs_with_preserved_marks->at(i); - markOop m = _preserved_marks_of_objs->at(i); - obj->set_mark(m); - } - delete _objs_with_preserved_marks; - delete _preserved_marks_of_objs; - _objs_with_preserved_marks = NULL; - _preserved_marks_of_objs = NULL; + assert(_objs_with_preserved_marks.size() == _preserved_marks_of_objs.size(), + "should be the same"); + while (!_objs_with_preserved_marks.is_empty()) { + oop obj = _objs_with_preserved_marks.pop(); + markOop m = _preserved_marks_of_objs.pop(); + obj->set_mark(m); } + _objs_with_preserved_marks.clear(true); + _preserved_marks_of_objs.clear(true); } void DefNewGeneration::preserve_mark_if_necessary(oop obj, markOop m) { if (m->must_be_preserved_for_promotion_failure(obj)) { - if (_objs_with_preserved_marks == NULL) { - assert(_preserved_marks_of_objs == NULL, "Both or none."); - _objs_with_preserved_marks = new (ResourceObj::C_HEAP) - GrowableArray(PreserveMarkStackSize, true); - _preserved_marks_of_objs = new (ResourceObj::C_HEAP) - GrowableArray(PreserveMarkStackSize, true); - } - _objs_with_preserved_marks->push(obj); - _preserved_marks_of_objs->push(m); + _objs_with_preserved_marks.push(obj); + _preserved_marks_of_objs.push(m); } } @@ -695,7 +675,7 @@ void DefNewGeneration::handle_promotion_failure(oop old) { old->forward_to(old); _promotion_failed = true; - push_on_promo_failure_scan_stack(old); + _promo_failure_scan_stack.push(old); if (!_promo_failure_drain_in_progress) { // prevent recursion in copy_to_survivor_space() @@ -748,20 +728,9 @@ oop DefNewGeneration::copy_to_survivor_space(oop old) { return obj; } -void DefNewGeneration::push_on_promo_failure_scan_stack(oop obj) { - if (_promo_failure_scan_stack == NULL) { - _promo_failure_scan_stack = new (ResourceObj::C_HEAP) - GrowableArray(40, true); - } - - _promo_failure_scan_stack->push(obj); -} - void DefNewGeneration::drain_promo_failure_scan_stack() { - assert(_promo_failure_scan_stack != NULL, "precondition"); - - while (_promo_failure_scan_stack->length() > 0) { - oop obj = _promo_failure_scan_stack->pop(); + while (!_promo_failure_scan_stack.is_empty()) { + oop obj = _promo_failure_scan_stack.pop(); obj->oop_iterate(_promo_failure_scan_stack_closure); } } diff --git a/hotspot/src/share/vm/memory/defNewGeneration.hpp b/hotspot/src/share/vm/memory/defNewGeneration.hpp index 64b1a82dc66..166510b0a38 100644 --- a/hotspot/src/share/vm/memory/defNewGeneration.hpp +++ b/hotspot/src/share/vm/memory/defNewGeneration.hpp @@ -77,10 +77,10 @@ protected: // word being overwritten with a self-forwarding-pointer. void preserve_mark_if_necessary(oop obj, markOop m); - // When one is non-null, so is the other. Together, they each pair is - // an object with a preserved mark, and its mark value. - GrowableArray* _objs_with_preserved_marks; - GrowableArray* _preserved_marks_of_objs; + // Together, these keep pairs. + // They should always contain the same number of elements. + Stack _objs_with_preserved_marks; + Stack _preserved_marks_of_objs; // Returns true if the collection can be safely attempted. // If this method returns false, a collection is not @@ -94,11 +94,7 @@ protected: _promo_failure_scan_stack_closure = scan_stack_closure; } - GrowableArray* _promo_failure_scan_stack; - GrowableArray* promo_failure_scan_stack() const { - return _promo_failure_scan_stack; - } - void push_on_promo_failure_scan_stack(oop); + Stack _promo_failure_scan_stack; void drain_promo_failure_scan_stack(void); bool _promo_failure_drain_in_progress; @@ -184,8 +180,6 @@ protected: void do_void(); }; - class FastEvacuateFollowersClosure; - friend class FastEvacuateFollowersClosure; class FastEvacuateFollowersClosure: public VoidClosure { GenCollectedHeap* _gch; int _level; @@ -336,6 +330,10 @@ protected: void verify(bool allow_dirty); + bool promo_failure_scan_is_complete() const { + return _promo_failure_scan_stack.is_empty(); + } + protected: // If clear_space is true, clear the survivor spaces. Eden is // cleared if the minimum size of eden is 0. If mangle_space diff --git a/hotspot/src/share/vm/memory/genCollectedHeap.cpp b/hotspot/src/share/vm/memory/genCollectedHeap.cpp index 0f7d2dc738d..c2b8dcb3fab 100644 --- a/hotspot/src/share/vm/memory/genCollectedHeap.cpp +++ b/hotspot/src/share/vm/memory/genCollectedHeap.cpp @@ -676,7 +676,7 @@ HeapWord* GenCollectedHeap::satisfy_failed_allocation(size_t size, bool is_tlab) void GenCollectedHeap::set_par_threads(int t) { SharedHeap::set_par_threads(t); - _gen_process_strong_tasks->set_par_threads(t); + _gen_process_strong_tasks->set_n_threads(t); } class AssertIsPermClosure: public OopClosure { diff --git a/hotspot/src/share/vm/memory/genCollectedHeap.hpp b/hotspot/src/share/vm/memory/genCollectedHeap.hpp index 13d68c98ea3..75266a2d9a9 100644 --- a/hotspot/src/share/vm/memory/genCollectedHeap.hpp +++ b/hotspot/src/share/vm/memory/genCollectedHeap.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2010, 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 @@ -74,6 +74,7 @@ public: // Data structure for claiming the (potentially) parallel tasks in // (gen-specific) strong roots processing. SubTasksDone* _gen_process_strong_tasks; + SubTasksDone* gen_process_strong_tasks() { return _gen_process_strong_tasks; } // In block contents verification, the number of header words to skip NOT_PRODUCT(static size_t _skip_header_HeapWords;) diff --git a/hotspot/src/share/vm/memory/genMarkSweep.cpp b/hotspot/src/share/vm/memory/genMarkSweep.cpp index 685b7df9d74..da99d56cfc8 100644 --- a/hotspot/src/share/vm/memory/genMarkSweep.cpp +++ b/hotspot/src/share/vm/memory/genMarkSweep.cpp @@ -161,17 +161,6 @@ void GenMarkSweep::allocate_stacks() { _preserved_marks = (PreservedMark*)scratch; _preserved_count = 0; - _preserved_mark_stack = NULL; - _preserved_oop_stack = NULL; - - _marking_stack = new (ResourceObj::C_HEAP) GrowableArray(4000, true); - _objarray_stack = new (ResourceObj::C_HEAP) GrowableArray(50, true); - - int size = SystemDictionary::number_of_classes() * 2; - _revisit_klass_stack = new (ResourceObj::C_HEAP) GrowableArray(size, true); - // (#klass/k)^2 for k ~ 10 appears to be a better fit, but this will have to do for - // now until we have had a chance to investigate a more optimal setting. - _revisit_mdo_stack = new (ResourceObj::C_HEAP) GrowableArray(2*size, true); #ifdef VALIDATE_MARK_SWEEP if (ValidateMarkSweep) { @@ -206,17 +195,12 @@ void GenMarkSweep::deallocate_stacks() { gch->release_scratch(); } - if (_preserved_oop_stack) { - delete _preserved_mark_stack; - _preserved_mark_stack = NULL; - delete _preserved_oop_stack; - _preserved_oop_stack = NULL; - } - - delete _marking_stack; - delete _objarray_stack; - delete _revisit_klass_stack; - delete _revisit_mdo_stack; + _preserved_mark_stack.clear(true); + _preserved_oop_stack.clear(true); + _marking_stack.clear(); + _objarray_stack.clear(true); + _revisit_klass_stack.clear(true); + _revisit_mdo_stack.clear(true); #ifdef VALIDATE_MARK_SWEEP if (ValidateMarkSweep) { @@ -274,17 +258,17 @@ void GenMarkSweep::mark_sweep_phase1(int level, // Update subklass/sibling/implementor links of live klasses follow_weak_klass_links(); - assert(_marking_stack->is_empty(), "just drained"); + assert(_marking_stack.is_empty(), "just drained"); // Visit memoized MDO's and clear any unmarked weak refs follow_mdo_weak_refs(); - assert(_marking_stack->is_empty(), "just drained"); + assert(_marking_stack.is_empty(), "just drained"); // Visit symbol and interned string tables and delete unmarked oops SymbolTable::unlink(&is_alive); StringTable::unlink(&is_alive); - assert(_marking_stack->is_empty(), "stack should be empty by now"); + assert(_marking_stack.is_empty(), "stack should be empty by now"); } diff --git a/hotspot/src/share/vm/memory/permGen.cpp b/hotspot/src/share/vm/memory/permGen.cpp index cae72174dcf..7073aa47d6e 100644 --- a/hotspot/src/share/vm/memory/permGen.cpp +++ b/hotspot/src/share/vm/memory/permGen.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2010, 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,6 +25,17 @@ #include "incls/_precompiled.incl" #include "incls/_permGen.cpp.incl" +HeapWord* PermGen::request_expand_and_allocate(Generation* gen, size_t size, + GCCause::Cause prev_cause) { + if (gen->capacity() < _capacity_expansion_limit || + prev_cause != GCCause::_no_gc || UseG1GC) { // last disjunct is a temporary hack for G1 + return gen->expand_and_allocate(size, false); + } + // We have reached the limit of capacity expansion where + // we will not expand further until a GC is done; request denied. + return NULL; +} + HeapWord* PermGen::mem_allocate_in_gen(size_t size, Generation* gen) { GCCause::Cause next_cause = GCCause::_permanent_generation_full; GCCause::Cause prev_cause = GCCause::_no_gc; @@ -37,10 +48,14 @@ HeapWord* PermGen::mem_allocate_in_gen(size_t size, Generation* gen) { if ((obj = gen->allocate(size, false)) != NULL) { return obj; } - if (gen->capacity() < _capacity_expansion_limit || - prev_cause != GCCause::_no_gc) { - obj = gen->expand_and_allocate(size, false); - } + // Attempt to expand and allocate the requested space: + // specific subtypes may use specific policy to either expand + // or not. The default policy (see above) is to expand until + // _capacity_expansion_limit, and no further unless a GC is done. + // Concurrent collectors may decide to kick off a concurrent + // collection under appropriate conditions. + obj = request_expand_and_allocate(gen, size, prev_cause); + if (obj != NULL || prev_cause == GCCause::_last_ditch_collection) { return obj; } @@ -119,5 +134,5 @@ void CompactingPermGen::compute_new_size() { if (_gen->capacity() > desired_capacity) { _gen->shrink(_gen->capacity() - desired_capacity); } - _capacity_expansion_limit = _gen->capacity() + MaxPermHeapExpansion; + set_capacity_expansion_limit(_gen->capacity() + MaxPermHeapExpansion); } diff --git a/hotspot/src/share/vm/memory/permGen.hpp b/hotspot/src/share/vm/memory/permGen.hpp index 67ce81aeb42..a6f54e0f842 100644 --- a/hotspot/src/share/vm/memory/permGen.hpp +++ b/hotspot/src/share/vm/memory/permGen.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2010, 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 @@ -30,15 +30,26 @@ class Generation; class GenRemSet; class CSpaceCounters; -// PermGen models the part of the heap +// PermGen models the part of the heap used to allocate class meta-data. class PermGen : public CHeapObj { friend class VMStructs; protected: size_t _capacity_expansion_limit; // maximum expansion allowed without a // full gc occurring + void set_capacity_expansion_limit(size_t limit) { + assert_locked_or_safepoint(Heap_lock); + _capacity_expansion_limit = limit; + } HeapWord* mem_allocate_in_gen(size_t size, Generation* gen); + // Along with mem_allocate_in_gen() above, implements policy for + // "scheduling" allocation/expansion/collection of the perm gen. + // The virtual method request_...() below can be overridden by + // subtypes that want to implement a different expansion/collection + // policy from the default provided. + virtual HeapWord* request_expand_and_allocate(Generation* gen, size_t size, + GCCause::Cause prev_cause); public: enum Name { diff --git a/hotspot/src/share/vm/memory/referenceProcessor.cpp b/hotspot/src/share/vm/memory/referenceProcessor.cpp index dc451161d22..6e58f6af3f9 100644 --- a/hotspot/src/share/vm/memory/referenceProcessor.cpp +++ b/hotspot/src/share/vm/memory/referenceProcessor.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2010, 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 @@ -137,16 +137,17 @@ ReferenceProcessor::ReferenceProcessor(MemRegion span, _discovery_is_atomic = atomic_discovery; _discovery_is_mt = mt_discovery; _num_q = mt_degree; - _discoveredSoftRefs = NEW_C_HEAP_ARRAY(DiscoveredList, _num_q * subclasses_of_ref); + _max_num_q = mt_degree; + _discoveredSoftRefs = NEW_C_HEAP_ARRAY(DiscoveredList, _max_num_q * subclasses_of_ref); if (_discoveredSoftRefs == NULL) { vm_exit_during_initialization("Could not allocated RefProc Array"); } - _discoveredWeakRefs = &_discoveredSoftRefs[_num_q]; - _discoveredFinalRefs = &_discoveredWeakRefs[_num_q]; - _discoveredPhantomRefs = &_discoveredFinalRefs[_num_q]; + _discoveredWeakRefs = &_discoveredSoftRefs[_max_num_q]; + _discoveredFinalRefs = &_discoveredWeakRefs[_max_num_q]; + _discoveredPhantomRefs = &_discoveredFinalRefs[_max_num_q]; assert(sentinel_ref() != NULL, "_sentinelRef is NULL"); // Initialized all entries to _sentinelRef - for (int i = 0; i < _num_q * subclasses_of_ref; i++) { + for (int i = 0; i < _max_num_q * subclasses_of_ref; i++) { _discoveredSoftRefs[i].set_head(sentinel_ref()); _discoveredSoftRefs[i].set_length(0); } @@ -159,7 +160,7 @@ ReferenceProcessor::ReferenceProcessor(MemRegion span, #ifndef PRODUCT void ReferenceProcessor::verify_no_references_recorded() { guarantee(!_discovering_refs, "Discovering refs?"); - for (int i = 0; i < _num_q * subclasses_of_ref; i++) { + for (int i = 0; i < _max_num_q * subclasses_of_ref; i++) { guarantee(_discoveredSoftRefs[i].empty(), "Found non-empty discovered list"); } @@ -167,7 +168,11 @@ void ReferenceProcessor::verify_no_references_recorded() { #endif void ReferenceProcessor::weak_oops_do(OopClosure* f) { - for (int i = 0; i < _num_q * subclasses_of_ref; i++) { + // Should this instead be + // for (int i = 0; i < subclasses_of_ref; i++_ { + // for (int j = 0; j < _num_q; j++) { + // int index = i * _max_num_q + j; + for (int i = 0; i < _max_num_q * subclasses_of_ref; i++) { if (UseCompressedOops) { f->do_oop((narrowOop*)_discoveredSoftRefs[i].adr_head()); } else { @@ -395,7 +400,15 @@ public: assert(work_id < (unsigned int)_ref_processor.num_q(), "Index out-of-bounds"); // Simplest first cut: static partitioning. int index = work_id; - for (int j = 0; j < subclasses_of_ref; j++, index += _n_queues) { + // The increment on "index" must correspond to the maximum number of queues + // (n_queues) with which that ReferenceProcessor was created. That + // is because of the "clever" way the discovered references lists were + // allocated and are indexed into. That number is ParallelGCThreads + // currently. Assert that. + assert(_n_queues == (int) ParallelGCThreads, "Different number not expected"); + for (int j = 0; + j < subclasses_of_ref; + j++, index += _n_queues) { _ref_processor.enqueue_discovered_reflist( _refs_lists[index], _pending_list_addr); _refs_lists[index].set_head(_sentinel_ref); @@ -410,11 +423,11 @@ void ReferenceProcessor::enqueue_discovered_reflists(HeapWord* pending_list_addr if (_processing_is_mt && task_executor != NULL) { // Parallel code RefProcEnqueueTask tsk(*this, _discoveredSoftRefs, - pending_list_addr, sentinel_ref(), _num_q); + pending_list_addr, sentinel_ref(), _max_num_q); task_executor->execute(tsk); } else { // Serial code: call the parent class's implementation - for (int i = 0; i < _num_q * subclasses_of_ref; i++) { + for (int i = 0; i < _max_num_q * subclasses_of_ref; i++) { enqueue_discovered_reflist(_discoveredSoftRefs[i], pending_list_addr); _discoveredSoftRefs[i].set_head(sentinel_ref()); _discoveredSoftRefs[i].set_length(0); @@ -614,8 +627,9 @@ ReferenceProcessor::process_phase1(DiscoveredList& refs_list, complete_gc->do_void(); NOT_PRODUCT( if (PrintGCDetails && TraceReferenceGC) { - gclog_or_tty->print(" Dropped %d dead Refs out of %d " - "discovered Refs by policy ", iter.removed(), iter.processed()); + gclog_or_tty->print_cr(" Dropped %d dead Refs out of %d " + "discovered Refs by policy list " INTPTR_FORMAT, + iter.removed(), iter.processed(), (address)refs_list.head()); } ) } @@ -651,8 +665,9 @@ ReferenceProcessor::pp2_work(DiscoveredList& refs_list, } NOT_PRODUCT( if (PrintGCDetails && TraceReferenceGC) { - gclog_or_tty->print(" Dropped %d active Refs out of %d " - "Refs in discovered list ", iter.removed(), iter.processed()); + gclog_or_tty->print_cr(" Dropped %d active Refs out of %d " + "Refs in discovered list " INTPTR_FORMAT, + iter.removed(), iter.processed(), (address)refs_list.head()); } ) } @@ -689,8 +704,9 @@ ReferenceProcessor::pp2_work_concurrent_discovery(DiscoveredList& refs_list, complete_gc->do_void(); NOT_PRODUCT( if (PrintGCDetails && TraceReferenceGC) { - gclog_or_tty->print(" Dropped %d active Refs out of %d " - "Refs in discovered list ", iter.removed(), iter.processed()); + gclog_or_tty->print_cr(" Dropped %d active Refs out of %d " + "Refs in discovered list " INTPTR_FORMAT, + iter.removed(), iter.processed(), (address)refs_list.head()); } ) } @@ -704,6 +720,7 @@ ReferenceProcessor::process_phase3(DiscoveredList& refs_list, BoolObjectClosure* is_alive, OopClosure* keep_alive, VoidClosure* complete_gc) { + ResourceMark rm; DiscoveredListIterator iter(refs_list, keep_alive, is_alive); while (iter.has_next()) { iter.update_discovered(); @@ -743,8 +760,8 @@ ReferenceProcessor::abandon_partial_discovered_list(DiscoveredList& refs_list) { void ReferenceProcessor::abandon_partial_discovery() { // loop over the lists - for (int i = 0; i < _num_q * subclasses_of_ref; i++) { - if (TraceReferenceGC && PrintGCDetails && ((i % _num_q) == 0)) { + for (int i = 0; i < _max_num_q * subclasses_of_ref; i++) { + if (TraceReferenceGC && PrintGCDetails && ((i % _max_num_q) == 0)) { gclog_or_tty->print_cr( "\nAbandoning %s discovered list", list_name(i)); @@ -766,7 +783,9 @@ public: OopClosure& keep_alive, VoidClosure& complete_gc) { - _ref_processor.process_phase1(_refs_lists[i], _policy, + Thread* thr = Thread::current(); + int refs_list_index = ((WorkerThread*)thr)->id(); + _ref_processor.process_phase1(_refs_lists[refs_list_index], _policy, &is_alive, &keep_alive, &complete_gc); } private: @@ -802,6 +821,11 @@ public: OopClosure& keep_alive, VoidClosure& complete_gc) { + // Don't use "refs_list_index" calculated in this way because + // balance_queues() has moved the Ref's into the first n queues. + // Thread* thr = Thread::current(); + // int refs_list_index = ((WorkerThread*)thr)->id(); + // _ref_processor.process_phase3(_refs_lists[refs_list_index], _clear_referent, _ref_processor.process_phase3(_refs_lists[i], _clear_referent, &is_alive, &keep_alive, &complete_gc); } @@ -810,23 +834,47 @@ private: }; // Balances reference queues. +// Move entries from all queues[0, 1, ..., _max_num_q-1] to +// queues[0, 1, ..., _num_q-1] because only the first _num_q +// corresponding to the active workers will be processed. void ReferenceProcessor::balance_queues(DiscoveredList ref_lists[]) { // calculate total length size_t total_refs = 0; - for (int i = 0; i < _num_q; ++i) { + if (TraceReferenceGC && PrintGCDetails) { + gclog_or_tty->print_cr("\nBalance ref_lists "); + } + + for (int i = 0; i < _max_num_q; ++i) { total_refs += ref_lists[i].length(); + if (TraceReferenceGC && PrintGCDetails) { + gclog_or_tty->print("%d ", ref_lists[i].length()); + } + } + if (TraceReferenceGC && PrintGCDetails) { + gclog_or_tty->print_cr(" = %d", total_refs); } size_t avg_refs = total_refs / _num_q + 1; int to_idx = 0; - for (int from_idx = 0; from_idx < _num_q; from_idx++) { - while (ref_lists[from_idx].length() > avg_refs) { + for (int from_idx = 0; from_idx < _max_num_q; from_idx++) { + bool move_all = false; + if (from_idx >= _num_q) { + move_all = ref_lists[from_idx].length() > 0; + } + while ((ref_lists[from_idx].length() > avg_refs) || + move_all) { assert(to_idx < _num_q, "Sanity Check!"); if (ref_lists[to_idx].length() < avg_refs) { // move superfluous refs - size_t refs_to_move = - MIN2(ref_lists[from_idx].length() - avg_refs, - avg_refs - ref_lists[to_idx].length()); + size_t refs_to_move; + // Move all the Ref's if the from queue will not be processed. + if (move_all) { + refs_to_move = MIN2(ref_lists[from_idx].length(), + avg_refs - ref_lists[to_idx].length()); + } else { + refs_to_move = MIN2(ref_lists[from_idx].length() - avg_refs, + avg_refs - ref_lists[to_idx].length()); + } oop move_head = ref_lists[from_idx].head(); oop move_tail = move_head; oop new_head = move_head; @@ -840,11 +888,35 @@ void ReferenceProcessor::balance_queues(DiscoveredList ref_lists[]) ref_lists[to_idx].inc_length(refs_to_move); ref_lists[from_idx].set_head(new_head); ref_lists[from_idx].dec_length(refs_to_move); + if (ref_lists[from_idx].length() == 0) { + break; + } } else { - ++to_idx; + to_idx = (to_idx + 1) % _num_q; } } } +#ifdef ASSERT + size_t balanced_total_refs = 0; + for (int i = 0; i < _max_num_q; ++i) { + balanced_total_refs += ref_lists[i].length(); + if (TraceReferenceGC && PrintGCDetails) { + gclog_or_tty->print("%d ", ref_lists[i].length()); + } + } + if (TraceReferenceGC && PrintGCDetails) { + gclog_or_tty->print_cr(" = %d", balanced_total_refs); + gclog_or_tty->flush(); + } + assert(total_refs == balanced_total_refs, "Balancing was incomplete"); +#endif +} + +void ReferenceProcessor::balance_all_queues() { + balance_queues(_discoveredSoftRefs); + balance_queues(_discoveredWeakRefs); + balance_queues(_discoveredFinalRefs); + balance_queues(_discoveredPhantomRefs); } void @@ -857,8 +929,17 @@ ReferenceProcessor::process_discovered_reflist( VoidClosure* complete_gc, AbstractRefProcTaskExecutor* task_executor) { - bool mt = task_executor != NULL && _processing_is_mt; - if (mt && ParallelRefProcBalancingEnabled) { + bool mt_processing = task_executor != NULL && _processing_is_mt; + // If discovery used MT and a dynamic number of GC threads, then + // the queues must be balanced for correctness if fewer than the + // maximum number of queues were used. The number of queue used + // during discovery may be different than the number to be used + // for processing so don't depend of _num_q < _max_num_q as part + // of the test. + bool must_balance = _discovery_is_mt; + + if ((mt_processing && ParallelRefProcBalancingEnabled) || + must_balance) { balance_queues(refs_lists); } if (PrintReferenceGC && PrintGCDetails) { @@ -875,7 +956,7 @@ ReferenceProcessor::process_discovered_reflist( // policy reasons. Keep alive the transitive closure of all // such referents. if (policy != NULL) { - if (mt) { + if (mt_processing) { RefProcPhase1Task phase1(*this, refs_lists, policy, true /*marks_oops_alive*/); task_executor->execute(phase1); } else { @@ -891,7 +972,7 @@ ReferenceProcessor::process_discovered_reflist( // Phase 2: // . Traverse the list and remove any refs whose referents are alive. - if (mt) { + if (mt_processing) { RefProcPhase2Task phase2(*this, refs_lists, !discovery_is_atomic() /*marks_oops_alive*/); task_executor->execute(phase2); } else { @@ -902,7 +983,7 @@ ReferenceProcessor::process_discovered_reflist( // Phase 3: // . Traverse the list and process referents as appropriate. - if (mt) { + if (mt_processing) { RefProcPhase3Task phase3(*this, refs_lists, clear_referent, true /*marks_oops_alive*/); task_executor->execute(phase3); } else { @@ -915,7 +996,11 @@ ReferenceProcessor::process_discovered_reflist( void ReferenceProcessor::clean_up_discovered_references() { // loop over the lists - for (int i = 0; i < _num_q * subclasses_of_ref; i++) { + // Should this instead be + // for (int i = 0; i < subclasses_of_ref; i++_ { + // for (int j = 0; j < _num_q; j++) { + // int index = i * _max_num_q + j; + for (int i = 0; i < _max_num_q * subclasses_of_ref; i++) { if (TraceReferenceGC && PrintGCDetails && ((i % _num_q) == 0)) { gclog_or_tty->print_cr( "\nScrubbing %s discovered list of Null referents", @@ -976,7 +1061,7 @@ inline DiscoveredList* ReferenceProcessor::get_discovered_list(ReferenceType rt) id = next_id(); } } - assert(0 <= id && id < _num_q, "Id is out-of-bounds (call Freud?)"); + assert(0 <= id && id < _max_num_q, "Id is out-of-bounds (call Freud?)"); // Get the discovered queue to which we will add DiscoveredList* list = NULL; @@ -1001,6 +1086,10 @@ inline DiscoveredList* ReferenceProcessor::get_discovered_list(ReferenceType rt) default: ShouldNotReachHere(); } + if (TraceReferenceGC && PrintGCDetails) { + gclog_or_tty->print_cr("Thread %d gets list " INTPTR_FORMAT, + id, list); + } return list; } @@ -1243,7 +1332,7 @@ void ReferenceProcessor::preclean_discovered_references( { TraceTime tt("Preclean SoftReferences", PrintGCDetails && PrintReferenceGC, false, gclog_or_tty); - for (int i = 0; i < _num_q; i++) { + for (int i = 0; i < _max_num_q; i++) { if (yield->should_return()) { return; } @@ -1340,15 +1429,16 @@ ReferenceProcessor::preclean_discovered_reflist(DiscoveredList& refs_list, NOT_PRODUCT( if (PrintGCDetails && PrintReferenceGC) { - gclog_or_tty->print(" Dropped %d Refs out of %d " - "Refs in discovered list ", iter.removed(), iter.processed()); + gclog_or_tty->print_cr(" Dropped %d Refs out of %d " + "Refs in discovered list " INTPTR_FORMAT, + iter.removed(), iter.processed(), (address)refs_list.head()); } ) } const char* ReferenceProcessor::list_name(int i) { - assert(i >= 0 && i <= _num_q * subclasses_of_ref, "Out of bounds index"); - int j = i / _num_q; + assert(i >= 0 && i <= _max_num_q * subclasses_of_ref, "Out of bounds index"); + int j = i / _max_num_q; switch (j) { case 0: return "SoftRef"; case 1: return "WeakRef"; @@ -1372,7 +1462,7 @@ void ReferenceProcessor::verify() { #ifndef PRODUCT void ReferenceProcessor::clear_discovered_references() { guarantee(!_discovering_refs, "Discovering refs?"); - for (int i = 0; i < _num_q * subclasses_of_ref; i++) { + for (int i = 0; i < _max_num_q * subclasses_of_ref; i++) { oop obj = _discoveredSoftRefs[i].head(); while (obj != sentinel_ref()) { oop next = java_lang_ref_Reference::discovered(obj); diff --git a/hotspot/src/share/vm/memory/referenceProcessor.hpp b/hotspot/src/share/vm/memory/referenceProcessor.hpp index 56cf8e4d491..d1f92877692 100644 --- a/hotspot/src/share/vm/memory/referenceProcessor.hpp +++ b/hotspot/src/share/vm/memory/referenceProcessor.hpp @@ -85,8 +85,10 @@ class ReferenceProcessor : public CHeapObj { // The discovered ref lists themselves - // The MT'ness degree of the queues below + // The active MT'ness degree of the queues below int _num_q; + // The maximum MT'ness degree of the queues below + int _max_num_q; // Arrays of lists of oops, one per thread DiscoveredList* _discoveredSoftRefs; DiscoveredList* _discoveredWeakRefs; @@ -95,6 +97,7 @@ class ReferenceProcessor : public CHeapObj { public: int num_q() { return _num_q; } + void set_mt_degree(int v) { _num_q = v; } DiscoveredList* discovered_soft_refs() { return _discoveredSoftRefs; } static oop sentinel_ref() { return _sentinelRef; } static oop* adr_sentinel_ref() { return &_sentinelRef; } @@ -244,6 +247,7 @@ class ReferenceProcessor : public CHeapObj { _bs(NULL), _is_alive_non_header(NULL), _num_q(0), + _max_num_q(0), _processing_is_mt(false), _next_id(0) {} @@ -312,6 +316,9 @@ class ReferenceProcessor : public CHeapObj { void weak_oops_do(OopClosure* f); // weak roots static void oops_do(OopClosure* f); // strong root(s) + // Balance each of the discovered lists. + void balance_all_queues(); + // Discover a Reference object, using appropriate discovery criteria bool discover_reference(oop obj, ReferenceType rt); diff --git a/hotspot/src/share/vm/memory/sharedHeap.cpp b/hotspot/src/share/vm/memory/sharedHeap.cpp index 7bf88f1767f..bf6bb8a8f0b 100644 --- a/hotspot/src/share/vm/memory/sharedHeap.cpp +++ b/hotspot/src/share/vm/memory/sharedHeap.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2010, 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 @@ -50,7 +50,8 @@ SharedHeap::SharedHeap(CollectorPolicy* policy_) : _perm_gen(NULL), _rem_set(NULL), _strong_roots_parity(0), _process_strong_tasks(new SubTasksDone(SH_PS_NumElements)), - _workers(NULL), _n_par_threads(0) + _n_par_threads(0), + _workers(NULL) { if (_process_strong_tasks == NULL || !_process_strong_tasks->valid()) { vm_exit_during_initialization("Failed necessary allocation."); @@ -60,11 +61,13 @@ SharedHeap::SharedHeap(CollectorPolicy* policy_) : (UseConcMarkSweepGC && CMSParallelRemarkEnabled) || UseG1GC) && ParallelGCThreads > 0) { - _workers = new WorkGang("Parallel GC Threads", ParallelGCThreads, + _workers = new FlexibleWorkGang("Parallel GC Threads", ParallelGCThreads, /* are_GC_task_threads */true, /* are_ConcurrentGC_threads */false); if (_workers == NULL) { vm_exit_during_initialization("Failed necessary allocation."); + } else { + _workers->initialize_workers(); } } } @@ -77,8 +80,9 @@ bool SharedHeap::heap_lock_held_for_gc() { } void SharedHeap::set_par_threads(int t) { + assert(t == 0 || !UseSerialGC, "Cannot have parallel threads"); _n_par_threads = t; - _process_strong_tasks->set_par_threads(t); + _process_strong_tasks->set_n_threads(t); } class AssertIsPermClosure: public OopClosure { diff --git a/hotspot/src/share/vm/memory/sharedHeap.hpp b/hotspot/src/share/vm/memory/sharedHeap.hpp index 87f32fbc82d..9e74b2cd479 100644 --- a/hotspot/src/share/vm/memory/sharedHeap.hpp +++ b/hotspot/src/share/vm/memory/sharedHeap.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2010, 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,6 +38,7 @@ class OopsInGenClosure; class ObjectClosure; class SubTasksDone; class WorkGang; +class FlexibleWorkGang; class CollectorPolicy; class KlassHandle; @@ -74,7 +75,7 @@ protected: int _strong_roots_parity; // If we're doing parallel GC, use this gang of threads. - WorkGang* _workers; + FlexibleWorkGang* _workers; // Number of parallel threads currently working on GC tasks. // O indicates use sequential code; 1 means use parallel code even with @@ -189,7 +190,7 @@ public: SO_CodeCache = 0x10 }; - WorkGang* workers() const { return _workers; } + FlexibleWorkGang* workers() const { return _workers; } // Sets the number of parallel threads that will be doing tasks // (such as process strong roots) subsequently. diff --git a/hotspot/src/share/vm/opto/doCall.cpp b/hotspot/src/share/vm/opto/doCall.cpp index 4b1b600557d..bfe52483ad6 100644 --- a/hotspot/src/share/vm/opto/doCall.cpp +++ b/hotspot/src/share/vm/opto/doCall.cpp @@ -94,6 +94,60 @@ CallGenerator* Compile::call_generator(ciMethod* call_method, int vtable_index, if (cg != NULL) return cg; } + // Do MethodHandle calls. + // NOTE: This must happen before normal inlining logic below since + // MethodHandle.invoke* are native methods which obviously don't + // have bytecodes and so normal inlining fails. + if (call_method->is_method_handle_invoke()) { + if (jvms->method()->java_code_at_bci(jvms->bci()) != Bytecodes::_invokedynamic) { + GraphKit kit(jvms); + Node* n = kit.argument(0); + + if (n->Opcode() == Op_ConP) { + const TypeOopPtr* oop_ptr = n->bottom_type()->is_oopptr(); + ciObject* const_oop = oop_ptr->const_oop(); + ciMethodHandle* method_handle = const_oop->as_method_handle(); + + // Set the actually called method to have access to the class + // and signature in the MethodHandleCompiler. + method_handle->set_callee(call_method); + + // Get an adapter for the MethodHandle. + ciMethod* target_method = method_handle->get_method_handle_adapter(); + + CallGenerator* hit_cg = this->call_generator(target_method, vtable_index, false, jvms, true, prof_factor); + if (hit_cg != NULL && hit_cg->is_inline()) + return hit_cg; + } + + return CallGenerator::for_direct_call(call_method); + } + else { + // Get the MethodHandle from the CallSite. + ciMethod* caller_method = jvms->method(); + ciBytecodeStream str(caller_method); + str.force_bci(jvms->bci()); // Set the stream to the invokedynamic bci. + ciCallSite* call_site = str.get_call_site(); + ciMethodHandle* method_handle = call_site->get_target(); + + // Set the actually called method to have access to the class + // and signature in the MethodHandleCompiler. + method_handle->set_callee(call_method); + + // Get an adapter for the MethodHandle. + ciMethod* target_method = method_handle->get_invokedynamic_adapter(); + + CallGenerator* hit_cg = this->call_generator(target_method, vtable_index, false, jvms, true, prof_factor); + if (hit_cg != NULL && hit_cg->is_inline()) { + CallGenerator* miss_cg = CallGenerator::for_dynamic_call(call_method); + return CallGenerator::for_predicted_dynamic_call(method_handle, miss_cg, hit_cg, prof_factor); + } + + // If something failed, generate a normal dynamic call. + return CallGenerator::for_dynamic_call(call_method); + } + } + // Do not inline strict fp into non-strict code, or the reverse bool caller_method_is_strict = jvms->method()->is_strict(); if( caller_method_is_strict ^ call_method->is_strict() ) { @@ -216,57 +270,6 @@ CallGenerator* Compile::call_generator(ciMethod* call_method, int vtable_index, } } - // Do MethodHandle calls. - if (call_method->is_method_handle_invoke()) { - if (jvms->method()->java_code_at_bci(jvms->bci()) != Bytecodes::_invokedynamic) { - GraphKit kit(jvms); - Node* n = kit.argument(0); - - if (n->Opcode() == Op_ConP) { - const TypeOopPtr* oop_ptr = n->bottom_type()->is_oopptr(); - ciObject* const_oop = oop_ptr->const_oop(); - ciMethodHandle* method_handle = const_oop->as_method_handle(); - - // Set the actually called method to have access to the class - // and signature in the MethodHandleCompiler. - method_handle->set_callee(call_method); - - // Get an adapter for the MethodHandle. - ciMethod* target_method = method_handle->get_method_handle_adapter(); - - CallGenerator* hit_cg = this->call_generator(target_method, vtable_index, false, jvms, true, prof_factor); - if (hit_cg != NULL && hit_cg->is_inline()) - return hit_cg; - } - - return CallGenerator::for_direct_call(call_method); - } - else { - // Get the MethodHandle from the CallSite. - ciMethod* caller_method = jvms->method(); - ciBytecodeStream str(caller_method); - str.force_bci(jvms->bci()); // Set the stream to the invokedynamic bci. - ciCallSite* call_site = str.get_call_site(); - ciMethodHandle* method_handle = call_site->get_target(); - - // Set the actually called method to have access to the class - // and signature in the MethodHandleCompiler. - method_handle->set_callee(call_method); - - // Get an adapter for the MethodHandle. - ciMethod* target_method = method_handle->get_invokedynamic_adapter(); - - CallGenerator* hit_cg = this->call_generator(target_method, vtable_index, false, jvms, true, prof_factor); - if (hit_cg != NULL && hit_cg->is_inline()) { - CallGenerator* miss_cg = CallGenerator::for_dynamic_call(call_method); - return CallGenerator::for_predicted_dynamic_call(method_handle, miss_cg, hit_cg, prof_factor); - } - - // If something failed, generate a normal dynamic call. - return CallGenerator::for_dynamic_call(call_method); - } - } - // There was no special inlining tactic, or it bailed out. // Use a more generic tactic, like a simple call. if (call_is_virtual) { diff --git a/hotspot/src/share/vm/opto/escape.cpp b/hotspot/src/share/vm/opto/escape.cpp index cc7239cdd87..e1811fa3a29 100644 --- a/hotspot/src/share/vm/opto/escape.cpp +++ b/hotspot/src/share/vm/opto/escape.cpp @@ -706,14 +706,15 @@ PhiNode *ConnectionGraph::split_memory_phi(PhiNode *orig_phi, int alias_idx, Gro // // The next methods are derived from methods in MemNode. // -static Node *step_through_mergemem(MergeMemNode *mmem, int alias_idx, const TypeOopPtr *tinst) { +static Node *step_through_mergemem(MergeMemNode *mmem, int alias_idx, const TypeOopPtr *toop) { Node *mem = mmem; - // TypeInstPtr::NOTNULL+any is an OOP with unknown offset - generally + // TypeOopPtr::NOTNULL+any is an OOP with unknown offset - generally // means an array I have not precisely typed yet. Do not do any // alias stuff with it any time soon. - if( tinst->base() != Type::AnyPtr && - !(tinst->klass()->is_java_lang_Object() && - tinst->offset() == Type::OffsetBot) ) { + if( toop->base() != Type::AnyPtr && + !(toop->klass() != NULL && + toop->klass()->is_java_lang_Object() && + toop->offset() == Type::OffsetBot) ) { mem = mmem->memory_at(alias_idx); // Update input if it is progress over what we have now } @@ -803,8 +804,8 @@ Node* ConnectionGraph::find_inst_mem(Node *orig_mem, int alias_idx, GrowableArra if (orig_mem == NULL) return orig_mem; Compile* C = phase->C; - const TypeOopPtr *tinst = C->get_adr_type(alias_idx)->isa_oopptr(); - bool is_instance = (tinst != NULL) && tinst->is_known_instance(); + const TypeOopPtr *toop = C->get_adr_type(alias_idx)->isa_oopptr(); + bool is_instance = (toop != NULL) && toop->is_known_instance(); Node *start_mem = C->start()->proj_out(TypeFunc::Memory); Node *prev = NULL; Node *result = orig_mem; @@ -827,18 +828,18 @@ Node* ConnectionGraph::find_inst_mem(Node *orig_mem, int alias_idx, GrowableArra // skip over a call which does not affect this memory slice if (result->is_Proj() && result->as_Proj()->_con == TypeFunc::Memory) { Node *proj_in = result->in(0); - if (proj_in->is_Allocate() && proj_in->_idx == (uint)tinst->instance_id()) { + if (proj_in->is_Allocate() && proj_in->_idx == (uint)toop->instance_id()) { break; // hit one of our sentinels } else if (proj_in->is_Call()) { CallNode *call = proj_in->as_Call(); - if (!call->may_modify(tinst, phase)) { + if (!call->may_modify(toop, phase)) { result = call->in(TypeFunc::Memory); } } else if (proj_in->is_Initialize()) { AllocateNode* alloc = proj_in->as_Initialize()->allocation(); // Stop if this is the initialization for the object instance which // which contains this memory slice, otherwise skip over it. - if (alloc == NULL || alloc->_idx != (uint)tinst->instance_id()) { + if (alloc == NULL || alloc->_idx != (uint)toop->instance_id()) { result = proj_in->in(TypeFunc::Memory); } } else if (proj_in->is_MemBar()) { @@ -846,7 +847,7 @@ Node* ConnectionGraph::find_inst_mem(Node *orig_mem, int alias_idx, GrowableArra } } else if (result->is_MergeMem()) { MergeMemNode *mmem = result->as_MergeMem(); - result = step_through_mergemem(mmem, alias_idx, tinst); + result = step_through_mergemem(mmem, alias_idx, toop); if (result == mmem->base_memory()) { // Didn't find instance memory, search through general slice recursively. result = mmem->memory_at(C->get_general_index(alias_idx)); @@ -866,7 +867,7 @@ Node* ConnectionGraph::find_inst_mem(Node *orig_mem, int alias_idx, GrowableArra break; } } else if (result->is_ClearArray()) { - if (!ClearArrayNode::step_through(&result, (uint)tinst->instance_id(), phase)) { + if (!ClearArrayNode::step_through(&result, (uint)toop->instance_id(), phase)) { // Can not bypass initialization of the instance // we are looking for. break; diff --git a/hotspot/src/share/vm/opto/loopTransform.cpp b/hotspot/src/share/vm/opto/loopTransform.cpp index 2c115b12838..bb1587762ea 100644 --- a/hotspot/src/share/vm/opto/loopTransform.cpp +++ b/hotspot/src/share/vm/opto/loopTransform.cpp @@ -2447,6 +2447,13 @@ bool PhaseIdealLoop::match_fill_loop(IdealLoopTree* lpt, Node*& store, Node*& st msg_node = store->in(MemNode::Address); } + if (msg == NULL && + (!store->in(MemNode::Memory)->is_Phi() || + store->in(MemNode::Memory)->in(LoopNode::LoopBackControl) != store)) { + msg = "store memory isn't proper phi"; + msg_node = store->in(MemNode::Memory); + } + // Make sure there is an appropriate fill routine BasicType t = store->as_Mem()->memory_type(); const char* fill_name; @@ -2570,7 +2577,7 @@ bool PhaseIdealLoop::match_fill_loop(IdealLoopTree* lpt, Node*& store, Node*& st Node* n = lpt->_body.at(i); // These values can be replaced with other nodes if they are used // outside the loop. - if (n == store || n == head->loopexit() || n == head->incr()) continue; + if (n == store || n == head->loopexit() || n == head->incr() || n == store->in(MemNode::Memory)) continue; for (SimpleDUIterator iter(n); iter.has_next(); iter.next()) { Node* use = iter.get(); if (!lpt->_body.contains(use)) { @@ -2715,6 +2722,10 @@ bool PhaseIdealLoop::intrinsify_fill(IdealLoopTree* lpt) { // Redirect the old control and memory edges that are outside the loop. Node* exit = head->loopexit()->proj_out(0); + // Sometimes the memory phi of the head is used as the outgoing + // state of the loop. It's safe in this case to replace it with the + // result_mem. + _igvn.replace_node(store->in(MemNode::Memory), result_mem); _igvn.replace_node(exit, result_ctrl); _igvn.replace_node(store, result_mem); // Any uses the increment outside of the loop become the loop limit. diff --git a/hotspot/src/share/vm/opto/memnode.cpp b/hotspot/src/share/vm/opto/memnode.cpp index 9297e4e224c..d425ae6d117 100644 --- a/hotspot/src/share/vm/opto/memnode.cpp +++ b/hotspot/src/share/vm/opto/memnode.cpp @@ -193,14 +193,15 @@ static Node *step_through_mergemem(PhaseGVN *phase, MergeMemNode *mmem, const T } } #endif - // TypeInstPtr::NOTNULL+any is an OOP with unknown offset - generally + // TypeOopPtr::NOTNULL+any is an OOP with unknown offset - generally // means an array I have not precisely typed yet. Do not do any // alias stuff with it any time soon. - const TypeOopPtr *tinst = tp->isa_oopptr(); + const TypeOopPtr *toop = tp->isa_oopptr(); if( tp->base() != Type::AnyPtr && - !(tinst && - tinst->klass()->is_java_lang_Object() && - tinst->offset() == Type::OffsetBot) ) { + !(toop && + toop->klass() != NULL && + toop->klass()->is_java_lang_Object() && + toop->offset() == Type::OffsetBot) ) { // compress paths and change unreachable cycles to TOP // If not, we can update the input infinitely along a MergeMem cycle // Equivalent code in PhiNode::Ideal @@ -255,7 +256,8 @@ Node *MemNode::Ideal_common(PhaseGVN *phase, bool can_reshape) { if( t_adr == Type::TOP ) return NodeSentinel; // caller will return NULL if( can_reshape && igvn != NULL && - (igvn->_worklist.member(address) || phase->type(address) != adr_type()) ) { + (igvn->_worklist.member(address) || + igvn->_worklist.size() > 0 && (phase->type(address) != adr_type())) ) { // The address's base and type may change when the address is processed. // Delay this mem node transformation until the address is processed. phase->is_IterGVN()->_worklist.push(this); diff --git a/hotspot/src/share/vm/opto/phaseX.cpp b/hotspot/src/share/vm/opto/phaseX.cpp index 590bbd0adae..164d1afb9ae 100644 --- a/hotspot/src/share/vm/opto/phaseX.cpp +++ b/hotspot/src/share/vm/opto/phaseX.cpp @@ -844,10 +844,33 @@ void PhaseIterGVN::optimize() { } #endif +#ifdef ASSERT + Node* prev = NULL; + uint rep_cnt = 0; +#endif + uint loop_count = 0; + // Pull from worklist; transform node; // If node has changed: update edge info and put uses on worklist. while( _worklist.size() ) { Node *n = _worklist.pop(); + if (++loop_count >= K * C->unique()) { + debug_only(n->dump(4);) + assert(false, "infinite loop in PhaseIterGVN::optimize"); + C->record_method_not_compilable("infinite loop in PhaseIterGVN::optimize"); + return; + } +#ifdef ASSERT + if (n == prev) { + if (++rep_cnt > 3) { + n->dump(4); + assert(false, "loop in Ideal transformation"); + } + } else { + rep_cnt = 0; + } + prev = n; +#endif if (TraceIterativeGVN && Verbose) { tty->print(" Pop "); NOT_PRODUCT( n->dump(); ) diff --git a/hotspot/src/share/vm/opto/stringopts.cpp b/hotspot/src/share/vm/opto/stringopts.cpp index 2584652a027..29df07f46b1 100644 --- a/hotspot/src/share/vm/opto/stringopts.cpp +++ b/hotspot/src/share/vm/opto/stringopts.cpp @@ -75,8 +75,7 @@ class StringConcat : public ResourceObj { for (SimpleDUIterator i(endprojs.resproj); i.has_next(); i.next()) { CallStaticJavaNode *use = i.get()->isa_CallStaticJava(); if (use != NULL && use->method() != NULL && - use->method()->holder() == C->env()->String_klass() && - use->method()->name() == ciSymbol::object_initializer_name() && + use->method()->intrinsic_id() == vmIntrinsics::_String_String && use->in(TypeFunc::Parms + 1) == endprojs.resproj) { // Found useless new String(sb.toString()) so reuse the newly allocated String // when creating the result instead of allocating a new one. @@ -394,7 +393,9 @@ StringConcat* PhaseStringOpts::build_candidate(CallStaticJavaNode* call) { Node* constructor = NULL; for (SimpleDUIterator i(result); i.has_next(); i.next()) { CallStaticJavaNode *use = i.get()->isa_CallStaticJava(); - if (use != NULL && use->method() != NULL && + if (use != NULL && + use->method() != NULL && + !use->method()->is_static() && use->method()->name() == ciSymbol::object_initializer_name() && use->method()->holder() == m->holder()) { // Matched the constructor. @@ -444,7 +445,8 @@ StringConcat* PhaseStringOpts::build_candidate(CallStaticJavaNode* call) { } } else if (cnode->method() == NULL) { break; - } else if (cnode->method()->holder() == m->holder() && + } else if (!cnode->method()->is_static() && + cnode->method()->holder() == m->holder() && cnode->method()->name() == ciSymbol::append_name() && (cnode->method()->signature()->as_symbol() == string_sig || cnode->method()->signature()->as_symbol() == char_sig || @@ -459,8 +461,7 @@ StringConcat* PhaseStringOpts::build_candidate(CallStaticJavaNode* call) { if (arg->is_Proj() && arg->in(0)->is_CallStaticJava()) { CallStaticJavaNode* csj = arg->in(0)->as_CallStaticJava(); if (csj->method() != NULL && - csj->method()->holder() == C->env()->Integer_klass() && - csj->method()->name() == ciSymbol::toString_name()) { + csj->method()->intrinsic_id() == vmIntrinsics::_Integer_toString) { sc->add_control(csj); sc->push_int(csj->in(TypeFunc::Parms)); continue; @@ -537,9 +538,8 @@ PhaseStringOpts::PhaseStringOpts(PhaseGVN* gvn, Unique_Node_List*): if (arg->is_Proj() && arg->in(0)->is_CallStaticJava()) { CallStaticJavaNode* csj = arg->in(0)->as_CallStaticJava(); if (csj->method() != NULL && - (csj->method()->holder() == C->env()->StringBuffer_klass() || - csj->method()->holder() == C->env()->StringBuilder_klass()) && - csj->method()->name() == ciSymbol::toString_name()) { + (csj->method()->intrinsic_id() == vmIntrinsics::_StringBuilder_toString || + csj->method()->intrinsic_id() == vmIntrinsics::_StringBuffer_toString)) { for (int o = 0; o < concats.length(); o++) { if (c == o) continue; StringConcat* other = concats.at(o); diff --git a/hotspot/src/share/vm/runtime/arguments.cpp b/hotspot/src/share/vm/runtime/arguments.cpp index 26d1f20e72d..2e1ac1e1655 100644 --- a/hotspot/src/share/vm/runtime/arguments.cpp +++ b/hotspot/src/share/vm/runtime/arguments.cpp @@ -1266,12 +1266,30 @@ bool verify_object_alignment() { // Object alignment. if (!is_power_of_2(ObjectAlignmentInBytes)) { jio_fprintf(defaultStream::error_stream(), - "error: ObjectAlignmentInBytes=%d must be power of 2", (int)ObjectAlignmentInBytes); + "error: ObjectAlignmentInBytes=%d must be power of 2\n", + (int)ObjectAlignmentInBytes); return false; } if ((int)ObjectAlignmentInBytes < BytesPerLong) { jio_fprintf(defaultStream::error_stream(), - "error: ObjectAlignmentInBytes=%d must be greater or equal %d", (int)ObjectAlignmentInBytes, BytesPerLong); + "error: ObjectAlignmentInBytes=%d must be greater or equal %d\n", + (int)ObjectAlignmentInBytes, BytesPerLong); + return false; + } + // It does not make sense to have big object alignment + // since a space lost due to alignment will be greater + // then a saved space from compressed oops. + if ((int)ObjectAlignmentInBytes > 256) { + jio_fprintf(defaultStream::error_stream(), + "error: ObjectAlignmentInBytes=%d must not be greater then 256\n", + (int)ObjectAlignmentInBytes); + return false; + } + // In case page size is very small. + if ((int)ObjectAlignmentInBytes >= os::vm_page_size()) { + jio_fprintf(defaultStream::error_stream(), + "error: ObjectAlignmentInBytes=%d must be less then page size %d\n", + (int)ObjectAlignmentInBytes, os::vm_page_size()); return false; } return true; diff --git a/hotspot/src/share/vm/runtime/compilationPolicy.cpp b/hotspot/src/share/vm/runtime/compilationPolicy.cpp index 3d1ccc0a381..132a6101835 100644 --- a/hotspot/src/share/vm/runtime/compilationPolicy.cpp +++ b/hotspot/src/share/vm/runtime/compilationPolicy.cpp @@ -129,16 +129,31 @@ void NonTieredCompPolicy::initialize() { } } +// Note: this policy is used ONLY if TieredCompilation is off. +// compiler_count() behaves the following way: +// - with TIERED build (with both COMPILER1 and COMPILER2 defined) it should return +// zero for the c1 compilation levels, hence the particular ordering of the +// statements. +// - the same should happen when COMPILER2 is defined and COMPILER1 is not +// (server build without TIERED defined). +// - if only COMPILER1 is defined (client build), zero should be returned for +// the c2 level. +// - if neither is defined - always return zero. int NonTieredCompPolicy::compiler_count(CompLevel comp_level) { -#ifdef COMPILER1 - if (is_c1_compile(comp_level)) { - return _compiler_count; - } -#endif - + assert(!TieredCompilation, "This policy should not be used with TieredCompilation"); #ifdef COMPILER2 if (is_c2_compile(comp_level)) { return _compiler_count; + } else { + return 0; + } +#endif + +#ifdef COMPILER1 + if (is_c1_compile(comp_level)) { + return _compiler_count; + } else { + return 0; } #endif diff --git a/hotspot/src/share/vm/runtime/deoptimization.cpp b/hotspot/src/share/vm/runtime/deoptimization.cpp index 2cc90961799..4dd9e97059c 100644 --- a/hotspot/src/share/vm/runtime/deoptimization.cpp +++ b/hotspot/src/share/vm/runtime/deoptimization.cpp @@ -124,6 +124,9 @@ Deoptimization::UnrollBlock* Deoptimization::fetch_unroll_info_helper(JavaThread RegisterMap dummy_map(thread, false); // Now get the deoptee with a valid map frame deoptee = stub_frame.sender(&map); + // Set the deoptee nmethod + assert(thread->deopt_nmethod() == NULL, "Pending deopt!"); + thread->set_deopt_nmethod(deoptee.cb()->as_nmethod_or_null()); // Create a growable array of VFrames where each VFrame represents an inlined // Java frame. This storage is allocated with the usual system arena. @@ -445,6 +448,7 @@ void Deoptimization::cleanup_deopt_info(JavaThread *thread, delete thread->deopt_mark(); thread->set_deopt_mark(NULL); + thread->set_deopt_nmethod(NULL); if (JvmtiExport::can_pop_frame()) { diff --git a/hotspot/src/share/vm/runtime/globals.hpp b/hotspot/src/share/vm/runtime/globals.hpp index c2619205957..8395bf9a373 100644 --- a/hotspot/src/share/vm/runtime/globals.hpp +++ b/hotspot/src/share/vm/runtime/globals.hpp @@ -273,6 +273,10 @@ class CommandLineFlags { // UnlockExperimentalVMOptions flag, which allows the control and // modification of the experimental flags. // +// Nota bene: neither diagnostic nor experimental options should be used casually, +// and they are not supported on production loads, except under explicit +// direction from support engineers. +// // manageable flags are writeable external product flags. // They are dynamically writeable through the JDK management interface // (com.sun.management.HotSpotDiagnosticMXBean API) and also through JConsole. @@ -634,6 +638,9 @@ class CommandLineFlags { develop(bool, ZapJNIHandleArea, trueInDebug, \ "Zap freed JNI handle space with 0xFEFEFEFE") \ \ + notproduct(bool, ZapStackSegments, trueInDebug, \ + "Zap allocated/freed Stack segments with 0xFADFADED") \ + \ develop(bool, ZapUnusedHeapArea, trueInDebug, \ "Zap unused heap space with 0xBAADBABE") \ \ @@ -1802,17 +1809,17 @@ class CommandLineFlags { develop(uintx, PromotionFailureALotInterval, 5, \ "Total collections between promotion failures alot") \ \ - develop(intx, WorkStealingSleepMillis, 1, \ + experimental(intx, WorkStealingSleepMillis, 1, \ "Sleep time when sleep is used for yields") \ \ - develop(uintx, WorkStealingYieldsBeforeSleep, 1000, \ + experimental(uintx, WorkStealingYieldsBeforeSleep, 1000, \ "Number of yields before a sleep is done during workstealing") \ \ - develop(uintx, WorkStealingHardSpins, 4096, \ + experimental(uintx, WorkStealingHardSpins, 4096, \ "Number of iterations in a spin loop between checks on " \ "time out of hard spin") \ \ - develop(uintx, WorkStealingSpinToYieldRatio, 10, \ + experimental(uintx, WorkStealingSpinToYieldRatio, 10, \ "Ratio of hard spins to calls to yield") \ \ product(uintx, PreserveMarkStackSize, 1024, \ diff --git a/hotspot/src/share/vm/runtime/thread.cpp b/hotspot/src/share/vm/runtime/thread.cpp index 7e96ac60956..27ea367302b 100644 --- a/hotspot/src/share/vm/runtime/thread.cpp +++ b/hotspot/src/share/vm/runtime/thread.cpp @@ -1183,6 +1183,7 @@ void JavaThread::initialize() { set_vframe_array_last(NULL); set_deferred_locals(NULL); set_deopt_mark(NULL); + set_deopt_nmethod(NULL); clear_must_deopt_id(); set_monitor_chunks(NULL); set_next(NULL); @@ -1644,7 +1645,29 @@ void JavaThread::flush_barrier_queues() { satb_mark_queue().flush(); dirty_card_queue().flush(); } -#endif + +void JavaThread::initialize_queues() { + assert(!SafepointSynchronize::is_at_safepoint(), + "we should not be at a safepoint"); + + ObjPtrQueue& satb_queue = satb_mark_queue(); + SATBMarkQueueSet& satb_queue_set = satb_mark_queue_set(); + // The SATB queue should have been constructed with its active + // field set to false. + assert(!satb_queue.is_active(), "SATB queue should not be active"); + assert(satb_queue.is_empty(), "SATB queue should be empty"); + // If we are creating the thread during a marking cycle, we should + // set the active field of the SATB queue to true. + if (satb_queue_set.is_active()) { + satb_queue.set_active(true); + } + + DirtyCardQueue& dirty_queue = dirty_card_queue(); + // The dirty card queue should have been constructed with its + // active field set to true. + assert(dirty_queue.is_active(), "dirty card queue should be active"); +} +#endif // !SERIALGC void JavaThread::cleanup_failed_attach_current_thread() { if (get_thread_profiler() != NULL) { @@ -3629,6 +3652,10 @@ jboolean Threads::is_supported_jni_version(jint version) { void Threads::add(JavaThread* p, bool force_daemon) { // The threads lock must be owned at this point assert_locked_or_safepoint(Threads_lock); + + // See the comment for this method in thread.hpp for its purpose and + // why it is called here. + p->initialize_queues(); p->set_next(_thread_list); _thread_list = p; _number_of_threads++; diff --git a/hotspot/src/share/vm/runtime/thread.hpp b/hotspot/src/share/vm/runtime/thread.hpp index 61237f41323..548c836ebb3 100644 --- a/hotspot/src/share/vm/runtime/thread.hpp +++ b/hotspot/src/share/vm/runtime/thread.hpp @@ -680,7 +680,7 @@ class JavaThread: public Thread { intptr_t* _must_deopt_id; // id of frame that needs to be deopted once we // transition out of native - + nmethod* _deopt_nmethod; // nmethod that is currently being deoptimized vframeArray* _vframe_array_head; // Holds the heap of the active vframeArrays vframeArray* _vframe_array_last; // Holds last vFrameArray we popped // Because deoptimization is lazy we must save jvmti requests to set locals @@ -1098,6 +1098,9 @@ class JavaThread: public Thread { void set_must_deopt_id(intptr_t* id) { _must_deopt_id = id; } void clear_must_deopt_id() { _must_deopt_id = NULL; } + void set_deopt_nmethod(nmethod* nm) { _deopt_nmethod = nm; } + nmethod* deopt_nmethod() { return _deopt_nmethod; } + methodOop callee_target() const { return _callee_target; } void set_callee_target (methodOop x) { _callee_target = x; } @@ -1487,6 +1490,29 @@ public: } #endif // !SERIALGC + // This method initializes the SATB and dirty card queues before a + // JavaThread is added to the Java thread list. Right now, we don't + // have to do anything to the dirty card queue (it should have been + // activated when the thread was created), but we have to activate + // the SATB queue if the thread is created while a marking cycle is + // in progress. The activation / de-activation of the SATB queues at + // the beginning / end of a marking cycle is done during safepoints + // so we have to make sure this method is called outside one to be + // able to safely read the active field of the SATB queue set. Right + // now, it is called just before the thread is added to the Java + // thread list in the Threads::add() method. That method is holding + // the Threads_lock which ensures we are outside a safepoint. We + // cannot do the obvious and set the active field of the SATB queue + // when the thread is created given that, in some cases, safepoints + // might happen between the JavaThread constructor being called and the + // thread being added to the Java thread list (an example of this is + // when the structure for the DestroyJavaVM thread is created). +#ifndef SERIALGC + void initialize_queues(); +#else // !SERIALGC + void initialize_queues() { } +#endif // !SERIALGC + // Machine dependent stuff #include "incls/_thread_pd.hpp.incl" diff --git a/hotspot/src/share/vm/runtime/vframeArray.cpp b/hotspot/src/share/vm/runtime/vframeArray.cpp index 88edd39d424..a103acf819b 100644 --- a/hotspot/src/share/vm/runtime/vframeArray.cpp +++ b/hotspot/src/share/vm/runtime/vframeArray.cpp @@ -179,9 +179,11 @@ void vframeArrayElement::unpack_on_stack(int callee_parameters, // in which case bcp should point to the monitorenter since it is within the exception's range. assert(*bcp != Bytecodes::_monitorenter || is_top_frame, "a _monitorenter must be a top frame"); - // TIERED Must know the compiler of the deoptee QQQ - COMPILER2_PRESENT(guarantee(*bcp != Bytecodes::_monitorenter || exec_mode != Deoptimization::Unpack_exception, - "shouldn't get exception during monitorenter");) + assert(thread->deopt_nmethod() != NULL, "nmethod should be known"); + guarantee(!(thread->deopt_nmethod()->is_compiled_by_c2() && + *bcp == Bytecodes::_monitorenter && + exec_mode == Deoptimization::Unpack_exception), + "shouldn't get exception during monitorenter"); int popframe_preserved_args_size_in_bytes = 0; int popframe_preserved_args_size_in_words = 0; diff --git a/hotspot/src/share/vm/utilities/stack.hpp b/hotspot/src/share/vm/utilities/stack.hpp new file mode 100644 index 00000000000..0e095b5a7a3 --- /dev/null +++ b/hotspot/src/share/vm/utilities/stack.hpp @@ -0,0 +1,204 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + * + */ + +// Class Stack (below) grows and shrinks by linking together "segments" which +// are allocated on demand. Segments are arrays of the element type (E) plus an +// extra pointer-sized field to store the segment link. Recently emptied +// segments are kept in a cache and reused. +// +// Notes/caveats: +// +// The size of an element must either evenly divide the size of a pointer or be +// a multiple of the size of a pointer. +// +// Destructors are not called for elements popped off the stack, so element +// types which rely on destructors for things like reference counting will not +// work properly. +// +// Class Stack allocates segments from the C heap. However, two protected +// virtual methods are used to alloc/free memory which subclasses can override: +// +// virtual void* alloc(size_t bytes); +// virtual void free(void* addr, size_t bytes); +// +// The alloc() method must return storage aligned for any use. The +// implementation in class Stack assumes that alloc() will terminate the process +// if the allocation fails. + +template class StackIterator; + +// StackBase holds common data/methods that don't depend on the element type, +// factored out to reduce template code duplication. +class StackBase +{ +public: + size_t segment_size() const { return _seg_size; } // Elements per segment. + size_t max_size() const { return _max_size; } // Max elements allowed. + size_t max_cache_size() const { return _max_cache_size; } // Max segments + // allowed in cache. + + size_t cache_size() const { return _cache_size; } // Segments in the cache. + +protected: + // The ctor arguments correspond to the like-named functions above. + // segment_size: number of items per segment + // max_cache_size: maxmium number of *segments* to cache + // max_size: maximum number of items allowed, rounded to a multiple of + // the segment size (0 == unlimited) + inline StackBase(size_t segment_size, size_t max_cache_size, size_t max_size); + + // Round max_size to a multiple of the segment size. Treat 0 as unlimited. + static inline size_t adjust_max_size(size_t max_size, size_t seg_size); + +protected: + const size_t _seg_size; // Number of items per segment. + const size_t _max_size; // Maximum number of items allowed in the stack. + const size_t _max_cache_size; // Maximum number of segments to cache. + size_t _cur_seg_size; // Number of items in the current segment. + size_t _full_seg_size; // Number of items in already-filled segments. + size_t _cache_size; // Number of segments in the cache. +}; + +#ifdef __GNUC__ +#define inline +#endif // __GNUC__ + +template +class Stack: public StackBase +{ +public: + friend class StackIterator; + + // segment_size: number of items per segment + // max_cache_size: maxmium number of *segments* to cache + // max_size: maximum number of items allowed, rounded to a multiple of + // the segment size (0 == unlimited) + inline Stack(size_t segment_size = default_segment_size(), + size_t max_cache_size = 4, size_t max_size = 0); + inline ~Stack() { clear(true); } + + inline bool is_empty() const { return _cur_seg == NULL; } + inline bool is_full() const { return _full_seg_size >= max_size(); } + + // Performance sensitive code should use is_empty() instead of size() == 0 and + // is_full() instead of size() == max_size(). Using a conditional here allows + // just one var to be updated when pushing/popping elements instead of two; + // _full_seg_size is updated only when pushing/popping segments. + inline size_t size() const { + return is_empty() ? 0 : _full_seg_size + _cur_seg_size; + } + + inline void push(E elem); + inline E pop(); + + // Clear everything from the stack, releasing the associated memory. If + // clear_cache is true, also release any cached segments. + void clear(bool clear_cache = false); + + static inline size_t default_segment_size(); + +protected: + // Each segment includes space for _seg_size elements followed by a link + // (pointer) to the previous segment; the space is allocated as a single block + // of size segment_bytes(). _seg_size is rounded up if necessary so the link + // is properly aligned. The C struct for the layout would be: + // + // struct segment { + // E elements[_seg_size]; + // E* link; + // }; + + // Round up seg_size to keep the link field aligned. + static inline size_t adjust_segment_size(size_t seg_size); + + // Methods for allocation size and getting/setting the link. + inline size_t link_offset() const; // Byte offset of link field. + inline size_t segment_bytes() const; // Segment size in bytes. + inline E** link_addr(E* seg) const; // Address of the link field. + inline E* get_link(E* seg) const; // Extract the link from seg. + inline E* set_link(E* new_seg, E* old_seg); // new_seg.link = old_seg. + + virtual E* alloc(size_t bytes); + virtual void free(E* addr, size_t bytes); + + void push_segment(); + void pop_segment(); + + void free_segments(E* seg); // Free all segments in the list. + inline void reset(bool reset_cache); // Reset all data fields. + + DEBUG_ONLY(void verify(bool at_empty_transition) const;) + DEBUG_ONLY(void zap_segment(E* seg, bool zap_link_field) const;) + +private: + E* _cur_seg; // Current segment. + E* _cache; // Segment cache to avoid ping-ponging. +}; + +template class ResourceStack: public Stack, public ResourceObj +{ +public: + // If this class becomes widely used, it may make sense to save the Thread + // and use it when allocating segments. + ResourceStack(size_t segment_size = Stack::default_segment_size()): + Stack(segment_size, max_uintx) + { } + + // Set the segment pointers to NULL so the parent dtor does not free them; + // that must be done by the ResourceMark code. + ~ResourceStack() { Stack::reset(true); } + +protected: + virtual E* alloc(size_t bytes); + virtual void free(E* addr, size_t bytes); + +private: + void clear(bool clear_cache = false); +}; + +template +class StackIterator: public StackObj +{ +public: + StackIterator(Stack& stack): _stack(stack) { sync(); } + + Stack& stack() const { return _stack; } + + bool is_empty() const { return _cur_seg == NULL; } + + E next() { return *next_addr(); } + E* next_addr(); + + void sync(); // Sync the iterator's state to the stack's current state. + +private: + Stack& _stack; + size_t _cur_seg_size; + E* _cur_seg; + size_t _full_seg_size; +}; + +#ifdef __GNUC__ +#undef inline +#endif // __GNUC__ diff --git a/hotspot/src/share/vm/utilities/stack.inline.hpp b/hotspot/src/share/vm/utilities/stack.inline.hpp new file mode 100644 index 00000000000..9e2d8cb5449 --- /dev/null +++ b/hotspot/src/share/vm/utilities/stack.inline.hpp @@ -0,0 +1,273 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + * + */ + +StackBase::StackBase(size_t segment_size, size_t max_cache_size, + size_t max_size): + _seg_size(segment_size), + _max_cache_size(max_cache_size), + _max_size(adjust_max_size(max_size, segment_size)) +{ + assert(_max_size % _seg_size == 0, "not a multiple"); +} + +size_t StackBase::adjust_max_size(size_t max_size, size_t seg_size) +{ + assert(seg_size > 0, "cannot be 0"); + assert(max_size >= seg_size || max_size == 0, "max_size too small"); + const size_t limit = max_uintx - (seg_size - 1); + if (max_size == 0 || max_size > limit) { + max_size = limit; + } + return (max_size + seg_size - 1) / seg_size * seg_size; +} + +template +Stack::Stack(size_t segment_size, size_t max_cache_size, size_t max_size): + StackBase(adjust_segment_size(segment_size), max_cache_size, max_size) +{ + reset(true); +} + +template +void Stack::push(E item) +{ + assert(!is_full(), "pushing onto a full stack"); + if (_cur_seg_size == _seg_size) { + push_segment(); + } + _cur_seg[_cur_seg_size] = item; + ++_cur_seg_size; +} + +template +E Stack::pop() +{ + assert(!is_empty(), "popping from an empty stack"); + if (_cur_seg_size == 1) { + E tmp = _cur_seg[--_cur_seg_size]; + pop_segment(); + return tmp; + } + return _cur_seg[--_cur_seg_size]; +} + +template +void Stack::clear(bool clear_cache) +{ + free_segments(_cur_seg); + if (clear_cache) free_segments(_cache); + reset(clear_cache); +} + +template +size_t Stack::default_segment_size() +{ + // Number of elements that fit in 4K bytes minus the size of two pointers + // (link field and malloc header). + return (4096 - 2 * sizeof(E*)) / sizeof(E); +} + +template +size_t Stack::adjust_segment_size(size_t seg_size) +{ + const size_t elem_sz = sizeof(E); + const size_t ptr_sz = sizeof(E*); + assert(elem_sz % ptr_sz == 0 || ptr_sz % elem_sz == 0, "bad element size"); + if (elem_sz < ptr_sz) { + return align_size_up(seg_size * elem_sz, ptr_sz) / elem_sz; + } + return seg_size; +} + +template +size_t Stack::link_offset() const +{ + return align_size_up(_seg_size * sizeof(E), sizeof(E*)); +} + +template +size_t Stack::segment_bytes() const +{ + return link_offset() + sizeof(E*); +} + +template +E** Stack::link_addr(E* seg) const +{ + return (E**) ((char*)seg + link_offset()); +} + +template +E* Stack::get_link(E* seg) const +{ + return *link_addr(seg); +} + +template +E* Stack::set_link(E* new_seg, E* old_seg) +{ + *link_addr(new_seg) = old_seg; + return new_seg; +} + +template +E* Stack::alloc(size_t bytes) +{ + return (E*) NEW_C_HEAP_ARRAY(char, bytes); +} + +template +void Stack::free(E* addr, size_t bytes) +{ + FREE_C_HEAP_ARRAY(char, (char*) addr); +} + +template +void Stack::push_segment() +{ + assert(_cur_seg_size == _seg_size, "current segment is not full"); + E* next; + if (_cache_size > 0) { + // Use a cached segment. + next = _cache; + _cache = get_link(_cache); + --_cache_size; + } else { + next = alloc(segment_bytes()); + DEBUG_ONLY(zap_segment(next, true);) + } + const bool at_empty_transition = is_empty(); + _cur_seg = set_link(next, _cur_seg); + _cur_seg_size = 0; + _full_seg_size += at_empty_transition ? 0 : _seg_size; + DEBUG_ONLY(verify(at_empty_transition);) +} + +template +void Stack::pop_segment() +{ + assert(_cur_seg_size == 0, "current segment is not empty"); + E* const prev = get_link(_cur_seg); + if (_cache_size < _max_cache_size) { + // Add the current segment to the cache. + DEBUG_ONLY(zap_segment(_cur_seg, false);) + _cache = set_link(_cur_seg, _cache); + ++_cache_size; + } else { + DEBUG_ONLY(zap_segment(_cur_seg, true);) + free(_cur_seg, segment_bytes()); + } + const bool at_empty_transition = prev == NULL; + _cur_seg = prev; + _cur_seg_size = _seg_size; + _full_seg_size -= at_empty_transition ? 0 : _seg_size; + DEBUG_ONLY(verify(at_empty_transition);) +} + +template +void Stack::free_segments(E* seg) +{ + const size_t bytes = segment_bytes(); + while (seg != NULL) { + E* const prev = get_link(seg); + free(seg, bytes); + seg = prev; + } +} + +template +void Stack::reset(bool reset_cache) +{ + _cur_seg_size = _seg_size; // So push() will alloc a new segment. + _full_seg_size = 0; + _cur_seg = NULL; + if (reset_cache) { + _cache_size = 0; + _cache = NULL; + } +} + +#ifdef ASSERT +template +void Stack::verify(bool at_empty_transition) const +{ + assert(size() <= max_size(), "stack exceeded bounds"); + assert(cache_size() <= max_cache_size(), "cache exceeded bounds"); + assert(_cur_seg_size <= segment_size(), "segment index exceeded bounds"); + + assert(_full_seg_size % _seg_size == 0, "not a multiple"); + assert(at_empty_transition || is_empty() == (size() == 0), "mismatch"); + assert((_cache == NULL) == (cache_size() == 0), "mismatch"); + + if (is_empty()) { + assert(_cur_seg_size == segment_size(), "sanity"); + } +} + +template +void Stack::zap_segment(E* seg, bool zap_link_field) const +{ + if (!ZapStackSegments) return; + const size_t zap_bytes = segment_bytes() - (zap_link_field ? 0 : sizeof(E*)); + uint32_t* cur = (uint32_t*)seg; + const uint32_t* end = cur + zap_bytes / sizeof(uint32_t); + while (cur < end) { + *cur++ = 0xfadfaded; + } +} +#endif + +template +E* ResourceStack::alloc(size_t bytes) +{ + return (E*) resource_allocate_bytes(bytes); +} + +template +void ResourceStack::free(E* addr, size_t bytes) +{ + resource_free_bytes((char*) addr, bytes); +} + +template +void StackIterator::sync() +{ + _full_seg_size = _stack._full_seg_size; + _cur_seg_size = _stack._cur_seg_size; + _cur_seg = _stack._cur_seg; +} + +template +E* StackIterator::next_addr() +{ + assert(!is_empty(), "no items left"); + if (_cur_seg_size == 1) { + E* addr = _cur_seg; + _cur_seg = _stack.get_link(_cur_seg); + _cur_seg_size = _stack.segment_size(); + _full_seg_size -= _stack.segment_size(); + return addr; + } + return _cur_seg + --_cur_seg_size; +} diff --git a/hotspot/src/share/vm/utilities/taskqueue.cpp b/hotspot/src/share/vm/utilities/taskqueue.cpp index 2492b90d1d8..18602211474 100644 --- a/hotspot/src/share/vm/utilities/taskqueue.cpp +++ b/hotspot/src/share/vm/utilities/taskqueue.cpp @@ -144,6 +144,7 @@ void ParallelTaskTerminator::sleep(uint millis) { bool ParallelTaskTerminator::offer_termination(TerminatorTerminator* terminator) { + assert(_n_threads > 0, "Initialization is incorrect"); assert(_offered_termination < _n_threads, "Invariant"); Atomic::inc(&_offered_termination); @@ -255,3 +256,9 @@ bool ObjArrayTask::is_valid() const { _index < objArrayOop(_obj)->length(); } #endif // ASSERT + +void ParallelTaskTerminator::reset_for_reuse(int n_threads) { + reset_for_reuse(); + _n_threads = n_threads; +} + diff --git a/hotspot/src/share/vm/utilities/taskqueue.hpp b/hotspot/src/share/vm/utilities/taskqueue.hpp index 1bd1ae72309..61af8d7e4b0 100644 --- a/hotspot/src/share/vm/utilities/taskqueue.hpp +++ b/hotspot/src/share/vm/utilities/taskqueue.hpp @@ -305,6 +305,12 @@ bool GenericTaskQueue::push_slow(E t, uint dirty_n_elems) { return false; } +// pop_local_slow() is done by the owning thread and is trying to +// get the last task in the queue. It will compete with pop_global() +// that will be used by other threads. The tag age is incremented +// whenever the queue goes empty which it will do here if this thread +// gets the last task or in pop_global() if the queue wraps (top == 0 +// and pop_global() succeeds, see pop_global()). template bool GenericTaskQueue::pop_local_slow(uint localBot, Age oldAge) { // This queue was observed to contain exactly one element; either this @@ -366,75 +372,47 @@ GenericTaskQueue::~GenericTaskQueue() { // OverflowTaskQueue is a TaskQueue that also includes an overflow stack for // elements that do not fit in the TaskQueue. // -// Three methods from super classes are overridden: +// This class hides two methods from super classes: // -// initialize() - initialize the super classes and create the overflow stack // push() - push onto the task queue or, if that fails, onto the overflow stack // is_empty() - return true if both the TaskQueue and overflow stack are empty // -// Note that size() is not overridden--it returns the number of elements in the +// Note that size() is not hidden--it returns the number of elements in the // TaskQueue, and does not include the size of the overflow stack. This // simplifies replacement of GenericTaskQueues with OverflowTaskQueues. template class OverflowTaskQueue: public GenericTaskQueue { public: - typedef GrowableArray overflow_t; + typedef Stack overflow_t; typedef GenericTaskQueue taskqueue_t; TASKQUEUE_STATS_ONLY(using taskqueue_t::stats;) - OverflowTaskQueue(); - ~OverflowTaskQueue(); - void initialize(); - - inline overflow_t* overflow_stack() const { return _overflow_stack; } - // Push task t onto the queue or onto the overflow stack. Return true. inline bool push(E t); // Attempt to pop from the overflow stack; return true if anything was popped. inline bool pop_overflow(E& t); + inline overflow_t* overflow_stack() { return &_overflow_stack; } + inline bool taskqueue_empty() const { return taskqueue_t::is_empty(); } - inline bool overflow_empty() const { return overflow_stack()->is_empty(); } + inline bool overflow_empty() const { return _overflow_stack.is_empty(); } inline bool is_empty() const { return taskqueue_empty() && overflow_empty(); } private: - overflow_t* _overflow_stack; + overflow_t _overflow_stack; }; -template -OverflowTaskQueue::OverflowTaskQueue() -{ - _overflow_stack = NULL; -} - -template -OverflowTaskQueue::~OverflowTaskQueue() -{ - if (_overflow_stack != NULL) { - delete _overflow_stack; - _overflow_stack = NULL; - } -} - -template -void OverflowTaskQueue::initialize() -{ - taskqueue_t::initialize(); - assert(_overflow_stack == NULL, "memory leak"); - _overflow_stack = new (ResourceObj::C_HEAP) GrowableArray(10, true); -} - template bool OverflowTaskQueue::push(E t) { if (!taskqueue_t::push(t)) { overflow_stack()->push(t); - TASKQUEUE_STATS_ONLY(stats.record_overflow(overflow_stack()->length())); + TASKQUEUE_STATS_ONLY(stats.record_overflow(overflow_stack()->size())); } return true; } @@ -637,6 +615,9 @@ public: // in an MT-safe manner, once the previous round of use of // the terminator is finished. void reset_for_reuse(); + // Same as above but the number of parallel threads is set to the + // given number. + void reset_for_reuse(int n_threads); #ifdef TRACESPINNING static uint total_yields() { return _total_yields; } @@ -782,3 +763,4 @@ typedef GenericTaskQueueSet OopStarTaskQueueSet; typedef OverflowTaskQueue RegionTaskQueue; typedef GenericTaskQueueSet RegionTaskQueueSet; + diff --git a/hotspot/src/share/vm/utilities/workgroup.cpp b/hotspot/src/share/vm/utilities/workgroup.cpp index 9d2d797cedd..6abab723fe1 100644 --- a/hotspot/src/share/vm/utilities/workgroup.cpp +++ b/hotspot/src/share/vm/utilities/workgroup.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2010, 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 @@ -53,28 +53,52 @@ WorkGang::WorkGang(const char* name, int workers, bool are_GC_task_threads, bool are_ConcurrentGC_threads) : - AbstractWorkGang(name, are_GC_task_threads, are_ConcurrentGC_threads) -{ + AbstractWorkGang(name, are_GC_task_threads, are_ConcurrentGC_threads) { // Save arguments. _total_workers = workers; +} + +GangWorker* WorkGang::allocate_worker(int which) { + GangWorker* new_worker = new GangWorker(this, which); + return new_worker; +} + +// The current implementation will exit if the allocation +// of any worker fails. Still, return a boolean so that +// a future implementation can possibly do a partial +// initialization of the workers and report such to the +// caller. +bool WorkGang::initialize_workers() { if (TraceWorkGang) { - tty->print_cr("Constructing work gang %s with %d threads", name, workers); + tty->print_cr("Constructing work gang %s with %d threads", + name(), + total_workers()); } - _gang_workers = NEW_C_HEAP_ARRAY(GangWorker*, workers); + _gang_workers = NEW_C_HEAP_ARRAY(GangWorker*, total_workers()); if (gang_workers() == NULL) { vm_exit_out_of_memory(0, "Cannot create GangWorker array."); + return false; + } + os::ThreadType worker_type; + if (are_ConcurrentGC_threads()) { + worker_type = os::cgc_thread; + } else { + worker_type = os::pgc_thread; } for (int worker = 0; worker < total_workers(); worker += 1) { - GangWorker* new_worker = new GangWorker(this, worker); + GangWorker* new_worker = allocate_worker(worker); assert(new_worker != NULL, "Failed to allocate GangWorker"); _gang_workers[worker] = new_worker; - if (new_worker == NULL || !os::create_thread(new_worker, os::pgc_thread)) + if (new_worker == NULL || !os::create_thread(new_worker, worker_type)) { vm_exit_out_of_memory(0, "Cannot create worker GC thread. Out of system resources."); + return false; + } if (!DisableStartThread) { os::start_thread(new_worker); } } + return true; } AbstractWorkGang::~AbstractWorkGang() { @@ -383,7 +407,7 @@ bool SubTasksDone::valid() { return _tasks != NULL; } -void SubTasksDone::set_par_threads(int t) { +void SubTasksDone::set_n_threads(int t) { #ifdef ASSERT assert(_claimed == 0 || _threads_completed == _n_threads, "should not be called while tasks are being processed!"); diff --git a/hotspot/src/share/vm/utilities/workgroup.hpp b/hotspot/src/share/vm/utilities/workgroup.hpp index 411c6da576f..089f668245d 100644 --- a/hotspot/src/share/vm/utilities/workgroup.hpp +++ b/hotspot/src/share/vm/utilities/workgroup.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2010, 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 @@ -29,6 +29,7 @@ class GangWorker; class YieldingFlexibleGangWorker; class YieldingFlexibleGangTask; class WorkData; +class AbstractWorkGang; // An abstract task to be worked on by a gang. // You subclass this to supply your own work() method @@ -38,6 +39,13 @@ public: // The argument tells you which member of the gang you are. virtual void work(int i) = 0; + // This method configures the task for proper termination. + // Some tasks do not have any requirements on termination + // and may inherit this method that does nothing. Some + // tasks do some coordination on termination and override + // this method to implement that coordination. + virtual void set_for_termination(int active_workers) {}; + // Debugging accessor for the name. const char* name() const PRODUCT_RETURN_(return NULL;); int counter() { return _counter; } @@ -64,6 +72,18 @@ protected: virtual ~AbstractGangTask() { } }; +class AbstractGangTaskWOopQueues : public AbstractGangTask { + OopTaskQueueSet* _queues; + ParallelTaskTerminator _terminator; + public: + AbstractGangTaskWOopQueues(const char* name, OopTaskQueueSet* queues) : + AbstractGangTask(name), _queues(queues), _terminator(0, _queues) {} + ParallelTaskTerminator* terminator() { return &_terminator; } + virtual void set_for_termination(int active_workers) { + terminator()->reset_for_reuse(active_workers); + } + OopTaskQueueSet* queues() { return _queues; } +}; // Class AbstractWorkGang: // An abstract class representing a gang of workers. @@ -114,6 +134,9 @@ public: int total_workers() const { return _total_workers; } + virtual int active_workers() const { + return _total_workers; + } bool terminate() const { return _terminate; } @@ -199,6 +222,13 @@ public: bool are_GC_task_threads, bool are_ConcurrentGC_threads); // Run a task, returns when the task is done (or terminated). virtual void run_task(AbstractGangTask* task); + void run_task(AbstractGangTask* task, uint no_of_parallel_workers); + // Allocate a worker and return a pointer to it. + virtual GangWorker* allocate_worker(int which); + // Initialize workers in the gang. Return true if initialization + // succeeded. The type of the worker can be overridden in a derived + // class with the appropriate implementation of allocate_worker(). + bool initialize_workers(); }; // Class GangWorker: @@ -226,6 +256,34 @@ public: AbstractWorkGang* gang() const { return _gang; } }; +class FlexibleWorkGang: public WorkGang { + protected: + int _active_workers; + public: + // Constructor and destructor. + FlexibleWorkGang(const char* name, int workers, + bool are_GC_task_threads, + bool are_ConcurrentGC_threads) : + WorkGang(name, workers, are_GC_task_threads, are_ConcurrentGC_threads) { + _active_workers = ParallelGCThreads; + }; + // Accessors for fields + virtual int active_workers() const { return _active_workers; } + void set_active_workers(int v) { _active_workers = v; } +}; + +// Work gangs in garbage collectors: 2009-06-10 +// +// SharedHeap - work gang for stop-the-world parallel collection. +// Used by +// ParNewGeneration +// CMSParRemarkTask +// CMSRefProcTaskExecutor +// G1CollectedHeap +// G1ParFinalCountTask +// ConcurrentMark +// CMSCollector + // A class that acts as a synchronisation barrier. Workers enter // the barrier and must wait until all other workers have entered // before any of them may leave. @@ -271,7 +329,7 @@ class SubTasksDone: public CHeapObj { int _n_threads; jint _threads_completed; #ifdef ASSERT - jint _claimed; + volatile jint _claimed; #endif // Set all tasks to unclaimed. @@ -286,9 +344,10 @@ public: // True iff the object is in a valid state. bool valid(); - // Set the number of parallel threads doing the tasks to "t". Can only + // Get/set the number of parallel threads doing the tasks to "t". Can only // be called before tasks start or after they are complete. - void set_par_threads(int t); + int n_threads() { return _n_threads; } + void set_n_threads(int t); // Returns "false" if the task "t" is unclaimed, and ensures that task is // claimed. The task "t" is required to be within the range of "this". @@ -315,13 +374,17 @@ class SequentialSubTasksDone : public StackObj { protected: jint _n_tasks; // Total number of tasks available. jint _n_claimed; // Number of tasks claimed. + // _n_threads is used to determine when a sub task is done. + // See comments on SubTasksDone::_n_threads jint _n_threads; // Total number of parallel threads. jint _n_completed; // Number of completed threads. void clear(); public: - SequentialSubTasksDone() { clear(); } + SequentialSubTasksDone() { + clear(); + } ~SequentialSubTasksDone() {} // True iff the object is in a valid state. @@ -330,11 +393,12 @@ public: // number of tasks jint n_tasks() const { return _n_tasks; } - // Set the number of parallel threads doing the tasks to t. + // Get/set the number of parallel threads doing the tasks to t. // Should be called before the task starts but it is safe // to call this once a task is running provided that all // threads agree on the number of threads. - void set_par_threads(int t) { _n_threads = t; } + int n_threads() { return _n_threads; } + void set_n_threads(int t) { _n_threads = t; } // Set the number of tasks to be claimed to t. As above, // should be called before the tasks start but it is safe diff --git a/hotspot/src/share/vm/utilities/yieldingWorkgroup.cpp b/hotspot/src/share/vm/utilities/yieldingWorkgroup.cpp index 779b4c49881..7b323ac57b5 100644 --- a/hotspot/src/share/vm/utilities/yieldingWorkgroup.cpp +++ b/hotspot/src/share/vm/utilities/yieldingWorkgroup.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010 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,29 +32,13 @@ class WorkData; YieldingFlexibleWorkGang::YieldingFlexibleWorkGang( const char* name, int workers, bool are_GC_task_threads) : - AbstractWorkGang(name, are_GC_task_threads, false) { - // Save arguments. - _total_workers = workers; - assert(_total_workers > 0, "Must have more than 1 worker"); + FlexibleWorkGang(name, workers, are_GC_task_threads, false), + _yielded_workers(0) {} - _yielded_workers = 0; - - if (TraceWorkGang) { - tty->print_cr("Constructing work gang %s with %d threads", name, workers); - } - _gang_workers = NEW_C_HEAP_ARRAY(GangWorker*, workers); - assert(gang_workers() != NULL, "Failed to allocate gang workers"); - for (int worker = 0; worker < total_workers(); worker += 1) { - YieldingFlexibleGangWorker* new_worker = - new YieldingFlexibleGangWorker(this, worker); - assert(new_worker != NULL, "Failed to allocate YieldingFlexibleGangWorker"); - _gang_workers[worker] = new_worker; - if (new_worker == NULL || !os::create_thread(new_worker, os::pgc_thread)) - vm_exit_out_of_memory(0, "Cannot create worker GC thread. Out of system resources."); - if (!DisableStartThread) { - os::start_thread(new_worker); - } - } +GangWorker* YieldingFlexibleWorkGang::allocate_worker(int which) { + YieldingFlexibleGangWorker* new_member = + new YieldingFlexibleGangWorker(this, which); + return (YieldingFlexibleGangWorker*) new_member; } // Run a task; returns when the task is done, or the workers yield, @@ -142,6 +126,7 @@ void YieldingFlexibleWorkGang::start_task(YieldingFlexibleGangTask* new_task) { _active_workers = total_workers(); } new_task->set_actual_size(_active_workers); + new_task->set_for_termination(_active_workers); assert(_started_workers == 0, "Tabula rasa non"); assert(_finished_workers == 0, "Tabula rasa non"); @@ -161,22 +146,22 @@ void YieldingFlexibleWorkGang::wait_for_gang() { for (Status status = yielding_task()->status(); status != COMPLETED && status != YIELDED && status != ABORTED; status = yielding_task()->status()) { - assert(started_workers() <= active_workers(), "invariant"); - assert(finished_workers() <= active_workers(), "invariant"); - assert(yielded_workers() <= active_workers(), "invariant"); + assert(started_workers() <= total_workers(), "invariant"); + assert(finished_workers() <= total_workers(), "invariant"); + assert(yielded_workers() <= total_workers(), "invariant"); monitor()->wait(Mutex::_no_safepoint_check_flag); } switch (yielding_task()->status()) { case COMPLETED: case ABORTED: { - assert(finished_workers() == active_workers(), "Inconsistent status"); + assert(finished_workers() == total_workers(), "Inconsistent status"); assert(yielded_workers() == 0, "Invariant"); reset(); // for next task; gang<->task binding released break; } case YIELDED: { assert(yielded_workers() > 0, "Invariant"); - assert(yielded_workers() + finished_workers() == active_workers(), + assert(yielded_workers() + finished_workers() == total_workers(), "Inconsistent counts"); break; } @@ -208,7 +193,6 @@ void YieldingFlexibleWorkGang::continue_task( void YieldingFlexibleWorkGang::reset() { _started_workers = 0; _finished_workers = 0; - _active_workers = 0; yielding_task()->set_gang(NULL); _task = NULL; // unbind gang from task } @@ -216,7 +200,7 @@ void YieldingFlexibleWorkGang::reset() { void YieldingFlexibleWorkGang::yield() { assert(task() != NULL, "Inconsistency; should have task binding"); MutexLockerEx ml(monitor(), Mutex::_no_safepoint_check_flag); - assert(yielded_workers() < active_workers(), "Consistency check"); + assert(yielded_workers() < total_workers(), "Consistency check"); if (yielding_task()->status() == ABORTING) { // Do not yield; we need to abort as soon as possible // XXX NOTE: This can cause a performance pathology in the @@ -227,7 +211,7 @@ void YieldingFlexibleWorkGang::yield() { // us to return at each potential yield point. return; } - if (++_yielded_workers + finished_workers() == active_workers()) { + if (++_yielded_workers + finished_workers() == total_workers()) { yielding_task()->set_status(YIELDED); monitor()->notify_all(); } else { diff --git a/hotspot/src/share/vm/utilities/yieldingWorkgroup.hpp b/hotspot/src/share/vm/utilities/yieldingWorkgroup.hpp index b4f3bd44592..a1d396f2aaf 100644 --- a/hotspot/src/share/vm/utilities/yieldingWorkgroup.hpp +++ b/hotspot/src/share/vm/utilities/yieldingWorkgroup.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, 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,6 +54,25 @@ protected: // Override from parent class virtual void loop(); }; +class FlexibleGangTask: public AbstractGangTask { + int _actual_size; // size of gang obtained +protected: + int _requested_size; // size of gang requested +public: + FlexibleGangTask(const char* name): AbstractGangTask(name), + _requested_size(0) {} + + // The abstract work method. + // The argument tells you which member of the gang you are. + virtual void work(int i) = 0; + + int requested_size() const { return _requested_size; } + int actual_size() const { return _actual_size; } + + void set_requested_size(int sz) { _requested_size = sz; } + void set_actual_size(int sz) { _actual_size = sz; } +}; + // An abstract task to be worked on by a flexible work gang, // and where the workers will periodically yield, usually // in response to some condition that is signalled by means @@ -70,19 +89,15 @@ protected: // Override from parent class // maximum) in response to task requests at certain points. // The last part (the flexible part) has not yet been fully // fleshed out and is a work in progress. -class YieldingFlexibleGangTask: public AbstractGangTask { +class YieldingFlexibleGangTask: public FlexibleGangTask { Status _status; YieldingFlexibleWorkGang* _gang; - int _actual_size; // size of gang obtained protected: - int _requested_size; // size of gang requested - // Constructor and desctructor: only construct subclasses. - YieldingFlexibleGangTask(const char* name): AbstractGangTask(name), + YieldingFlexibleGangTask(const char* name): FlexibleGangTask(name), _status(INACTIVE), - _gang(NULL), - _requested_size(0) { } + _gang(NULL) { } virtual ~YieldingFlexibleGangTask() { } @@ -122,24 +137,18 @@ public: virtual void abort(); Status status() const { return _status; } + bool yielding() const { return _status == YIELDING; } bool yielded() const { return _status == YIELDED; } bool completed() const { return _status == COMPLETED; } bool aborted() const { return _status == ABORTED; } bool active() const { return _status == ACTIVE; } - - int requested_size() const { return _requested_size; } - int actual_size() const { return _actual_size; } - - void set_requested_size(int sz) { _requested_size = sz; } - void set_actual_size(int sz) { _actual_size = sz; } }; - // Class YieldingWorkGang: A subclass of WorkGang. // In particular, a YieldingWorkGang is made up of // YieldingGangWorkers, and provides infrastructure // supporting yielding to the "GangOverseer", // being the thread that orchestrates the WorkGang via run_task(). -class YieldingFlexibleWorkGang: public AbstractWorkGang { +class YieldingFlexibleWorkGang: public FlexibleWorkGang { // Here's the public interface to this class. public: // Constructor and destructor. @@ -151,6 +160,9 @@ public: "Incorrect cast"); return (YieldingFlexibleGangTask*)task(); } + // Allocate a worker and return a pointer to it. + GangWorker* allocate_worker(int which); + // Run a task; returns when the task is done, or the workers yield, // or the task is aborted, or the work gang is terminated via stop(). // A task that has been yielded can be continued via this same interface @@ -180,10 +192,6 @@ public: void abort(); private: - // The currently active workers in this gang. - // This is a number that is dynamically adjusted by - // the run_task() method at each subsequent invocation, - // using data in the YieldingFlexibleGangTask. int _active_workers; int _yielded_workers; void wait_for_gang(); @@ -194,6 +202,7 @@ public: return _active_workers; } + // Accessors for fields int yielded_workers() const { return _yielded_workers; } diff --git a/hotspot/test/compiler/6968348/Test6968348.java b/hotspot/test/compiler/6968348/Test6968348.java new file mode 100644 index 00000000000..14568d7526b --- /dev/null +++ b/hotspot/test/compiler/6968348/Test6968348.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2010, 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. + * + */ + +/** + * @test + * @bug 6968348 + * @summary Byteswapped memory access can point to wrong location after JIT + * + * @run main Test6968348 + */ + +import sun.misc.Unsafe; +import java.lang.reflect.*; + +public class Test6968348 { + static Unsafe unsafe; + static final long[] buffer = new long[4096]; + static int array_long_base_offset; + + public static void main(String[] args) throws Exception { + Class c = Test6968348.class.getClassLoader().loadClass("sun.misc.Unsafe"); + Field f = c.getDeclaredField("theUnsafe"); + f.setAccessible(true); + unsafe = (Unsafe)f.get(c); + array_long_base_offset = unsafe.arrayBaseOffset(long[].class); + + for (int n = 0; n < 100000; n++) { + test(); + } + } + + public static void test() { + for (long i = array_long_base_offset; i < 4096; i += 8) { + unsafe.putLong(buffer, i, Long.reverseBytes(i)); + } + } +} diff --git a/jaxp/.hgtags b/jaxp/.hgtags index 06e783f1bfb..443af650ea0 100644 --- a/jaxp/.hgtags +++ b/jaxp/.hgtags @@ -85,3 +85,5 @@ d42c4acb6424a094bdafe2ad9c8c1c7ca7fb7b7e jdk7-b104 7d379f8934caf255f53def1310c0ef0f1b512601 jdk7-b108 0f382d6120fc07aed2209484a42458cabf405916 jdk7-b109 d422dbdd09766269344b796b3a46a5b3f74557e1 jdk7-b110 +8106c747067c905d814a737a57fea0e29057b33f jdk7-b111 +1b05254242881527b4d5d711295c0fe708c8823a jdk7-b112 diff --git a/jaxp/jaxp.properties b/jaxp/jaxp.properties index de35af2c1fe..296ed0b08f2 100644 --- a/jaxp/jaxp.properties +++ b/jaxp/jaxp.properties @@ -25,12 +25,13 @@ drops.master.copy.base=${drops.dir} -jaxp_src.bundle.name=jdk7-jaxp-m7.zip -jaxp_src.bundle.md5.checksum=22e95fbdb9fb7d8b6b6fc0a1d76d1fbd +jaxp_src.bundle.name=jaxp-1_4_4.zip +jaxp_src.bundle.md5.checksum=2c40a758392c4abf2d59f355240df46a jaxp_src.master.bundle.dir=${drops.master.copy.base} -jaxp_src.master.bundle.url.base=https://jaxp.dev.java.net/files/documents/913/150785 +jaxp_src.master.bundle.url.base=https://jaxp.dev.java.net/files/documents/913/152561 -#jaxp_tests.bundle.name=jdk7-jaxp-tests-2009_08_28.zip +#jaxp_tests.bundle.name=jaxp-unittests-1_4_4.zip +#jaxp_tests.bundle.md5.checksum=51845e38b02920cf5374d0331ab3a4ee #jaxp_tests.master.bundle.dir=${drops.master.copy.base} -#jaxp_tests.master.bundle.url.base=https://jaxp.dev.java.net/files/documents/913/147490 +#jaxp_tests.master.bundle.url.base=https://jaxp.dev.java.net/files/documents/913/152562 diff --git a/jaxws/.hgtags b/jaxws/.hgtags index 3b725f89559..7befc114031 100644 --- a/jaxws/.hgtags +++ b/jaxws/.hgtags @@ -85,3 +85,5 @@ bc45ccc5bcca6cbe4ea433e279d4a93b06ab38c6 jdk7-b106 b1ca39340238a239ba6d8489ad5315215e1366ca jdk7-b108 4f626e0d70bda68c76bbd0e89d2bc2407f979736 jdk7-b109 95ecac35fb11530752bd0404c9bf02bcfb30990e jdk7-b110 +2575ebca96c7fb1b78f6ae025a97321210aba309 jdk7-b111 +8e0f0054817f0f73fb33e80fb1333fb45b1d513d jdk7-b112 diff --git a/jaxws/jaxws.properties b/jaxws/jaxws.properties index 6e8e3a3b94e..3314617b2d4 100644 --- a/jaxws/jaxws.properties +++ b/jaxws/jaxws.properties @@ -25,15 +25,15 @@ drops.master.copy.base=${drops.dir} -jaxws_src.bundle.name=jdk7-jaxws-b100.zip -jaxws_src.bundle.md5.checksum=e4fea255c6222b118bb1d0d3054d36e1 +jaxws_src.bundle.name= jdk7-jaxws2_2-2010_08_19.zip +jaxws_src.bundle.md5.checksum=8775ccefd3b4fa2dde5155ec4b7e4ceb jaxws_src.master.bundle.dir=${drops.master.copy.base} -jaxws_src.master.bundle.url.base=https://jax-ws.dev.java.net/files/documents/4202/150896 +jaxws_src.master.bundle.url.base=https://jax-ws.dev.java.net/files/documents/4202/152532 -jaf_src.bundle.name=jdk7-jaf-2009_08_28.zip -jaf_src.bundle.md5.checksum=eb8cb7a4a7f14e211fbe2354878a2472 +jaf_src.bundle.name=jdk7-jaf-2010_08_19.zip +jaf_src.bundle.md5.checksum=18d15dfd71117daadb332af003d08212 jaf_src.master.bundle.dir=${drops.master.copy.base} -jaf_src.master.bundle.url.base=http://kenai.com/projects/jdk7-drops/downloads/download +jaf_src.master.bundle.url.base=https://jax-ws.dev.java.net/files/documents/4202/152336 #jaxws_tests.bundle.name=jdk7-jaxws-tests-2009_08_28.zip #jaxws_tests.master.bundle.dir=${drops.master.copy.base} diff --git a/jdk/.hgtags b/jdk/.hgtags index 5906361791c..f5bbc9b6da0 100644 --- a/jdk/.hgtags +++ b/jdk/.hgtags @@ -85,3 +85,5 @@ b91ef6b60f4e19bf4592c6dd594c9bac62487519 jdk7-b106 17a5d84b75610255a3527e8ede1da19c91ba7a7e jdk7-b108 ab0d3f54a63f2aadfcdd2e14b81f79362ce454e2 jdk7-b109 176586cd040e4dd17a5ff6e91f72df10d7442453 jdk7-b110 +fb63a2688db807a73e2a3de7d9bab298f1bff0e8 jdk7-b111 +b53f226b1d91473ac54184afa827be07b87e0319 jdk7-b112 diff --git a/jdk/make/com/Makefile b/jdk/make/com/Makefile index baf56b3ddb0..37472ea3f3a 100644 --- a/jdk/make/com/Makefile +++ b/jdk/make/com/Makefile @@ -31,7 +31,7 @@ BUILDDIR = .. PRODUCT = com include $(BUILDDIR)/common/Defs.gmk -SUBDIRS = sun +SUBDIRS = sun oracle include $(BUILDDIR)/common/Subdirs.gmk all build clean clobber:: diff --git a/jdk/make/com/oracle/Makefile b/jdk/make/com/oracle/Makefile new file mode 100644 index 00000000000..7c70dc78270 --- /dev/null +++ b/jdk/make/com/oracle/Makefile @@ -0,0 +1,34 @@ +# +# Copyright (c) 2010, 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. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# 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. +# + +BUILDDIR = ../.. +PRODUCT = oracle +include $(BUILDDIR)/common/Defs.gmk + +SUBDIRS = net +include $(BUILDDIR)/common/Subdirs.gmk + +all build clean clobber:: + $(SUBDIRS-loop) diff --git a/corba/make/common/shared/Compiler.gmk b/jdk/make/com/oracle/net/Makefile similarity index 67% rename from corba/make/common/shared/Compiler.gmk rename to jdk/make/com/oracle/net/Makefile index 0d5945542d8..5fd30761699 100644 --- a/corba/make/common/shared/Compiler.gmk +++ b/jdk/make/com/oracle/net/Makefile @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2010, 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 @@ -23,25 +23,17 @@ # questions. # +BUILDDIR = ../../.. +PRODUCT = oracle +include $(BUILDDIR)/common/Defs.gmk + # -# Compiler settings for all platforms and the default compiler for each. +# Files to compile # +AUTO_FILES_JAVA_DIRS = com/oracle/net -# Windows uses Microsoft compilers by default -ifeq ($(PLATFORM), windows) - override CC_VERSION = msvc -endif - -# Solaris uses Sun Studio compilers by default -ifeq ($(PLATFORM), solaris) - override CC_VERSION = sun -endif - -# Linux uses GNU compilers by default -ifeq ($(PLATFORM), linux) - override CC_VERSION = gcc -endif - -# Get the compiler specific settings -include $(BUILDDIR)/common/shared/Compiler-$(CC_VERSION).gmk +# +# Rules +# +include $(BUILDDIR)/common/Classes.gmk diff --git a/jdk/make/common/Release.gmk b/jdk/make/common/Release.gmk index bc40dcc9725..b8e95bea2ee 100644 --- a/jdk/make/common/Release.gmk +++ b/jdk/make/common/Release.gmk @@ -573,13 +573,13 @@ $(NOT_RT_JAR_LIST): FRC $(ECHO) "sun/jvmstat/" >> $@ $(ECHO) "sun/nio/cs/ext/" >> $@ $(ECHO) "sun/awt/HKSCS.class" >> $@ - $(ECHO) "sun/awt/motif/X11GB2312$Decoder.class" >> $@ - $(ECHO) "sun/awt/motif/X11GB2312$Encoder.class" >> $@ + $(ECHO) "sun/awt/motif/X11GB2312\$$Decoder.class" >> $@ + $(ECHO) "sun/awt/motif/X11GB2312\$$Encoder.class" >> $@ $(ECHO) "sun/awt/motif/X11GB2312.class" >> $@ - $(ECHO) "sun/awt/motif/X11GBK$Encoder.class" >> $@ + $(ECHO) "sun/awt/motif/X11GBK\$$Encoder.class" >> $@ $(ECHO) "sun/awt/motif/X11GBK.class" >> $@ - $(ECHO) "sun/awt/motif/X11KSC5601$Decoder.class" >> $@ - $(ECHO) "sun/awt/motif/X11KSC5601$Encoder.class" >> $@ + $(ECHO) "sun/awt/motif/X11KSC5601\$$Decoder.class" >> $@ + $(ECHO) "sun/awt/motif/X11KSC5601\$$Encoder.class" >> $@ $(ECHO) "sun/awt/motif/X11KSC5601.class" >> $@ $(ECHO) "sun/rmi/rmic/" >> $@ $(ECHO) "sun/tools/asm/" >> $@ diff --git a/jdk/make/docs/NON_CORE_PKGS.gmk b/jdk/make/docs/NON_CORE_PKGS.gmk index 6639eecf893..180241483c1 100644 --- a/jdk/make/docs/NON_CORE_PKGS.gmk +++ b/jdk/make/docs/NON_CORE_PKGS.gmk @@ -91,6 +91,8 @@ SCTPAPI_PKGS = com.sun.nio.sctp TRACING_PKGS = com.sun.tracing \ com.sun.tracing.dtrace +ORACLENET_PKGS = com.oracle.net + # non-core packages in rt.jar NON_CORE_PKGS = $(DOMAPI_PKGS) \ $(MGMT_PKGS) \ @@ -101,5 +103,6 @@ NON_CORE_PKGS = $(DOMAPI_PKGS) \ $(HTTPSERVER_PKGS) \ $(SMARTCARDIO_PKGS) \ $(TRACING_PKGS) \ - $(SCTPAPI_PKGS) + $(SCTPAPI_PKGS) \ + $(ORACLENET_PKGS) diff --git a/jdk/make/java/java/FILES_java.gmk b/jdk/make/java/java/FILES_java.gmk index 416eeb343d0..d9af3c10fda 100644 --- a/jdk/make/java/java/FILES_java.gmk +++ b/jdk/make/java/java/FILES_java.gmk @@ -183,10 +183,22 @@ JAVA_JAVA_java = \ java/util/MissingFormatWidthException.java \ java/util/UnknownFormatConversionException.java \ java/util/UnknownFormatFlagsException.java \ + java/util/IllformedLocaleException.java \ java/util/FormatterClosedException.java \ java/util/ListResourceBundle.java \ sun/util/EmptyListResourceBundle.java \ java/util/Locale.java \ + sun/util/locale/AsciiUtil.java \ + sun/util/locale/BaseLocale.java \ + sun/util/locale/Extension.java \ + sun/util/locale/InternalLocaleBuilder.java \ + sun/util/locale/LanguageTag.java \ + sun/util/locale/LocaleExtensions.java \ + sun/util/locale/LocaleObjectCache.java \ + sun/util/locale/LocaleSyntaxException.java \ + sun/util/locale/ParseStatus.java \ + sun/util/locale/StringTokenIterator.java \ + sun/util/locale/UnicodeLocaleExtension.java \ java/util/LocaleISOData.java \ sun/util/LocaleServiceProviderPool.java \ sun/util/LocaleDataMetaInfo.java \ diff --git a/jdk/make/java/net/FILES_c.gmk b/jdk/make/java/net/FILES_c.gmk index 642244915af..29ce70a6e68 100644 --- a/jdk/make/java/net/FILES_c.gmk +++ b/jdk/make/java/net/FILES_c.gmk @@ -39,10 +39,6 @@ FILES_c = \ ResolverConfigurationImpl.c \ DefaultProxySelector.c -ifeq ($(PLATFORM), solaris) - FILES_c += SdpProvider.c -endif - ifeq ($(PLATFORM), linux) FILES_c += linux_close.c endif diff --git a/jdk/make/java/net/Makefile b/jdk/make/java/net/Makefile index 0021087cbcf..db034f2511e 100644 --- a/jdk/make/java/net/Makefile +++ b/jdk/make/java/net/Makefile @@ -44,6 +44,8 @@ ifeq ($(PLATFORM), windows) endif FILES_c += NTLMAuthSequence.c FILES_c += NetworkInterface_winXP.c +else + FILES_c += SdpSupport.c endif FILES_export = \ @@ -84,7 +86,8 @@ endif # # Find platform specific native code # -vpath %.c $(PLATFORM_SRC)/native/sun/net/dns $(PLATFORM_SRC)/native/sun/net/www/protocol/http/ntlm $(PLATFORM_SRC)/native/sun/net/spi +vpath %.c $(PLATFORM_SRC)/native/sun/net/dns $(PLATFORM_SRC)/native/sun/net/www/protocol/http/ntlm \ + $(PLATFORM_SRC)/native/sun/net/sdp $(PLATFORM_SRC)/native/sun/net/spi # # Include rules diff --git a/jdk/make/java/net/mapfile-vers b/jdk/make/java/net/mapfile-vers index fbcf905d173..0e9a46755d4 100644 --- a/jdk/make/java/net/mapfile-vers +++ b/jdk/make/java/net/mapfile-vers @@ -88,9 +88,10 @@ SUNWprivate_1.1 { Java_java_net_PlainDatagramSocketImpl_setTimeToLive; Java_sun_net_dns_ResolverConfigurationImpl_localDomain0; Java_sun_net_dns_ResolverConfigurationImpl_fallbackDomain0; + Java_sun_net_sdp_SdpSupport_convert0; + Java_sun_net_sdp_SdpSupport_create0; Java_sun_net_spi_DefaultProxySelector_init; Java_sun_net_spi_DefaultProxySelector_getSystemProxy; - Java_sun_net_spi_SdpProvider_convert; NET_AllocSockaddr; NET_SockaddrToInetAddress; NET_SockaddrEqualsInetAddress; diff --git a/jdk/make/java/nio/FILES_java.gmk b/jdk/make/java/nio/FILES_java.gmk index 4ad955d87aa..e49d5267a47 100644 --- a/jdk/make/java/nio/FILES_java.gmk +++ b/jdk/make/java/nio/FILES_java.gmk @@ -83,6 +83,7 @@ FILES_src = \ java/nio/file/ClosedFileSystemException.java \ java/nio/file/ClosedWatchServiceException.java \ java/nio/file/CopyOption.java \ + java/nio/file/DirectoryIteratorException.java \ java/nio/file/DirectoryNotEmptyException.java \ java/nio/file/DirectoryStream.java \ java/nio/file/FileAlreadyExistsException.java \ @@ -199,6 +200,7 @@ FILES_src = \ sun/nio/ch/PipeImpl.java \ sun/nio/ch/PollArrayWrapper.java \ sun/nio/ch/Reflect.java \ + sun/nio/ch/Secrets.java \ sun/nio/ch/SelectionKeyImpl.java \ sun/nio/ch/SelectorImpl.java \ sun/nio/ch/SelectorProviderImpl.java \ diff --git a/jdk/make/java/nio/mapfile-linux b/jdk/make/java/nio/mapfile-linux index 13cc1cd01ec..c3645c5ed05 100644 --- a/jdk/make/java/nio/mapfile-linux +++ b/jdk/make/java/nio/mapfile-linux @@ -89,7 +89,7 @@ SUNWprivate_1.1 { Java_sun_nio_ch_IOUtil_drain; Java_sun_nio_ch_IOUtil_fdVal; Java_sun_nio_ch_IOUtil_initIDs; - Java_sun_nio_ch_IOUtil_initPipe; + Java_sun_nio_ch_IOUtil_makePipe; Java_sun_nio_ch_IOUtil_randomBytes; Java_sun_nio_ch_IOUtil_setfdVal; Java_sun_nio_ch_NativeThread_current; diff --git a/jdk/make/java/nio/mapfile-solaris b/jdk/make/java/nio/mapfile-solaris index 2b80e4e801e..e0dff0a32f3 100644 --- a/jdk/make/java/nio/mapfile-solaris +++ b/jdk/make/java/nio/mapfile-solaris @@ -76,7 +76,7 @@ SUNWprivate_1.1 { Java_sun_nio_ch_IOUtil_drain; Java_sun_nio_ch_IOUtil_fdVal; Java_sun_nio_ch_IOUtil_initIDs; - Java_sun_nio_ch_IOUtil_initPipe; + Java_sun_nio_ch_IOUtil_makePipe; Java_sun_nio_ch_IOUtil_randomBytes; Java_sun_nio_ch_IOUtil_setfdVal; Java_sun_nio_ch_NativeThread_current; diff --git a/jdk/make/java/text/base/FILES_java.gmk b/jdk/make/java/text/base/FILES_java.gmk index 414390822c3..8d721300c27 100644 --- a/jdk/make/java/text/base/FILES_java.gmk +++ b/jdk/make/java/text/base/FILES_java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 1996, 2007, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1996, 2010, 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 @@ -29,6 +29,7 @@ FILES_java = \ java/text/AttributedString.java \ java/text/BreakDictionary.java \ java/text/BreakIterator.java \ + java/text/CalendarBuilder.java \ java/text/CharacterIterator.java \ java/text/CharacterIteratorFieldDelegate.java \ java/text/ChoiceFormat.java \ diff --git a/jdk/make/sun/cmm/lcms/FILES_c_unix.gmk b/jdk/make/sun/cmm/lcms/FILES_c_unix.gmk index 86676ffa826..91787becd5e 100644 --- a/jdk/make/sun/cmm/lcms/FILES_c_unix.gmk +++ b/jdk/make/sun/cmm/lcms/FILES_c_unix.gmk @@ -25,7 +25,6 @@ FILES_c = \ cmscam02.c \ - cmscam97.c \ cmscgats.c \ cmscnvrt.c \ cmserr.c \ @@ -35,13 +34,17 @@ FILES_c = \ cmsio0.c \ cmsio1.c \ cmslut.c \ - cmsmatsh.c \ + cmsmd5.c \ cmsmtrx.c \ cmsnamed.c \ + cmsopt.c \ cmspack.c \ cmspcs.c \ + cmsplugin.c \ cmsps2.c \ cmssamp.c \ + cmssm.c \ + cmstypes.c \ cmsvirt.c \ cmswtpnt.c \ cmsxform.c \ diff --git a/jdk/make/sun/cmm/lcms/FILES_c_windows.gmk b/jdk/make/sun/cmm/lcms/FILES_c_windows.gmk index 86676ffa826..91787becd5e 100644 --- a/jdk/make/sun/cmm/lcms/FILES_c_windows.gmk +++ b/jdk/make/sun/cmm/lcms/FILES_c_windows.gmk @@ -25,7 +25,6 @@ FILES_c = \ cmscam02.c \ - cmscam97.c \ cmscgats.c \ cmscnvrt.c \ cmserr.c \ @@ -35,13 +34,17 @@ FILES_c = \ cmsio0.c \ cmsio1.c \ cmslut.c \ - cmsmatsh.c \ + cmsmd5.c \ cmsmtrx.c \ cmsnamed.c \ + cmsopt.c \ cmspack.c \ cmspcs.c \ + cmsplugin.c \ cmsps2.c \ cmssamp.c \ + cmssm.c \ + cmstypes.c \ cmsvirt.c \ cmswtpnt.c \ cmsxform.c \ diff --git a/jdk/make/sun/cmm/lcms/Makefile b/jdk/make/sun/cmm/lcms/Makefile index 5f7ca42e4e3..1072c2fac7b 100644 --- a/jdk/make/sun/cmm/lcms/Makefile +++ b/jdk/make/sun/cmm/lcms/Makefile @@ -80,8 +80,8 @@ vpath %.c $(SHARE_SRC)/native/$(PKGDIR) vpath %.c $(SHARE_SRC)/native/sun/java2d ifeq ($(PLATFORM), windows) - -OTHER_LDLIBS = user32.lib version.lib $(OBJDIR)/../../../sun.awt/awt/$(OBJDIRNAME)/awt.lib +OTHER_CFLAGS += -DCMS_IS_WINDOWS_ -Dsqrtf=sqrt +OTHER_LDLIBS = $(OBJDIR)/../../../sun.awt/awt/$(OBJDIRNAME)/awt.lib OTHER_INCLUDES += -I$(SHARE_SRC)/native/sun/java2d \ -I$(SHARE_SRC)/native/sun/awt/debug diff --git a/jdk/make/sun/net/FILES_java.gmk b/jdk/make/sun/net/FILES_java.gmk index 3eba9b01a17..1fcec35f4e4 100644 --- a/jdk/make/sun/net/FILES_java.gmk +++ b/jdk/make/sun/net/FILES_java.gmk @@ -53,6 +53,7 @@ FILES_java = \ sun/net/ftp/FtpProtocolException.java \ sun/net/ftp/impl/FtpClient.java \ sun/net/ftp/impl/DefaultFtpClientProvider.java \ + sun/net/sdp/SdpSupport.java \ sun/net/spi/DefaultProxySelector.java \ sun/net/spi/nameservice/NameServiceDescriptor.java \ sun/net/spi/nameservice/NameService.java \ @@ -136,8 +137,6 @@ FILES_java = \ ifeq ($(PLATFORM), windows) FILES_java += sun/net/www/protocol/http/ntlm/NTLMAuthSequence.java -endif - -ifeq ($(PLATFORM), solaris) - FILES_java += sun/net/spi/SdpProvider.java +else + FILES_java += sun/net/sdp/SdpProvider.java endif diff --git a/jdk/src/share/bin/java.c b/jdk/src/share/bin/java.c index 6f24932e550..4c61fb7c853 100644 --- a/jdk/src/share/bin/java.c +++ b/jdk/src/share/bin/java.c @@ -712,19 +712,19 @@ SetModulesBootClassPath(const char *jrepath) struct stat statbuf; /* return if jre/lib/rt.jar exists */ - sprintf(pathname, "%s%slib%srt.jar", jrepath, separator, separator); + JLI_Snprintf(pathname, sizeof(pathname), "%s%slib%srt.jar", jrepath, separator, separator); if (stat(pathname, &statbuf) == 0) { return; } /* return if jre/classes exists */ - sprintf(pathname, "%s%sclasses", jrepath, separator); + JLI_Snprintf(pathname, sizeof(pathname), "%s%sclasses", jrepath, separator); if (stat(pathname, &statbuf) == 0) { return; } /* modularized jre */ - sprintf(pathname, "%s%slib%s*", jrepath, separator, separator); + JLI_Snprintf(pathname, sizeof(pathname), "%s%slib%s*", jrepath, separator, separator); s = (char *) JLI_WildcardExpandClasspath(pathname); def = JLI_MemAlloc(sizeof(format) - 2 /* strlen("%s") */ @@ -1624,11 +1624,8 @@ ReadKnownVMs(const char *jrepath, const char * arch, jboolean speculative) if (JLI_IsTraceLauncher()) { start = CounterGet(); } - - JLI_StrCpy(jvmCfgName, jrepath); - JLI_StrCat(jvmCfgName, FILESEP "lib" FILESEP); - JLI_StrCat(jvmCfgName, arch); - JLI_StrCat(jvmCfgName, FILESEP "jvm.cfg"); + JLI_Snprintf(jvmCfgName, sizeof(jvmCfgName), "%s%slib%s%s%sjvm.cfg", + jrepath, FILESEP, FILESEP, arch, FILESEP); jvmCfg = fopen(jvmCfgName, "r"); if (jvmCfg == NULL) { diff --git a/jdk/src/share/classes/com/oracle/net/Sdp.java b/jdk/src/share/classes/com/oracle/net/Sdp.java new file mode 100644 index 00000000000..32316073828 --- /dev/null +++ b/jdk/src/share/classes/com/oracle/net/Sdp.java @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 com.oracle.net; + +import java.net.Socket; +import java.net.ServerSocket; +import java.net.SocketImpl; +import java.net.SocketImplFactory; +import java.net.SocketException; +import java.nio.channels.SocketChannel; +import java.nio.channels.ServerSocketChannel; +import java.io.IOException; +import java.io.FileDescriptor; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.lang.reflect.Constructor; +import java.lang.reflect.AccessibleObject; +import java.lang.reflect.InvocationTargetException; + +import sun.net.sdp.SdpSupport; + +/** + * This class consists exclusively of static methods that Sockets or Channels to + * sockets that support the InfiniBand Sockets Direct Protocol (SDP). + */ + +public final class Sdp { + private Sdp() { } + + /** + * The package-privage ServerSocket(SocketImpl) constructor + */ + private static final Constructor serverSocketCtor; + static { + try { + serverSocketCtor = (Constructor) + ServerSocket.class.getDeclaredConstructor(SocketImpl.class); + setAccessible(serverSocketCtor); + } catch (NoSuchMethodException e) { + throw new AssertionError(e); + } + } + + /** + * The package-private SdpSocketImpl() constructor + */ + private static final Constructor socketImplCtor; + static { + try { + Class cl = Class.forName("java.net.SdpSocketImpl", true, null); + socketImplCtor = (Constructor)cl.getDeclaredConstructor(); + setAccessible(socketImplCtor); + } catch (ClassNotFoundException e) { + throw new AssertionError(e); + } catch (NoSuchMethodException e) { + throw new AssertionError(e); + } + } + + private static void setAccessible(final AccessibleObject o) { + AccessController.doPrivileged(new PrivilegedAction() { + public Void run() { + o.setAccessible(true); + return null; + } + }); + } + + /** + * SDP enabled Socket. + */ + private static class SdpSocket extends Socket { + SdpSocket(SocketImpl impl) throws SocketException { + super(impl); + } + } + + /** + * Creates a SDP enabled SocketImpl + */ + private static SocketImpl createSocketImpl() { + try { + return socketImplCtor.newInstance(); + } catch (InstantiationException x) { + throw new AssertionError(x); + } catch (IllegalAccessException x) { + throw new AssertionError(x); + } catch (InvocationTargetException x) { + throw new AssertionError(x); + } + } + + /** + * Creates an unconnected and unbound SDP socket. The {@code Socket} is + * associated with a {@link java.net.SocketImpl} of the system-default type. + * + * @return a new Socket + * + * @throws UnsupportedOperationException + * If SDP is not supported + * @throws IOException + * If an I/O error occurs + */ + public static Socket openSocket() throws IOException { + SocketImpl impl = createSocketImpl(); + return new SdpSocket(impl); + } + + /** + * Creates an unbound SDP server socket. The {@code ServerSocket} is + * associated with a {@link java.net.SocketImpl} of the system-default type. + * + * @return a new ServerSocket + * + * @throws UnsupportedOperationException + * If SDP is not supported + * @throws IOException + * If an I/O error occurs + */ + public static ServerSocket openServerSocket() throws IOException { + // create ServerSocket via package-private constructor + SocketImpl impl = createSocketImpl(); + try { + return serverSocketCtor.newInstance(impl); + } catch (IllegalAccessException x) { + throw new AssertionError(x); + } catch (InstantiationException x) { + throw new AssertionError(x); + } catch (InvocationTargetException x) { + Throwable cause = x.getCause(); + if (cause instanceof IOException) + throw (IOException)cause; + if (cause instanceof RuntimeException) + throw (RuntimeException)cause; + throw new RuntimeException(x); + } + } + + /** + * Opens a socket channel to a SDP socket. + * + *

The channel will be associated with the system-wide default + * {@link java.nio.channels.spi.SelectorProvider SelectorProvider}. + * + * @return a new SocketChannel + * + * @throws UnsupportedOperationException + * If SDP is not supported or not supported by the default selector + * provider + * @throws IOException + * If an I/O error occurs. + */ + public static SocketChannel openSocketChannel() throws IOException { + FileDescriptor fd = SdpSupport.createSocket(); + return sun.nio.ch.Secrets.newSocketChannel(fd); + } + + /** + * Opens a socket channel to a SDP socket. + * + *

The channel will be associated with the system-wide default + * {@link java.nio.channels.spi.SelectorProvider SelectorProvider}. + * + * @return a new ServerSocketChannel + * + * @throws UnsupportedOperationException + * If SDP is not supported or not supported by the default selector + * provider + * @throws IOException + * If an I/O error occurs + */ + public static ServerSocketChannel openServerSocketChannel() + throws IOException + { + FileDescriptor fd = SdpSupport.createSocket(); + return sun.nio.ch.Secrets.newServerSocketChannel(fd); + } +} diff --git a/jdk/src/share/classes/com/sun/java/swing/SwingUtilities3.java b/jdk/src/share/classes/com/sun/java/swing/SwingUtilities3.java index fb2700f70b7..1ca240dd743 100644 --- a/jdk/src/share/classes/com/sun/java/swing/SwingUtilities3.java +++ b/jdk/src/share/classes/com/sun/java/swing/SwingUtilities3.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2010, 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 @@ -31,13 +31,14 @@ import java.util.Collections; import java.util.Map; import java.util.WeakHashMap; import java.util.concurrent.Callable; +import java.applet.Applet; import java.awt.AWTEvent; import java.awt.EventQueue; import java.awt.Component; import java.awt.Container; +import java.awt.Window; import javax.swing.JComponent; import javax.swing.RepaintManager; -import javax.swing.SwingUtilities; /** * A collection of utility methods for Swing. @@ -91,7 +92,7 @@ public class SwingUtilities3 { */ public static void setVsyncRequested(Container rootContainer, boolean isRequested) { - assert SwingUtilities.getRoot(rootContainer) == rootContainer; + assert (rootContainer instanceof Applet) || (rootContainer instanceof Window); if (isRequested) { vsyncedMap.put(rootContainer, Boolean.TRUE); } else { @@ -106,7 +107,7 @@ public class SwingUtilities3 { * @return {@code true} if vsync painting is requested for {@code rootContainer} */ public static boolean isVsyncRequested(Container rootContainer) { - assert SwingUtilities.getRoot(rootContainer) == rootContainer; + assert (rootContainer instanceof Applet) || (rootContainer instanceof Window); return Boolean.TRUE == vsyncedMap.get(rootContainer); } diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKPainter.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKPainter.java index fa9a5a2fb15..57a816932b0 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKPainter.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKPainter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2010, 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 @@ -399,7 +399,7 @@ class GTKPainter extends SynthPainter { } String detail = "arrow"; - if (name == "ScrollBar.button") { + if ((name == "ScrollBar.button") || (name == "TabbedPane.button")) { if (arrowType == ArrowType.UP || arrowType == ArrowType.DOWN) { detail = "vscrollbar"; } else { @@ -409,7 +409,7 @@ class GTKPainter extends SynthPainter { name == "Spinner.previousButton") { detail = "spinbutton"; } else if (name != "ComboBox.arrowButton") { - assert false; + assert false : "unexpected name: " + name; } int gtkState = GTKLookAndFeel.synthStateToGTKState( @@ -436,7 +436,7 @@ class GTKPainter extends SynthPainter { String name = button.getName(); String detail = "button"; int direction = SwingConstants.CENTER; - if (name == "ScrollBar.button") { + if ((name == "ScrollBar.button") || (name == "TabbedPane.button")) { Integer prop = (Integer) button.getClientProperty("__arrow_direction__"); direction = (prop != null) ? @@ -457,7 +457,7 @@ class GTKPainter extends SynthPainter { } else if (name == "Spinner.nextButton") { detail = "spinbutton_up"; } else if (name != "ComboBox.arrowButton") { - assert false; + assert false : "unexpected name: " + name; } int state = context.getComponentState(); diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java index 0c76686ebc9..1a60d277757 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/PangoFonts.java @@ -150,11 +150,6 @@ class PangoFonts { * case for it to be a problem the values would have to be different. * It also seems unlikely to arise except when a user explicitly * deletes the X resource database entry. - * 3) Because of rounding errors sizes may differ very slightly - * between JDK and GTK. To fix that would at the very least require - * Swing to specify floating pt font sizes. - * Eg "10 pts" for GTK at 96 dpi to get the same size at Java 2D's - * 72 dpi you'd need to specify exactly 13.33. * There also some other issues to be aware of for the future: * GTK specifies the Xft.dpi value as server-wide which when used * on systems with 2 distinct X screens with different physical DPI @@ -197,11 +192,16 @@ class PangoFonts { String fcFamilyLC = family.toLowerCase(); if (FontUtilities.mapFcName(fcFamilyLC) != null) { /* family is a Fc/Pango logical font which we need to expand. */ - return FontUtilities.getFontConfigFUIR(fcFamilyLC, style, size); + Font font = FontUtilities.getFontConfigFUIR(fcFamilyLC, style, size); + font = font.deriveFont(style, (float)dsize); + return new FontUIResource(font); } else { /* It's a physical font which we will create with a fallback */ - Font font = new FontUIResource(family, style, size); - return FontUtilities.getCompositeFontUIResource(font); + Font font = new Font(family, style, size); + /* a roundabout way to set the font size in floating points */ + font = font.deriveFont(style, (float)dsize); + FontUIResource fuir = new FontUIResource(font); + return FontUtilities.getCompositeFontUIResource(fuir); } } diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifBorders.java b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifBorders.java index cd68cca1bdf..4b140f17f89 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifBorders.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/motif/MotifBorders.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2010, 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 @@ -40,8 +40,6 @@ import java.awt.Insets; import java.awt.Point; import java.awt.Rectangle; -import java.io.Serializable; - /** * Factory object that can vend Icons appropriate for the basic L & F. *

@@ -99,7 +97,7 @@ public class MotifBorders { } public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) { - if (((JComponent)c).hasFocus()) { + if (c.hasFocus()) { g.setColor(focus); g.drawRect(x, y, w-1, h-1); } else { @@ -233,6 +231,9 @@ public class MotifBorders { } public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + if (!(c instanceof JMenuBar)) { + return; + } JMenuBar menuBar = (JMenuBar)c; if (menuBar.isBorderPainted() == true) { // this draws the MenuBar border @@ -658,6 +659,9 @@ public class MotifBorders { * @param height the height of the painted border */ public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + if (!(c instanceof JPopupMenu)) { + return; + } Font origFont = g.getFont(); Color origColor = g.getColor(); @@ -701,6 +705,9 @@ public class MotifBorders { * @param insets the object to be reinitialized */ public Insets getBorderInsets(Component c, Insets insets) { + if (!(c instanceof JPopupMenu)) { + return insets; + } FontMetrics fm; int descent = 0; int ascent = 16; diff --git a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsBorders.java b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsBorders.java index 537618c6b01..286c3a516bd 100644 --- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsBorders.java +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsBorders.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2010, 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,12 +32,8 @@ import javax.swing.plaf.basic.*; import java.awt.Component; import java.awt.Insets; -import java.awt.Dimension; -import java.awt.Image; -import java.awt.Rectangle; import java.awt.Color; import java.awt.Graphics; -import java.io.Serializable; import static com.sun.java.swing.plaf.windows.TMSchema.*; import static com.sun.java.swing.plaf.windows.XPStyle.Skin; @@ -159,6 +155,9 @@ public class WindowsBorders { public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + if (!(c instanceof JToolBar)) { + return; + } g.translate(x, y); XPStyle xp = XPStyle.getXP(); @@ -190,33 +189,33 @@ public class WindowsBorders { } else { - if (!vertical) { - if (c.getComponentOrientation().isLeftToRight()) { + if (!vertical) { + if (c.getComponentOrientation().isLeftToRight()) { + g.setColor(shadow); + g.drawLine(4, 3, 4, height - 4); + g.drawLine(4, height - 4, 2, height - 4); + + g.setColor(highlight); + g.drawLine(2, 3, 3, 3); + g.drawLine(2, 3, 2, height - 5); + } else { + g.setColor(shadow); + g.drawLine(width - 3, 3, width - 3, height - 4); + g.drawLine(width - 4, height - 4, width - 4, height - 4); + + g.setColor(highlight); + g.drawLine(width - 5, 3, width - 4, 3); + g.drawLine(width - 5, 3, width - 5, height - 5); + } + } else { // Vertical g.setColor(shadow); - g.drawLine(4, 3, 4, height - 4); - g.drawLine(4, height - 4, 2, height - 4); + g.drawLine(3, 4, width - 4, 4); + g.drawLine(width - 4, 2, width - 4, 4); g.setColor(highlight); - g.drawLine(2, 3, 3, 3); - g.drawLine(2, 3, 2, height - 5); - } else { - g.setColor(shadow); - g.drawLine(width - 3, 3, width - 3, height - 4); - g.drawLine(width - 4, height - 4, width - 4, height - 4); - - g.setColor(highlight); - g.drawLine(width - 5, 3, width - 4, 3); - g.drawLine(width - 5, 3, width - 5, height - 5); + g.drawLine(3, 2, width - 4, 2); + g.drawLine(3, 2, 3, 3); } - } else { // Vertical - g.setColor(shadow); - g.drawLine(3, 4, width - 4, 4); - g.drawLine(width - 4, 2, width - 4, 4); - - g.setColor(highlight); - g.drawLine(3, 2, width - 4, 2); - g.drawLine(3, 2, 3, 3); - } } } @@ -225,6 +224,9 @@ public class WindowsBorders { public Insets getBorderInsets(Component c, Insets insets) { insets.set(1,1,1,1); + if (!(c instanceof JToolBar)) { + return insets; + } if (((JToolBar)c).isFloatable()) { int gripInset = (XPStyle.getXP() != null) ? 12 : 9; if (((JToolBar)c).getOrientation() == HORIZONTAL) { diff --git a/jdk/src/share/classes/com/sun/media/sound/AbstractMidiDevice.java b/jdk/src/share/classes/com/sun/media/sound/AbstractMidiDevice.java index 4a4734d241c..97bafe3f9a6 100644 --- a/jdk/src/share/classes/com/sun/media/sound/AbstractMidiDevice.java +++ b/jdk/src/share/classes/com/sun/media/sound/AbstractMidiDevice.java @@ -474,7 +474,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice This is necessary for Receivers retrieved via MidiSystem.getReceiver() (which opens the device implicitely). */ - protected abstract class AbstractReceiver implements Receiver { + protected abstract class AbstractReceiver implements MidiDeviceReceiver { private boolean open = true; @@ -508,6 +508,10 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice AbstractMidiDevice.this.closeInternal(this); } + public MidiDevice getMidiDevice() { + return AbstractMidiDevice.this; + } + protected boolean isOpen() { return open; } @@ -529,7 +533,7 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice * Also, it has some optimizations regarding sending to the Receivers, * for known Receivers, and managing itself in the TransmitterList. */ - protected class BasicTransmitter implements Transmitter { + protected class BasicTransmitter implements MidiDeviceTransmitter { private Receiver receiver = null; TransmitterList tlist = null; @@ -568,6 +572,9 @@ abstract class AbstractMidiDevice implements MidiDevice, ReferenceCountingDevice } } + public MidiDevice getMidiDevice() { + return AbstractMidiDevice.this; + } } // class BasicTransmitter diff --git a/jdk/src/share/classes/com/sun/media/sound/AudioFloatConverter.java b/jdk/src/share/classes/com/sun/media/sound/AudioFloatConverter.java index 45bd2a52c97..95068ed6126 100644 --- a/jdk/src/share/classes/com/sun/media/sound/AudioFloatConverter.java +++ b/jdk/src/share/classes/com/sun/media/sound/AudioFloatConverter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2010, 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 @@ -40,8 +40,6 @@ import javax.sound.sampled.AudioFormat.Encoding; */ public abstract class AudioFloatConverter { - public static final Encoding PCM_FLOAT = new Encoding("PCM_FLOAT"); - /*************************************************************************** * * LSB Filter, used filter least significant byte in samples arrays. @@ -982,7 +980,7 @@ public abstract class AudioFloatConverter { format.getSampleSizeInBits() + 7) / 8) - 4); } } - } else if (format.getEncoding().equals(PCM_FLOAT)) { + } else if (format.getEncoding().equals(Encoding.PCM_FLOAT)) { if (format.getSampleSizeInBits() == 32) { if (format.isBigEndian()) conv = new AudioFloatConversion32B(); diff --git a/jdk/src/share/classes/com/sun/media/sound/AudioFloatFormatConverter.java b/jdk/src/share/classes/com/sun/media/sound/AudioFloatFormatConverter.java index 506eab542ac..0b73dca0666 100644 --- a/jdk/src/share/classes/com/sun/media/sound/AudioFloatFormatConverter.java +++ b/jdk/src/share/classes/com/sun/media/sound/AudioFloatFormatConverter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2010, 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 @@ -175,7 +175,6 @@ public class AudioFloatFormatConverter extends FormatConversionProvider { for (int c = 0; c < targetChannels; c++) { for (int i = 0, ix = off + c; i < len2; i++, ix += cs) { b[ix] = conversion_buffer[i]; - ; } } } else if (targetChannels == 1) { @@ -186,7 +185,6 @@ public class AudioFloatFormatConverter extends FormatConversionProvider { for (int c = 1; c < sourceChannels; c++) { for (int i = c, ix = off; i < len2; i += cs, ix++) { b[ix] += conversion_buffer[i]; - ; } } float vol = 1f / ((float) sourceChannels); @@ -390,6 +388,7 @@ public class AudioFloatFormatConverter extends FormatConversionProvider { return -1; if (len < 0) return 0; + int offlen = off + len; int remain = len / nrofchannels; int destPos = 0; int in_end = ibuffer_len; @@ -423,7 +422,7 @@ public class AudioFloatFormatConverter extends FormatConversionProvider { for (int c = 0; c < nrofchannels; c++) { int ix = 0; float[] buff = cbuffer[c]; - for (int i = c; i < b.length; i += nrofchannels) { + for (int i = c + off; i < offlen; i += nrofchannels) { b[i] = buff[ix++]; } } @@ -447,7 +446,7 @@ public class AudioFloatFormatConverter extends FormatConversionProvider { } public long skip(long len) throws IOException { - if (len > 0) + if (len < 0) return 0; if (skipbuffer == null) skipbuffer = new float[1024 * targetFormat.getFrameSize()]; @@ -470,7 +469,7 @@ public class AudioFloatFormatConverter extends FormatConversionProvider { } private Encoding[] formats = { Encoding.PCM_SIGNED, Encoding.PCM_UNSIGNED, - AudioFloatConverter.PCM_FLOAT }; + Encoding.PCM_FLOAT }; public AudioInputStream getAudioInputStream(Encoding targetEncoding, AudioInputStream sourceStream) { @@ -482,7 +481,7 @@ public class AudioFloatFormatConverter extends FormatConversionProvider { float samplerate = format.getSampleRate(); int bits = format.getSampleSizeInBits(); boolean bigendian = format.isBigEndian(); - if (targetEncoding.equals(AudioFloatConverter.PCM_FLOAT)) + if (targetEncoding.equals(Encoding.PCM_FLOAT)) bits = 32; AudioFormat targetFormat = new AudioFormat(encoding, samplerate, bits, channels, channels * bits / 8, samplerate, bigendian); @@ -521,19 +520,19 @@ public class AudioFloatFormatConverter extends FormatConversionProvider { public Encoding[] getSourceEncodings() { return new Encoding[] { Encoding.PCM_SIGNED, Encoding.PCM_UNSIGNED, - AudioFloatConverter.PCM_FLOAT }; + Encoding.PCM_FLOAT }; } public Encoding[] getTargetEncodings() { return new Encoding[] { Encoding.PCM_SIGNED, Encoding.PCM_UNSIGNED, - AudioFloatConverter.PCM_FLOAT }; + Encoding.PCM_FLOAT }; } public Encoding[] getTargetEncodings(AudioFormat sourceFormat) { if (AudioFloatConverter.getConverter(sourceFormat) == null) return new Encoding[0]; return new Encoding[] { Encoding.PCM_SIGNED, Encoding.PCM_UNSIGNED, - AudioFloatConverter.PCM_FLOAT }; + Encoding.PCM_FLOAT }; } public AudioFormat[] getTargetFormats(Encoding targetEncoding, @@ -572,17 +571,17 @@ public class AudioFloatFormatConverter extends FormatConversionProvider { } } - if (targetEncoding.equals(AudioFloatConverter.PCM_FLOAT)) { - formats.add(new AudioFormat(AudioFloatConverter.PCM_FLOAT, + if (targetEncoding.equals(Encoding.PCM_FLOAT)) { + formats.add(new AudioFormat(Encoding.PCM_FLOAT, AudioSystem.NOT_SPECIFIED, 32, channels, channels * 4, AudioSystem.NOT_SPECIFIED, false)); - formats.add(new AudioFormat(AudioFloatConverter.PCM_FLOAT, + formats.add(new AudioFormat(Encoding.PCM_FLOAT, AudioSystem.NOT_SPECIFIED, 32, channels, channels * 4, AudioSystem.NOT_SPECIFIED, true)); - formats.add(new AudioFormat(AudioFloatConverter.PCM_FLOAT, + formats.add(new AudioFormat(Encoding.PCM_FLOAT, AudioSystem.NOT_SPECIFIED, 64, channels, channels * 8, AudioSystem.NOT_SPECIFIED, false)); - formats.add(new AudioFormat(AudioFloatConverter.PCM_FLOAT, + formats.add(new AudioFormat(Encoding.PCM_FLOAT, AudioSystem.NOT_SPECIFIED, 64, channels, channels * 8, AudioSystem.NOT_SPECIFIED, true)); } diff --git a/jdk/src/share/classes/com/sun/media/sound/AudioSynthesizerPropertyInfo.java b/jdk/src/share/classes/com/sun/media/sound/AudioSynthesizerPropertyInfo.java index c37f48ac37c..2c5e160a4bb 100644 --- a/jdk/src/share/classes/com/sun/media/sound/AudioSynthesizerPropertyInfo.java +++ b/jdk/src/share/classes/com/sun/media/sound/AudioSynthesizerPropertyInfo.java @@ -42,11 +42,14 @@ public class AudioSynthesizerPropertyInfo { */ public AudioSynthesizerPropertyInfo(String name, Object value) { this.name = name; - this.value = value; if (value instanceof Class) valueClass = (Class)value; - else if (value != null) - valueClass = value.getClass(); + else + { + this.value = value; + if (value != null) + valueClass = value.getClass(); + } } /** * The name of the property. diff --git a/jdk/src/share/classes/com/sun/media/sound/DLSSoundbank.java b/jdk/src/share/classes/com/sun/media/sound/DLSSoundbank.java index 6fdae7c3988..2b490dd6061 100644 --- a/jdk/src/share/classes/com/sun/media/sound/DLSSoundbank.java +++ b/jdk/src/share/classes/com/sun/media/sound/DLSSoundbank.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2010, 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 @@ -781,7 +781,7 @@ public class DLSSoundbank implements Soundbank { } if (sampleformat == 3) { audioformat = new AudioFormat( - AudioFloatConverter.PCM_FLOAT, samplerate, bits, + Encoding.PCM_FLOAT, samplerate, bits, channels, framesize, samplerate, false); } @@ -965,7 +965,7 @@ public class DLSSoundbank implements Soundbank { sampleformat = 1; else if (audioformat.getEncoding().equals(Encoding.PCM_SIGNED)) sampleformat = 1; - else if (audioformat.getEncoding().equals(AudioFloatConverter.PCM_FLOAT)) + else if (audioformat.getEncoding().equals(Encoding.PCM_FLOAT)) sampleformat = 3; fmt_chunk.writeUnsignedShort(sampleformat); diff --git a/jdk/src/share/classes/com/sun/media/sound/MidiDeviceReceiverEnvelope.java b/jdk/src/share/classes/com/sun/media/sound/MidiDeviceReceiverEnvelope.java new file mode 100644 index 00000000000..9a962bbd412 --- /dev/null +++ b/jdk/src/share/classes/com/sun/media/sound/MidiDeviceReceiverEnvelope.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 com.sun.media.sound; + +import javax.sound.midi.*; + + +/** + * Helper class which allows to convert {@code Receiver} + * to {@code MidiDeviceReceiver}. + * + * @author Alex Menkov + */ +public class MidiDeviceReceiverEnvelope implements MidiDeviceReceiver { + + private final MidiDevice device; + private final Receiver receiver; + + /** + * Creates a new {@code MidiDeviceReceiverEnvelope} object which + * envelops the specified {@code Receiver} + * and is owned by the specified {@code MidiDevice}. + * + * @param device the owner {@code MidiDevice} + * @param receiver the {@code Receiver} to be enveloped + */ + public MidiDeviceReceiverEnvelope(MidiDevice device, Receiver receiver) { + if (device == null || receiver == null) { + throw new NullPointerException(); + } + this.device = device; + this.receiver = receiver; + } + + // Receiver implementation + public void close() { + receiver.close(); + } + + public void send(MidiMessage message, long timeStamp) { + receiver.send(message, timeStamp); + } + + // MidiDeviceReceiver implementation + public MidiDevice getMidiDevice() { + return device; + } + + /** + * Obtains the receiver enveloped + * by this {@code MidiDeviceReceiverEnvelope} object. + * + * @return the enveloped receiver + */ + public Receiver getReceiver() { + return receiver; + } +} diff --git a/jdk/src/share/classes/com/sun/media/sound/MidiDeviceTransmitterEnvelope.java b/jdk/src/share/classes/com/sun/media/sound/MidiDeviceTransmitterEnvelope.java new file mode 100644 index 00000000000..e20d430a042 --- /dev/null +++ b/jdk/src/share/classes/com/sun/media/sound/MidiDeviceTransmitterEnvelope.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 com.sun.media.sound; + +import javax.sound.midi.*; + + +/** + * Helper class which allows to convert {@code Transmitter} + * to {@code MidiDeviceTransmitter}. + * + * @author Alex Menkov + */ +public class MidiDeviceTransmitterEnvelope implements MidiDeviceTransmitter { + + private final MidiDevice device; + private final Transmitter transmitter; + + /** + * Creates a new {@code MidiDeviceTransmitterEnvelope} object which + * envelops the specified {@code Transmitter} + * and is owned by the specified {@code MidiDevice}. + * + * @param device the owner {@code MidiDevice} + * @param transmitter the {@code Transmitter} to be enveloped + */ + public MidiDeviceTransmitterEnvelope(MidiDevice device, Transmitter transmitter) { + if (device == null || transmitter == null) { + throw new NullPointerException(); + } + this.device = device; + this.transmitter = transmitter; + } + + // Transmitter implementation + public void setReceiver(Receiver receiver) { + transmitter.setReceiver(receiver); + } + + public Receiver getReceiver() { + return transmitter.getReceiver(); + } + + public void close() { + transmitter.close(); + } + + + // MidiDeviceReceiver implementation + public MidiDevice getMidiDevice() { + return device; + } + + /** + * Obtains the transmitter enveloped + * by this {@code MidiDeviceTransmitterEnvelope} object. + * + * @return the enveloped transmitter + */ + public Transmitter getTransmitter() { + return transmitter; + } +} diff --git a/jdk/src/share/classes/com/sun/media/sound/ModelByteBufferWavetable.java b/jdk/src/share/classes/com/sun/media/sound/ModelByteBufferWavetable.java index 9ad439a6f69..bc3f63ac1a1 100644 --- a/jdk/src/share/classes/com/sun/media/sound/ModelByteBufferWavetable.java +++ b/jdk/src/share/classes/com/sun/media/sound/ModelByteBufferWavetable.java @@ -205,7 +205,8 @@ public class ModelByteBufferWavetable implements ModelWavetable { } if (buffer.array() == null) { return AudioFloatInputStream.getInputStream(new AudioInputStream( - buffer.getInputStream(), format, buffer.capacity())); + buffer.getInputStream(), format, + buffer.capacity() / format.getFrameSize())); } if (buffer8 != null) { if (format.getEncoding().equals(Encoding.PCM_SIGNED) diff --git a/jdk/src/share/classes/com/sun/media/sound/ModelInstrument.java b/jdk/src/share/classes/com/sun/media/sound/ModelInstrument.java index 5ecb84c0d17..89969209f71 100644 --- a/jdk/src/share/classes/com/sun/media/sound/ModelInstrument.java +++ b/jdk/src/share/classes/com/sun/media/sound/ModelInstrument.java @@ -56,7 +56,7 @@ public abstract class ModelInstrument extends Instrument { public ModelDirector getDirector(ModelPerformer[] performers, MidiChannel channel, ModelDirectedPlayer player) { - return new ModelStandardDirector(performers, player); + return new ModelStandardIndexedDirector(performers, player); } public ModelPerformer[] getPerformers() { diff --git a/jdk/src/share/classes/com/sun/media/sound/ModelStandardIndexedDirector.java b/jdk/src/share/classes/com/sun/media/sound/ModelStandardIndexedDirector.java new file mode 100644 index 00000000000..d5181e39cee --- /dev/null +++ b/jdk/src/share/classes/com/sun/media/sound/ModelStandardIndexedDirector.java @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 com.sun.media.sound; + +/** + * A standard indexed director who chooses performers + * by there keyfrom,keyto,velfrom,velto properties. + * + * @author Karl Helgason + */ +public class ModelStandardIndexedDirector implements ModelDirector { + + ModelPerformer[] performers; + ModelDirectedPlayer player; + boolean noteOnUsed = false; + boolean noteOffUsed = false; + + // Variables needed for index + byte[][] trantables; + int[] counters; + int[][] mat; + + public ModelStandardIndexedDirector(ModelPerformer[] performers, + ModelDirectedPlayer player) { + this.performers = performers; + this.player = player; + for (int i = 0; i < performers.length; i++) { + ModelPerformer p = performers[i]; + if (p.isReleaseTriggered()) { + noteOffUsed = true; + } else { + noteOnUsed = true; + } + } + buildindex(); + } + + private int[] lookupIndex(int x, int y) { + if ((x >= 0) && (x < 128) && (y >= 0) && (y < 128)) { + int xt = trantables[0][x]; + int yt = trantables[1][y]; + if (xt != -1 && yt != -1) { + return mat[xt + yt * counters[0]]; + } + } + return null; + } + + private int restrict(int value) { + if(value < 0) return 0; + if(value > 127) return 127; + return value; + } + + private void buildindex() { + trantables = new byte[2][129]; + counters = new int[trantables.length]; + for (ModelPerformer performer : performers) { + int keyFrom = performer.getKeyFrom(); + int keyTo = performer.getKeyTo(); + int velFrom = performer.getVelFrom(); + int velTo = performer.getVelTo(); + if (keyFrom > keyTo) continue; + if (velFrom > velTo) continue; + keyFrom = restrict(keyFrom); + keyTo = restrict(keyTo); + velFrom = restrict(velFrom); + velTo = restrict(velTo); + trantables[0][keyFrom] = 1; + trantables[0][keyTo + 1] = 1; + trantables[1][velFrom] = 1; + trantables[1][velTo + 1] = 1; + } + for (int d = 0; d < trantables.length; d++) { + byte[] trantable = trantables[d]; + int transize = trantable.length; + for (int i = transize - 1; i >= 0; i--) { + if (trantable[i] == 1) { + trantable[i] = -1; + break; + } + trantable[i] = -1; + } + int counter = -1; + for (int i = 0; i < transize; i++) { + if (trantable[i] != 0) { + counter++; + if (trantable[i] == -1) + break; + } + trantable[i] = (byte) counter; + } + counters[d] = counter; + } + mat = new int[counters[0] * counters[1]][]; + int ix = 0; + for (ModelPerformer performer : performers) { + int keyFrom = performer.getKeyFrom(); + int keyTo = performer.getKeyTo(); + int velFrom = performer.getVelFrom(); + int velTo = performer.getVelTo(); + if (keyFrom > keyTo) continue; + if (velFrom > velTo) continue; + keyFrom = restrict(keyFrom); + keyTo = restrict(keyTo); + velFrom = restrict(velFrom); + velTo = restrict(velTo); + int x_from = trantables[0][keyFrom]; + int x_to = trantables[0][keyTo + 1]; + int y_from = trantables[1][velFrom]; + int y_to = trantables[1][velTo + 1]; + if (x_to == -1) + x_to = counters[0]; + if (y_to == -1) + y_to = counters[1]; + for (int y = y_from; y < y_to; y++) { + int i = x_from + y * counters[0]; + for (int x = x_from; x < x_to; x++) { + int[] mprev = mat[i]; + if (mprev == null) { + mat[i] = new int[] { ix }; + } else { + int[] mnew = new int[mprev.length + 1]; + mnew[mnew.length - 1] = ix; + for (int k = 0; k < mprev.length; k++) + mnew[k] = mprev[k]; + mat[i] = mnew; + } + i++; + } + } + ix++; + } + } + + public void close() { + } + + public void noteOff(int noteNumber, int velocity) { + if (!noteOffUsed) + return; + int[] plist = lookupIndex(noteNumber, velocity); + if(plist == null) return; + for (int i : plist) { + ModelPerformer p = performers[i]; + if (p.isReleaseTriggered()) { + player.play(i, null); + } + } + } + + public void noteOn(int noteNumber, int velocity) { + if (!noteOnUsed) + return; + int[] plist = lookupIndex(noteNumber, velocity); + if(plist == null) return; + for (int i : plist) { + ModelPerformer p = performers[i]; + if (!p.isReleaseTriggered()) { + player.play(i, null); + } + } + } +} diff --git a/jdk/src/share/classes/com/sun/media/sound/SoftChannel.java b/jdk/src/share/classes/com/sun/media/sound/SoftChannel.java index 1526cef99c1..1fc20b75b83 100644 --- a/jdk/src/share/classes/com/sun/media/sound/SoftChannel.java +++ b/jdk/src/share/classes/com/sun/media/sound/SoftChannel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2010, 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 @@ -116,7 +116,7 @@ public class SoftChannel implements MidiChannel, ModelDirectedPlayer { protected int tuning_program = 0; protected SoftInstrument current_instrument = null; protected ModelChannelMixer current_mixer = null; - private ModelDirector current_director = null; + protected ModelDirector current_director = null; // Controller Destination Settings protected int cds_control_number = -1; @@ -1264,13 +1264,16 @@ public class SoftChannel implements MidiChannel, ModelDirectedPlayer { } public void programChange(int bank, int program) { - bank = restrict7Bit(bank); + bank = restrict14Bit(bank); program = restrict7Bit(program); synchronized (control_mutex) { mainmixer.activity(); - this.bank = bank; - this.program = program; - current_instrument = null; + if(this.bank != bank || this.program != program) + { + this.bank = bank; + this.program = program; + current_instrument = null; + } } } diff --git a/jdk/src/share/classes/com/sun/media/sound/SoftMixingMixer.java b/jdk/src/share/classes/com/sun/media/sound/SoftMixingMixer.java index e6b9ee4ec7a..abc31cb8fa1 100644 --- a/jdk/src/share/classes/com/sun/media/sound/SoftMixingMixer.java +++ b/jdk/src/share/classes/com/sun/media/sound/SoftMixingMixer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2010, 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,16 +118,16 @@ public class SoftMixingMixer implements Mixer { AudioSystem.NOT_SPECIFIED, bits, channels, channels * bits / 8, AudioSystem.NOT_SPECIFIED, true)); } - formats.add(new AudioFormat(AudioFloatConverter.PCM_FLOAT, + formats.add(new AudioFormat(Encoding.PCM_FLOAT, AudioSystem.NOT_SPECIFIED, 32, channels, channels * 4, AudioSystem.NOT_SPECIFIED, false)); - formats.add(new AudioFormat(AudioFloatConverter.PCM_FLOAT, + formats.add(new AudioFormat(Encoding.PCM_FLOAT, AudioSystem.NOT_SPECIFIED, 32, channels, channels * 4, AudioSystem.NOT_SPECIFIED, true)); - formats.add(new AudioFormat(AudioFloatConverter.PCM_FLOAT, + formats.add(new AudioFormat(Encoding.PCM_FLOAT, AudioSystem.NOT_SPECIFIED, 64, channels, channels * 8, AudioSystem.NOT_SPECIFIED, false)); - formats.add(new AudioFormat(AudioFloatConverter.PCM_FLOAT, + formats.add(new AudioFormat(Encoding.PCM_FLOAT, AudioSystem.NOT_SPECIFIED, 64, channels, channels * 8, AudioSystem.NOT_SPECIFIED, true)); } diff --git a/jdk/src/share/classes/com/sun/media/sound/SoftReceiver.java b/jdk/src/share/classes/com/sun/media/sound/SoftReceiver.java index e7c230e5122..03a0067f4ad 100644 --- a/jdk/src/share/classes/com/sun/media/sound/SoftReceiver.java +++ b/jdk/src/share/classes/com/sun/media/sound/SoftReceiver.java @@ -27,6 +27,7 @@ package com.sun.media.sound; import java.util.TreeMap; import javax.sound.midi.MidiDevice; +import javax.sound.midi.MidiDeviceReceiver; import javax.sound.midi.MidiMessage; import javax.sound.midi.ShortMessage; diff --git a/jdk/src/share/classes/com/sun/media/sound/SoftSynthesizer.java b/jdk/src/share/classes/com/sun/media/sound/SoftSynthesizer.java index 1c33dfc48a3..a868bd441a2 100644 --- a/jdk/src/share/classes/com/sun/media/sound/SoftSynthesizer.java +++ b/jdk/src/share/classes/com/sun/media/sound/SoftSynthesizer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2010, 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,16 +25,25 @@ package com.sun.media.sound; +import java.io.BufferedInputStream; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.lang.ref.WeakReference; -import java.security.AccessControlException; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Properties; +import java.util.StringTokenizer; +import java.util.prefs.BackingStoreException; +import java.util.prefs.Preferences; import javax.sound.midi.Instrument; import javax.sound.midi.MidiChannel; @@ -182,6 +191,7 @@ public class SoftSynthesizer implements AudioSynthesizer, // 1: DLS Voice Allocation protected int voice_allocation_mode = 0; + protected boolean load_default_soundbank = false; protected boolean reverb_light = true; protected boolean reverb_on = true; protected boolean chorus_on = true; @@ -226,8 +236,6 @@ public class SoftSynthesizer implements AudioSynthesizer, = new HashMap(); private Map inslist = new HashMap(); - private Map availlist - = new HashMap(); private Map loadedlist = new HashMap(); @@ -275,10 +283,12 @@ public class SoftSynthesizer implements AudioSynthesizer, synchronized (control_mutex) { if (channels != null) for (SoftChannel c : channels) + { c.current_instrument = null; + c.current_director = null; + } for (Instrument instrument : instruments) { String pat = patchToString(instrument.getPatch()); - availlist.remove(pat); SoftInstrument softins = new SoftInstrument((ModelInstrument) instrument); inslist.put(pat, softins); @@ -341,6 +351,7 @@ public class SoftSynthesizer implements AudioSynthesizer, number_of_midi_channels = (Integer)items[10].value; jitter_correction = (Boolean)items[11].value; reverb_light = (Boolean)items[12].value; + load_default_soundbank = (Boolean)items[13].value; } private String patchToString(Patch patch) { @@ -578,7 +589,9 @@ public class SoftSynthesizer implements AudioSynthesizer, c.current_instrument = null; inslist.remove(pat); loadedlist.remove(pat); - availlist.remove(pat); + for (int i = 0; i < channels.length; i++) { + channels[i].allSoundOff(); + } } } @@ -600,7 +613,7 @@ public class SoftSynthesizer implements AudioSynthesizer, return false; synchronized (control_mutex) { - if (!loadedlist.containsValue(to) && !availlist.containsValue(to)) + if (!loadedlist.containsValue(to)) throw new IllegalArgumentException("Instrument to is not loaded."); unloadInstrument(from); ModelMappedInstrument mfrom = new ModelMappedInstrument( @@ -609,118 +622,155 @@ public class SoftSynthesizer implements AudioSynthesizer, } } - public synchronized Soundbank getDefaultSoundbank() { - if (defaultSoundBank == null) { - try { - File javahome = new File(System.getProperties().getProperty( - "java.home")); - File libaudio = new File(new File(javahome, "lib"), "audio"); + public Soundbank getDefaultSoundbank() { + synchronized (SoftSynthesizer.class) { + if (defaultSoundBank != null) + return defaultSoundBank; - if (libaudio.exists()) { - File foundfile = null; - File[] files = libaudio.listFiles(); - if (files != null) { - for (int i = 0; i < files.length; i++) { - File file = files[i]; - if (file.isFile()) { - String lname = file.getName().toLowerCase(); - if (lname.endsWith(".sf2") || - lname.endsWith(".dls")) { - if (foundfile == null || (file.length() > - foundfile.length())) { - foundfile = file; + List> actions = + new ArrayList>(); + + actions.add(new PrivilegedAction() { + public InputStream run() { + File javahome = new File(System.getProperties() + .getProperty("java.home")); + File libaudio = new File(new File(javahome, "lib"), "audio"); + if (libaudio.exists()) { + File foundfile = null; + File[] files = libaudio.listFiles(); + if (files != null) { + for (int i = 0; i < files.length; i++) { + File file = files[i]; + if (file.isFile()) { + String lname = file.getName().toLowerCase(); + if (lname.endsWith(".sf2") + || lname.endsWith(".dls")) { + if (foundfile == null + || (file.length() > foundfile + .length())) { + foundfile = file; + } } } } } - } - if (foundfile != null) { - try { - Soundbank sbk = MidiSystem.getSoundbank(foundfile); - defaultSoundBank = sbk; - return defaultSoundBank; - } catch (Exception e) { - //e.printStackTrace(); + if (foundfile != null) { + try { + return new FileInputStream(foundfile); + } catch (IOException e) { + } } } + return null; } + }); - if (System.getProperties().getProperty("os.name") - .startsWith("Windows")) { - File gm_dls = new File(System.getenv("SystemRoot") - + "\\system32\\drivers\\gm.dls"); - if (gm_dls.exists()) { - try { - Soundbank sbk = MidiSystem.getSoundbank(gm_dls); - defaultSoundBank = sbk; - return defaultSoundBank; - } catch (Exception e) { - //e.printStackTrace(); + actions.add(new PrivilegedAction() { + public InputStream run() { + if (System.getProperties().getProperty("os.name") + .startsWith("Windows")) { + File gm_dls = new File(System.getenv("SystemRoot") + + "\\system32\\drivers\\gm.dls"); + if (gm_dls.exists()) { + try { + return new FileInputStream(gm_dls); + } catch (IOException e) { + } } } + return null; } - } catch (AccessControlException e) { - } catch (Exception e) { - //e.printStackTrace(); - } + }); - File userhome = null; - File emg_soundbank_file = null; + actions.add(new PrivilegedAction() { + public InputStream run() { + /* + * Try to load saved generated soundbank + */ + File userhome = new File(System.getProperty("user.home"), + ".gervill"); + File emg_soundbank_file = new File(userhome, + "soundbank-emg.sf2"); + if (emg_soundbank_file.exists()) { + try { + return new FileInputStream(emg_soundbank_file); + } catch (IOException e) { + } + } + return null; + } + }); - /* - * Try to load saved generated soundbank - */ - try { - userhome = new File(System.getProperty("user.home"), - ".gervill"); - emg_soundbank_file = new File(userhome, "soundbank-emg.sf2"); - Soundbank sbk = MidiSystem.getSoundbank(emg_soundbank_file); - defaultSoundBank = sbk; - return defaultSoundBank; - } catch (AccessControlException e) { - } catch (Exception e) { - //e.printStackTrace(); + for (PrivilegedAction action : actions) { + try { + InputStream is = AccessController.doPrivileged(action); + if(is == null) continue; + Soundbank sbk; + try { + sbk = MidiSystem.getSoundbank(new BufferedInputStream(is)); + } finally { + is.close(); + } + if (sbk != null) { + defaultSoundBank = sbk; + return defaultSoundBank; + } + } catch (Exception e) { + } } try { - /* - * Generate emergency soundbank + * Generate emergency soundbank */ defaultSoundBank = EmergencySoundbank.createSoundbank(); - - /* - * Save generated soundbank to disk for faster future use. - */ - if(defaultSoundBank != null) - { - if(!userhome.exists()) userhome.mkdirs(); - if(!emg_soundbank_file.exists()) - ((SF2Soundbank)defaultSoundBank).save(emg_soundbank_file); - } } catch (Exception e) { - //e.printStackTrace(); } + if (defaultSoundBank != null) { + /* + * Save generated soundbank to disk for faster future use. + */ + OutputStream out = AccessController + .doPrivileged(new PrivilegedAction() { + public OutputStream run() { + try { + File userhome = new File(System + .getProperty("user.home"), + ".gervill"); + if (!userhome.exists()) + userhome.mkdirs(); + File emg_soundbank_file = new File( + userhome, "soundbank-emg.sf2"); + if (emg_soundbank_file.exists()) + return null; + return new FileOutputStream( + emg_soundbank_file); + } catch (IOException e) { + } catch (SecurityException e) { + } + return null; + } + }); + if (out != null) { + try { + ((SF2Soundbank) defaultSoundBank).save(out); + out.close(); + } catch (IOException e) { + } + } + } } return defaultSoundBank; } public Instrument[] getAvailableInstruments() { - if (!isOpen()) { - Soundbank defsbk = getDefaultSoundbank(); - if (defsbk == null) - return new Instrument[0]; - return defsbk.getInstruments(); - } - - synchronized (control_mutex) { - ModelInstrument[] inslist_array = - new ModelInstrument[availlist.values().size()]; - availlist.values().toArray(inslist_array); - Arrays.sort(inslist_array, new ModelInstrumentComparator()); - return inslist_array; - } + Soundbank defsbk = getDefaultSoundbank(); + if (defsbk == null) + return new Instrument[0]; + Instrument[] inslist_array = defsbk.getInstruments(); + Arrays.sort(inslist_array, new ModelInstrumentComparator()); + return inslist_array; } public Instrument[] getLoadedInstruments() { @@ -794,6 +844,31 @@ public class SoftSynthesizer implements AudioSynthesizer, return info; } + private Properties getStoredProperties() { + return AccessController + .doPrivileged(new PrivilegedAction() { + public Properties run() { + Properties p = new Properties(); + String notePath = "/com/sun/media/sound/softsynthesizer"; + try { + Preferences prefroot = Preferences.userRoot(); + if (prefroot.nodeExists(notePath)) { + Preferences prefs = prefroot.node(notePath); + String[] prefs_keys = prefs.keys(); + for (String prefs_key : prefs_keys) { + String val = prefs.get(prefs_key, null); + if (val != null) + p.setProperty(prefs_key, val); + } + } + } catch (BackingStoreException e) { + } catch (SecurityException e) { + } + return p; + } + }); + } + public AudioSynthesizerPropertyInfo[] getPropertyInfo(Map info) { List list = new ArrayList(); @@ -861,17 +936,92 @@ public class SoftSynthesizer implements AudioSynthesizer, item.description = "Turn light reverb mode on or off"; list.add(item); + item = new AudioSynthesizerPropertyInfo("load default soundbank", o?load_default_soundbank:true); + item.description = "Enabled/disable loading default soundbank"; + list.add(item); + AudioSynthesizerPropertyInfo[] items; items = list.toArray(new AudioSynthesizerPropertyInfo[list.size()]); - if (info != null) - for (AudioSynthesizerPropertyInfo item2: items) { - Object v = info.get(item2.name); + Properties storedProperties = getStoredProperties(); + + for (AudioSynthesizerPropertyInfo item2 : items) { + Object v = (info == null) ? null : info.get(item2.name); + v = (v != null) ? v : storedProperties.getProperty(item2.name); + if (v != null) { Class c = (item2.valueClass); - if (v != null) - if (c.isInstance(v)) - item2.value = v; + if (c.isInstance(v)) + item2.value = v; + else if (v instanceof String) { + String s = (String) v; + if (c == Boolean.class) { + if (s.equalsIgnoreCase("true")) + item2.value = Boolean.TRUE; + if (s.equalsIgnoreCase("false")) + item2.value = Boolean.FALSE; + } else if (c == AudioFormat.class) { + int channels = 2; + boolean signed = true; + boolean bigendian = false; + int bits = 16; + float sampleRate = 44100f; + try { + StringTokenizer st = new StringTokenizer(s, ", "); + String prevToken = ""; + while (st.hasMoreTokens()) { + String token = st.nextToken().toLowerCase(); + if (token.equals("mono")) + channels = 1; + if (token.startsWith("channel")) + channels = Integer.parseInt(prevToken); + if (token.contains("unsigned")) + signed = false; + if (token.equals("big-endian")) + bigendian = true; + if (token.equals("bit")) + bits = Integer.parseInt(prevToken); + if (token.equals("hz")) + sampleRate = Float.parseFloat(prevToken); + prevToken = token; + } + item2.value = new AudioFormat(sampleRate, bits, + channels, signed, bigendian); + } catch (NumberFormatException e) { + } + + } else + try { + if (c == Byte.class) + item2.value = Byte.valueOf(s); + else if (c == Short.class) + item2.value = Short.valueOf(s); + else if (c == Integer.class) + item2.value = Integer.valueOf(s); + else if (c == Long.class) + item2.value = Long.valueOf(s); + else if (c == Float.class) + item2.value = Float.valueOf(s); + else if (c == Double.class) + item2.value = Double.valueOf(s); + } catch (NumberFormatException e) { + } + } else if (v instanceof Number) { + Number n = (Number) v; + if (c == Byte.class) + item2.value = Byte.valueOf(n.byteValue()); + if (c == Short.class) + item2.value = Short.valueOf(n.shortValue()); + if (c == Integer.class) + item2.value = Integer.valueOf(n.intValue()); + if (c == Long.class) + item2.value = Long.valueOf(n.longValue()); + if (c == Float.class) + item2.value = Float.valueOf(n.floatValue()); + if (c == Double.class) + item2.value = Double.valueOf(n.doubleValue()); + } } + } return items; } @@ -1007,11 +1157,12 @@ public class SoftSynthesizer implements AudioSynthesizer, if (targetFormat != null) setFormat(targetFormat); - Soundbank defbank = getDefaultSoundbank(); - if (defbank != null) { - loadAllInstruments(defbank); - availlist.putAll(loadedlist); - loadedlist.clear(); + if (load_default_soundbank) + { + Soundbank defbank = getDefaultSoundbank(); + if (defbank != null) { + loadAllInstruments(defbank); + } } voices = new SoftVoice[maxpoly]; @@ -1117,7 +1268,6 @@ public class SoftSynthesizer implements AudioSynthesizer, } inslist.clear(); - availlist.clear(); loadedlist.clear(); tunings.clear(); diff --git a/jdk/src/share/classes/com/sun/media/sound/SoftVoice.java b/jdk/src/share/classes/com/sun/media/sound/SoftVoice.java index 6f891959dca..8e8fd5ecee0 100644 --- a/jdk/src/share/classes/com/sun/media/sound/SoftVoice.java +++ b/jdk/src/share/classes/com/sun/media/sound/SoftVoice.java @@ -279,9 +279,12 @@ public class SoftVoice extends VoiceStatus { } protected void updateTuning(SoftTuning newtuning) { + tuning = newtuning; tunedKey = tuning.getTuning(note) / 100.0; if (!portamento) { co_noteon_keynumber[0] = tunedKey * (1.0 / 128.0); + if(performer == null) + return; int[] c = performer.midi_connections[4]; if (c == null) return; @@ -433,6 +436,8 @@ public class SoftVoice extends VoiceStatus { } protected void setPolyPressure(int pressure) { + if(performer == null) + return; int[] c = performer.midi_connections[2]; if (c == null) return; @@ -441,6 +446,8 @@ public class SoftVoice extends VoiceStatus { } protected void setChannelPressure(int pressure) { + if(performer == null) + return; int[] c = performer.midi_connections[1]; if (c == null) return; @@ -449,6 +456,8 @@ public class SoftVoice extends VoiceStatus { } protected void controlChange(int controller, int value) { + if(performer == null) + return; int[] c = performer.midi_ctrl_connections[controller]; if (c == null) return; @@ -457,6 +466,8 @@ public class SoftVoice extends VoiceStatus { } protected void nrpnChange(int controller, int value) { + if(performer == null) + return; int[] c = performer.midi_nrpn_connections.get(controller); if (c == null) return; @@ -465,6 +476,8 @@ public class SoftVoice extends VoiceStatus { } protected void rpnChange(int controller, int value) { + if(performer == null) + return; int[] c = performer.midi_rpn_connections.get(controller); if (c == null) return; @@ -473,6 +486,8 @@ public class SoftVoice extends VoiceStatus { } protected void setPitchBend(int bend) { + if(performer == null) + return; int[] c = performer.midi_connections[0]; if (c == null) return; @@ -499,6 +514,8 @@ public class SoftVoice extends VoiceStatus { co_noteon_on[0] = -1; + if(performer == null) + return; int[] c = performer.midi_connections[3]; if (c == null) return; @@ -527,6 +544,8 @@ public class SoftVoice extends VoiceStatus { co_noteon_on[0] = 0; + if(performer == null) + return; int[] c = performer.midi_connections[3]; if (c == null) return; @@ -543,6 +562,8 @@ public class SoftVoice extends VoiceStatus { sustain = true; co_noteon_on[0] = 1; + if(performer == null) + return; int[] c = performer.midi_connections[3]; if (c == null) return; @@ -555,6 +576,11 @@ public class SoftVoice extends VoiceStatus { active = false; stopping = false; audiostarted = false; + instrument = null; + performer = null; + connections = null; + extendedConnectionBlocks = null; + channelmixer = null; if (osc_stream != null) try { osc_stream.close(); diff --git a/jdk/src/share/classes/com/sun/media/sound/WaveExtensibleFileReader.java b/jdk/src/share/classes/com/sun/media/sound/WaveExtensibleFileReader.java index 69304dc2a64..14a1848baaf 100644 --- a/jdk/src/share/classes/com/sun/media/sound/WaveExtensibleFileReader.java +++ b/jdk/src/share/classes/com/sun/media/sound/WaveExtensibleFileReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2010, 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 @@ -271,7 +271,7 @@ public class WaveExtensibleFileReader extends AudioFileReader { bits, channels, framesize, samplerate, false, p); } } else if (subFormat.equals(SUBTYPE_IEEE_FLOAT)) { - audioformat = new AudioFormat(AudioFloatConverter.PCM_FLOAT, + audioformat = new AudioFormat(Encoding.PCM_FLOAT, samplerate, bits, channels, framesize, samplerate, false, p); } else throw new UnsupportedAudioFileException(); diff --git a/jdk/src/share/classes/com/sun/media/sound/WaveFloatFileReader.java b/jdk/src/share/classes/com/sun/media/sound/WaveFloatFileReader.java index bbb8095c959..8db4113b702 100644 --- a/jdk/src/share/classes/com/sun/media/sound/WaveFloatFileReader.java +++ b/jdk/src/share/classes/com/sun/media/sound/WaveFloatFileReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2010, 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,6 +33,7 @@ import java.net.URL; import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioFormat.Encoding; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.UnsupportedAudioFileException; @@ -102,7 +103,7 @@ public class WaveFloatFileReader extends AudioFileReader { throw new UnsupportedAudioFileException(); AudioFormat audioformat = new AudioFormat( - AudioFloatConverter.PCM_FLOAT, samplerate, bits, channels, + Encoding.PCM_FLOAT, samplerate, bits, channels, framesize, samplerate, false); AudioFileFormat fileformat = new AudioFileFormat( AudioFileFormat.Type.WAVE, audioformat, diff --git a/jdk/src/share/classes/com/sun/media/sound/WaveFloatFileWriter.java b/jdk/src/share/classes/com/sun/media/sound/WaveFloatFileWriter.java index 324e868211c..a61792bacc4 100644 --- a/jdk/src/share/classes/com/sun/media/sound/WaveFloatFileWriter.java +++ b/jdk/src/share/classes/com/sun/media/sound/WaveFloatFileWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2010, 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 @@ -30,6 +30,7 @@ import java.io.OutputStream; import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioFormat.Encoding; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.AudioFileFormat.Type; @@ -48,8 +49,7 @@ public class WaveFloatFileWriter extends AudioFileWriter { public Type[] getAudioFileTypes(AudioInputStream stream) { - if (!stream.getFormat().getEncoding().equals( - AudioFloatConverter.PCM_FLOAT)) + if (!stream.getFormat().getEncoding().equals(Encoding.PCM_FLOAT)) return new Type[0]; return new Type[] { Type.WAVE }; } @@ -58,8 +58,7 @@ public class WaveFloatFileWriter extends AudioFileWriter { if (!Type.WAVE.equals(type)) throw new IllegalArgumentException("File type " + type + " not supported."); - if (!stream.getFormat().getEncoding().equals( - AudioFloatConverter.PCM_FLOAT)) + if (!stream.getFormat().getEncoding().equals(Encoding.PCM_FLOAT)) throw new IllegalArgumentException("File format " + stream.getFormat() + " not supported."); } diff --git a/jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java b/jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java index 2f7478b4e26..cc3ebbfc21b 100644 --- a/jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java +++ b/jdk/src/share/classes/com/sun/rowset/CachedRowSetImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2010, 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 @@ -518,7 +518,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern setReadOnly(true); setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); setEscapeProcessing(true); - setTypeMap(null); + //setTypeMap(null); checkTransactionalWriter(); //Instantiating the vector for MatchColumns @@ -679,7 +679,10 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern } else if (obj instanceof Clob) { obj = new SerialClob((Clob)obj); } else if (obj instanceof java.sql.Array) { - obj = new SerialArray((java.sql.Array)obj, map); + if(map != null) + obj = new SerialArray((java.sql.Array)obj, map); + else + obj = new SerialArray((java.sql.Array)obj); } ((Row)currentRow).initColumnObject(i, obj); @@ -762,7 +765,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern if( conn != null){ // JDBC 4.0 mandates as does the Java EE spec that all DataBaseMetaData methods // must be implemented, therefore, the previous fix for 5055528 is being backed out - dbmslocatorsUpdateCopy = conn.getMetaData().locatorsUpdateCopy(); + dbmslocatorsUpdateCopy = conn.getMetaData().locatorsUpdateCopy(); } } @@ -6322,6 +6325,7 @@ public class CachedRowSetImpl extends BaseRowSet implements RowSet, RowSetIntern crs.RowSetMD = RowSetMD; crs.numRows = 1; crs.cursorPos = 0; + crs.setTypeMap(this.getTypeMap()); // make sure we don't get someone playing with these // %%% is this now necessary ??? @@ -10114,7 +10118,7 @@ a * during the deserialization process * */ - protected void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { + private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { // Default state initialization happens here ois.defaultReadObject(); // Initialization of transient Res Bundle happens here . @@ -10125,5 +10129,15 @@ a } } - static final long serialVersionUID =1884577171200622428L; + + //------------------------- JDBC 4.1 ----------------------------------- + public T getObject(int columnIndex, Class type) throws SQLException { + throw new SQLFeatureNotSupportedException("Not supported yet."); + } + + public T getObject(String columnLabel, Class type) throws SQLException { + throw new SQLFeatureNotSupportedException("Not supported yet."); + } + + static final long serialVersionUID =1884577171200622428L; } diff --git a/jdk/src/share/classes/com/sun/rowset/FilteredRowSetImpl.java b/jdk/src/share/classes/com/sun/rowset/FilteredRowSetImpl.java index dd765d84c93..a9becf17d37 100644 --- a/jdk/src/share/classes/com/sun/rowset/FilteredRowSetImpl.java +++ b/jdk/src/share/classes/com/sun/rowset/FilteredRowSetImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2010, 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 @@ -1746,5 +1746,23 @@ public class FilteredRowSetImpl extends WebRowSetImpl implements Serializable, C onInsertRow = false; super.insertRow(); } - static final long serialVersionUID = 6178454588413509360L; + + /** + * This method re populates the resBundle + * during the deserialization process + * + */ + private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { + // Default state initialization happens here + ois.defaultReadObject(); + // Initialization of transient Res Bundle happens here . + try { + resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); + } catch(IOException ioe) { + throw new RuntimeException(ioe); + } + + } + + static final long serialVersionUID = 6178454588413509360L; } // end FilteredRowSetImpl class diff --git a/jdk/src/share/classes/com/sun/rowset/JdbcRowSetImpl.java b/jdk/src/share/classes/com/sun/rowset/JdbcRowSetImpl.java index 3c34ccf61e9..34178d4984d 100644 --- a/jdk/src/share/classes/com/sun/rowset/JdbcRowSetImpl.java +++ b/jdk/src/share/classes/com/sun/rowset/JdbcRowSetImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2010, 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 @@ -101,7 +101,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { private Vector strMatchColumns; - protected transient JdbcRowSetResourceBundle jdbcResBundle; + protected transient JdbcRowSetResourceBundle resBundle; /** * Constructs a default JdbcRowSet object. @@ -140,7 +140,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { rs = null; try { - jdbcResBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); + resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); } catch(IOException ioe) { throw new RuntimeException(ioe); } @@ -154,42 +154,42 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { try { setShowDeleted(false); } catch(SQLException sqle) { - System.err.println(jdbcResBundle.handleGetObject("jdbcrowsetimpl.setshowdeleted").toString() + + System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setshowdeleted").toString() + sqle.getLocalizedMessage()); } try { setQueryTimeout(0); } catch(SQLException sqle) { - System.err.println(jdbcResBundle.handleGetObject("jdbcrowsetimpl.setquerytimeout").toString() + + System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setquerytimeout").toString() + sqle.getLocalizedMessage()); } try { setMaxRows(0); } catch(SQLException sqle) { - System.err.println(jdbcResBundle.handleGetObject("jdbcrowsetimpl.setmaxrows").toString() + + System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setmaxrows").toString() + sqle.getLocalizedMessage()); } try { setMaxFieldSize(0); } catch(SQLException sqle) { - System.err.println(jdbcResBundle.handleGetObject("jdbcrowsetimpl.setmaxfieldsize").toString() + + System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setmaxfieldsize").toString() + sqle.getLocalizedMessage()); } try { setEscapeProcessing(true); } catch(SQLException sqle) { - System.err.println(jdbcResBundle.handleGetObject("jdbcrowsetimpl.setescapeprocessing").toString() + + System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setescapeprocessing").toString() + sqle.getLocalizedMessage()); } try { setConcurrency(ResultSet.CONCUR_UPDATABLE); } catch (SQLException sqle) { - System.err.println(jdbcResBundle.handleGetObject("jdbcrowsetimpl.setconcurrency").toString() + + System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setconcurrency").toString() + sqle.getLocalizedMessage()); } @@ -198,7 +198,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { try { setType(ResultSet.TYPE_SCROLL_INSENSITIVE); } catch(SQLException sqle){ - System.err.println(jdbcResBundle.handleGetObject("jdbcrowsetimpl.settype").toString() + + System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.settype").toString() + sqle.getLocalizedMessage()); } @@ -207,7 +207,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { try { setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); } catch(SQLException sqle){ - System.err.println(jdbcResBundle.handleGetObject("jdbcrowsetimpl.settransactionisolation").toString() + + System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.settransactionisolation").toString() + sqle.getLocalizedMessage()); } @@ -263,7 +263,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { rs = null; try { - jdbcResBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); + resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); } catch(IOException ioe) { throw new RuntimeException(ioe); } @@ -338,7 +338,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { rs = null; try { - jdbcResBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); + resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); } catch(IOException ioe) { throw new RuntimeException(ioe); } @@ -430,7 +430,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { rs = res; try { - jdbcResBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); + resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); } catch(IOException ioe) { throw new RuntimeException(ioe); } @@ -517,7 +517,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { // to the db, implies undesirable state so throw exception if (conn == null && ps == null && rs == null ) { - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.invalstate").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.invalstate").toString()); } } @@ -593,28 +593,28 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { try { ps.setEscapeProcessing(getEscapeProcessing()); } catch (SQLException ex) { - System.err.println(jdbcResBundle.handleGetObject("jdbcrowsetimpl.setescapeprocessing").toString() + + System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setescapeprocessing").toString() + ex.getLocalizedMessage()); } try { ps.setMaxFieldSize(getMaxFieldSize()); } catch (SQLException ex) { - System.err.println(jdbcResBundle.handleGetObject("jdbcrowsetimpl.setmaxfieldsize").toString() + + System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setmaxfieldsize").toString() + ex.getLocalizedMessage()); } try { ps.setMaxRows(getMaxRows()); } catch (SQLException ex) { - System.err.println(jdbcResBundle.handleGetObject("jdbcrowsetimpl.setmaxrows").toString() + + System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setmaxrows").toString() + ex.getLocalizedMessage()); } try { ps.setQueryTimeout(getQueryTimeout()); } catch (SQLException ex) { - System.err.println(jdbcResBundle.handleGetObject("jdbcrowsetimpl.setquerytimeout").toString() + + System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.setquerytimeout").toString() + ex.getLocalizedMessage()); } @@ -651,7 +651,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { } } catch (javax.naming.NamingException ex) { - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.connect").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.connect").toString()); } } else if (getUrl() != null) { @@ -681,7 +681,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { } ps = conn.prepareStatement(getCommand(),ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); } catch (SQLException ex) { - System.err.println(jdbcResBundle.handleGetObject("jdbcrowsetimpl.prepare").toString() + + System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.prepare").toString() + ex.getLocalizedMessage()); if (ps != null) @@ -721,15 +721,15 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { if (param[0] instanceof java.sql.Date || param[0] instanceof java.sql.Time || param[0] instanceof java.sql.Timestamp) { - System.err.println(jdbcResBundle.handleGetObject("jdbcrowsetimpl.detecteddate")); + System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.detecteddate")); if (param[1] instanceof java.util.Calendar) { - System.err.println(jdbcResBundle.handleGetObject("jdbcrowsetimpl.detectedcalendar")); + System.err.println(resBundle.handleGetObject("jdbcrowsetimpl.detectedcalendar")); ps.setDate(i + 1, (java.sql.Date)param[0], (java.util.Calendar)param[1]); continue; } else { - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.paramtype").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.paramtype").toString()); } } @@ -770,7 +770,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { (java.io.InputStream)param[0], ((Integer)param[1]).intValue()); default: - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.paramtype").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.paramtype").toString()); } } @@ -784,7 +784,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { continue; } - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.paramtype").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.paramtype").toString()); } else { // common case - this catches all SQL92 types @@ -3749,7 +3749,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { for( int j= 0 ;j < columnIdxes.length; j++) { i_val = (Integer.parseInt(iMatchColumns.get(j).toString())); if(columnIdxes[j] != i_val) { - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.matchcols").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols").toString()); } } @@ -3776,7 +3776,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { for(int j = 0 ;j < columnIdxes.length; j++) { if( !columnIdxes[j].equals(strMatchColumns.get(j)) ){ - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.matchcols").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols").toString()); } } @@ -3800,7 +3800,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { String []str_temp = new String[strMatchColumns.size()]; if( strMatchColumns.get(0) == null) { - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.setmatchcols").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.setmatchcols").toString()); } strMatchColumns.copyInto(str_temp); @@ -3825,7 +3825,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { i_val = ((Integer)iMatchColumns.get(0)).intValue(); if( i_val == -1 ) { - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.setmatchcols").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.setmatchcols").toString()); } @@ -3859,7 +3859,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { for(int j = 0 ; j < columnIdxes.length; j++) { if( columnIdxes[j] < 0 ) { - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.matchcols1").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols1").toString()); } } for(int i = 0 ;i < columnIdxes.length; i++) { @@ -3886,7 +3886,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { for(int j = 0; j < columnNames.length; j++) { if( columnNames[j] == null || columnNames[j].equals("")) { - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.matchcols2").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols2").toString()); } } for( int i = 0; i < columnNames.length; i++) { @@ -3915,7 +3915,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { public void setMatchColumn(int columnIdx) throws SQLException { // validate, if col is ok to be set if(columnIdx < 0) { - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.matchcols1").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols1").toString()); } else { // set iMatchColumn iMatchColumns.set(0, new Integer(columnIdx)); @@ -3941,7 +3941,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { public void setMatchColumn(String columnName) throws SQLException { // validate, if col is ok to be set if(columnName.equals(null) || ((columnName = columnName.trim()) == "" )) { - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.matchcols2").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.matchcols2").toString()); } else { // set strMatchColumn strMatchColumns.set(0, columnName); @@ -3966,9 +3966,9 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { public void unsetMatchColumn(int columnIdx) throws SQLException { // check if we are unsetting the SAME column if(! iMatchColumns.get(0).equals(new Integer(columnIdx) ) ) { - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.unsetmatch").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.unsetmatch").toString()); } else if(strMatchColumns.get(0) != null) { - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.usecolname").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.usecolname").toString()); } else { // that is, we are unsetting it. iMatchColumns.set(0, new Integer(-1)); @@ -3995,9 +3995,9 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { columnName = columnName.trim(); if(!((strMatchColumns.get(0)).equals(columnName))) { - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.unsetmatch").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.unsetmatch").toString()); } else if( ((Integer)(iMatchColumns.get(0))).intValue() > 0) { - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.usecolid").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.usecolid").toString()); } else { strMatchColumns.set(0, null); // that is, we are unsetting it. } @@ -4152,7 +4152,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { private void checkTypeConcurrency() throws SQLException { if(rs.getType() == TYPE_FORWARD_ONLY || rs.getConcurrency() == CONCUR_READ_ONLY) { - throw new SQLException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.resnotupd").toString()); + throw new SQLException(resBundle.handleGetObject("jdbcrowsetimpl.resnotupd").toString()); } } @@ -4642,7 +4642,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 6.0 */ public SQLXML getSQLXML(int columnIndex) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -4653,7 +4653,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @throws SQLException if a database access error occurs */ public SQLXML getSQLXML(String colName) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -4668,7 +4668,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 6.0 */ public RowId getRowId(int columnIndex) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -4683,7 +4683,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 6.0 */ public RowId getRowId(String columnName) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -4699,7 +4699,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 6.0 */ public void updateRowId(int columnIndex, RowId x) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -4715,7 +4715,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 6.0 */ public void updateRowId(String columnName, RowId x) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -4725,7 +4725,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 6.0 */ public int getHoldability() throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -4736,7 +4736,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 6.0 */ public boolean isClosed() throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -4748,7 +4748,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 6.0 */ public void updateNString(int columnIndex, String nString) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -4760,7 +4760,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 6.0 */ public void updateNString(String columnName, String nString) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -4773,7 +4773,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 6.0 */ public void updateNClob(int columnIndex, NClob nClob) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -4785,7 +4785,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 6.0 */ public void updateNClob(String columnName, NClob nClob) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -4800,7 +4800,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 6.0 */ public NClob getNClob(int i) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -4816,7 +4816,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 6.0 */ public NClob getNClob(String colName) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } public T unwrap(java.lang.Class iface) throws java.sql.SQLException{ @@ -4836,7 +4836,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 1.6 */ public void setSQLXML(int parameterIndex, SQLXML xmlObject) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -4848,7 +4848,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 1.6 */ public void setSQLXML(String parameterName, SQLXML xmlObject) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -4863,7 +4863,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 1.6 */ public void setRowId(int parameterIndex, RowId x) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -4877,7 +4877,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 1.6 */ public void setRowId(String parameterName, RowId x) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -4897,7 +4897,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 1.6 */ public void setNString(int parameterIndex, String value) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -4925,7 +4925,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 1.6 */ public void setNCharacterStream(int parameterIndex, Reader value) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -4940,7 +4940,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 1.6 */ public void setNClob(String parameterName, NClob value) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -4960,7 +4960,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 1.6 */ public java.io.Reader getNCharacterStream(int columnIndex) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -4980,7 +4980,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 1.6 */ public java.io.Reader getNCharacterStream(String columnName) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -4996,7 +4996,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 1.6 */ public void updateSQLXML(int columnIndex, SQLXML xmlObject) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5013,7 +5013,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 1.6 */ public void updateSQLXML(String columnName, SQLXML xmlObject) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5031,7 +5031,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 1.6 */ public String getNString(int columnIndex) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5049,7 +5049,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { * @since 1.6 */ public String getNString(String columnName) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5071,7 +5071,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { java.io.Reader x, long length) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5093,7 +5093,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { java.io.Reader x, long length) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5123,7 +5123,7 @@ public class JdbcRowSetImpl extends BaseRowSet implements JdbcRowSet, Joinable { */ public void updateNCharacterStream(int columnIndex, java.io.Reader x) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5155,7 +5155,7 @@ bel is the name of the column */ public void updateNCharacterStream(String columnLabel, java.io.Reader reader) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5188,7 +5188,7 @@ bel is the name of the column * @since 1.6 */ public void updateBlob(int columnIndex, InputStream inputStream, long length) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5221,7 +5221,7 @@ bel is the name of the column * @since 1.6 */ public void updateBlob(String columnLabel, InputStream inputStream, long length) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5256,7 +5256,7 @@ bel is the name of the column * @since 1.6 */ public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5291,7 +5291,7 @@ bel is the name of the column * @since 1.6 */ public void updateBlob(String columnLabel, InputStream inputStream) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5323,7 +5323,7 @@ bel is the name of the column * @since 1.6 */ public void updateClob(int columnIndex, Reader reader, long length) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5355,7 +5355,7 @@ bel is the name of the column * @since 1.6 */ public void updateClob(String columnLabel, Reader reader, long length) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5389,7 +5389,7 @@ bel is the name of the column * @since 1.6 */ public void updateClob(int columnIndex, Reader reader) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5424,7 +5424,7 @@ bel is the name of the column * @since 1.6 */ public void updateClob(String columnLabel, Reader reader) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5458,7 +5458,7 @@ bel is the name of the column * @since 1.6 */ public void updateNClob(int columnIndex, Reader reader, long length) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5492,7 +5492,7 @@ bel is the name of the column * @since 1.6 */ public void updateNClob(String columnLabel, Reader reader, long length) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5528,7 +5528,7 @@ bel is the name of the column * @since 1.6 */ public void updateNClob(int columnIndex, Reader reader) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5565,7 +5565,7 @@ bel is the name of the column * @since 1.6 */ public void updateNClob(String columnLabel, Reader reader) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -5590,7 +5590,7 @@ bel is the name of the column public void updateAsciiStream(int columnIndex, java.io.InputStream x, long length) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5614,7 +5614,7 @@ bel is the name of the column public void updateBinaryStream(int columnIndex, java.io.InputStream x, long length) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5638,7 +5638,7 @@ bel is the name of the column public void updateCharacterStream(int columnIndex, java.io.Reader x, long length) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5662,7 +5662,7 @@ bel is the name of the column public void updateAsciiStream(String columnLabel, java.io.InputStream x, long length) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5687,7 +5687,7 @@ bel is the name of the column */ public void updateAsciiStream(int columnIndex, java.io.InputStream x) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5713,7 +5713,7 @@ bel is the name of the column */ public void updateAsciiStream(String columnLabel, java.io.InputStream x) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -5738,7 +5738,7 @@ bel is the name of the column public void updateBinaryStream(String columnLabel, java.io.InputStream x, long length) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5763,7 +5763,7 @@ bel is the name of the column */ public void updateBinaryStream(int columnIndex, java.io.InputStream x) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -5790,7 +5790,7 @@ bel is the name of the column */ public void updateBinaryStream(String columnLabel, java.io.InputStream x) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -5816,7 +5816,7 @@ bel is the name of the column public void updateCharacterStream(String columnLabel, java.io.Reader reader, long length) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5841,7 +5841,7 @@ bel is the name of the column */ public void updateCharacterStream(int columnIndex, java.io.Reader x) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5868,7 +5868,7 @@ bel is the name of the column */ public void updateCharacterStream(String columnLabel, java.io.Reader reader) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -5885,7 +5885,7 @@ bel is the name of the column * @since 1.4 */ public void setURL(int parameterIndex, java.net.URL x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -5914,7 +5914,7 @@ bel is the name of the column */ public void setNClob(int parameterIndex, Reader reader) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -5942,7 +5942,7 @@ bel is the name of the column */ public void setNClob(String parameterName, Reader reader, long length) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -5969,7 +5969,7 @@ bel is the name of the column */ public void setNClob(String parameterName, Reader reader) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -5996,7 +5996,7 @@ bel is the name of the column */ public void setNClob(int parameterIndex, Reader reader, long length) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -6012,7 +6012,7 @@ a * @since 1.6 */ public void setNClob(int parameterIndex, NClob value) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -6029,7 +6029,7 @@ a */ public void setNString(String parameterName, String value) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6046,7 +6046,7 @@ a * @since 1.6 */ public void setNCharacterStream(int parameterIndex, Reader value, long length) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -6066,7 +6066,7 @@ a */ public void setNCharacterStream(String parameterName, Reader value, long length) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6092,7 +6092,7 @@ a * @since 1.6 */ public void setNCharacterStream(String parameterName, Reader value) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6118,7 +6118,7 @@ a */ public void setTimestamp(String parameterName, java.sql.Timestamp x, Calendar cal) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6144,7 +6144,7 @@ a */ public void setClob(String parameterName, Reader reader, long length) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -6163,7 +6163,7 @@ a * @since 1.6 */ public void setClob (String parameterName, Clob x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6188,7 +6188,7 @@ a */ public void setClob(String parameterName, Reader reader) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -6210,7 +6210,7 @@ a */ public void setDate(String parameterName, java.sql.Date x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6236,7 +6236,7 @@ a */ public void setDate(String parameterName, java.sql.Date x, Calendar cal) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -6256,7 +6256,7 @@ a */ public void setTime(String parameterName, java.sql.Time x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6282,7 +6282,7 @@ a */ public void setTime(String parameterName, java.sql.Time x, Calendar cal) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6308,7 +6308,7 @@ a */ public void setClob(int parameterIndex, Reader reader) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -6333,7 +6333,7 @@ a */ public void setClob(int parameterIndex, Reader reader, long length) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -6363,7 +6363,7 @@ a */ public void setBlob(int parameterIndex, InputStream inputStream, long length) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6395,7 +6395,7 @@ a */ public void setBlob(int parameterIndex, InputStream inputStream) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6426,7 +6426,7 @@ a */ public void setBlob(String parameterName, InputStream inputStream, long length) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -6444,7 +6444,7 @@ a * @since 1.6 */ public void setBlob (String parameterName, Blob x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6470,7 +6470,7 @@ a */ public void setBlob(String parameterName, InputStream inputStream) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6516,7 +6516,7 @@ a */ public void setObject(String parameterName, Object x, int targetSqlType, int scale) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6542,7 +6542,7 @@ a */ public void setObject(String parameterName, Object x, int targetSqlType) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6582,7 +6582,7 @@ a * @since 1.4 */ public void setObject(String parameterName, Object x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6609,7 +6609,7 @@ a */ public void setAsciiStream(String parameterName, java.io.InputStream x, int length) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -6636,7 +6636,7 @@ a */ public void setBinaryStream(String parameterName, java.io.InputStream x, int length) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6665,7 +6665,7 @@ a public void setCharacterStream(String parameterName, java.io.Reader reader, int length) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6692,7 +6692,7 @@ a */ public void setAsciiStream(String parameterName, java.io.InputStream x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -6719,7 +6719,7 @@ a */ public void setBinaryStream(String parameterName, java.io.InputStream x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6748,7 +6748,7 @@ a */ public void setCharacterStream(String parameterName, java.io.Reader reader) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6767,7 +6767,7 @@ a * @since 1.4 */ public void setBigDecimal(String parameterName, BigDecimal x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6788,7 +6788,7 @@ a * @since 1.4 */ public void setString(String parameterName, String x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -6810,7 +6810,7 @@ a * @since 1.4 */ public void setBytes(String parameterName, byte x[]) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6830,7 +6830,7 @@ a */ public void setTimestamp(String parameterName, java.sql.Timestamp x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6847,7 +6847,7 @@ a * @since 1.4 */ public void setNull(String parameterName, int sqlType) throws SQLException { - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6884,7 +6884,7 @@ a */ public void setNull (String parameterName, int sqlType, String typeName) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6902,7 +6902,7 @@ a * @since 1.4 */ public void setBoolean(String parameterName, boolean x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -6922,7 +6922,7 @@ a * @since 1.4 */ public void setByte(String parameterName, byte x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -6941,7 +6941,7 @@ a * @since 1.4 */ public void setShort(String parameterName, short x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -6960,7 +6960,7 @@ a * @since 1.4 */ public void setInt(String parameterName, int x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -6978,7 +6978,7 @@ a * @since 1.4 */ public void setLong(String parameterName, long x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } @@ -6997,7 +6997,7 @@ a * @since 1.4 */ public void setFloat(String parameterName, float x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -7015,7 +7015,7 @@ a * @since 1.4 */ public void setDouble(String parameterName, double x) throws SQLException{ - throw new SQLFeatureNotSupportedException(jdbcResBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); + throw new SQLFeatureNotSupportedException(resBundle.handleGetObject("jdbcrowsetimpl.featnotsupp").toString()); } /** @@ -7023,15 +7023,25 @@ a * during the deserialization process * */ - protected void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { + private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { // Default state initialization happens here ois.defaultReadObject(); // Initialization of transient Res Bundle happens here . try { - jdbcResBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); + resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); } catch(IOException ioe) {} } static final long serialVersionUID = -3591946023893483003L; + + //------------------------- JDBC 4.1 ----------------------------------- + + public T getObject(int columnIndex, Class type) throws SQLException { + throw new SQLFeatureNotSupportedException("Not supported yet."); + } + + public T getObject(String columnLabel, Class type) throws SQLException { + throw new SQLFeatureNotSupportedException("Not supported yet."); + } } diff --git a/jdk/src/share/classes/com/sun/rowset/JdbcRowSetResourceBundle.java b/jdk/src/share/classes/com/sun/rowset/JdbcRowSetResourceBundle.java index a508904eb0d..265b44a6276 100644 --- a/jdk/src/share/classes/com/sun/rowset/JdbcRowSetResourceBundle.java +++ b/jdk/src/share/classes/com/sun/rowset/JdbcRowSetResourceBundle.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, 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,4 +153,5 @@ public class JdbcRowSetResourceBundle implements Serializable { return propResBundle.handleGetObject(key); } + static final long serialVersionUID = 436199386225359954L; } diff --git a/jdk/src/share/classes/com/sun/rowset/JoinRowSetImpl.java b/jdk/src/share/classes/com/sun/rowset/JoinRowSetImpl.java index 00f427a5eea..6963d5748f8 100644 --- a/jdk/src/share/classes/com/sun/rowset/JoinRowSetImpl.java +++ b/jdk/src/share/classes/com/sun/rowset/JoinRowSetImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2010, 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 @@ -127,6 +127,11 @@ public class JoinRowSetImpl extends WebRowSetImpl implements JoinRowSet { strMatchKey = null; supportedJOINs = new boolean[] {false, true, false, false, false}; + try { + resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); + } catch(IOException ioe) { + throw new RuntimeException(ioe); + } } @@ -4306,5 +4311,22 @@ public class JoinRowSetImpl extends WebRowSetImpl implements JoinRowSet { return crsInternal.createCopySchema(); } - static final long serialVersionUID = -5590501621560008453L; + /** + * This method re populates the resBundle + * during the deserialization process + * + */ + private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { + // Default state initialization happens here + ois.defaultReadObject(); + // Initialization of transient Res Bundle happens here . + try { + resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); + } catch(IOException ioe) { + throw new RuntimeException(ioe); + } + + } + + static final long serialVersionUID = -5590501621560008453L; } diff --git a/jdk/src/share/classes/com/sun/rowset/RowSetFactoryImpl.java b/jdk/src/share/classes/com/sun/rowset/RowSetFactoryImpl.java new file mode 100644 index 00000000000..6f1c0fa385e --- /dev/null +++ b/jdk/src/share/classes/com/sun/rowset/RowSetFactoryImpl.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 com.sun.rowset; + +import java.sql.SQLException; +import javax.sql.rowset.CachedRowSet; +import javax.sql.rowset.FilteredRowSet; +import javax.sql.rowset.JdbcRowSet; +import javax.sql.rowset.JoinRowSet; +import javax.sql.rowset.WebRowSet; +import javax.sql.rowset.RowSetFactory; + +/** + * This is the implementation specific class for the + * javax.sql.rowset.spi.RowSetFactory. This is the platform + * default implementation for the Java SE platform. + * + * @author Lance Andersen + * + * + * @version 1.7 + */ +public final class RowSetFactoryImpl implements RowSetFactory { + + public CachedRowSet createCachedRowSet() throws SQLException { + return new com.sun.rowset.CachedRowSetImpl(); + } + + public FilteredRowSet createFilteredRowSet() throws SQLException { + return new com.sun.rowset.FilteredRowSetImpl(); + } + + + public JdbcRowSet createJdbcRowSet() throws SQLException { + return new com.sun.rowset.JdbcRowSetImpl(); + } + + public JoinRowSet createJoinRowSet() throws SQLException { + return new com.sun.rowset.JoinRowSetImpl(); + } + + public WebRowSet createWebRowSet() throws SQLException { + return new com.sun.rowset.WebRowSetImpl(); + } + +} diff --git a/jdk/src/share/classes/com/sun/rowset/WebRowSetImpl.java b/jdk/src/share/classes/com/sun/rowset/WebRowSetImpl.java index 2b9e975129c..5a62c78b231 100644 --- a/jdk/src/share/classes/com/sun/rowset/WebRowSetImpl.java +++ b/jdk/src/share/classes/com/sun/rowset/WebRowSetImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2010, 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 @@ -103,6 +103,12 @@ public class WebRowSetImpl extends CachedRowSetImpl implements WebRowSet { */ public WebRowSetImpl(Hashtable env) throws SQLException { + try { + resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); + } catch(IOException ioe) { + throw new RuntimeException(ioe); + } + if ( env == null) { throw new SQLException(resBundle.handleGetObject("webrowsetimpl.nullhash").toString()); } @@ -263,5 +269,23 @@ public class WebRowSetImpl extends CachedRowSetImpl implements WebRowSet { this.writeXml(oStream); } -static final long serialVersionUID = -8771775154092422943L; + + /** + * This method re populates the resBundle + * during the deserialization process + * + */ + private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { + // Default state initialization happens here + ois.defaultReadObject(); + // Initialization of transient Res Bundle happens here . + try { + resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); + } catch(IOException ioe) { + throw new RuntimeException(ioe); + } + + } + + static final long serialVersionUID = -8771775154092422943L; } diff --git a/jdk/src/share/classes/com/sun/rowset/internal/CachedRowSetReader.java b/jdk/src/share/classes/com/sun/rowset/internal/CachedRowSetReader.java index d5b4055cc3c..31510026c47 100644 --- a/jdk/src/share/classes/com/sun/rowset/internal/CachedRowSetReader.java +++ b/jdk/src/share/classes/com/sun/rowset/internal/CachedRowSetReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2010, 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 @@ -490,4 +490,17 @@ public class CachedRowSetReader implements RowSetReader, Serializable { startPosition = pos; } + private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { + // Default state initialization happens here + ois.defaultReadObject(); + // Initialization of Res Bundle happens here . + try { + resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); + } catch(IOException ioe) { + throw new RuntimeException(ioe); + } + + } + + static final long serialVersionUID =5049738185801363801L; } diff --git a/jdk/src/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java b/jdk/src/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java index 08ec71c0eb7..d679dad580b 100644 --- a/jdk/src/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java +++ b/jdk/src/share/classes/com/sun/rowset/internal/CachedRowSetWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2010, 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 @@ -31,7 +31,13 @@ import java.util.*; import java.io.*; import com.sun.rowset.*; +import java.text.MessageFormat; import javax.sql.rowset.*; +import javax.sql.rowset.serial.SQLInputImpl; +import javax.sql.rowset.serial.SerialArray; +import javax.sql.rowset.serial.SerialBlob; +import javax.sql.rowset.serial.SerialClob; +import javax.sql.rowset.serial.SerialStruct; import javax.sql.rowset.spi.*; @@ -53,6 +59,7 @@ import javax.sql.rowset.spi.*; * Standard JDBC RowSet implementations provide an object instance of this * writer by invoking the SyncProvider.getRowSetWriter() method. * + * @version 0.2 * @author Jonathan Bruce * @see javax.sql.rowset.spi.SyncProvider * @see javax.sql.rowset.spi.SyncFactory @@ -508,10 +515,11 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable { ResultSet rs = null; rs = pstmt.executeQuery(); - if (rs.next() == true) { + ResultSetMetaData rsmd = rs.getMetaData(); + if (rs.next()) { if (rs.next()) { - /** More than one row conflict. + /** More than one row conflict. * If rs has only one row we are able to * uniquely identify the row where update * have to happen else if more than one @@ -528,7 +536,7 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable { // we require the record in rs to be used. // rs.close(); // pstmt.close(); - rs.first(); + rs.first(); // how many fields need to be updated int colsNotChanged = 0; @@ -552,6 +560,49 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable { orig = origVals.getObject(i); curr = crs.getObject(i); rsval = rs.getObject(i); + /* + * the following block creates equivalent objects + * that would have been created if this rs is populated + * into a CachedRowSet so that comparison of the column values + * from the ResultSet and CachedRowSet are possible + */ + Map map = (crs.getTypeMap() == null)?con.getTypeMap():crs.getTypeMap(); + if (rsval instanceof Struct) { + + Struct s = (Struct)rsval; + + // look up the class in the map + Class c = null; + c = (Class)map.get(s.getSQLTypeName()); + if (c != null) { + // create new instance of the class + SQLData obj = null; + try { + obj = (SQLData)c.newInstance(); + } catch (java.lang.InstantiationException ex) { + throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.unableins").toString(), + ex.getMessage())); + } catch (java.lang.IllegalAccessException ex) { + throw new SQLException(MessageFormat.format(resBundle.handleGetObject("cachedrowsetimpl.unableins").toString(), + ex.getMessage())); + } + // get the attributes from the struct + Object attribs[] = s.getAttributes(map); + // create the SQLInput "stream" + SQLInputImpl sqlInput = new SQLInputImpl(attribs, map); + // read the values... + obj.readSQL(sqlInput, s.getSQLTypeName()); + rsval = obj; + } + } else if (rsval instanceof SQLData) { + rsval = new SerialStruct((SQLData)rsval, map); + } else if (rsval instanceof Blob) { + rsval = new SerialBlob((Blob)rsval); + } else if (rsval instanceof Clob) { + rsval = new SerialClob((Clob)rsval); + } else if (rsval instanceof java.sql.Array) { + rsval = new SerialArray((java.sql.Array)rsval, map); + } // reset boolNull if it had been set boolNull = true; @@ -669,6 +720,9 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable { } } //end for + rs.close(); + pstmt.close(); + this.crsResolve.insertRow(); this.crsResolve.moveToCurrentRow(); @@ -1179,11 +1233,22 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable { private void buildKeyDesc(CachedRowSet crs) throws SQLException { keyCols = crs.getKeyColumns(); + ResultSetMetaData resultsetmd = crs.getMetaData(); if (keyCols == null || keyCols.length == 0) { - keyCols = new int[callerColumnCount]; - for (int i = 0; i < keyCols.length; ) { - keyCols[i] = ++i; + ArrayList listKeys = new ArrayList(); + + for (int i = 0; i < callerColumnCount; i++ ) { + if(resultsetmd.getColumnType(i+1) != java.sql.Types.CLOB && + resultsetmd.getColumnType(i+1) != java.sql.Types.STRUCT && + resultsetmd.getColumnType(i+1) != java.sql.Types.SQLXML && + resultsetmd.getColumnType(i+1) != java.sql.Types.BLOB && + resultsetmd.getColumnType(i+1) != java.sql.Types.ARRAY && + resultsetmd.getColumnType(i+1) != java.sql.Types.OTHER ) + listKeys.add(i+1); } + keyCols = new int[listKeys.size()]; + for (int i = 0; i < listKeys.size(); i++ ) + keyCols[i] = listKeys.get(i); } params = new Object[keyCols.length]; } @@ -1359,4 +1424,17 @@ public class CachedRowSetWriter implements TransactionalWriter, Serializable { } } + private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { + // Default state initialization happens here + ois.defaultReadObject(); + // Initialization of Res Bundle happens here . + try { + resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); + } catch(IOException ioe) { + throw new RuntimeException(ioe); + } + + } + + static final long serialVersionUID =-8506030970299413976L; } diff --git a/jdk/src/share/classes/com/sun/rowset/internal/InsertRow.java b/jdk/src/share/classes/com/sun/rowset/internal/InsertRow.java index f8474dc6f24..914d6fb3a51 100644 --- a/jdk/src/share/classes/com/sun/rowset/internal/InsertRow.java +++ b/jdk/src/share/classes/com/sun/rowset/internal/InsertRow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2010, 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 @@ -157,4 +157,23 @@ public class InsertRow extends BaseRow implements Serializable, Cloneable { origVals[idx - 1] = val; markColInserted(idx - 1); } + + /** + * This method re populates the resBundle + * during the deserialization process + * + */ + private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { + // Default state initialization happens here + ois.defaultReadObject(); + // Initialization of transient Res Bundle happens here . + try { + resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); + } catch(IOException ioe) { + throw new RuntimeException(ioe); + } + + } + + static final long serialVersionUID = 1066099658102869344L; } diff --git a/jdk/src/share/classes/com/sun/rowset/internal/SyncResolverImpl.java b/jdk/src/share/classes/com/sun/rowset/internal/SyncResolverImpl.java index 9f23cfb27a8..10573ae4d4d 100644 --- a/jdk/src/share/classes/com/sun/rowset/internal/SyncResolverImpl.java +++ b/jdk/src/share/classes/com/sun/rowset/internal/SyncResolverImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2010, 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 @@ -35,6 +35,7 @@ import javax.sql.rowset.spi.*; import com.sun.rowset.*; import java.io.IOException; +import java.io.ObjectInputStream; /** * There will be two sets of data which will be maintained by the rowset at the @@ -4837,4 +4838,23 @@ public class SyncResolverImpl extends CachedRowSetImpl implements SyncResolver { throws SQLException { throw new UnsupportedOperationException("Operation not yet supported"); } + + /** + * This method re populates the resBundle + * during the deserialization process + * + */ + private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { + // Default state initialization happens here + ois.defaultReadObject(); + // Initialization of transient Res Bundle happens here . + try { + resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); + } catch(IOException ioe) { + throw new RuntimeException(ioe); + } + + } + + static final long serialVersionUID = -3345004441725080251L; } //end class diff --git a/jdk/src/share/classes/com/sun/rowset/internal/WebRowSetXmlReader.java b/jdk/src/share/classes/com/sun/rowset/internal/WebRowSetXmlReader.java index 12a85ea77c9..a0d99e4fbcf 100644 --- a/jdk/src/share/classes/com/sun/rowset/internal/WebRowSetXmlReader.java +++ b/jdk/src/share/classes/com/sun/rowset/internal/WebRowSetXmlReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2010, 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 @@ -216,4 +216,22 @@ public class WebRowSetXmlReader implements XmlReader, Serializable { public void readData(RowSetInternal caller) { } + /** + * This method re populates the resBundle + * during the deserialization process + * + */ + private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { + // Default state initialization happens here + ois.defaultReadObject(); + // Initialization of transient Res Bundle happens here . + try { + resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); + } catch(IOException ioe) { + throw new RuntimeException(ioe); + } + + } + + static final long serialVersionUID = -9127058392819008014L; } diff --git a/jdk/src/share/classes/com/sun/rowset/internal/WebRowSetXmlWriter.java b/jdk/src/share/classes/com/sun/rowset/internal/WebRowSetXmlWriter.java index 6cc6788628a..f0d59647a7f 100644 --- a/jdk/src/share/classes/com/sun/rowset/internal/WebRowSetXmlWriter.java +++ b/jdk/src/share/classes/com/sun/rowset/internal/WebRowSetXmlWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2010, 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 @@ -663,4 +663,23 @@ public class WebRowSetXmlWriter implements XmlWriter, Serializable { return s; } + + /** + * This method re populates the resBundle + * during the deserialization process + * + */ + private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { + // Default state initialization happens here + ois.defaultReadObject(); + // Initialization of transient Res Bundle happens here . + try { + resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); + } catch(IOException ioe) { + throw new RuntimeException(ioe); + } + + } + + static final long serialVersionUID = 7163134986189677641L; } diff --git a/jdk/src/share/classes/com/sun/rowset/providers/RIOptimisticProvider.java b/jdk/src/share/classes/com/sun/rowset/providers/RIOptimisticProvider.java index 545f8938f6c..5fb04167366 100644 --- a/jdk/src/share/classes/com/sun/rowset/providers/RIOptimisticProvider.java +++ b/jdk/src/share/classes/com/sun/rowset/providers/RIOptimisticProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2010, 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 @@ -245,4 +245,18 @@ public final class RIOptimisticProvider extends SyncProvider implements Serializ public String getVendor() { return this.vendorName; } + + private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { + // Default state initialization happens here + ois.defaultReadObject(); + // Initialization of transient Res Bundle happens here . + try { + resBundle = JdbcRowSetResourceBundle.getJdbcRowSetResourceBundle(); + } catch(IOException ioe) { + throw new RuntimeException(ioe); + } + + } + static final long serialVersionUID =-3143367176751761936L; + } diff --git a/jdk/src/share/classes/com/sun/security/ntlm/Client.java b/jdk/src/share/classes/com/sun/security/ntlm/Client.java new file mode 100644 index 00000000000..aed8f37084d --- /dev/null +++ b/jdk/src/share/classes/com/sun/security/ntlm/Client.java @@ -0,0 +1,212 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 com.sun.security.ntlm; + +import java.math.BigInteger; +import java.util.Arrays; +import java.util.Date; +import java.util.Locale; + +/** + * The NTLM client. Not multi-thread enabled.

+ * Example: + *

+ * Client client = new Client(null, "host", "dummy",
+ *       "REALM", "t0pSeCr3t".toCharArray());
+ * byte[] type1 = client.type1();
+ * // Send type1 to server and receive response as type2
+ * byte[] type3 = client.type3(type2, nonce);
+ * // Send type3 to server
+ * 
+ */ +public final class Client extends NTLM { + final private String hostname; + final private String username; + + private String domain; // might be updated by Type 2 msg + private byte[] pw1, pw2; + + /** + * Creates an NTLM Client instance. + * @param version the NTLM version to use, which can be: + *
    + *
  • LM/NTLM: Original NTLM v1 + *
  • LM: Original NTLM v1, LM only + *
  • NTLM: Original NTLM v1, NTLM only + *
  • NTLM2: NTLM v1 with Client Challenge + *
  • LMv2/NTLMv2: NTLM v2 + *
  • LMv2: NTLM v2, LM only + *
  • NTLMv2: NTLM v2, NTLM only + *
+ * If null, "LMv2/NTLMv2" will be used. + * @param hostname hostname of the client, can be null + * @param username username to be authenticated, must not be null + * @param domain domain of {@code username}, can be null + * @param password password for {@code username}, must not be not null. + * This method does not make any modification to this parameter, it neither + * needs to access the content of this parameter after this method call, + * so you are free to modify or nullify this parameter after this call. + * @throws NullPointerException if {@code username} or {@code password} is null. + * @throws NTLMException if {@code version} is illegal + */ + public Client(String version, String hostname, String username, + String domain, char[] password) throws NTLMException { + super(version); + if ((username == null || password == null)) { + throw new NullPointerException("username/password cannot be null"); + } + this.hostname = hostname; + this.username = username; + this.domain = domain; + this.pw1 = getP1(password); + this.pw2 = getP2(password); + debug("NTLM Client: (h,u,t,version(v)) = (%s,%s,%s,%s(%s))\n", + hostname, username, domain, version, v.toString()); + } + + /** + * Generates the Type 1 message + * @return the message generated + */ + public byte[] type1() { + Writer p = new Writer(1, 32); + int flags = 0x8203; + if (hostname != null) { + flags |= 0x2000; + } + if (domain != null) { + flags |= 0x1000; + } + if (v != Version.NTLM) { + flags |= 0x80000; + } + p.writeInt(12, flags); + p.writeSecurityBuffer(24, hostname, false); + p.writeSecurityBuffer(16, domain, false); + debug("NTLM Client: Type 1 created\n"); + debug(p.getBytes()); + return p.getBytes(); + } + + /** + * Generates the Type 3 message + * @param type2 the responding Type 2 message from server, must not be null + * @param nonce random 8-byte array to be used in message generation, + * must not be null except for original NTLM v1 + * @return the message generated + * @throws NullPointerException if {@code type2} or {@code nonce} is null + * for NTLM v1. + * @throws NTLMException if the incoming message is invalid + */ + public byte[] type3(byte[] type2, byte[] nonce) throws NTLMException { + if (type2 == null || (v != Version.NTLM && nonce == null)) { + throw new NullPointerException("type2 and nonce cannot be null"); + } + debug("NTLM Client: Type 2 received\n"); + debug(type2); + Reader r = new Reader(type2); + byte[] challenge = r.readBytes(24, 8); + int inputFlags = r.readInt(20); + boolean unicode = (inputFlags & 1) == 1; + String domainFromServer = r.readSecurityBuffer(12, unicode); + if (domainFromServer != null) { + domain = domainFromServer; + } + if (domain == null) { + throw new NTLMException(NTLMException.NO_DOMAIN_INFO, + "No domain info"); + } + + int flags = 0x88200 | (inputFlags & 3); + Writer p = new Writer(3, 64); + byte[] lm = null, ntlm = null; + + p.writeSecurityBuffer(28, domain, unicode); + p.writeSecurityBuffer(36, username, unicode); + p.writeSecurityBuffer(44, hostname, unicode); + + if (v == Version.NTLM) { + byte[] lmhash = calcLMHash(pw1); + byte[] nthash = calcNTHash(pw2); + if (writeLM) lm = calcResponse (lmhash, challenge); + if (writeNTLM) ntlm = calcResponse (nthash, challenge); + } else if (v == Version.NTLM2) { + byte[] nthash = calcNTHash(pw2); + lm = ntlm2LM(nonce); + ntlm = ntlm2NTLM(nthash, nonce, challenge); + } else { + byte[] nthash = calcNTHash(pw2); + if (writeLM) lm = calcV2(nthash, + username.toUpperCase(Locale.US)+domain, nonce, challenge); + if (writeNTLM) { + byte[] alist = type2.length > 48 ? + r.readSecurityBuffer(40) : new byte[0]; + byte[] blob = new byte[32+alist.length]; + System.arraycopy(new byte[]{1,1,0,0,0,0,0,0}, 0, blob, 0, 8); + // TS + byte[] time = BigInteger.valueOf(new Date().getTime()) + .add(new BigInteger("11644473600000")) + .multiply(BigInteger.valueOf(10000)) + .toByteArray(); + for (int i=0; iSystem.out.printf(format, args) is + * called. This method is designed to be overridden by child classes to + * match their own debugging/logging mechanisms. + * @param format a format string + * @param args the arguments referenced by format + * @see java.io.PrintStream#printf(java.lang.String, java.lang.Object[]) + */ + public void debug(String format, Object... args) { + if (DEBUG) { + System.out.printf(format, args); + } + } + + /** + * Prints out the content of a byte array, called in various places inside + * the NTLM implementation for debugging/logging purposes. When the system + * property "ntlm.debug" is set, the hexdump of the array is printed into + * System.out. This method is designed to be overridden by child classes to + * match their own debugging/logging mechanisms. + * @param bytes the byte array to print out + */ + public void debug(byte[] bytes) { + if (DEBUG) { + try { + new sun.misc.HexDumpEncoder().encodeBuffer(bytes, System.out); + } catch (IOException ioe) { + // Impossible + } + } + } + + /** + * Reading an NTLM packet + */ + static class Reader { + + private final byte[] internal; + + Reader(byte[] data) { + internal = data; + } + + int readInt(int offset) throws NTLMException { + try { + return internal[offset] & 0xff + + (internal[offset+1] & 0xff << 8) + + (internal[offset+2] & 0xff << 16) + + (internal[offset+3] & 0xff << 24); + } catch (ArrayIndexOutOfBoundsException ex) { + throw new NTLMException(NTLMException.PACKET_READ_ERROR, + "Input message incorrect size"); + } + } + + int readShort(int offset) throws NTLMException { + try { + return internal[offset] & 0xff + + (internal[offset+1] & 0xff << 8); + } catch (ArrayIndexOutOfBoundsException ex) { + throw new NTLMException(NTLMException.PACKET_READ_ERROR, + "Input message incorrect size"); + } + } + + byte[] readBytes(int offset, int len) throws NTLMException { + try { + return Arrays.copyOfRange(internal, offset, offset + len); + } catch (ArrayIndexOutOfBoundsException ex) { + throw new NTLMException(NTLMException.PACKET_READ_ERROR, + "Input message incorrect size"); + } + } + + byte[] readSecurityBuffer(int offset) throws NTLMException { + int pos = readInt(offset+4); + if (pos == 0) return null; + try { + return Arrays.copyOfRange( + internal, pos, pos + readShort(offset)); + } catch (ArrayIndexOutOfBoundsException ex) { + throw new NTLMException(NTLMException.PACKET_READ_ERROR, + "Input message incorrect size"); + } + } + + String readSecurityBuffer(int offset, boolean unicode) + throws NTLMException { + byte[] raw = readSecurityBuffer(offset); + try { + return raw == null ? null : new String( + raw, unicode ? "UnicodeLittleUnmarked" : "ISO8859_1"); + } catch (UnsupportedEncodingException ex) { + throw new NTLMException(NTLMException.PACKET_READ_ERROR, + "Invalid input encoding"); + } + } + } + + /** + * Writing an NTLM packet + */ + static class Writer { + + private byte[] internal; // buffer + private int current; // current written content interface buffer + + /** + * Starts writing a NTLM packet + * @param type NEGOTIATE || CHALLENGE || AUTHENTICATE + * @param len the base length, without security buffers + */ + Writer(int type, int len) { + assert len < 256; + internal = new byte[256]; + current = len; + System.arraycopy ( + new byte[] {'N','T','L','M','S','S','P',0,(byte)type}, + 0, internal, 0, 9); + } + + void writeShort(int offset, int number) { + internal[offset] = (byte)(number); + internal[offset+1] = (byte)(number >> 8); + } + + void writeInt(int offset, int number) { + internal[offset] = (byte)(number); + internal[offset+1] = (byte)(number >> 8); + internal[offset+2] = (byte)(number >> 16); + internal[offset+3] = (byte)(number >> 24); + } + + void writeBytes(int offset, byte[] data) { + System.arraycopy(data, 0, internal, offset, data.length); + } + + void writeSecurityBuffer(int offset, byte[] data) { + if (data == null) { + writeShort(offset+4, current); + } else { + int len = data.length; + if (current + len > internal.length) { + internal = Arrays.copyOf(internal, current + len + 256); + } + writeShort(offset, len); + writeShort(offset+2, len); + writeShort(offset+4, current); + System.arraycopy(data, 0, internal, current, len); + current += len; + } + } + + void writeSecurityBuffer(int offset, String str, boolean unicode) { + try { + writeSecurityBuffer(offset, str == null ? null : str.getBytes( + unicode ? "UnicodeLittleUnmarked" : "ISO8859_1")); + } catch (UnsupportedEncodingException ex) { + assert false; + } + } + + byte[] getBytes() { + return Arrays.copyOf(internal, current); + } + } + + // LM/NTLM + + /* Convert a 7 byte array to an 8 byte array (for a des key with parity) + * input starts at offset off + */ + byte[] makeDesKey (byte[] input, int off) { + int[] in = new int [input.length]; + for (int i=0; i> 1)); + out[2] = (byte)(((in[off+1] << 6) & 0xFF) | (in[off+2] >> 2)); + out[3] = (byte)(((in[off+2] << 5) & 0xFF) | (in[off+3] >> 3)); + out[4] = (byte)(((in[off+3] << 4) & 0xFF) | (in[off+4] >> 4)); + out[5] = (byte)(((in[off+4] << 3) & 0xFF) | (in[off+5] >> 5)); + out[6] = (byte)(((in[off+5] << 2) & 0xFF) | (in[off+6] >> 6)); + out[7] = (byte)((in[off+6] << 1) & 0xFF); + return out; + } + + byte[] calcLMHash (byte[] pwb) { + byte[] magic = {0x4b, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25}; + byte[] pwb1 = new byte [14]; + int len = pwb.length; + if (len > 14) + len = 14; + System.arraycopy (pwb, 0, pwb1, 0, len); /* Zero padded */ + + try { + DESKeySpec dks1 = new DESKeySpec (makeDesKey (pwb1, 0)); + DESKeySpec dks2 = new DESKeySpec (makeDesKey (pwb1, 7)); + + SecretKey key1 = fac.generateSecret (dks1); + SecretKey key2 = fac.generateSecret (dks2); + cipher.init (Cipher.ENCRYPT_MODE, key1); + byte[] out1 = cipher.doFinal (magic, 0, 8); + cipher.init (Cipher.ENCRYPT_MODE, key2); + byte[] out2 = cipher.doFinal (magic, 0, 8); + byte[] result = new byte [21]; + System.arraycopy (out1, 0, result, 0, 8); + System.arraycopy (out2, 0, result, 8, 8); + return result; + } catch (InvalidKeyException ive) { + // Will not happen, all key material are 8 bytes + assert false; + } catch (InvalidKeySpecException ikse) { + // Will not happen, we only feed DESKeySpec to DES factory + assert false; + } catch (IllegalBlockSizeException ibse) { + // Will not happen, we encrypt 8 bytes + assert false; + } catch (BadPaddingException bpe) { + // Will not happen, this is encryption + assert false; + } + return null; // will not happen, we returned already + } + + byte[] calcNTHash (byte[] pw) { + byte[] out = md4.digest (pw); + byte[] result = new byte [21]; + System.arraycopy (out, 0, result, 0, 16); + return result; + } + + /* key is a 21 byte array. Split it into 3 7 byte chunks, + * Convert each to 8 byte DES keys, encrypt the text arg with + * each key and return the three results in a sequential [] + */ + byte[] calcResponse (byte[] key, byte[] text) { + try { + assert key.length == 21; + DESKeySpec dks1 = new DESKeySpec(makeDesKey(key, 0)); + DESKeySpec dks2 = new DESKeySpec(makeDesKey(key, 7)); + DESKeySpec dks3 = new DESKeySpec(makeDesKey(key, 14)); + SecretKey key1 = fac.generateSecret(dks1); + SecretKey key2 = fac.generateSecret(dks2); + SecretKey key3 = fac.generateSecret(dks3); + cipher.init(Cipher.ENCRYPT_MODE, key1); + byte[] out1 = cipher.doFinal(text, 0, 8); + cipher.init(Cipher.ENCRYPT_MODE, key2); + byte[] out2 = cipher.doFinal(text, 0, 8); + cipher.init(Cipher.ENCRYPT_MODE, key3); + byte[] out3 = cipher.doFinal(text, 0, 8); + byte[] result = new byte[24]; + System.arraycopy(out1, 0, result, 0, 8); + System.arraycopy(out2, 0, result, 8, 8); + System.arraycopy(out3, 0, result, 16, 8); + return result; + } catch (IllegalBlockSizeException ex) { // None will happen + assert false; + } catch (BadPaddingException ex) { + assert false; + } catch (InvalidKeySpecException ex) { + assert false; + } catch (InvalidKeyException ex) { + assert false; + } + return null; + } + + // LMv2/NTLMv2 + + byte[] hmacMD5(byte[] key, byte[] text) { + try { + SecretKeySpec skey = + new SecretKeySpec(Arrays.copyOf(key, 16), "HmacMD5"); + hmac.init(skey); + return hmac.doFinal(text); + } catch (InvalidKeyException ex) { + assert false; + } catch (RuntimeException e) { + assert false; + } + return null; + } + + byte[] calcV2(byte[] nthash, String text, byte[] blob, byte[] challenge) { + try { + byte[] ntlmv2hash = hmacMD5(nthash, + text.getBytes("UnicodeLittleUnmarked")); + byte[] cn = new byte[blob.length+8]; + System.arraycopy(challenge, 0, cn, 0, 8); + System.arraycopy(blob, 0, cn, 8, blob.length); + byte[] result = new byte[16+blob.length]; + System.arraycopy(hmacMD5(ntlmv2hash, cn), 0, result, 0, 16); + System.arraycopy(blob, 0, result, 16, blob.length); + return result; + } catch (UnsupportedEncodingException ex) { + assert false; + } + return null; + } + + // NTLM2 LM/NTLM + + static byte[] ntlm2LM(byte[] nonce) { + return Arrays.copyOf(nonce, 24); + } + + byte[] ntlm2NTLM(byte[] ntlmHash, byte[] nonce, byte[] challenge) { + byte[] b = Arrays.copyOf(challenge, 16); + System.arraycopy(nonce, 0, b, 8, 8); + byte[] sesshash = Arrays.copyOf(md5.digest(b), 8); + return calcResponse(ntlmHash, sesshash); + } + + // Password in ASCII and UNICODE + + static byte[] getP1(char[] password) { + try { + return new String(password).toUpperCase().getBytes("ISO8859_1"); + } catch (UnsupportedEncodingException ex) { + return null; + } + } + + static byte[] getP2(char[] password) { + try { + return new String(password).getBytes("UnicodeLittleUnmarked"); + } catch (UnsupportedEncodingException ex) { + return null; + } + } +} diff --git a/jdk/src/share/classes/com/sun/security/ntlm/NTLMException.java b/jdk/src/share/classes/com/sun/security/ntlm/NTLMException.java new file mode 100644 index 00000000000..273825de8b7 --- /dev/null +++ b/jdk/src/share/classes/com/sun/security/ntlm/NTLMException.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 com.sun.security.ntlm; + +import java.security.GeneralSecurityException; + +/** + * An NTLM-related Exception + */ +public final class NTLMException extends GeneralSecurityException { + + /** + * If the incoming packet is invalid. + */ + public final static int PACKET_READ_ERROR = 1; + + /** + * If the client cannot get a domain value from the server and the + * caller has not provided one. + */ + public final static int NO_DOMAIN_INFO = 2; + + /** + * If the domain provided by the client does not match the one received + * from server. + */ + //public final static int DOMAIN_UNMATCH = 3; + + /** + * If the client name is not found on server's user database. + */ + public final static int USER_UNKNOWN = 3; + + /** + * If authentication fails. + */ + public final static int AUTH_FAILED = 4; + + /** + * If an illegal version string is provided. + */ + public final static int BAD_VERSION = 5; + + private int errorCode; + + /** + * Constructs an NTLMException object. + * @param errorCode the error code, which can be retrieved by + * the {@link #errorCode() } method. + * @param msg the string message, which can be retrived by + * the {@link Exception#getMessage() } method. + */ + public NTLMException(int errorCode, String msg) { + super(msg); + this.errorCode = errorCode; + } + + /** + * Returns the error code associated with this NTLMException. + * @return the error code + */ + public int errorCode() { + return errorCode; + } +} diff --git a/jdk/src/share/classes/com/sun/security/ntlm/Server.java b/jdk/src/share/classes/com/sun/security/ntlm/Server.java new file mode 100644 index 00000000000..1871375a4b7 --- /dev/null +++ b/jdk/src/share/classes/com/sun/security/ntlm/Server.java @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 com.sun.security.ntlm; + +import java.util.Arrays; +import java.util.Locale; + +/** + * The NTLM server, not multi-thread enabled.

+ * Example: + *

+ * Server server = new Server(null, "REALM") {
+ *     public char[] getPassword(String ntdomain, String username) {
+ *         switch (username) {
+ *             case "dummy": return "t0pSeCr3t".toCharArray();
+ *             case "guest": return "".toCharArray();
+ *             default: return null;
+ *         }
+ *     }
+ * };
+ * // Receive client request as type1
+ * byte[] type2 = server.type2(type1, nonce);
+ * // Send type2 to client and receive type3
+ * verify(type3, nonce);
+ * 
+ */ +public abstract class Server extends NTLM { + final private String domain; + final private boolean allVersion; + /** + * Creates a Server instance. + * @param version the NTLM version to use, which can be: + *
    + *
  • NTLM: Original NTLM v1 + *
  • NTLM2: NTLM v1 with Client Challenge + *
  • NTLMv2: NTLM v2 + *
+ * If null, all versions will be supported. Please note that unless NTLM2 + * is selected, authentication succeeds if one of LM (or LMv2) or + * NTLM (or NTLMv2) is verified. + * @param domain the domain, must not be null + * @throws NullPointerException if {@code domain} is null. + */ + public Server(String version, String domain) throws NTLMException { + super(version); + if (domain == null) { + throw new NullPointerException("domain cannot be null"); + } + this.allVersion = (version == null); + this.domain = domain; + debug("NTLM Server: (t,version) = (%s,%s)\n", domain, version); + } + + /** + * Generates the Type 2 message + * @param type1 the Type1 message received, must not be null + * @param nonce the random 8-byte array to be used in message generation, + * must not be null + * @return the message generated + * @throws NullPointerException if type1 or nonce is null + * @throws NTLMException if the incoming message is invalid + */ + public byte[] type2(byte[] type1, byte[] nonce) { + if (nonce == null) { + throw new NullPointerException("nonce cannot be null"); + } + debug("NTLM Server: Type 1 received\n"); + if (type1 != null) debug(type1); + Writer p = new Writer(2, 32); + int flags = 0x80205; + p.writeSecurityBuffer(12, domain, true); + p.writeInt(20, flags); + p.writeBytes(24, nonce); + debug("NTLM Server: Type 2 created\n"); + debug(p.getBytes()); + return p.getBytes(); + } + + /** + * Verifies the Type3 message received from client and returns + * various negotiated information. + * @param type3 the incoming Type3 message from client, must not be null + * @param nonce the same nonce provided in {@link #type2}, must not be null + * @return username and hostname of the client in a byte array + * @throws NullPointerException if {@code type3} or {@code nonce} is null + * @throws NTLMException if the incoming message is invalid + */ + public String[] verify(byte[] type3, byte[] nonce) + throws NTLMException { + if (type3 == null || nonce == null) { + throw new NullPointerException("type1 or nonce cannot be null"); + } + debug("NTLM Server: Type 3 received\n"); + if (type3 != null) debug(type3); + Reader r = new Reader(type3); + String username = r.readSecurityBuffer(36, true); + String hostname = r.readSecurityBuffer(44, true); + String incomingDomain = r.readSecurityBuffer(28, true); + /*if (incomingDomain != null && !incomingDomain.equals(domain)) { + throw new NTLMException(NTLMException.DOMAIN_UNMATCH, + "Wrong domain: " + incomingDomain + + " vs " + domain); // Needed? + }*/ + boolean verified = false; + char[] password = getPassword(domain, username); + if (password == null) { + throw new NTLMException(NTLMException.USER_UNKNOWN, + "Unknown user"); + } + byte[] incomingLM = r.readSecurityBuffer(12); + byte[] incomingNTLM = r.readSecurityBuffer(20); + + if (!verified && (allVersion || v == Version.NTLM)) { + if (incomingLM.length > 0) { + byte[] pw1 = getP1(password); + byte[] lmhash = calcLMHash(pw1); + byte[] lmresponse = calcResponse (lmhash, nonce); + if (Arrays.equals(lmresponse, incomingLM)) { + verified = true; + } + } + if (incomingNTLM.length > 0) { + byte[] pw2 = getP2(password); + byte[] nthash = calcNTHash(pw2); + byte[] ntresponse = calcResponse (nthash, nonce); + if (Arrays.equals(ntresponse, incomingNTLM)) { + verified = true; + } + } + debug("NTLM Server: verify using NTLM: " + verified + "\n"); + } + if (!verified && (allVersion || v == Version.NTLM2)) { + byte[] pw2 = getP2(password); + byte[] nthash = calcNTHash(pw2); + byte[] clientNonce = Arrays.copyOf(incomingLM, 8); + byte[] ntlmresponse = ntlm2NTLM(nthash, clientNonce, nonce); + if (Arrays.equals(incomingNTLM, ntlmresponse)) { + verified = true; + } + debug("NTLM Server: verify using NTLM2: " + verified + "\n"); + } + if (!verified && (allVersion || v == Version.NTLMv2)) { + byte[] pw2 = getP2(password); + byte[] nthash = calcNTHash(pw2); + if (incomingLM.length > 0) { + byte[] clientNonce = Arrays.copyOfRange( + incomingLM, 16, incomingLM.length); + byte[] lmresponse = calcV2(nthash, + username.toUpperCase(Locale.US)+incomingDomain, + clientNonce, nonce); + if (Arrays.equals(lmresponse, incomingLM)) { + verified = true; + } + } + if (incomingNTLM.length > 0) { + byte[] clientBlob = Arrays.copyOfRange( + incomingNTLM, 16, incomingNTLM.length); + byte[] ntlmresponse = calcV2(nthash, + username.toUpperCase(Locale.US)+incomingDomain, + clientBlob, nonce); + if (Arrays.equals(ntlmresponse, incomingNTLM)) { + verified = true; + } + } + debug("NTLM Server: verify using NTLMv2: " + verified + "\n"); + } + if (!verified) { + throw new NTLMException(NTLMException.AUTH_FAILED, + "None of LM and NTLM verified"); + } + return new String[] {username, hostname}; + } + + /** + * Retrieves the password for a given user. This method should be + * overridden in a concrete class. + * @param domain can be null + * @param username must not be null + * @return the password for the user, or null if unknown + */ + public abstract char[] getPassword(String domain, String username); +} diff --git a/jdk/src/share/classes/com/sun/security/ntlm/Version.java b/jdk/src/share/classes/com/sun/security/ntlm/Version.java new file mode 100644 index 00000000000..bd4d0c4a07d --- /dev/null +++ b/jdk/src/share/classes/com/sun/security/ntlm/Version.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 com.sun.security.ntlm; + +enum Version { + NTLM, NTLM2, NTLMv2 +} diff --git a/jdk/src/share/classes/com/sun/security/sasl/Provider.java b/jdk/src/share/classes/com/sun/security/sasl/Provider.java index 8e43d59f357..8b9c00c8800 100644 --- a/jdk/src/share/classes/com/sun/security/sasl/Provider.java +++ b/jdk/src/share/classes/com/sun/security/sasl/Provider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2010, 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 @@ -35,10 +35,12 @@ import java.security.PrivilegedAction; * - CRAM-MD5 * - DIGEST-MD5 * - GSSAPI/Kerberos v5 + * - NTLM * And server support for * - CRAM-MD5 * - DIGEST-MD5 * - GSSAPI/Kerberos v5 + * - NTLM */ public final class Provider extends java.security.Provider { @@ -47,8 +49,8 @@ public final class Provider extends java.security.Provider { private static final String info = "Sun SASL provider" + "(implements client mechanisms for: " + - "DIGEST-MD5, GSSAPI, EXTERNAL, PLAIN, CRAM-MD5;" + - " server mechanisms for: DIGEST-MD5, GSSAPI, CRAM-MD5)"; + "DIGEST-MD5, GSSAPI, EXTERNAL, PLAIN, CRAM-MD5, NTLM;" + + " server mechanisms for: DIGEST-MD5, GSSAPI, CRAM-MD5, NTLM)"; public Provider() { super("SunSASL", 1.7d, info); @@ -58,6 +60,8 @@ public final class Provider extends java.security.Provider { // Client mechanisms put("SaslClientFactory.DIGEST-MD5", "com.sun.security.sasl.digest.FactoryImpl"); + put("SaslClientFactory.NTLM", + "com.sun.security.sasl.ntlm.FactoryImpl"); put("SaslClientFactory.GSSAPI", "com.sun.security.sasl.gsskerb.FactoryImpl"); @@ -75,6 +79,8 @@ public final class Provider extends java.security.Provider { "com.sun.security.sasl.gsskerb.FactoryImpl"); put("SaslServerFactory.DIGEST-MD5", "com.sun.security.sasl.digest.FactoryImpl"); + put("SaslServerFactory.NTLM", + "com.sun.security.sasl.ntlm.FactoryImpl"); return null; } }); diff --git a/jdk/src/share/classes/com/sun/security/sasl/ntlm/FactoryImpl.java b/jdk/src/share/classes/com/sun/security/sasl/ntlm/FactoryImpl.java new file mode 100644 index 00000000000..6ee1b66f968 --- /dev/null +++ b/jdk/src/share/classes/com/sun/security/sasl/ntlm/FactoryImpl.java @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 com.sun.security.sasl.ntlm; + +import java.util.Map; + +import javax.security.sasl.*; +import javax.security.auth.callback.CallbackHandler; + +import com.sun.security.sasl.util.PolicyUtils; + + +/** + * Client and server factory for NTLM SASL client/server mechanisms. + * See NTLMClient and NTLMServer for input requirements. + * + * @since 1.7 + */ + +public final class FactoryImpl implements SaslClientFactory, +SaslServerFactory{ + + private static final String myMechs[] = { "NTLM" }; + private static final int mechPolicies[] = { + PolicyUtils.NOPLAINTEXT|PolicyUtils.NOANONYMOUS + }; + + /** + * Empty constructor. + */ + public FactoryImpl() { + } + + /** + * Returns a new instance of the NTLM SASL client mechanism. + * Argument checks are performed in SaslClient's constructor. + * @returns a new SaslClient ; otherwise null if unsuccessful. + * @throws SaslException If there is an error creating the NTLM + * SASL client. + */ + public SaslClient createSaslClient(String[] mechs, + String authorizationId, String protocol, String serverName, + Map props, CallbackHandler cbh) + throws SaslException { + + for (int i=0; i props, CallbackHandler cbh) + throws SaslException { + + if (mech.equals("NTLM") && + PolicyUtils.checkPolicy(mechPolicies[0], props)) { + if (props != null) { + String qop = (String)props.get(Sasl.QOP); + if (qop != null && !qop.equals("auth")) { + throw new SaslException("NTLM only support auth"); + } + } + if (cbh == null) { + throw new SaslException( + "Callback handler with support for AuthorizeCallback, "+ + "RealmCallback, NameCallback, and PasswordCallback " + + "required"); + } + return new NTLMServer(mech, protocol, serverName, props, cbh); + } + return null; + } + + /** + * Returns the authentication mechanisms that this factory can produce. + * + * @returns String[] {"NTLM"} if policies in env match those of this + * factory. + */ + public String[] getMechanismNames(Map env) { + return PolicyUtils.filterMechs(myMechs, mechPolicies, env); + } +} diff --git a/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMClient.java b/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMClient.java new file mode 100644 index 00000000000..e5746675874 --- /dev/null +++ b/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMClient.java @@ -0,0 +1,231 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 com.sun.security.sasl.ntlm; + +import com.sun.security.ntlm.Client; +import com.sun.security.ntlm.NTLMException; +import java.io.IOException; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.Map; +import java.util.Random; +import javax.security.auth.callback.Callback; + + +import javax.security.sasl.*; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.callback.NameCallback; +import javax.security.auth.callback.PasswordCallback; +import javax.security.auth.callback.UnsupportedCallbackException; + +/** + * Required callbacks: + * - RealmCallback + * handle can provide domain info for authentication, optional + * - NameCallback + * handler must enter username to use for authentication + * - PasswordCallback + * handler must enter password for username to use for authentication + * + * Environment properties that affect behavior of implementation: + * + * javax.security.sasl.qop + * String, quality of protection; only "auth" is accepted, default "auth" + * + * com.sun.security.sasl.ntlm.version + * String, name a specific version to use; can be: + * LM/NTLM: Original NTLM v1 + * LM: Original NTLM v1, LM only + * NTLM: Original NTLM v1, NTLM only + * NTLM2: NTLM v1 with Client Challenge + * LMv2/NTLMv2: NTLM v2 + * LMv2: NTLM v2, LM only + * NTLMv2: NTLM v2, NTLM only + * If not specified, use system property "ntlm.version". If + * still not specified, use default value "LMv2/NTLMv2". + * + * com.sun.security.sasl.ntlm.random + * java.util.Random, the nonce source to be used in NTLM v2 or NTLM v1 with + * Client Challenge. Default null, an internal java.util.Random object + * will be used + * + * Negotiated Properties: + * + * javax.security.sasl.qop + * Always "auth" + * + * com.sun.security.sasl.html.domain + * The domain for the user, provided by the server + * + * @see RFC 2222 + * - Simple Authentication and Security Layer (SASL) + * + */ +final class NTLMClient implements SaslClient { + + private static final String NTLM_VERSION = + "com.sun.security.sasl.ntlm.version"; + private static final String NTLM_RANDOM = + "com.sun.security.sasl.ntlm.random"; + private final static String NTLM_DOMAIN = + "com.sun.security.sasl.ntlm.domain"; + private final static String NTLM_HOSTNAME = + "com.sun.security.sasl.ntlm.hostname"; + + private final Client client; + private final String mech; + private final Random random; + + private int step = 0; // 0-start,1-nego,2-auth,3-done + + /** + * @param mech non-null + * @param authorizationId can be null or empty and ignored + * @param protocol non-null for Sasl, useless for NTLM + * @param serverName non-null for Sasl, but can be null for NTLM + * @param props can be null + * @param cbh can be null for Sasl, but will throw NPE for NTLM + * @throws SaslException + */ + NTLMClient(String mech, String authzid, String protocol, String serverName, + Map props, CallbackHandler cbh) throws SaslException { + + this.mech = mech; + String version = null; + Random rtmp = null; + String hostname = null; + + if (props != null) { + String qop = (String)props.get(Sasl.QOP); + if (qop != null && !qop.equals("auth")) { + throw new SaslException("NTLM only support auth"); + } + version = (String)props.get(NTLM_VERSION); + rtmp = (Random)props.get(NTLM_RANDOM); + hostname = (String)props.get(NTLM_HOSTNAME); + } + this.random = rtmp != null ? rtmp : new Random(); + + if (version == null) { + version = System.getProperty("ntlm.version"); + } + + RealmCallback dcb = (serverName != null && !serverName.isEmpty())? + new RealmCallback("Realm: ", serverName) : + new RealmCallback("Realm: "); + NameCallback ncb = (authzid != null && !authzid.isEmpty()) ? + new NameCallback("User name: ", authzid) : + new NameCallback("User name: "); + PasswordCallback pcb = + new PasswordCallback("Password: ", false); + + try { + cbh.handle(new Callback[] {dcb, ncb, pcb}); + } catch (UnsupportedCallbackException e) { + throw new SaslException("NTLM: Cannot perform callback to " + + "acquire realm, username or password", e); + } catch (IOException e) { + throw new SaslException( + "NTLM: Error acquiring realm, username or password", e); + } + + if (hostname == null) { + try { + hostname = InetAddress.getLocalHost().getCanonicalHostName(); + } catch (UnknownHostException e) { + hostname = "localhost"; + } + } + try { + client = new Client(version, hostname, + ncb.getName(), + dcb.getText(), + pcb.getPassword()); + } catch (NTLMException ne) { + throw new SaslException( + "NTLM: Invalid version string: " + version, ne); + } + } + + @Override + public String getMechanismName() { + return mech; + } + + @Override + public boolean isComplete() { + return step >= 2; + } + + @Override + public byte[] unwrap(byte[] incoming, int offset, int len) + throws SaslException { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public byte[] wrap(byte[] outgoing, int offset, int len) + throws SaslException { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public Object getNegotiatedProperty(String propName) { + if (propName.equals(Sasl.QOP)) { + return "auth"; + } else if (propName.equals(NTLM_DOMAIN)) { + return client.getDomain(); + } else { + return null; + } + } + + @Override + public void dispose() throws SaslException { + client.dispose(); + } + + @Override + public boolean hasInitialResponse() { + return true; + } + + @Override + public byte[] evaluateChallenge(byte[] challenge) throws SaslException { + step++; + if (step == 1) { + return client.type1(); + } else { + try { + byte[] nonce = new byte[8]; + random.nextBytes(nonce); + return client.type3(challenge, nonce); + } catch (NTLMException ex) { + throw new SaslException("Type3 creation failed", ex); + } + } + } +} diff --git a/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMServer.java b/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMServer.java new file mode 100644 index 00000000000..7adbeb7d37e --- /dev/null +++ b/jdk/src/share/classes/com/sun/security/sasl/ntlm/NTLMServer.java @@ -0,0 +1,226 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 com.sun.security.sasl.ntlm; + +import com.sun.security.ntlm.NTLMException; +import com.sun.security.ntlm.Server; +import java.io.IOException; +import java.security.GeneralSecurityException; +import java.util.Map; +import java.util.Random; +import javax.security.auth.callback.Callback; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.callback.NameCallback; +import javax.security.auth.callback.PasswordCallback; +import javax.security.auth.callback.UnsupportedCallbackException; +import javax.security.sasl.*; + +/** + * Required callbacks: + * - RealmCallback + * used as key by handler to fetch password, optional + * - NameCallback + * used as key by handler to fetch password + * - PasswordCallback + * handler must enter password for username/realm supplied + * + * Environment properties that affect the implementation: + * + * javax.security.sasl.qop + * String, quality of protection; only "auth" is accepted, default "auth" + * + * com.sun.security.sasl.ntlm.version + * String, name a specific version to accept: + * LM/NTLM: Original NTLM v1 + * LM: Original NTLM v1, LM only + * NTLM: Original NTLM v1, NTLM only + * NTLM2: NTLM v1 with Client Challenge + * LMv2/NTLMv2: NTLM v2 + * LMv2: NTLM v2, LM only + * NTLMv2: NTLM v2, NTLM only + * If not specified, use system property "ntlm.version". If also + * not specfied, all versions are accepted. + * + * com.sun.security.sasl.ntlm.domain + * String, the domain of the server, default is server name (fqdn parameter) + * + * com.sun.security.sasl.ntlm.random + * java.util.Random, the nonce source. Default null, an internal + * java.util.Random object will be used + * + * Negotiated Properties: + * + * javax.security.sasl.qop + * Always "auth" + * + * com.sun.security.sasl.ntlm.hostname + * The hostname for the user, provided by the client + * + */ + +final class NTLMServer implements SaslServer { + + private final static String NTLM_VERSION = + "com.sun.security.sasl.ntlm.version"; + private final static String NTLM_DOMAIN = + "com.sun.security.sasl.ntlm.domain"; + private final static String NTLM_HOSTNAME = + "com.sun.security.sasl.ntlm.hostname"; + private static final String NTLM_RANDOM = + "com.sun.security.sasl.ntlm.random"; + + private final Random random; + private final Server server; + private byte[] nonce; + private int step = 0; + private String authzId; + private final String mech; + private String hostname; + + /** + * @param mech not null + * @param protocol not null for Sasl, ignored in NTLM + * @param serverName not null for Sasl, can be null in NTLM. If non-null, + * might be used as domain if not provided in props + * @param props can be null + * @param cbh can be null for Sasl, but will throw NPE in auth for NTLM + * @throws SaslException + */ + NTLMServer(String mech, String protocol, String serverName, + Map props, final CallbackHandler cbh) throws SaslException { + + this.mech = mech; + String version = null; + String domain = null; + Random rtmp = null; + + if (props != null) { + domain = (String) props.get(NTLM_DOMAIN); + version = (String)props.get(NTLM_VERSION); + rtmp = (Random)props.get(NTLM_RANDOM); + } + random = rtmp != null ? rtmp : new Random(); + + if (version == null) { + version = System.getProperty("ntlm.version"); + } + if (domain == null) { + domain = serverName; + } + if (domain == null) { + throw new NullPointerException("Domain must be provided as" + + " the serverName argument or in props"); + } + + try { + server = new Server(version, domain) { + public char[] getPassword(String ntdomain, String username) { + try { + RealmCallback rcb = new RealmCallback( + "Domain: ", ntdomain); + NameCallback ncb = new NameCallback( + "Name: ", username); + PasswordCallback pcb = new PasswordCallback( + "Password: ", false); + cbh.handle(new Callback[] { rcb, ncb, pcb }); + char[] passwd = pcb.getPassword(); + pcb.clearPassword(); + return passwd; + } catch (IOException ioe) { + return null; + } catch (UnsupportedCallbackException uce) { + return null; + } + } + }; + } catch (NTLMException ne) { + throw new SaslException( + "NTLM: Invalid version string: " + version, ne); + } + nonce = new byte[8]; + } + + @Override + public String getMechanismName() { + return mech; + } + + @Override + public byte[] evaluateResponse(byte[] response) throws SaslException { + try { + step++; + if (step == 1) { + random.nextBytes(nonce); + return server.type2(response, nonce); + } else { + String[] out = server.verify(response, nonce); + authzId = out[0]; + hostname = out[1]; + return null; + } + } catch (GeneralSecurityException ex) { + throw new SaslException("", ex); + } + } + + @Override + public boolean isComplete() { + return step >= 2; + } + + @Override + public String getAuthorizationID() { + return authzId; + } + + @Override + public byte[] unwrap(byte[] incoming, int offset, int len) + throws SaslException { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public byte[] wrap(byte[] outgoing, int offset, int len) + throws SaslException { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public Object getNegotiatedProperty(String propName) { + if (propName.equals(Sasl.QOP)) { + return "auth"; + } else if (propName.equals(NTLM_HOSTNAME)) { + return hostname; + } else { + return null; + } + } + + @Override + public void dispose() throws SaslException { + return; + } +} diff --git a/jdk/src/share/classes/java/awt/Dialog.java b/jdk/src/share/classes/java/awt/Dialog.java index 71b08d7226d..3e2effd1dc0 100644 --- a/jdk/src/share/classes/java/awt/Dialog.java +++ b/jdk/src/share/classes/java/awt/Dialog.java @@ -277,10 +277,8 @@ public class Dialog extends Window { */ String title; - private transient volatile boolean keepBlockingEDT = false; - private transient volatile boolean keepBlockingCT = false; - private transient ModalEventFilter modalFilter; + private transient volatile SecondaryLoop secondaryLoop; /* * Indicates that this dialog is being hidden. This flag is set to true at @@ -1005,12 +1003,6 @@ public class Dialog extends Window { super.setVisible(b); } - /** - * Stores the app context on which event dispatch thread the dialog - * is being shown. Initialized in show(), used in hideAndDisposeHandler() - */ - transient private AppContext showAppContext; - /** * Makes the {@code Dialog} visible. If the dialog and/or its owner * are not yet displayable, both are made displayable. The @@ -1037,39 +1029,18 @@ public class Dialog extends Window { if (!isModal()) { conditionalShow(null, null); } else { - // Set this variable before calling conditionalShow(). That - // way, if the Dialog is hidden right after being shown, we - // won't mistakenly block this thread. - keepBlockingEDT = true; - keepBlockingCT = true; - - // Store the app context on which this dialog is being shown. - // Event dispatch thread of this app context will be sleeping until - // we wake it by any event from hideAndDisposeHandler(). - showAppContext = AppContext.getAppContext(); + AppContext showAppContext = AppContext.getAppContext(); AtomicLong time = new AtomicLong(); Component predictedFocusOwner = null; try { predictedFocusOwner = getMostRecentFocusOwner(); if (conditionalShow(predictedFocusOwner, time)) { - // We have two mechanisms for blocking: 1. If we're on the - // EventDispatchThread, start a new event pump. 2. If we're - // on any other thread, call wait() on the treelock. - modalFilter = ModalEventFilter.createFilterForDialog(this); - - final Runnable pumpEventsForFilter = new Runnable() { - public void run() { - EventDispatchThread dispatchThread = - (EventDispatchThread)Thread.currentThread(); - dispatchThread.pumpEventsForFilter(new Conditional() { - public boolean evaluate() { - synchronized (getTreeLock()) { - return keepBlockingEDT && windowClosingException == null; - } - } - }, modalFilter); + Conditional cond = new Conditional() { + @Override + public boolean evaluate() { + return windowClosingException == null; } }; @@ -1096,44 +1067,10 @@ public class Dialog extends Window { modalityPushed(); try { - if (EventQueue.isDispatchThread()) { - /* - * dispose SequencedEvent we are dispatching on current - * AppContext, to prevent us from hang. - * - */ - // BugId 4531693 (son@sparc.spb.su) - SequencedEvent currentSequencedEvent = KeyboardFocusManager. - getCurrentKeyboardFocusManager().getCurrentSequencedEvent(); - if (currentSequencedEvent != null) { - currentSequencedEvent.dispose(); - } - - /* - * Event processing is done inside doPrivileged block so that - * it wouldn't matter even if user code is on the stack - * Fix for BugId 6300270 - */ - - AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - pumpEventsForFilter.run(); - return null; - } - }); - } else { - synchronized (getTreeLock()) { - Toolkit.getEventQueue().postEvent(new PeerEvent(this, - pumpEventsForFilter, - PeerEvent.PRIORITY_EVENT)); - while (keepBlockingCT && windowClosingException == null) { - try { - getTreeLock().wait(); - } catch (InterruptedException e) { - break; - } - } - } + EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue(); + secondaryLoop = eventQueue.createSecondaryLoop(cond, modalFilter, 5000); + if (!secondaryLoop.enter()) { + secondaryLoop = null; } } finally { modalityPopped(); @@ -1194,18 +1131,11 @@ public class Dialog extends Window { windowClosingException = null; } } - final class WakingRunnable implements Runnable { - public void run() { - synchronized (getTreeLock()) { - keepBlockingCT = false; - getTreeLock().notifyAll(); - } - } - } + private void hideAndDisposePreHandler() { isInHide = true; synchronized (getTreeLock()) { - if (keepBlockingEDT) { + if (secondaryLoop != null) { modalHide(); // dialog can be shown and then disposed before its // modal filter is created @@ -1217,20 +1147,9 @@ public class Dialog extends Window { } } private void hideAndDisposeHandler() { - synchronized (getTreeLock()) { - if (keepBlockingEDT) { - keepBlockingEDT = false; - PeerEvent wakingEvent = new PeerEvent(getToolkit(), new WakingRunnable(), PeerEvent.PRIORITY_EVENT); - AppContext curAppContext = AppContext.getAppContext(); - if (showAppContext != curAppContext) { - // Wake up event dispatch thread on which the dialog was - // initially shown - SunToolkit.postEvent(showAppContext, wakingEvent); - showAppContext = null; - } else { - Toolkit.getEventQueue().postEvent(wakingEvent); - } - } + if (secondaryLoop != null) { + secondaryLoop.exit(); + secondaryLoop = null; } isInHide = false; } diff --git a/jdk/src/share/classes/java/awt/EventDispatchThread.java b/jdk/src/share/classes/java/awt/EventDispatchThread.java index eed2c16e514..b47c3686e81 100644 --- a/jdk/src/share/classes/java/awt/EventDispatchThread.java +++ b/jdk/src/share/classes/java/awt/EventDispatchThread.java @@ -113,8 +113,7 @@ class EventDispatchThread extends Thread { pumpEventsForHierarchy(id, cond, null); } - void pumpEventsForHierarchy(int id, Conditional cond, Component modalComponent) - { + void pumpEventsForHierarchy(int id, Conditional cond, Component modalComponent) { pumpEventsForFilter(id, cond, new HierarchyEventFilter(modalComponent)); } @@ -124,6 +123,7 @@ class EventDispatchThread extends Thread { void pumpEventsForFilter(int id, Conditional cond, EventFilter filter) { addEventFilter(filter); + doDispatch = true; while (doDispatch && cond.evaluate()) { if (isInterrupted() || !pumpOneEventForFilters(id)) { doDispatch = false; @@ -133,6 +133,7 @@ class EventDispatchThread extends Thread { } void addEventFilter(EventFilter filter) { + eventLog.finest("adding the event filter: " + filter); synchronized (eventFilters) { if (!eventFilters.contains(filter)) { if (filter instanceof ModalEventFilter) { @@ -156,6 +157,7 @@ class EventDispatchThread extends Thread { } void removeEventFilter(EventFilter filter) { + eventLog.finest("removing the event filter: " + filter); synchronized (eventFilters) { eventFilters.remove(filter); } diff --git a/jdk/src/share/classes/java/awt/EventQueue.java b/jdk/src/share/classes/java/awt/EventQueue.java index 86c68e8b5c7..ffda53b69e7 100644 --- a/jdk/src/share/classes/java/awt/EventQueue.java +++ b/jdk/src/share/classes/java/awt/EventQueue.java @@ -883,6 +883,41 @@ public class EventQueue { } } + /** + * Creates a new {@code secondary loop} associated with this + * event queue. Use the {@link SecondaryLoop#enter} and + * {@link SecondaryLoop#exit} methods to start and stop the + * event loop and dispatch the events from this queue. + * + * @return secondaryLoop A new secondary loop object, which can + * be used to launch a new nested event + * loop and dispatch events from this queue + * + * @see SecondaryLoop#enter + * @see SecondaryLoop#exit + * + * @since 1.7 + */ + public SecondaryLoop createSecondaryLoop() { + return createSecondaryLoop(null, null, 0); + } + + SecondaryLoop createSecondaryLoop(Conditional cond, EventFilter filter, long interval) { + pushPopLock.lock(); + try { + if (nextQueue != null) { + // Forward the request to the top of EventQueue stack + return nextQueue.createSecondaryLoop(cond, filter, interval); + } + if (dispatchThread == null) { + initDispatchThread(); + } + return new WaitDispatchSupport(dispatchThread, cond, filter, interval); + } finally { + pushPopLock.unlock(); + } + } + /** * Returns true if the calling thread is * {@link Toolkit#getSystemEventQueue the current AWT EventQueue}'s diff --git a/jdk/src/share/classes/java/awt/SecondaryLoop.java b/jdk/src/share/classes/java/awt/SecondaryLoop.java new file mode 100644 index 00000000000..844efc85261 --- /dev/null +++ b/jdk/src/share/classes/java/awt/SecondaryLoop.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 java.awt; + +/** + * A helper interface to run the nested event loop. + *

+ * Objects that implement this interface are created with the + * {@link EventQueue#createSecondaryLoop} method. The interface + * provides two methods, {@link enter} and {@link exit}, + * which can be used to start and stop the event loop. + *

+ * When the {@link enter} method is called, the current + * thread is blocked until the loop is terminated by the + * {@link exit} method. Also, a new event loop is started + * on the event dispatch thread, which may or may not be + * the current thread. The loop can be terminated on any + * thread by calling its {@link exit} method. After the + * loop is terminated, the {@code SecondaryLoop} object can + * be reused to run a new nested event loop. + *

+ * A typical use case of applying this interface is AWT + * and Swing modal dialogs. When a modal dialog is shown on + * the event dispatch thread, it enters a new secondary loop. + * Later, when the dialog is hidden or disposed, it exits + * the loop, and the thread continues its execution. + *

+ * The following example illustrates a simple use case of + * secondary loops: + * + *

+ *   SecondaryLoop loop;
+ *
+ *   JButton jButton = new JButton("Button");
+ *   jButton.addActionListener(new ActionListener() {
+ *       {@code @Override}
+ *       public void actionPerformed(ActionEvent e) {
+ *           Toolkit tk = Toolkit.getDefaultToolkit();
+ *           EventQueue eq = tk.getSystemEventQueue();
+ *           loop = eq.createSecondaryLoop();
+ *
+ *           // Spawn a new thread to do the work
+ *           Thread worker = new WorkerThread();
+ *           worker.start();
+ *
+ *           // Enter the loop to block the current event
+ *           // handler, but leave UI responsive
+ *           if (!loop.enter()) {
+ *               // Report an error
+ *           }
+ *       }
+ *   });
+ *
+ *   class WorkerThread extends Thread {
+ *       {@code @Override}
+ *       public void run() {
+ *           // Perform calculations
+ *           doSomethingUseful();
+ *
+ *           // Exit the loop
+ *           loop.exit();
+ *       }
+ *   }
+ * 
+ * + * @see Dialog#show + * @see EventQueue#createSecondaryLoop + * @see Toolkit#getSystemEventQueue + * + * @author Anton Tarasov, Artem Ananiev + * + * @since 1.7 + */ +public interface SecondaryLoop { + + /** + * Blocks the execution of the current thread and enters a new + * secondary event loop on the event dispatch thread. + *

+ * This method can be called by any thread including the event + * dispatch thread. This thread will be blocked until the {@link + * exit} method is called or the loop is terminated. A new + * secondary loop will be created on the event dispatch thread + * for dispatching events in either case. + *

+ * This method can only start one new event loop at a time per + * object. If a secondary event loop has already been started + * by this object and is currently still running, this method + * returns {@code false} to indicate that it was not successful + * in starting a new event loop. Otherwise, this method blocks + * the calling thread and later returns {@code true} when the + * new event loop is terminated. At such time, this object can + * again be used to start another new event loop. + * + * @return {@code true} after termination of the secondary loop, + * if the secondary loop was started by this call, + * {@code false} otherwise + */ + public boolean enter(); + + /** + * Unblocks the execution of the thread blocked by the {@link + * enter} method and exits the secondary loop. + *

+ * This method resumes the thread that called the {@link enter} + * method and exits the secondary loop that was created when + * the {@link enter} method was invoked. + *

+ * Note that if any other secondary loop is started while this + * loop is running, the blocked thread will not resume execution + * until the nested loop is terminated. + *

+ * If this secondary loop has not been started with the {@link + * enter} method, or this secondary loop has already finished + * with the {@link exit} method, this method returns {@code + * false}, otherwise {@code true} is returned. + * + * @return {@code true} if this loop was previously started and + * has not yet been finished with the {@link exit} method, + * {@code false} otherwise + */ + public boolean exit(); + +} diff --git a/jdk/src/share/classes/java/awt/WaitDispatchSupport.java b/jdk/src/share/classes/java/awt/WaitDispatchSupport.java new file mode 100644 index 00000000000..bf77fa73a62 --- /dev/null +++ b/jdk/src/share/classes/java/awt/WaitDispatchSupport.java @@ -0,0 +1,302 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 java.awt; + +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.atomic.AtomicBoolean; + +import java.security.PrivilegedAction; +import java.security.AccessController; + +import sun.awt.PeerEvent; + +import sun.util.logging.PlatformLogger; + +/** + * This utility class is used to suspend execution on a thread + * while still allowing {@code EventDispatchThread} to dispatch events. + * The API methods of the class are thread-safe. + * + * @author Anton Tarasov, Artem Ananiev + * + * @since 1.7 + */ +class WaitDispatchSupport implements SecondaryLoop { + + private final static PlatformLogger log = + PlatformLogger.getLogger("java.awt.event.WaitDispatchSupport"); + + private EventDispatchThread dispatchThread; + private EventFilter filter; + + private volatile Conditional extCondition; + private volatile Conditional condition; + + private long interval; + // Use a shared daemon timer to serve all the WaitDispatchSupports + private static Timer timer; + // When this WDS expires, we cancel the timer task leaving the + // shared timer up and running + private TimerTask timerTask; + + private AtomicBoolean keepBlockingEDT = new AtomicBoolean(false); + private AtomicBoolean keepBlockingCT = new AtomicBoolean(false); + + private static synchronized void initializeTimer() { + if (timer == null) { + timer = new Timer("AWT-WaitDispatchSupport-Timer", true); + } + } + + /** + * Creates a {@code WaitDispatchSupport} instance to + * serve the given event dispatch thread. + * + * @param dispatchThread An event dispatch thread that + * should not stop dispatching events while waiting + * + * @since 1.7 + */ + public WaitDispatchSupport(EventDispatchThread dispatchThread) { + this(dispatchThread, null); + } + + /** + * Creates a {@code WaitDispatchSupport} instance to + * serve the given event dispatch thread. + * + * @param dispatchThread An event dispatch thread that + * should not stop dispatching events while waiting + * @param extCondition A conditional object used to determine + * if the loop should be terminated + * + * @since 1.7 + */ + public WaitDispatchSupport(EventDispatchThread dispatchThread, + Conditional extCond) + { + if (dispatchThread == null) { + throw new IllegalArgumentException("The dispatchThread can not be null"); + } + + this.dispatchThread = dispatchThread; + this.extCondition = extCond; + this.condition = new Conditional() { + @Override + public boolean evaluate() { + if (log.isLoggable(PlatformLogger.FINEST)) { + log.finest("evaluate(): blockingEDT=" + keepBlockingEDT.get() + + ", blockingCT=" + keepBlockingCT.get()); + } + boolean extEvaluate = + (extCondition != null) ? extCondition.evaluate() : true; + if (!keepBlockingEDT.get() || !extEvaluate) { + if (timerTask != null) { + timerTask.cancel(); + timerTask = null; + } + return false; + } + return true; + } + }; + } + + /** + * Creates a {@code WaitDispatchSupport} instance to + * serve the given event dispatch thread. + *

+ * The {@link EventFilter} is set on the {@code dispatchThread} + * while waiting. The filter is removed on completion of the + * waiting process. + *

+ * + * + * @param dispatchThread An event dispatch thread that + * should not stop dispatching events while waiting + * @param filter {@code EventFilter} to be set + * @param interval A time interval to wait for. Note that + * when the waiting process takes place on EDT + * there is no guarantee to stop it in the given time + * + * @since 1.7 + */ + public WaitDispatchSupport(EventDispatchThread dispatchThread, + Conditional extCondition, + EventFilter filter, long interval) + { + this(dispatchThread, extCondition); + this.filter = filter; + if (interval < 0) { + throw new IllegalArgumentException("The interval value must be >= 0"); + } + this.interval = interval; + if (interval != 0) { + initializeTimer(); + } + } + + /** + * @inheritDoc + */ + @Override + public boolean enter() { + log.fine("enter(): blockingEDT=" + keepBlockingEDT.get() + + ", blockingCT=" + keepBlockingCT.get()); + + if (!keepBlockingEDT.compareAndSet(false, true)) { + log.fine("The secondary loop is already running, aborting"); + return false; + } + + final Runnable run = new Runnable() { + public void run() { + log.fine("Starting a new event pump"); + if (filter == null) { + dispatchThread.pumpEvents(condition); + } else { + dispatchThread.pumpEventsForFilter(condition, filter); + } + } + }; + + // We have two mechanisms for blocking: if we're on the + // dispatch thread, start a new event pump; if we're + // on any other thread, call wait() on the treelock + + Thread currentThread = Thread.currentThread(); + if (currentThread == dispatchThread) { + log.finest("On dispatch thread: " + dispatchThread); + if (interval != 0) { + log.finest("scheduling the timer for " + interval + " ms"); + timer.schedule(timerTask = new TimerTask() { + @Override + public void run() { + if (keepBlockingEDT.compareAndSet(true, false)) { + wakeupEDT(); + } + } + }, interval); + } + // Dispose SequencedEvent we are dispatching on the the current + // AppContext, to prevent us from hang - see 4531693 for details + SequencedEvent currentSE = KeyboardFocusManager. + getCurrentKeyboardFocusManager().getCurrentSequencedEvent(); + if (currentSE != null) { + log.fine("Dispose current SequencedEvent: " + currentSE); + currentSE.dispose(); + } + // In case the exit() method is called before starting + // new event pump it will post the waking event to EDT. + // The event will be handled after the the new event pump + // starts. Thus, the enter() method will not hang. + // + // Event pump should be privileged. See 6300270. + AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + run.run(); + return null; + } + }); + } else { + log.finest("On non-dispatch thread: " + currentThread); + synchronized (getTreeLock()) { + if (filter != null) { + dispatchThread.addEventFilter(filter); + } + try { + EventQueue eq = dispatchThread.getEventQueue(); + eq.postEvent(new PeerEvent(this, run, PeerEvent.PRIORITY_EVENT)); + keepBlockingCT.set(true); + if (interval > 0) { + long currTime = System.currentTimeMillis(); + while (keepBlockingCT.get() && + ((extCondition != null) ? extCondition.evaluate() : true) && + (currTime + interval > System.currentTimeMillis())) + { + getTreeLock().wait(interval); + } + } else { + while (keepBlockingCT.get() && + ((extCondition != null) ? extCondition.evaluate() : true)) + { + getTreeLock().wait(); + } + } + log.fine("waitDone " + keepBlockingEDT.get() + " " + keepBlockingCT.get()); + } catch (InterruptedException e) { + log.fine("Exception caught while waiting: " + e); + } finally { + if (filter != null) { + dispatchThread.removeEventFilter(filter); + } + } + // If the waiting process has been stopped because of the + // time interval passed or an exception occurred, the state + // should be changed + keepBlockingEDT.set(false); + keepBlockingCT.set(false); + } + } + + return true; + } + + /** + * @inheritDoc + */ + public boolean exit() { + log.fine("exit(): blockingEDT=" + keepBlockingEDT.get() + + ", blockingCT=" + keepBlockingCT.get()); + if (keepBlockingEDT.compareAndSet(true, false)) { + wakeupEDT(); + return true; + } + return false; + } + + private final static Object getTreeLock() { + return Component.LOCK; + } + + private final Runnable wakingRunnable = new Runnable() { + public void run() { + log.fine("Wake up EDT"); + synchronized (getTreeLock()) { + keepBlockingCT.set(false); + getTreeLock().notifyAll(); + } + log.fine("Wake up EDT done"); + } + }; + + private void wakeupEDT() { + log.finest("wakeupEDT(): EDT == " + dispatchThread); + EventQueue eq = dispatchThread.getEventQueue(); + eq.postEvent(new PeerEvent(this, wakingRunnable, PeerEvent.PRIORITY_EVENT)); + } +} diff --git a/jdk/src/share/classes/java/lang/AutoCloseable.java b/jdk/src/share/classes/java/lang/AutoCloseable.java index 18c28fe887b..a44f5840cd7 100644 --- a/jdk/src/share/classes/java/lang/AutoCloseable.java +++ b/jdk/src/share/classes/java/lang/AutoCloseable.java @@ -34,8 +34,8 @@ package java.lang; public interface AutoCloseable { /** * Close this resource, relinquishing any underlying resources. - * This method is invoked automatically by the automatic resource - * management block construct. + * This method is invoked automatically by the {@code + * try}-with-resources statement. * *

Classes implementing this method are strongly encouraged to * be declared to throw more specific exceptions (or no exception diff --git a/jdk/src/share/classes/java/lang/Character.java b/jdk/src/share/classes/java/lang/Character.java index 69134bda77f..0a64916d3bf 100644 --- a/jdk/src/share/classes/java/lang/Character.java +++ b/jdk/src/share/classes/java/lang/Character.java @@ -595,7 +595,6 @@ class Character implements java.io.Serializable, Comparable { /** * Constructs a new Subset instance. * - * @exception NullPointerException if name is null * @param name The name of this subset * @exception NullPointerException if name is null */ diff --git a/jdk/src/share/classes/java/lang/ClassLoader.java b/jdk/src/share/classes/java/lang/ClassLoader.java index d3346417c0f..fd9ba91d720 100644 --- a/jdk/src/share/classes/java/lang/ClassLoader.java +++ b/jdk/src/share/classes/java/lang/ClassLoader.java @@ -823,7 +823,7 @@ public abstract class ClassLoader { * * * @param name - * The expected binary namebinary name. of the class, or * null if not known * * @param b diff --git a/jdk/src/share/classes/java/lang/Object.java b/jdk/src/share/classes/java/lang/Object.java index 2e1011a60da..c730db44e23 100644 --- a/jdk/src/share/classes/java/lang/Object.java +++ b/jdk/src/share/classes/java/lang/Object.java @@ -189,7 +189,9 @@ public class Object { * specific cloning operation. First, if the class of this object does * not implement the interface {@code Cloneable}, then a * {@code CloneNotSupportedException} is thrown. Note that all arrays - * are considered to implement the interface {@code Cloneable}. + * are considered to implement the interface {@code Cloneable} and that + * the return type of the {@code clone} method of an array type {@code T[]} + * is {@code T[]} where T is any reference or primitive type. * Otherwise, this method creates a new instance of the class of this * object and initializes all its fields with exactly the contents of * the corresponding fields of this object, as if by assignment; the diff --git a/jdk/src/share/classes/java/lang/Throwable.java b/jdk/src/share/classes/java/lang/Throwable.java index 4d4169139e8..0073d3f3c3d 100644 --- a/jdk/src/share/classes/java/lang/Throwable.java +++ b/jdk/src/share/classes/java/lang/Throwable.java @@ -498,8 +498,8 @@ public class Throwable implements Serializable { * } * * As of release 7, the platform supports the notion of - * suppressed exceptions (in conjunction with automatic - * resource management blocks). Any exceptions that were + * suppressed exceptions (in conjunction with the {@code + * try}-with-resources statement). Any exceptions that were * suppressed in order to deliver an exception are printed out * beneath the stack trace. The format of this information * depends on the implementation, but the following example may be @@ -805,7 +805,7 @@ public class Throwable implements Serializable { /** * Adds the specified exception to the list of exceptions that - * were suppressed, typically by the automatic resource management + * were suppressed, typically by the {@code try}-with-resources * statement, in order to deliver this exception. * *

Note that when one exception {@linkplain @@ -839,7 +839,7 @@ public class Throwable implements Serializable { /** * Returns an array containing all of the exceptions that were - * suppressed, typically by the automatic resource management + * suppressed, typically by the {@code try}-with-resources * statement, in order to deliver this exception. * * @return an array containing all of the exceptions that were diff --git a/jdk/src/share/classes/java/lang/reflect/Constructor.java b/jdk/src/share/classes/java/lang/reflect/Constructor.java index 6515eb282d9..e4b808e41bf 100644 --- a/jdk/src/share/classes/java/lang/reflect/Constructor.java +++ b/jdk/src/share/classes/java/lang/reflect/Constructor.java @@ -166,8 +166,7 @@ public final /** * Returns the name of this constructor, as a string. This is - * always the same as the simple name of the constructor's declaring - * class. + * the binary name of the constructor's declaring class. */ public String getName() { return getDeclaringClass().getName(); diff --git a/jdk/src/share/classes/java/net/SdpSocketImpl.java b/jdk/src/share/classes/java/net/SdpSocketImpl.java new file mode 100644 index 00000000000..b5b023e2433 --- /dev/null +++ b/jdk/src/share/classes/java/net/SdpSocketImpl.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 java.net; + +import java.io.IOException; +import java.io.FileDescriptor; + +import sun.net.sdp.SdpSupport; + +/** + * SocketImpl that supports the SDP protocol + */ +class SdpSocketImpl extends PlainSocketImpl { + SdpSocketImpl() { } + + @Override + protected void create(boolean stream) throws IOException { + if (!stream) + throw new UnsupportedOperationException("Must be a stream socket"); + fd = SdpSupport.createSocket(); + if (socket != null) + socket.setCreated(); + if (serverSocket != null) + serverSocket.setCreated(); + } +} diff --git a/jdk/src/share/classes/java/net/ServerSocket.java b/jdk/src/share/classes/java/net/ServerSocket.java index 8189d8aa4f0..d4b44e4ccb2 100644 --- a/jdk/src/share/classes/java/net/ServerSocket.java +++ b/jdk/src/share/classes/java/net/ServerSocket.java @@ -68,6 +68,15 @@ class ServerSocket implements java.io.Closeable { */ private boolean oldImpl = false; + /** + * Package-private constructor to create a ServerSocket associated with + * the given SocketImpl. + */ + ServerSocket(SocketImpl impl) { + this.impl = impl; + impl.setServerSocket(this); + } + /** * Creates an unbound server socket. * diff --git a/jdk/src/share/classes/java/nio/file/DirectoryIteratorException.java b/jdk/src/share/classes/java/nio/file/DirectoryIteratorException.java new file mode 100644 index 00000000000..729c84a77cd --- /dev/null +++ b/jdk/src/share/classes/java/nio/file/DirectoryIteratorException.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 java.nio.file; + +import java.util.ConcurrentModificationException; +import java.util.Objects; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.InvalidObjectException; + +/** + * Runtime exception thrown if an I/O error is encountered when iterating over + * the entries in a directory. The I/O error is retrieved as an {@link + * IOException} using the {@link #getCause() getCause()} method. + * + * @since 1.7 + * @see DirectoryStream + */ + +public final class DirectoryIteratorException + extends ConcurrentModificationException +{ + private static final long serialVersionUID = -6012699886086212874L; + + /** + * Constructs an instance of this class. + * + * @param cause + * the {@code IOException} that caused the directory iteration + * to fail + * + * @throws NullPointerException + * if the cause is {@code null} + */ + public DirectoryIteratorException(IOException cause) { + super(Objects.nonNull(cause)); + } + + /** + * Returns the cause of this exception. + * + * @return the cause + */ + @Override + public IOException getCause() { + return (IOException)super.getCause(); + } + + /** + * Called to read the object from a stream. + * + * @throws InvalidObjectException + * if the object is invalid or has a cause that is not + * an {@code IOException} + */ + private void readObject(ObjectInputStream s) + throws IOException, ClassNotFoundException + { + s.defaultReadObject(); + Throwable cause = super.getCause(); + if (!(cause instanceof IOException)) + throw new InvalidObjectException("Cause must be an IOException"); + } +} diff --git a/jdk/src/share/classes/java/nio/file/DirectoryStream.java b/jdk/src/share/classes/java/nio/file/DirectoryStream.java index 61fa52cec4d..fd7bf85c939 100644 --- a/jdk/src/share/classes/java/nio/file/DirectoryStream.java +++ b/jdk/src/share/classes/java/nio/file/DirectoryStream.java @@ -31,60 +31,84 @@ import java.io.IOException; /** * An object to iterate over the entries in a directory. A directory stream - * allows for convenient use of the for-each construct: + * allows for the convenient use of the for-each construct to iterate over a + * directory. + * + *

While {@code DirectoryStream} extends {@code Iterable}, it is not a + * general-purpose {@code Iterable} as it supports only a single {@code + * Iterator}; invoking the {@link #iterator iterator} method to obtain a second + * or subsequent iterator throws {@code IllegalStateException}. + * + *

An important property of the directory stream's {@code Iterator} is that + * its {@link Iterator#hasNext() hasNext} method is guaranteed to read-ahead by + * at least one element. If {@code hasNext} method returns {@code true}, and is + * followed by a call to the {@code next} method, it is guaranteed that the + * {@code next} method will not throw an exception due to an I/O error, or + * because the stream has been {@link #close closed}. The {@code Iterator} does + * not support the {@link Iterator#remove remove} operation. + * + *

A {@code DirectoryStream} is opened upon creation and is closed by + * invoking the {@code close} method. Closing a directory stream releases any + * resources associated with the stream. Failure to close the stream may result + * in a resource leak. The try-with-resources statement provides a useful + * construct to ensure that the stream is closed: *

  *   Path dir = ...
- *   DirectoryStream<Path> stream = dir.newDirectoryStream();
- *   try {
+ *   try (DirectoryStream<Path> stream = dir.newDirectoryStream()) {
  *       for (Path entry: stream) {
- *         ..
+ *           ...
  *       }
- *   } finally {
- *       stream.close();
  *   }
  * 
* - *

A {@code DirectoryStream} is not a general-purpose {@code Iterable}. - * While this interface extends {@code Iterable}, the {@code iterator} method - * may only be invoked once to obtain the iterator; a second, or subsequent, - * call to the {@code iterator} method throws {@code IllegalStateException}. - * - *

A {@code DirectoryStream} is opened upon creation and is closed by - * invoking the {@link #close close} method. Closing the directory stream - * releases any resources associated with the stream. Once a directory stream - * is closed, all further method invocations on the iterator throw {@link - * java.util.ConcurrentModificationException} with cause {@link - * ClosedDirectoryStreamException}. + *

Once a directory stream is closed, then further access to the directory, + * using the {@code Iterator}, behaves as if the end of stream has been reached. + * Due to read-ahead, the {@code Iterator} may return one or more elements + * after the directory stream has been closed. Once these buffered elements + * have been read, then subsequent calls to the {@code hasNext} method returns + * {@code false}, and subsequent calls to the {@code next} method will throw + * {@code NoSuchElementException}. * *

A directory stream is not required to be asynchronously closeable. * If a thread is blocked on the directory stream's iterator reading from the * directory, and another thread invokes the {@code close} method, then the * second thread may block until the read operation is complete. * - *

The {@link Iterator#hasNext() hasNext} and {@link Iterator#next() next} - * methods can encounter an I/O error when iterating over the directory in which - * case {@code ConcurrentModificationException} is thrown with cause - * {@link java.io.IOException}. The {@code hasNext} method is guaranteed to - * read-ahead by at least one element. This means that if the {@code hasNext} - * method returns {@code true} and is followed by a call to the {@code next} - * method then it is guaranteed not to fail with a {@code - * ConcurrentModificationException}. + *

If an I/O error is encountered when accessing the directory then it + * causes the {@code Iterator}'s {@code hasNext} or {@code next} methods to + * throw {@link DirectoryIteratorException} with the {@link IOException} as the + * cause. As stated above, the {@code hasNext} method is guaranteed to + * read-ahead by at least one element. This means that if {@code hasNext} method + * returns {@code true}, and is followed by a call to the {@code next} method, + * then it is guaranteed that the {@code next} method will not fail with a + * {@code DirectoryIteratorException}. * *

The elements returned by the iterator are in no specific order. Some file * systems maintain special links to the directory itself and the directory's * parent directory. Entries representing these links are not returned by the * iterator. * - *

The iterator's {@link Iterator#remove() remove} method removes the - * directory entry for the last element returned by the iterator, as if by - * invoking the {@link Path#delete delete} method. If an I/O error or - * security exception occurs then {@code ConcurrentModificationException} is - * thrown with the cause. - * *

The iterator is weakly consistent. It is thread safe but does not * freeze the directory while iterating, so it may (or may not) reflect updates * to the directory that occur after the {@code DirectoryStream} is created. * + *

Usage Examples: + * Suppose we want a list of the source files in a directory. This example uses + * both the for-each and try-with-resources constructs. + *

+ *   List<Path> listSourceFiles(Path dir) throws IOException {
+ *       List<Path> result = new ArrayList<Path>();
+ *       try (DirectoryStream<Path> stream = dir.newDirectoryStream("*.{c,h,cpp,hpp,java}")) {
+ *           for (Path entry: stream) {
+ *               result.add(entry);
+ *           }
+ *       } catch (DirectoryIteratorException ex) {
+ *           // I/O error encounted during the iteration, the cause is an IOException
+ *           throw ex.getCause();
+ *       }
+ *       return result;
+ *   }
+ * 
* @param The type of element returned by the iterator * * @since 1.7 diff --git a/jdk/src/share/classes/java/nio/file/Path.java b/jdk/src/share/classes/java/nio/file/Path.java index 029feee58a0..abdc77750cc 100644 --- a/jdk/src/share/classes/java/nio/file/Path.java +++ b/jdk/src/share/classes/java/nio/file/Path.java @@ -984,11 +984,11 @@ public abstract class Path * directory. * *

Where the filter terminates due to an uncaught error or runtime - * exception then it is propogated to the iterator's {@link Iterator#hasNext() + * exception then it is propagated to the {@link Iterator#hasNext() * hasNext} or {@link Iterator#next() next} method. Where an {@code - * IOException} is thrown, it is propogated as a {@link - * java.util.ConcurrentModificationException} with the {@code - * IOException} as the cause. + * IOException} is thrown, it results in the {@code hasNext} or {@code + * next} method throwing a {@link DirectoryIteratorException} with the + * {@code IOException} as the cause. * *

When an implementation supports operations on entries in the * directory that execute in a race-free manner then the returned directory diff --git a/jdk/src/share/classes/java/nio/file/SecureDirectoryStream.java b/jdk/src/share/classes/java/nio/file/SecureDirectoryStream.java index 362d1f547ea..d4b00e1158c 100644 --- a/jdk/src/share/classes/java/nio/file/SecureDirectoryStream.java +++ b/jdk/src/share/classes/java/nio/file/SecureDirectoryStream.java @@ -47,15 +47,6 @@ import java.io.IOException; * newDirectoryStream} method will be a {@code SecureDirectoryStream} and must * be cast to that type in order to invoke the methods defined by this interface. * - *

As specified by {@code DirectoryStream}, the iterator's {@link - * java.util.Iterator#remove() remove} method removes the directory entry for - * the last element returned by the iterator. In the case of a {@code - * SecureDirectoryStream} the {@code remove} method behaves as if by invoking - * the {@link #deleteFile deleteFile} or {@link #deleteDirectory deleteDirectory} - * methods defined by this interface. The {@code remove} may require to examine - * the file to determine if the file is a directory, and consequently, it may - * not be atomic with respect to other file system operations. - * *

In the case of the default {@link java.nio.file.spi.FileSystemProvider * provider}, and a security manager is set, then the permission checks are * performed using the path obtained by resolving the given relative path diff --git a/jdk/src/share/classes/java/sql/CallableStatement.java b/jdk/src/share/classes/java/sql/CallableStatement.java index c328858de36..2f2a77594e1 100644 --- a/jdk/src/share/classes/java/sql/CallableStatement.java +++ b/jdk/src/share/classes/java/sql/CallableStatement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, 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 @@ -2436,4 +2436,64 @@ public interface CallableStatement extends PreparedStatement { */ void setNClob(String parameterName, Reader reader) throws SQLException; + + //------------------------- JDBC 4.1 ----------------------------------- + + + /** + *

Returns an object representing the value of OUT parameter + * {@code parameterIndex} and will convert from the + * SQL type of the parameter to the requested Java data type, if the + * conversion is supported. If the conversion is not + * supported or null is specified for the type, a + * SQLException is thrown. + *

+ * At a minimum, an implementation must support the conversions defined in + * Appendix B, Table B-3 and conversion of appropriate user defined SQL + * types to a Java type which implements {@code SQLData}, or {@code Struct}. + * Additional conversions may be supported and are vendor defined. + * + * @param parameterIndex the first parameter is 1, the second is 2, and so on + * @param type Class representing the Java data type to convert the + * designated parameter to. + * @return an instance of {@code type} holding the OUT parameter value + * @throws SQLException if conversion is not supported, type is null or + * another error occurs. The getCause() method of the + * exception may provide a more detailed exception, for example, if + * a conversion error occurs + * @throws SQLFeatureNotSupportedException if the JDBC driver does not support + * this method + * @since 1.7 + */ + public T getObject(int parameterIndex, Class type) throws SQLException; + + + /** + *

Returns an object representing the value of OUT parameter + * {@code parameterName} and will convert from the + * SQL type of the parameter to the requested Java data type, if the + * conversion is supported. If the conversion is not + * supported or null is specified for the type, a + * SQLException is thrown. + *

+ * At a minimum, an implementation must support the conversions defined in + * Appendix B, Table B-3 and conversion of appropriate user defined SQL + * types to a Java type which implements {@code SQLData}, or {@code Struct}. + * Additional conversions may be supported and are vendor defined. + * + * @param parameterName the name of the parameter + * @param type Class representing the Java data type to convert + * the designated parameter to. + * @return an instance of {@code type} holding the OUT parameter + * value + * @throws SQLException if conversion is not supported, type is null or + * another error occurs. The getCause() method of the + * exception may provide a more detailed exception, for example, if + * a conversion error occurs + * @throws SQLFeatureNotSupportedException if the JDBC driver does not support + * this method + * @since 1.7 + */ + public T getObject(String parameterName, Class type) throws SQLException; + } diff --git a/jdk/src/share/classes/java/sql/Connection.java b/jdk/src/share/classes/java/sql/Connection.java index b850e25a38d..9b6706562ba 100644 --- a/jdk/src/share/classes/java/sql/Connection.java +++ b/jdk/src/share/classes/java/sql/Connection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, 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,6 +26,7 @@ package java.sql; import java.util.Properties; +import java.util.concurrent.Executor; /** *

A connection (session) with a specific @@ -38,7 +39,7 @@ import java.util.Properties; * information is obtained with the getMetaData method. * *

Note: When configuring a Connection, JDBC applications - * should use the appropritate Connection method such as + * should use the appropriate Connection method such as * setAutoCommit or setTransactionIsolation. * Applications should not invoke SQL commands directly to change the connection's * configuration when there is a JDBC method available. By default a Connection object is in @@ -80,7 +81,7 @@ import java.util.Properties; * @see ResultSet * @see DatabaseMetaData */ -public interface Connection extends Wrapper { +public interface Connection extends Wrapper, AutoCloseable { /** * Creates a Statement object for sending @@ -347,6 +348,13 @@ public interface Connection extends Wrapper { *

* If the driver does not support catalogs, it will * silently ignore this request. + *

+ * Calling {@code setCatalog} has no effect on previously created or prepared + * {@code Statement} objects. It is implementation defined whether a DBMS + * prepare operation takes place immediately when the {@code Connection} + * method {@code prepareStatement} or {@code prepareCall} is invoked. + * For maximum portability, {@code setCatalog} should be called before a + * {@code Statement} is created or prepared. * * @param catalog the name of a catalog (subspace in this * Connection object's database) in which to work @@ -598,7 +606,17 @@ public interface Connection extends Wrapper { * Connection object. * Unless the application has added an entry, the type map returned * will be empty. - * + *

+ * You must invoke setTypeMap after making changes to the + * Map object returned from + * getTypeMap as a JDBC driver may create an internal + * copy of the Map object passed to setTypeMap: + *

+ *

+     *      Map<String,Class<?>> myMap = con.getTypeMap();
+     *      myMap.put("mySchemaName.ATHLETES", Athletes.class);
+     *      con.setTypeMap(myMap);
+     * 
* @return the java.util.Map object associated * with this Connection object * @exception SQLException if a database access error occurs @@ -614,7 +632,16 @@ public interface Connection extends Wrapper { * Installs the given TypeMap object as the type map for * this Connection object. The type map will be used for the * custom mapping of SQL structured types and distinct types. - * + *

+ * You must set the the values for the TypeMap prior to + * callng setMap as a JDBC driver may create an internal copy + * of the TypeMap: + *

+ *

+     *      Map myMap<String,Class<?>> = new HashMap<String,Class<?>>();
+     *      myMap.put("mySchemaName.ATHLETES", Athletes.class);
+     *      con.setTypeMap(myMap);
+     * 
* @param map the java.util.Map object to install * as the replacement for this Connection * object's default type map @@ -1274,4 +1301,186 @@ SQLException; */ Struct createStruct(String typeName, Object[] attributes) throws SQLException; + + //--------------------------JDBC 4.1 ----------------------------- + + /** + * Sets the given schema name to access. + *

+ * If the driver does not support schemas, it will + * silently ignore this request. + *

+ * Calling {@code setSchema} has no effect on previously created or prepared + * {@code Statement} objects. It is implementation defined whether a DBMS + * prepare operation takes place immediately when the {@code Connection} + * method {@code prepareStatement} or {@code prepareCall} is invoked. + * For maximum portability, {@code setSchema} should be called before a + * {@code Statement} is created or prepared. + * + * @param schema the name of a schema in which to work + * @exception SQLException if a database access error occurs + * or this method is called on a closed connection + * @see #getSchema + * @since 1.7 + */ + void setSchema(String schema) throws SQLException; + + /** + * Retrieves this Connection object's current schema name. + * + * @return the current schema name or null if there is none + * @exception SQLException if a database access error occurs + * or this method is called on a closed connection + * @see #setSchema + * @since 1.7 + */ + String getSchema() throws SQLException; + + /** + * Terminates an open connection. Calling abort results in: + *

    + *
  • The connection marked as closed + *
  • Closes any physical connection to the database + *
  • Releases resources used by the connection + *
  • Insures that any thread that is currently accessing the connection + * will either progress to completion or throw an SQLException. + *
+ *

+ * Calling abort marks the connection closed and releases any + * resources. Calling abort on a closed connection is a + * no-op. + *

+ * It is possible that the aborting and releasing of the resources that are + * held by the connection can take an extended period of time. When the + * abort method returns, the connection will have been marked as + * closed and the Executor that was passed as a parameter to abort + * may still be executing tasks to release resources. + *

+ * This method checks to see that there is an SQLPermission + * object before allowing the method to proceed. If a + * SecurityManager exists and its + * checkPermission method denies calling abort, + * this method throws a + * java.lang.SecurityException. + * @param executor The Executor implementation which will + * be used by abort. + * @throws java.sql.SQLException if a database access error occurs or + * the {@code executor} is {@code null}, + * @throws java.lang.SecurityException if a security manager exists and its + * checkPermission method denies calling abort + * @see SecurityManager#checkPermission + * @see Executor + * @since 1.7 + */ + void abort(Executor executor) throws SQLException; + + /** + * + * Sets the maximum period a Connection or + * objects created from the Connection + * will wait for the database to reply to any one request. If any + * request remains unanswered, the waiting method will + * return with a SQLException, and the Connection + * or objects created from the Connection will be marked as + * closed. Any subsequent use of + * the objects, with the exception of the close, + * isClosed or Connection.isValid + * methods, will result in a SQLException. + *

+ * Note: This method is intended to address a rare but serious + * condition where network partitions can cause threads issuing JDBC calls + * to hang uninterruptedly in socket reads, until the OS TCP-TIMEOUT + * (typically 10 minutes). This method is related to the + * {@link #abort abort() } method which provides an administrator + * thread a means to free any such threads in cases where the + * JDBC connection is accessible to the administrator thread. + * The setNetworkTimeout method will cover cases where + * there is no administrator thread, or it has no access to the + * connection. This method is severe in it's effects, and should be + * given a high enough value so it is never triggered before any more + * normal timeouts, such as transaction timeouts. + *

+ * JDBC driver implementations may also choose to support the + * {@code setNetworkTimeout} method to impose a limit on database + * response time, in environments where no network is present. + *

+ * Drivers may internally implement some or all of their API calls with + * multiple internal driver-database transmissions, and it is left to the + * driver implementation to determine whether the limit will be + * applied always to the response to the API call, or to any + * single request made during the API call. + *

+ * + * This method can be invoked more than once, such as to set a limit for an + * area of JDBC code, and to reset to the default on exit from this area. + * Invocation of this method has no impact on already outstanding + * requests. + *

+ * The {@code Statement.setQueryTimeout()} timeout value is independent of the + * timeout value specified in {@code setNetworkTimeout}. If the query timeout + * expires before the network timeout then the + * statement execution will be canceled. If the network is still + * active the result will be that both the statement and connection + * are still usable. However if the network timeout expires before + * the query timeout or if the statement timeout fails due to network + * problems, the connection will be marked as closed, any resources held by + * the connection will be released and both the connection and + * statement will be unusable. + *

+ * When the driver determines that the {@code setNetworkTimeout} timeout + * value has expired, the JDBC driver marks the connection + * closed and releases any resources held by the connection. + *

+ * + * This method checks to see that there is an SQLPermission + * object before allowing the method to proceed. If a + * SecurityManager exists and its + * checkPermission method denies calling + * setNetworkTimeout, this method throws a + * java.lang.SecurityException. + * + * @param executor The Executor implementation which will + * be used by setNetworkTimeout. + * @param milliseconds The time in milliseconds to wait for the database + * operation + * to complete. If the JDBC driver does not support milliseconds, the + * JDBC driver will round the value up to the nearest second. If the + * timeout period expires before the operation + * completes, a SQLException will be thrown. + * A value of 0 indicates that there is not timeout for database operations. + * @throws java.sql.SQLException if a database access error occurs, this + * method is called on a closed connection, + * the {@code executor} is {@code null}, + * or the value specified for seconds is less than 0. + * @throws java.lang.SecurityException if a security manager exists and its + * checkPermission method denies calling + * setNetworkTimeout. + * @exception SQLFeatureNotSupportedException if the JDBC driver does not support + * this method + * @see SecurityManager#checkPermission + * @see Statement#setQueryTimeout + * @see #getNetworkTimeout + * @see #abort + * @see Executor + * @since 1.7 + */ + void setNetworkTimeout(Executor executor, int milliseconds) throws SQLException; + + + /** + * Retrieves the number of milliseconds the driver will + * wait for a database request to complete. + * If the limit is exceeded, a + * SQLException is thrown. + * + * @return the current timeout limit in milliseconds; zero means there is + * no limit + * @throws SQLException if a database access error occurs or + * this method is called on a closed Connection + * @exception SQLFeatureNotSupportedException if the JDBC driver does not support + * this method + * @see #setNetworkTimeout + * @since 1.7 + */ + int getNetworkTimeout() throws SQLException; } diff --git a/jdk/src/share/classes/java/sql/DatabaseMetaData.java b/jdk/src/share/classes/java/sql/DatabaseMetaData.java index 07923026203..d867986c6bf 100644 --- a/jdk/src/share/classes/java/sql/DatabaseMetaData.java +++ b/jdk/src/share/classes/java/sql/DatabaseMetaData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, 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 @@ -1342,10 +1342,10 @@ public interface DatabaseMetaData extends Wrapper { * defined. *

  • IS_NULLABLE String => ISO rules are used to determine the nullability for a column. *
      - *
    • YES --- if the parameter can include NULLs - *
    • NO --- if the parameter cannot include NULLs + *
    • YES --- if the column can include NULLs + *
    • NO --- if the column cannot include NULLs *
    • empty string --- if the nullability for the - * parameter is unknown + * column is unknown *
    *
  • SPECIFIC_NAME String => the name which uniquely identifies this procedure within its schema. * @@ -1610,17 +1610,17 @@ public interface DatabaseMetaData extends Wrapper { * (starting at 1) *
  • IS_NULLABLE String => ISO rules are used to determine the nullability for a column. *
      - *
    • YES --- if the parameter can include NULLs - *
    • NO --- if the parameter cannot include NULLs + *
    • YES --- if the column can include NULLs + *
    • NO --- if the column cannot include NULLs *
    • empty string --- if the nullability for the - * parameter is unknown + * column is unknown *
    - *
  • SCOPE_CATLOG String => catalog of table that is the scope + *
  • SCOPE_CATALOG String => catalog of table that is the scope * of a reference attribute (null if DATA_TYPE isn't REF) *
  • SCOPE_SCHEMA String => schema of table that is the scope * of a reference attribute (null if the DATA_TYPE isn't REF) *
  • SCOPE_TABLE String => table name that this the scope - * of a reference attribure (null if the DATA_TYPE isn't REF) + * of a reference attribute (null if the DATA_TYPE isn't REF) *
  • SOURCE_DATA_TYPE short => source type of a distinct type or user-generated * Ref type, SQL type from java.sql.Types (null if DATA_TYPE * isn't DISTINCT or user-generated REF) @@ -1629,11 +1629,16 @@ public interface DatabaseMetaData extends Wrapper { *
  • YES --- if the column is auto incremented *
  • NO --- if the column is not auto incremented *
  • empty string --- if it cannot be determined whether the column is auto incremented - * parameter is unknown + * + *
  • IS_GENERATEDCOLUMN String => Indicates whether this is a generated column + *
      + *
    • YES --- if this a generated column + *
    • NO --- if this not a generated column + *
    • empty string --- if it cannot be determined whether this is a generated column *
    * * - *

    The COLUMN_SIZE column the specified column size for the given column. + *

    The COLUMN_SIZE column specifies the column size for the given column. * For numeric data, this is the maximum precision. For character data, this is the length in characters. * For datetime datatypes, this is the length in characters of the String representation (assuming the * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, @@ -3186,7 +3191,7 @@ public interface DatabaseMetaData extends Wrapper { * Retrieves whether this database supports statement pooling. * * @return true if so; false otherwise - * @throws SQLExcpetion if a database access error occurs + * @throws SQLException if a database access error occurs * @since 1.4 */ boolean supportsStatementPooling() throws SQLException; @@ -3568,4 +3573,83 @@ public interface DatabaseMetaData extends Wrapper { */ int functionReturnsTable = 2; + //--------------------------JDBC 4.1 ----------------------------- + + /** + * Retrieves a description of the pseudo or hidden columns available + * in a given table within the specified catalog and schema. + * Pseudo or hidden columns may not always be stored within + * a table and are not visible in a ResultSet unless they are + * specified in the query's outermost SELECT list. Pseudo or hidden + * columns may not necessarily be able to be modified. If there are + * no pseudo or hidden columns, an empty ResultSet is returned. + * + *

    Only column descriptions matching the catalog, schema, table + * and column name criteria are returned. They are ordered by + * TABLE_CAT,TABLE_SCHEM, TABLE_NAME + * and COLUMN_NAME. + * + *

    Each column description has the following columns: + *

      + *
    1. TABLE_CAT String => table catalog (may be null) + *
    2. TABLE_SCHEM String => table schema (may be null) + *
    3. TABLE_NAME String => table name + *
    4. COLUMN_NAME String => column name + *
    5. DATA_TYPE int => SQL type from java.sql.Types + *
    6. COLUMN_SIZE int => column size. + *
    7. DECIMAL_DIGITS int => the number of fractional digits. Null is returned for data types where + * DECIMAL_DIGITS is not applicable. + *
    8. NUM_PREC_RADIX int => Radix (typically either 10 or 2) + *
    9. COLUMN_USAGE String => The allowed usage for the column. The + * value returned will correspond to the enum name returned by {@link PseudoColumnUsage#name PseudoColumnUsage.name()} + *
    10. REMARKS String => comment describing column (may be null) + *
    11. CHAR_OCTET_LENGTH int => for char types the + * maximum number of bytes in the column + *
    12. IS_NULLABLE String => ISO rules are used to determine the nullability for a column. + *
        + *
      • YES --- if the column can include NULLs + *
      • NO --- if the column cannot include NULLs + *
      • empty string --- if the nullability for the column is unknown + *
      + *
    + * + *

    The COLUMN_SIZE column specifies the column size for the given column. + * For numeric data, this is the maximum precision. For character data, this is the length in characters. + * For datetime datatypes, this is the length in characters of the String representation (assuming the + * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, + * this is the length in bytes. Null is returned for data types where the + * column size is not applicable. + * + * @param catalog a catalog name; must match the catalog name as it + * is stored in the database; "" retrieves those without a catalog; + * null means that the catalog name should not be used to narrow + * the search + * @param schemaPattern a schema name pattern; must match the schema name + * as it is stored in the database; "" retrieves those without a schema; + * null means that the schema name should not be used to narrow + * the search + * @param tableNamePattern a table name pattern; must match the + * table name as it is stored in the database + * @param columnNamePattern a column name pattern; must match the column + * name as it is stored in the database + * @return ResultSet - each row is a column description + * @exception SQLException if a database access error occurs + * @see PseudoColumnUsage + * @since 1.7 + */ + ResultSet getPseudoColumns(String catalog, String schemaPattern, + String tableNamePattern, String columnNamePattern) + throws SQLException; + + /** + * Retrieves whether a generated key will always be returned if the column + * name(s) or indexe(s) specified for the auto generated key column(s) + * are valid and the statement succeeds. The key that is returned may or + * may not be based on the column(s) for the auto generated key. + * Consult your JDBC driver documentation for additional details. + * @return true if so; false otherwise + * @exception SQLException if a database access error occurs + * @since 1.7 + */ + boolean generatedKeyAlwaysReturned() throws SQLException; } diff --git a/jdk/src/share/classes/java/sql/Date.java b/jdk/src/share/classes/java/sql/Date.java index 7c2356e75c2..1d82ab36a1b 100644 --- a/jdk/src/share/classes/java/sql/Date.java +++ b/jdk/src/share/classes/java/sql/Date.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, 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 @@ -96,11 +96,12 @@ public class Date extends java.util.Date { * a Date value. * * @param s a String object representing a date in - * in the format "yyyy-mm-dd" + * in the format "yyyy-[m]m-[d]d". The leading zero for mm + * and dd may also be omitted. * @return a java.sql.Date object representing the * given date * @throws IllegalArgumentException if the date given is not in the - * JDBC date escape format (yyyy-mm-dd) + * JDBC date escape format (yyyy-[m]m-[d]d) */ public static Date valueOf(String s) { final int YEAR_LENGTH = 4; @@ -123,8 +124,9 @@ public class Date extends java.util.Date { String yyyy = s.substring(0, firstDash); String mm = s.substring(firstDash + 1, secondDash); String dd = s.substring(secondDash + 1); - if (yyyy.length() == YEAR_LENGTH && mm.length() == MONTH_LENGTH && - dd.length() == DAY_LENGTH) { + if (yyyy.length() == YEAR_LENGTH && + (mm.length() >= 1 && mm.length() <= MONTH_LENGTH) && + (dd.length() >= 1 && dd.length() <= DAY_LENGTH)) { int year = Integer.parseInt(yyyy); int month = Integer.parseInt(mm); int day = Integer.parseInt(dd); diff --git a/jdk/src/share/classes/java/sql/Driver.java b/jdk/src/share/classes/java/sql/Driver.java index 8325452534c..4abc6b3c81f 100644 --- a/jdk/src/share/classes/java/sql/Driver.java +++ b/jdk/src/share/classes/java/sql/Driver.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, 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,6 +25,8 @@ package java.sql; +import java.util.logging.Logger; + /** * The interface that every driver class must implement. *

    The Java SQL framework allows for multiple database drivers. @@ -150,4 +152,19 @@ public interface Driver { * otherwise */ boolean jdbcCompliant(); + + //------------------------- JDBC 4.1 ----------------------------------- + + /** + * Return the parent Logger of all the Loggers used by this driver. This + * should be the Logger farthest from the root Logger that is + * still an ancestor of all of the Loggers used by this driver. Configuring + * this Logger will affect all of the log messages generated by the driver. + * In the worst case, this may be the root Logger. + * + * @return the parent Logger for this driver + * @throws SQLFeatureNotSupportedException if the driver does not use java.util.logging. + * @since 1.7 + */ + public Logger getParentLogger() throws SQLFeatureNotSupportedException; } diff --git a/jdk/src/share/classes/java/sql/PreparedStatement.java b/jdk/src/share/classes/java/sql/PreparedStatement.java index eb55d199fcc..1d32c3dd0b9 100644 --- a/jdk/src/share/classes/java/sql/PreparedStatement.java +++ b/jdk/src/share/classes/java/sql/PreparedStatement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, 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 @@ -69,6 +69,10 @@ public interface PreparedStatement extends Statement { * @exception SQLException if a database access error occurs; * this method is called on a closed PreparedStatement or the SQL * statement does not return a ResultSet object + * @throws SQLTimeoutException when the driver has determined that the + * timeout value that was specified by the {@code setQueryTimeout} + * method has been exceeded and has at least attempted to cancel + * the currently running {@code Statement} */ ResultSet executeQuery() throws SQLException; @@ -82,8 +86,11 @@ public interface PreparedStatement extends Statement { * or (2) 0 for SQL statements that return nothing * @exception SQLException if a database access error occurs; * this method is called on a closed PreparedStatement - * or the SQL - * statement returns a ResultSet object + * or the SQL statement returns a ResultSet object + * @throws SQLTimeoutException when the driver has determined that the + * timeout value that was specified by the {@code setQueryTimeout} + * method has been exceeded and has at least attempted to cancel + * the currently running {@code Statement} */ int executeUpdate() throws SQLException; @@ -463,6 +470,10 @@ public interface PreparedStatement extends Statement { * @exception SQLException if a database access error occurs; * this method is called on a closed PreparedStatement * or an argument is supplied to this method + * @throws SQLTimeoutException when the driver has determined that the + * timeout value that was specified by the {@code setQueryTimeout} + * method has been exceeded and has at least attempted to cancel + * the currently running {@code Statement} * @see Statement#execute * @see Statement#getResultSet * @see Statement#getUpdateCount @@ -1208,4 +1219,5 @@ public interface PreparedStatement extends Statement { void setNClob(int parameterIndex, Reader reader) throws SQLException; + } diff --git a/jdk/src/share/classes/java/sql/PseudoColumnUsage.java b/jdk/src/share/classes/java/sql/PseudoColumnUsage.java new file mode 100644 index 00000000000..bc9c1add47c --- /dev/null +++ b/jdk/src/share/classes/java/sql/PseudoColumnUsage.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 java.sql; + + +/** + * Enumeration for pseudo/hidden column usage. + * + * @since 1.7 + * @see DatabaseMetaData#getPseudoColumns + */ +public enum PseudoColumnUsage { + + /** + * The pseudo/hidden column may only be used in a SELECT list. + */ + SELECT_LIST_ONLY, + + /** + * The pseudo/hidden column may only be used in a WHERE clause. + */ + WHERE_CLAUSE_ONLY, + + /** + * There are no restrictions on the usage of the pseudo/hidden columns. + */ + NO_USAGE_RESTRICTIONS, + + /** + * The usage of the pseudo/hidden column cannot be determined. + */ + USAGE_UNKNOWN + +} diff --git a/jdk/src/share/classes/java/sql/ResultSet.java b/jdk/src/share/classes/java/sql/ResultSet.java index 579270c783f..a8aac4ffeea 100644 --- a/jdk/src/share/classes/java/sql/ResultSet.java +++ b/jdk/src/share/classes/java/sql/ResultSet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, 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 @@ -145,7 +145,7 @@ import java.io.InputStream; * @see ResultSetMetaData */ -public interface ResultSet extends Wrapper { +public interface ResultSet extends Wrapper, AutoCloseable { /** * Moves the cursor froward one row from its current position. @@ -1187,6 +1187,9 @@ public interface ResultSet extends Wrapper { * cursor on the last row; calling the method absolute(-2) * moves the cursor to the next-to-last row, and so on. * + *

    If the row number specified is zero, the cursor is moved to + * before the first row. + * *

    An attempt to position the cursor beyond the first/last row in * the result set leaves the cursor before the first row or after * the last row. @@ -1196,9 +1199,10 @@ public interface ResultSet extends Wrapper { * is the same as calling last(). * * @param row the number of the row to which the cursor should move. - * A positive number indicates the row number counting from the - * beginning of the result set; a negative number indicates the - * row number counting from the end of the result set + * A value of zero indicates that the cursor will be positioned + * before the first row; a positive number indicates the row number + * counting from the beginning of the result set; a negative number + * indicates the row number counting from the end of the result set * @return true if the cursor is moved to a position in this * ResultSet object; * false if the cursor is before the first row or after the @@ -2529,7 +2533,7 @@ public interface ResultSet extends Wrapper { * @exception SQLException if the columnLabel is not valid; * if a database access error occurs * or this method is called on a closed result set - * @exception SQLFeatureNotSupportedException if the JDBC driver does not support + * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method * @since 1.2 */ @@ -4072,4 +4076,64 @@ public interface ResultSet extends Wrapper { */ void updateNClob(String columnLabel, Reader reader) throws SQLException; + //------------------------- JDBC 4.1 ----------------------------------- + + + /** + *

    Retrieves the value of the designated column in the current row + * of this ResultSet object and will convert from the + * SQL type of the column to the requested Java data type, if the + * conversion is supported. If the conversion is not + * supported or null is specified for the type, a + * SQLException is thrown. + *

    + * At a minimum, an implementation must support the conversions defined in + * Appendix B, Table B-3 and conversion of appropriate user defined SQL + * types to a Java type which implements {@code SQLData}, or {@code Struct}. + * Additional conversions may be supported and are vendor defined. + * + * @param columnIndex the first column is 1, the second is 2, ... + * @param type Class representing the Java data type to convert the designated + * column to. + * @return an instance of {@code type} holding the column value + * @throws SQLException if conversion is not supported, type is null or + * another error occurs. The getCause() method of the + * exception may provide a more detailed exception, for example, if + * a conversion error occurs + * @throws SQLFeatureNotSupportedException if the JDBC driver does not support + * this method + * @since 1.7 + */ + public T getObject(int columnIndex, Class type) throws SQLException; + + + /** + *

    Retrieves the value of the designated column in the current row + * of this ResultSet object and will convert from the + * SQL type of the column to the requested Java data type, if the + * conversion is supported. If the conversion is not + * supported or null is specified for the type, a + * SQLException is thrown. + *

    + * At a minimum, an implementation must support the conversions defined in + * Appendix B, Table B-3 and conversion of appropriate user defined SQL + * types to a Java type which implements {@code SQLData}, or {@code Struct}. + * Additional conversions may be supported and are vendor defined. + * + * @param columnLabel the label for the column specified with the SQL AS clause. + * If the SQL AS clause was not specified, then the label is the name + * of the column + * @param type Class representing the Java data type to convert the designated + * column to. + * @return an instance of {@code type} holding the column value + * @throws SQLException if conversion is not supported, type is null or + * another error occurs. The getCause() method of the + * exception may provide a more detailed exception, for example, if + * a conversion error occurs + * @throws SQLFeatureNotSupportedException if the JDBC driver does not support + * this method + * @since 1.7 + */ + public T getObject(String columnLabel, Class type) throws SQLException; + } diff --git a/jdk/src/share/classes/java/sql/SQLDataException.java b/jdk/src/share/classes/java/sql/SQLDataException.java index 813b9949782..8dc1753a6b7 100644 --- a/jdk/src/share/classes/java/sql/SQLDataException.java +++ b/jdk/src/share/classes/java/sql/SQLDataException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, 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,10 +26,13 @@ package java.sql; /** - * The subclass of {@link SQLException} thrown when the SQLState class value is '22'. This indicates - * various data errors, including but not limited to not-allowed conversion, division by 0 - * and invalid arguments to functions. - * + * The subclass of {@link SQLException} thrown when the SQLState class value + * is '22', or under vendor-specified conditions. This indicates + * various data errors, including but not limited to data conversion errors, + * division by 0, and invalid arguments to functions. + *

    + * Please consult your driver vendor documentation for the vendor-specified + * conditions for which this Exception may be thrown. * @since 1.6 */ public class SQLDataException extends SQLNonTransientException { diff --git a/jdk/src/share/classes/java/sql/SQLIntegrityConstraintViolationException.java b/jdk/src/share/classes/java/sql/SQLIntegrityConstraintViolationException.java index 0c7160d2675..0f92ac50dfa 100644 --- a/jdk/src/share/classes/java/sql/SQLIntegrityConstraintViolationException.java +++ b/jdk/src/share/classes/java/sql/SQLIntegrityConstraintViolationException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, 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,9 +26,13 @@ package java.sql; /** - * The subclass of {@link SQLException} thrown when the SQLState class value is '23'. This indicates that an integrity + * The subclass of {@link SQLException} thrown when the SQLState class value + * is '23', or under vendor-specified conditions. + * This indicates that an integrity * constraint (foreign key, primary key or unique key) has been violated. - * + *

    + * Please consult your driver vendor documentation for the vendor-specified + * conditions for which this Exception may be thrown. * @since 1.6 */ public class SQLIntegrityConstraintViolationException extends SQLNonTransientException { diff --git a/jdk/src/share/classes/java/sql/SQLInvalidAuthorizationSpecException.java b/jdk/src/share/classes/java/sql/SQLInvalidAuthorizationSpecException.java index 34ccfe13301..0b4d206df96 100644 --- a/jdk/src/share/classes/java/sql/SQLInvalidAuthorizationSpecException.java +++ b/jdk/src/share/classes/java/sql/SQLInvalidAuthorizationSpecException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, 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,9 +26,13 @@ package java.sql; /** - * The subclass of {@link SQLException} thrown when the SQLState class value is '28'. This indicated that the - * authorization credentials presented during connection establishment are not valid. - * + * The subclass of {@link SQLException} thrown when the SQLState class value + * is '28', or under vendor-specified conditions. This indicates that + * the authorization credentials presented during connection establishment + * are not valid. + *

    + * Please consult your driver vendor documentation for the vendor-specified + * conditions for which this Exception may be thrown. * @since 1.6 */ public class SQLInvalidAuthorizationSpecException extends SQLNonTransientException { diff --git a/jdk/src/share/classes/java/sql/SQLNonTransientConnectionException.java b/jdk/src/share/classes/java/sql/SQLNonTransientConnectionException.java index 089f7f439ed..036c881f205 100644 --- a/jdk/src/share/classes/java/sql/SQLNonTransientConnectionException.java +++ b/jdk/src/share/classes/java/sql/SQLNonTransientConnectionException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, 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,11 +26,13 @@ package java.sql; /** - *

    The subclass of {@link SQLException} thrown for the SQLState - * class value '08', representing - * that the connection operation that failed will not succeed when + * The subclass of {@link SQLException} thrown for the SQLState + * class value '08', or under vendor-specified conditions. This + * indicates that the connection operation that failed will not succeed if * the operation is retried without the cause of the failure being corrected. *

    + * Please consult your driver vendor documentation for the vendor-specified + * conditions for which this Exception may be thrown. * @since 1.6 */ public class SQLNonTransientConnectionException extends java.sql.SQLNonTransientException { diff --git a/jdk/src/share/classes/java/sql/SQLPermission.java b/jdk/src/share/classes/java/sql/SQLPermission.java index e5b3ff69e00..e7e799c1cac 100644 --- a/jdk/src/share/classes/java/sql/SQLPermission.java +++ b/jdk/src/share/classes/java/sql/SQLPermission.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2010, 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 @@ -30,9 +30,14 @@ import java.security.*; /** * The permission for which the SecurityManager will check - * when code that is running in an applet calls the - * DriverManager.setLogWriter method or the - * DriverManager.setLogStream (deprecated) method. + * when code that is running in an applet, or an application with a + * SecurityManager enabled, calls the + * DriverManager.setLogWriter method, + * DriverManager.setLogStream (deprecated) method, + * {@code SyncFactory.setJNDIContext} method, + * {@code SyncFactory.setLogger} method, + * {@code Connection.setNetworktimeout} method, + * or the Connection.abort method. * If there is no SQLPermission object, these methods * throw a java.lang.SecurityException as a runtime exception. *

    @@ -48,7 +53,6 @@ import java.security.*; * but *loadLibrary or a*b is not valid. *

    * The following table lists all the possible SQLPermission target names. - * Currently, the only name allowed is setLog. * The table gives a description of what the permission allows * and a discussion of the risks of granting code the permission. *

    @@ -67,9 +71,33 @@ import java.security.*; * The contents of the log may contain usernames and passwords, * SQL statements, and SQL data. * + * + * callAbort + * Allows the invocation of the {@code Connection} method + * {@code abort} + * Permits an application to terminate a physical connection to a + * database. + * + * + * setSyncFactory + * Allows the invocation of the {@code SyncFactory} methods + * {@code setJNDIContext} and {@code setLogger} + * Permits an application to specify the JNDI context from which the + * {@code SyncProvider} implementations can be retrieved from and the logging + * object to be used by the{@codeSyncProvider} implementation. + * * + * + * setNetworkTimeout + * Allows the invocation of the {@code Connection} method + * {@code setNetworkTimeout} + * Permits an application to specify the maximum period a + * Connection or + * objects created from the Connection + * will wait for the database to reply to any one request. + * * - * + *

    * The person running an applet decides what permissions to allow * and will run the Policy Tool to create an * SQLPermission in a policy file. A programmer does diff --git a/jdk/src/share/classes/java/sql/SQLSyntaxErrorException.java b/jdk/src/share/classes/java/sql/SQLSyntaxErrorException.java index a1865d93bbb..b65dec722c7 100644 --- a/jdk/src/share/classes/java/sql/SQLSyntaxErrorException.java +++ b/jdk/src/share/classes/java/sql/SQLSyntaxErrorException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, 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,9 +26,12 @@ package java.sql; /** - * The subclass of {@link SQLException} thrown when the SQLState class value is '42'. This indicates that the + * The subclass of {@link SQLException} thrown when the SQLState class value + * is '42', or under vendor-specified conditions. This indicates that the * in-progress query has violated SQL syntax rules. - * + *

    + * Please consult your driver vendor documentation for the vendor-specified + * conditions for which this Exception may be thrown. * @since 1.6 */ public class SQLSyntaxErrorException extends SQLNonTransientException { diff --git a/jdk/src/share/classes/java/sql/SQLTransactionRollbackException.java b/jdk/src/share/classes/java/sql/SQLTransactionRollbackException.java index 9e05add35ad..90eb702994b 100644 --- a/jdk/src/share/classes/java/sql/SQLTransactionRollbackException.java +++ b/jdk/src/share/classes/java/sql/SQLTransactionRollbackException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, 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,10 +26,13 @@ package java.sql; /** - * The subclass of {@link SQLException} thrown when the SQLState class value is '40'. This indicates that the - * current statement was automatically rolled back by the database becuase of deadlock or other - * transaction serialization failures. - * + * The subclass of {@link SQLException} thrown when the SQLState class value + * is '40', or under vendor-specified conditions. This indicates that the + * current statement was automatically rolled back by the database because + * of deadlock or other transaction serialization failures. + *

    + * Please consult your driver vendor documentation for the vendor-specified + * conditions for which this Exception may be thrown. * @since 1.6 */ public class SQLTransactionRollbackException extends SQLTransientException { diff --git a/jdk/src/share/classes/java/sql/SQLTransientConnectionException.java b/jdk/src/share/classes/java/sql/SQLTransientConnectionException.java index 865793c1559..cebc67d67d4 100644 --- a/jdk/src/share/classes/java/sql/SQLTransientConnectionException.java +++ b/jdk/src/share/classes/java/sql/SQLTransientConnectionException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, 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 @@ -27,11 +27,12 @@ package java.sql; /** * The subclass of {@link SQLException} for the SQLState class - * value '08', representing - * that the connection operation that failed might be able to succeed when + * value '08', or under vendor-specified conditions. This indicates + * that the connection operation that failed might be able to succeed if * the operation is retried without any application-level changes. - *

    - * + *

    + * Please consult your driver vendor documentation for the vendor-specified + * conditions for which this Exception may be thrown. * @since 1.6 */ public class SQLTransientConnectionException extends java.sql.SQLTransientException { diff --git a/jdk/src/share/classes/java/sql/Statement.java b/jdk/src/share/classes/java/sql/Statement.java index a99f2d348be..88684a79a57 100644 --- a/jdk/src/share/classes/java/sql/Statement.java +++ b/jdk/src/share/classes/java/sql/Statement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, 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 @@ -40,20 +40,27 @@ package java.sql; * @see Connection#createStatement * @see ResultSet */ -public interface Statement extends Wrapper { +public interface Statement extends Wrapper, AutoCloseable { /** * Executes the given SQL statement, which returns a single * ResultSet object. - * + *

    + * Note:This method cannot be called on a + * PreparedStatement or CallableStatement. * @param sql an SQL statement to be sent to the database, typically a * static SQL SELECT statement * @return a ResultSet object that contains the data produced * by the given query; never null * @exception SQLException if a database access error occurs, - * this method is called on a closed Statement or the given + * this method is called on a closed Statement, the given * SQL statement produces anything other than a single - * ResultSet object + * ResultSet object, the method is called on a + * PreparedStatement or CallableStatement + * @throws SQLTimeoutException when the driver has determined that the + * timeout value that was specified by the {@code setQueryTimeout} + * method has been exceeded and has at least attempted to cancel + * the currently running {@code Statement} */ ResultSet executeQuery(String sql) throws SQLException; @@ -61,7 +68,9 @@ public interface Statement extends Wrapper { * Executes the given SQL statement, which may be an INSERT, * UPDATE, or DELETE statement or an * SQL statement that returns nothing, such as an SQL DDL statement. - * + *

    + * Note:This method cannot be called on a + * PreparedStatement or CallableStatement. * @param sql an SQL Data Manipulation Language (DML) statement, such as INSERT, UPDATE or * DELETE; or an SQL statement that returns nothing, * such as a DDL statement. @@ -70,8 +79,13 @@ public interface Statement extends Wrapper { * or (2) 0 for SQL statements that return nothing * * @exception SQLException if a database access error occurs, - * this method is called on a closed Statement or the given - * SQL statement produces a ResultSet object + * this method is called on a closed Statement, the given + * SQL statement produces a ResultSet object, the method is called on a + * PreparedStatement or CallableStatement + * @throws SQLTimeoutException when the driver has determined that the + * timeout value that was specified by the {@code setQueryTimeout} + * method has been exceeded and has at least attempted to cancel + * the currently running {@code Statement} */ int executeUpdate(String sql) throws SQLException; @@ -198,11 +212,21 @@ public interface Statement extends Wrapper { /** * Sets the number of seconds the driver will wait for a * Statement object to execute to the given number of seconds. - * If the limit is exceeded, an SQLException is thrown. A JDBC - * driver must apply this limit to the execute, - * executeQuery and executeUpdate methods. JDBC driver - * implementations may also apply this limit to ResultSet methods + *By default there is no limit on the amount of time allowed for a running + * statement to complete. If the limit is exceeded, an + * SQLTimeoutException is thrown. + * A JDBC driver must apply this limit to the execute, + * executeQuery and executeUpdate methods. + *

    + * Note: JDBC driver implementations may also apply this + * limit to {@code ResultSet} methods * (consult your driver vendor documentation for details). + *

    + * Note: In the case of {@code Statement} batching, it is + * implementation defined as to whether the time-out is applied to + * individual SQL commands added via the {@code addBatch} method or to + * the entire batch of SQL commands invoked by the {@code executeBatch} + * method (consult your driver vendor documentation for details). * * @param seconds the new query timeout limit in seconds; zero means * there is no limit @@ -300,13 +324,21 @@ public interface Statement extends Wrapper { * getResultSet or getUpdateCount * to retrieve the result, and getMoreResults to * move to any subsequent result(s). - * + *

    + *Note:This method cannot be called on a + * PreparedStatement or CallableStatement. * @param sql any SQL statement * @return true if the first result is a ResultSet * object; false if it is an update count or there are * no results - * @exception SQLException if a database access error occurs or - * this method is called on a closed Statement + * @exception SQLException if a database access error occurs, + * this method is called on a closed Statement, + * the method is called on a + * PreparedStatement or CallableStatement + * @throws SQLTimeoutException when the driver has determined that the + * timeout value that was specified by the {@code setQueryTimeout} + * method has been exceeded and has at least attempted to cancel + * the currently running {@code Statement} * @see #getResultSet * @see #getUpdateCount * @see #getMoreResults @@ -465,12 +497,14 @@ public interface Statement extends Wrapper { * Statement object. The commands in this list can be * executed as a batch by calling the method executeBatch. *

    - * + *Note:This method cannot be called on a + * PreparedStatement or CallableStatement. * @param sql typically this is a SQL INSERT or * UPDATE statement * @exception SQLException if a database access error occurs, - * this method is called on a closed Statement or the - * driver does not support batch updates + * this method is called on a closed Statement, the + * driver does not support batch updates, the method is called on a + * PreparedStatement or CallableStatement * @see #executeBatch * @see DatabaseMetaData#supportsBatchUpdates * @since 1.2 @@ -536,7 +570,10 @@ public interface Statement extends Wrapper { * driver does not support batch statements. Throws {@link BatchUpdateException} * (a subclass of SQLException) if one of the commands sent to the * database fails to execute properly or attempts to return a result set. - * + * @throws SQLTimeoutException when the driver has determined that the + * timeout value that was specified by the {@code setQueryTimeout} + * method has been exceeded and has at least attempted to cancel + * the currently running {@code Statement} * * @see #addBatch * @see DatabaseMetaData#supportsBatchUpdates @@ -678,7 +715,9 @@ public interface Statement extends Wrapper { * flag if the SQL statement * is not an INSERT statement, or an SQL statement able to return * auto-generated keys (the list of such statements is vendor-specific). - * + *

    + * Note:This method cannot be called on a + * PreparedStatement or CallableStatement. * @param sql an SQL Data Manipulation Language (DML) statement, such as INSERT, UPDATE or * DELETE; or an SQL statement that returns nothing, * such as a DDL statement. @@ -693,10 +732,15 @@ public interface Statement extends Wrapper { * * @exception SQLException if a database access error occurs, * this method is called on a closed Statement, the given - * SQL statement returns a ResultSet object, or - * the given constant is not one of those allowed + * SQL statement returns a ResultSet object, + * the given constant is not one of those allowed, the method is called on a + * PreparedStatement or CallableStatement * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method with a constant of Statement.RETURN_GENERATED_KEYS + * @throws SQLTimeoutException when the driver has determined that the + * timeout value that was specified by the {@code setQueryTimeout} + * method has been exceeded and has at least attempted to cancel + * the currently running {@code Statement} * @since 1.4 */ int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException; @@ -709,7 +753,9 @@ public interface Statement extends Wrapper { * available. The driver will ignore the array if the SQL statement * is not an INSERT statement, or an SQL statement able to return * auto-generated keys (the list of such statements is vendor-specific). - * + *

    + * Note:This method cannot be called on a + * PreparedStatement or CallableStatement. * @param sql an SQL Data Manipulation Language (DML) statement, such as INSERT, UPDATE or * DELETE; or an SQL statement that returns nothing, * such as a DDL statement. @@ -721,10 +767,15 @@ public interface Statement extends Wrapper { * * @exception SQLException if a database access error occurs, * this method is called on a closed Statement, the SQL - * statement returns a ResultSet object, or the - * second argument supplied to this method is not an int array - * whose elements are valid column indexes + * statement returns a ResultSet object,the second argument + * supplied to this method is not an + * int array whose elements are valid column indexes, the method is called on a + * PreparedStatement or CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method + * @throws SQLTimeoutException when the driver has determined that the + * timeout value that was specified by the {@code setQueryTimeout} + * method has been exceeded and has at least attempted to cancel + * the currently running {@code Statement} * @since 1.4 */ int executeUpdate(String sql, int columnIndexes[]) throws SQLException; @@ -737,7 +788,9 @@ public interface Statement extends Wrapper { * available. The driver will ignore the array if the SQL statement * is not an INSERT statement, or an SQL statement able to return * auto-generated keys (the list of such statements is vendor-specific). - * + *

    + * Note:This method cannot be called on a + * PreparedStatement or CallableStatement. * @param sql an SQL Data Manipulation Language (DML) statement, such as INSERT, UPDATE or * DELETE; or an SQL statement that returns nothing, * such as a DDL statement. @@ -748,11 +801,15 @@ public interface Statement extends Wrapper { * that return nothing * @exception SQLException if a database access error occurs, * this method is called on a closed Statement, the SQL - * statement returns a ResultSet object, or the + * statement returns a ResultSet object, the * second argument supplied to this method is not a String array - * whose elements are valid column names - * + * whose elements are valid column names, the method is called on a + * PreparedStatement or CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method + * @throws SQLTimeoutException when the driver has determined that the + * timeout value that was specified by the {@code setQueryTimeout} + * method has been exceeded and has at least attempted to cancel + * the currently running {@code Statement} * @since 1.4 */ int executeUpdate(String sql, String columnNames[]) throws SQLException; @@ -776,7 +833,9 @@ public interface Statement extends Wrapper { * getResultSet or getUpdateCount * to retrieve the result, and getMoreResults to * move to any subsequent result(s). - * + *

    + *Note:This method cannot be called on a + * PreparedStatement or CallableStatement. * @param sql any SQL statement * @param autoGeneratedKeys a constant indicating whether auto-generated * keys should be made available for retrieval using the method @@ -787,12 +846,18 @@ public interface Statement extends Wrapper { * object; false if it is an update count or there are * no results * @exception SQLException if a database access error occurs, - * this method is called on a closed Statement or the second + * this method is called on a closed Statement, the second * parameter supplied to this method is not * Statement.RETURN_GENERATED_KEYS or - * Statement.NO_GENERATED_KEYS. + * Statement.NO_GENERATED_KEYS, + * the method is called on a + * PreparedStatement or CallableStatement * @exception SQLFeatureNotSupportedException if the JDBC driver does not support * this method with a constant of Statement.RETURN_GENERATED_KEYS + * @throws SQLTimeoutException when the driver has determined that the + * timeout value that was specified by the {@code setQueryTimeout} + * method has been exceeded and has at least attempted to cancel + * the currently running {@code Statement} * @see #getResultSet * @see #getUpdateCount * @see #getMoreResults @@ -823,7 +888,9 @@ public interface Statement extends Wrapper { * getResultSet or getUpdateCount * to retrieve the result, and getMoreResults to * move to any subsequent result(s). - * + *

    + * Note:This method cannot be called on a + * PreparedStatement or CallableStatement. * @param sql any SQL statement * @param columnIndexes an array of the indexes of the columns in the * inserted row that should be made available for retrieval by a @@ -832,10 +899,15 @@ public interface Statement extends Wrapper { * object; false if it is an update count or there * are no results * @exception SQLException if a database access error occurs, - * this method is called on a closed Statement or the + * this method is called on a closed Statement, the * elements in the int array passed to this method - * are not valid column indexes + * are not valid column indexes, the method is called on a + * PreparedStatement or CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method + * @throws SQLTimeoutException when the driver has determined that the + * timeout value that was specified by the {@code setQueryTimeout} + * method has been exceeded and has at least attempted to cancel + * the currently running {@code Statement} * @see #getResultSet * @see #getUpdateCount * @see #getMoreResults @@ -865,7 +937,9 @@ public interface Statement extends Wrapper { * getResultSet or getUpdateCount * to retrieve the result, and getMoreResults to * move to any subsequent result(s). - * + *

    + * Note:This method cannot be called on a + * PreparedStatement or CallableStatement. * @param sql any SQL statement * @param columnNames an array of the names of the columns in the inserted * row that should be made available for retrieval by a call to the @@ -874,10 +948,15 @@ public interface Statement extends Wrapper { * object; false if it is an update count or there * are no more results * @exception SQLException if a database access error occurs, - * this method is called on a closed Statement or the + * this method is called on a closed Statement,the * elements of the String array passed to this - * method are not valid column names + * method are not valid column names, the method is called on a + * PreparedStatement or CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method + * @throws SQLTimeoutException when the driver has determined that the + * timeout value that was specified by the {@code setQueryTimeout} + * method has been exceeded and has at least attempted to cancel + * the currently running {@code Statement} * @see #getResultSet * @see #getUpdateCount * @see #getMoreResults @@ -951,4 +1030,34 @@ public interface Statement extends Wrapper { boolean isPoolable() throws SQLException; + //--------------------------JDBC 4.1 ----------------------------- + + /** + * Specifies that this {@code Statement} will be closed when all its + * dependent result sets are closed. If execution of the {@code Statement} + * does not produce any result sets, this method has no effect. + *

    + * Note: Multiple calls to {@code closeOnCompletion} do + * not toggle the effect on this {@code Statement}. However, a call to + * {@code closeOnCompletion} does effect both the subsequent execution of + * statements, and statements that currently have open, dependent, + * result sets. + * + * @throws SQLException if this method is called on a closed + * {@code Statement} + * @since 1.7 + */ + public void closeOnCompletion() throws SQLException; + + /** + * Returns a value indicating whether this {@code Statement} will be + * closed when all dependent objects such as resultsets are closed. + * @return {@code true} if the {@code Statement} will be closed when all + * of its dependent objects are closed; {@code false} otherwise + * @throws SQLException if this method is called on a closed + * {@code Statement} + * @since 1.7 + */ + public boolean isCloseOnCompletion() throws SQLException; + } diff --git a/jdk/src/share/classes/java/sql/Timestamp.java b/jdk/src/share/classes/java/sql/Timestamp.java index 4852d8d33af..411c04eb19e 100644 --- a/jdk/src/share/classes/java/sql/Timestamp.java +++ b/jdk/src/share/classes/java/sql/Timestamp.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, 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 @@ -155,19 +155,26 @@ public class Timestamp extends java.util.Date { * Converts a String object in JDBC timestamp escape format to a * Timestamp value. * - * @param s timestamp in format yyyy-mm-dd hh:mm:ss[.f...]. The - * fractional seconds may be omitted. + * @param s timestamp in format yyyy-[m]m-[d]d hh:mm:ss[.f...]. The + * fractional seconds may be omitted. The leading zero for mm + * and dd may also be omitted. + * * @return corresponding Timestamp value * @exception java.lang.IllegalArgumentException if the given argument - * does not have the format yyyy-mm-dd hh:mm:ss[.f...] + * does not have the format yyyy-[m]m-[d]d hh:mm:ss[.f...] */ public static Timestamp valueOf(String s) { + final int YEAR_LENGTH = 4; + final int MONTH_LENGTH = 2; + final int DAY_LENGTH = 2; + final int MAX_MONTH = 12; + final int MAX_DAY = 31; String date_s; String time_s; String nanos_s; - int year; - int month; - int day; + int year = 0; + int month = 0; + int day = 0; int hour; int minute; int second; @@ -182,17 +189,9 @@ public class Timestamp extends java.util.Date { String zeros = "000000000"; String delimiterDate = "-"; String delimiterTime = ":"; - StringTokenizer stringTokeninzerDate; - StringTokenizer stringTokeninzerTime; if (s == null) throw new java.lang.IllegalArgumentException("null string"); - int counterD = 0; - int intDate[] = {4,2,2}; - - int counterT = 0; - int intTime[] = {2,2,12}; - // Split the string into date and time components s = s.trim(); dividingSpace = s.indexOf(' '); @@ -203,30 +202,6 @@ public class Timestamp extends java.util.Date { throw new java.lang.IllegalArgumentException(formatError); } - stringTokeninzerTime = new StringTokenizer(time_s, delimiterTime); - stringTokeninzerDate = new StringTokenizer(date_s, delimiterDate); - - while(stringTokeninzerDate.hasMoreTokens()) { - String tokenDate = stringTokeninzerDate.nextToken(); - if(tokenDate.length() != intDate[counterD] ) { - throw new java.lang.IllegalArgumentException(formatError); - } - counterD++; - } - - /* - //Commenting this portion out for checking of time - - while(stringTokeninzerTime.hasMoreTokens()) { - String tokenTime = stringTokeninzerTime.nextToken(); - - if (counterT < 2 && tokenTime.length() != intTime[counterT] ) { - throw new java.lang.IllegalArgumentException(formatError); - } - counterT++; - } - */ - // Parse the date firstDash = date_s.indexOf('-'); secondDash = date_s.indexOf('-', firstDash+1); @@ -239,14 +214,24 @@ public class Timestamp extends java.util.Date { period = time_s.indexOf('.', secondColon+1); // Convert the date - if ((firstDash > 0) && (secondDash > 0) && - (secondDash < date_s.length()-1)) { - year = Integer.parseInt(date_s.substring(0, firstDash)) - 1900; - month = - Integer.parseInt(date_s.substring - (firstDash+1, secondDash)) - 1; - day = Integer.parseInt(date_s.substring(secondDash+1)); - } else { + boolean parsedDate = false; + if ((firstDash > 0) && (secondDash > 0) && (secondDash < date_s.length() - 1)) { + String yyyy = date_s.substring(0, firstDash); + String mm = date_s.substring(firstDash + 1, secondDash); + String dd = date_s.substring(secondDash + 1); + if (yyyy.length() == YEAR_LENGTH && + (mm.length() >= 1 && mm.length() <= MONTH_LENGTH) && + (dd.length() >= 1 && dd.length() <= DAY_LENGTH)) { + year = Integer.parseInt(yyyy); + month = Integer.parseInt(mm); + day = Integer.parseInt(dd); + + if ((month >= 1 && month <= MAX_MONTH) && (day >= 1 && day <= MAX_DAY)) { + parsedDate = true; + } + } + } + if (! parsedDate) { throw new java.lang.IllegalArgumentException(formatError); } @@ -272,10 +257,10 @@ public class Timestamp extends java.util.Date { second = Integer.parseInt(time_s.substring(secondColon+1)); } } else { - throw new java.lang.IllegalArgumentException(); + throw new java.lang.IllegalArgumentException(formatError); } - return new Timestamp(year, month, day, hour, minute, second, a_nanos); + return new Timestamp(year - 1900, month - 1, day, hour, minute, second, a_nanos); } /** @@ -502,14 +487,10 @@ public class Timestamp extends java.util.Date { /** * Compares this Timestamp object to the given - * Date, which must be a Timestamp - * object. If the argument is not a Timestamp object, - * this method throws a ClassCastException object. - * (Timestamp objects are - * comparable only to other Timestamp objects.) + * Date object. * - * @param o the Date to be compared, which must be a - * Timestamp object + * @param o the Date to be compared to + * this Timestamp object * @return the value 0 if this Timestamp object * and the given object are equal; a value less than 0 * if this Timestamp object is before the given argument; diff --git a/jdk/src/share/classes/java/text/CalendarBuilder.java b/jdk/src/share/classes/java/text/CalendarBuilder.java new file mode 100644 index 00000000000..0b73cd2ba90 --- /dev/null +++ b/jdk/src/share/classes/java/text/CalendarBuilder.java @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 java.text; + +import java.util.Calendar; +import static java.util.GregorianCalendar.*; + +/** + * {@code CalendarBuilder} keeps field-value pairs for setting + * the calendar fields of the given {@code Calendar}. It has the + * {@link Calendar#FIELD_COUNT FIELD_COUNT}-th field for the week year + * support. Also {@code ISO_DAY_OF_WEEK} is used to specify + * {@code DAY_OF_WEEK} in the ISO day of week numbering. + * + *

    {@code CalendarBuilder} retains the semantic of the pseudo + * timestamp for fields. {@code CalendarBuilder} uses a single + * int array combining fields[] and stamp[] of {@code Calendar}. + * + * @author Masayoshi Okutsu + */ +class CalendarBuilder { + /* + * Pseudo time stamp constants used in java.util.Calendar + */ + private static final int UNSET = 0; + private static final int COMPUTED = 1; + private static final int MINIMUM_USER_STAMP = 2; + + private static final int MAX_FIELD = FIELD_COUNT + 1; + + public static final int WEEK_YEAR = FIELD_COUNT; + public static final int ISO_DAY_OF_WEEK = 1000; // pseudo field index + + // stamp[] (lower half) and field[] (upper half) combined + private final int[] field; + private int nextStamp; + private int maxFieldIndex; + + CalendarBuilder() { + field = new int[MAX_FIELD * 2]; + nextStamp = MINIMUM_USER_STAMP; + maxFieldIndex = -1; + } + + CalendarBuilder set(int index, int value) { + if (index == ISO_DAY_OF_WEEK) { + index = DAY_OF_WEEK; + value = toCalendarDayOfWeek(value); + } + field[index] = nextStamp++; + field[MAX_FIELD + index] = value; + if (index > maxFieldIndex && index < FIELD_COUNT) { + maxFieldIndex = index; + } + return this; + } + + CalendarBuilder addYear(int value) { + field[MAX_FIELD + YEAR] += value; + field[MAX_FIELD + WEEK_YEAR] += value; + return this; + } + + boolean isSet(int index) { + if (index == ISO_DAY_OF_WEEK) { + index = DAY_OF_WEEK; + } + return field[index] > UNSET; + } + + Calendar establish(Calendar cal) { + boolean weekDate = isSet(WEEK_YEAR) + && field[WEEK_YEAR] > field[YEAR]; + if (weekDate && !cal.isWeekDateSupported()) { + // Use YEAR instead + if (!isSet(YEAR)) { + set(YEAR, field[MAX_FIELD + WEEK_YEAR]); + } + weekDate = false; + } + + cal.clear(); + // Set the fields from the min stamp to the max stamp so that + // the field resolution works in the Calendar. + for (int stamp = MINIMUM_USER_STAMP; stamp < nextStamp; stamp++) { + for (int index = 0; index <= maxFieldIndex; index++) { + if (field[index] == stamp) { + cal.set(index, field[MAX_FIELD + index]); + break; + } + } + } + + if (weekDate) { + int weekOfYear = isSet(WEEK_OF_YEAR) ? field[MAX_FIELD + WEEK_OF_YEAR] : 1; + int dayOfWeek = isSet(DAY_OF_WEEK) ? + field[MAX_FIELD + DAY_OF_WEEK] : cal.getFirstDayOfWeek(); + if (!isValidDayOfWeek(dayOfWeek) && cal.isLenient()) { + if (dayOfWeek >= 8) { + dayOfWeek--; + weekOfYear += dayOfWeek / 7; + dayOfWeek = (dayOfWeek % 7) + 1; + } else { + while (dayOfWeek <= 0) { + dayOfWeek += 7; + weekOfYear--; + } + } + dayOfWeek = toCalendarDayOfWeek(dayOfWeek); + } + cal.setWeekDate(field[MAX_FIELD + WEEK_YEAR], weekOfYear, dayOfWeek); + } + return cal; + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("CalendarBuilder:["); + for (int i = 0; i < field.length; i++) { + if (isSet(i)) { + sb.append(i).append('=').append(field[MAX_FIELD + i]).append(','); + } + } + int lastIndex = sb.length() - 1; + if (sb.charAt(lastIndex) == ',') { + sb.setLength(lastIndex); + } + sb.append(']'); + return sb.toString(); + } + + static int toISODayOfWeek(int calendarDayOfWeek) { + return calendarDayOfWeek == SUNDAY ? 7 : calendarDayOfWeek - 1; + } + + static int toCalendarDayOfWeek(int isoDayOfWeek) { + if (!isValidDayOfWeek(isoDayOfWeek)) { + // adjust later for lenient mode + return isoDayOfWeek; + } + return isoDayOfWeek == 7 ? SUNDAY : isoDayOfWeek + 1; + } + + static boolean isValidDayOfWeek(int dayOfWeek) { + return dayOfWeek > 0 && dayOfWeek <= 7; + } +} diff --git a/jdk/src/share/classes/java/text/DateFormat.java b/jdk/src/share/classes/java/text/DateFormat.java index 8bc6d017dd8..fdd8eebea07 100644 --- a/jdk/src/share/classes/java/text/DateFormat.java +++ b/jdk/src/share/classes/java/text/DateFormat.java @@ -443,7 +443,7 @@ public abstract class DateFormat extends Format { */ public final static DateFormat getTimeInstance() { - return get(DEFAULT, 0, 1, Locale.getDefault()); + return get(DEFAULT, 0, 1, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -455,7 +455,7 @@ public abstract class DateFormat extends Format { */ public final static DateFormat getTimeInstance(int style) { - return get(style, 0, 1, Locale.getDefault()); + return get(style, 0, 1, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -479,7 +479,7 @@ public abstract class DateFormat extends Format { */ public final static DateFormat getDateInstance() { - return get(0, DEFAULT, 2, Locale.getDefault()); + return get(0, DEFAULT, 2, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -491,7 +491,7 @@ public abstract class DateFormat extends Format { */ public final static DateFormat getDateInstance(int style) { - return get(0, style, 2, Locale.getDefault()); + return get(0, style, 2, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -515,7 +515,7 @@ public abstract class DateFormat extends Format { */ public final static DateFormat getDateTimeInstance() { - return get(DEFAULT, DEFAULT, 3, Locale.getDefault()); + return get(DEFAULT, DEFAULT, 3, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -530,7 +530,7 @@ public abstract class DateFormat extends Format { public final static DateFormat getDateTimeInstance(int dateStyle, int timeStyle) { - return get(timeStyle, dateStyle, 3, Locale.getDefault()); + return get(timeStyle, dateStyle, 3, Locale.getDefault(Locale.Category.FORMAT)); } /** diff --git a/jdk/src/share/classes/java/text/DateFormatSymbols.java b/jdk/src/share/classes/java/text/DateFormatSymbols.java index 70b4955114a..4d6f08f4cac 100644 --- a/jdk/src/share/classes/java/text/DateFormatSymbols.java +++ b/jdk/src/share/classes/java/text/DateFormatSymbols.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, 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,7 +118,7 @@ public class DateFormatSymbols implements Serializable, Cloneable { */ public DateFormatSymbols() { - initializeData(Locale.getDefault()); + initializeData(Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -226,7 +226,30 @@ public class DateFormatSymbols implements Serializable, Cloneable { * Unlocalized date-time pattern characters. For example: 'y', 'd', etc. * All locales use the same these unlocalized pattern characters. */ - static final String patternChars = "GyMdkHmsSEDFwWahKzZ"; + static final String patternChars = "GyMdkHmsSEDFwWahKzZYuX"; + + static final int PATTERN_ERA = 0; // G + static final int PATTERN_YEAR = 1; // y + static final int PATTERN_MONTH = 2; // M + static final int PATTERN_DAY_OF_MONTH = 3; // d + static final int PATTERN_HOUR_OF_DAY1 = 4; // k + static final int PATTERN_HOUR_OF_DAY0 = 5; // H + static final int PATTERN_MINUTE = 6; // m + static final int PATTERN_SECOND = 7; // s + static final int PATTERN_MILLISECOND = 8; // S + static final int PATTERN_DAY_OF_WEEK = 9; // E + static final int PATTERN_DAY_OF_YEAR = 10; // D + static final int PATTERN_DAY_OF_WEEK_IN_MONTH = 11; // F + static final int PATTERN_WEEK_OF_YEAR = 12; // w + static final int PATTERN_WEEK_OF_MONTH = 13; // W + static final int PATTERN_AM_PM = 14; // a + static final int PATTERN_HOUR1 = 15; // h + static final int PATTERN_HOUR0 = 16; // K + static final int PATTERN_ZONE_NAME = 17; // z + static final int PATTERN_ZONE_VALUE = 18; // Z + static final int PATTERN_WEEK_YEAR = 19; // Y + static final int PATTERN_ISO_DAY_OF_WEEK = 20; // u + static final int PATTERN_ISO_ZONE = 21; // X /** * Localized date-time pattern characters. For example, a locale may @@ -282,7 +305,7 @@ public class DateFormatSymbols implements Serializable, Cloneable { * @since 1.6 */ public static final DateFormatSymbols getInstance() { - return getInstance(Locale.getDefault()); + return getInstance(Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -505,7 +528,7 @@ public class DateFormatSymbols implements Serializable, Cloneable { * @return the localized date-time pattern characters. */ public String getLocalPatternChars() { - return new String(localPatternChars); + return localPatternChars; } /** @@ -514,7 +537,8 @@ public class DateFormatSymbols implements Serializable, Cloneable { * pattern characters. */ public void setLocalPatternChars(String newLocalPatternChars) { - localPatternChars = new String(newLocalPatternChars); + // Call toString() to throw an NPE in case the argument is null + localPatternChars = newLocalPatternChars.toString(); } /** @@ -699,7 +723,7 @@ public class DateFormatSymbols implements Serializable, Cloneable { } else { dst.zoneStrings = null; } - dst.localPatternChars = new String (src.localPatternChars); + dst.localPatternChars = src.localPatternChars; } /** diff --git a/jdk/src/share/classes/java/text/DecimalFormat.java b/jdk/src/share/classes/java/text/DecimalFormat.java index 01bc8c5d02d..3a0d9b475bf 100644 --- a/jdk/src/share/classes/java/text/DecimalFormat.java +++ b/jdk/src/share/classes/java/text/DecimalFormat.java @@ -392,7 +392,7 @@ public class DecimalFormat extends NumberFormat { * @see java.text.NumberFormat#getPercentInstance */ public DecimalFormat() { - Locale def = Locale.getDefault(); + Locale def = Locale.getDefault(Locale.Category.FORMAT); // try to get the pattern from the cache String pattern = (String) cachedLocaleData.get(def); if (pattern == null) { /* cache miss */ @@ -430,7 +430,7 @@ public class DecimalFormat extends NumberFormat { */ public DecimalFormat(String pattern) { // Always applyPattern after the symbols are set - this.symbols = new DecimalFormatSymbols(Locale.getDefault()); + this.symbols = new DecimalFormatSymbols(Locale.getDefault(Locale.Category.FORMAT)); applyPattern(pattern, false); } diff --git a/jdk/src/share/classes/java/text/DecimalFormatSymbols.java b/jdk/src/share/classes/java/text/DecimalFormatSymbols.java index d13d61320af..b3c55b82c20 100644 --- a/jdk/src/share/classes/java/text/DecimalFormatSymbols.java +++ b/jdk/src/share/classes/java/text/DecimalFormatSymbols.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, 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,10 +43,10 @@ import java.io.ObjectInputStream; import java.io.Serializable; import java.text.spi.DecimalFormatSymbolsProvider; import java.util.Currency; -import java.util.Hashtable; import java.util.Locale; import java.util.ResourceBundle; -import java.util.spi.LocaleServiceProvider; +import java.util.concurrent.ConcurrentHashMap; + import sun.util.LocaleServiceProviderPool; import sun.util.resources.LocaleData; @@ -76,7 +76,7 @@ public class DecimalFormatSymbols implements Cloneable, Serializable { * {@link #getInstance(Locale) getInstance} method. */ public DecimalFormatSymbols() { - initialize( Locale.getDefault() ); + initialize( Locale.getDefault(Locale.Category.FORMAT) ); } /** @@ -125,7 +125,7 @@ public class DecimalFormatSymbols implements Cloneable, Serializable { * @since 1.6 */ public static final DecimalFormatSymbols getInstance() { - return getInstance(Locale.getDefault()); + return getInstance(Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -527,10 +527,17 @@ public class DecimalFormatSymbols implements Cloneable, Serializable { // get resource bundle data - try the cache first boolean needCacheUpdate = false; - Object[] data = (Object[]) cachedLocaleData.get(locale); + Object[] data = cachedLocaleData.get(locale); if (data == null) { /* cache miss */ + // When numbering system is thai (Locale's extension contains u-nu-thai), + // we read the data from th_TH_TH. + Locale lookupLocale = locale; + String numberType = locale.getUnicodeLocaleType("nu"); + if (numberType != null && numberType.equals("thai")) { + lookupLocale = new Locale("th", "TH", "TH"); + } data = new Object[3]; - ResourceBundle rb = LocaleData.getNumberFormatData(locale); + ResourceBundle rb = LocaleData.getNumberFormatData(lookupLocale); data[0] = rb.getStringArray("NumberElements"); needCacheUpdate = true; } @@ -586,7 +593,7 @@ public class DecimalFormatSymbols implements Cloneable, Serializable { monetarySeparator = decimalSeparator; if (needCacheUpdate) { - cachedLocaleData.put(locale, data); + cachedLocaleData.putIfAbsent(locale, data); } } @@ -806,7 +813,7 @@ public class DecimalFormatSymbols implements Cloneable, Serializable { * cache to hold the NumberElements and the Currency * of a Locale. */ - private static final Hashtable cachedLocaleData = new Hashtable(3); + private static final ConcurrentHashMap cachedLocaleData = new ConcurrentHashMap(3); /** * Obtains a DecimalFormatSymbols instance from a DecimalFormatSymbolsProvider diff --git a/jdk/src/share/classes/java/text/MessageFormat.java b/jdk/src/share/classes/java/text/MessageFormat.java index a0025985baa..ec5c7ff0d65 100644 --- a/jdk/src/share/classes/java/text/MessageFormat.java +++ b/jdk/src/share/classes/java/text/MessageFormat.java @@ -363,7 +363,7 @@ public class MessageFormat extends Format { * @exception IllegalArgumentException if the pattern is invalid */ public MessageFormat(String pattern) { - this.locale = Locale.getDefault(); + this.locale = Locale.getDefault(Locale.Category.FORMAT); applyPattern(pattern); } diff --git a/jdk/src/share/classes/java/text/NumberFormat.java b/jdk/src/share/classes/java/text/NumberFormat.java index fd4e92884fa..d80e4bcbd53 100644 --- a/jdk/src/share/classes/java/text/NumberFormat.java +++ b/jdk/src/share/classes/java/text/NumberFormat.java @@ -381,7 +381,7 @@ public abstract class NumberFormat extends Format { * {@link #getNumberInstance() getNumberInstance()}. */ public final static NumberFormat getInstance() { - return getInstance(Locale.getDefault(), NUMBERSTYLE); + return getInstance(Locale.getDefault(Locale.Category.FORMAT), NUMBERSTYLE); } /** @@ -397,7 +397,7 @@ public abstract class NumberFormat extends Format { * Returns a general-purpose number format for the current default locale. */ public final static NumberFormat getNumberInstance() { - return getInstance(Locale.getDefault(), NUMBERSTYLE); + return getInstance(Locale.getDefault(Locale.Category.FORMAT), NUMBERSTYLE); } /** @@ -420,7 +420,7 @@ public abstract class NumberFormat extends Format { * @since 1.4 */ public final static NumberFormat getIntegerInstance() { - return getInstance(Locale.getDefault(), INTEGERSTYLE); + return getInstance(Locale.getDefault(Locale.Category.FORMAT), INTEGERSTYLE); } /** @@ -443,7 +443,7 @@ public abstract class NumberFormat extends Format { * Returns a currency format for the current default locale. */ public final static NumberFormat getCurrencyInstance() { - return getInstance(Locale.getDefault(), CURRENCYSTYLE); + return getInstance(Locale.getDefault(Locale.Category.FORMAT), CURRENCYSTYLE); } /** @@ -457,7 +457,7 @@ public abstract class NumberFormat extends Format { * Returns a percentage format for the current default locale. */ public final static NumberFormat getPercentInstance() { - return getInstance(Locale.getDefault(), PERCENTSTYLE); + return getInstance(Locale.getDefault(Locale.Category.FORMAT), PERCENTSTYLE); } /** @@ -471,7 +471,7 @@ public abstract class NumberFormat extends Format { * Returns a scientific format for the current default locale. */ /*public*/ final static NumberFormat getScientificInstance() { - return getInstance(Locale.getDefault(), SCIENTIFICSTYLE); + return getInstance(Locale.getDefault(Locale.Category.FORMAT), SCIENTIFICSTYLE); } /** diff --git a/jdk/src/share/classes/java/text/SimpleDateFormat.java b/jdk/src/share/classes/java/text/SimpleDateFormat.java index 060e7bf642e..defd076ed21 100644 --- a/jdk/src/share/classes/java/text/SimpleDateFormat.java +++ b/jdk/src/share/classes/java/text/SimpleDateFormat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, 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 @@ -55,6 +55,8 @@ import sun.util.calendar.CalendarUtils; import sun.util.calendar.ZoneInfoFile; import sun.util.resources.LocaleData; +import static java.text.DateFormatSymbols.*; + /** * SimpleDateFormat is a concrete class for formatting and * parsing dates in a locale-sensitive manner. It allows for formatting @@ -108,40 +110,50 @@ import sun.util.resources.LocaleData; * Year * 1996; 96 * + * Y + * Week year + * Year + * 2009; 09 + * * M * Month in year * Month * July; Jul; 07 - * + * * w * Week in year * Number * 27 - * + * * W * Week in month * Number * 2 - * + * * D * Day in year * Number * 189 - * + * * d * Day in month * Number * 10 - * + * * F * Day of week in month * Number * 2 - * + * * E - * Day in week + * Day name in week * Text * Tuesday; Tue + * + * u + * Day number of week (1 = Monday, ..., 7 = Sunday) + * Number + * 1 * * a * Am/pm marker @@ -192,6 +204,11 @@ import sun.util.resources.LocaleData; * Time zone * RFC 822 time zone * -0800 + * + * X + * Time zone + * ISO 8601 time zone + * -08; -0800; -08:00 * * * Pattern letters are usually repeated, as their number determines the @@ -202,12 +219,12 @@ import sun.util.resources.LocaleData; * the full form is used; otherwise a short or abbreviated form * is used if available. * For parsing, both forms are accepted, independent of the number - * of pattern letters. + * of pattern letters.

  • *
  • Number: * For formatting, the number of pattern letters is the minimum * number of digits, and shorter numbers are zero-padded to this amount. * For parsing, the number of pattern letters is ignored unless - * it's needed to separate two adjacent fields. + * it's needed to separate two adjacent fields.

  • *
  • Year: * If the formatter's {@link #getCalendar() Calendar} is the Gregorian * calendar, the following rules are applied.
    @@ -239,11 +256,20 @@ import sun.util.resources.LocaleData; * letters is 4 or more, a calendar specific {@linkplain * Calendar#LONG long form} is used. Otherwise, a calendar * specific {@linkplain Calendar#SHORT short or abbreviated form} - * is used. + * is used.
    + *
    + * If week year {@code 'Y'} is specified and the {@linkplain + * #getCalendar() calendar} doesn't support any week + * years, the calendar year ({@code 'y'}) is used instead. The + * support of week years can be tested with a call to {@link + * DateFormat#getCalendar() getCalendar()}.{@link + * java.util.Calendar#isWeekDateSupported() + * isWeekDateSupported()}.

  • *
  • Month: * If the number of pattern letters is 3 or more, the month is * interpreted as text; otherwise, - * it is interpreted as a number. + * it is interpreted as a number.

  • *
  • General time zone: * Time zones are interpreted as text if they have * names. For time zones representing a GMT offset value, the @@ -264,9 +290,10 @@ import sun.util.resources.LocaleData; * 00 and 59. The format is locale independent and digits must be taken * from the Basic Latin block of the Unicode standard. *

    For parsing, RFC 822 time zones are also - * accepted. + * accepted.

  • *
  • RFC 822 time zone: * For formatting, the RFC 822 4-digit time zone format is used: + * *
      *     RFC822TimeZone:
      *             Sign TwoDigitHours Minutes
    @@ -274,8 +301,41 @@ import sun.util.resources.LocaleData;
      *             Digit Digit
    * TwoDigitHours must be between 00 and 23. Other definitions * are as for general time zones. + * *

    For parsing, general time zones are also * accepted. + *

  • ISO 8601 Time zone: + * The number of pattern letters designates the format for both formatting + * and parsing as follows: + *
    + *     ISO8601TimeZone:
    + *             OneLetterISO8601TimeZone
    + *             TwoLetterISO8601TimeZone
    + *             ThreeLetterISO8601TimeZone
    + *     OneLetterISO8601TimeZone:
    + *             Sign TwoDigitHours
    + *             {@code Z}
    + *     TwoLetterISO8601TimeZone:
    + *             Sign TwoDigitHours Minutes
    + *             {@code Z}
    + *     ThreeLetterISO8601TimeZone:
    + *             Sign TwoDigitHours {@code :} Minutes
    + *             {@code Z}
    + * Other definitions are as for general time zones or + * RFC 822 time zones. + * + *

    For formatting, if the offset value from GMT is 0, {@code "Z"} is + * produced. If the number of pattern letters is 1, any fraction of an hour + * is ignored. For example, if the pattern is {@code "X"} and the time zone is + * {@code "GMT+05:30"}, {@code "+05"} is produced. + * + *

    For parsing, {@code "Z"} is parsed as the UTC time zone designator. + * General time zones are not accepted. + * + *

    If the number of pattern letters is 4 or more, {@link + * IllegalArgumentException} is thrown when constructing a {@code + * SimpleDateFormat} or {@linkplain #applyPattern(String) applying a + * pattern}. * * SimpleDateFormat also supports localized date and time * pattern strings. In these strings, the pattern letters described above @@ -321,6 +381,12 @@ import sun.util.resources.LocaleData; * * "yyyy-MM-dd'T'HH:mm:ss.SSSZ" * 2001-07-04T12:08:56.235-0700 + * + * "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" + * 2001-07-04T12:08:56.235-07:00 + * + * "YYYY-'W'ww-u" + * 2001-W27-3 * * * @@ -474,7 +540,7 @@ public class SimpleDateFormat extends DateFormat { * class. */ public SimpleDateFormat() { - this(SHORT, SHORT, Locale.getDefault()); + this(SHORT, SHORT, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -490,7 +556,7 @@ public class SimpleDateFormat extends DateFormat { */ public SimpleDateFormat(String pattern) { - this(pattern, Locale.getDefault()); + this(pattern, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -535,7 +601,7 @@ public class SimpleDateFormat extends DateFormat { this.pattern = pattern; this.formatData = (DateFormatSymbols) formatSymbols.clone(); - this.locale = Locale.getDefault(); + this.locale = Locale.getDefault(Locale.Category.FORMAT); initializeCalendar(this.locale); initialize(this.locale); useDateFormatSymbols = true; @@ -815,6 +881,9 @@ public class SimpleDateFormat extends DateFormat { * Encodes the given tag and length and puts encoded char(s) into buffer. */ private static final void encode(int tag, int length, StringBuilder buffer) { + if (tag == PATTERN_ISO_ZONE && length >= 4) { + throw new IllegalArgumentException("invalid ISO 8601 format: length=" + length); + } if (length < 255) { buffer.append((char)(tag << 8 | length)); } else { @@ -877,7 +946,7 @@ public class SimpleDateFormat extends DateFormat { * @param pos the formatting position. On input: an alignment field, * if desired. On output: the offsets of the alignment field. * @return the formatted date-time string. - * @exception NullPointerException if the given date is null + * @exception NullPointerException if the given {@code date} is {@code null}. */ public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos) @@ -968,6 +1037,10 @@ public class SimpleDateFormat extends DateFormat { Calendar.DAY_OF_YEAR, Calendar.DAY_OF_WEEK_IN_MONTH, Calendar.WEEK_OF_YEAR, Calendar.WEEK_OF_MONTH, Calendar.AM_PM, Calendar.HOUR, Calendar.HOUR, Calendar.ZONE_OFFSET, + Calendar.ZONE_OFFSET, + // Pseudo Calendar fields + CalendarBuilder.WEEK_YEAR, + CalendarBuilder.ISO_DAY_OF_WEEK, Calendar.ZONE_OFFSET }; @@ -982,6 +1055,8 @@ public class SimpleDateFormat extends DateFormat { DateFormat.WEEK_OF_MONTH_FIELD, DateFormat.AM_PM_FIELD, DateFormat.HOUR1_FIELD, DateFormat.HOUR0_FIELD, DateFormat.TIMEZONE_FIELD, DateFormat.TIMEZONE_FIELD, + DateFormat.YEAR_FIELD, DateFormat.DAY_OF_WEEK_FIELD, + DateFormat.TIMEZONE_FIELD }; // Maps from DecimalFormatSymbols index to Field constant @@ -993,6 +1068,8 @@ public class SimpleDateFormat extends DateFormat { Field.WEEK_OF_YEAR, Field.WEEK_OF_MONTH, Field.AM_PM, Field.HOUR1, Field.HOUR0, Field.TIME_ZONE, Field.TIME_ZONE, + Field.YEAR, Field.DAY_OF_WEEK, + Field.TIME_ZONE }; /** @@ -1007,9 +1084,24 @@ public class SimpleDateFormat extends DateFormat { int beginOffset = buffer.length(); int field = PATTERN_INDEX_TO_CALENDAR_FIELD[patternCharIndex]; - int value = calendar.get(field); + int value; + if (field == CalendarBuilder.WEEK_YEAR) { + if (calendar.isWeekDateSupported()) { + value = calendar.getWeekYear(); + } else { + // use calendar year 'y' instead + patternCharIndex = PATTERN_YEAR; + field = PATTERN_INDEX_TO_CALENDAR_FIELD[patternCharIndex]; + value = calendar.get(field); + } + } else if (field == CalendarBuilder.ISO_DAY_OF_WEEK) { + value = CalendarBuilder.toISODayOfWeek(calendar.get(Calendar.DAY_OF_WEEK)); + } else { + value = calendar.get(field); + } + int style = (count >= 4) ? Calendar.LONG : Calendar.SHORT; - if (!useDateFormatSymbols) { + if (!useDateFormatSymbols && field != CalendarBuilder.ISO_DAY_OF_WEEK) { current = calendar.getDisplayName(field, style, locale); } @@ -1018,7 +1110,7 @@ public class SimpleDateFormat extends DateFormat { // zeroPaddingNumber() must be fixed. switch (patternCharIndex) { - case 0: // 'G' - ERA + case PATTERN_ERA: // 'G' if (useDateFormatSymbols) { String[] eras = formatData.getEras(); if (value < eras.length) @@ -1028,7 +1120,8 @@ public class SimpleDateFormat extends DateFormat { current = ""; break; - case 1: // 'y' - YEAR + case PATTERN_WEEK_YEAR: // 'Y' + case PATTERN_YEAR: // 'y' if (calendar instanceof GregorianCalendar) { if (count != 2) zeroPaddingNumber(value, count, maxIntCount, buffer); @@ -1042,7 +1135,7 @@ public class SimpleDateFormat extends DateFormat { } break; - case 2: // 'M' - MONTH + case PATTERN_MONTH: // 'M' if (useDateFormatSymbols) { String[] months; if (count >= 4) { @@ -1062,7 +1155,7 @@ public class SimpleDateFormat extends DateFormat { } break; - case 4: // 'k' - HOUR_OF_DAY: 1-based. eg, 23:59 + 1 hour =>> 24:59 + case PATTERN_HOUR_OF_DAY1: // 'k' 1-based. eg, 23:59 + 1 hour =>> 24:59 if (current == null) { if (value == 0) zeroPaddingNumber(calendar.getMaximum(Calendar.HOUR_OF_DAY)+1, @@ -1072,7 +1165,7 @@ public class SimpleDateFormat extends DateFormat { } break; - case 9: // 'E' - DAY_OF_WEEK + case PATTERN_DAY_OF_WEEK: // 'E' if (useDateFormatSymbols) { String[] weekdays; if (count >= 4) { @@ -1085,14 +1178,14 @@ public class SimpleDateFormat extends DateFormat { } break; - case 14: // 'a' - AM_PM + case PATTERN_AM_PM: // 'a' if (useDateFormatSymbols) { String[] ampm = formatData.getAmPmStrings(); current = ampm[value]; } break; - case 15: // 'h' - HOUR:1-based. eg, 11PM + 1 hour =>> 12 AM + case PATTERN_HOUR1: // 'h' 1-based. eg, 11PM + 1 hour =>> 12 AM if (current == null) { if (value == 0) zeroPaddingNumber(calendar.getLeastMaximum(Calendar.HOUR)+1, @@ -1102,7 +1195,7 @@ public class SimpleDateFormat extends DateFormat { } break; - case 17: // 'z' - ZONE_OFFSET + case PATTERN_ZONE_NAME: // 'z' if (current == null) { if (formatData.locale == null || formatData.isZoneStringsSet) { int zoneIndex = @@ -1129,7 +1222,7 @@ public class SimpleDateFormat extends DateFormat { } break; - case 18: // 'Z' - ZONE_OFFSET ("-/+hhmm" form) + case PATTERN_ZONE_VALUE: // 'Z' ("-/+hhmm" form) value = (calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET)) / 60000; @@ -1144,17 +1237,46 @@ public class SimpleDateFormat extends DateFormat { CalendarUtils.sprintf0d(buffer, num, width); break; + case PATTERN_ISO_ZONE: // 'X' + value = calendar.get(Calendar.ZONE_OFFSET) + + calendar.get(Calendar.DST_OFFSET); + + if (value == 0) { + buffer.append('Z'); + break; + } + + value /= 60000; + if (value >= 0) { + buffer.append('+'); + } else { + buffer.append('-'); + value = -value; + } + + CalendarUtils.sprintf0d(buffer, value / 60, 2); + if (count == 1) { + break; + } + + if (count == 3) { + buffer.append(':'); + } + CalendarUtils.sprintf0d(buffer, value % 60, 2); + break; + default: - // case 3: // 'd' - DATE - // case 5: // 'H' - HOUR_OF_DAY:0-based. eg, 23:59 + 1 hour =>> 00:59 - // case 6: // 'm' - MINUTE - // case 7: // 's' - SECOND - // case 8: // 'S' - MILLISECOND - // case 10: // 'D' - DAY_OF_YEAR - // case 11: // 'F' - DAY_OF_WEEK_IN_MONTH - // case 12: // 'w' - WEEK_OF_YEAR - // case 13: // 'W' - WEEK_OF_MONTH - // case 16: // 'K' - HOUR: 0-based. eg, 11PM + 1 hour =>> 0 AM + // case PATTERN_DAY_OF_MONTH: // 'd' + // case PATTERN_HOUR_OF_DAY0: // 'H' 0-based. eg, 23:59 + 1 hour =>> 00:59 + // case PATTERN_MINUTE: // 'm' + // case PATTERN_SECOND: // 's' + // case PATTERN_MILLISECOND: // 'S' + // case PATTERN_DAY_OF_YEAR: // 'D' + // case PATTERN_DAY_OF_WEEK_IN_MONTH: // 'F' + // case PATTERN_WEEK_OF_YEAR: // 'w' + // case PATTERN_WEEK_OF_MONTH: // 'W' + // case PATTERN_HOUR0: // 'K' eg, 11PM + 1 hour =>> 0 AM + // case PATTERN_ISO_DAY_OF_WEEK: // 'u' pseudo field, Monday = 1, ..., Sunday = 7 if (current == null) { zeroPaddingNumber(value, count, maxIntCount, buffer); } @@ -1264,10 +1386,9 @@ public class SimpleDateFormat extends DateFormat { int oldStart = start; int textLength = text.length(); - calendar.clear(); // Clears all the time fields - boolean[] ambiguousYear = {false}; + CalendarBuilder calb = new CalendarBuilder(); for (int i = 0; i < compiledPattern.length; ) { int tag = compiledPattern[i] >>> 8; @@ -1340,7 +1461,7 @@ public class SimpleDateFormat extends DateFormat { } start = subParse(text, start, tag, count, obeyCount, ambiguousYear, pos, - useFollowingMinusSignAsDelimiter); + useFollowingMinusSignAsDelimiter, calb); if (start < 0) { pos.index = oldStart; return null; @@ -1354,46 +1475,16 @@ public class SimpleDateFormat extends DateFormat { pos.index = start; - // This part is a problem: When we call parsedDate.after, we compute the time. - // Take the date April 3 2004 at 2:30 am. When this is first set up, the year - // will be wrong if we're parsing a 2-digit year pattern. It will be 1904. - // April 3 1904 is a Sunday (unlike 2004) so it is the DST onset day. 2:30 am - // is therefore an "impossible" time, since the time goes from 1:59 to 3:00 am - // on that day. It is therefore parsed out to fields as 3:30 am. Then we - // add 100 years, and get April 3 2004 at 3:30 am. Note that April 3 2004 is - // a Saturday, so it can have a 2:30 am -- and it should. [LIU] - /* - Date parsedDate = calendar.getTime(); - if( ambiguousYear[0] && !parsedDate.after(defaultCenturyStart) ) { - calendar.add(Calendar.YEAR, 100); - parsedDate = calendar.getTime(); - } - */ - // Because of the above condition, save off the fields in case we need to readjust. - // The procedure we use here is not particularly efficient, but there is no other - // way to do this given the API restrictions present in Calendar. We minimize - // inefficiency by only performing this computation when it might apply, that is, - // when the two-digit year is equal to the start year, and thus might fall at the - // front or the back of the default century. This only works because we adjust - // the year correctly to start with in other cases -- see subParse(). Date parsedDate; try { - if (ambiguousYear[0]) // If this is true then the two-digit year == the default start year - { - // We need a copy of the fields, and we need to avoid triggering a call to - // complete(), which will recalculate the fields. Since we can't access - // the fields[] array in Calendar, we clone the entire object. This will - // stop working if Calendar.clone() is ever rewritten to call complete(). - Calendar savedCalendar = (Calendar)calendar.clone(); - parsedDate = calendar.getTime(); - if (parsedDate.before(defaultCenturyStart)) - { - // We can't use add here because that does a complete() first. - savedCalendar.set(Calendar.YEAR, defaultCenturyStartYear + 100); - parsedDate = savedCalendar.getTime(); + parsedDate = calb.establish(calendar).getTime(); + // If the year value is ambiguous, + // then the two-digit year == the default start year + if (ambiguousYear[0]) { + if (parsedDate.before(defaultCenturyStart)) { + parsedDate = calb.addYear(100).establish(calendar).getTime(); } } - else parsedDate = calendar.getTime(); } // An IllegalArgumentException will be thrown by Calendar.getTime() // if any fields are out of range, e.g., MONTH == 17. @@ -1415,7 +1506,7 @@ public class SimpleDateFormat extends DateFormat { * @return the new start position if matching succeeded; a negative number * indicating matching failure, otherwise. */ - private int matchString(String text, int start, int field, String[] data) + private int matchString(String text, int start, int field, String[] data, CalendarBuilder calb) { int i = 0; int count = data.length; @@ -1441,7 +1532,7 @@ public class SimpleDateFormat extends DateFormat { } if (bestMatch >= 0) { - calendar.set(field, bestMatch); + calb.set(field, bestMatch); return start + bestMatchLength; } return -start; @@ -1452,7 +1543,8 @@ public class SimpleDateFormat extends DateFormat { * String[]). This method takes a Map instead of * String[]. */ - private int matchString(String text, int start, int field, Map data) { + private int matchString(String text, int start, int field, + Map data, CalendarBuilder calb) { if (data != null) { String bestMatch = null; @@ -1466,7 +1558,7 @@ public class SimpleDateFormat extends DateFormat { } if (bestMatch != null) { - calendar.set(field, data.get(bestMatch)); + calb.set(field, data.get(bestMatch)); return start + bestMatch.length(); } } @@ -1486,11 +1578,22 @@ public class SimpleDateFormat extends DateFormat { return -1; } + private boolean matchDSTString(String text, int start, int zoneIndex, int standardIndex, + String[][] zoneStrings) { + int index = standardIndex + 2; + String zoneName = zoneStrings[zoneIndex][index]; + if (text.regionMatches(true, start, + zoneName, 0, zoneName.length())) { + return true; + } + return false; + } + /** * find time zone 'text' matched zoneStrings and set to internal * calendar. */ - private int subParseZoneString(String text, int start) { + private int subParseZoneString(String text, int start, CalendarBuilder calb) { boolean useSameName = false; // true if standard and daylight time use the same abbreviation. TimeZone currentTimeZone = getTimeZone(); @@ -1524,6 +1627,7 @@ public class SimpleDateFormat extends DateFormat { } } } + if (tz == null) { int len = zoneStrings.length; for (int i = 0; i < len; i++) { @@ -1549,8 +1653,8 @@ public class SimpleDateFormat extends DateFormat { // determine the local time. (6645292) int dstAmount = (nameIndex >= 3) ? tz.getDSTSavings() : 0; if (!(useSameName || (nameIndex >= 3 && dstAmount == 0))) { - calendar.set(Calendar.ZONE_OFFSET, tz.getRawOffset()); - calendar.set(Calendar.DST_OFFSET, dstAmount); + calb.set(Calendar.ZONE_OFFSET, tz.getRawOffset()) + .set(Calendar.DST_OFFSET, dstAmount); } return (start + zoneNames[nameIndex].length()); } @@ -1577,11 +1681,15 @@ public class SimpleDateFormat extends DateFormat { private int subParse(String text, int start, int patternCharIndex, int count, boolean obeyCount, boolean[] ambiguousYear, ParsePosition origPos, - boolean useFollowingMinusSignAsDelimiter) { + boolean useFollowingMinusSignAsDelimiter, CalendarBuilder calb) { Number number = null; int value = 0; ParsePosition pos = new ParsePosition(0); pos.index = start; + if (patternCharIndex == PATTERN_WEEK_YEAR && !calendar.isWeekDateSupported()) { + // use calendar year 'y' instead + patternCharIndex = PATTERN_YEAR; + } int field = PATTERN_INDEX_TO_CALENDAR_FIELD[patternCharIndex]; // If there are any spaces here, skip over them. If we hit the end @@ -1602,10 +1710,11 @@ public class SimpleDateFormat extends DateFormat { // a number value. We handle further, more generic cases below. We need // to handle some of them here because some fields require extra processing on // the parsed value. - if (patternCharIndex == 4 /* HOUR_OF_DAY1_FIELD */ || - patternCharIndex == 15 /* HOUR1_FIELD */ || - (patternCharIndex == 2 /* MONTH_FIELD */ && count <= 2) || - patternCharIndex == 1 /* YEAR_FIELD */) { + if (patternCharIndex == PATTERN_HOUR_OF_DAY1 || + patternCharIndex == PATTERN_HOUR1 || + (patternCharIndex == PATTERN_MONTH && count <= 2) || + patternCharIndex == PATTERN_YEAR || + patternCharIndex == PATTERN_WEEK_YEAR) { // It would be good to unify this with the obeyCount logic below, // but that's going to be difficult. if (obeyCount) { @@ -1617,7 +1726,7 @@ public class SimpleDateFormat extends DateFormat { number = numberFormat.parse(text, pos); } if (number == null) { - if (patternCharIndex != 1 || calendar instanceof GregorianCalendar) { + if (patternCharIndex != PATTERN_YEAR || calendar instanceof GregorianCalendar) { break parsing; } } else { @@ -1638,33 +1747,34 @@ public class SimpleDateFormat extends DateFormat { int index; switch (patternCharIndex) { - case 0: // 'G' - ERA + case PATTERN_ERA: // 'G' if (useDateFormatSymbols) { - if ((index = matchString(text, start, Calendar.ERA, formatData.getEras())) > 0) { + if ((index = matchString(text, start, Calendar.ERA, formatData.getEras(), calb)) > 0) { return index; } } else { Map map = calendar.getDisplayNames(field, Calendar.ALL_STYLES, locale); - if ((index = matchString(text, start, field, map)) > 0) { + if ((index = matchString(text, start, field, map, calb)) > 0) { return index; } } break parsing; - case 1: // 'y' - YEAR + case PATTERN_WEEK_YEAR: // 'Y' + case PATTERN_YEAR: // 'y' if (!(calendar instanceof GregorianCalendar)) { // calendar might have text representations for year values, // such as "\u5143" in JapaneseImperialCalendar. int style = (count >= 4) ? Calendar.LONG : Calendar.SHORT; Map map = calendar.getDisplayNames(field, style, locale); if (map != null) { - if ((index = matchString(text, start, field, map)) > 0) { + if ((index = matchString(text, start, field, map, calb)) > 0) { return index; } } - calendar.set(field, value); + calb.set(field, value); return pos.index; } @@ -1676,8 +1786,7 @@ public class SimpleDateFormat extends DateFormat { // is treated literally: "2250", "-1", "1", "002". if (count <= 2 && (pos.index - start) == 2 && Character.isDigit(text.charAt(start)) - && Character.isDigit(text.charAt(start+1))) - { + && Character.isDigit(text.charAt(start+1))) { // Assume for example that the defaultCenturyStart is 6/18/1903. // This means that two-digit years will be forced into the range // 6/18/1903 to 6/17/2003. As a result, years 00, 01, and 02 @@ -1691,16 +1800,16 @@ public class SimpleDateFormat extends DateFormat { value += (defaultCenturyStartYear/100)*100 + (value < ambiguousTwoDigitYear ? 100 : 0); } - calendar.set(Calendar.YEAR, value); + calb.set(field, value); return pos.index; - case 2: // 'M' - MONTH + case PATTERN_MONTH: // 'M' if (count <= 2) // i.e., M or MM. { // Don't want to parse the month if it is a string // while pattern uses numeric style: M or MM. // [We computed 'value' above.] - calendar.set(Calendar.MONTH, value - 1); + calb.set(Calendar.MONTH, value - 1); return pos.index; } @@ -1710,50 +1819,50 @@ public class SimpleDateFormat extends DateFormat { // Try count == 4 first: int newStart = 0; if ((newStart = matchString(text, start, Calendar.MONTH, - formatData.getMonths())) > 0) { + formatData.getMonths(), calb)) > 0) { return newStart; } // count == 4 failed, now try count == 3 if ((index = matchString(text, start, Calendar.MONTH, - formatData.getShortMonths())) > 0) { + formatData.getShortMonths(), calb)) > 0) { return index; } } else { Map map = calendar.getDisplayNames(field, Calendar.ALL_STYLES, locale); - if ((index = matchString(text, start, field, map)) > 0) { + if ((index = matchString(text, start, field, map, calb)) > 0) { return index; } } break parsing; - case 4: // 'k' - HOUR_OF_DAY: 1-based. eg, 23:59 + 1 hour =>> 24:59 + case PATTERN_HOUR_OF_DAY1: // 'k' 1-based. eg, 23:59 + 1 hour =>> 24:59 // [We computed 'value' above.] if (value == calendar.getMaximum(Calendar.HOUR_OF_DAY)+1) value = 0; - calendar.set(Calendar.HOUR_OF_DAY, value); + calb.set(Calendar.HOUR_OF_DAY, value); return pos.index; - case 9: - { // 'E' - DAY_OF_WEEK + case PATTERN_DAY_OF_WEEK: // 'E' + { if (useDateFormatSymbols) { // Want to be able to parse both short and long forms. // Try count == 4 (DDDD) first: int newStart = 0; if ((newStart=matchString(text, start, Calendar.DAY_OF_WEEK, - formatData.getWeekdays())) > 0) { + formatData.getWeekdays(), calb)) > 0) { return newStart; } // DDDD failed, now try DDD if ((index = matchString(text, start, Calendar.DAY_OF_WEEK, - formatData.getShortWeekdays())) > 0) { + formatData.getShortWeekdays(), calb)) > 0) { return index; } } else { int[] styles = { Calendar.LONG, Calendar.SHORT }; for (int style : styles) { Map map = calendar.getDisplayNames(field, style, locale); - if ((index = matchString(text, start, field, map)) > 0) { + if ((index = matchString(text, start, field, map, calb)) > 0) { return index; } } @@ -1761,27 +1870,28 @@ public class SimpleDateFormat extends DateFormat { } break parsing; - case 14: // 'a' - AM_PM + case PATTERN_AM_PM: // 'a' if (useDateFormatSymbols) { - if ((index = matchString(text, start, Calendar.AM_PM, formatData.getAmPmStrings())) > 0) { + if ((index = matchString(text, start, Calendar.AM_PM, + formatData.getAmPmStrings(), calb)) > 0) { return index; } } else { Map map = calendar.getDisplayNames(field, Calendar.ALL_STYLES, locale); - if ((index = matchString(text, start, field, map)) > 0) { + if ((index = matchString(text, start, field, map, calb)) > 0) { return index; } } break parsing; - case 15: // 'h' - HOUR:1-based. eg, 11PM + 1 hour =>> 12 AM + case PATTERN_HOUR1: // 'h' 1-based. eg, 11PM + 1 hour =>> 12 AM // [We computed 'value' above.] if (value == calendar.getLeastMaximum(Calendar.HOUR)+1) value = 0; - calendar.set(Calendar.HOUR, value); + calb.set(Calendar.HOUR, value); return pos.index; - case 17: // 'z' - ZONE_OFFSET - case 18: // 'Z' - ZONE_OFFSET + case PATTERN_ZONE_NAME: // 'z' + case PATTERN_ZONE_VALUE: // 'Z' // First try to parse generic forms such as GMT-07:00. Do this first // in case localized TimeZoneNames contains the string "GMT" // for a zone; in that case, we don't want to match the first three @@ -1797,7 +1907,7 @@ public class SimpleDateFormat extends DateFormat { if ((text.length() - start) >= GMT.length() && text.regionMatches(true, start, GMT, 0, GMT.length())) { int num; - calendar.set(Calendar.DST_OFFSET, 0); + calb.set(Calendar.DST_OFFSET, 0); pos.index = start + GMT.length(); try { // try-catch for "GMT" only time zone string @@ -1810,8 +1920,8 @@ public class SimpleDateFormat extends DateFormat { } catch(StringIndexOutOfBoundsException e) {} - if (sign == 0) { /* "GMT" without offset */ - calendar.set(Calendar.ZONE_OFFSET, 0); + if (sign == 0) { /* "GMT" without offset */ + calb.set(Calendar.ZONE_OFFSET, 0); return pos.index; } @@ -1875,7 +1985,7 @@ public class SimpleDateFormat extends DateFormat { sign = -1; } else { // Try parsing the text as a time zone name (abbr). - int i = subParseZoneString(text, pos.index); + int i = subParseZoneString(text, pos.index, calb); if (i != 0) { return i; } @@ -1933,24 +2043,112 @@ public class SimpleDateFormat extends DateFormat { // arrive here if the form GMT+/-... or an RFC 822 form was seen. if (sign != 0) { offset *= MILLIS_PER_MINUTE * sign; - calendar.set(Calendar.ZONE_OFFSET, offset); - calendar.set(Calendar.DST_OFFSET, 0); + calb.set(Calendar.ZONE_OFFSET, offset).set(Calendar.DST_OFFSET, 0); + return ++pos.index; + } + } + break parsing; + + case PATTERN_ISO_ZONE: // 'X' + { + int sign = 0; + int offset = 0; + + iso8601: { + try { + char c = text.charAt(pos.index); + if (c == 'Z') { + calb.set(Calendar.ZONE_OFFSET, 0).set(Calendar.DST_OFFSET, 0); + return ++pos.index; + } + + // parse text as "+/-hh[[:]mm]" based on count + if (c == '+') { + sign = 1; + } else if (c == '-') { + sign = -1; + } + // Look for hh. + int hours = 0; + c = text.charAt(++pos.index); + if (c < '0' || c > '9') { /* must be from '0' to '9'. */ + break parsing; + } + hours = c - '0'; + c = text.charAt(++pos.index); + if (c < '0' || c > '9') { /* must be from '0' to '9'. */ + break parsing; + } + hours *= 10; + hours += c - '0'; + if (hours > 23) { + break parsing; + } + + if (count == 1) { // "X" + offset = hours * 60; + break iso8601; + } + + c = text.charAt(++pos.index); + // Skip ':' if "XXX" + if (c == ':') { + if (count == 2) { + break parsing; + } + c = text.charAt(++pos.index); + } else { + if (count == 3) { + // missing ':' + break parsing; + } + } + + // Look for mm. + int minutes = 0; + if (c < '0' || c > '9') { /* must be from '0' to '9'. */ + break parsing; + } + minutes = c - '0'; + c = text.charAt(++pos.index); + if (c < '0' || c > '9') { /* must be from '0' to '9'. */ + break parsing; + } + minutes *= 10; + minutes += c - '0'; + + if (minutes > 59) { + break parsing; + } + + offset = hours * 60 + minutes; + } catch (StringIndexOutOfBoundsException e) { + break parsing; + } + } + + // Do the final processing for both of the above cases. We only + // arrive here if the form GMT+/-... or an RFC 822 form was seen. + if (sign != 0) { + offset *= MILLIS_PER_MINUTE * sign; + calb.set(Calendar.ZONE_OFFSET, offset).set(Calendar.DST_OFFSET, 0); return ++pos.index; } } break parsing; default: - // case 3: // 'd' - DATE - // case 5: // 'H' - HOUR_OF_DAY:0-based. eg, 23:59 + 1 hour =>> 00:59 - // case 6: // 'm' - MINUTE - // case 7: // 's' - SECOND - // case 8: // 'S' - MILLISECOND - // case 10: // 'D' - DAY_OF_YEAR - // case 11: // 'F' - DAY_OF_WEEK_IN_MONTH - // case 12: // 'w' - WEEK_OF_YEAR - // case 13: // 'W' - WEEK_OF_MONTH - // case 16: // 'K' - HOUR: 0-based. eg, 11PM + 1 hour =>> 0 AM + // case PATTERN_DAY_OF_MONTH: // 'd' + // case PATTERN_HOUR_OF_DAY0: // 'H' 0-based. eg, 23:59 + 1 hour =>> 00:59 + // case PATTERN_MINUTE: // 'm' + // case PATTERN_SECOND: // 's' + // case PATTERN_MILLISECOND: // 'S' + // case PATTERN_DAY_OF_YEAR: // 'D' + // case PATTERN_DAY_OF_WEEK_IN_MONTH: // 'F' + // case PATTERN_WEEK_OF_YEAR: // 'w' + // case PATTERN_WEEK_OF_MONTH: // 'W' + // case PATTERN_HOUR0: // 'K' 0-based. eg, 11PM + 1 hour =>> 0 AM + // case PATTERN_ISO_DAY_OF_WEEK: // 'u' (pseudo field); // Handle "generic" fields if (obeyCount) { @@ -1973,7 +2171,7 @@ public class SimpleDateFormat extends DateFormat { pos.index--; } - calendar.set(field, value); + calb.set(field, value); return pos.index; } break parsing; @@ -2020,11 +2218,18 @@ public class SimpleDateFormat extends DateFormat { inQuote = true; else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { int ci = from.indexOf(c); - if (ci == -1) + if (ci >= 0) { + // patternChars is longer than localPatternChars due + // to serialization compatibility. The pattern letters + // unsupported by localPatternChars pass through. + if (ci < to.length()) { + c = to.charAt(ci); + } + } else { throw new IllegalArgumentException("Illegal pattern " + " character '" + c + "'"); - c = to.charAt(ci); + } } } result.append(c); @@ -2061,7 +2266,7 @@ public class SimpleDateFormat extends DateFormat { * @exception NullPointerException if the given pattern is null * @exception IllegalArgumentException if the given pattern is invalid */ - public void applyPattern (String pattern) + public void applyPattern(String pattern) { compiledPattern = compile(pattern); this.pattern = pattern; diff --git a/jdk/src/share/classes/java/util/Calendar.java b/jdk/src/share/classes/java/util/Calendar.java index 80a193687d0..7ec5e87ec39 100644 --- a/jdk/src/share/classes/java/util/Calendar.java +++ b/jdk/src/share/classes/java/util/Calendar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, 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 @@ -119,7 +119,7 @@ import sun.util.resources.LocaleData; * calculating its time or calendar field values if any out-of-range field * value has been set. * - *

    First Week

    + *

    First Week

    * * Calendar defines a locale-specific seven day week using two * parameters: the first day of the week and the minimal days in first week @@ -933,7 +933,7 @@ public abstract class Calendar implements Serializable, Cloneable, ComparableThe default implementation of this method returns {@code false}. + * + * @return {@code true} if this {@code Calendar} supports week dates; + * {@code false} otherwise. + * @see #getWeekYear() + * @see #setWeekDate(int,int,int) + * @see #getWeeksInWeekYear() + * @since 1.7 + */ + public boolean isWeekDateSupported() { + return false; + } + + /** + * Returns the week year represented by this {@code Calendar}. The + * week year is in sync with the week cycle. The {@linkplain + * #getFirstDayOfWeek() first day of the first week} is the first + * day of the week year. + * + *

    The default implementation of this method throws an + * {@link UnsupportedOperationException}. + * + * @return the week year of this {@code Calendar} + * @exception UnsupportedOperationException + * if any week year numbering isn't supported + * in this {@code Calendar}. + * @see #isWeekDateSupported() + * @see #getFirstDayOfWeek() + * @see #getMinimalDaysInFirstWeek() + * @since 1.7 + */ + public int getWeekYear() { + throw new UnsupportedOperationException(); + } + + /** + * Sets the date of this {@code Calendar} with the the given date + * specifiers - week year, week of year, and day of week. + * + *

    Unlike the {@code set} method, all of the calendar fields + * and {@code time} values are calculated upon return. + * + *

    If {@code weekOfYear} is out of the valid week-of-year range + * in {@code weekYear}, the {@code weekYear} and {@code + * weekOfYear} values are adjusted in lenient mode, or an {@code + * IllegalArgumentException} is thrown in non-lenient mode. + * + *

    The default implementation of this method throws an + * {@code UnsupportedOperationException}. + * + * @param weekYear the week year + * @param weekOfYear the week number based on {@code weekYear} + * @param dayOfWeek the day of week value: one of the constants + * for the {@link #DAY_OF_WEEK} field: {@link + * #SUNDAY}, ..., {@link #SATURDAY}. + * @exception IllegalArgumentException + * if any of the given date specifiers is invalid + * or any of the calendar fields are inconsistent + * with the given date specifiers in non-lenient mode + * @exception UnsupportedOperationException + * if any week year numbering isn't supported in this + * {@code Calendar}. + * @see #isWeekDateSupported() + * @see #getFirstDayOfWeek() + * @see #getMinimalDaysInFirstWeek() + * @since 1.7 + */ + public void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek) { + throw new UnsupportedOperationException(); + } + + /** + * Returns the number of weeks in the week year represented by this + * {@code Calendar}. + * + *

    The default implementation of this method throws an + * {@code UnsupportedOperationException}. + * + * @return the number of weeks in the week year. + * @exception UnsupportedOperationException + * if any week year numbering isn't supported in this + * {@code Calendar}. + * @see #WEEK_OF_YEAR + * @see #isWeekDateSupported() + * @see #getWeekYear() + * @see #getActualMaximum(int) + * @since 1.7 + */ + public int getWeeksInWeekYear() { + throw new UnsupportedOperationException(); + } + /** * Returns the minimum value for the given calendar field of this * Calendar instance. The minimum value is defined as diff --git a/jdk/src/share/classes/java/util/ConcurrentModificationException.java b/jdk/src/share/classes/java/util/ConcurrentModificationException.java index b96b451aab9..956fbdfaf62 100644 --- a/jdk/src/share/classes/java/util/ConcurrentModificationException.java +++ b/jdk/src/share/classes/java/util/ConcurrentModificationException.java @@ -49,9 +49,9 @@ package java.util; *

    Note that fail-fast behavior cannot be guaranteed as it is, generally * speaking, impossible to make any hard guarantees in the presence of * unsynchronized concurrent modification. Fail-fast operations - * throw ConcurrentModificationException on a best-effort basis. + * throw {@code ConcurrentModificationException} on a best-effort basis. * Therefore, it would be wrong to write a program that depended on this - * exception for its correctness: ConcurrentModificationException + * exception for its correctness: {@code ConcurrentModificationException} * should be used only to detect bugs. * * @author Josh Bloch @@ -77,7 +77,7 @@ public class ConcurrentModificationException extends RuntimeException { } /** - * Constructs a ConcurrentModificationException with the + * Constructs a {@code ConcurrentModificationException} with the * specified detail message. * * @param message the detail message pertaining to this exception. @@ -85,4 +85,39 @@ public class ConcurrentModificationException extends RuntimeException { public ConcurrentModificationException(String message) { super(message); } + + /** + * Constructs a new exception with the specified cause and a detail + * message of {@code (cause==null ? null : cause.toString())} (which + * typically contains the class and detail message of {@code cause}. + * + * @param cause the cause (which is saved for later retrieval by the + * {@link Throwable#getCause()} method). (A {@code null} value is + * permitted, and indicates that the cause is nonexistent or + * unknown.) + * @since 1.7 + */ + public ConcurrentModificationException(Throwable cause) { + super(cause); + } + + /** + * Constructs a new exception with the specified detail message and + * cause. + * + *

    Note that the detail message associated with cause is + * not automatically incorporated in this exception's detail + * message. + * + * @param message the detail message (which is saved for later retrieval + * by the {@link Throwable#getMessage()} method). + * @param cause the cause (which is saved for later retrieval by the + * {@link Throwable#getCause()} method). (A {@code null} value + * is permitted, and indicates that the cause is nonexistent or + * unknown.) + * @since 1.7 + */ + public ConcurrentModificationException(String message, Throwable cause) { + super(message, cause); + } } diff --git a/jdk/src/share/classes/java/util/Currency.java b/jdk/src/share/classes/java/util/Currency.java index f7cedbe56cd..daae561219f 100644 --- a/jdk/src/share/classes/java/util/Currency.java +++ b/jdk/src/share/classes/java/util/Currency.java @@ -452,7 +452,7 @@ public final class Currency implements Serializable { * @return the symbol of this currency for the default locale */ public String getSymbol() { - return getSymbol(Locale.getDefault()); + return getSymbol(Locale.getDefault(Locale.Category.DISPLAY)); } /** @@ -528,7 +528,7 @@ public final class Currency implements Serializable { * @since 1.7 */ public String getDisplayName() { - return getDisplayName(Locale.getDefault()); + return getDisplayName(Locale.getDefault(Locale.Category.DISPLAY)); } /** diff --git a/jdk/src/share/classes/java/util/Formatter.java b/jdk/src/share/classes/java/util/Formatter.java index 060ffd2768b..55fd610d39d 100644 --- a/jdk/src/share/classes/java/util/Formatter.java +++ b/jdk/src/share/classes/java/util/Formatter.java @@ -1866,7 +1866,7 @@ public final class Formatter implements Closeable, Flushable { * virtual machine. */ public Formatter() { - init(new StringBuilder(), Locale.getDefault()); + init(new StringBuilder(), Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -1882,7 +1882,7 @@ public final class Formatter implements Closeable, Flushable { public Formatter(Appendable a) { if (a == null) a = new StringBuilder(); - init(a, Locale.getDefault()); + init(a, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -1949,7 +1949,7 @@ public final class Formatter implements Closeable, Flushable { */ public Formatter(String fileName) throws FileNotFoundException { init(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName))), - Locale.getDefault()); + Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -1985,7 +1985,7 @@ public final class Formatter implements Closeable, Flushable { public Formatter(String fileName, String csn) throws FileNotFoundException, UnsupportedEncodingException { - this(fileName, csn, Locale.getDefault()); + this(fileName, csn, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -2057,7 +2057,7 @@ public final class Formatter implements Closeable, Flushable { */ public Formatter(File file) throws FileNotFoundException { init(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))), - Locale.getDefault()); + Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -2093,7 +2093,7 @@ public final class Formatter implements Closeable, Flushable { public Formatter(File file, String csn) throws FileNotFoundException, UnsupportedEncodingException { - this(file, csn, Locale.getDefault()); + this(file, csn, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -2152,7 +2152,7 @@ public final class Formatter implements Closeable, Flushable { public Formatter(PrintStream ps) { if (ps == null) throw new NullPointerException(); - init((Appendable)ps, Locale.getDefault()); + init((Appendable)ps, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -2171,7 +2171,7 @@ public final class Formatter implements Closeable, Flushable { */ public Formatter(OutputStream os) { init(new BufferedWriter(new OutputStreamWriter(os)), - Locale.getDefault()); + Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -2195,7 +2195,7 @@ public final class Formatter implements Closeable, Flushable { public Formatter(OutputStream os, String csn) throws UnsupportedEncodingException { - this(os, csn, Locale.getDefault()); + this(os, csn, Locale.getDefault(Locale.Category.FORMAT)); } /** diff --git a/jdk/src/share/classes/java/util/GregorianCalendar.java b/jdk/src/share/classes/java/util/GregorianCalendar.java index 9c0ff0d5cd4..75402f0ff65 100644 --- a/jdk/src/share/classes/java/util/GregorianCalendar.java +++ b/jdk/src/share/classes/java/util/GregorianCalendar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, 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 @@ -88,23 +88,49 @@ import sun.util.calendar.ZoneInfo; * adjustment may be made if desired for dates that are prior to the Gregorian * changeover and which fall between January 1 and March 24. * - *

    Values calculated for the WEEK_OF_YEAR field range from 1 to - * 53. Week 1 for a year is the earliest seven day period starting on - * getFirstDayOfWeek() that contains at least - * getMinimalDaysInFirstWeek() days from that year. It thus - * depends on the values of getMinimalDaysInFirstWeek(), - * getFirstDayOfWeek(), and the day of the week of January 1. - * Weeks between week 1 of one year and week 1 of the following year are - * numbered sequentially from 2 to 52 or 53 (as needed). - - *

    For example, January 1, 1998 was a Thursday. If - * getFirstDayOfWeek() is MONDAY and - * getMinimalDaysInFirstWeek() is 4 (these are the values - * reflecting ISO 8601 and many national standards), then week 1 of 1998 starts - * on December 29, 1997, and ends on January 4, 1998. If, however, - * getFirstDayOfWeek() is SUNDAY, then week 1 of 1998 - * starts on January 4, 1998, and ends on January 10, 1998; the first three days - * of 1998 then are part of week 53 of 1997. + *

    Week Of Year and Week Year

    + * + *

    Values calculated for the {@link Calendar#WEEK_OF_YEAR + * WEEK_OF_YEAR} field range from 1 to 53. The first week of a + * calendar year is the earliest seven day period starting on {@link + * Calendar#getFirstDayOfWeek() getFirstDayOfWeek()} that contains at + * least {@link Calendar#getMinimalDaysInFirstWeek() + * getMinimalDaysInFirstWeek()} days from that year. It thus depends + * on the values of {@code getMinimalDaysInFirstWeek()}, {@code + * getFirstDayOfWeek()}, and the day of the week of January 1. Weeks + * between week 1 of one year and week 1 of the following year + * (exclusive) are numbered sequentially from 2 to 52 or 53 (except + * for year(s) involved in the Julian-Gregorian transition). + * + *

    The {@code getFirstDayOfWeek()} and {@code + * getMinimalDaysInFirstWeek()} values are initialized using + * locale-dependent resources when constructing a {@code + * GregorianCalendar}. The week + * determination is compatible with the ISO 8601 standard when {@code + * getFirstDayOfWeek()} is {@code MONDAY} and {@code + * getMinimalDaysInFirstWeek()} is 4, which values are used in locales + * where the standard is preferred. These values can explicitly be set by + * calling {@link Calendar#setFirstDayOfWeek(int) setFirstDayOfWeek()} and + * {@link Calendar#setMinimalDaysInFirstWeek(int) + * setMinimalDaysInFirstWeek()}. + * + *

    A week year is in sync with a + * {@code WEEK_OF_YEAR} cycle. All weeks between the first and last + * weeks (inclusive) have the same week year value. + * Therefore, the first and last days of a week year may have + * different calendar year values. + * + *

    For example, January 1, 1998 is a Thursday. If {@code + * getFirstDayOfWeek()} is {@code MONDAY} and {@code + * getMinimalDaysInFirstWeek()} is 4 (ISO 8601 standard compatible + * setting), then week 1 of 1998 starts on December 29, 1997, and ends + * on January 4, 1998. The week year is 1998 for the last three days + * of calendar year 1997. If, however, {@code getFirstDayOfWeek()} is + * {@code SUNDAY}, then week 1 of 1998 starts on January 4, 1998, and + * ends on January 10, 1998; the first three days of 1998 then are + * part of week 53 of 1997 and their week year is 1997. + * + *

    Week Of Month

    * *

    Values calculated for the WEEK_OF_MONTH field range from 0 * to 6. Week 1 of a month (the days with WEEK_OF_MONTH = @@ -124,7 +150,9 @@ import sun.util.calendar.ZoneInfo; * getMinimalDaysInFirstWeek() is changed to 3, then January 1 * through January 3 have a WEEK_OF_MONTH of 1. * - *

    The clear methods set calendar field(s) + *

    Default Fields Values

    + * + *

    The clear method sets calendar field(s) * undefined. GregorianCalendar uses the following * default value for each calendar field if its value is undefined. * @@ -555,7 +583,7 @@ public class GregorianCalendar extends Calendar { * in the default time zone with the default locale. */ public GregorianCalendar() { - this(TimeZone.getDefaultRef(), Locale.getDefault()); + this(TimeZone.getDefaultRef(), Locale.getDefault(Locale.Category.FORMAT)); setZoneShared(true); } @@ -566,7 +594,7 @@ public class GregorianCalendar extends Calendar { * @param zone the given time zone. */ public GregorianCalendar(TimeZone zone) { - this(zone, Locale.getDefault()); + this(zone, Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -1625,6 +1653,13 @@ public class GregorianCalendar extends Calendar { * is 29 because 2004 is a leap year, and if the date of this * instance is February 1, 2005, it's 28. * + *

    This method calculates the maximum value of {@link + * Calendar#WEEK_OF_YEAR WEEK_OF_YEAR} based on the {@link + * Calendar#YEAR YEAR} (calendar year) value, not the week year. Call {@link + * #getWeeksInWeekYear()} to get the maximum value of {@code + * WEEK_OF_YEAR} in the week year of this {@code GregorianCalendar}. + * * @param field the calendar field * @return the maximum of the given field for the time value of * this GregorianCalendar @@ -1742,8 +1777,13 @@ public class GregorianCalendar extends Calendar { if (gc == this) { gc = (GregorianCalendar) gc.clone(); } - gc.set(DAY_OF_YEAR, getActualMaximum(DAY_OF_YEAR)); + int maxDayOfYear = getActualMaximum(DAY_OF_YEAR); + gc.set(DAY_OF_YEAR, maxDayOfYear); value = gc.get(WEEK_OF_YEAR); + if (internalGet(YEAR) != gc.getWeekYear()) { + gc.set(DAY_OF_YEAR, maxDayOfYear - 7); + value = gc.get(WEEK_OF_YEAR); + } } break; @@ -1934,46 +1974,241 @@ public class GregorianCalendar extends Calendar { } } -////////////////////// -// Proposed public API -////////////////////// + /** + * Returns {@code true} indicating this {@code GregorianCalendar} + * supports week dates. + * + * @return {@code true} (always) + * @see #getWeekYear() + * @see #setWeekDate(int,int,int) + * @see #getWeeksInWeekYear() + * @since 1.7 + */ + @Override + public final boolean isWeekDateSupported() { + return true; + } /** - * Returns the year that corresponds to the WEEK_OF_YEAR field. - * This may be one year before or after the Gregorian or Julian year stored - * in the YEAR field. For example, January 1, 1999 is considered - * Friday of week 53 of 1998 (if minimal days in first week is - * 2 or less, and the first day of the week is Sunday). Given - * these same settings, the ISO year of January 1, 1999 is - * 1998. + * Returns the week year represented by this + * {@code GregorianCalendar}. The dates in the weeks between 1 and the + * maximum week number of the week year have the same week year value + * that may be one year before or after the {@link Calendar#YEAR YEAR} + * (calendar year) value. * - *

    This method calls {@link Calendar#complete} before - * calculating the week-based year. + *

    This method calls {@link Calendar#complete()} before + * calculating the week year. * - * @return the year corresponding to the WEEK_OF_YEAR field, which - * may be one year before or after the YEAR field. - * @see #YEAR - * @see #WEEK_OF_YEAR + * @return the week year represented by this {@code GregorianCalendar}. + * If the {@link Calendar#ERA ERA} value is {@link #BC}, the year is + * represented by 0 or a negative number: BC 1 is 0, BC 2 + * is -1, BC 3 is -2, and so on. + * @throws IllegalArgumentException + * if any of the calendar fields is invalid in non-lenient mode. + * @see #isWeekDateSupported() + * @see #getWeeksInWeekYear() + * @see Calendar#getFirstDayOfWeek() + * @see Calendar#getMinimalDaysInFirstWeek() + * @since 1.7 */ - /* - public int getWeekBasedYear() { - complete(); - // TODO: Below doesn't work for gregorian cutover... - int weekOfYear = internalGet(WEEK_OF_YEAR); - int year = internalGet(YEAR); - if (internalGet(MONTH) == Calendar.JANUARY) { - if (weekOfYear >= 52) { + @Override + public int getWeekYear() { + int year = get(YEAR); // implicitly calls complete() + if (internalGetEra() == BCE) { + year = 1 - year; + } + + // Fast path for the Gregorian calendar years that are never + // affected by the Julian-Gregorian transition + if (year > gregorianCutoverYear + 1) { + int weekOfYear = internalGet(WEEK_OF_YEAR); + if (internalGet(MONTH) == JANUARY) { + if (weekOfYear >= 52) { + --year; + } + } else { + if (weekOfYear == 1) { + ++year; + } + } + return year; + } + + // General (slow) path + int dayOfYear = internalGet(DAY_OF_YEAR); + int maxDayOfYear = getActualMaximum(DAY_OF_YEAR); + int minimalDays = getMinimalDaysInFirstWeek(); + + // Quickly check the possibility of year adjustments before + // cloning this GregorianCalendar. + if (dayOfYear > minimalDays && dayOfYear < (maxDayOfYear - 6)) { + return year; + } + + // Create a clone to work on the calculation + GregorianCalendar cal = (GregorianCalendar) clone(); + cal.setLenient(true); + // Use GMT so that intermediate date calculations won't + // affect the time of day fields. + cal.setTimeZone(TimeZone.getTimeZone("GMT")); + // Go to the first day of the year, which is usually January 1. + cal.set(DAY_OF_YEAR, 1); + cal.complete(); + + // Get the first day of the first day-of-week in the year. + int delta = getFirstDayOfWeek() - cal.get(DAY_OF_WEEK); + if (delta != 0) { + if (delta < 0) { + delta += 7; + } + cal.add(DAY_OF_YEAR, delta); + } + int minDayOfYear = cal.get(DAY_OF_YEAR); + if (dayOfYear < minDayOfYear) { + if (minDayOfYear <= minimalDays) { --year; } } else { - if (weekOfYear == 1) { - ++year; + cal.set(YEAR, year + 1); + cal.set(DAY_OF_YEAR, 1); + cal.complete(); + int del = getFirstDayOfWeek() - cal.get(DAY_OF_WEEK); + if (del != 0) { + if (del < 0) { + del += 7; + } + cal.add(DAY_OF_YEAR, del); + } + minDayOfYear = cal.get(DAY_OF_YEAR) - 1; + if (minDayOfYear == 0) { + minDayOfYear = 7; + } + if (minDayOfYear >= minimalDays) { + int days = maxDayOfYear - dayOfYear + 1; + if (days <= (7 - minDayOfYear)) { + ++year; + } } } return year; } - */ + /** + * Sets this {@code GregorianCalendar} to the date given by the + * date specifiers - {@code weekYear}, + * {@code weekOfYear}, and {@code dayOfWeek}. {@code weekOfYear} + * follows the {@code WEEK_OF_YEAR} + * numbering. The {@code dayOfWeek} value must be one of the + * {@link Calendar#DAY_OF_WEEK DAY_OF_WEEK} values: {@link + * Calendar#SUNDAY SUNDAY} to {@link Calendar#SATURDAY SATURDAY}. + * + *

    Note that the numeric day-of-week representation differs from + * the ISO 8601 standard, and that the {@code weekOfYear} + * numbering is compatible with the standard when {@code + * getFirstDayOfWeek()} is {@code MONDAY} and {@code + * getMinimalDaysInFirstWeek()} is 4. + * + *

    Unlike the {@code set} method, all of the calendar fields + * and the instant of time value are calculated upon return. + * + *

    If {@code weekOfYear} is out of the valid week-of-year + * range in {@code weekYear}, the {@code weekYear} + * and {@code weekOfYear} values are adjusted in lenient + * mode, or an {@code IllegalArgumentException} is thrown in + * non-lenient mode. + * + * @param weekYear the week year + * @param weekOfYear the week number based on {@code weekYear} + * @param dayOfWeek the day of week value: one of the constants + * for the {@link #DAY_OF_WEEK DAY_OF_WEEK} field: + * {@link Calendar#SUNDAY SUNDAY}, ..., + * {@link Calendar#SATURDAY SATURDAY}. + * @exception IllegalArgumentException + * if any of the given date specifiers is invalid, + * or if any of the calendar fields are inconsistent + * with the given date specifiers in non-lenient mode + * @see GregorianCalendar#isWeekDateSupported() + * @see Calendar#getFirstDayOfWeek() + * @see Calendar#getMinimalDaysInFirstWeek() + * @since 1.7 + */ + @Override + public void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek) { + if (dayOfWeek < SUNDAY || dayOfWeek > SATURDAY) { + throw new IllegalArgumentException("invalid dayOfWeek: " + dayOfWeek); + } + + // To avoid changing the time of day fields by date + // calculations, use a clone with the GMT time zone. + GregorianCalendar gc = (GregorianCalendar) clone(); + gc.setLenient(true); + int era = gc.get(ERA); + gc.clear(); + gc.setTimeZone(TimeZone.getTimeZone("GMT")); + gc.set(ERA, era); + gc.set(YEAR, weekYear); + gc.set(WEEK_OF_YEAR, 1); + gc.set(DAY_OF_WEEK, getFirstDayOfWeek()); + int days = dayOfWeek - getFirstDayOfWeek(); + if (days < 0) { + days += 7; + } + days += 7 * (weekOfYear - 1); + if (days != 0) { + gc.add(DAY_OF_YEAR, days); + } else { + gc.complete(); + } + + if (!isLenient() && + (gc.getWeekYear() != weekYear + || gc.internalGet(WEEK_OF_YEAR) != weekOfYear + || gc.internalGet(DAY_OF_WEEK) != dayOfWeek)) { + throw new IllegalArgumentException(); + } + + set(ERA, gc.internalGet(ERA)); + set(YEAR, gc.internalGet(YEAR)); + set(MONTH, gc.internalGet(MONTH)); + set(DAY_OF_MONTH, gc.internalGet(DAY_OF_MONTH)); + + // to avoid throwing an IllegalArgumentException in + // non-lenient, set WEEK_OF_YEAR internally + internalSet(WEEK_OF_YEAR, weekOfYear); + complete(); + } + + /** + * Returns the number of weeks in the week year + * represented by this {@code GregorianCalendar}. + * + *

    For example, if this {@code GregorianCalendar}'s date is + * December 31, 2008 with the ISO + * 8601 compatible setting, this method will return 53 for the + * period: December 29, 2008 to January 3, 2010 while {@link + * #getActualMaximum(int) getActualMaximum(WEEK_OF_YEAR)} will return + * 52 for the period: December 31, 2007 to December 28, 2008. + * + * @return the number of weeks in the week year. + * @see Calendar#WEEK_OF_YEAR + * @see #getWeekYear() + * @see #getActualMaximum(int) + * @since 1.7 + */ + public int getWeeksInWeekYear() { + GregorianCalendar gc = getNormalizedCalendar(); + int weekYear = gc.getWeekYear(); + if (weekYear == gc.internalGet(YEAR)) { + return gc.getActualMaximum(WEEK_OF_YEAR); + } + + // Use the 2nd week for calculating the max of WEEK_OF_YEAR + if (gc == this) { + gc = (GregorianCalendar) gc.clone(); + } + gc.setWeekDate(weekYear, 2, internalGet(DAY_OF_WEEK)); + return gc.getActualMaximum(WEEK_OF_YEAR); + } ///////////////////////////// // Time => Fields computation @@ -2178,7 +2413,7 @@ public class GregorianCalendar extends Calendar { // If we are in the cutover year, we need some special handling. if (normalizedYear == cutoverYear) { // Need to take care of the "missing" days. - if (getCutoverCalendarSystem() == jcal) { + if (gregorianCutoverYearJulian <= gregorianCutoverYear) { // We need to find out where we are. The cutover // gap could even be more than one year. (One // year difference in ~48667 years.) @@ -2208,27 +2443,36 @@ public class GregorianCalendar extends Calendar { // December 31, which is not always true in // GregorianCalendar. long fixedDec31 = fixedDateJan1 - 1; - long prevJan1; + long prevJan1 = fixedDateJan1 - 365; if (normalizedYear > (cutoverYear + 1)) { - prevJan1 = fixedDateJan1 - 365; if (CalendarUtils.isGregorianLeapYear(normalizedYear - 1)) { --prevJan1; } + } else if (normalizedYear <= gregorianCutoverYearJulian) { + if (CalendarUtils.isJulianLeapYear(normalizedYear - 1)) { + --prevJan1; + } } else { BaseCalendar calForJan1 = calsys; - int prevYear = normalizedYear - 1; - if (prevYear == cutoverYear) { + //int prevYear = normalizedYear - 1; + int prevYear = getCalendarDate(fixedDec31).getNormalizedYear(); + if (prevYear == gregorianCutoverYear) { calForJan1 = getCutoverCalendarSystem(); - } - prevJan1 = calForJan1.getFixedDate(prevYear, - BaseCalendar.JANUARY, - 1, - null); - while (prevJan1 > fixedDec31) { - prevJan1 = getJulianCalendarSystem().getFixedDate(--prevYear, - BaseCalendar.JANUARY, - 1, - null); + if (calForJan1 == jcal) { + prevJan1 = calForJan1.getFixedDate(prevYear, + BaseCalendar.JANUARY, + 1, + null); + } else { + prevJan1 = gregorianCutoverDate; + calForJan1 = gcal; + } + } else if (prevYear <= gregorianCutoverYearJulian) { + calForJan1 = getJulianCalendarSystem(); + prevJan1 = calForJan1.getFixedDate(prevYear, + BaseCalendar.JANUARY, + 1, + null); } } weekOfYear = getWeekNumber(prevJan1, fixedDec31); @@ -2260,14 +2504,20 @@ public class GregorianCalendar extends Calendar { if (nextYear == gregorianCutoverYear) { calForJan1 = getCutoverCalendarSystem(); } - long nextJan1 = calForJan1.getFixedDate(nextYear, - BaseCalendar.JANUARY, - 1, - null); - if (nextJan1 < fixedDate) { + + long nextJan1; + if (nextYear > gregorianCutoverYear + || gregorianCutoverYearJulian == gregorianCutoverYear + || nextYear == gregorianCutoverYearJulian) { + nextJan1 = calForJan1.getFixedDate(nextYear, + BaseCalendar.JANUARY, + 1, + null); + } else { nextJan1 = gregorianCutoverDate; calForJan1 = gcal; } + long nextJan1st = calForJan1.getDayOfWeekDateOnOrBefore(nextJan1 + 6, getFirstDayOfWeek()); int ndays = (int)(nextJan1st - nextJan1); @@ -2409,10 +2659,24 @@ public class GregorianCalendar extends Calendar { } gfd = jfd; } else { - gfd = fixedDate + getFixedDate(gcal, year, fieldMask); jfd = fixedDate + getFixedDate(getJulianCalendarSystem(), year, fieldMask); + gfd = fixedDate + getFixedDate(gcal, year, fieldMask); } + // Now we have to determine which calendar date it is. + + // If the date is relative from the beginning of the year + // in the Julian calendar, then use jfd; + if (isFieldSet(fieldMask, DAY_OF_YEAR) || isFieldSet(fieldMask, WEEK_OF_YEAR)) { + if (gregorianCutoverYear == gregorianCutoverYearJulian) { + fixedDate = jfd; + break calculateFixedDate; + } else if (year == gregorianCutoverYear) { + fixedDate = gfd; + break calculateFixedDate; + } + } + if (gfd >= gregorianCutoverDate) { if (jfd >= gregorianCutoverDate) { fixedDate = gfd; @@ -2494,9 +2758,10 @@ public class GregorianCalendar extends Calendar { continue; } if (originalFields[field] != internalGet(field)) { + String s = originalFields[field] + " -> " + internalGet(field); // Restore the original field values System.arraycopy(originalFields, 0, fields, 0, fields.length); - throw new IllegalArgumentException(getFieldName(field)); + throw new IllegalArgumentException(getFieldName(field) + ": " + s); } } } @@ -2669,9 +2934,7 @@ public class GregorianCalendar extends Calendar { * method returns Gregorian. Otherwise, Julian. */ private BaseCalendar getCutoverCalendarSystem() { - CalendarDate date = getGregorianCutoverDate(); - if (date.getMonth() == BaseCalendar.JANUARY - && date.getDayOfMonth() == 1) { + if (gregorianCutoverYearJulian < gregorianCutoverYear) { return gcal; } return getJulianCalendarSystem(); diff --git a/jdk/src/share/classes/java/util/IllformedLocaleException.java b/jdk/src/share/classes/java/util/IllformedLocaleException.java new file mode 100644 index 00000000000..5c0c4da1314 --- /dev/null +++ b/jdk/src/share/classes/java/util/IllformedLocaleException.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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. + */ + +/* + ******************************************************************************* + * Copyright (C) 2009-2010, International Business Machines Corporation and * + * others. All Rights Reserved. * + ******************************************************************************* + */ + +package java.util; + +/** + * Thrown by methods in {@link Locale} and {@link Locale.Builder} to + * indicate that an argument is not a well-formed BCP 47 tag. + * + * @see Locale + * @since 1.7 + */ +public class IllformedLocaleException extends RuntimeException { + + private static final long serialVersionUID = -5245986824925681401L; + + private int _errIdx = -1; + + /** + * Constructs a new IllformedLocaleException with no + * detail message and -1 as the error index. + */ + public IllformedLocaleException() { + super(); + } + + /** + * Constructs a new IllformedLocaleException with the + * given message and -1 as the error index. + * + * @param message the message + */ + public IllformedLocaleException(String message) { + super(message); + } + + /** + * Constructs a new IllformedLocaleException with the + * given message and the error index. The error index is the approximate + * offset from the start of the ill-formed value to the point where the + * parse first detected an error. A negative error index value indicates + * either the error index is not applicable or unknown. + * + * @param message the message + * @param errorIndex the index + */ + public IllformedLocaleException(String message, int errorIndex) { + super(message + ((errorIndex < 0) ? "" : " [at index " + errorIndex + "]")); + _errIdx = errorIndex; + } + + /** + * Returns the index where the error was found. A negative value indicates + * either the error index is not applicable or unknown. + * + * @return the error index + */ + public int getErrorIndex() { + return _errIdx; + } +} diff --git a/jdk/src/share/classes/java/util/Locale.java b/jdk/src/share/classes/java/util/Locale.java index c3137f6dd16..49b85866ed3 100644 --- a/jdk/src/share/classes/java/util/Locale.java +++ b/jdk/src/share/classes/java/util/Locale.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, 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 @@ -40,86 +40,240 @@ package java.util; -import java.io.*; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.ObjectStreamField; +import java.io.Serializable; import java.security.AccessController; import java.text.MessageFormat; -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; import java.util.spi.LocaleNameProvider; -import java.util.spi.LocaleServiceProvider; + import sun.security.action.GetPropertyAction; import sun.util.LocaleServiceProviderPool; +import sun.util.locale.AsciiUtil; +import sun.util.locale.BaseLocale; +import sun.util.locale.InternalLocaleBuilder; +import sun.util.locale.LanguageTag; +import sun.util.locale.LocaleExtensions; +import sun.util.locale.LocaleObjectCache; +import sun.util.locale.LocaleSyntaxException; +import sun.util.locale.ParseStatus; +import sun.util.locale.UnicodeLocaleExtension; import sun.util.resources.LocaleData; import sun.util.resources.OpenListResourceBundle; /** - * * A Locale object represents a specific geographical, political, * or cultural region. An operation that requires a Locale to perform * its task is called locale-sensitive and uses the Locale * to tailor information for the user. For example, displaying a number - * is a locale-sensitive operation--the number should be formatted - * according to the customs/conventions of the user's native country, + * is a locale-sensitive operation— the number should be formatted + * according to the customs and conventions of the user's native country, * region, or culture. * - *

    - * Create a Locale object using the constructors in this class: + *

    The Locale class implements identifiers + * interchangeable with BCP 47 (IETF BCP 47, "Tags for Identifying + * Languages"), with support for the LDML (UTS#35, "Unicode Locale + * Data Markup Language") BCP 47-compatible extensions for locale data + * exchange. + * + *

    A Locale object logically consists of the fields + * described below. + * + *

    + *
    language
    + * + *
    ISO 639 alpha-2 or alpha-3 language code, or registered + * language subtags up to 8 alpha letters (for future enhancements). + * When a language has both an alpha-2 code and an alpha-3 code, the + * alpha-2 code must be used. You can find a full list of valid + * language codes in the IANA Language Subtag Registry (search for + * "Type: language"). The language field is case insensitive, but + * Locale always canonicalizes to lower case.

    + * + *
    Well-formed language values have the form + * [a-zA-Z]{2,8}. Note that this is not the the full + * BCP47 language production, since it excludes extlang. They are + * not needed since modern three-letter language codes replace + * them.

    + * + *
    Example: "en" (English), "ja" (Japanese), "kok" (Konkani)

    + * + *
    script
    + * + *
    ISO 15924 alpha-4 script code. You can find a full list of + * valid script codes in the IANA Language Subtag Registry (search + * for "Type: script"). The script field is case insensitive, but + * Locale always canonicalizes to title case (the first + * letter is upper case and the rest of the letters are lower + * case).

    + * + *
    Well-formed script values have the form + * [a-zA-Z]{4}

    + * + *
    Example: "Latn" (Latin), "Cyrl" (Cyrillic)

    + * + *
    country (region)
    + * + *
    ISO 3166 alpha-2 country code or UN M.49 numeric-3 area code. + * You can find a full list of valid country and region codes in the + * IANA Language Subtag Registry (search for "Type: region"). The + * country (region) field is case insensitive, but + * Locale always canonicalizes to upper case.

    + * + *
    Well-formed country/region values have + * the form [a-zA-Z]{2} | [0-9]{3}

    + * + *
    Example: "US" (United States), "FR" (France), "029" + * (Caribbean)

    + * + *
    variant
    + * + *
    Any arbitrary value used to indicate a variation of a + * Locale. Where there are two or more variant values + * each indicating its own semantics, these values should be ordered + * by importance, with most important first, separated by + * underscore('_'). The variant field is case sensitive.

    + * + *
    Note: IETF BCP 47 places syntactic restrictions on variant + * subtags. Also BCP 47 subtags are strictly used to indicate + * additional variations that define a language or its dialects that + * are not covered by any combinations of language, script and + * region subtags. You can find a full list of valid variant codes + * in the IANA Language Subtag Registry (search for "Type: variant"). + * + *

    However, the variant field in Locale has + * historically been used for any kind of variation, not just + * language variations. For example, some supported variants + * available in Java SE Runtime Environments indicate alternative + * cultural behaviors such as calendar type or number script. In + * BCP 47 this kind of information, which does not identify the + * language, is supported by extension subtags or private use + * subtags.


    + * + *
    Well-formed variant values have the form SUBTAG + * (('_'|'-') SUBTAG)* where SUBTAG = + * [0-9][0-9a-zA-Z]{3} | [0-9a-zA-Z]{5,8}. (Note: BCP 47 only + * uses hyphen ('-') as a delimiter, this is more lenient).

    + * + *
    Example: "polyton" (Polytonic Greek), "POSIX"

    + * + *
    extensions
    + * + *
    A map from single character keys to string values, indicating + * extensions apart from language identification. The extensions in + * Locale implement the semantics and syntax of BCP 47 + * extension subtags and private use subtags. The extensions are + * case insensitive, but Locale canonicalizes all + * extension keys and values to lower case. Note that extensions + * cannot have empty values.

    + * + *
    Well-formed keys are single characters from the set + * [0-9a-zA-Z]. Well-formed values have the form + * SUBTAG ('-' SUBTAG)* where for the key 'x' + * SUBTAG = [0-9a-zA-Z]{1,8} and for other keys + * SUBTAG = [0-9a-zA-Z]{2,8} (that is, 'x' allows + * single-character subtags).

    + * + *
    Example: key="u"/value="ca-japanese" (Japanese Calendar), + * key="x"/value="java-1-7"
    + *
    + * + * Note: Although BCP 47 requires field values to be registered + * in the IANA Language Subtag Registry, the Locale class + * does not provide any validation features. The Builder + * only checks if an individual field satisfies the syntactic + * requirement (is well-formed), but does not validate the value + * itself. See {@link Builder} for details. + * + *

    Unicode locale/language extension

    + * + *

    UTS#35, "Unicode Locale Data Markup Language" defines optional + * attributes and keywords to override or refine the default behavior + * associated with a locale. A keyword is represented by a pair of + * key and type. For example, "nu-thai" indicates that Thai local + * digits (value:"thai") should be used for formatting numbers + * (key:"nu"). + * + *

    The keywords are mapped to a BCP 47 extension value using the + * extension key 'u' ({@link #UNICODE_LOCALE_EXTENSION}). The above + * example, "nu-thai", becomes the extension "u-nu-thai".code + * + *

    Thus, when a Locale object contains Unicode locale + * attributes and keywords, + * getExtension(UNICODE_LOCALE_EXTENSION) will return a + * String representing this information, for example, "nu-thai". The + * Locale class also provides {@link + * #getUnicodeLocaleAttributes}, {@link #getUnicodeLocaleKeys}, and + * {@link #getUnicodeLocaleType} which allow you to access Unicode + * locale attributes and key/type pairs directly. When represented as + * a string, the Unicode Locale Extension lists attributes + * alphabetically, followed by key/type sequences with keys listed + * alphabetically (the order of subtags comprising a key's type is + * fixed when the type is defined) + * + *

    A well-formed locale key has the form + * [0-9a-zA-Z]{2}. A well-formed locale type has the + * form "" | [0-9a-zA-Z]{3,8} ('-' [0-9a-zA-Z]{3,8})* (it + * can be empty, or a series of subtags 3-8 alphanums in length). A + * well-formed locale attribute has the form + * [0-9a-zA-Z]{3,8} (it is a single subtag with the same + * form as a locale type subtag). + * + *

    The Unicode locale extension specifies optional behavior in + * locale-sensitive services. Although the LDML specification defines + * various keys and values, actual locale-sensitive service + * implementations in a Java Runtime Environment might not support any + * particular Unicode locale attributes or key/type pairs. + * + *

    Creating a Locale

    + * + *

    There are several different ways to create a Locale + * object. + * + *

    Builder
    + * + *

    Using {@link Builder} you can construct a Locale object + * that conforms to BCP 47 syntax. + * + *

    Constructors
    + * + *

    The Locale class provides three constructors: *

    *
    - * Locale(String language)
    - * Locale(String language, String country)
    - * Locale(String language, String country, String variant)
    + *     {@link #Locale(String language)}
    + *     {@link #Locale(String language, String country)}
    + *     {@link #Locale(String language, String country, String variant)}
      * 
    *
    - * The language argument is a valid ISO Language Code. - * These codes are the lower-case, two-letter codes as defined by ISO-639. - * You can find a full list of these codes at a number of sites, such as: - *
    - * http://www.loc.gov/standards/iso639-2/php/English_list.php + * These constructors allow you to create a Locale object + * with language, country and variant, but you cannot specify + * script or extensions. * - *

    - * The country argument is a valid ISO Country Code. These - * codes are the upper-case, two-letter codes as defined by ISO-3166. - * You can find a full list of these codes at a number of sites, such as: - *
    - * http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html + *

    Factory Methods
    * - *

    - * The variant argument is a vendor or browser-specific code. - * For example, use WIN for Windows, MAC for Macintosh, and POSIX for POSIX. - * Where there are two variants, separate them with an underscore, and - * put the most important one first. For example, a Traditional Spanish collation - * might construct a locale with parameters for language, country and variant as: - * "es", "ES", "Traditional_WIN". + *

    The method {@link #forLanguageTag} creates a Locale + * object for a well-formed BCP 47 language tag. * - *

    - * Because a Locale object is just an identifier for a region, - * no validity check is performed when you construct a Locale. - * If you want to see whether particular resources are available for the - * Locale you construct, you must query those resources. For - * example, ask the NumberFormat for the locales it supports - * using its getAvailableLocales method. - *
    Note: When you ask for a resource for a particular - * locale, you get back the best available match, not necessarily - * precisely what you asked for. For more information, look at - * {@link ResourceBundle}. + *

    Locale Constants
    * - *

    - * The Locale class provides a number of convenient constants + *

    The Locale class provides a number of convenient constants * that you can use to create Locale objects for commonly used * locales. For example, the following creates a Locale object * for the United States: *

    *
    - * Locale.US
    + *     Locale.US
      * 
    *
    * - *

    - * Once you've created a Locale you can query it for information about - * itself. Use getCountry to get the ISO Country Code and - * getLanguage to get the ISO Language Code. You can - * use getDisplayCountry to get the + *

    Use of Locale

    + * + *

    Once you've created a Locale you can query it for information + * about itself. Use getCountry to get the country (or region) + * code and getLanguage to get the language code. + * You can use getDisplayCountry to get the * name of the country suitable for displaying to the user. Similarly, * you can use getDisplayLanguage to get the name of * the language suitable for displaying to the user. Interestingly, @@ -127,28 +281,27 @@ import sun.util.resources.OpenListResourceBundle; * and have two versions: one that uses the default locale and one * that uses the locale specified as an argument. * - *

    - * The Java Platform provides a number of classes that perform locale-sensitive + *

    The Java Platform provides a number of classes that perform locale-sensitive * operations. For example, the NumberFormat class formats - * numbers, currency, or percentages in a locale-sensitive manner. Classes - * such as NumberFormat have a number of convenience methods + * numbers, currency, and percentages in a locale-sensitive manner. Classes + * such as NumberFormat have several convenience methods * for creating a default object of that type. For example, the * NumberFormat class provides these three convenience methods * for creating a default NumberFormat object: *

    *
    - * NumberFormat.getInstance()
    - * NumberFormat.getCurrencyInstance()
    - * NumberFormat.getPercentInstance()
    + *     NumberFormat.getInstance()
    + *     NumberFormat.getCurrencyInstance()
    + *     NumberFormat.getPercentInstance()
      * 
    *
    - * These methods have two variants; one with an explicit locale - * and one without; the latter using the default locale. + * Each of these methods has two variants; one with an explicit locale + * and one without; the latter uses the default locale: *
    *
    - * NumberFormat.getInstance(myLocale)
    - * NumberFormat.getCurrencyInstance(myLocale)
    - * NumberFormat.getPercentInstance(myLocale)
    + *     NumberFormat.getInstance(myLocale)
    + *     NumberFormat.getCurrencyInstance(myLocale)
    + *     NumberFormat.getPercentInstance(myLocale)
      * 
    *
    * A Locale is the mechanism for identifying the kind of object @@ -156,75 +309,162 @@ import sun.util.resources.OpenListResourceBundle; * just a mechanism for identifying objects, * not a container for the objects themselves. * - * @see ResourceBundle - * @see java.text.Format - * @see java.text.NumberFormat - * @see java.text.Collator - * @author Mark Davis - * @since 1.1 + *

    Compatibility

    + * + *

    In order to maintain compatibility with existing usage, Locale's + * constructors retain their behavior prior to the Java Runtime + * Environment version 1.7. The same is largely true for the + * toString method. Thus Locale objects can continue to + * be used as they were. In particular, clients who parse the output + * of toString into language, country, and variant fields can continue + * to do so (although this is strongly discouraged), although the + * variant field will have additional information in it if script or + * extensions are present. + * + *

    In addition, BCP 47 imposes syntax restrictions that are not + * imposed by Locale's constructors. This means that conversions + * between some Locales and BCP 47 language tags cannot be made without + * losing information. Thus toLanguageTag cannot + * represent the state of locales whose language, country, or variant + * do not conform to BCP 47. + * + *

    Because of these issues, it is recommended that clients migrate + * away from constructing non-conforming locales and use the + * forLanguageTag and Locale.Builder APIs instead. + * Clients desiring a string representation of the complete locale can + * then always rely on toLanguageTag for this purpose. + * + *

    Special cases
    + * + *

    For compatibility reasons, two + * non-conforming locales are treated as special cases. These are + * ja_JP_JP and th_TH_TH. These are ill-formed + * in BCP 47 since the variants are too short. To ease migration to BCP 47, + * these are treated specially during construction. These two cases (and only + * these) cause a constructor to generate an extension, all other values behave + * exactly as they did prior to Java 7. + * + *

    Java has used ja_JP_JP to represent Japanese as used in + * Japan together with the Japanese Imperial calendar. This is now + * representable using a Unicode locale extension, by specifying the + * Unicode locale key ca (for "calendar") and type + * japanese. When the Locale constructor is called with the + * arguments "ja", "JP", "JP", the extension "u-ca-japanese" is + * automatically added. + * + *

    Java has used th_TH_TH to represent Thai as used in + * Thailand together with Thai digits. This is also now representable using + * a Unicode locale extension, by specifying the Unicode locale key + * nu (for "number") and value thai. When the Locale + * constructor is called with the arguments "th", "TH", "TH", the + * extension "u-nu-thai" is automatically added. + * + *

    Serialization
    + * + *

    During serialization, writeObject writes all fields to the output + * stream, including extensions. + * + *

    During deserialization, readResolve adds extensions as described + * in Special Cases, only + * for the two cases th_TH_TH and ja_JP_JP. + * + *

    Legacy language codes
    + * + *

    Locale's constructor has always converted three language codes to + * their earlier, obsoleted forms: he maps to iw, + * yi maps to ji, and id maps to + * in. This continues to be the case, in order to not break + * backwards compatibility. + * + *

    The APIs added in 1.7 map between the old and new language codes, + * maintaining the old codes internal to Locale (so that + * getLanguage and toString reflect the old + * code), but using the new codes in the BCP 47 language tag APIs (so + * that toLanguageTag reflects the new one). This + * preserves the equivalence between Locales no matter which code or + * API is used to construct them. Java's default resource bundle + * lookup mechanism also implements this mapping, so that resources + * can be named using either convention, see {@link ResourceBundle.Control}. + * + *

    Three-letter language/country(region) codes
    + * + *

    The Locale constructors have always specified that the language + * and the country param be two characters in length, although in + * practice they have accepted any length. The specification has now + * been relaxed to allow language codes of two to eight characters and + * country (region) codes of two to three characters, and in + * particular, three-letter language codes and three-digit region + * codes as specified in the IANA Language Subtag Registry. For + * compatibility, the implementation still does not impose a length + * constraint. + * + * @see Builder + * @see ResourceBundle + * @see java.text.Format + * @see java.text.NumberFormat + * @see java.text.Collator + * @author Mark Davis + * @since 1.1 */ - public final class Locale implements Cloneable, Serializable { - // cache to store singleton Locales - private final static ConcurrentHashMap cache = - new ConcurrentHashMap(32); + static private final Cache LOCALECACHE = new Cache(); /** Useful constant for language. */ - static public final Locale ENGLISH = createSingleton("en__", "en", ""); + static public final Locale ENGLISH = getInstance("en", "", ""); /** Useful constant for language. */ - static public final Locale FRENCH = createSingleton("fr__", "fr", ""); + static public final Locale FRENCH = getInstance("fr", "", ""); /** Useful constant for language. */ - static public final Locale GERMAN = createSingleton("de__", "de", ""); + static public final Locale GERMAN = getInstance("de", "", ""); /** Useful constant for language. */ - static public final Locale ITALIAN = createSingleton("it__", "it", ""); + static public final Locale ITALIAN = getInstance("it", "", ""); /** Useful constant for language. */ - static public final Locale JAPANESE = createSingleton("ja__", "ja", ""); + static public final Locale JAPANESE = getInstance("ja", "", ""); /** Useful constant for language. */ - static public final Locale KOREAN = createSingleton("ko__", "ko", ""); + static public final Locale KOREAN = getInstance("ko", "", ""); /** Useful constant for language. */ - static public final Locale CHINESE = createSingleton("zh__", "zh", ""); + static public final Locale CHINESE = getInstance("zh", "", ""); /** Useful constant for language. */ - static public final Locale SIMPLIFIED_CHINESE = createSingleton("zh_CN_", "zh", "CN"); + static public final Locale SIMPLIFIED_CHINESE = getInstance("zh", "CN", ""); /** Useful constant for language. */ - static public final Locale TRADITIONAL_CHINESE = createSingleton("zh_TW_", "zh", "TW"); + static public final Locale TRADITIONAL_CHINESE = getInstance("zh", "TW", ""); /** Useful constant for country. */ - static public final Locale FRANCE = createSingleton("fr_FR_", "fr", "FR"); + static public final Locale FRANCE = getInstance("fr", "FR", ""); /** Useful constant for country. */ - static public final Locale GERMANY = createSingleton("de_DE_", "de", "DE"); + static public final Locale GERMANY = getInstance("de", "DE", ""); /** Useful constant for country. */ - static public final Locale ITALY = createSingleton("it_IT_", "it", "IT"); + static public final Locale ITALY = getInstance("it", "IT", ""); /** Useful constant for country. */ - static public final Locale JAPAN = createSingleton("ja_JP_", "ja", "JP"); + static public final Locale JAPAN = getInstance("ja", "JP", ""); /** Useful constant for country. */ - static public final Locale KOREA = createSingleton("ko_KR_", "ko", "KR"); + static public final Locale KOREA = getInstance("ko", "KR", ""); /** Useful constant for country. */ @@ -240,19 +480,19 @@ public final class Locale implements Cloneable, Serializable { /** Useful constant for country. */ - static public final Locale UK = createSingleton("en_GB_", "en", "GB"); + static public final Locale UK = getInstance("en", "GB", ""); /** Useful constant for country. */ - static public final Locale US = createSingleton("en_US_", "en", "US"); + static public final Locale US = getInstance("en", "US", ""); /** Useful constant for country. */ - static public final Locale CANADA = createSingleton("en_CA_", "en", "CA"); + static public final Locale CANADA = getInstance("en", "CA", ""); /** Useful constant for country. */ - static public final Locale CANADA_FRENCH = createSingleton("fr_CA_", "fr", "CA"); + static public final Locale CANADA_FRENCH = getInstance("fr", "CA", ""); /** * Useful constant for the root locale. The root locale is the locale whose @@ -262,7 +502,25 @@ public final class Locale implements Cloneable, Serializable { * * @since 1.6 */ - static public final Locale ROOT = createSingleton("__", "", ""); + static public final Locale ROOT = getInstance("", "", ""); + + /** + * The key for the private use extension ('x'). + * + * @see #getExtension(char) + * @see Builder#setExtension(char, String) + * @since 1.7 + */ + static public final char PRIVATE_USE_EXTENSION = 'x'; + + /** + * The key for Unicode locale extension ('u'). + * + * @see #getExtension(char) + * @see Builder#setExtension(char, String) + * @since 1.7 + */ + static public final char UNICODE_LOCALE_EXTENSION = 'u'; /** serialization ID */ @@ -274,32 +532,67 @@ public final class Locale implements Cloneable, Serializable { private static final int DISPLAY_LANGUAGE = 0; private static final int DISPLAY_COUNTRY = 1; private static final int DISPLAY_VARIANT = 2; + private static final int DISPLAY_SCRIPT = 3; /** - * Construct a locale from language, country, variant. - * NOTE: ISO 639 is not a stable standard; some of the language codes it defines - * (specifically iw, ji, and in) have changed. This constructor accepts both the - * old codes (iw, ji, and in) and the new codes (he, yi, and id), but all other - * API on Locale will return only the OLD codes. - * @param language lowercase two-letter ISO-639 code. - * @param country uppercase two-letter ISO-3166 code. - * @param variant vendor and browser specific code. See class description. - * @exception NullPointerException thrown if any argument is null. + * Private constructor used by getInstance method */ - public Locale(String language, String country, String variant) { - this.language = convertOldISOCodes(language); - this.country = toUpperCase(country).intern(); - this.variant = variant.intern(); + private Locale(BaseLocale baseLocale, LocaleExtensions extensions) { + _baseLocale = baseLocale; + _extensions = extensions; } /** - * Construct a locale from language, country. - * NOTE: ISO 639 is not a stable standard; some of the language codes it defines - * (specifically iw, ji, and in) have changed. This constructor accepts both the - * old codes (iw, ji, and in) and the new codes (he, yi, and id), but all other + * Construct a locale from language, country and variant. + * This constructor normalizes the language value to lowercase and + * the country value to uppercase. + *

    + * Note: + *

      + *
    • ISO 639 is not a stable standard; some of the language codes it defines + * (specifically "iw", "ji", and "in") have changed. This constructor accepts both the + * old codes ("iw", "ji", and "in") and the new codes ("he", "yi", and "id"), but all other * API on Locale will return only the OLD codes. - * @param language lowercase two-letter ISO-639 code. - * @param country uppercase two-letter ISO-3166 code. + *
    • For backward compatibility reasons, this constructor does not make + * any syntactic checks on the input. + *
    • The two cases ("ja", "JP", "JP") and ("th", "TH", "TH") are handled specially, + * see Special Cases for more information. + *
    + * + * @param language An ISO 639 alpha-2 or alpha-3 language code, or a language subtag + * up to 8 characters in length. See the Locale class description about + * valid language values. + * @param country An ISO 3166 alpha-2 country code or a UN M.49 numeric-3 area code. + * See the Locale class description about valid country values. + * @param variant Any arbitrary value used to indicate a variation of a Locale. + * See the Locale class description for the details. + * @exception NullPointerException thrown if any argument is null. + */ + public Locale(String language, String country, String variant) { + _baseLocale = BaseLocale.getInstance(convertOldISOCodes(language), "", country, variant); + _extensions = getCompatibilityExtensions(language, "", country, variant); + } + + /** + * Construct a locale from language and country. + * This constructor normalizes the language value to lowercase and + * the country value to uppercase. + *

    + * Note: + *

      + *
    • ISO 639 is not a stable standard; some of the language codes it defines + * (specifically "iw", "ji", and "in") have changed. This constructor accepts both the + * old codes ("iw", "ji", and "in") and the new codes ("he", "yi", and "id"), but all other + * API on Locale will return only the OLD codes. + *
    • For backward compatibility reasons, this constructor does not make + * any syntactic checks on the input. + *
    + * + * @param language An ISO 639 alpha-2 or alpha-3 language code, or a language subtag + * up to 8 characters in length. See the Locale class description about + * valid language values. + * @param country An ISO 3166 alpha-2 country code or a UN M.49 numeric-3 area code. + * See the Locale class description about valid country values. * @exception NullPointerException thrown if either argument is null. */ public Locale(String language, String country) { @@ -308,11 +601,21 @@ public final class Locale implements Cloneable, Serializable { /** * Construct a locale from a language code. - * NOTE: ISO 639 is not a stable standard; some of the language codes it defines - * (specifically iw, ji, and in) have changed. This constructor accepts both the - * old codes (iw, ji, and in) and the new codes (he, yi, and id), but all other + * This constructor normalizes the language value to lowercase. + *

    + * Note: + *

      + *
    • ISO 639 is not a stable standard; some of the language codes it defines + * (specifically "iw", "ji", and "in") have changed. This constructor accepts both the + * old codes ("iw", "ji", and "in") and the new codes ("he", "yi", and "id"), but all other * API on Locale will return only the OLD codes. - * @param language lowercase two-letter ISO-639 code. + *
    • For backward compatibility reasons, this constructor does not make + * any syntactic checks on the input. + *
    + * + * @param language An ISO 639 alpha-2 or alpha-3 language code, or a language subtag + * up to 8 characters in length. See the Locale class description about + * valid language values. * @exception NullPointerException thrown if argument is null. * @since 1.4 */ @@ -320,32 +623,6 @@ public final class Locale implements Cloneable, Serializable { this(language, "", ""); } - /** - * Constructs a Locale using language - * and country. This constructor assumes that - * language and contry are interned and - * it is invoked by createSingleton only. (flag is just for - * avoiding the conflict with the public constructors. - */ - private Locale(String language, String country, boolean flag) { - this.language = language; - this.country = country; - this.variant = ""; - } - - /** - * Creates a Locale instance with the given - * language and counry and puts the - * instance under the given key in the cache. This - * method must be called only when initializing the Locale - * constants. - */ - private static Locale createSingleton(String key, String language, String country) { - Locale locale = new Locale(language, country, false); - cache.put(key, locale); - return locale; - } - /** * Returns a Locale constructed from the given * language, country and @@ -354,29 +631,70 @@ public final class Locale implements Cloneable, Serializable { * returned. Otherwise, a new Locale instance is * created and cached. * - * @param language lowercase two-letter ISO-639 code. - * @param country uppercase two-letter ISO-3166 code. + * @param language lowercase 2 to 8 language code. + * @param country uppercase two-letter ISO-3166 code and numric-3 UN M.49 area code. * @param variant vendor and browser specific code. See class description. * @return the Locale instance requested * @exception NullPointerException if any argument is null. */ static Locale getInstance(String language, String country, String variant) { - if (language== null || country == null || variant == null) { + return getInstance(language, "", country, variant, LocaleExtensions.EMPTY_EXTENSIONS); + } + + static Locale getInstance(String language, String script, String country, + String variant, LocaleExtensions extensions) { + if (language== null || script == null || country == null || variant == null) { throw new NullPointerException(); } - StringBuilder sb = new StringBuilder(); - sb.append(language).append('_').append(country).append('_').append(variant); - String key = sb.toString(); - Locale locale = cache.get(key); - if (locale == null) { - locale = new Locale(language, country, variant); - Locale l = cache.putIfAbsent(key, locale); - if (l != null) { - locale = l; - } + if (extensions == null) { + extensions = LocaleExtensions.EMPTY_EXTENSIONS; + } + + if (extensions.equals(LocaleExtensions.EMPTY_EXTENSIONS)) { + extensions = getCompatibilityExtensions(language, script, country, variant); + } + + BaseLocale baseloc = BaseLocale.getInstance(language, script, country, variant); + return getInstance(baseloc, extensions); + } + + static Locale getInstance(BaseLocale baseloc, LocaleExtensions extensions) { + LocaleKey key = new LocaleKey(baseloc, extensions); + return LOCALECACHE.get(key); + } + + private static class Cache extends LocaleObjectCache { + public Cache() { + } + protected Locale createObject(LocaleKey key) { + return new Locale(key._base, key._exts); + } + } + + private static class LocaleKey { + private BaseLocale _base; + private LocaleExtensions _exts; + + private LocaleKey(BaseLocale baseLocale, LocaleExtensions extensions) { + _base = baseLocale; + _exts = extensions; + } + + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof LocaleKey)) { + return false; + } + LocaleKey other = (LocaleKey)obj; + return _base.equals(other._base) && _exts.equals(other._exts); + } + + public int hashCode() { + return _base.hashCode() ^ _exts.hashCode(); } - return locale; } /** @@ -395,33 +713,105 @@ public final class Locale implements Cloneable, Serializable { // do not synchronize this method - see 4071298 // it's OK if more than one default locale happens to be created if (defaultLocale == null) { - String language, region, country, variant; - language = AccessController.doPrivileged( - new GetPropertyAction("user.language", "en")); - // for compatibility, check for old user.region property - region = AccessController.doPrivileged( - new GetPropertyAction("user.region")); - if (region != null) { - // region can be of form country, country_variant, or _variant - int i = region.indexOf('_'); - if (i >= 0) { - country = region.substring(0, i); - variant = region.substring(i + 1); - } else { - country = region; - variant = ""; - } - } else { - country = AccessController.doPrivileged( - new GetPropertyAction("user.country", "")); - variant = AccessController.doPrivileged( - new GetPropertyAction("user.variant", "")); - } - defaultLocale = getInstance(language, country, variant); + initDefault(); } return defaultLocale; } + /** + * Gets the current value of the default locale for the specified Category + * for this instance of the Java Virtual Machine. + *

    + * The Java Virtual Machine sets the default locale during startup based + * on the host environment. It is used by many locale-sensitive methods + * if no locale is explicitly specified. It can be changed using the + * setDefault(Locale.Category, Locale) method. + * + * @param category - the specified category to get the default locale + * @throws NullPointerException - if category is null + * @return the default locale for the specified Category for this instance + * of the Java Virtual Machine + * @see #setDefault(Locale.Category, Locale) + * @since 1.7 + */ + public static Locale getDefault(Locale.Category category) { + // do not synchronize this method - see 4071298 + // it's OK if more than one default locale happens to be created + switch (category) { + case DISPLAY: + if (defaultDisplayLocale == null) { + initDefault(category); + } + return defaultDisplayLocale; + case FORMAT: + if (defaultFormatLocale == null) { + initDefault(category); + } + return defaultFormatLocale; + default: + assert false: "Unknown Category"; + } + return getDefault(); + } + + private static void initDefault() { + String language, region, country, variant; + language = AccessController.doPrivileged( + new GetPropertyAction("user.language", "en")); + // for compatibility, check for old user.region property + region = AccessController.doPrivileged( + new GetPropertyAction("user.region")); + if (region != null) { + // region can be of form country, country_variant, or _variant + int i = region.indexOf('_'); + if (i >= 0) { + country = region.substring(0, i); + variant = region.substring(i + 1); + } else { + country = region; + variant = ""; + } + } else { + country = AccessController.doPrivileged( + new GetPropertyAction("user.country", "")); + variant = AccessController.doPrivileged( + new GetPropertyAction("user.variant", "")); + } + defaultLocale = getInstance(language, country, variant); + } + + private static void initDefault(Locale.Category category) { + String language, region, country, variant; + switch (category) { + case DISPLAY: + language = AccessController.doPrivileged( + new GetPropertyAction("user.language.display", "")); + if ("".equals(language)) { + defaultDisplayLocale = getDefault(); + } else { + country = AccessController.doPrivileged( + new GetPropertyAction("user.country.display", "")); + variant = AccessController.doPrivileged( + new GetPropertyAction("user.variant.display", "")); + defaultDisplayLocale = getInstance(language, country, variant); + } + break; + case FORMAT: + language = AccessController.doPrivileged( + new GetPropertyAction("user.language.format", "")); + if ("".equals(language)) { + defaultFormatLocale = getDefault(); + } else { + country = AccessController.doPrivileged( + new GetPropertyAction("user.country.format", "")); + variant = AccessController.doPrivileged( + new GetPropertyAction("user.variant.format", "")); + defaultFormatLocale = getInstance(language, country, variant); + } + break; + } + } + /** * Sets the default locale for this instance of the Java Virtual Machine. * This does not affect the host locale. @@ -438,6 +828,9 @@ public final class Locale implements Cloneable, Serializable { * of functionality, this method should only be used if the caller * is prepared to reinitialize locale-sensitive code running * within the same Java Virtual Machine. + *

    + * By setting the default locale with this method, all of the default + * locales for each Category are also set to the specified default locale. * * @throws SecurityException * if a security manager exists and its @@ -448,13 +841,59 @@ public final class Locale implements Cloneable, Serializable { * @see java.util.PropertyPermission */ public static synchronized void setDefault(Locale newLocale) { + setDefault(Category.DISPLAY, newLocale); + setDefault(Category.FORMAT, newLocale); + defaultLocale = newLocale; + } + + /** + * Sets the default locale for the specified Category for this instance + * of the Java Virtual Machine. This does not affect the host locale. + *

    + * If there is a security manager, its checkPermission method is called + * with a PropertyPermission("user.language", "write") permission before + * the default locale is changed. + *

    + * The Java Virtual Machine sets the default locale during startup based + * on the host environment. It is used by many locale-sensitive methods + * if no locale is explicitly specified. + *

    + * Since changing the default locale may affect many different areas of + * functionality, this method should only be used if the caller is + * prepared to reinitialize locale-sensitive code running within the + * same Java Virtual Machine. + *

    + * + * @param category - the specified category to set the default locale + * @param newLocale - the new default locale + * @throws SecurityException - if a security manager exists and its + * checkPermission method doesn't allow the operation. + * @throws NullPointerException - if category and/or newLocale is null + * @see SecurityManager.checkPermission(java.security.Permission) + * @see PropertyPermission + * @see #getDefault(Locale.Category) + * @since 1.7 + */ + public static synchronized void setDefault(Locale.Category category, + Locale newLocale) { + if (category == null) + throw new NullPointerException("Category cannot be NULL"); if (newLocale == null) throw new NullPointerException("Can't set default locale to NULL"); SecurityManager sm = System.getSecurityManager(); if (sm != null) sm.checkPermission(new PropertyPermission ("user.language", "write")); - defaultLocale = newLocale; + switch (category) { + case DISPLAY: + defaultDisplayLocale = newLocale; + break; + case FORMAT: + defaultFormatLocale = newLocale; + break; + default: + assert false: "Unknown Category"; + } } /** @@ -474,6 +913,11 @@ public final class Locale implements Cloneable, Serializable { /** * Returns a list of all 2-letter country codes defined in ISO 3166. * Can be used to create Locales. + *

    + * Note: The Locale class also supports other codes for + * country (region), such as 3-letter numeric UN M.49 area codes. + * Therefore, the list returned by this method does not contain ALL valid + * codes that can be used to create Locales. */ public static String[] getISOCountries() { if (isoCountries == null) { @@ -487,9 +931,16 @@ public final class Locale implements Cloneable, Serializable { /** * Returns a list of all 2-letter language codes defined in ISO 639. * Can be used to create Locales. - * [NOTE: ISO 639 is not a stable standard-- some languages' codes have changed. + *

    + * Note: + *

      + *
    • ISO 639 is not a stable standard— some languages' codes have changed. * The list this function returns includes both the new and the old codes for the - * languages whose codes have changed.] + * languages whose codes have changed. + *
    • The Locale class also supports language codes up to + * 8 characters in length. Therefore, the list returned by this method does + * not contain ALL valid codes that can be used to create Locales. + *
    */ public static String[] getISOLanguages() { if (isoLanguages == null) { @@ -510,100 +961,516 @@ public final class Locale implements Cloneable, Serializable { } /** - * Returns the language code for this locale, which will either be the empty string - * or a lowercase ISO 639 code. - *

    NOTE: ISO 639 is not a stable standard-- some languages' codes have changed. + * Returns the language code of this Locale. + * + *

    Note: ISO 639 is not a stable standard— some languages' codes have changed. * Locale's constructor recognizes both the new and the old codes for the languages * whose codes have changed, but this function always returns the old code. If you - * want to check for a specific language whose code has changed, don't do

    -     * if (locale.getLanguage().equals("he"))
    +     * want to check for a specific language whose code has changed, don't do
    +     * 
    +     * if (locale.getLanguage().equals("he")) // BAD!
          *    ...
    -     * 
    Instead, do
    -     * if (locale.getLanguage().equals(new Locale("he", "", "").getLanguage()))
    -     *    ...
    + *
    + * Instead, do + *
    +     * if (locale.getLanguage().equals(new Locale("he").getLanguage()))
    +     *    ...
    +     * 
    + * @return The language code, or the empty string if none is defined. * @see #getDisplayLanguage */ public String getLanguage() { - return language; + return _baseLocale.getLanguage(); } /** - * Returns the country/region code for this locale, which will - * either be the empty string or an uppercase ISO 3166 2-letter code. + * Returns the script for this locale, which should + * either be the empty string or an ISO 15924 4-letter script + * code. The first letter is uppercase and the rest are + * lowercase, for example, 'Latn', 'Cyrl'. + * + * @return The script code, or the empty string if none is defined. + * @see #getDisplayScript + * @since 1.7 + */ + public String getScript() { + return _baseLocale.getScript(); + } + + /** + * Returns the country/region code for this locale, which should + * either be the empty string, an uppercase ISO 3166 2-letter code, + * or a UN M.49 3-digit code. + * + * @return The country/region code, or the empty string if none is defined. * @see #getDisplayCountry */ public String getCountry() { - return country; + return _baseLocale.getRegion(); } /** * Returns the variant code for this locale. + * + * @return The variant code, or the empty string if none is defined. * @see #getDisplayVariant */ public String getVariant() { - return variant; + return _baseLocale.getVariant(); } /** - * Getter for the programmatic name of the entire locale, - * with the language, country and variant separated by underbars. - * Language is always lower case, and country is always upper case. - * If the language is missing, the string will begin with an underbar. - * If both the language and country fields are missing, this function - * will return the empty string, even if the variant field is filled in - * (you can't have a locale with just a variant-- the variant must accompany - * a valid language or country code). - * Examples: "en", "de_DE", "_GB", "en_US_WIN", "de__POSIX", "fr__MAC" + * Returns the extension (or private use) value associated with + * the specified key, or null if there is no extension + * associated with the key. To be well-formed, the key must be one + * of [0-9A-Za-z]. Keys are case-insensitive, so + * for example 'z' and 'Z' represent the same extension. + * + * @param key the extension key + * @return The extension, or null if this locale defines no + * extension for the specified key. + * @throws IllegalArgumentException if key is not well-formed + * @see #PRIVATE_USE_EXTENSION + * @see #UNICODE_LOCALE_EXTENSION + * @since 1.7 + */ + public String getExtension(char key) { + if (!LocaleExtensions.isValidKey(key)) { + throw new IllegalArgumentException("Ill-formed extension key: " + key); + } + return _extensions.getExtensionValue(key); + } + + /** + * Returns the set of extension keys associated with this locale, or the + * empty set if it has no extensions. The returned set is unmodifiable. + * The keys will all be lower-case. + * + * @return The set of extension keys, or the empty set if this locale has + * no extensions. + * @since 1.7 + */ + public Set getExtensionKeys() { + return _extensions.getKeys(); + } + + /** + * Returns the set of unicode locale attributes associated with + * this locale, or the empty set if it has no attributes. The + * returned set is unmodifiable. + * + * @return The set of attributes. + * @since 1.7 + */ + public Set getUnicodeLocaleAttributes() { + return _extensions.getUnicodeLocaleAttributes(); + } + + /** + * Returns the Unicode locale type associated with the specified Unicode locale key + * for this locale. Returns the empty string for keys that are defined with no type. + * Returns null if the key is not defined. Keys are case-insensitive. The key must + * be two alphanumeric characters ([0-9a-zA-Z]), or an IllegalArgumentException is + * thrown. + * + * @param key the Unicode locale key + * @return The Unicode locale type associated with the key, or null if the + * locale does not define the key. + * @throws IllegalArgumentException if the key is not well-formed + * @throws NullPointerException if key is null + * @since 1.7 + */ + public String getUnicodeLocaleType(String key) { + if (!UnicodeLocaleExtension.isKey(key)) { + throw new IllegalArgumentException("Ill-formed Unicode locale key: " + key); + } + return _extensions.getUnicodeLocaleType(key); + } + + /** + * Returns the set of Unicode locale keys defined by this locale, or the empty set if + * this locale has none. The returned set is immutable. Keys are all lower case. + * + * @return The set of Unicode locale keys, or the empty set if this locale has + * no Unicode locale keywords. + * @since 1.7 + */ + public Set getUnicodeLocaleKeys() { + return _extensions.getUnicodeLocaleKeys(); + } + + /** + * Package locale method returning the Locale's BaseLocale, + * used by ResourceBundle + * @return base locale of this Locale + */ + BaseLocale getBaseLocale() { + return _baseLocale; + } + + /** + * Package local method returning the Locale's LocaleExtensions, + * used by ResourceBundle + * @return locale exnteions of this Locale + */ + LocaleExtensions getLocaleExtensions() { + return _extensions; + } + + /** + * Returns a string representation of this Locale + * object, consisting of language, country, variant, script, + * and extensions as below: + *

    + * language + "_" + country + "_" + (variant + "_#" | "#") + script + "-" + extensions + *
    + * + * Language is always lower case, country is always upper case, script is always title + * case, and extensions are always lower case. Extensions and private use subtags + * will be in canonical order as explained in {@link #toLanguageTag}. + * + *

    When the locale has neither script nor extensions, the result is the same as in + * Java 6 and prior. + * + *

    If both the language and country fields are missing, this function will return + * the empty string, even if the variant, script, or extensions field is present (you + * can't have a locale with just a variant, the variant must accompany a well-formed + * language or country code). + * + *

    If script or extensions are present and variant is missing, no underscore is + * added before the "#". + * + *

    This behavior is designed to support debugging and to be compatible with + * previous uses of toString that expected language, country, and variant + * fields only. To represent a Locale as a String for interchange purposes, use + * {@link #toLanguageTag}. + * + *

    Examples:

      + *
    • en + *
    • de_DE + *
    • _GB + *
    • en_US_WIN + *
    • de__POSIX + *
    • zh_CN_#Hans + *
    • zh_TW_#Hant-x-java + *
    • th_TH_TH_#u-nu-thai
    + * + * @return A string representation of the Locale, for debugging. * @see #getDisplayName + * @see #toLanguageTag */ public final String toString() { - boolean l = language.length() != 0; - boolean c = country.length() != 0; - boolean v = variant.length() != 0; - StringBuilder result = new StringBuilder(language); - if (c||(l&&v)) { - result.append('_').append(country); // This may just append '_' + boolean l = (_baseLocale.getLanguage().length() != 0); + boolean s = (_baseLocale.getScript().length() != 0); + boolean r = (_baseLocale.getRegion().length() != 0); + boolean v = (_baseLocale.getVariant().length() != 0); + boolean e = (_extensions.getID().length() != 0); + + StringBuilder result = new StringBuilder(_baseLocale.getLanguage()); + if (r || (l && v)) { + result.append('_') + .append(_baseLocale.getRegion()); // This may just append '_' } - if (v&&(l||c)) { - result.append('_').append(variant); + if (v && (l || r)) { + result.append('_') + .append(_baseLocale.getVariant()); } + + if (s && (l || r)) { + result.append("_#") + .append(_baseLocale.getScript()); + } + + if (e && (l || r)) { + result.append('_'); + if (!s) { + result.append('#'); + } + result.append(_extensions.getID()); + } + return result.toString(); } /** - * Returns a three-letter abbreviation for this locale's language. If the locale - * doesn't specify a language, this will be the empty string. Otherwise, this will - * be a lowercase ISO 639-2/T language code. - * The ISO 639-2 language codes can be found on-line at - * - * http://www.loc.gov/standards/iso639-2/englangn.html. - * @exception MissingResourceException Throws MissingResourceException if the + * Returns a well-formed IETF BCP 47 language tag representing + * this locale. + * + *

    If this Locale has a language, country, or + * variant that does not satisfy the IETF BCP 47 language tag + * syntax requirements, this method handles these fields as + * described below: + * + *

    Language: If language is empty, or not well-formed (for example "a" or + * "e2"), it will be emitted as "und" (Undetermined). + * + *

    Country: If country is not well-formed (for example "12" or "USA"), + * it will be omitted. + * + *

    Variant: If variant is well-formed, each sub-segment + * (delimited by '-' or '_') is emitted as a subtag. Otherwise: + *

      + * + *
    • if all sub-segments match [0-9a-zA-Z]{1,8} + * (for example "WIN" or "Oracle_JDK_Standard_Edition"), the first + * ill-formed sub-segment and all following will be appended to + * the private use subtag. The first appended subtag will be + * "lvariant", followed by the sub-segments in order, separated by + * hyphen. For example, "x-lvariant-WIN", + * "Oracle-x-lvariant-JDK-Standard-Edition". + * + *
    • if any sub-segment does not match + * [0-9a-zA-Z]{1,8}, the variant will be truncated + * and the problematic sub-segment and all following sub-segments + * will be omitted. If the remainder is non-empty, it will be + * emitted as a private use subtag as above (even if the remainder + * turns out to be well-formed). For example, + * "Solaris_isjustthecoolestthing" is emitted as + * "x-lvariant-Solaris", not as "solaris".
    + * + *

    Compatibility special cases:

      + * + *
    • The language codes "iw", "ji", and "in" are handled + * specially. Java uses these deprecated codes for compatibility + * reasons. The toLanguageTag method converts these + * three codes (and only these three) to "he", "yi", and "id" + * respectively. + * + *
    • A locale with language "no", country "NO", and variant + * "NY", representing Norwegian Nynorsk, will be represented as + * having language "nn", country "NO", and empty variant. This is + * because some JVMs used the deprecated form to represent the + * user's default locale, and for compatibility reasons that Take a has + * not been changed.
    + * + *

    Note: Although the language tag created by this + * method is well-formed (satisfies the syntax requirements + * defined by the IETF BCP 47 specification), it is not + * necessarily a valid BCP 47 language tag. For example, + *

    +     *   new Locale("xx", "YY").toLanguageTag();
    + * + * will return "xx-YY", but the language subtag "xx" and the + * region subtag "YY" are invalid because they are not registered + * in the IANA Language Subtag Registry. + * + * @return a BCP47 language tag representing the locale + * @see #forLanguageTag(String) + * @since 1.7 + */ + public String toLanguageTag() { + LanguageTag tag = LanguageTag.parseLocale(_baseLocale, _extensions); + StringBuilder buf = new StringBuilder(); + + String subtag = tag.getLanguage(); + buf.append(LanguageTag.canonicalizeLanguage(subtag)); + + subtag = tag.getScript(); + if (subtag.length() > 0) { + buf.append(LanguageTag.SEP); + buf.append(LanguageTag.canonicalizeScript(subtag)); + } + + subtag = tag.getRegion(); + if (subtag.length() > 0) { + buf.append(LanguageTag.SEP); + buf.append(LanguageTag.canonicalizeRegion(subtag)); + } + + Listsubtags = tag.getVariants(); + for (String s : subtags) { + buf.append(LanguageTag.SEP); + // preserve casing + buf.append(s); + } + + subtags = tag.getExtensions(); + for (String s : subtags) { + buf.append(LanguageTag.SEP); + buf.append(LanguageTag.canonicalizeExtension(s)); + } + + subtag = tag.getPrivateuse(); + if (subtag.length() > 0) { + buf.append(LanguageTag.SEP).append(LanguageTag.PRIVATEUSE).append(LanguageTag.SEP); + // preserve casing + buf.append(subtag); + } + + return buf.toString(); + } + + /** + * Returns a locale for the specified IETF BCP 47 language tag string. + * + *

    If the specified language tag contains any ill-formed subtags, + * the first such subtag and all following subtags are ignored. Compare + * to {@link Locale.Builder#setLanguageTag} which throws an exception + * in this case. + * + *

    The following conversions are performed:

      + * + *
    • The language code "und" is mapped to language "". + * + *
    • The language codes "he", "yi", and "id" are mapped to "iw", + * "ji", and "in" respectively. (This is the same canonicalization + * that's done in Locale's constructors.) + * + *
    • The portion of a private use subtag prefixed by "lvariant", + * if any, is removed and appended to the variant field in the + * result locale (without case normalization). If it is then + * empty, the private use subtag is discarded: + * + *
      +     *     Locale loc;
      +     *     loc = Locale.forLanguageTag("en-US-x-lvariant-POSIX);
      +     *     loc.getVariant(); // returns "POSIX"
      +     *     loc.getExtension('x'); // returns null
      +     *
      +     *     loc = Locale.forLanguageTag("de-POSIX-x-URP-lvariant-Abc-Def");
      +     *     loc.getVariant(); // returns "POSIX_Abc_Def"
      +     *     loc.getExtension('x'); // returns "urp"
      +     * 
      + * + *
    • When the languageTag argument contains an extlang subtag, + * the first such subtag is used as the language, and the primary + * language subtag and other extlang subtags are ignored: + * + *
      +     *     Locale.forLanguageTag("ar-aao").getLanguage(); // returns "aao"
      +     *     Locale.forLanguageTag("en-abc-def-us").toString(); // returns "abc_US"
      +     * 
      + * + *
    • Case is normalized except for variant tags, which are left + * unchanged. Language is normalized to lower case, script to + * title case, country to upper case, and extensions to lower + * case. + * + *
    • If, after processing, the locale would exactly match either + * ja_JP_JP or th_TH_TH with no extensions, the appropriate + * extensions are added as though the constructor had been called: + * + *
      +     *    Locale.forLanguageTag("ja-JP-x-lvariant-JP).toLanguageTag();
      +     *    // returns ja-JP-u-ca-japanese-x-lvariant-JP
      +     *    Locale.forLanguageTag("th-TH-x-lvariant-TH).toLanguageTag();
      +     *    // returns th-TH-u-nu-thai-x-lvariant-TH
      +     * 
    + * + *

    This implements the 'Language-Tag' production of BCP47, and + * so supports grandfathered (regular and irregular) as well as + * private use language tags. Stand alone private use tags are + * represented as empty language and extension 'x-whatever', + * and grandfathered tags are converted to their canonical replacements + * where they exist. + * + *

    Grandfathered tags with canonical replacements are as follows: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    grandfathered tag modern replacement
    art-lojban jbo
    i-ami ami
    i-bnn bnn
    i-hak hak
    i-klingon tlh
    i-lux lb
    i-navajo nv
    i-pwn pwn
    i-tao tao
    i-tay tay
    i-tsu tsu
    no-bok nb
    no-nyn nn
    sgn-BE-FR sfb
    sgn-BE-NL vgt
    sgn-CH-DE sgg
    zh-guoyu cmn
    zh-hakka hak
    zh-min-nan nan
    zh-xiang hsn
    + * + *

    Grandfathered tags with no modern replacement will be + * converted as follows: + * + * + * + * + * + * + * + * + * + * + * + *
    grandfathered tag converts to
    cel-gaulish xtg-x-cel-gaulish
    en-GB-oed en-GB-x-oed
    i-default en-x-i-default
    i-enochian und-x-i-enochian
    i-mingo see-x-i-mingo
    zh-min nan-x-zh-min
    + * + *

    For a list of all grandfathered tags, see the + * IANA Language Subtag Registry (search for "Type: grandfathered"). + * + *

    Note: there is no guarantee that toLanguageTag + * and forLanguageTag will round-trip. + * + * @param languageTag the language tag + * @return The locale that best represents the language tag. + * @throws NullPointerException if languageTag is null + * @see #toLanguageTag() + * @see java.util.Locale.Builder#setLanguageTag(String) + * @since 1.7 + */ + public static Locale forLanguageTag(String languageTag) { + LanguageTag tag = LanguageTag.parse(languageTag, null); + InternalLocaleBuilder bldr = new InternalLocaleBuilder(); + bldr.setLanguageTag(tag); + return getInstance(bldr.getBaseLocale(), bldr.getLocaleExtensions()); + } + + /** + * Returns a three-letter abbreviation of this locale's language. + * If the language matches an ISO 639-1 two-letter code, the + * corresponding ISO 639-2/T three-letter lowercase code is + * returned. The ISO 639-2 language codes can be found on-line, + * see "Codes for the Representation of Names of Languages Part 2: + * Alpha-3 Code". If the locale specifies a three-letter + * language, the language is returned as is. If the locale does + * not specify a language the empty string is returned. + * + * @return A three-letter abbreviation of this locale's language. + * @exception MissingResourceException Throws MissingResourceException if * three-letter language abbreviation is not available for this locale. */ public String getISO3Language() throws MissingResourceException { - String language3 = getISO3Code(language, LocaleISOData.isoLanguageTable); + String language3 = getISO3Code(_baseLocale.getLanguage(), LocaleISOData.isoLanguageTable); if (language3 == null) { throw new MissingResourceException("Couldn't find 3-letter language code for " - + language, "FormatData_" + toString(), "ShortLanguage"); + + _baseLocale.getLanguage(), "FormatData_" + toString(), "ShortLanguage"); } return language3; } /** - * Returns a three-letter abbreviation for this locale's country. If the locale - * doesn't specify a country, this will be the empty string. Otherwise, this will - * be an uppercase ISO 3166 3-letter country code. - * The ISO 3166-2 country codes can be found on-line at - * - * http://www.davros.org/misc/iso3166.txt. + * Returns a three-letter abbreviation for this locale's country. + * If the country matches an ISO 3166-1 alpha-2 code, the + * corresponding ISO 3166-1 alpha-3 uppercase code is returned. + * If the locale doesn't specify a country, this will be the empty + * string. + * + *

    The ISO 3166-1 codes can be found on-line. + * + * @return A three-letter abbreviation of this locale's country. * @exception MissingResourceException Throws MissingResourceException if the * three-letter country abbreviation is not available for this locale. */ public String getISO3Country() throws MissingResourceException { - String country3 = getISO3Code(country, LocaleISOData.isoCountryTable); + String country3 = getISO3Code(_baseLocale.getRegion(), LocaleISOData.isoCountryTable); if (country3 == null) { throw new MissingResourceException("Couldn't find 3-letter country code for " - + country, "FormatData_" + toString(), "ShortCountry"); + + _baseLocale.getRegion(), "FormatData_" + toString(), "ShortCountry"); } return country3; } @@ -642,7 +1509,7 @@ public final class Locale implements Cloneable, Serializable { * value. If the locale doesn't specify a language, this function returns the empty string. */ public final String getDisplayLanguage() { - return getDisplayLanguage(getDefault()); + return getDisplayLanguage(getDefault(Category.DISPLAY)); } /** @@ -661,7 +1528,33 @@ public final class Locale implements Cloneable, Serializable { * @exception NullPointerException if inLocale is null */ public String getDisplayLanguage(Locale inLocale) { - return getDisplayString(language, inLocale, DISPLAY_LANGUAGE); + return getDisplayString(_baseLocale.getLanguage(), inLocale, DISPLAY_LANGUAGE); + } + + /** + * Returns a name for the the locale's script that is appropriate for display to + * the user. If possible, the name will be localized for the default locale. Returns + * the empty string if this locale doesn't specify a script code. + * + * @return the display name of the script code for the current default locale + * @since 1.7 + */ + public String getDisplayScript() { + return getDisplayScript(getDefault()); + } + + /** + * Returns a name for the locale's script that is appropriate + * for display to the user. If possible, the name will be + * localized for the given locale. Returns the empty string if + * this locale doesn't specify a script code. + * + * @return the display name of the script code for the current default locale + * @throws NullPointerException if inLocale is null + * @since 1.7 + */ + public String getDisplayScript(Locale inLocale) { + return getDisplayString(_baseLocale.getScript(), inLocale, DISPLAY_SCRIPT); } /** @@ -677,7 +1570,7 @@ public final class Locale implements Cloneable, Serializable { * value. If the locale doesn't specify a country, this function returns the empty string. */ public final String getDisplayCountry() { - return getDisplayCountry(getDefault()); + return getDisplayCountry(getDefault(Category.DISPLAY)); } /** @@ -696,7 +1589,7 @@ public final class Locale implements Cloneable, Serializable { * @exception NullPointerException if inLocale is null */ public String getDisplayCountry(Locale inLocale) { - return getDisplayString(country, inLocale, DISPLAY_COUNTRY); + return getDisplayString(_baseLocale.getRegion(), inLocale, DISPLAY_COUNTRY); } private String getDisplayString(String code, Locale inLocale, int type) { @@ -744,7 +1637,7 @@ public final class Locale implements Cloneable, Serializable { * doesn't specify a variant code, this function returns the empty string. */ public final String getDisplayVariant() { - return getDisplayVariant(getDefault()); + return getDisplayVariant(getDefault(Category.DISPLAY)); } /** @@ -755,7 +1648,7 @@ public final class Locale implements Cloneable, Serializable { * @exception NullPointerException if inLocale is null */ public String getDisplayVariant(Locale inLocale) { - if (variant.length() == 0) + if (_baseLocale.getVariant().length() == 0) return ""; OpenListResourceBundle bundle = LocaleData.getLocaleNames(inLocale); @@ -776,39 +1669,44 @@ public final class Locale implements Cloneable, Serializable { /** * Returns a name for the locale that is appropriate for display to the - * user. This will be the values returned by getDisplayLanguage(), getDisplayCountry(), - * and getDisplayVariant() assembled into a single string. The display name will have - * one of the following forms:

    - * language (country, variant)

    - * language (country)

    - * language (variant)

    - * country (variant)

    - * language

    - * country

    - * variant

    - * depending on which fields are specified in the locale. If the language, country, - * and variant fields are all empty, this function returns the empty string. + * user. This will be the values returned by getDisplayLanguage(), + * getDisplayScript(), getDisplayCountry(), and getDisplayVariant() assembled + * into a single string. The the non-empty values are used in order, + * with the second and subsequent names in parentheses. For example: + *
    + * language (script, country, variant)
    + * language (country)
    + * language (variant)
    + * script (country)
    + * country
    + *
    + * depending on which fields are specified in the locale. If the + * language, sacript, country, and variant fields are all empty, + * this function returns the empty string. */ public final String getDisplayName() { - return getDisplayName(getDefault()); + return getDisplayName(getDefault(Category.DISPLAY)); } /** - * Returns a name for the locale that is appropriate for display to the - * user. This will be the values returned by getDisplayLanguage(), getDisplayCountry(), - * and getDisplayVariant() assembled into a single string. The display name will have - * one of the following forms:

    - * language (country, variant)

    - * language (country)

    - * language (variant)

    - * country (variant)

    - * language

    - * country

    - * variant

    - * depending on which fields are specified in the locale. If the language, country, - * and variant fields are all empty, this function returns the empty string. + * Returns a name for the locale that is appropriate for display + * to the user. This will be the values returned by + * getDisplayLanguage(), getDisplayScript(),getDisplayCountry(), + * and getDisplayVariant() assembled into a single string. + * The non-empty values are used in order, + * with the second and subsequent names in parentheses. For example: + *
    + * language (script, country, variant)
    + * language (country)
    + * language (variant)
    + * script (country)
    + * country
    + *
    + * depending on which fields are specified in the locale. If the + * language, script, country, and variant fields are all empty, + * this function returns the empty string. * - * @exception NullPointerException if inLocale is null + * @throws NullPointerException if inLocale is null */ public String getDisplayName(Locale inLocale) { OpenListResourceBundle bundle = LocaleData.getLocaleNames(inLocale); @@ -888,7 +1786,7 @@ public final class Locale implements Cloneable, Serializable { } /** - * Overrides Cloneable + * Overrides Cloneable. */ public Object clone() { @@ -908,7 +1806,7 @@ public final class Locale implements Cloneable, Serializable { public int hashCode() { int hc = hashCodeValue; if (hc == 0) { - hc = (language.hashCode() << 8) ^ country.hashCode() ^ (variant.hashCode() << 4); + hc = _baseLocale.hashCode() ^ _extensions.hashCode(); hashCodeValue = hc; } return hc; @@ -918,8 +1816,8 @@ public final class Locale implements Cloneable, Serializable { /** * Returns true if this Locale is equal to another object. A Locale is - * deemed equal to another Locale with identical language, country, - * and variant, and unequal to all other objects. + * deemed equal to another Locale with identical language, script, country, + * variant and extensions, and unequal to all other objects. * * @return true if this Locale is equal to the specified object. */ @@ -929,47 +1827,24 @@ public final class Locale implements Cloneable, Serializable { return true; if (!(obj instanceof Locale)) return false; - Locale other = (Locale) obj; - return language == other.language - && country == other.country - && variant == other.variant; + BaseLocale otherBase = ((Locale)obj)._baseLocale; + LocaleExtensions otherExt = ((Locale)obj)._extensions; + return _baseLocale.equals(otherBase) && _extensions.equals(otherExt); } // ================= privates ===================================== - // XXX instance and class variables. For now keep these separate, since it is - // faster to match. Later, make into single string. + private transient BaseLocale _baseLocale; + private transient LocaleExtensions _extensions; /** - * @serial - * @see #getLanguage - */ - private final String language; - - /** - * @serial - * @see #getCountry - */ - private final String country; - - /** - * @serial - * @see #getVariant - */ - private final String variant; - - /** - * Placeholder for the object's hash code. Always -1. - * @serial - */ - private volatile int hashcode = -1; // lazy evaluate - - /** - * Calculated hashcode to fix 4518797. + * Calculated hashcode */ private transient volatile int hashCodeValue = 0; private static Locale defaultLocale = null; + private static Locale defaultDisplayLocale = null; + private static Locale defaultFormatLocale = null; /** * Return an array of the display names of the variant. @@ -978,7 +1853,7 @@ public final class Locale implements Cloneable, Serializable { */ private String[] getDisplayVariantArray(OpenListResourceBundle bundle, Locale inLocale) { // Split the variant name into tokens separated by '_'. - StringTokenizer tokenizer = new StringTokenizer(variant, "_"); + StringTokenizer tokenizer = new StringTokenizer(_baseLocale.getVariant(), "_"); String[] names = new String[tokenizer.countTokens()]; // For each variant token, lookup the display name. If @@ -1056,49 +1931,102 @@ public final class Locale implements Cloneable, Serializable { } /** - * Replace the deserialized Locale object with a newly - * created object. Newer language codes are replaced with older ISO - * codes. The country and variant codes are replaced with internalized - * String copies. + * @serialField language String + * language subtag in lower case. (See getLanguage()) + * @serialField country String + * country subtag in upper case. (See getCountry()) + * @serialField variant String + * variant subtags separated by LOWLINE characters. (See getVariant()) + * @serialField hashcode int + * deprectated, for forward compatibility only + * @serialField script String + * script subtag in title case (See getScript()) + * @serialField extensions String + * canonical representation of extensions, that is, + * BCP47 extensions in alphabetical order followed by + * BCP47 private use subtags, all in lower case letters + * separated by HYPHEN-MINUS characters. + * (See getExtensionKeys(), + * getExtension(char)) + */ + private static final ObjectStreamField[] serialPersistentFields = { + new ObjectStreamField("language", String.class), + new ObjectStreamField("country", String.class), + new ObjectStreamField("variant", String.class), + new ObjectStreamField("hashcode", int.class), + new ObjectStreamField("script", String.class), + new ObjectStreamField("extensions", String.class), + }; + + /** + * Serializes this Locale to the specified ObjectOutputStream. + * @param out the ObjectOutputStream to write + * @throws IOException + * @since 1.7 + */ + private void writeObject(ObjectOutputStream out) throws IOException { + ObjectOutputStream.PutField fields = out.putFields(); + fields.put("language", _baseLocale.getLanguage()); + fields.put("script", _baseLocale.getScript()); + fields.put("country", _baseLocale.getRegion()); + fields.put("variant", _baseLocale.getVariant()); + fields.put("extensions", _extensions.getID()); + fields.put("hashcode", -1); // place holder just for backward support + out.writeFields(); + } + + /** + * Deserialize this Locale. + * @param in the ObjectInputStream to read + * @throws IOException + * @throws ClassNotFoundException + * @throws IllformdLocaleException + * @since 1.7 + */ + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { + ObjectInputStream.GetField fields = in.readFields(); + String language = (String)fields.get("language", ""); + String script = (String)fields.get("script", ""); + String country = (String)fields.get("country", ""); + String variant = (String)fields.get("variant", ""); + String extStr = (String)fields.get("extensions", ""); + _baseLocale = BaseLocale.getInstance(convertOldISOCodes(language), script, country, variant); + try { + InternalLocaleBuilder bldr = new InternalLocaleBuilder(); + bldr.setExtensions(extStr); + _extensions = bldr.getLocaleExtensions(); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage()); + } + } + + /** + * Returns a cached Locale instance equivalent to + * the deserialized Locale. When serialized + * language, country and variant fields read from the object data stream + * are exactly "ja", "JP", "JP" or "th", "TH", "TH" and script/extensions + * fields are empty, this method supplies UNICODE_LOCALE_EXTENSION + * "ca"/"japanese" (calendar type is "japanese") or "nu"/"thai" (number script + * type is "thai"). See Special Cases + * for more information. + * + * @return an instance of Locale equivalent to + * the deserialized Locale. + * @throws java.io.ObjectStreamException */ private Object readResolve() throws java.io.ObjectStreamException { - return getInstance(language, country, variant); + return getInstance(_baseLocale.getLanguage(), _baseLocale.getScript(), + _baseLocale.getRegion(), _baseLocale.getVariant(), _extensions); } private static volatile String[] isoLanguages = null; private static volatile String[] isoCountries = null; - /* - * Locale needs its own, locale insensitive version of toLowerCase to - * avoid circularity problems between Locale and String. - * The most straightforward algorithm is used. Look at optimizations later. - */ - private String toLowerCase(String str) { - char[] buf = new char[str.length()]; - for (int i = 0; i < buf.length; i++) { - buf[i] = Character.toLowerCase(str.charAt(i)); - } - return new String( buf ); - } - - /* - * Locale needs its own, locale insensitive version of toUpperCase to - * avoid circularity problems between Locale and String. - * The most straightforward algorithm is used. Look at optimizations later. - */ - private String toUpperCase(String str) { - char[] buf = new char[str.length()]; - for (int i = 0; i < buf.length; i++) { - buf[i] = Character.toUpperCase(str.charAt(i)); - } - return new String( buf ); - } - - private String convertOldISOCodes(String language) { + private static String convertOldISOCodes(String language) { // we accept both the old and the new ISO codes for the languages whose ISO // codes have changed, but we always store the OLD code, for backward compatibility - language = toLowerCase(language).intern(); + language = AsciiUtil.toLowerString(language).intern(); if (language == "he") { return "iw"; } else if (language == "yi") { @@ -1110,6 +2038,25 @@ public final class Locale implements Cloneable, Serializable { } } + private static LocaleExtensions getCompatibilityExtensions(String language, String script, String country, String variant) { + LocaleExtensions extensions = LocaleExtensions.EMPTY_EXTENSIONS; + // Special cases for backward compatibility support + if (AsciiUtil.caseIgnoreMatch(language, "ja") + && script.length() == 0 + && AsciiUtil.caseIgnoreMatch(country, "JP") + && AsciiUtil.caseIgnoreMatch(variant, "JP")) { + // ja_JP_JP -> u-ca-japanese (calendar = japanese) + extensions = LocaleExtensions.CALENDAR_JAPANESE; + } else if (AsciiUtil.caseIgnoreMatch(language, "th") + && script.length() == 0 + && AsciiUtil.caseIgnoreMatch(country, "TH") + && AsciiUtil.caseIgnoreMatch(variant, "TH")) { + // th_TH_TH -> u-nu-thai (numbersystem = thai) + extensions = LocaleExtensions.NUMBER_THAI; + } + return extensions; + } + /** * Obtains a localized locale names from a LocaleNameProvider * implementation. @@ -1133,6 +2080,8 @@ public final class Locale implements Cloneable, Serializable { return localeNameProvider.getDisplayCountry(code, locale); case DISPLAY_VARIANT: return localeNameProvider.getDisplayVariant(code, locale); + case DISPLAY_SCRIPT: + return localeNameProvider.getDisplayScript(code, locale); default: assert false; // shouldn't happen } @@ -1140,4 +2089,370 @@ public final class Locale implements Cloneable, Serializable { return null; } } + + /** + * Enum for locale categories. These locale categories are used to get/set + * the default locale for the specific functionality represented by the + * category. + * + * @see #getDefault(Locale.Category) + * @see #setDefault(Locale.Category, Locale) + * @since 1.7 + */ + public enum Category { + + /** + * Category used to represent the default locale for + * displaying user interfaces. + */ + DISPLAY, + + /** + * Category used to represent the default locale for + * formatting dates, numbers, and/or currencies. + */ + FORMAT, + } + + /** + * Builder is used to build instances of Locale + * from values configured by the setters. Unlike the Locale + * constructors, the Builder checks if a value configured by a + * setter satisfies the syntax requirements defined by the Locale + * class. A Locale object created by a Builder is + * well-formed and can be transformed to a well-formed IETF BCP 47 language tag + * without losing information. + * + *

    Note: The Locale class does not provide any + * syntactic restrictions on variant, while BCP 47 requires each variant + * subtag to be 5 to 8 alphanumerics or a single numeric followed by 3 + * alphanumerics. The method setVariant throws + * IllformedLocaleException for a variant that does not satisfy + * this restriction. If it is necessary to support such a variant, use a + * Locale constructor. However, keep in mind that a Locale + * object created this way might lose the variant information when + * transformed to a BCP 47 language tag. + * + *

    The following example shows how to create a Locale object + * with the Builder. + *

    + *
    +     *     Locale aLocale = new Builder().setLanguage("sr").setScript("Latn").setRegion("RS").build();
    +     * 
    + *
    + * + *

    Builders can be reused; clear() resets all + * fields to their default values. + * + * @see Locale#forLanguageTag + * @since 1.7 + */ + public static final class Builder { + private InternalLocaleBuilder _locbld; + + /** + * Constructs an empty Builder. The default value of all + * fields, extensions, and private use information is the + * empty string. + */ + public Builder() { + _locbld = new InternalLocaleBuilder(); + } + + /** + * Resets the Builder to match the provided + * locale. Existing state is discarded. + * + *

    All fields of the locale must be well-formed, see {@link Locale}. + * + *

    Locales with any ill-formed fields cause + * IllformedLocaleException to be thrown, except for the + * following three cases which are accepted for compatibility + * reasons:

      + *
    • Locale("ja", "JP", "JP") is treated as "ja-JP-u-ca-japanese" + *
    • Locale("th", "TH", "TH") is treated as "th-TH-u-nu-thai" + *
    • Locale("no", "NO", "NY") is treated as "nn-NO"
    + * + * @param locale the locale + * @return This builder. + * @throws IllformedLocaleException if locale has + * any ill-formed fields. + * @throws NullPointerException if locale is null. + */ + public Builder setLocale(Locale locale) { + try { + _locbld.setLocale(locale._baseLocale, locale._extensions); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Resets the Builder to match the provided IETF BCP 47 + * language tag. Discards the existing state. Null and the + * empty string cause the builder to be reset, like {@link + * #clear}. Grandfathered tags (see {@link + * Locale#forLanguageTag}) are converted to their canonical + * form before being processed. Otherwise, the language tag + * must be well-formed (see {@link Locale}) or an exception is + * thrown (unlike Locale.forLanguageTag, which + * just discards ill-formed and following portions of the + * tag). + * + * @param languageTag the language tag + * @return This builder. + * @throws IllformedLocaleException if languageTag is ill-formed + * @see Locale#forLanguageTag(String) + */ + public Builder setLanguageTag(String languageTag) { + ParseStatus sts = new ParseStatus(); + LanguageTag tag = LanguageTag.parse(languageTag, sts); + if (sts.isError()) { + throw new IllformedLocaleException(sts.getErrorMessage(), sts.getErrorIndex()); + } + _locbld.setLanguageTag(tag); + + return this; + } + + /** + * Sets the language. If language is the empty string or + * null, the language in this Builder is removed. Otherwise, + * the language must be well-formed + * or an exception is thrown. + * + *

    The typical language value is a two or three-letter language + * code as defined in ISO639. + * + * @param language the language + * @return This builder. + * @throws IllformedLocaleException if language is ill-formed + */ + public Builder setLanguage(String language) { + try { + _locbld.setLanguage(language); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Sets the script. If script is null or the empty string, + * the script in this Builder is removed. + * Otherwise, the script must be well-formed or an + * exception is thrown. + * + *

    The typical script value is a four-letter script code as defined by ISO 15924. + * + * @param script the script + * @return This builder. + * @throws IllformedLocaleException if script is ill-formed + */ + public Builder setScript(String script) { + try { + _locbld.setScript(script); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Sets the region. If region is null or the empty string, the region + * in this Builder is removed. Otherwise, + * the region must be well-formed or an + * exception is thrown. + * + *

    The typical region value is a two-letter ISO 3166 code or a + * three-digit UN M.49 area code. + * + *

    The country value in the Locale created by the + * Builder is always normalized to upper case. + * + * @param region the region + * @return This builder. + * @throws IllformedLocaleException if region is ill-formed + */ + public Builder setRegion(String region) { + try { + _locbld.setRegion(region); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Sets the variant. If variant is null or the empty string, the + * variant in this Builder is removed. Otherwise, it + * must consist of one or more well-formed + * subtags, or an exception is thrown. + * + *

    Note: This method checks if variant + * satisfies the IETF BCP 47 variant subtag's syntax requirements, + * and normalizes the value to lowercase letters. However, + * the Locale class does not impose any syntactic + * restriction on variant, and the variant value in + * Locale is case sensitive. To set such a variant, + * use a Locale constructor. + * + * @param variant the variant + * @return This builder. + * @throws IllformedLocaleException if variant is ill-formed + */ + public Builder setVariant(String variant) { + try { + _locbld.setVariant(variant); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Sets the extension for the given key. If the value is null or the + * empty string, the extension is removed. Otherwise, the extension + * must be well-formed or an exception + * is thrown. + * + *

    Note: The key {@link Locale#UNICODE_LOCALE_EXTENSION + * UNICODE_LOCALE_EXTENSION} ('u') is used for the Unicode locale extension. + * Setting a value for this key replaces any existing Unicode locale key/type + * pairs with those defined in the extension. + * + *

    Note: The key {@link Locale#PRIVATE_USE_EXTENSION + * PRIVATE_USE_EXTENSION} ('x') is used for the private use code. To be + * well-formed, the value for this key needs only to have subtags of one to + * eight alphanumeric characters, not two to eight as in the general case. + * + * @param key the extension key + * @param value the extension value + * @return This builder. + * @throws IllformedLocaleException if key is illegal + * or value is ill-formed + * @see #setUnicodeLocaleKeyword(String, String) + */ + public Builder setExtension(char key, String value) { + try { + _locbld.setExtension(key, value); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Sets the Unicode locale keyword type for the given key. If the type + * is null, the Unicode keyword is removed. Otherwise, the key must be + * non-null and both key and type must be well-formed or an exception + * is thrown. + * + *

    Keys and types are converted to lower case. + * + *

    Note:Setting the 'u' extension via {@link #setExtension} + * replaces all Unicode locale keywords with those defined in the + * extension. + * + * @param key the Unicode locale key + * @param type the Unicode locale type + * @return This builder. + * @throws IllformedLocaleException if key or type + * is ill-formed + * @throws NullPointerException if key is null + * @see #setExtension(char, String) + */ + public Builder setUnicodeLocaleKeyword(String key, String type) { + try { + _locbld.setUnicodeLocaleKeyword(key, type); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Adds a unicode locale attribute, if not already present, otherwise + * has no effect. The attribute must not be null and must be well-formed or an exception + * is thrown. + * + * @param attribute the attribute + * @return This builder. + * @throws NullPointerException if attribute is null + * @throws IllformedLocaleException if attribute is ill-formed + * @see #setExtension(char, String) + */ + public Builder addUnicodeLocaleAttribute(String attribute) { + try { + _locbld.addUnicodeLocaleAttribute(attribute); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Removes a unicode locale attribute, if present, otherwise has no + * effect. The attribute must not be null and must be well-formed or an exception + * is thrown. + * + *

    Attribute comparision for removal is case-insensitive. + * + * @param attribute the attribute + * @return This builder. + * @throws NullPointerException if attribute is null + * @throws IllformedLocaleException if attribute is ill-formed + * @see #setExtension(char, String) + */ + public Builder removeUnicodeLocaleAttribute(String attribute) { + try { + _locbld.removeUnicodeLocaleAttribute(attribute); + } catch (LocaleSyntaxException e) { + throw new IllformedLocaleException(e.getMessage(), e.getErrorIndex()); + } + return this; + } + + /** + * Resets the builder to its initial, empty state. + * + * @return This builder. + */ + public Builder clear() { + _locbld.clear(); + return this; + } + + /** + * Resets the extensions to their initial, empty state. + * Language, script, region and variant are unchanged. + * + * @return This builder. + * @see #setExtension(char, String) + */ + public Builder clearExtensions() { + _locbld.clearExtensions(); + return this; + } + + /** + * Returns an instance of Locale created from the fields set + * on this builder. + * + *

    This applies the conversions listed in {@link Locale#forLanguageTag} + * when constructing a Locale. (Grandfathered tags are handled in + * {@link #setLanguageTag}.) + * + * @return A Locale. + */ + public Locale build() { + BaseLocale baseloc = _locbld.getBaseLocale(); + LocaleExtensions extensions = _locbld.getLocaleExtensions(); + return Locale.getInstance(baseloc, extensions); + } + } } diff --git a/jdk/src/share/classes/java/util/Properties.java b/jdk/src/share/classes/java/util/Properties.java index 4012f2f5e6c..6f9c562e4f8 100644 --- a/jdk/src/share/classes/java/util/Properties.java +++ b/jdk/src/share/classes/java/util/Properties.java @@ -912,9 +912,13 @@ class Properties extends Hashtable { * *

    The specified stream remains open after this method returns. * - * @param os the output stream on which to emit the XML document. - * @param comment a description of the property list, or null - * if no comment is desired. + * @param os the output stream on which to emit the XML document. + * @param comment a description of the property list, or null + * if no comment is desired. + * @param encoding the name of a supported + * + * character encoding + * * @throws IOException if writing to the specified output stream * results in an IOException. * @throws NullPointerException if os is null, diff --git a/jdk/src/share/classes/java/util/ResourceBundle.java b/jdk/src/share/classes/java/util/ResourceBundle.java index 56888362bbd..e645fe91439 100644 --- a/jdk/src/share/classes/java/util/ResourceBundle.java +++ b/jdk/src/share/classes/java/util/ResourceBundle.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2010, 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 @@ -56,16 +56,18 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.jar.JarEntry; +import sun.util.locale.BaseLocale; +import sun.util.locale.LocaleExtensions; +import sun.util.locale.LocaleObjectCache; + /** * - * Resource bundles contain locale-specific objects. - * When your program needs a locale-specific resource, - * a String for example, your program can load it - * from the resource bundle that is appropriate for the - * current user's locale. In this way, you can write - * program code that is largely independent of the user's - * locale isolating most, if not all, of the locale-specific + * Resource bundles contain locale-specific objects. When your program needs a + * locale-specific resource, a String for example, your program can + * load it from the resource bundle that is appropriate for the current user's + * locale. In this way, you can write program code that is largely independent + * of the user's locale isolating most, if not all, of the locale-specific * information in resource bundles. * *

    @@ -854,87 +856,140 @@ public abstract class ResourceBundle { } /** - * Gets a resource bundle using the specified base name, locale, and class loader. + * Gets a resource bundle using the specified base name, locale, and class + * loader. * - *

    - * Conceptually, getBundle uses the following strategy for locating and instantiating - * resource bundles: - *

    - * getBundle uses the base name, the specified locale, and the default - * locale (obtained from {@link java.util.Locale#getDefault() Locale.getDefault}) - * to generate a sequence of candidate bundle names. - * If the specified locale's language, country, and variant are all empty - * strings, then the base name is the only candidate bundle name. - * Otherwise, the following sequence is generated from the attribute - * values of the specified locale (language1, country1, and variant1) - * and of the default locale (language2, country2, and variant2): - *

      - *
    • baseName + "_" + language1 + "_" + country1 + "_" + variant1 - *
    • baseName + "_" + language1 + "_" + country1 - *
    • baseName + "_" + language1 - *
    • baseName + "_" + language2 + "_" + country2 + "_" + variant2 - *
    • baseName + "_" + language2 + "_" + country2 - *
    • baseName + "_" + language2 - *
    • baseName - *
    - *

    - * Candidate bundle names where the final component is an empty string are omitted. - * For example, if country1 is an empty string, the second candidate bundle name is omitted. + *

    This method behaves the same as calling + * {@link #getBundle(String, Locale, ClassLoader, Control)} passing a + * default instance of {@link Control}. The following describes this behavior. * - *

    - * getBundle then iterates over the candidate bundle names to find the first - * one for which it can instantiate an actual resource bundle. For each candidate - * bundle name, it attempts to create a resource bundle: - *

    + *

    getBundle uses the base name, the specified locale, and + * the default locale (obtained from {@link java.util.Locale#getDefault() + * Locale.getDefault}) to generate a sequence of candidate bundle names. If the specified + * locale's language, script, country, and variant are all empty strings, + * then the base name is the only candidate bundle name. Otherwise, a list + * of candidate locales is generated from the attribute values of the + * specified locale (language, script, country and variant) and appended to + * the base name. Typically, this will look like the following: * - *

    - * If no result resource bundle has been found, a MissingResourceException - * is thrown. + *

    +     *     baseName + "_" + language + "_" + script + "_" + country + "_" + variant
    +     *     baseName + "_" + language + "_" + script + "_" + country
    +     *     baseName + "_" + language + "_" + script
    +     *     baseName + "_" + language + "_" + country + "_" + variant
    +     *     baseName + "_" + language + "_" + country
    +     *     baseName + "_" + language
    +     * 
    * - *

    - * Once a result resource bundle has been found, its parent chain is instantiated. - * getBundle iterates over the candidate bundle names that can be - * obtained by successively removing variant, country, and language - * (each time with the preceding "_") from the bundle name of the result resource bundle. - * As above, candidate bundle names where the final component is an empty string are omitted. - * With each of the candidate bundle names it attempts to instantiate a resource bundle, as - * described above. - * Whenever it succeeds, it calls the previously instantiated resource + *

    Candidate bundle names where the final component is an empty string + * are omitted, along with the underscore. For example, if country is an + * empty string, the second and the fifth candidate bundle names above + * would be omitted. Also, if script is an empty string, the candidate names + * including script are omitted. For example, a locale with language "de" + * and variant "JAVA" will produce candidate names with base name + * "MyResource" below. + * + *

    +     *     MyResource_de__JAVA
    +     *     MyResource_de
    +     * 
    + * + * In the case that the variant contains one or more underscores ('_'), a + * sequence of bundle names generated by truncating the last underscore and + * the part following it is inserted after a candidate bundle name with the + * original variant. For example, for a locale with language "en", script + * "Latn, country "US" and variant "WINDOWS_VISTA", and bundle base name + * "MyResource", the list of candidate bundle names below is generated: + * + *
    +     * MyResource_en_Latn_US_WINDOWS_VISTA
    +     * MyResource_en_Latn_US_WINDOWS
    +     * MyResource_en_Latn_US
    +     * MyResource_en_Latn
    +     * MyResource_en_US_WINDOWS_VISTA
    +     * MyResource_en_US_WINDOWS
    +     * MyResource_en_US
    +     * MyResource_en
    +     * 
    + * + *
    Note: For some Locales, the list of + * candidate bundle names contains extra names, or the order of bundle names + * is slightly modified. See the description of the default implementation + * of {@link Control#getCandidateLocales(String, Locale) + * getCandidateLocales} for details.
    + * + *

    getBundle then iterates over the candidate bundle names + * to find the first one for which it can instantiate an actual + * resource bundle. It uses the default controls' {@link Control#getFormats + * getFormats} method, which generates two bundle names for each generated + * name, the first a class name and the second a properties file name. For + * each candidate bundle name, it attempts to create a resource bundle: + * + *

    • First, it attempts to load a class using the generated class name. + * If such a class can be found and loaded using the specified class + * loader, is assignment compatible with ResourceBundle, is accessible from + * ResourceBundle, and can be instantiated, getBundle creates a + * new instance of this class and uses it as the result resource + * bundle. + * + *
    • Otherwise, getBundle attempts to locate a property + * resource file using the generated properties file name. It generates a + * path name from the candidate bundle name by replacing all "." characters + * with "/" and appending the string ".properties". It attempts to find a + * "resource" with this name using {@link + * java.lang.ClassLoader#getResource(java.lang.String) + * ClassLoader.getResource}. (Note that a "resource" in the sense of + * getResource has nothing to do with the contents of a + * resource bundle, it is just a container of data, such as a file.) If it + * finds a "resource", it attempts to create a new {@link + * PropertyResourceBundle} instance from its contents. If successful, this + * instance becomes the result resource bundle.
    + * + *

    This continues until a result resource bundle is instantiated or the + * list of candidate bundle names is exhausted. If no matching resource + * bundle is found, the default control's {@link Control#getFallbackLocale + * getFallbackLocale} method is called, which returns the current default + * locale. A new sequence of candidate locale names is generated using this + * locale and and searched again, as above. + * + *

    If still no result bundle is found, the base name alone is looked up. If + * this still fails, a MissingResourceException is thrown. + * + *

    Once a result resource bundle has been found, + * its parent chain is instantiated. If the result bundle already + * has a parent (perhaps because it was returned from a cache) the chain is + * complete. + * + *

    Otherwise, getBundle examines the remainder of the + * candidate locale list that was used during the pass that generated the + * result resource bundle. (As before, candidate bundle names where the + * final component is an empty string are omitted.) When it comes to the + * end of the candidate list, it tries the plain bundle name. With each of the + * candidate bundle names it attempts to instantiate a resource bundle (first + * looking for a class and then a properties file, as described above). + * + *

    Whenever it succeeds, it calls the previously instantiated resource * bundle's {@link #setParent(java.util.ResourceBundle) setParent} method - * with the new resource bundle, unless the previously instantiated resource - * bundle already has a non-null parent. + * with the new resource bundle. This continues until the list of names + * is exhausted or the current bundle already has a non-null parent. * - *

    - * getBundle caches instantiated resource bundles and - * may return the same resource bundle instance multiple - * times. + *

    Once the parent chain is complete, the bundle is returned. * - *

    - * The baseName argument should be a fully qualified class name. However, for - * compatibility with earlier versions, Sun's Java SE Runtime Environments do not verify this, - * and so it is possible to access PropertyResourceBundles by specifying a - * path name (using "/") instead of a fully qualified class name (using "."). + *

    Note: getBundle caches instantiated resource + * bundles and might return the same resource bundle instance multiple times. + * + *

    Note:The baseName argument should be a fully + * qualified class name. However, for compatibility with earlier versions, + * Sun's Java SE Runtime Environments do not verify this, and so it is + * possible to access PropertyResourceBundles by specifying a + * path name (using "/") instead of a fully qualified class name (using + * "."). * *

    - * Example:
    The following class and property files are provided: + * Example: + *

    + * The following class and property files are provided: *

          *     MyResources.class
          *     MyResources.properties
    @@ -944,22 +999,26 @@ public abstract class ResourceBundle {
          *     MyResources_en.properties
          *     MyResources_es_ES.class
          * 
    - * The contents of all files are valid (that is, public non-abstract subclasses of ResourceBundle for - * the ".class" files, syntactically correct ".properties" files). - * The default locale is Locale("en", "GB"). - *

    - * Calling getBundle with the shown locale argument values instantiates - * resource bundles from the following sources: - *

      - *
    • Locale("fr", "CH"): result MyResources_fr_CH.class, parent MyResources_fr.properties, parent MyResources.class - *
    • Locale("fr", "FR"): result MyResources_fr.properties, parent MyResources.class - *
    • Locale("de", "DE"): result MyResources_en.properties, parent MyResources.class - *
    • Locale("en", "US"): result MyResources_en.properties, parent MyResources.class - *
    • Locale("es", "ES"): result MyResources_es_ES.class, parent MyResources.class - *
    - *

    The file MyResources_fr_CH.properties is never used because it is hidden by - * MyResources_fr_CH.class. Likewise, MyResources.properties is also hidden by - * MyResources.class. + * + * The contents of all files are valid (that is, public non-abstract + * subclasses of ResourceBundle for the ".class" files, + * syntactically correct ".properties" files). The default locale is + * Locale("en", "GB"). + * + *

    Calling getBundle with the locale arguments below will + * instantiate resource bundles as follows: + * + * + * + * + * + * + * + *
    Locale("fr", "CH")MyResources_fr_CH.class, parent MyResources_fr.properties, parent MyResources.class
    Locale("fr", "FR")MyResources_fr.properties, parent MyResources.class
    Locale("de", "DE")MyResources_en.properties, parent MyResources.class
    Locale("en", "US")MyResources_en.properties, parent MyResources.class
    Locale("es", "ES")MyResources_es_ES.class, parent MyResources.class
    + * + *

    The file MyResources_fr_CH.properties is never used because it is + * hidden by the MyResources_fr_CH.class. Likewise, MyResources.properties + * is also hidden by MyResources.class. * * @param baseName the base name of the resource bundle, a fully qualified class name * @param locale the locale for which a resource bundle is desired @@ -1095,8 +1154,6 @@ public abstract class ResourceBundle { * href="./ResourceBundle.html#parent_chain">parent chain is * instantiated based on the list of candidate locales from which it was * found. Finally, the bundle is returned to the caller.

  • - * - * * * *

    During the resource bundle loading process above, this factory @@ -1119,7 +1176,6 @@ public abstract class ResourceBundle { * {@link Control#getTimeToLive(String,Locale) * control.getTimeToLive} for details. * - * *

    The following is an example of the bundle loading process with the * default ResourceBundle.Control implementation. * @@ -1131,7 +1187,6 @@ public abstract class ResourceBundle { *

  • Available resource bundles: * foo/bar/Messages_fr.properties and * foo/bar/Messages.properties
  • - * * * *

    First, getBundle tries loading a resource bundle in @@ -1811,8 +1866,8 @@ public abstract class ResourceBundle { * handleGetObject} method returns null. Once the * Set has been created, the value is kept in this * ResourceBundle in order to avoid producing the - * same Set in the next calls. Override this method - * in subclass implementations for faster handling. + * same Set in subsequent calls. Subclasses can + * override this method for faster handling. * * @return a Set of the keys contained only in this * ResourceBundle @@ -2177,24 +2232,133 @@ public abstract class ResourceBundle { * ResourceBundle.getBundle factory method loads only * the base bundle as the resulting resource bundle. * - *

    It is not a requirement to return an immutable - * (unmodifiable) List. However, the returned - * List must not be mutated after it has been - * returned by getCandidateLocales. + *

    It is not a requirement to return an immutable (unmodifiable) + * List. However, the returned List must not + * be mutated after it has been returned by + * getCandidateLocales. * *

    The default implementation returns a List containing - * Locales in the following sequence: - *

    -         *     Locale(language, country, variant)
    -         *     Locale(language, country)
    -         *     Locale(language)
    -         *     Locale.ROOT
    -         * 
    - * where language, country and - * variant are the language, country and variant values - * of the given locale, respectively. Locales where the + * Locales using the rules described below. In the + * description below, L, S, C and V + * respectively represent non-empty language, script, country, and + * variant. For example, [L, C] represents a + * Locale that has non-empty values only for language and + * country. The form L("xx") represents the (non-empty) + * language value is "xx". For all cases, Locales whose * final component values are empty strings are omitted. * + *
    1. For an input Locale with an empty script value, + * append candidate Locales by omitting the final component + * one by one as below: + * + *
        + *
      • [L, C, V] + *
      • [L, C] + *
      • [L] + *
      • Locale.ROOT + *
      + * + *
    2. For an input Locale with a non-empty script value, + * append candidate Locales by omitting the final component + * up to language, then append candidates generated from the + * Locale with country and variant restored: + * + *
        + *
      • [L, S, C, V] + *
      • [L, S, C] + *
      • [L, S] + *
      • [L, C, V] + *
      • [L, C] + *
      • [L] + *
      • Locale.ROOT + *
      + * + *
    3. For an input Locale with a variant value consisting + * of multiple subtags separated by underscore, generate candidate + * Locales by omitting the variant subtags one by one, then + * insert them after every occurence of Locales with the + * full variant value in the original list. For example, if the + * the variant consists of two subtags V1 and V2: + * + *
        + *
      • [L, S, C, V1, V2] + *
      • [L, S, C, V1] + *
      • [L, S, C] + *
      • [L, S] + *
      • [L, C, V1, V2] + *
      • [L, C, V1] + *
      • [L, C] + *
      • [L] + *
      • Locale.ROOT + *
      + * + *
    4. Special cases for Chinese. When an input Locale has the + * language "zh" (Chinese) and an empty script value, either "Hans" (Simplified) or + * "Hant" (Traditional) might be supplied, depending on the country. + * When the country is "CN" (China) or "SG" (Singapore), "Hans" is supplied. + * When the country is "HK" (Hong Kong SAR China), "MO" (Macau SAR China), + * or "TW" (Taiwan), "Hant" is supplied. For all other countries or when the country + * is empty, no script is supplied. For example, for Locale("zh", "CN") + * , the candidate list will be: + *
        + *
      • [L("zh"), S("Hans"), C("CN")] + *
      • [L("zh"), S("Hans")] + *
      • [L("zh"), C("CN")] + *
      • [L("zh")] + *
      • Locale.ROOT + *
      + * + * For Locale("zh", "TW"), the candidate list will be: + *
        + *
      • [L("zh"), S("Hant"), C("TW")] + *
      • [L("zh"), S("Hant")] + *
      • [L("zh"), C("TW")] + *
      • [L("zh")] + *
      • Locale.ROOT + *
      + * + *
    5. Special cases for Norwegian. Both Locale("no", "NO", + * "NY") and Locale("nn", "NO") represent Norwegian + * Nynorsk. When a locale's language is "nn", the standard candidate + * list is generated up to [L("nn")], and then the following + * candidates are added: + * + *
      • [L("no"), C("NO"), V("NY")] + *
      • [L("no"), C("NO")] + *
      • [L("no")] + *
      • Locale.ROOT + *
      + * + * If the locale is exactly Locale("no", "NO", "NY"), it is first + * converted to Locale("nn", "NO") and then the above procedure is + * followed. + * + *

      Also, Java treats the language "no" as a synonym of Norwegian + * Bokmål "nb". Except for the single case Locale("no", + * "NO", "NY") (handled above), when an input Locale + * has language "no" or "nb", candidate Locales with + * language code "no" and "nb" are interleaved, first using the + * requested language, then using its synonym. For example, + * Locale("nb", "NO", "POSIX") generates the following + * candidate list: + * + *

        + *
      • [L("nb"), C("NO"), V("POSIX")] + *
      • [L("no"), C("NO"), V("POSIX")] + *
      • [L("nb"), C("NO")] + *
      • [L("no"), C("NO")] + *
      • [L("nb")] + *
      • [L("no")] + *
      • Locale.ROOT + *
      + * + * Locale("no", "NO", "POSIX") would generate the same list + * except that locales with "no" would appear before the corresponding + * locales with "nb".
    6. + * + * + *
    + * *

    The default implementation uses an {@link ArrayList} that * overriding implementations may modify before returning it to the * caller. However, a subclass must not modify it after it has @@ -2231,24 +2395,119 @@ public abstract class ResourceBundle { if (baseName == null) { throw new NullPointerException(); } - String language = locale.getLanguage(); - String country = locale.getCountry(); - String variant = locale.getVariant(); + return new ArrayList(CANDIDATES_CACHE.get(locale.getBaseLocale())); + } - List locales = new ArrayList(4); - if (variant.length() > 0) { - locales.add(locale); + private static final CandidateListCache CANDIDATES_CACHE = new CandidateListCache(); + + private static class CandidateListCache extends LocaleObjectCache> { + protected List createObject(BaseLocale base) { + String language = base.getLanguage(); + String script = base.getScript(); + String region = base.getRegion(); + String variant = base.getVariant(); + + // Special handling for Norwegian + boolean isNorwegianBokmal = false; + boolean isNorwegianNynorsk = false; + if (language.equals("no")) { + if (region.equals("NO") && variant.equals("NY")) { + variant = ""; + isNorwegianNynorsk = true; + } else { + isNorwegianBokmal = true; + } + } + if (language.equals("nb") || isNorwegianBokmal) { + List tmpList = getDefaultList("nb", script, region, variant); + // Insert a locale replacing "nb" with "no" for every list entry + List bokmalList = new LinkedList(); + for (Locale l : tmpList) { + bokmalList.add(l); + if (l.getLanguage().length() == 0) { + break; + } + bokmalList.add(Locale.getInstance("no", l.getScript(), l.getCountry(), + l.getVariant(), LocaleExtensions.EMPTY_EXTENSIONS)); + } + return bokmalList; + } else if (language.equals("nn") || isNorwegianNynorsk) { + // Insert no_NO_NY, no_NO, no after nn + List nynorskList = getDefaultList("nn", script, region, variant); + int idx = nynorskList.size() - 1; + nynorskList.add(idx++, Locale.getInstance("no", "NO", "NY")); + nynorskList.add(idx++, Locale.getInstance("no", "NO", "")); + nynorskList.add(idx++, Locale.getInstance("no", "", "")); + return nynorskList; + } + // Special handling for Chinese + else if (language.equals("zh")) { + if (script.length() == 0 && region.length() > 0) { + // Supply script for users who want to use zh_Hans/zh_Hant + // as bundle names (recommended for Java7+) + if (region.equals("TW") || region.equals("HK") || region.equals("MO")) { + script = "Hant"; + } else if (region.equals("CN") || region.equals("SG")) { + script = "Hans"; + } + } else if (script.length() > 0 && region.length() == 0) { + // Supply region(country) for users who still package Chinese + // bundles using old convension. + if (script.equals("Hans")) { + region = "CN"; + } else if (script.equals("Hant")) { + region = "TW"; + } + } + } + + return getDefaultList(language, script, region, variant); } - if (country.length() > 0) { - locales.add((locales.size() == 0) ? - locale : Locale.getInstance(language, country, "")); + + private static List getDefaultList(String language, String script, String region, String variant) { + List variants = null; + + if (variant.length() > 0) { + variants = new LinkedList(); + int idx = variant.length(); + while (idx != -1) { + variants.add(variant.substring(0, idx)); + idx = variant.lastIndexOf('_', --idx); + } + } + + LinkedList list = new LinkedList(); + + if (variants != null) { + for (String v : variants) { + list.add(Locale.getInstance(language, script, region, v, LocaleExtensions.EMPTY_EXTENSIONS)); + } + } + if (region.length() > 0) { + list.add(Locale.getInstance(language, script, region, "", LocaleExtensions.EMPTY_EXTENSIONS)); + } + if (script.length() > 0) { + list.add(Locale.getInstance(language, script, "", "", LocaleExtensions.EMPTY_EXTENSIONS)); + + // With script, after truncating variant, region and script, + // start over without script. + if (variants != null) { + for (String v : variants) { + list.add(Locale.getInstance(language, "", region, v, LocaleExtensions.EMPTY_EXTENSIONS)); + } + } + if (region.length() > 0) { + list.add(Locale.getInstance(language, "", region, "", LocaleExtensions.EMPTY_EXTENSIONS)); + } + } + if (language.length() > 0) { + list.add(Locale.getInstance(language, "", "", "", LocaleExtensions.EMPTY_EXTENSIONS)); + } + // Add root locale at the end + list.add(Locale.ROOT); + + return list; } - if (language.length() > 0) { - locales.add((locales.size() == 0) ? - locale : Locale.getInstance(language, "", "")); - } - locales.add(Locale.ROOT); - return locales; } /** @@ -2606,13 +2865,14 @@ public abstract class ResourceBundle { * *

    This implementation returns the following value: *

    -         *     baseName + "_" + language + "_" + country + "_" + variant
    +         *     baseName + "_" + language + "_" + script + "_" + country + "_" + variant
              * 
    - * where language, country and - * variant are the language, country and variant values - * of locale, respectively. Final component values that - * are empty Strings are omitted along with the preceding '_'. If - * all of the values are empty strings, then baseName + * where language, script, country, + * and variant are the language, script, country, and variant + * values of locale, respectively. Final component values that + * are empty Strings are omitted along with the preceding '_'. When the + * script is empty, the script value is ommitted along with the preceding '_'. + * If all of the values are empty strings, then baseName * is returned. * *

    For example, if baseName is @@ -2643,6 +2903,7 @@ public abstract class ResourceBundle { } String language = locale.getLanguage(); + String script = locale.getScript(); String country = locale.getCountry(); String variant = locale.getVariant(); @@ -2652,12 +2913,22 @@ public abstract class ResourceBundle { StringBuilder sb = new StringBuilder(baseName); sb.append('_'); - if (variant != "") { - sb.append(language).append('_').append(country).append('_').append(variant); - } else if (country != "") { - sb.append(language).append('_').append(country); + if (script != "") { + if (variant != "") { + sb.append(language).append('_').append(script).append('_').append(country).append('_').append(variant); + } else if (country != "") { + sb.append(language).append('_').append(script).append('_').append(country); + } else { + sb.append(language).append('_').append(script); + } } else { - sb.append(language); + if (variant != "") { + sb.append(language).append('_').append(country).append('_').append(variant); + } else if (country != "") { + sb.append(language).append('_').append(country); + } else { + sb.append(language); + } } return sb.toString(); diff --git a/jdk/src/share/classes/java/util/Scanner.java b/jdk/src/share/classes/java/util/Scanner.java index 615250ccc3c..139e5fa38d2 100644 --- a/jdk/src/share/classes/java/util/Scanner.java +++ b/jdk/src/share/classes/java/util/Scanner.java @@ -582,7 +582,7 @@ public final class Scanner implements Iterator, Closeable { matcher = delimPattern.matcher(buf); matcher.useTransparentBounds(true); matcher.useAnchoringBounds(false); - useLocale(Locale.getDefault()); + useLocale(Locale.getDefault(Locale.Category.FORMAT)); } /** @@ -2642,7 +2642,7 @@ public final class Scanner implements Iterator, Closeable { */ public Scanner reset() { delimPattern = WHITESPACE_PATTERN; - useLocale(Locale.getDefault()); + useLocale(Locale.getDefault(Locale.Category.FORMAT)); useRadix(10); clearCaches(); return this; diff --git a/jdk/src/share/classes/java/util/TimeZone.java b/jdk/src/share/classes/java/util/TimeZone.java index 1a68ca3e887..b759f9126d5 100644 --- a/jdk/src/share/classes/java/util/TimeZone.java +++ b/jdk/src/share/classes/java/util/TimeZone.java @@ -312,7 +312,7 @@ abstract public class TimeZone implements Serializable, Cloneable { * @since 1.2 */ public final String getDisplayName() { - return getDisplayName(false, LONG, Locale.getDefault()); + return getDisplayName(false, LONG, Locale.getDefault(Locale.Category.DISPLAY)); } /** @@ -342,7 +342,7 @@ abstract public class TimeZone implements Serializable, Cloneable { * @since 1.2 */ public final String getDisplayName(boolean daylight, int style) { - return getDisplayName(daylight, style, Locale.getDefault()); + return getDisplayName(daylight, style, Locale.getDefault(Locale.Category.DISPLAY)); } /** diff --git a/jdk/src/share/classes/java/util/concurrent/ForkJoinPool.java b/jdk/src/share/classes/java/util/concurrent/ForkJoinPool.java index f250a5e9835..122ce86737e 100644 --- a/jdk/src/share/classes/java/util/concurrent/ForkJoinPool.java +++ b/jdk/src/share/classes/java/util/concurrent/ForkJoinPool.java @@ -40,16 +40,23 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; -import java.util.concurrent.locks.Condition; +import java.util.concurrent.AbstractExecutorService; +import java.util.concurrent.Callable; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Future; +import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.RunnableFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.LockSupport; import java.util.concurrent.locks.ReentrantLock; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; /** * An {@link ExecutorService} for running {@link ForkJoinTask}s. * A {@code ForkJoinPool} provides the entry point for submissions - * from non-{@code ForkJoinTask}s, as well as management and + * from non-{@code ForkJoinTask} clients, as well as management and * monitoring operations. * *

    A {@code ForkJoinPool} differs from other kinds of {@link @@ -58,29 +65,19 @@ import java.util.concurrent.atomic.AtomicLong; * execute subtasks created by other active tasks (eventually blocking * waiting for work if none exist). This enables efficient processing * when most tasks spawn other subtasks (as do most {@code - * ForkJoinTask}s). A {@code ForkJoinPool} may also be used for mixed - * execution of some plain {@code Runnable}- or {@code Callable}- - * based activities along with {@code ForkJoinTask}s. When setting - * {@linkplain #setAsyncMode async mode}, a {@code ForkJoinPool} may - * also be appropriate for use with fine-grained tasks of any form - * that are never joined. Otherwise, other {@code ExecutorService} - * implementations are typically more appropriate choices. + * ForkJoinTask}s). When setting asyncMode to true in + * constructors, {@code ForkJoinPool}s may also be appropriate for use + * with event-style tasks that are never joined. * *

    A {@code ForkJoinPool} is constructed with a given target * parallelism level; by default, equal to the number of available - * processors. Unless configured otherwise via {@link - * #setMaintainsParallelism}, the pool attempts to maintain this - * number of active (or available) threads by dynamically adding, - * suspending, or resuming internal worker threads, even if some tasks - * are stalled waiting to join others. However, no such adjustments - * are performed in the face of blocked IO or other unmanaged - * synchronization. The nested {@link ManagedBlocker} interface - * enables extension of the kinds of synchronization accommodated. - * The target parallelism level may also be changed dynamically - * ({@link #setParallelism}). The total number of threads may be - * limited using method {@link #setMaximumPoolSize}, in which case it - * may become possible for the activities of a pool to stall due to - * the lack of available threads to process new tasks. + * processors. The pool attempts to maintain enough active (or + * available) threads by dynamically adding, suspending, or resuming + * internal worker threads, even if some tasks are stalled waiting to + * join others. However, no such adjustments are guaranteed in the + * face of blocked IO or other unmanaged synchronization. The nested + * {@link ManagedBlocker} interface enables extension of the kinds of + * synchronization accommodated. * *

    In addition to execution and lifecycle control methods, this * class provides status check methods (for example @@ -89,6 +86,40 @@ import java.util.concurrent.atomic.AtomicLong; * {@link #toString} returns indications of pool state in a * convenient form for informal monitoring. * + *

    As is the case with other ExecutorServices, there are three + * main task execution methods summarized in the following + * table. These are designed to be used by clients not already engaged + * in fork/join computations in the current pool. The main forms of + * these methods accept instances of {@code ForkJoinTask}, but + * overloaded forms also allow mixed execution of plain {@code + * Runnable}- or {@code Callable}- based activities as well. However, + * tasks that are already executing in a pool should normally + * NOT use these pool execution methods, but instead use the + * within-computation forms listed in the table. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
    Call from non-fork/join clients Call from within fork/join computations
    Arrange async execution {@link #execute(ForkJoinTask)} {@link ForkJoinTask#fork}
    Await and obtain result {@link #invoke(ForkJoinTask)} {@link ForkJoinTask#invoke}
    Arrange exec and obtain Future {@link #submit(ForkJoinTask)} {@link ForkJoinTask#fork} (ForkJoinTasks are Futures)
    + * *

    Sample Usage. Normally a single {@code ForkJoinPool} is * used for all parallel task execution in a program or subsystem. * Otherwise, use would not usually outweigh the construction and @@ -113,7 +144,8 @@ import java.util.concurrent.atomic.AtomicLong; * {@code IllegalArgumentException}. * *

    This implementation rejects submitted tasks (that is, by throwing - * {@link RejectedExecutionException}) only when the pool is shut down. + * {@link RejectedExecutionException}) only when the pool is shut down + * or internal resources have been exhausted. * * @since 1.7 * @author Doug Lea @@ -121,16 +153,247 @@ import java.util.concurrent.atomic.AtomicLong; public class ForkJoinPool extends AbstractExecutorService { /* - * See the extended comments interspersed below for design, - * rationale, and walkthroughs. + * Implementation Overview + * + * This class provides the central bookkeeping and control for a + * set of worker threads: Submissions from non-FJ threads enter + * into a submission queue. Workers take these tasks and typically + * split them into subtasks that may be stolen by other workers. + * The main work-stealing mechanics implemented in class + * ForkJoinWorkerThread give first priority to processing tasks + * from their own queues (LIFO or FIFO, depending on mode), then + * to randomized FIFO steals of tasks in other worker queues, and + * lastly to new submissions. These mechanics do not consider + * affinities, loads, cache localities, etc, so rarely provide the + * best possible performance on a given machine, but portably + * provide good throughput by averaging over these factors. + * (Further, even if we did try to use such information, we do not + * usually have a basis for exploiting it. For example, some sets + * of tasks profit from cache affinities, but others are harmed by + * cache pollution effects.) + * + * Beyond work-stealing support and essential bookkeeping, the + * main responsibility of this framework is to take actions when + * one worker is waiting to join a task stolen (or always held by) + * another. Because we are multiplexing many tasks on to a pool + * of workers, we can't just let them block (as in Thread.join). + * We also cannot just reassign the joiner's run-time stack with + * another and replace it later, which would be a form of + * "continuation", that even if possible is not necessarily a good + * idea. Given that the creation costs of most threads on most + * systems mainly surrounds setting up runtime stacks, thread + * creation and switching is usually not much more expensive than + * stack creation and switching, and is more flexible). Instead we + * combine two tactics: + * + * Helping: Arranging for the joiner to execute some task that it + * would be running if the steal had not occurred. Method + * ForkJoinWorkerThread.helpJoinTask tracks joining->stealing + * links to try to find such a task. + * + * Compensating: Unless there are already enough live threads, + * method helpMaintainParallelism() may create or + * re-activate a spare thread to compensate for blocked + * joiners until they unblock. + * + * It is impossible to keep exactly the target (parallelism) + * number of threads running at any given time. Determining + * existence of conservatively safe helping targets, the + * availability of already-created spares, and the apparent need + * to create new spares are all racy and require heuristic + * guidance, so we rely on multiple retries of each. Compensation + * occurs in slow-motion. It is triggered only upon timeouts of + * Object.wait used for joins. This reduces poor decisions that + * would otherwise be made when threads are waiting for others + * that are stalled because of unrelated activities such as + * garbage collection. + * + * The ManagedBlocker extension API can't use helping so relies + * only on compensation in method awaitBlocker. + * + * The main throughput advantages of work-stealing stem from + * decentralized control -- workers mostly steal tasks from each + * other. We do not want to negate this by creating bottlenecks + * implementing other management responsibilities. So we use a + * collection of techniques that avoid, reduce, or cope well with + * contention. These entail several instances of bit-packing into + * CASable fields to maintain only the minimally required + * atomicity. To enable such packing, we restrict maximum + * parallelism to (1<<15)-1 (enabling twice this (to accommodate + * unbalanced increments and decrements) to fit into a 16 bit + * field, which is far in excess of normal operating range. Even + * though updates to some of these bookkeeping fields do sometimes + * contend with each other, they don't normally cache-contend with + * updates to others enough to warrant memory padding or + * isolation. So they are all held as fields of ForkJoinPool + * objects. The main capabilities are as follows: + * + * 1. Creating and removing workers. Workers are recorded in the + * "workers" array. This is an array as opposed to some other data + * structure to support index-based random steals by workers. + * Updates to the array recording new workers and unrecording + * terminated ones are protected from each other by a lock + * (workerLock) but the array is otherwise concurrently readable, + * and accessed directly by workers. To simplify index-based + * operations, the array size is always a power of two, and all + * readers must tolerate null slots. Currently, all worker thread + * creation is on-demand, triggered by task submissions, + * replacement of terminated workers, and/or compensation for + * blocked workers. However, all other support code is set up to + * work with other policies. + * + * To ensure that we do not hold on to worker references that + * would prevent GC, ALL accesses to workers are via indices into + * the workers array (which is one source of some of the unusual + * code constructions here). In essence, the workers array serves + * as a WeakReference mechanism. Thus for example the event queue + * stores worker indices, not worker references. Access to the + * workers in associated methods (for example releaseEventWaiters) + * must both index-check and null-check the IDs. All such accesses + * ignore bad IDs by returning out early from what they are doing, + * since this can only be associated with shutdown, in which case + * it is OK to give up. On termination, we just clobber these + * data structures without trying to use them. + * + * 2. Bookkeeping for dynamically adding and removing workers. We + * aim to approximately maintain the given level of parallelism. + * When some workers are known to be blocked (on joins or via + * ManagedBlocker), we may create or resume others to take their + * place until they unblock (see below). Implementing this + * requires counts of the number of "running" threads (i.e., those + * that are neither blocked nor artificially suspended) as well as + * the total number. These two values are packed into one field, + * "workerCounts" because we need accurate snapshots when deciding + * to create, resume or suspend. Note however that the + * correspondence of these counts to reality is not guaranteed. In + * particular updates for unblocked threads may lag until they + * actually wake up. + * + * 3. Maintaining global run state. The run state of the pool + * consists of a runLevel (SHUTDOWN, TERMINATING, etc) similar to + * those in other Executor implementations, as well as a count of + * "active" workers -- those that are, or soon will be, or + * recently were executing tasks. The runLevel and active count + * are packed together in order to correctly trigger shutdown and + * termination. Without care, active counts can be subject to very + * high contention. We substantially reduce this contention by + * relaxing update rules. A worker must claim active status + * prospectively, by activating if it sees that a submitted or + * stealable task exists (it may find after activating that the + * task no longer exists). It stays active while processing this + * task (if it exists) and any other local subtasks it produces, + * until it cannot find any other tasks. It then tries + * inactivating (see method preStep), but upon update contention + * instead scans for more tasks, later retrying inactivation if it + * doesn't find any. + * + * 4. Managing idle workers waiting for tasks. We cannot let + * workers spin indefinitely scanning for tasks when none are + * available. On the other hand, we must quickly prod them into + * action when new tasks are submitted or generated. We + * park/unpark these idle workers using an event-count scheme. + * Field eventCount is incremented upon events that may enable + * workers that previously could not find a task to now find one: + * Submission of a new task to the pool, or another worker pushing + * a task onto a previously empty queue. (We also use this + * mechanism for configuration and termination actions that + * require wakeups of idle workers). Each worker maintains its + * last known event count, and blocks when a scan for work did not + * find a task AND its lastEventCount matches the current + * eventCount. Waiting idle workers are recorded in a variant of + * Treiber stack headed by field eventWaiters which, when nonzero, + * encodes the thread index and count awaited for by the worker + * thread most recently calling eventSync. This thread in turn has + * a record (field nextEventWaiter) for the next waiting worker. + * In addition to allowing simpler decisions about need for + * wakeup, the event count bits in eventWaiters serve the role of + * tags to avoid ABA errors in Treiber stacks. Upon any wakeup, + * released threads also try to release at most two others. The + * net effect is a tree-like diffusion of signals, where released + * threads (and possibly others) help with unparks. To further + * reduce contention effects a bit, failed CASes to increment + * field eventCount are tolerated without retries in signalWork. + * Conceptually they are merged into the same event, which is OK + * when their only purpose is to enable workers to scan for work. + * + * 5. Managing suspension of extra workers. When a worker notices + * (usually upon timeout of a wait()) that there are too few + * running threads, we may create a new thread to maintain + * parallelism level, or at least avoid starvation. Usually, extra + * threads are needed for only very short periods, yet join + * dependencies are such that we sometimes need them in + * bursts. Rather than create new threads each time this happens, + * we suspend no-longer-needed extra ones as "spares". For most + * purposes, we don't distinguish "extra" spare threads from + * normal "core" threads: On each call to preStep (the only point + * at which we can do this) a worker checks to see if there are + * now too many running workers, and if so, suspends itself. + * Method helpMaintainParallelism looks for suspended threads to + * resume before considering creating a new replacement. The + * spares themselves are encoded on another variant of a Treiber + * Stack, headed at field "spareWaiters". Note that the use of + * spares is intrinsically racy. One thread may become a spare at + * about the same time as another is needlessly being created. We + * counteract this and related slop in part by requiring resumed + * spares to immediately recheck (in preStep) to see whether they + * should re-suspend. + * + * 6. Killing off unneeded workers. A timeout mechanism is used to + * shed unused workers: The oldest (first) event queue waiter uses + * a timed rather than hard wait. When this wait times out without + * a normal wakeup, it tries to shutdown any one (for convenience + * the newest) other spare or event waiter via + * tryShutdownUnusedWorker. This eventually reduces the number of + * worker threads to a minimum of one after a long enough period + * without use. + * + * 7. Deciding when to create new workers. The main dynamic + * control in this class is deciding when to create extra threads + * in method helpMaintainParallelism. We would like to keep + * exactly #parallelism threads running, which is an impossible + * task. We always need to create one when the number of running + * threads would become zero and all workers are busy. Beyond + * this, we must rely on heuristics that work well in the + * presence of transient phenomena such as GC stalls, dynamic + * compilation, and wake-up lags. These transients are extremely + * common -- we are normally trying to fully saturate the CPUs on + * a machine, so almost any activity other than running tasks + * impedes accuracy. Our main defense is to allow parallelism to + * lapse for a while during joins, and use a timeout to see if, + * after the resulting settling, there is still a need for + * additional workers. This also better copes with the fact that + * some of the methods in this class tend to never become compiled + * (but are interpreted), so some components of the entire set of + * controls might execute 100 times faster than others. And + * similarly for cases where the apparent lack of work is just due + * to GC stalls and other transient system activity. + * + * Beware that there is a lot of representation-level coupling + * among classes ForkJoinPool, ForkJoinWorkerThread, and + * ForkJoinTask. For example, direct access to "workers" array by + * workers, and direct access to ForkJoinTask.status by both + * ForkJoinPool and ForkJoinWorkerThread. There is little point + * trying to reduce this, since any associated future changes in + * representations will need to be accompanied by algorithmic + * changes anyway. + * + * Style notes: There are lots of inline assignments (of form + * "while ((local = field) != 0)") which are usually the simplest + * way to ensure the required read orderings (which are sometimes + * critical). Also several occurrences of the unusual "do {} + * while (!cas...)" which is the simplest way to force an update of + * a CAS'ed variable. There are also other coding oddities that + * help some methods perform reasonably even when interpreted (not + * compiled), at the expense of some messy constructions that + * reduce byte code counts. + * + * The order of declarations in this file is: (1) statics (2) + * fields (along with constants used when unpacking some of them) + * (3) internal control methods (4) callbacks and other support + * for ForkJoinTask and ForkJoinWorkerThread classes, (5) exported + * methods (plus a few little helpers). */ - /** Mask for packing and unpacking shorts */ - private static final int shortMask = 0xffff; - - /** Max pool size -- must be a power of two minus 1 */ - private static final int MAX_THREADS = 0x7FFF; - /** * Factory for creating new {@link ForkJoinWorkerThread}s. * A {@code ForkJoinWorkerThreadFactory} must be defined and used @@ -151,14 +414,10 @@ public class ForkJoinPool extends AbstractExecutorService { * Default ForkJoinWorkerThreadFactory implementation; creates a * new ForkJoinWorkerThread. */ - static class DefaultForkJoinWorkerThreadFactory + static class DefaultForkJoinWorkerThreadFactory implements ForkJoinWorkerThreadFactory { public ForkJoinWorkerThread newThread(ForkJoinPool pool) { - try { - return new ForkJoinWorkerThread(pool); - } catch (OutOfMemoryError oom) { - return null; - } + return new ForkJoinWorkerThread(pool); } } @@ -194,208 +453,777 @@ public class ForkJoinPool extends AbstractExecutorService { new AtomicInteger(); /** - * Array holding all worker threads in the pool. Initialized upon - * first use. Array size must be a power of two. Updates and - * replacements are protected by workerLock, but it is always kept - * in a consistent enough state to be randomly accessed without - * locking by workers performing work-stealing. + * The time to block in a join (see awaitJoin) before checking if + * a new worker should be (re)started to maintain parallelism + * level. The value should be short enough to maintain global + * responsiveness and progress but long enough to avoid + * counterproductive firings during GC stalls or unrelated system + * activity, and to not bog down systems with continual re-firings + * on GCs or legitimately long waits. + */ + private static final long JOIN_TIMEOUT_MILLIS = 250L; // 4 per second + + /** + * The wakeup interval (in nanoseconds) for the oldest worker + * waiting for an event to invoke tryShutdownUnusedWorker to + * shrink the number of workers. The exact value does not matter + * too much. It must be short enough to release resources during + * sustained periods of idleness, but not so short that threads + * are continually re-created. + */ + private static final long SHRINK_RATE_NANOS = + 30L * 1000L * 1000L * 1000L; // 2 per minute + + /** + * Absolute bound for parallelism level. Twice this number plus + * one (i.e., 0xfff) must fit into a 16bit field to enable + * word-packing for some counts and indices. + */ + private static final int MAX_WORKERS = 0x7fff; + + /** + * Array holding all worker threads in the pool. Array size must + * be a power of two. Updates and replacements are protected by + * workerLock, but the array is always kept in a consistent enough + * state to be randomly accessed without locking by workers + * performing work-stealing, as well as other traversal-based + * methods in this class. All readers must tolerate that some + * array slots may be null. */ volatile ForkJoinWorkerThread[] workers; - /** - * Lock protecting access to workers. - */ - private final ReentrantLock workerLock; - - /** - * Condition for awaitTermination. - */ - private final Condition termination; - - /** - * The uncaught exception handler used when any worker - * abruptly terminates - */ - private Thread.UncaughtExceptionHandler ueh; - - /** - * Creation factory for worker threads. - */ - private final ForkJoinWorkerThreadFactory factory; - - /** - * Head of stack of threads that were created to maintain - * parallelism when other threads blocked, but have since - * suspended when the parallelism level rose. - */ - private volatile WaitQueueNode spareStack; - - /** - * Sum of per-thread steal counts, updated only when threads are - * idle or terminating. - */ - private final AtomicLong stealCount; - /** * Queue for external submissions. */ private final LinkedTransferQueue> submissionQueue; /** - * Head of Treiber stack for barrier sync. See below for explanation. + * Lock protecting updates to workers array. */ - private volatile WaitQueueNode syncStack; + private final ReentrantLock workerLock; /** - * The count for event barrier + * Latch released upon termination. */ - private volatile long eventCount; + private final Phaser termination; + + /** + * Creation factory for worker threads. + */ + private final ForkJoinWorkerThreadFactory factory; + + /** + * Sum of per-thread steal counts, updated only when threads are + * idle or terminating. + */ + private volatile long stealCount; + + /** + * Encoded record of top of Treiber stack of threads waiting for + * events. The top 32 bits contain the count being waited for. The + * bottom 16 bits contains one plus the pool index of waiting + * worker thread. (Bits 16-31 are unused.) + */ + private volatile long eventWaiters; + + private static final int EVENT_COUNT_SHIFT = 32; + private static final long WAITER_ID_MASK = (1L << 16) - 1L; + + /** + * A counter for events that may wake up worker threads: + * - Submission of a new task to the pool + * - A worker pushing a task on an empty queue + * - termination + */ + private volatile int eventCount; + + /** + * Encoded record of top of Treiber stack of spare threads waiting + * for resumption. The top 16 bits contain an arbitrary count to + * avoid ABA effects. The bottom 16bits contains one plus the pool + * index of waiting worker thread. + */ + private volatile int spareWaiters; + + private static final int SPARE_COUNT_SHIFT = 16; + private static final int SPARE_ID_MASK = (1 << 16) - 1; + + /** + * Lifecycle control. The low word contains the number of workers + * that are (probably) executing tasks. This value is atomically + * incremented before a worker gets a task to run, and decremented + * when a worker has no tasks and cannot find any. Bits 16-18 + * contain runLevel value. When all are zero, the pool is + * running. Level transitions are monotonic (running -> shutdown + * -> terminating -> terminated) so each transition adds a bit. + * These are bundled together to ensure consistent read for + * termination checks (i.e., that runLevel is at least SHUTDOWN + * and active threads is zero). + * + * Notes: Most direct CASes are dependent on these bitfield + * positions. Also, this field is non-private to enable direct + * performance-sensitive CASes in ForkJoinWorkerThread. + */ + volatile int runState; + + // Note: The order among run level values matters. + private static final int RUNLEVEL_SHIFT = 16; + private static final int SHUTDOWN = 1 << RUNLEVEL_SHIFT; + private static final int TERMINATING = 1 << (RUNLEVEL_SHIFT + 1); + private static final int TERMINATED = 1 << (RUNLEVEL_SHIFT + 2); + private static final int ACTIVE_COUNT_MASK = (1 << RUNLEVEL_SHIFT) - 1; + + /** + * Holds number of total (i.e., created and not yet terminated) + * and running (i.e., not blocked on joins or other managed sync) + * threads, packed together to ensure consistent snapshot when + * making decisions about creating and suspending spare + * threads. Updated only by CAS. Note that adding a new worker + * requires incrementing both counts, since workers start off in + * running state. + */ + private volatile int workerCounts; + + private static final int TOTAL_COUNT_SHIFT = 16; + private static final int RUNNING_COUNT_MASK = (1 << TOTAL_COUNT_SHIFT) - 1; + private static final int ONE_RUNNING = 1; + private static final int ONE_TOTAL = 1 << TOTAL_COUNT_SHIFT; + + /** + * The target parallelism level. + * Accessed directly by ForkJoinWorkerThreads. + */ + final int parallelism; + + /** + * True if use local fifo, not default lifo, for local polling + * Read by, and replicated by ForkJoinWorkerThreads + */ + final boolean locallyFifo; + + /** + * The uncaught exception handler used when any worker abruptly + * terminates. + */ + private final Thread.UncaughtExceptionHandler ueh; /** * Pool number, just for assigning useful names to worker threads */ private final int poolNumber; - /** - * The maximum allowed pool size - */ - private volatile int maxPoolSize; + // Utilities for CASing fields. Note that most of these + // are usually manually inlined by callers /** - * The desired parallelism level, updated only under workerLock. + * Increments running count part of workerCounts */ - private volatile int parallelism; - - /** - * True if use local fifo, not default lifo, for local polling - */ - private volatile boolean locallyFifo; - - /** - * Holds number of total (i.e., created and not yet terminated) - * and running (i.e., not blocked on joins or other managed sync) - * threads, packed into one int to ensure consistent snapshot when - * making decisions about creating and suspending spare - * threads. Updated only by CAS. Note: CASes in - * updateRunningCount and preJoin assume that running active count - * is in low word, so need to be modified if this changes. - */ - private volatile int workerCounts; - - private static int totalCountOf(int s) { return s >>> 16; } - private static int runningCountOf(int s) { return s & shortMask; } - private static int workerCountsFor(int t, int r) { return (t << 16) + r; } - - /** - * Adds delta (which may be negative) to running count. This must - * be called before (with negative arg) and after (with positive) - * any managed synchronization (i.e., mainly, joins). - * - * @param delta the number to add - */ - final void updateRunningCount(int delta) { - int s; - do {} while (!casWorkerCounts(s = workerCounts, s + delta)); + final void incrementRunningCount() { + int c; + do {} while (!UNSAFE.compareAndSwapInt(this, workerCountsOffset, + c = workerCounts, + c + ONE_RUNNING)); } /** - * Adds delta (which may be negative) to both total and running - * count. This must be called upon creation and termination of - * worker threads. - * - * @param delta the number to add + * Tries to decrement running count unless already zero */ - private void updateWorkerCount(int delta) { - int d = delta + (delta << 16); // add to both lo and hi parts - int s; - do {} while (!casWorkerCounts(s = workerCounts, s + d)); - } - - /** - * Lifecycle control. High word contains runState, low word - * contains the number of workers that are (probably) executing - * tasks. This value is atomically incremented before a worker - * gets a task to run, and decremented when worker has no tasks - * and cannot find any. These two fields are bundled together to - * support correct termination triggering. Note: activeCount - * CAS'es cheat by assuming active count is in low word, so need - * to be modified if this changes - */ - private volatile int runControl; - - // RunState values. Order among values matters - private static final int RUNNING = 0; - private static final int SHUTDOWN = 1; - private static final int TERMINATING = 2; - private static final int TERMINATED = 3; - - private static int runStateOf(int c) { return c >>> 16; } - private static int activeCountOf(int c) { return c & shortMask; } - private static int runControlFor(int r, int a) { return (r << 16) + a; } - - /** - * Tries incrementing active count; fails on contention. - * Called by workers before/during executing tasks. - * - * @return true on success - */ - final boolean tryIncrementActiveCount() { - int c = runControl; - return casRunControl(c, c+1); - } - - /** - * Tries decrementing active count; fails on contention. - * Possibly triggers termination on success. - * Called by workers when they can't find tasks. - * - * @return true on success - */ - final boolean tryDecrementActiveCount() { - int c = runControl; - int nextc = c - 1; - if (!casRunControl(c, nextc)) + final boolean tryDecrementRunningCount() { + int wc = workerCounts; + if ((wc & RUNNING_COUNT_MASK) == 0) return false; - if (canTerminateOnShutdown(nextc)) - terminateOnShutdown(); - return true; + return UNSAFE.compareAndSwapInt(this, workerCountsOffset, + wc, wc - ONE_RUNNING); } /** - * Returns {@code true} if argument represents zero active count - * and nonzero runstate, which is the triggering condition for - * terminating on shutdown. + * Forces decrement of encoded workerCounts, awaiting nonzero if + * (rarely) necessary when other count updates lag. + * + * @param dr -- either zero or ONE_RUNNING + * @param dt -- either zero or ONE_TOTAL */ - private static boolean canTerminateOnShutdown(int c) { - // i.e. least bit is nonzero runState bit - return ((c & -c) >>> 16) != 0; - } - - /** - * Transition run state to at least the given state. Return true - * if not already at least given state. - */ - private boolean transitionRunStateTo(int state) { + private void decrementWorkerCounts(int dr, int dt) { for (;;) { - int c = runControl; - if (runStateOf(c) >= state) - return false; - if (casRunControl(c, runControlFor(state, activeCountOf(c)))) - return true; + int wc = workerCounts; + if ((wc & RUNNING_COUNT_MASK) - dr < 0 || + (wc >>> TOTAL_COUNT_SHIFT) - dt < 0) { + if ((runState & TERMINATED) != 0) + return; // lagging termination on a backout + Thread.yield(); + } + if (UNSAFE.compareAndSwapInt(this, workerCountsOffset, + wc, wc - (dr + dt))) + return; } } /** - * Controls whether to add spares to maintain parallelism + * Tries decrementing active count; fails on contention. + * Called when workers cannot find tasks to run. */ - private volatile boolean maintainsParallelism; + final boolean tryDecrementActiveCount() { + int c; + return UNSAFE.compareAndSwapInt(this, runStateOffset, + c = runState, c - 1); + } + + /** + * Advances to at least the given level. Returns true if not + * already in at least the given level. + */ + private boolean advanceRunLevel(int level) { + for (;;) { + int s = runState; + if ((s & level) != 0) + return false; + if (UNSAFE.compareAndSwapInt(this, runStateOffset, s, s | level)) + return true; + } + } + + // workers array maintenance + + /** + * Records and returns a workers array index for new worker. + */ + private int recordWorker(ForkJoinWorkerThread w) { + // Try using slot totalCount-1. If not available, scan and/or resize + int k = (workerCounts >>> TOTAL_COUNT_SHIFT) - 1; + final ReentrantLock lock = this.workerLock; + lock.lock(); + try { + ForkJoinWorkerThread[] ws = workers; + int n = ws.length; + if (k < 0 || k >= n || ws[k] != null) { + for (k = 0; k < n && ws[k] != null; ++k) + ; + if (k == n) + ws = Arrays.copyOf(ws, n << 1); + } + ws[k] = w; + workers = ws; // volatile array write ensures slot visibility + } finally { + lock.unlock(); + } + return k; + } + + /** + * Nulls out record of worker in workers array. + */ + private void forgetWorker(ForkJoinWorkerThread w) { + int idx = w.poolIndex; + // Locking helps method recordWorker avoid unnecessary expansion + final ReentrantLock lock = this.workerLock; + lock.lock(); + try { + ForkJoinWorkerThread[] ws = workers; + if (idx >= 0 && idx < ws.length && ws[idx] == w) // verify + ws[idx] = null; + } finally { + lock.unlock(); + } + } + + /** + * Final callback from terminating worker. Removes record of + * worker from array, and adjusts counts. If pool is shutting + * down, tries to complete termination. + * + * @param w the worker + */ + final void workerTerminated(ForkJoinWorkerThread w) { + forgetWorker(w); + decrementWorkerCounts(w.isTrimmed()? 0 : ONE_RUNNING, ONE_TOTAL); + while (w.stealCount != 0) // collect final count + tryAccumulateStealCount(w); + tryTerminate(false); + } + + // Waiting for and signalling events + + /** + * Releases workers blocked on a count not equal to current count. + * Normally called after precheck that eventWaiters isn't zero to + * avoid wasted array checks. Gives up upon a change in count or + * upon releasing two workers, letting others take over. + */ + private void releaseEventWaiters() { + ForkJoinWorkerThread[] ws = workers; + int n = ws.length; + long h = eventWaiters; + int ec = eventCount; + boolean releasedOne = false; + ForkJoinWorkerThread w; int id; + while ((id = ((int)(h & WAITER_ID_MASK)) - 1) >= 0 && + (int)(h >>> EVENT_COUNT_SHIFT) != ec && + id < n && (w = ws[id]) != null) { + if (UNSAFE.compareAndSwapLong(this, eventWaitersOffset, + h, w.nextWaiter)) { + LockSupport.unpark(w); + if (releasedOne) // exit on second release + break; + releasedOne = true; + } + if (eventCount != ec) + break; + h = eventWaiters; + } + } + + /** + * Tries to advance eventCount and releases waiters. Called only + * from workers. + */ + final void signalWork() { + int c; // try to increment event count -- CAS failure OK + UNSAFE.compareAndSwapInt(this, eventCountOffset, c = eventCount, c+1); + if (eventWaiters != 0L) + releaseEventWaiters(); + } + + /** + * Adds the given worker to event queue and blocks until + * terminating or event count advances from the given value + * + * @param w the calling worker thread + * @param ec the count + */ + private void eventSync(ForkJoinWorkerThread w, int ec) { + long nh = (((long)ec) << EVENT_COUNT_SHIFT) | ((long)(w.poolIndex+1)); + long h; + while ((runState < SHUTDOWN || !tryTerminate(false)) && + (((int)((h = eventWaiters) & WAITER_ID_MASK)) == 0 || + (int)(h >>> EVENT_COUNT_SHIFT) == ec) && + eventCount == ec) { + if (UNSAFE.compareAndSwapLong(this, eventWaitersOffset, + w.nextWaiter = h, nh)) { + awaitEvent(w, ec); + break; + } + } + } + + /** + * Blocks the given worker (that has already been entered as an + * event waiter) until terminating or event count advances from + * the given value. The oldest (first) waiter uses a timed wait to + * occasionally one-by-one shrink the number of workers (to a + * minimum of one) if the pool has not been used for extended + * periods. + * + * @param w the calling worker thread + * @param ec the count + */ + private void awaitEvent(ForkJoinWorkerThread w, int ec) { + while (eventCount == ec) { + if (tryAccumulateStealCount(w)) { // transfer while idle + boolean untimed = (w.nextWaiter != 0L || + (workerCounts & RUNNING_COUNT_MASK) <= 1); + long startTime = untimed? 0 : System.nanoTime(); + Thread.interrupted(); // clear/ignore interrupt + if (eventCount != ec || w.runState != 0 || + runState >= TERMINATING) // recheck after clear + break; + if (untimed) + LockSupport.park(w); + else { + LockSupport.parkNanos(w, SHRINK_RATE_NANOS); + if (eventCount != ec || w.runState != 0 || + runState >= TERMINATING) + break; + if (System.nanoTime() - startTime >= SHRINK_RATE_NANOS) + tryShutdownUnusedWorker(ec); + } + } + } + } + + // Maintaining parallelism + + /** + * Pushes worker onto the spare stack. + */ + final void pushSpare(ForkJoinWorkerThread w) { + int ns = (++w.spareCount << SPARE_COUNT_SHIFT) | (w.poolIndex + 1); + do {} while (!UNSAFE.compareAndSwapInt(this, spareWaitersOffset, + w.nextSpare = spareWaiters,ns)); + } + + /** + * Tries (once) to resume a spare if the number of running + * threads is less than target. + */ + private void tryResumeSpare() { + int sw, id; + ForkJoinWorkerThread[] ws = workers; + int n = ws.length; + ForkJoinWorkerThread w; + if ((sw = spareWaiters) != 0 && + (id = (sw & SPARE_ID_MASK) - 1) >= 0 && + id < n && (w = ws[id]) != null && + (workerCounts & RUNNING_COUNT_MASK) < parallelism && + spareWaiters == sw && + UNSAFE.compareAndSwapInt(this, spareWaitersOffset, + sw, w.nextSpare)) { + int c; // increment running count before resume + do {} while (!UNSAFE.compareAndSwapInt + (this, workerCountsOffset, + c = workerCounts, c + ONE_RUNNING)); + if (w.tryUnsuspend()) + LockSupport.unpark(w); + else // back out if w was shutdown + decrementWorkerCounts(ONE_RUNNING, 0); + } + } + + /** + * Tries to increase the number of running workers if below target + * parallelism: If a spare exists tries to resume it via + * tryResumeSpare. Otherwise, if not enough total workers or all + * existing workers are busy, adds a new worker. In all cases also + * helps wake up releasable workers waiting for work. + */ + private void helpMaintainParallelism() { + int pc = parallelism; + int wc, rs, tc; + while (((wc = workerCounts) & RUNNING_COUNT_MASK) < pc && + (rs = runState) < TERMINATING) { + if (spareWaiters != 0) + tryResumeSpare(); + else if ((tc = wc >>> TOTAL_COUNT_SHIFT) >= MAX_WORKERS || + (tc >= pc && (rs & ACTIVE_COUNT_MASK) != tc)) + break; // enough total + else if (runState == rs && workerCounts == wc && + UNSAFE.compareAndSwapInt(this, workerCountsOffset, wc, + wc + (ONE_RUNNING|ONE_TOTAL))) { + ForkJoinWorkerThread w = null; + try { + w = factory.newThread(this); + } finally { // adjust on null or exceptional factory return + if (w == null) { + decrementWorkerCounts(ONE_RUNNING, ONE_TOTAL); + tryTerminate(false); // handle failure during shutdown + } + } + if (w == null) + break; + w.start(recordWorker(w), ueh); + if ((workerCounts >>> TOTAL_COUNT_SHIFT) >= pc) { + int c; // advance event count + UNSAFE.compareAndSwapInt(this, eventCountOffset, + c = eventCount, c+1); + break; // add at most one unless total below target + } + } + } + if (eventWaiters != 0L) + releaseEventWaiters(); + } + + /** + * Callback from the oldest waiter in awaitEvent waking up after a + * period of non-use. If all workers are idle, tries (once) to + * shutdown an event waiter or a spare, if one exists. Note that + * we don't need CAS or locks here because the method is called + * only from one thread occasionally waking (and even misfires are + * OK). Note that until the shutdown worker fully terminates, + * workerCounts will overestimate total count, which is tolerable. + * + * @param ec the event count waited on by caller (to abort + * attempt if count has since changed). + */ + private void tryShutdownUnusedWorker(int ec) { + if (runState == 0 && eventCount == ec) { // only trigger if all idle + ForkJoinWorkerThread[] ws = workers; + int n = ws.length; + ForkJoinWorkerThread w = null; + boolean shutdown = false; + int sw; + long h; + if ((sw = spareWaiters) != 0) { // prefer killing spares + int id = (sw & SPARE_ID_MASK) - 1; + if (id >= 0 && id < n && (w = ws[id]) != null && + UNSAFE.compareAndSwapInt(this, spareWaitersOffset, + sw, w.nextSpare)) + shutdown = true; + } + else if ((h = eventWaiters) != 0L) { + long nh; + int id = ((int)(h & WAITER_ID_MASK)) - 1; + if (id >= 0 && id < n && (w = ws[id]) != null && + (nh = w.nextWaiter) != 0L && // keep at least one worker + UNSAFE.compareAndSwapLong(this, eventWaitersOffset, h, nh)) + shutdown = true; + } + if (w != null && shutdown) { + w.shutdown(); + LockSupport.unpark(w); + } + } + releaseEventWaiters(); // in case of interference + } + + /** + * Callback from workers invoked upon each top-level action (i.e., + * stealing a task or taking a submission and running it). + * Performs one or more of the following: + * + * 1. If the worker is active and either did not run a task + * or there are too many workers, try to set its active status + * to inactive and update activeCount. On contention, we may + * try again in this or a subsequent call. + * + * 2. If not enough total workers, help create some. + * + * 3. If there are too many running workers, suspend this worker + * (first forcing inactive if necessary). If it is not needed, + * it may be shutdown while suspended (via + * tryShutdownUnusedWorker). Otherwise, upon resume it + * rechecks running thread count and need for event sync. + * + * 4. If worker did not run a task, await the next task event via + * eventSync if necessary (first forcing inactivation), upon + * which the worker may be shutdown via + * tryShutdownUnusedWorker. Otherwise, help release any + * existing event waiters that are now releasable, + * + * @param w the worker + * @param ran true if worker ran a task since last call to this method + */ + final void preStep(ForkJoinWorkerThread w, boolean ran) { + int wec = w.lastEventCount; + boolean active = w.active; + boolean inactivate = false; + int pc = parallelism; + int rs; + while (w.runState == 0 && (rs = runState) < TERMINATING) { + if ((inactivate || (active && (rs & ACTIVE_COUNT_MASK) >= pc)) && + UNSAFE.compareAndSwapInt(this, runStateOffset, rs, rs - 1)) + inactivate = active = w.active = false; + int wc = workerCounts; + if ((wc & RUNNING_COUNT_MASK) > pc) { + if (!(inactivate |= active) && // must inactivate to suspend + workerCounts == wc && // try to suspend as spare + UNSAFE.compareAndSwapInt(this, workerCountsOffset, + wc, wc - ONE_RUNNING)) + w.suspendAsSpare(); + } + else if ((wc >>> TOTAL_COUNT_SHIFT) < pc) + helpMaintainParallelism(); // not enough workers + else if (!ran) { + long h = eventWaiters; + int ec = eventCount; + if (h != 0L && (int)(h >>> EVENT_COUNT_SHIFT) != ec) + releaseEventWaiters(); // release others before waiting + else if (ec != wec) { + w.lastEventCount = ec; // no need to wait + break; + } + else if (!(inactivate |= active)) + eventSync(w, wec); // must inactivate before sync + } + else + break; + } + } + + /** + * Helps and/or blocks awaiting join of the given task. + * See above for explanation. + * + * @param joinMe the task to join + * @param worker the current worker thread + */ + final void awaitJoin(ForkJoinTask joinMe, ForkJoinWorkerThread worker) { + int retries = 2 + (parallelism >> 2); // #helpJoins before blocking + while (joinMe.status >= 0) { + int wc; + worker.helpJoinTask(joinMe); + if (joinMe.status < 0) + break; + else if (retries > 0) + --retries; + else if (((wc = workerCounts) & RUNNING_COUNT_MASK) != 0 && + UNSAFE.compareAndSwapInt(this, workerCountsOffset, + wc, wc - ONE_RUNNING)) { + int stat, c; long h; + while ((stat = joinMe.status) >= 0 && + (h = eventWaiters) != 0L && // help release others + (int)(h >>> EVENT_COUNT_SHIFT) != eventCount) + releaseEventWaiters(); + if (stat >= 0 && + ((workerCounts & RUNNING_COUNT_MASK) == 0 || + (stat = + joinMe.internalAwaitDone(JOIN_TIMEOUT_MILLIS)) >= 0)) + helpMaintainParallelism(); // timeout or no running workers + do {} while (!UNSAFE.compareAndSwapInt + (this, workerCountsOffset, + c = workerCounts, c + ONE_RUNNING)); + if (stat < 0) + break; // else restart + } + } + } + + /** + * Same idea as awaitJoin, but no helping, retries, or timeouts. + */ + final void awaitBlocker(ManagedBlocker blocker) + throws InterruptedException { + while (!blocker.isReleasable()) { + int wc = workerCounts; + if ((wc & RUNNING_COUNT_MASK) != 0 && + UNSAFE.compareAndSwapInt(this, workerCountsOffset, + wc, wc - ONE_RUNNING)) { + try { + while (!blocker.isReleasable()) { + long h = eventWaiters; + if (h != 0L && + (int)(h >>> EVENT_COUNT_SHIFT) != eventCount) + releaseEventWaiters(); + else if ((workerCounts & RUNNING_COUNT_MASK) == 0 && + runState < TERMINATING) + helpMaintainParallelism(); + else if (blocker.block()) + break; + } + } finally { + int c; + do {} while (!UNSAFE.compareAndSwapInt + (this, workerCountsOffset, + c = workerCounts, c + ONE_RUNNING)); + } + break; + } + } + } + + /** + * Possibly initiates and/or completes termination. + * + * @param now if true, unconditionally terminate, else only + * if shutdown and empty queue and no active workers + * @return true if now terminating or terminated + */ + private boolean tryTerminate(boolean now) { + if (now) + advanceRunLevel(SHUTDOWN); // ensure at least SHUTDOWN + else if (runState < SHUTDOWN || + !submissionQueue.isEmpty() || + (runState & ACTIVE_COUNT_MASK) != 0) + return false; + + if (advanceRunLevel(TERMINATING)) + startTerminating(); + + // Finish now if all threads terminated; else in some subsequent call + if ((workerCounts >>> TOTAL_COUNT_SHIFT) == 0) { + advanceRunLevel(TERMINATED); + termination.arrive(); + } + return true; + } + + /** + * Actions on transition to TERMINATING + * + * Runs up to four passes through workers: (0) shutting down each + * (without waking up if parked) to quickly spread notifications + * without unnecessary bouncing around event queues etc (1) wake + * up and help cancel tasks (2) interrupt (3) mop up races with + * interrupted workers + */ + private void startTerminating() { + cancelSubmissions(); + for (int passes = 0; passes < 4 && workerCounts != 0; ++passes) { + int c; // advance event count + UNSAFE.compareAndSwapInt(this, eventCountOffset, + c = eventCount, c+1); + eventWaiters = 0L; // clobber lists + spareWaiters = 0; + for (ForkJoinWorkerThread w : workers) { + if (w != null) { + w.shutdown(); + if (passes > 0 && !w.isTerminated()) { + w.cancelTasks(); + LockSupport.unpark(w); + if (passes > 1) { + try { + w.interrupt(); + } catch (SecurityException ignore) { + } + } + } + } + } + } + } + + /** + * Clears out and cancels submissions, ignoring exceptions. + */ + private void cancelSubmissions() { + ForkJoinTask task; + while ((task = submissionQueue.poll()) != null) { + try { + task.cancel(false); + } catch (Throwable ignore) { + } + } + } + + // misc support for ForkJoinWorkerThread + + /** + * Returns pool number. + */ + final int getPoolNumber() { + return poolNumber; + } + + /** + * Tries to accumulate steal count from a worker, clearing + * the worker's value if successful. + * + * @return true if worker steal count now zero + */ + final boolean tryAccumulateStealCount(ForkJoinWorkerThread w) { + int sc = w.stealCount; + long c = stealCount; + // CAS even if zero, for fence effects + if (UNSAFE.compareAndSwapLong(this, stealCountOffset, c, c + sc)) { + if (sc != 0) + w.stealCount = 0; + return true; + } + return sc == 0; + } + + /** + * Returns the approximate (non-atomic) number of idle threads per + * active thread. + */ + final int idlePerActive() { + int pc = parallelism; // use parallelism, not rc + int ac = runState; // no mask -- artificially boosts during shutdown + // Use exact results for small values, saturate past 4 + return ((pc <= ac) ? 0 : + (pc >>> 1 <= ac) ? 1 : + (pc >>> 2 <= ac) ? 3 : + pc >>> 3); + } + + // Public and protected methods // Constructors /** * Creates a {@code ForkJoinPool} with parallelism equal to {@link - * java.lang.Runtime#availableProcessors}, and using the {@linkplain - * #defaultForkJoinWorkerThreadFactory default thread factory}. + * java.lang.Runtime#availableProcessors}, using the {@linkplain + * #defaultForkJoinWorkerThreadFactory default thread factory}, + * no UncaughtExceptionHandler, and non-async LIFO processing mode. * * @throws SecurityException if a security manager exists and * the caller is not permitted to modify threads @@ -404,13 +1232,14 @@ public class ForkJoinPool extends AbstractExecutorService { */ public ForkJoinPool() { this(Runtime.getRuntime().availableProcessors(), - defaultForkJoinWorkerThreadFactory); + defaultForkJoinWorkerThreadFactory, null, false); } /** * Creates a {@code ForkJoinPool} with the indicated parallelism - * level and using the {@linkplain - * #defaultForkJoinWorkerThreadFactory default thread factory}. + * level, the {@linkplain + * #defaultForkJoinWorkerThreadFactory default thread factory}, + * no UncaughtExceptionHandler, and non-async LIFO processing mode. * * @param parallelism the parallelism level * @throws IllegalArgumentException if parallelism less than or @@ -421,31 +1250,25 @@ public class ForkJoinPool extends AbstractExecutorService { * java.lang.RuntimePermission}{@code ("modifyThread")} */ public ForkJoinPool(int parallelism) { - this(parallelism, defaultForkJoinWorkerThreadFactory); + this(parallelism, defaultForkJoinWorkerThreadFactory, null, false); } /** - * Creates a {@code ForkJoinPool} with parallelism equal to {@link - * java.lang.Runtime#availableProcessors}, and using the given - * thread factory. + * Creates a {@code ForkJoinPool} with the given parameters. * - * @param factory the factory for creating new threads - * @throws NullPointerException if the factory is null - * @throws SecurityException if a security manager exists and - * the caller is not permitted to modify threads - * because it does not hold {@link - * java.lang.RuntimePermission}{@code ("modifyThread")} - */ - public ForkJoinPool(ForkJoinWorkerThreadFactory factory) { - this(Runtime.getRuntime().availableProcessors(), factory); - } - - /** - * Creates a {@code ForkJoinPool} with the given parallelism and - * thread factory. - * - * @param parallelism the parallelism level - * @param factory the factory for creating new threads + * @param parallelism the parallelism level. For default value, + * use {@link java.lang.Runtime#availableProcessors}. + * @param factory the factory for creating new threads. For default value, + * use {@link #defaultForkJoinWorkerThreadFactory}. + * @param handler the handler for internal worker threads that + * terminate due to unrecoverable errors encountered while executing + * tasks. For default value, use {@code null}. + * @param asyncMode if true, + * establishes local first-in-first-out scheduling mode for forked + * tasks that are never joined. This mode may be more appropriate + * than default locally stack-based mode in applications in which + * worker threads only process event-style asynchronous tasks. + * For default value, use {@code false}. * @throws IllegalArgumentException if parallelism less than or * equal to zero, or greater than implementation limit * @throws NullPointerException if the factory is null @@ -454,153 +1277,40 @@ public class ForkJoinPool extends AbstractExecutorService { * because it does not hold {@link * java.lang.RuntimePermission}{@code ("modifyThread")} */ - public ForkJoinPool(int parallelism, ForkJoinWorkerThreadFactory factory) { - if (parallelism <= 0 || parallelism > MAX_THREADS) - throw new IllegalArgumentException(); + public ForkJoinPool(int parallelism, + ForkJoinWorkerThreadFactory factory, + Thread.UncaughtExceptionHandler handler, + boolean asyncMode) { + checkPermission(); if (factory == null) throw new NullPointerException(); - checkPermission(); - this.factory = factory; + if (parallelism <= 0 || parallelism > MAX_WORKERS) + throw new IllegalArgumentException(); this.parallelism = parallelism; - this.maxPoolSize = MAX_THREADS; - this.maintainsParallelism = true; - this.poolNumber = poolNumberGenerator.incrementAndGet(); - this.workerLock = new ReentrantLock(); - this.termination = workerLock.newCondition(); - this.stealCount = new AtomicLong(); + this.factory = factory; + this.ueh = handler; + this.locallyFifo = asyncMode; + int arraySize = initialArraySizeFor(parallelism); + this.workers = new ForkJoinWorkerThread[arraySize]; this.submissionQueue = new LinkedTransferQueue>(); - // worker array and workers are lazily constructed + this.workerLock = new ReentrantLock(); + this.termination = new Phaser(1); + this.poolNumber = poolNumberGenerator.incrementAndGet(); } /** - * Creates a new worker thread using factory. - * - * @param index the index to assign worker - * @return new worker, or null if factory failed + * Returns initial power of two size for workers array. + * @param pc the initial parallelism level */ - private ForkJoinWorkerThread createWorker(int index) { - Thread.UncaughtExceptionHandler h = ueh; - ForkJoinWorkerThread w = factory.newThread(this); - if (w != null) { - w.poolIndex = index; - w.setDaemon(true); - w.setAsyncMode(locallyFifo); - w.setName("ForkJoinPool-" + poolNumber + "-worker-" + index); - if (h != null) - w.setUncaughtExceptionHandler(h); - } - return w; - } - - /** - * Returns a good size for worker array given pool size. - * Currently requires size to be a power of two. - */ - private static int arraySizeFor(int poolSize) { - if (poolSize <= 1) - return 1; - // See Hackers Delight, sec 3.2 - int c = poolSize >= MAX_THREADS ? MAX_THREADS : (poolSize - 1); - c |= c >>> 1; - c |= c >>> 2; - c |= c >>> 4; - c |= c >>> 8; - c |= c >>> 16; - return c + 1; - } - - /** - * Creates or resizes array if necessary to hold newLength. - * Call only under exclusion. - * - * @return the array - */ - private ForkJoinWorkerThread[] ensureWorkerArrayCapacity(int newLength) { - ForkJoinWorkerThread[] ws = workers; - if (ws == null) - return workers = new ForkJoinWorkerThread[arraySizeFor(newLength)]; - else if (newLength > ws.length) - return workers = Arrays.copyOf(ws, arraySizeFor(newLength)); - else - return ws; - } - - /** - * Tries to shrink workers into smaller array after one or more terminate. - */ - private void tryShrinkWorkerArray() { - ForkJoinWorkerThread[] ws = workers; - if (ws != null) { - int len = ws.length; - int last = len - 1; - while (last >= 0 && ws[last] == null) - --last; - int newLength = arraySizeFor(last+1); - if (newLength < len) - workers = Arrays.copyOf(ws, newLength); - } - } - - /** - * Initializes workers if necessary. - */ - final void ensureWorkerInitialization() { - ForkJoinWorkerThread[] ws = workers; - if (ws == null) { - final ReentrantLock lock = this.workerLock; - lock.lock(); - try { - ws = workers; - if (ws == null) { - int ps = parallelism; - ws = ensureWorkerArrayCapacity(ps); - for (int i = 0; i < ps; ++i) { - ForkJoinWorkerThread w = createWorker(i); - if (w != null) { - ws[i] = w; - w.start(); - updateWorkerCount(1); - } - } - } - } finally { - lock.unlock(); - } - } - } - - /** - * Worker creation and startup for threads added via setParallelism. - */ - private void createAndStartAddedWorkers() { - resumeAllSpares(); // Allow spares to convert to nonspare - int ps = parallelism; - ForkJoinWorkerThread[] ws = ensureWorkerArrayCapacity(ps); - int len = ws.length; - // Sweep through slots, to keep lowest indices most populated - int k = 0; - while (k < len) { - if (ws[k] != null) { - ++k; - continue; - } - int s = workerCounts; - int tc = totalCountOf(s); - int rc = runningCountOf(s); - if (rc >= ps || tc >= ps) - break; - if (casWorkerCounts (s, workerCountsFor(tc+1, rc+1))) { - ForkJoinWorkerThread w = createWorker(k); - if (w != null) { - ws[k++] = w; - w.start(); - } - else { - updateWorkerCount(-1); // back out on failed creation - break; - } - } - } + private static int initialArraySizeFor(int pc) { + // If possible, initially allocate enough space for one spare + int size = pc < MAX_WORKERS ? pc + 1 : MAX_WORKERS; + // See Hackers Delight, sec 3.2. We know MAX_WORKERS < (1 >>> 16) + size |= size >>> 1; + size |= size >>> 2; + size |= size >>> 4; + size |= size >>> 8; + return size + 1; } // Execution methods @@ -611,12 +1321,12 @@ public class ForkJoinPool extends AbstractExecutorService { private void doSubmit(ForkJoinTask task) { if (task == null) throw new NullPointerException(); - if (isShutdown()) + if (runState >= SHUTDOWN) throw new RejectedExecutionException(); - if (workers == null) - ensureWorkerInitialization(); submissionQueue.offer(task); - signalIdleWorkers(); + int c; // try to increment event count -- CAS failure OK + UNSAFE.compareAndSwapInt(this, eventCountOffset, c = eventCount, c+1); + helpMaintainParallelism(); // create, start, or resume some workers } /** @@ -661,6 +1371,20 @@ public class ForkJoinPool extends AbstractExecutorService { doSubmit(job); } + /** + * Submits a ForkJoinTask for execution. + * + * @param task the task to submit + * @return the task + * @throws NullPointerException if the task is null + * @throws RejectedExecutionException if the task cannot be + * scheduled for execution + */ + public ForkJoinTask submit(ForkJoinTask task) { + doSubmit(task); + return task; + } + /** * @throws NullPointerException if the task is null * @throws RejectedExecutionException if the task cannot be @@ -698,21 +1422,6 @@ public class ForkJoinPool extends AbstractExecutorService { return job; } - /** - * Submits a ForkJoinTask for execution. - * - * @param task the task to submit - * @return the task - * @throws NullPointerException if the task is null - * @throws RejectedExecutionException if the task cannot be - * scheduled for execution - */ - public ForkJoinTask submit(ForkJoinTask task) { - doSubmit(task); - return task; - } - - /** * @throws NullPointerException {@inheritDoc} * @throws RejectedExecutionException {@inheritDoc} @@ -725,7 +1434,7 @@ public class ForkJoinPool extends AbstractExecutorService { invoke(new InvokeAll(forkJoinTasks)); @SuppressWarnings({"unchecked", "rawtypes"}) - List> futures = (List>) (List) forkJoinTasks; + List> futures = (List>) (List) forkJoinTasks; return futures; } @@ -739,8 +1448,6 @@ public class ForkJoinPool extends AbstractExecutorService { private static final long serialVersionUID = -7914297376763021607L; } - // Configuration and status settings and queries - /** * Returns the factory used for constructing new workers. * @@ -757,84 +1464,7 @@ public class ForkJoinPool extends AbstractExecutorService { * @return the handler, or {@code null} if none */ public Thread.UncaughtExceptionHandler getUncaughtExceptionHandler() { - Thread.UncaughtExceptionHandler h; - final ReentrantLock lock = this.workerLock; - lock.lock(); - try { - h = ueh; - } finally { - lock.unlock(); - } - return h; - } - - /** - * Sets the handler for internal worker threads that terminate due - * to unrecoverable errors encountered while executing tasks. - * Unless set, the current default or ThreadGroup handler is used - * as handler. - * - * @param h the new handler - * @return the old handler, or {@code null} if none - * @throws SecurityException if a security manager exists and - * the caller is not permitted to modify threads - * because it does not hold {@link - * java.lang.RuntimePermission}{@code ("modifyThread")} - */ - public Thread.UncaughtExceptionHandler - setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler h) { - checkPermission(); - Thread.UncaughtExceptionHandler old = null; - final ReentrantLock lock = this.workerLock; - lock.lock(); - try { - old = ueh; - ueh = h; - ForkJoinWorkerThread[] ws = workers; - if (ws != null) { - for (int i = 0; i < ws.length; ++i) { - ForkJoinWorkerThread w = ws[i]; - if (w != null) - w.setUncaughtExceptionHandler(h); - } - } - } finally { - lock.unlock(); - } - return old; - } - - - /** - * Sets the target parallelism level of this pool. - * - * @param parallelism the target parallelism - * @throws IllegalArgumentException if parallelism less than or - * equal to zero or greater than maximum size bounds - * @throws SecurityException if a security manager exists and - * the caller is not permitted to modify threads - * because it does not hold {@link - * java.lang.RuntimePermission}{@code ("modifyThread")} - */ - public void setParallelism(int parallelism) { - checkPermission(); - if (parallelism <= 0 || parallelism > maxPoolSize) - throw new IllegalArgumentException(); - final ReentrantLock lock = this.workerLock; - lock.lock(); - try { - if (isProcessingTasks()) { - int p = this.parallelism; - this.parallelism = parallelism; - if (parallelism > p) - createAndStartAddedWorkers(); - else - trimSpares(); - } - } finally { - lock.unlock(); - } - signalIdleWorkers(); + return ueh; } /** @@ -848,92 +1478,14 @@ public class ForkJoinPool extends AbstractExecutorService { /** * Returns the number of worker threads that have started but not - * yet terminated. This result returned by this method may differ + * yet terminated. The result returned by this method may differ * from {@link #getParallelism} when threads are created to * maintain parallelism when others are cooperatively blocked. * * @return the number of worker threads */ public int getPoolSize() { - return totalCountOf(workerCounts); - } - - /** - * Returns the maximum number of threads allowed to exist in the - * pool. Unless set using {@link #setMaximumPoolSize}, the - * maximum is an implementation-defined value designed only to - * prevent runaway growth. - * - * @return the maximum - */ - public int getMaximumPoolSize() { - return maxPoolSize; - } - - /** - * Sets the maximum number of threads allowed to exist in the - * pool. The given value should normally be greater than or equal - * to the {@link #getParallelism parallelism} level. Setting this - * value has no effect on current pool size. It controls - * construction of new threads. - * - * @throws IllegalArgumentException if negative or greater than - * internal implementation limit - */ - public void setMaximumPoolSize(int newMax) { - if (newMax < 0 || newMax > MAX_THREADS) - throw new IllegalArgumentException(); - maxPoolSize = newMax; - } - - - /** - * Returns {@code true} if this pool dynamically maintains its - * target parallelism level. If false, new threads are added only - * to avoid possible starvation. This setting is by default true. - * - * @return {@code true} if maintains parallelism - */ - public boolean getMaintainsParallelism() { - return maintainsParallelism; - } - - /** - * Sets whether this pool dynamically maintains its target - * parallelism level. If false, new threads are added only to - * avoid possible starvation. - * - * @param enable {@code true} to maintain parallelism - */ - public void setMaintainsParallelism(boolean enable) { - maintainsParallelism = enable; - } - - /** - * Establishes local first-in-first-out scheduling mode for forked - * tasks that are never joined. This mode may be more appropriate - * than default locally stack-based mode in applications in which - * worker threads only process asynchronous tasks. This method is - * designed to be invoked only when the pool is quiescent, and - * typically only before any tasks are submitted. The effects of - * invocations at other times may be unpredictable. - * - * @param async if {@code true}, use locally FIFO scheduling - * @return the previous mode - * @see #getAsyncMode - */ - public boolean setAsyncMode(boolean async) { - boolean oldMode = locallyFifo; - locallyFifo = async; - ForkJoinWorkerThread[] ws = workers; - if (ws != null) { - for (int i = 0; i < ws.length; ++i) { - ForkJoinWorkerThread t = ws[i]; - if (t != null) - t.setAsyncMode(async); - } - } - return oldMode; + return workerCounts >>> TOTAL_COUNT_SHIFT; } /** @@ -941,7 +1493,6 @@ public class ForkJoinPool extends AbstractExecutorService { * scheduling mode for forked tasks that are never joined. * * @return {@code true} if this pool uses async mode - * @see #setAsyncMode */ public boolean getAsyncMode() { return locallyFifo; @@ -950,12 +1501,13 @@ public class ForkJoinPool extends AbstractExecutorService { /** * Returns an estimate of the number of worker threads that are * not blocked waiting to join tasks or for other managed - * synchronization. + * synchronization. This method may overestimate the + * number of running threads. * * @return the number of worker threads */ public int getRunningThreadCount() { - return runningCountOf(workerCounts); + return workerCounts & RUNNING_COUNT_MASK; } /** @@ -966,19 +1518,7 @@ public class ForkJoinPool extends AbstractExecutorService { * @return the number of active threads */ public int getActiveThreadCount() { - return activeCountOf(runControl); - } - - /** - * Returns an estimate of the number of threads that are currently - * idle waiting for tasks. This method may underestimate the - * number of idle threads. - * - * @return the number of idle threads - */ - final int getIdleThreadCount() { - int c = runningCountOf(workerCounts) - activeCountOf(runControl); - return (c <= 0) ? 0 : c; + return runState & ACTIVE_COUNT_MASK; } /** @@ -993,7 +1533,7 @@ public class ForkJoinPool extends AbstractExecutorService { * @return {@code true} if all threads are currently idle */ public boolean isQuiescent() { - return activeCountOf(runControl) == 0; + return (runState & ACTIVE_COUNT_MASK) == 0; } /** @@ -1008,17 +1548,7 @@ public class ForkJoinPool extends AbstractExecutorService { * @return the number of steals */ public long getStealCount() { - return stealCount.get(); - } - - /** - * Accumulates steal count from a worker. - * Call only when worker known to be idle. - */ - private void updateStealCount(ForkJoinWorkerThread w) { - int sc = w.getAndClearStealCount(); - if (sc != 0) - stealCount.addAndGet(sc); + return stealCount; } /** @@ -1033,14 +1563,9 @@ public class ForkJoinPool extends AbstractExecutorService { */ public long getQueuedTaskCount() { long count = 0; - ForkJoinWorkerThread[] ws = workers; - if (ws != null) { - for (int i = 0; i < ws.length; ++i) { - ForkJoinWorkerThread t = ws[i]; - if (t != null) - count += t.getQueueSize(); - } - } + for (ForkJoinWorkerThread w : workers) + if (w != null) + count += w.getQueueSize(); return count; } @@ -1094,16 +1619,11 @@ public class ForkJoinPool extends AbstractExecutorService { * @return the number of elements transferred */ protected int drainTasksTo(Collection> c) { - int n = submissionQueue.drainTo(c); - ForkJoinWorkerThread[] ws = workers; - if (ws != null) { - for (int i = 0; i < ws.length; ++i) { - ForkJoinWorkerThread w = ws[i]; - if (w != null) - n += w.drainTasksTo(c); - } - } - return n; + int count = submissionQueue.drainTo(c); + for (ForkJoinWorkerThread w : workers) + if (w != null) + count += w.drainTasksTo(c); + return count; } /** @@ -1114,36 +1634,34 @@ public class ForkJoinPool extends AbstractExecutorService { * @return a string identifying this pool, as well as its state */ public String toString() { - int ps = parallelism; - int wc = workerCounts; - int rc = runControl; long st = getStealCount(); long qt = getQueuedTaskCount(); long qs = getQueuedSubmissionCount(); + int wc = workerCounts; + int tc = wc >>> TOTAL_COUNT_SHIFT; + int rc = wc & RUNNING_COUNT_MASK; + int pc = parallelism; + int rs = runState; + int ac = rs & ACTIVE_COUNT_MASK; return super.toString() + - "[" + runStateToString(runStateOf(rc)) + - ", parallelism = " + ps + - ", size = " + totalCountOf(wc) + - ", active = " + activeCountOf(rc) + - ", running = " + runningCountOf(wc) + + "[" + runLevelToString(rs) + + ", parallelism = " + pc + + ", size = " + tc + + ", active = " + ac + + ", running = " + rc + ", steals = " + st + ", tasks = " + qt + ", submissions = " + qs + "]"; } - private static String runStateToString(int rs) { - switch(rs) { - case RUNNING: return "Running"; - case SHUTDOWN: return "Shutting down"; - case TERMINATING: return "Terminating"; - case TERMINATED: return "Terminated"; - default: throw new Error("Unknown run state"); - } + private static String runLevelToString(int s) { + return ((s & TERMINATED) != 0 ? "Terminated" : + ((s & TERMINATING) != 0 ? "Terminating" : + ((s & SHUTDOWN) != 0 ? "Shutting down" : + "Running"))); } - // lifecycle control - /** * Initiates an orderly shutdown in which previously submitted * tasks are executed, but no new tasks will be accepted. @@ -1158,23 +1676,8 @@ public class ForkJoinPool extends AbstractExecutorService { */ public void shutdown() { checkPermission(); - transitionRunStateTo(SHUTDOWN); - if (canTerminateOnShutdown(runControl)) { - if (workers == null) { // shutting down before workers created - final ReentrantLock lock = this.workerLock; - lock.lock(); - try { - if (workers == null) { - terminate(); - transitionRunStateTo(TERMINATED); - termination.signalAll(); - } - } finally { - lock.unlock(); - } - } - terminateOnShutdown(); - } + advanceRunLevel(SHUTDOWN); + tryTerminate(false); } /** @@ -1195,7 +1698,7 @@ public class ForkJoinPool extends AbstractExecutorService { */ public List shutdownNow() { checkPermission(); - terminate(); + tryTerminate(true); return Collections.emptyList(); } @@ -1205,7 +1708,7 @@ public class ForkJoinPool extends AbstractExecutorService { * @return {@code true} if all tasks have completed following shut down */ public boolean isTerminated() { - return runStateOf(runControl) == TERMINATED; + return runState >= TERMINATED; } /** @@ -1219,7 +1722,7 @@ public class ForkJoinPool extends AbstractExecutorService { * @return {@code true} if terminating but not yet terminated */ public boolean isTerminating() { - return runStateOf(runControl) == TERMINATING; + return (runState & (TERMINATING|TERMINATED)) == TERMINATING; } /** @@ -1228,15 +1731,7 @@ public class ForkJoinPool extends AbstractExecutorService { * @return {@code true} if this pool has been shut down */ public boolean isShutdown() { - return runStateOf(runControl) >= SHUTDOWN; - } - - /** - * Returns true if pool is not terminating or terminated. - * Used internally to suppress execution when terminating. - */ - final boolean isProcessingTasks() { - return runStateOf(runControl) < TERMINATING; + return runState >= SHUTDOWN; } /** @@ -1252,585 +1747,10 @@ public class ForkJoinPool extends AbstractExecutorService { */ public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException { - long nanos = unit.toNanos(timeout); - final ReentrantLock lock = this.workerLock; - lock.lock(); try { - for (;;) { - if (isTerminated()) - return true; - if (nanos <= 0) - return false; - nanos = termination.awaitNanos(nanos); - } - } finally { - lock.unlock(); - } - } - - // Shutdown and termination support - - /** - * Callback from terminating worker. Nulls out the corresponding - * workers slot, and if terminating, tries to terminate; else - * tries to shrink workers array. - * - * @param w the worker - */ - final void workerTerminated(ForkJoinWorkerThread w) { - updateStealCount(w); - updateWorkerCount(-1); - final ReentrantLock lock = this.workerLock; - lock.lock(); - try { - ForkJoinWorkerThread[] ws = workers; - if (ws != null) { - int idx = w.poolIndex; - if (idx >= 0 && idx < ws.length && ws[idx] == w) - ws[idx] = null; - if (totalCountOf(workerCounts) == 0) { - terminate(); // no-op if already terminating - transitionRunStateTo(TERMINATED); - termination.signalAll(); - } - else if (isProcessingTasks()) { - tryShrinkWorkerArray(); - tryResumeSpare(true); // allow replacement - } - } - } finally { - lock.unlock(); - } - signalIdleWorkers(); - } - - /** - * Initiates termination. - */ - private void terminate() { - if (transitionRunStateTo(TERMINATING)) { - stopAllWorkers(); - resumeAllSpares(); - signalIdleWorkers(); - cancelQueuedSubmissions(); - cancelQueuedWorkerTasks(); - interruptUnterminatedWorkers(); - signalIdleWorkers(); // resignal after interrupt - } - } - - /** - * Possibly terminates when on shutdown state. - */ - private void terminateOnShutdown() { - if (!hasQueuedSubmissions() && canTerminateOnShutdown(runControl)) - terminate(); - } - - /** - * Clears out and cancels submissions. - */ - private void cancelQueuedSubmissions() { - ForkJoinTask task; - while ((task = pollSubmission()) != null) - task.cancel(false); - } - - /** - * Cleans out worker queues. - */ - private void cancelQueuedWorkerTasks() { - final ReentrantLock lock = this.workerLock; - lock.lock(); - try { - ForkJoinWorkerThread[] ws = workers; - if (ws != null) { - for (int i = 0; i < ws.length; ++i) { - ForkJoinWorkerThread t = ws[i]; - if (t != null) - t.cancelTasks(); - } - } - } finally { - lock.unlock(); - } - } - - /** - * Sets each worker's status to terminating. Requires lock to avoid - * conflicts with add/remove. - */ - private void stopAllWorkers() { - final ReentrantLock lock = this.workerLock; - lock.lock(); - try { - ForkJoinWorkerThread[] ws = workers; - if (ws != null) { - for (int i = 0; i < ws.length; ++i) { - ForkJoinWorkerThread t = ws[i]; - if (t != null) - t.shutdownNow(); - } - } - } finally { - lock.unlock(); - } - } - - /** - * Interrupts all unterminated workers. This is not required for - * sake of internal control, but may help unstick user code during - * shutdown. - */ - private void interruptUnterminatedWorkers() { - final ReentrantLock lock = this.workerLock; - lock.lock(); - try { - ForkJoinWorkerThread[] ws = workers; - if (ws != null) { - for (int i = 0; i < ws.length; ++i) { - ForkJoinWorkerThread t = ws[i]; - if (t != null && !t.isTerminated()) { - try { - t.interrupt(); - } catch (SecurityException ignore) { - } - } - } - } - } finally { - lock.unlock(); - } - } - - - /* - * Nodes for event barrier to manage idle threads. Queue nodes - * are basic Treiber stack nodes, also used for spare stack. - * - * The event barrier has an event count and a wait queue (actually - * a Treiber stack). Workers are enabled to look for work when - * the eventCount is incremented. If they fail to find work, they - * may wait for next count. Upon release, threads help others wake - * up. - * - * Synchronization events occur only in enough contexts to - * maintain overall liveness: - * - * - Submission of a new task to the pool - * - Resizes or other changes to the workers array - * - pool termination - * - A worker pushing a task on an empty queue - * - * The case of pushing a task occurs often enough, and is heavy - * enough compared to simple stack pushes, to require special - * handling: Method signalWork returns without advancing count if - * the queue appears to be empty. This would ordinarily result in - * races causing some queued waiters not to be woken up. To avoid - * this, the first worker enqueued in method sync (see - * syncIsReleasable) rescans for tasks after being enqueued, and - * helps signal if any are found. This works well because the - * worker has nothing better to do, and so might as well help - * alleviate the overhead and contention on the threads actually - * doing work. Also, since event counts increments on task - * availability exist to maintain liveness (rather than to force - * refreshes etc), it is OK for callers to exit early if - * contending with another signaller. - */ - static final class WaitQueueNode { - WaitQueueNode next; // only written before enqueued - volatile ForkJoinWorkerThread thread; // nulled to cancel wait - final long count; // unused for spare stack - - WaitQueueNode(long c, ForkJoinWorkerThread w) { - count = c; - thread = w; - } - - /** - * Wakes up waiter, returning false if known to already - */ - boolean signal() { - ForkJoinWorkerThread t = thread; - if (t == null) - return false; - thread = null; - LockSupport.unpark(t); - return true; - } - - /** - * Awaits release on sync. - */ - void awaitSyncRelease(ForkJoinPool p) { - while (thread != null && !p.syncIsReleasable(this)) - LockSupport.park(this); - } - - /** - * Awaits resumption as spare. - */ - void awaitSpareRelease() { - while (thread != null) { - if (!Thread.interrupted()) - LockSupport.park(this); - } - } - } - - /** - * Ensures that no thread is waiting for count to advance from the - * current value of eventCount read on entry to this method, by - * releasing waiting threads if necessary. - * - * @return the count - */ - final long ensureSync() { - long c = eventCount; - WaitQueueNode q; - while ((q = syncStack) != null && q.count < c) { - if (casBarrierStack(q, null)) { - do { - q.signal(); - } while ((q = q.next) != null); - break; - } - } - return c; - } - - /** - * Increments event count and releases waiting threads. - */ - private void signalIdleWorkers() { - long c; - do {} while (!casEventCount(c = eventCount, c+1)); - ensureSync(); - } - - /** - * Signals threads waiting to poll a task. Because method sync - * rechecks availability, it is OK to only proceed if queue - * appears to be non-empty, and OK to skip under contention to - * increment count (since some other thread succeeded). - */ - final void signalWork() { - long c; - WaitQueueNode q; - if (syncStack != null && - casEventCount(c = eventCount, c+1) && - (((q = syncStack) != null && q.count <= c) && - (!casBarrierStack(q, q.next) || !q.signal()))) - ensureSync(); - } - - /** - * Waits until event count advances from last value held by - * caller, or if excess threads, caller is resumed as spare, or - * caller or pool is terminating. Updates caller's event on exit. - * - * @param w the calling worker thread - */ - final void sync(ForkJoinWorkerThread w) { - updateStealCount(w); // Transfer w's count while it is idle - - while (!w.isShutdown() && isProcessingTasks() && !suspendIfSpare(w)) { - long prev = w.lastEventCount; - WaitQueueNode node = null; - WaitQueueNode h; - while (eventCount == prev && - ((h = syncStack) == null || h.count == prev)) { - if (node == null) - node = new WaitQueueNode(prev, w); - if (casBarrierStack(node.next = h, node)) { - node.awaitSyncRelease(this); - break; - } - } - long ec = ensureSync(); - if (ec != prev) { - w.lastEventCount = ec; - break; - } - } - } - - /** - * Returns {@code true} if worker waiting on sync can proceed: - * - on signal (thread == null) - * - on event count advance (winning race to notify vs signaller) - * - on interrupt - * - if the first queued node, we find work available - * If node was not signalled and event count not advanced on exit, - * then we also help advance event count. - * - * @return {@code true} if node can be released - */ - final boolean syncIsReleasable(WaitQueueNode node) { - long prev = node.count; - if (!Thread.interrupted() && node.thread != null && - (node.next != null || - !ForkJoinWorkerThread.hasQueuedTasks(workers)) && - eventCount == prev) + return termination.awaitAdvanceInterruptibly(0, timeout, unit) > 0; + } catch (TimeoutException ex) { return false; - if (node.thread != null) { - node.thread = null; - long ec = eventCount; - if (prev <= ec) // help signal - casEventCount(ec, ec+1); - } - return true; - } - - /** - * Returns {@code true} if a new sync event occurred since last - * call to sync or this method, if so, updating caller's count. - */ - final boolean hasNewSyncEvent(ForkJoinWorkerThread w) { - long lc = w.lastEventCount; - long ec = ensureSync(); - if (ec == lc) - return false; - w.lastEventCount = ec; - return true; - } - - // Parallelism maintenance - - /** - * Decrements running count; if too low, adds spare. - * - * Conceptually, all we need to do here is add or resume a - * spare thread when one is about to block (and remove or - * suspend it later when unblocked -- see suspendIfSpare). - * However, implementing this idea requires coping with - * several problems: we have imperfect information about the - * states of threads. Some count updates can and usually do - * lag run state changes, despite arrangements to keep them - * accurate (for example, when possible, updating counts - * before signalling or resuming), especially when running on - * dynamic JVMs that don't optimize the infrequent paths that - * update counts. Generating too many threads can make these - * problems become worse, because excess threads are more - * likely to be context-switched with others, slowing them all - * down, especially if there is no work available, so all are - * busy scanning or idling. Also, excess spare threads can - * only be suspended or removed when they are idle, not - * immediately when they aren't needed. So adding threads will - * raise parallelism level for longer than necessary. Also, - * FJ applications often encounter highly transient peaks when - * many threads are blocked joining, but for less time than it - * takes to create or resume spares. - * - * @param joinMe if non-null, return early if done - * @param maintainParallelism if true, try to stay within - * target counts, else create only to avoid starvation - * @return true if joinMe known to be done - */ - final boolean preJoin(ForkJoinTask joinMe, - boolean maintainParallelism) { - maintainParallelism &= maintainsParallelism; // overrride - boolean dec = false; // true when running count decremented - while (spareStack == null || !tryResumeSpare(dec)) { - int counts = workerCounts; - if (dec || (dec = casWorkerCounts(counts, --counts))) { - if (!needSpare(counts, maintainParallelism)) - break; - if (joinMe.status < 0) - return true; - if (tryAddSpare(counts)) - break; - } - } - return false; - } - - /** - * Same idea as preJoin - */ - final boolean preBlock(ManagedBlocker blocker, - boolean maintainParallelism) { - maintainParallelism &= maintainsParallelism; - boolean dec = false; - while (spareStack == null || !tryResumeSpare(dec)) { - int counts = workerCounts; - if (dec || (dec = casWorkerCounts(counts, --counts))) { - if (!needSpare(counts, maintainParallelism)) - break; - if (blocker.isReleasable()) - return true; - if (tryAddSpare(counts)) - break; - } - } - return false; - } - - /** - * Returns {@code true} if a spare thread appears to be needed. - * If maintaining parallelism, returns true when the deficit in - * running threads is more than the surplus of total threads, and - * there is apparently some work to do. This self-limiting rule - * means that the more threads that have already been added, the - * less parallelism we will tolerate before adding another. - * - * @param counts current worker counts - * @param maintainParallelism try to maintain parallelism - */ - private boolean needSpare(int counts, boolean maintainParallelism) { - int ps = parallelism; - int rc = runningCountOf(counts); - int tc = totalCountOf(counts); - int runningDeficit = ps - rc; - int totalSurplus = tc - ps; - return (tc < maxPoolSize && - (rc == 0 || totalSurplus < 0 || - (maintainParallelism && - runningDeficit > totalSurplus && - ForkJoinWorkerThread.hasQueuedTasks(workers)))); - } - - /** - * Adds a spare worker if lock available and no more than the - * expected numbers of threads exist. - * - * @return true if successful - */ - private boolean tryAddSpare(int expectedCounts) { - final ReentrantLock lock = this.workerLock; - int expectedRunning = runningCountOf(expectedCounts); - int expectedTotal = totalCountOf(expectedCounts); - boolean success = false; - boolean locked = false; - // confirm counts while locking; CAS after obtaining lock - try { - for (;;) { - int s = workerCounts; - int tc = totalCountOf(s); - int rc = runningCountOf(s); - if (rc > expectedRunning || tc > expectedTotal) - break; - if (!locked && !(locked = lock.tryLock())) - break; - if (casWorkerCounts(s, workerCountsFor(tc+1, rc+1))) { - createAndStartSpare(tc); - success = true; - break; - } - } - } finally { - if (locked) - lock.unlock(); - } - return success; - } - - /** - * Adds the kth spare worker. On entry, pool counts are already - * adjusted to reflect addition. - */ - private void createAndStartSpare(int k) { - ForkJoinWorkerThread w = null; - ForkJoinWorkerThread[] ws = ensureWorkerArrayCapacity(k + 1); - int len = ws.length; - // Probably, we can place at slot k. If not, find empty slot - if (k < len && ws[k] != null) { - for (k = 0; k < len && ws[k] != null; ++k) - ; - } - if (k < len && isProcessingTasks() && (w = createWorker(k)) != null) { - ws[k] = w; - w.start(); - } - else - updateWorkerCount(-1); // adjust on failure - signalIdleWorkers(); - } - - /** - * Suspends calling thread w if there are excess threads. Called - * only from sync. Spares are enqueued in a Treiber stack using - * the same WaitQueueNodes as barriers. They are resumed mainly - * in preJoin, but are also woken on pool events that require all - * threads to check run state. - * - * @param w the caller - */ - private boolean suspendIfSpare(ForkJoinWorkerThread w) { - WaitQueueNode node = null; - int s; - while (parallelism < runningCountOf(s = workerCounts)) { - if (node == null) - node = new WaitQueueNode(0, w); - if (casWorkerCounts(s, s-1)) { // representation-dependent - // push onto stack - do {} while (!casSpareStack(node.next = spareStack, node)); - // block until released by resumeSpare - node.awaitSpareRelease(); - return true; - } - } - return false; - } - - /** - * Tries to pop and resume a spare thread. - * - * @param updateCount if true, increment running count on success - * @return true if successful - */ - private boolean tryResumeSpare(boolean updateCount) { - WaitQueueNode q; - while ((q = spareStack) != null) { - if (casSpareStack(q, q.next)) { - if (updateCount) - updateRunningCount(1); - q.signal(); - return true; - } - } - return false; - } - - /** - * Pops and resumes all spare threads. Same idea as ensureSync. - * - * @return true if any spares released - */ - private boolean resumeAllSpares() { - WaitQueueNode q; - while ( (q = spareStack) != null) { - if (casSpareStack(q, null)) { - do { - updateRunningCount(1); - q.signal(); - } while ((q = q.next) != null); - return true; - } - } - return false; - } - - /** - * Pops and shuts down excessive spare threads. Call only while - * holding lock. This is not guaranteed to eliminate all excess - * threads, only those suspended as spares, which are the ones - * unlikely to be needed in the future. - */ - private void trimSpares() { - int surplus = totalCountOf(workerCounts) - parallelism; - WaitQueueNode q; - while (surplus > 0 && (q = spareStack) != null) { - if (casSpareStack(q, null)) { - do { - updateRunningCount(1); - ForkJoinWorkerThread w = q.thread; - if (w != null && surplus > 0 && - runningCountOf(workerCounts) > 0 && w.shutdown()) - --surplus; - q.signal(); - } while ((q = q.next) != null); - } } } @@ -1838,11 +1758,17 @@ public class ForkJoinPool extends AbstractExecutorService { * Interface for extending managed parallelism for tasks running * in {@link ForkJoinPool}s. * - *

    A {@code ManagedBlocker} provides two methods. - * Method {@code isReleasable} must return {@code true} if - * blocking is not necessary. Method {@code block} blocks the - * current thread if necessary (perhaps internally invoking - * {@code isReleasable} before actually blocking). + *

    A {@code ManagedBlocker} provides two methods. Method + * {@code isReleasable} must return {@code true} if blocking is + * not necessary. Method {@code block} blocks the current thread + * if necessary (perhaps internally invoking {@code isReleasable} + * before actually blocking). The unusual methods in this API + * accommodate synchronizers that may, but don't usually, block + * for long periods. Similarly, they allow more efficient internal + * handling of cases in which additional workers may be, but + * usually are not, needed to ensure sufficient parallelism. + * Toward this end, implementations of method {@code isReleasable} + * must be amenable to repeated invocation. * *

    For example, here is a ManagedBlocker based on a * ReentrantLock: @@ -1860,6 +1786,26 @@ public class ForkJoinPool extends AbstractExecutorService { * return hasLock || (hasLock = lock.tryLock()); * } * }} + * + *

    Here is a class that possibly blocks waiting for an + * item on a given queue: + *

     {@code
    +     * class QueueTaker implements ManagedBlocker {
    +     *   final BlockingQueue queue;
    +     *   volatile E item = null;
    +     *   QueueTaker(BlockingQueue q) { this.queue = q; }
    +     *   public boolean block() throws InterruptedException {
    +     *     if (item == null)
    +     *       item = queue.take();
    +     *     return true;
    +     *   }
    +     *   public boolean isReleasable() {
    +     *     return item != null || (item = queue.poll()) != null;
    +     *   }
    +     *   public E getItem() { // call after pool.managedBlock completes
    +     *     return item;
    +     *   }
    +     * }}
    */ public static interface ManagedBlocker { /** @@ -1883,14 +1829,7 @@ public class ForkJoinPool extends AbstractExecutorService { * Blocks in accord with the given blocker. If the current thread * is a {@link ForkJoinWorkerThread}, this method possibly * arranges for a spare thread to be activated if necessary to - * ensure parallelism while the current thread is blocked. - * - *

    If {@code maintainParallelism} is {@code true} and the pool - * supports it ({@link #getMaintainsParallelism}), this method - * attempts to maintain the pool's nominal parallelism. Otherwise - * it activates a thread only if necessary to avoid complete - * starvation. This option may be preferable when blockages use - * timeouts, or are almost always brief. + * ensure sufficient parallelism while the current thread is blocked. * *

    If the caller is not a {@link ForkJoinTask}, this method is * behaviorally equivalent to @@ -1904,33 +1843,18 @@ public class ForkJoinPool extends AbstractExecutorService { * first be expanded to ensure parallelism, and later adjusted. * * @param blocker the blocker - * @param maintainParallelism if {@code true} and supported by - * this pool, attempt to maintain the pool's nominal parallelism; - * otherwise activate a thread only if necessary to avoid - * complete starvation. * @throws InterruptedException if blocker.block did so */ - public static void managedBlock(ManagedBlocker blocker, - boolean maintainParallelism) + public static void managedBlock(ManagedBlocker blocker) throws InterruptedException { Thread t = Thread.currentThread(); - ForkJoinPool pool = ((t instanceof ForkJoinWorkerThread) ? - ((ForkJoinWorkerThread) t).pool : null); - if (!blocker.isReleasable()) { - try { - if (pool == null || - !pool.preBlock(blocker, maintainParallelism)) - awaitBlocker(blocker); - } finally { - if (pool != null) - pool.updateRunningCount(1); - } + if (t instanceof ForkJoinWorkerThread) { + ForkJoinWorkerThread w = (ForkJoinWorkerThread) t; + w.pool.awaitBlocker(blocker); + } + else { + do {} while (!blocker.isReleasable() && !blocker.block()); } - } - - private static void awaitBlocker(ManagedBlocker blocker) - throws InterruptedException { - do {} while (!blocker.isReleasable() && !blocker.block()); } // AbstractExecutorService overrides. These rely on undocumented @@ -1948,32 +1872,18 @@ public class ForkJoinPool extends AbstractExecutorService { // Unsafe mechanics private static final sun.misc.Unsafe UNSAFE = sun.misc.Unsafe.getUnsafe(); - private static final long eventCountOffset = - objectFieldOffset("eventCount", ForkJoinPool.class); private static final long workerCountsOffset = objectFieldOffset("workerCounts", ForkJoinPool.class); - private static final long runControlOffset = - objectFieldOffset("runControl", ForkJoinPool.class); - private static final long syncStackOffset = - objectFieldOffset("syncStack",ForkJoinPool.class); - private static final long spareStackOffset = - objectFieldOffset("spareStack", ForkJoinPool.class); - - private boolean casEventCount(long cmp, long val) { - return UNSAFE.compareAndSwapLong(this, eventCountOffset, cmp, val); - } - private boolean casWorkerCounts(int cmp, int val) { - return UNSAFE.compareAndSwapInt(this, workerCountsOffset, cmp, val); - } - private boolean casRunControl(int cmp, int val) { - return UNSAFE.compareAndSwapInt(this, runControlOffset, cmp, val); - } - private boolean casSpareStack(WaitQueueNode cmp, WaitQueueNode val) { - return UNSAFE.compareAndSwapObject(this, spareStackOffset, cmp, val); - } - private boolean casBarrierStack(WaitQueueNode cmp, WaitQueueNode val) { - return UNSAFE.compareAndSwapObject(this, syncStackOffset, cmp, val); - } + private static final long runStateOffset = + objectFieldOffset("runState", ForkJoinPool.class); + private static final long eventCountOffset = + objectFieldOffset("eventCount", ForkJoinPool.class); + private static final long eventWaitersOffset = + objectFieldOffset("eventWaiters", ForkJoinPool.class); + private static final long stealCountOffset = + objectFieldOffset("stealCount", ForkJoinPool.class); + private static final long spareWaitersOffset = + objectFieldOffset("spareWaiters", ForkJoinPool.class); private static long objectFieldOffset(String field, Class klazz) { try { diff --git a/jdk/src/share/classes/java/util/concurrent/ForkJoinTask.java b/jdk/src/share/classes/java/util/concurrent/ForkJoinTask.java index 58f6e01b2af..598578f0cf1 100644 --- a/jdk/src/share/classes/java/util/concurrent/ForkJoinTask.java +++ b/jdk/src/share/classes/java/util/concurrent/ForkJoinTask.java @@ -91,10 +91,7 @@ import java.util.WeakHashMap; * results of a task is {@link #join}, but there are several variants: * The {@link Future#get} methods support interruptible and/or timed * waits for completion and report results using {@code Future} - * conventions. Method {@link #helpJoin} enables callers to actively - * execute other tasks while awaiting joins, which is sometimes more - * efficient but only applies when all subtasks are known to be - * strictly tree-structured. Method {@link #invoke} is semantically + * conventions. Method {@link #invoke} is semantically * equivalent to {@code fork(); join()} but always attempts to begin * execution in the current thread. The "quiet" forms of * these methods do not extract results or report exceptions. These @@ -130,7 +127,7 @@ import java.util.WeakHashMap; * ForkJoinTasks (as may be determined using method {@link * #inForkJoinPool}). Attempts to invoke them in other contexts * result in exceptions or errors, possibly including - * ClassCastException. + * {@code ClassCastException}. * *

    Most base support methods are {@code final}, to prevent * overriding of implementations that are intrinsically tied to the @@ -152,9 +149,8 @@ import java.util.WeakHashMap; * *

    This class provides {@code adapt} methods for {@link Runnable} * and {@link Callable}, that may be of use when mixing execution of - * {@code ForkJoinTasks} with other kinds of tasks. When all tasks - * are of this form, consider using a pool in - * {@linkplain ForkJoinPool#setAsyncMode async mode}. + * {@code ForkJoinTasks} with other kinds of tasks. When all tasks are + * of this form, consider using a pool constructed in asyncMode. * *

    ForkJoinTasks are {@code Serializable}, which enables them to be * used in extensions such as remote execution frameworks. It is @@ -166,33 +162,43 @@ import java.util.WeakHashMap; */ public abstract class ForkJoinTask implements Future, Serializable { - /** - * Run control status bits packed into a single int to minimize - * footprint and to ensure atomicity (via CAS). Status is - * initially zero, and takes on nonnegative values until - * completed, upon which status holds COMPLETED. CANCELLED, or - * EXCEPTIONAL, which use the top 3 bits. Tasks undergoing - * blocking waits by other threads have SIGNAL_MASK bits set -- - * bit 15 for external (nonFJ) waits, and the rest a count of - * waiting FJ threads. (This representation relies on - * ForkJoinPool max thread limits). Completion of a stolen task - * with SIGNAL_MASK bits set awakens waiter via notifyAll. Even - * though suboptimal for some purposes, we use basic builtin - * wait/notify to take advantage of "monitor inflation" in JVMs - * that we would otherwise need to emulate to avoid adding further - * per-task bookkeeping overhead. Note that bits 16-28 are - * currently unused. Also value 0x80000000 is available as spare - * completion value. + /* + * See the internal documentation of class ForkJoinPool for a + * general implementation overview. ForkJoinTasks are mainly + * responsible for maintaining their "status" field amidst relays + * to methods in ForkJoinWorkerThread and ForkJoinPool. The + * methods of this class are more-or-less layered into (1) basic + * status maintenance (2) execution and awaiting completion (3) + * user-level methods that additionally report results. This is + * sometimes hard to see because this file orders exported methods + * in a way that flows well in javadocs. In particular, most + * join mechanics are in method quietlyJoin, below. */ + + /* + * The status field holds run control status bits packed into a + * single int to minimize footprint and to ensure atomicity (via + * CAS). Status is initially zero, and takes on nonnegative + * values until completed, upon which status holds value + * NORMAL, CANCELLED, or EXCEPTIONAL. Tasks undergoing blocking + * waits by other threads have the SIGNAL bit set. Completion of + * a stolen task with SIGNAL set awakens any waiters via + * notifyAll. Even though suboptimal for some purposes, we use + * basic builtin wait/notify to take advantage of "monitor + * inflation" in JVMs that we would otherwise need to emulate to + * avoid adding further per-task bookkeeping overhead. We want + * these monitors to be "fat", i.e., not use biasing or thin-lock + * techniques, so use some odd coding idioms that tend to avoid + * them. + */ + + /** The run status of this task */ volatile int status; // accessed directly by pool and workers - static final int COMPLETION_MASK = 0xe0000000; - static final int NORMAL = 0xe0000000; // == mask - static final int CANCELLED = 0xc0000000; - static final int EXCEPTIONAL = 0xa0000000; - static final int SIGNAL_MASK = 0x0000ffff; - static final int INTERNAL_SIGNAL_MASK = 0x00007fff; - static final int EXTERNAL_SIGNAL = 0x00008000; // top bit of low word + private static final int NORMAL = -1; + private static final int CANCELLED = -2; + private static final int EXCEPTIONAL = -3; + private static final int SIGNAL = 1; /** * Table of exceptions thrown by tasks, to enable reporting by @@ -206,176 +212,94 @@ public abstract class ForkJoinTask implements Future, Serializable { Collections.synchronizedMap (new WeakHashMap, Throwable>()); - // within-package utilities + // Maintaining completion status /** - * Gets current worker thread, or null if not a worker thread. - */ - static ForkJoinWorkerThread getWorker() { - Thread t = Thread.currentThread(); - return ((t instanceof ForkJoinWorkerThread) ? - (ForkJoinWorkerThread) t : null); - } - - final boolean casStatus(int cmp, int val) { - return UNSAFE.compareAndSwapInt(this, statusOffset, cmp, val); - } - - /** - * Workaround for not being able to rethrow unchecked exceptions. - */ - static void rethrowException(Throwable ex) { - if (ex != null) - UNSAFE.throwException(ex); - } - - // Setting completion status - - /** - * Marks completion and wakes up threads waiting to join this task. + * Marks completion and wakes up threads waiting to join this task, + * also clearing signal request bits. * * @param completion one of NORMAL, CANCELLED, EXCEPTIONAL */ - final void setCompletion(int completion) { - ForkJoinPool pool = getPool(); - if (pool != null) { - int s; // Clear signal bits while setting completion status - do {} while ((s = status) >= 0 && !casStatus(s, completion)); - - if ((s & SIGNAL_MASK) != 0) { - if ((s &= INTERNAL_SIGNAL_MASK) != 0) - pool.updateRunningCount(s); - synchronized (this) { notifyAll(); } + private void setCompletion(int completion) { + int s; + while ((s = status) >= 0) { + if (UNSAFE.compareAndSwapInt(this, statusOffset, s, completion)) { + if (s != 0) + synchronized (this) { notifyAll(); } + break; } } - else - externallySetCompletion(completion); } /** - * Version of setCompletion for non-FJ threads. Leaves signal - * bits for unblocked threads to adjust, and always notifies. + * Records exception and sets exceptional completion. + * + * @return status on exit */ - private void externallySetCompletion(int completion) { - int s; - do {} while ((s = status) >= 0 && - !casStatus(s, (s & SIGNAL_MASK) | completion)); - synchronized (this) { notifyAll(); } + private void setExceptionalCompletion(Throwable rex) { + exceptionMap.put(this, rex); + setCompletion(EXCEPTIONAL); } /** - * Sets status to indicate normal completion. + * Blocks a worker thread until completion. Called only by + * pool. Currently unused -- pool-based waits use timeout + * version below. */ - final void setNormalCompletion() { - // Try typical fast case -- single CAS, no signal, not already done. - // Manually expand casStatus to improve chances of inlining it - if (!UNSAFE.compareAndSwapInt(this, statusOffset, 0, NORMAL)) - setCompletion(NORMAL); - } - - // internal waiting and notification - - /** - * Performs the actual monitor wait for awaitDone. - */ - private void doAwaitDone() { - // Minimize lock bias and in/de-flation effects by maximizing - // chances of waiting inside sync - try { - while (status >= 0) - synchronized (this) { if (status >= 0) wait(); } - } catch (InterruptedException ie) { - onInterruptedWait(); - } - } - - /** - * Performs the actual timed monitor wait for awaitDone. - */ - private void doAwaitDone(long startTime, long nanos) { - synchronized (this) { + final void internalAwaitDone() { + int s; // the odd construction reduces lock bias effects + while ((s = status) >= 0) { try { - while (status >= 0) { - long nt = nanos - (System.nanoTime() - startTime); - if (nt <= 0) - break; - wait(nt / 1000000, (int) (nt % 1000000)); + synchronized(this) { + if (UNSAFE.compareAndSwapInt(this, statusOffset, s,SIGNAL)) + wait(); } } catch (InterruptedException ie) { - onInterruptedWait(); + cancelIfTerminating(); } } } - // Awaiting completion - /** - * Sets status to indicate there is joiner, then waits for join, - * surrounded with pool notifications. + * Blocks a worker thread until completed or timed out. Called + * only by pool. * - * @return status upon exit + * @return status on exit */ - private int awaitDone(ForkJoinWorkerThread w, - boolean maintainParallelism) { - ForkJoinPool pool = (w == null) ? null : w.pool; + final int internalAwaitDone(long millis) { int s; - while ((s = status) >= 0) { - if (casStatus(s, (pool == null) ? s|EXTERNAL_SIGNAL : s+1)) { - if (pool == null || !pool.preJoin(this, maintainParallelism)) - doAwaitDone(); - if (((s = status) & INTERNAL_SIGNAL_MASK) != 0) - adjustPoolCountsOnUnblock(pool); - break; - } - } - return s; - } - - /** - * Timed version of awaitDone - * - * @return status upon exit - */ - private int awaitDone(ForkJoinWorkerThread w, long nanos) { - ForkJoinPool pool = (w == null) ? null : w.pool; - int s; - while ((s = status) >= 0) { - if (casStatus(s, (pool == null) ? s|EXTERNAL_SIGNAL : s+1)) { - long startTime = System.nanoTime(); - if (pool == null || !pool.preJoin(this, false)) - doAwaitDone(startTime, nanos); - if ((s = status) >= 0) { - adjustPoolCountsOnCancelledWait(pool); - s = status; + if ((s = status) >= 0) { + try { + synchronized(this) { + if (UNSAFE.compareAndSwapInt(this, statusOffset, s,SIGNAL)) + wait(millis, 0); } - if (s < 0 && (s & INTERNAL_SIGNAL_MASK) != 0) - adjustPoolCountsOnUnblock(pool); - break; + } catch (InterruptedException ie) { + cancelIfTerminating(); } + s = status; } return s; } /** - * Notifies pool that thread is unblocked. Called by signalled - * threads when woken by non-FJ threads (which is atypical). + * Blocks a non-worker-thread until completion. */ - private void adjustPoolCountsOnUnblock(ForkJoinPool pool) { + private void externalAwaitDone() { int s; - do {} while ((s = status) < 0 && !casStatus(s, s & COMPLETION_MASK)); - if (pool != null && (s &= INTERNAL_SIGNAL_MASK) != 0) - pool.updateRunningCount(s); - } - - /** - * Notifies pool to adjust counts on cancelled or timed out wait. - */ - private void adjustPoolCountsOnCancelledWait(ForkJoinPool pool) { - if (pool != null) { - int s; - while ((s = status) >= 0 && (s & INTERNAL_SIGNAL_MASK) != 0) { - if (casStatus(s, s - 1)) { - pool.updateRunningCount(1); + while ((s = status) >= 0) { + synchronized(this) { + if (UNSAFE.compareAndSwapInt(this, statusOffset, s, SIGNAL)){ + boolean interrupted = false; + while (status >= 0) { + try { + wait(); + } catch (InterruptedException ie) { + interrupted = true; + } + } + if (interrupted) + Thread.currentThread().interrupt(); break; } } @@ -383,153 +307,19 @@ public abstract class ForkJoinTask implements Future, Serializable { } /** - * Handles interruptions during waits. - */ - private void onInterruptedWait() { - ForkJoinWorkerThread w = getWorker(); - if (w == null) - Thread.currentThread().interrupt(); // re-interrupt - else if (w.isTerminating()) - cancelIgnoringExceptions(); - // else if FJworker, ignore interrupt - } - - // Recording and reporting exceptions - - private void setDoneExceptionally(Throwable rex) { - exceptionMap.put(this, rex); - setCompletion(EXCEPTIONAL); - } - - /** - * Throws the exception associated with status s. - * - * @throws the exception - */ - private void reportException(int s) { - if ((s &= COMPLETION_MASK) < NORMAL) { - if (s == CANCELLED) - throw new CancellationException(); - else - rethrowException(exceptionMap.get(this)); - } - } - - /** - * Returns result or throws exception using j.u.c.Future conventions. - * Only call when {@code isDone} known to be true or thread known - * to be interrupted. - */ - private V reportFutureResult() - throws InterruptedException, ExecutionException { - if (Thread.interrupted()) - throw new InterruptedException(); - int s = status & COMPLETION_MASK; - if (s < NORMAL) { - Throwable ex; - if (s == CANCELLED) - throw new CancellationException(); - if (s == EXCEPTIONAL && (ex = exceptionMap.get(this)) != null) - throw new ExecutionException(ex); - } - return getRawResult(); - } - - /** - * Returns result or throws exception using j.u.c.Future conventions - * with timeouts. - */ - private V reportTimedFutureResult() - throws InterruptedException, ExecutionException, TimeoutException { - if (Thread.interrupted()) - throw new InterruptedException(); - Throwable ex; - int s = status & COMPLETION_MASK; - if (s == NORMAL) - return getRawResult(); - else if (s == CANCELLED) - throw new CancellationException(); - else if (s == EXCEPTIONAL && (ex = exceptionMap.get(this)) != null) - throw new ExecutionException(ex); - else - throw new TimeoutException(); - } - - // internal execution methods - - /** - * Calls exec, recording completion, and rethrowing exception if - * encountered. Caller should normally check status before calling. - * - * @return true if completed normally - */ - private boolean tryExec() { - try { // try block must contain only call to exec - if (!exec()) - return false; - } catch (Throwable rex) { - setDoneExceptionally(rex); - rethrowException(rex); - return false; // not reached - } - setNormalCompletion(); - return true; - } - - /** - * Main execution method used by worker threads. Invokes - * base computation unless already complete. + * Unless done, calls exec and records status if completed, but + * doesn't wait for completion otherwise. Primary execution method + * for ForkJoinWorkerThread. */ final void quietlyExec() { - if (status >= 0) { - try { - if (!exec()) - return; - } catch (Throwable rex) { - setDoneExceptionally(rex); + try { + if (status < 0 || !exec()) return; - } - setNormalCompletion(); - } - } - - /** - * Calls exec(), recording but not rethrowing exception. - * Caller should normally check status before calling. - * - * @return true if completed normally - */ - private boolean tryQuietlyInvoke() { - try { - if (!exec()) - return false; } catch (Throwable rex) { - setDoneExceptionally(rex); - return false; + setExceptionalCompletion(rex); + return; } - setNormalCompletion(); - return true; - } - - /** - * Cancels, ignoring any exceptions it throws. - */ - final void cancelIgnoringExceptions() { - try { - cancel(false); - } catch (Throwable ignore) { - } - } - - /** - * Main implementation of helpJoin - */ - private int busyJoin(ForkJoinWorkerThread w) { - int s; - ForkJoinTask t; - while ((s = status) >= 0 && (t = w.scanWhileJoining(this)) != null) - t.quietlyExec(); - return (s >= 0) ? awaitDone(w, false) : s; // block if no work + setCompletion(NORMAL); // must be outside try block } // public methods @@ -567,34 +357,41 @@ public abstract class ForkJoinTask implements Future, Serializable { * @return the computed result */ public final V join() { - ForkJoinWorkerThread w = getWorker(); - if (w == null || status < 0 || !w.unpushTask(this) || !tryExec()) - reportException(awaitDone(w, true)); + quietlyJoin(); + Throwable ex; + if (status < NORMAL && (ex = getException()) != null) + UNSAFE.throwException(ex); return getRawResult(); } /** * Commences performing this task, awaits its completion if - * necessary, and return its result, or throws an (unchecked) - * exception if the underlying computation did so. + * necessary, and returns its result, or throws an (unchecked) + * {@code RuntimeException} or {@code Error} if the underlying + * computation did so. * * @return the computed result */ public final V invoke() { - if (status >= 0 && tryExec()) - return getRawResult(); - else - return join(); + quietlyInvoke(); + Throwable ex; + if (status < NORMAL && (ex = getException()) != null) + UNSAFE.throwException(ex); + return getRawResult(); } /** * Forks the given tasks, returning when {@code isDone} holds for * each task or an (unchecked) exception is encountered, in which - * case the exception is rethrown. If either task encounters an - * exception, the other one may be, but is not guaranteed to be, - * cancelled. If both tasks throw an exception, then this method - * throws one of them. The individual status of each task may be - * checked using {@link #getException()} and related methods. + * case the exception is rethrown. If more than one task + * encounters an exception, then this method throws any one of + * these exceptions. If any task encounters an exception, the + * other may be cancelled. However, the execution status of + * individual tasks is not guaranteed upon exceptional return. The + * status of each task may be obtained using {@link + * #getException()} and related methods to check if they have been + * cancelled, completed normally or exceptionally, or left + * unprocessed. * *

    This method may be invoked only from within {@code * ForkJoinTask} computations (as may be determined using method @@ -615,12 +412,14 @@ public abstract class ForkJoinTask implements Future, Serializable { /** * Forks the given tasks, returning when {@code isDone} holds for * each task or an (unchecked) exception is encountered, in which - * case the exception is rethrown. If any task encounters an - * exception, others may be, but are not guaranteed to be, - * cancelled. If more than one task encounters an exception, then - * this method throws any one of these exceptions. The individual - * status of each task may be checked using {@link #getException()} - * and related methods. + * case the exception is rethrown. If more than one task + * encounters an exception, then this method throws any one of + * these exceptions. If any task encounters an exception, others + * may be cancelled. However, the execution status of individual + * tasks is not guaranteed upon exceptional return. The status of + * each task may be obtained using {@link #getException()} and + * related methods to check if they have been cancelled, completed + * normally or exceptionally, or left unprocessed. * *

    This method may be invoked only from within {@code * ForkJoinTask} computations (as may be determined using method @@ -644,7 +443,7 @@ public abstract class ForkJoinTask implements Future, Serializable { t.fork(); else { t.quietlyInvoke(); - if (ex == null) + if (ex == null && t.status < NORMAL) ex = t.getException(); } } @@ -655,26 +454,27 @@ public abstract class ForkJoinTask implements Future, Serializable { t.cancel(false); else { t.quietlyJoin(); - if (ex == null) + if (ex == null && t.status < NORMAL) ex = t.getException(); } } } if (ex != null) - rethrowException(ex); + UNSAFE.throwException(ex); } /** * Forks all tasks in the specified collection, returning when * {@code isDone} holds for each task or an (unchecked) exception - * is encountered. If any task encounters an exception, others - * may be, but are not guaranteed to be, cancelled. If more than - * one task encounters an exception, then this method throws any - * one of these exceptions. The individual status of each task - * may be checked using {@link #getException()} and related - * methods. The behavior of this operation is undefined if the - * specified collection is modified while the operation is in - * progress. + * is encountered, in which case the exception is rethrown. If + * more than one task encounters an exception, then this method + * throws any one of these exceptions. If any task encounters an + * exception, others may be cancelled. However, the execution + * status of individual tasks is not guaranteed upon exceptional + * return. The status of each task may be obtained using {@link + * #getException()} and related methods to check if they have been + * cancelled, completed normally or exceptionally, or left + * unprocessed. * *

    This method may be invoked only from within {@code * ForkJoinTask} computations (as may be determined using method @@ -706,7 +506,7 @@ public abstract class ForkJoinTask implements Future, Serializable { t.fork(); else { t.quietlyInvoke(); - if (ex == null) + if (ex == null && t.status < NORMAL) ex = t.getException(); } } @@ -717,13 +517,13 @@ public abstract class ForkJoinTask implements Future, Serializable { t.cancel(false); else { t.quietlyJoin(); - if (ex == null) + if (ex == null && t.status < NORMAL) ex = t.getException(); } } } if (ex != null) - rethrowException(ex); + UNSAFE.throwException(ex); return tasks; } @@ -753,7 +553,35 @@ public abstract class ForkJoinTask implements Future, Serializable { */ public boolean cancel(boolean mayInterruptIfRunning) { setCompletion(CANCELLED); - return (status & COMPLETION_MASK) == CANCELLED; + return status == CANCELLED; + } + + /** + * Cancels, ignoring any exceptions thrown by cancel. Used during + * worker and pool shutdown. Cancel is spec'ed not to throw any + * exceptions, but if it does anyway, we have no recourse during + * shutdown, so guard against this case. + */ + final void cancelIgnoringExceptions() { + try { + cancel(false); + } catch (Throwable ignore) { + } + } + + /** + * Cancels if current thread is a terminating worker thread, + * ignoring any exceptions thrown by cancel. + */ + final void cancelIfTerminating() { + Thread t = Thread.currentThread(); + if ((t instanceof ForkJoinWorkerThread) && + ((ForkJoinWorkerThread) t).isTerminating()) { + try { + cancel(false); + } catch (Throwable ignore) { + } + } } public final boolean isDone() { @@ -761,7 +589,7 @@ public abstract class ForkJoinTask implements Future, Serializable { } public final boolean isCancelled() { - return (status & COMPLETION_MASK) == CANCELLED; + return status == CANCELLED; } /** @@ -770,7 +598,7 @@ public abstract class ForkJoinTask implements Future, Serializable { * @return {@code true} if this task threw an exception or was cancelled */ public final boolean isCompletedAbnormally() { - return (status & COMPLETION_MASK) < NORMAL; + return status < NORMAL; } /** @@ -781,7 +609,7 @@ public abstract class ForkJoinTask implements Future, Serializable { * exception and was not cancelled */ public final boolean isCompletedNormally() { - return (status & COMPLETION_MASK) == NORMAL; + return status == NORMAL; } /** @@ -792,7 +620,7 @@ public abstract class ForkJoinTask implements Future, Serializable { * @return the exception, or {@code null} if none */ public final Throwable getException() { - int s = status & COMPLETION_MASK; + int s = status; return ((s >= NORMAL) ? null : (s == CANCELLED) ? new CancellationException() : exceptionMap.get(this)); @@ -813,20 +641,21 @@ public abstract class ForkJoinTask implements Future, Serializable { * thrown will be a {@code RuntimeException} with cause {@code ex}. */ public void completeExceptionally(Throwable ex) { - setDoneExceptionally((ex instanceof RuntimeException) || - (ex instanceof Error) ? ex : - new RuntimeException(ex)); + setExceptionalCompletion((ex instanceof RuntimeException) || + (ex instanceof Error) ? ex : + new RuntimeException(ex)); } /** * Completes this task, and if not already aborted or cancelled, - * returning a {@code null} result upon {@code join} and related - * operations. This method may be used to provide results for - * asynchronous tasks, or to provide alternative handling for - * tasks that would not otherwise complete normally. Its use in - * other situations is discouraged. This method is - * overridable, but overridden versions must invoke {@code super} - * implementation to maintain guarantees. + * returning the given value as the result of subsequent + * invocations of {@code join} and related operations. This method + * may be used to provide results for asynchronous tasks, or to + * provide alternative handling for tasks that would not otherwise + * complete normally. Its use in other situations is + * discouraged. This method is overridable, but overridden + * versions must invoke {@code super} implementation to maintain + * guarantees. * * @param value the result value for this task */ @@ -834,97 +663,151 @@ public abstract class ForkJoinTask implements Future, Serializable { try { setRawResult(value); } catch (Throwable rex) { - setDoneExceptionally(rex); + setExceptionalCompletion(rex); return; } - setNormalCompletion(); + setCompletion(NORMAL); } public final V get() throws InterruptedException, ExecutionException { - ForkJoinWorkerThread w = getWorker(); - if (w == null || status < 0 || !w.unpushTask(this) || !tryQuietlyInvoke()) - awaitDone(w, true); - return reportFutureResult(); + quietlyJoin(); + if (Thread.interrupted()) + throw new InterruptedException(); + int s = status; + if (s < NORMAL) { + Throwable ex; + if (s == CANCELLED) + throw new CancellationException(); + if (s == EXCEPTIONAL && (ex = exceptionMap.get(this)) != null) + throw new ExecutionException(ex); + } + return getRawResult(); } public final V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { + Thread t = Thread.currentThread(); + ForkJoinPool pool; + if (t instanceof ForkJoinWorkerThread) { + ForkJoinWorkerThread w = (ForkJoinWorkerThread) t; + if (status >= 0 && w.unpushTask(this)) + quietlyExec(); + pool = w.pool; + } + else + pool = null; + /* + * Timed wait loop intermixes cases for FJ (pool != null) and + * non FJ threads. For FJ, decrement pool count but don't try + * for replacement; increment count on completion. For non-FJ, + * deal with interrupts. This is messy, but a little less so + * than is splitting the FJ and nonFJ cases. + */ + boolean interrupted = false; + boolean dec = false; // true if pool count decremented long nanos = unit.toNanos(timeout); - ForkJoinWorkerThread w = getWorker(); - if (w == null || status < 0 || !w.unpushTask(this) || !tryQuietlyInvoke()) - awaitDone(w, nanos); - return reportTimedFutureResult(); - } - - /** - * Possibly executes other tasks until this task {@link #isDone is - * done}, then returns the result of the computation. This method - * may be more efficient than {@code join}, but is only applicable - * when there are no potential dependencies between continuation - * of the current task and that of any other task that might be - * executed while helping. (This usually holds for pure - * divide-and-conquer tasks). - * - *

    This method may be invoked only from within {@code - * ForkJoinTask} computations (as may be determined using method - * {@link #inForkJoinPool}). Attempts to invoke in other contexts - * result in exceptions or errors, possibly including {@code - * ClassCastException}. - * - * @return the computed result - */ - public final V helpJoin() { - ForkJoinWorkerThread w = (ForkJoinWorkerThread) Thread.currentThread(); - if (status < 0 || !w.unpushTask(this) || !tryExec()) - reportException(busyJoin(w)); + for (;;) { + if (pool == null && Thread.interrupted()) { + interrupted = true; + break; + } + int s = status; + if (s < 0) + break; + if (UNSAFE.compareAndSwapInt(this, statusOffset, s, SIGNAL)) { + long startTime = System.nanoTime(); + long nt; // wait time + while (status >= 0 && + (nt = nanos - (System.nanoTime() - startTime)) > 0) { + if (pool != null && !dec) + dec = pool.tryDecrementRunningCount(); + else { + long ms = nt / 1000000; + int ns = (int) (nt % 1000000); + try { + synchronized(this) { + if (status >= 0) + wait(ms, ns); + } + } catch (InterruptedException ie) { + if (pool != null) + cancelIfTerminating(); + else { + interrupted = true; + break; + } + } + } + } + break; + } + } + if (pool != null && dec) + pool.incrementRunningCount(); + if (interrupted) + throw new InterruptedException(); + int es = status; + if (es != NORMAL) { + Throwable ex; + if (es == CANCELLED) + throw new CancellationException(); + if (es == EXCEPTIONAL && (ex = exceptionMap.get(this)) != null) + throw new ExecutionException(ex); + throw new TimeoutException(); + } return getRawResult(); } /** - * Possibly executes other tasks until this task {@link #isDone is - * done}. This method may be useful when processing collections - * of tasks when some have been cancelled or otherwise known to - * have aborted. - * - *

    This method may be invoked only from within {@code - * ForkJoinTask} computations (as may be determined using method - * {@link #inForkJoinPool}). Attempts to invoke in other contexts - * result in exceptions or errors, possibly including {@code - * ClassCastException}. - */ - public final void quietlyHelpJoin() { - if (status >= 0) { - ForkJoinWorkerThread w = - (ForkJoinWorkerThread) Thread.currentThread(); - if (!w.unpushTask(this) || !tryQuietlyInvoke()) - busyJoin(w); - } - } - - /** - * Joins this task, without returning its result or throwing an + * Joins this task, without returning its result or throwing its * exception. This method may be useful when processing * collections of tasks when some have been cancelled or otherwise * known to have aborted. */ public final void quietlyJoin() { - if (status >= 0) { - ForkJoinWorkerThread w = getWorker(); - if (w == null || !w.unpushTask(this) || !tryQuietlyInvoke()) - awaitDone(w, true); + Thread t; + if ((t = Thread.currentThread()) instanceof ForkJoinWorkerThread) { + ForkJoinWorkerThread w = (ForkJoinWorkerThread) t; + if (status >= 0) { + if (w.unpushTask(this)) { + boolean completed; + try { + completed = exec(); + } catch (Throwable rex) { + setExceptionalCompletion(rex); + return; + } + if (completed) { + setCompletion(NORMAL); + return; + } + } + w.joinTask(this); + } } + else + externalAwaitDone(); } /** * Commences performing this task and awaits its completion if - * necessary, without returning its result or throwing an - * exception. This method may be useful when processing - * collections of tasks when some have been cancelled or otherwise - * known to have aborted. + * necessary, without returning its result or throwing its + * exception. */ public final void quietlyInvoke() { - if (status >= 0 && !tryQuietlyInvoke()) - quietlyJoin(); + if (status >= 0) { + boolean completed; + try { + completed = exec(); + } catch (Throwable rex) { + setExceptionalCompletion(rex); + return; + } + if (completed) + setCompletion(NORMAL); + else + quietlyJoin(); + } } /** @@ -956,7 +839,7 @@ public abstract class ForkJoinTask implements Future, Serializable { * pre-constructed trees of subtasks in loops. */ public void reinitialize() { - if ((status & COMPLETION_MASK) == EXCEPTIONAL) + if (status == EXCEPTIONAL) exceptionMap.remove(this); status = 0; } @@ -1246,7 +1129,7 @@ public abstract class ForkJoinTask implements Future, Serializable { private static final long serialVersionUID = -7721805057305804111L; /** - * Saves the state to a stream. + * Saves the state to a stream (that is, serializes it). * * @serialData the current run status and the exception thrown * during execution, or {@code null} if none @@ -1259,18 +1142,16 @@ public abstract class ForkJoinTask implements Future, Serializable { } /** - * Reconstitutes the instance from a stream. + * Reconstitutes the instance from a stream (that is, deserializes it). * * @param s the stream */ private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { s.defaultReadObject(); - status &= ~INTERNAL_SIGNAL_MASK; // clear internal signal counts - status |= EXTERNAL_SIGNAL; // conservatively set external signal Object ex = s.readObject(); if (ex != null) - setDoneExceptionally((Throwable) ex); + setExceptionalCompletion((Throwable) ex); } // Unsafe mechanics diff --git a/jdk/src/share/classes/java/util/concurrent/ForkJoinWorkerThread.java b/jdk/src/share/classes/java/util/concurrent/ForkJoinWorkerThread.java index 0dc14c71a2d..784dd8056bc 100644 --- a/jdk/src/share/classes/java/util/concurrent/ForkJoinWorkerThread.java +++ b/jdk/src/share/classes/java/util/concurrent/ForkJoinWorkerThread.java @@ -35,7 +35,9 @@ package java.util.concurrent; +import java.util.Random; import java.util.Collection; +import java.util.concurrent.locks.LockSupport; /** * A thread managed by a {@link ForkJoinPool}. This class is @@ -52,46 +54,55 @@ import java.util.Collection; */ public class ForkJoinWorkerThread extends Thread { /* - * Algorithm overview: + * Overview: * - * 1. Work-Stealing: Work-stealing queues are special forms of - * Deques that support only three of the four possible - * end-operations -- push, pop, and deq (aka steal), and only do - * so under the constraints that push and pop are called only from - * the owning thread, while deq may be called from other threads. - * (If you are unfamiliar with them, you probably want to read - * Herlihy and Shavit's book "The Art of Multiprocessor - * programming", chapter 16 describing these in more detail before - * proceeding.) The main work-stealing queue design is roughly - * similar to "Dynamic Circular Work-Stealing Deque" by David - * Chase and Yossi Lev, SPAA 2005 - * (http://research.sun.com/scalable/pubs/index.html). The main - * difference ultimately stems from gc requirements that we null - * out taken slots as soon as we can, to maintain as small a - * footprint as possible even in programs generating huge numbers - * of tasks. To accomplish this, we shift the CAS arbitrating pop - * vs deq (steal) from being on the indices ("base" and "sp") to - * the slots themselves (mainly via method "casSlotNull()"). So, - * both a successful pop and deq mainly entail CAS'ing a non-null - * slot to null. Because we rely on CASes of references, we do - * not need tag bits on base or sp. They are simple ints as used - * in any circular array-based queue (see for example ArrayDeque). - * Updates to the indices must still be ordered in a way that - * guarantees that (sp - base) > 0 means the queue is empty, but - * otherwise may err on the side of possibly making the queue - * appear nonempty when a push, pop, or deq have not fully - * committed. Note that this means that the deq operation, - * considered individually, is not wait-free. One thief cannot - * successfully continue until another in-progress one (or, if - * previously empty, a push) completes. However, in the - * aggregate, we ensure at least probabilistic - * non-blockingness. If an attempted steal fails, a thief always - * chooses a different random victim target to try next. So, in - * order for one thief to progress, it suffices for any - * in-progress deq or new push on any empty queue to complete. One - * reason this works well here is that apparently-nonempty often - * means soon-to-be-stealable, which gives threads a chance to - * activate if necessary before stealing (see below). + * ForkJoinWorkerThreads are managed by ForkJoinPools and perform + * ForkJoinTasks. This class includes bookkeeping in support of + * worker activation, suspension, and lifecycle control described + * in more detail in the internal documentation of class + * ForkJoinPool. And as described further below, this class also + * includes special-cased support for some ForkJoinTask + * methods. But the main mechanics involve work-stealing: + * + * Work-stealing queues are special forms of Deques that support + * only three of the four possible end-operations -- push, pop, + * and deq (aka steal), under the further constraints that push + * and pop are called only from the owning thread, while deq may + * be called from other threads. (If you are unfamiliar with + * them, you probably want to read Herlihy and Shavit's book "The + * Art of Multiprocessor programming", chapter 16 describing these + * in more detail before proceeding.) The main work-stealing + * queue design is roughly similar to those in the papers "Dynamic + * Circular Work-Stealing Deque" by Chase and Lev, SPAA 2005 + * (http://research.sun.com/scalable/pubs/index.html) and + * "Idempotent work stealing" by Michael, Saraswat, and Vechev, + * PPoPP 2009 (http://portal.acm.org/citation.cfm?id=1504186). + * The main differences ultimately stem from gc requirements that + * we null out taken slots as soon as we can, to maintain as small + * a footprint as possible even in programs generating huge + * numbers of tasks. To accomplish this, we shift the CAS + * arbitrating pop vs deq (steal) from being on the indices + * ("base" and "sp") to the slots themselves (mainly via method + * "casSlotNull()"). So, both a successful pop and deq mainly + * entail a CAS of a slot from non-null to null. Because we rely + * on CASes of references, we do not need tag bits on base or sp. + * They are simple ints as used in any circular array-based queue + * (see for example ArrayDeque). Updates to the indices must + * still be ordered in a way that guarantees that sp == base means + * the queue is empty, but otherwise may err on the side of + * possibly making the queue appear nonempty when a push, pop, or + * deq have not fully committed. Note that this means that the deq + * operation, considered individually, is not wait-free. One thief + * cannot successfully continue until another in-progress one (or, + * if previously empty, a push) completes. However, in the + * aggregate, we ensure at least probabilistic non-blockingness. + * If an attempted steal fails, a thief always chooses a different + * random victim target to try next. So, in order for one thief to + * progress, it suffices for any in-progress deq or new push on + * any empty queue to complete. One reason this works well here is + * that apparently-nonempty often means soon-to-be-stealable, + * which gives threads a chance to set activation status if + * necessary before stealing. * * This approach also enables support for "async mode" where local * task processing is in FIFO, not LIFO order; simply by using a @@ -99,24 +110,54 @@ public class ForkJoinWorkerThread extends Thread { * by the ForkJoinPool). This allows use in message-passing * frameworks in which tasks are never joined. * - * Efficient implementation of this approach currently relies on - * an uncomfortable amount of "Unsafe" mechanics. To maintain + * When a worker would otherwise be blocked waiting to join a + * task, it first tries a form of linear helping: Each worker + * records (in field currentSteal) the most recent task it stole + * from some other worker. Plus, it records (in field currentJoin) + * the task it is currently actively joining. Method joinTask uses + * these markers to try to find a worker to help (i.e., steal back + * a task from and execute it) that could hasten completion of the + * actively joined task. In essence, the joiner executes a task + * that would be on its own local deque had the to-be-joined task + * not been stolen. This may be seen as a conservative variant of + * the approach in Wagner & Calder "Leapfrogging: a portable + * technique for implementing efficient futures" SIGPLAN Notices, + * 1993 (http://portal.acm.org/citation.cfm?id=155354). It differs + * in that: (1) We only maintain dependency links across workers + * upon steals, rather than use per-task bookkeeping. This may + * require a linear scan of workers array to locate stealers, but + * usually doesn't because stealers leave hints (that may become + * stale/wrong) of where to locate them. This isolates cost to + * when it is needed, rather than adding to per-task overhead. + * (2) It is "shallow", ignoring nesting and potentially cyclic + * mutual steals. (3) It is intentionally racy: field currentJoin + * is updated only while actively joining, which means that we + * miss links in the chain during long-lived tasks, GC stalls etc + * (which is OK since blocking in such cases is usually a good + * idea). (4) We bound the number of attempts to find work (see + * MAX_HELP_DEPTH) and fall back to suspending the worker and if + * necessary replacing it with a spare (see + * ForkJoinPool.awaitJoin). + * + * Efficient implementation of these algorithms currently relies + * on an uncomfortable amount of "Unsafe" mechanics. To maintain * correct orderings, reads and writes of variable base require - * volatile ordering. Variable sp does not require volatile write - * but needs cheaper store-ordering on writes. Because they are - * protected by volatile base reads, reads of the queue array and - * its slots do not need volatile load semantics, but writes (in - * push) require store order and CASes (in pop and deq) require - * (volatile) CAS semantics. (See "Idempotent work stealing" by - * Michael, Saraswat, and Vechev, PPoPP 2009 - * http://portal.acm.org/citation.cfm?id=1504186 for an algorithm - * with similar properties, but without support for nulling - * slots.) Since these combinations aren't supported using - * ordinary volatiles, the only way to accomplish these - * efficiently is to use direct Unsafe calls. (Using external - * AtomicIntegers and AtomicReferenceArrays for the indices and - * array is significantly slower because of memory locality and - * indirection effects.) + * volatile ordering. Variable sp does not require volatile + * writes but still needs store-ordering, which we accomplish by + * pre-incrementing sp before filling the slot with an ordered + * store. (Pre-incrementing also enables backouts used in + * joinTask.) Because they are protected by volatile base reads, + * reads of the queue array and its slots by other threads do not + * need volatile load semantics, but writes (in push) require + * store order and CASes (in pop and deq) require (volatile) CAS + * semantics. (Michael, Saraswat, and Vechev's algorithm has + * similar properties, but without support for nulling slots.) + * Since these combinations aren't supported using ordinary + * volatiles, the only way to accomplish these efficiently is to + * use direct Unsafe calls. (Using external AtomicIntegers and + * AtomicReferenceArrays for the indices and array is + * significantly slower because of memory locality and indirection + * effects.) * * Further, performance on most platforms is very sensitive to * placement and sizing of the (resizable) queue array. Even @@ -124,56 +165,45 @@ public class ForkJoinWorkerThread extends Thread { * initial size must be large enough to counteract cache * contention effects across multiple queues (especially in the * presence of GC cardmarking). Also, to improve thread-locality, - * queues are currently initialized immediately after the thread - * gets the initial signal to start processing tasks. However, - * all queue-related methods except pushTask are written in a way - * that allows them to instead be lazily allocated and/or disposed - * of when empty. All together, these low-level implementation - * choices produce as much as a factor of 4 performance - * improvement compared to naive implementations, and enable the - * processing of billions of tasks per second, sometimes at the - * expense of ugliness. - * - * 2. Run control: The primary run control is based on a global - * counter (activeCount) held by the pool. It uses an algorithm - * similar to that in Herlihy and Shavit section 17.6 to cause - * threads to eventually block when all threads declare they are - * inactive. For this to work, threads must be declared active - * when executing tasks, and before stealing a task. They must be - * inactive before blocking on the Pool Barrier (awaiting a new - * submission or other Pool event). In between, there is some free - * play which we take advantage of to avoid contention and rapid - * flickering of the global activeCount: If inactive, we activate - * only if a victim queue appears to be nonempty (see above). - * Similarly, a thread tries to inactivate only after a full scan - * of other threads. The net effect is that contention on - * activeCount is rarely a measurable performance issue. (There - * are also a few other cases where we scan for work rather than - * retry/block upon contention.) - * - * 3. Selection control. We maintain policy of always choosing to - * run local tasks rather than stealing, and always trying to - * steal tasks before trying to run a new submission. All steals - * are currently performed in randomly-chosen deq-order. It may be - * worthwhile to bias these with locality / anti-locality - * information, but doing this well probably requires more - * lower-level information from JVMs than currently provided. + * queues are initialized after starting. All together, these + * low-level implementation choices produce as much as a factor of + * 4 performance improvement compared to naive implementations, + * and enable the processing of billions of tasks per second, + * sometimes at the expense of ugliness. */ + /** + * Generator for initial random seeds for random victim + * selection. This is used only to create initial seeds. Random + * steals use a cheaper xorshift generator per steal attempt. We + * expect only rare contention on seedGenerator, so just use a + * plain Random. + */ + private static final Random seedGenerator = new Random(); + + /** + * The maximum stolen->joining link depth allowed in helpJoinTask. + * Depths for legitimate chains are unbounded, but we use a fixed + * constant to avoid (otherwise unchecked) cycles and bound + * staleness of traversal parameters at the expense of sometimes + * blocking when we could be helping. + */ + private static final int MAX_HELP_DEPTH = 8; + /** * Capacity of work-stealing queue array upon initialization. - * Must be a power of two. Initial size must be at least 2, but is + * Must be a power of two. Initial size must be at least 4, but is * padded to minimize cache effects. */ private static final int INITIAL_QUEUE_CAPACITY = 1 << 13; /** * Maximum work-stealing queue array size. Must be less than or - * equal to 1 << 28 to ensure lack of index wraparound. (This - * is less than usual bounds, because we need leftshift by 3 - * to be in int range). + * equal to 1 << (31 - width of array entry) to ensure lack of + * index wraparound. The value is set in the static block + * at the end of this file after obtaining width. */ - private static final int MAXIMUM_QUEUE_CAPACITY = 1 << 28; + private static final int MAXIMUM_QUEUE_CAPACITY; /** * The pool this thread works in. Accessed directly by ForkJoinTask. @@ -182,18 +212,10 @@ public class ForkJoinWorkerThread extends Thread { /** * The work-stealing queue array. Size must be a power of two. - * Initialized when thread starts, to improve memory locality. + * Initialized in onStart, to improve memory locality. */ private ForkJoinTask[] queue; - /** - * Index (mod queue.length) of next queue slot to push to or pop - * from. It is written only by owner thread, via ordered store. - * Both sp and base are allowed to wrap around on overflow, but - * (sp - base) still estimates size. - */ - private volatile int sp; - /** * Index (mod queue.length) of least valid queue slot, which is * always the next position to steal from if nonempty. @@ -201,46 +223,107 @@ public class ForkJoinWorkerThread extends Thread { private volatile int base; /** - * Activity status. When true, this worker is considered active. - * Must be false upon construction. It must be true when executing - * tasks, and BEFORE stealing a task. It must be false before - * calling pool.sync. + * Index (mod queue.length) of next queue slot to push to or pop + * from. It is written only by owner thread, and accessed by other + * threads only after reading (volatile) base. Both sp and base + * are allowed to wrap around on overflow, but (sp - base) still + * estimates size. */ - private boolean active; + private int sp; /** - * Run state of this worker. Supports simple versions of the usual - * shutdown/shutdownNow control. + * The index of most recent stealer, used as a hint to avoid + * traversal in method helpJoinTask. This is only a hint because a + * worker might have had multiple steals and this only holds one + * of them (usually the most current). Declared non-volatile, + * relying on other prevailing sync to keep reasonably current. */ - private volatile int runState; + private int stealHint; + + /** + * Run state of this worker. In addition to the usual run levels, + * tracks if this worker is suspended as a spare, and if it was + * killed (trimmed) while suspended. However, "active" status is + * maintained separately and modified only in conjunction with + * CASes of the pool's runState (which are currently sadly + * manually inlined for performance.) Accessed directly by pool + * to simplify checks for normal (zero) status. + */ + volatile int runState; + + private static final int TERMINATING = 0x01; + private static final int TERMINATED = 0x02; + private static final int SUSPENDED = 0x04; // inactive spare + private static final int TRIMMED = 0x08; // killed while suspended + + /** + * Number of steals. Directly accessed (and reset) by + * pool.tryAccumulateStealCount when idle. + */ + int stealCount; /** * Seed for random number generator for choosing steal victims. - * Uses Marsaglia xorshift. Must be nonzero upon initialization. + * Uses Marsaglia xorshift. Must be initialized as nonzero. */ private int seed; /** - * Number of steals, transferred to pool when idle + * Activity status. When true, this worker is considered active. + * Accessed directly by pool. Must be false upon construction. */ - private int stealCount; + boolean active; + + /** + * True if use local fifo, not default lifo, for local polling. + * Shadows value from ForkJoinPool. + */ + private final boolean locallyFifo; /** * Index of this worker in pool array. Set once by pool before - * running, and accessed directly by pool during cleanup etc. + * running, and accessed directly by pool to locate this worker in + * its workers array. */ int poolIndex; /** - * The last barrier event waited for. Accessed in pool callback - * methods, but only by current thread. + * The last pool event waited for. Accessed only by pool in + * callback methods invoked within this thread. */ - long lastEventCount; + int lastEventCount; /** - * True if use local fifo, not default lifo, for local polling + * Encoded index and event count of next event waiter. Accessed + * only by ForkJoinPool for managing event waiters. */ - private boolean locallyFifo; + volatile long nextWaiter; + + /** + * Number of times this thread suspended as spare. Accessed only + * by pool. + */ + int spareCount; + + /** + * Encoded index and count of next spare waiter. Accessed only + * by ForkJoinPool for managing spares. + */ + volatile int nextSpare; + + /** + * The task currently being joined, set only when actively trying + * to help other stealers in helpJoinTask. Written only by this + * thread, but read by others. + */ + private volatile ForkJoinTask currentJoin; + + /** + * The task most recently stolen from another worker (or + * submission queue). Written only by this thread, but read by + * others. + */ + private volatile ForkJoinTask currentSteal; /** * Creates a ForkJoinWorkerThread operating in the given pool. @@ -249,13 +332,24 @@ public class ForkJoinWorkerThread extends Thread { * @throws NullPointerException if pool is null */ protected ForkJoinWorkerThread(ForkJoinPool pool) { - if (pool == null) throw new NullPointerException(); this.pool = pool; - // Note: poolIndex is set by pool during construction - // Remaining initialization is deferred to onStart + this.locallyFifo = pool.locallyFifo; + setDaemon(true); + // To avoid exposing construction details to subclasses, + // remaining initialization is in start() and onStart() } - // Public access methods + /** + * Performs additional initialization and starts this thread. + */ + final void start(int poolIndex, UncaughtExceptionHandler ueh) { + this.poolIndex = poolIndex; + if (ueh != null) + setUncaughtExceptionHandler(ueh); + start(); + } + + // Public/protected methods /** * Returns the pool hosting this thread. @@ -279,130 +373,25 @@ public class ForkJoinWorkerThread extends Thread { return poolIndex; } - /** - * Establishes local first-in-first-out scheduling mode for forked - * tasks that are never joined. - * - * @param async if true, use locally FIFO scheduling - */ - void setAsyncMode(boolean async) { - locallyFifo = async; - } - - // Runstate management - - // Runstate values. Order matters - private static final int RUNNING = 0; - private static final int SHUTDOWN = 1; - private static final int TERMINATING = 2; - private static final int TERMINATED = 3; - - final boolean isShutdown() { return runState >= SHUTDOWN; } - final boolean isTerminating() { return runState >= TERMINATING; } - final boolean isTerminated() { return runState == TERMINATED; } - final boolean shutdown() { return transitionRunStateTo(SHUTDOWN); } - final boolean shutdownNow() { return transitionRunStateTo(TERMINATING); } - - /** - * Transitions to at least the given state. - * - * @return {@code true} if not already at least at given state - */ - private boolean transitionRunStateTo(int state) { - for (;;) { - int s = runState; - if (s >= state) - return false; - if (UNSAFE.compareAndSwapInt(this, runStateOffset, s, state)) - return true; - } - } - - /** - * Tries to set status to active; fails on contention. - */ - private boolean tryActivate() { - if (!active) { - if (!pool.tryIncrementActiveCount()) - return false; - active = true; - } - return true; - } - - /** - * Tries to set status to inactive; fails on contention. - */ - private boolean tryInactivate() { - if (active) { - if (!pool.tryDecrementActiveCount()) - return false; - active = false; - } - return true; - } - - /** - * Computes next value for random victim probe. Scans don't - * require a very high quality generator, but also not a crummy - * one. Marsaglia xor-shift is cheap and works well. - */ - private static int xorShift(int r) { - r ^= (r << 13); - r ^= (r >>> 17); - return r ^ (r << 5); - } - - // Lifecycle methods - - /** - * This method is required to be public, but should never be - * called explicitly. It performs the main run loop to execute - * ForkJoinTasks. - */ - public void run() { - Throwable exception = null; - try { - onStart(); - pool.sync(this); // await first pool event - mainLoop(); - } catch (Throwable ex) { - exception = ex; - } finally { - onTermination(exception); - } - } - - /** - * Executes tasks until shut down. - */ - private void mainLoop() { - while (!isShutdown()) { - ForkJoinTask t = pollTask(); - if (t != null || (t = pollSubmission()) != null) - t.quietlyExec(); - else if (tryInactivate()) - pool.sync(this); - } - } - /** * Initializes internal state after construction but before * processing any tasks. If you override this method, you must - * invoke super.onStart() at the beginning of the method. + * invoke @code{super.onStart()} at the beginning of the method. * Initialization requires care: Most fields must have legal * default values, to ensure that attempted accesses from other * threads work correctly even before this thread starts * processing tasks. */ protected void onStart() { - // Allocate while starting to improve chances of thread-local - // isolation + int rs = seedGenerator.nextInt(); + seed = rs == 0? 1 : rs; // seed must be nonzero + + // Allocate name string and arrays in this thread + String pid = Integer.toString(pool.getPoolNumber()); + String wid = Integer.toString(poolIndex); + setName("ForkJoinPool-" + pid + "-worker-" + wid); + queue = new ForkJoinTask[INITIAL_QUEUE_CAPACITY]; - // Initial value of seed need not be especially random but - // should differ across workers and must be nonzero - int p = poolIndex + 1; - seed = p + (p << 8) + (p << 16) + (p << 24); // spread bits } /** @@ -414,97 +403,187 @@ public class ForkJoinWorkerThread extends Thread { * to an unrecoverable error, or {@code null} if completed normally */ protected void onTermination(Throwable exception) { - // Execute remaining local tasks unless aborting or terminating - while (exception == null && pool.isProcessingTasks() && base != sp) { - try { - ForkJoinTask t = popTask(); - if (t != null) - t.quietlyExec(); - } catch (Throwable ex) { - exception = ex; - } - } - // Cancel other tasks, transition status, notify pool, and - // propagate exception to uncaught exception handler try { - do {} while (!tryInactivate()); // ensure inactive + ForkJoinPool p = pool; + if (active) { + int a; // inline p.tryDecrementActiveCount + active = false; + do {} while (!UNSAFE.compareAndSwapInt + (p, poolRunStateOffset, a = p.runState, a - 1)); + } cancelTasks(); - runState = TERMINATED; - pool.workerTerminated(this); + setTerminated(); + p.workerTerminated(this); } catch (Throwable ex) { // Shouldn't ever happen if (exception == null) // but if so, at least rethrown exception = ex; } finally { if (exception != null) - ForkJoinTask.rethrowException(exception); + UNSAFE.throwException(exception); } } - // Intrinsics-based support for queue operations. - - private static long slotOffset(int i) { - return ((long) i << qShift) + qBase; - } - /** - * Adds in store-order the given task at given slot of q to null. - * Caller must ensure q is non-null and index is in range. + * This method is required to be public, but should never be + * called explicitly. It performs the main run loop to execute + * ForkJoinTasks. */ - private static void setSlot(ForkJoinTask[] q, int i, - ForkJoinTask t) { - UNSAFE.putOrderedObject(q, slotOffset(i), t); + public void run() { + Throwable exception = null; + try { + onStart(); + mainLoop(); + } catch (Throwable ex) { + exception = ex; + } finally { + onTermination(exception); + } } + // helpers for run() + /** - * CAS given slot of q to null. Caller must ensure q is non-null - * and index is in range. + * Finds and executes tasks, and checks status while running. */ - private static boolean casSlotNull(ForkJoinTask[] q, int i, - ForkJoinTask t) { - return UNSAFE.compareAndSwapObject(q, slotOffset(i), t, null); + private void mainLoop() { + boolean ran = false; // true if ran a task on last step + ForkJoinPool p = pool; + for (;;) { + p.preStep(this, ran); + if (runState != 0) + break; + ran = tryExecSteal() || tryExecSubmission(); + } } /** - * Sets sp in store-order. + * Tries to steal a task and execute it. + * + * @return true if ran a task */ - private void storeSp(int s) { - UNSAFE.putOrderedInt(this, spOffset, s); + private boolean tryExecSteal() { + ForkJoinTask t; + if ((t = scan()) != null) { + t.quietlyExec(); + UNSAFE.putOrderedObject(this, currentStealOffset, null); + if (sp != base) + execLocalTasks(); + return true; + } + return false; } - // Main queue methods + /** + * If a submission exists, try to activate and run it. + * + * @return true if ran a task + */ + private boolean tryExecSubmission() { + ForkJoinPool p = pool; + // This loop is needed in case attempt to activate fails, in + // which case we only retry if there still appears to be a + // submission. + while (p.hasQueuedSubmissions()) { + ForkJoinTask t; int a; + if (active || // inline p.tryIncrementActiveCount + (active = UNSAFE.compareAndSwapInt(p, poolRunStateOffset, + a = p.runState, a + 1))) { + if ((t = p.pollSubmission()) != null) { + UNSAFE.putOrderedObject(this, currentStealOffset, t); + t.quietlyExec(); + UNSAFE.putOrderedObject(this, currentStealOffset, null); + if (sp != base) + execLocalTasks(); + return true; + } + } + } + return false; + } /** - * Pushes a task. Called only by current thread. + * Runs local tasks until queue is empty or shut down. Call only + * while active. + */ + private void execLocalTasks() { + while (runState == 0) { + ForkJoinTask t = locallyFifo ? locallyDeqTask() : popTask(); + if (t != null) + t.quietlyExec(); + else if (sp == base) + break; + } + } + + /* + * Intrinsics-based atomic writes for queue slots. These are + * basically the same as methods in AtomicReferenceArray, but + * specialized for (1) ForkJoinTask elements (2) requirement that + * nullness and bounds checks have already been performed by + * callers and (3) effective offsets are known not to overflow + * from int to long (because of MAXIMUM_QUEUE_CAPACITY). We don't + * need corresponding version for reads: plain array reads are OK + * because they are protected by other volatile reads and are + * confirmed by CASes. + * + * Most uses don't actually call these methods, but instead contain + * inlined forms that enable more predictable optimization. We + * don't define the version of write used in pushTask at all, but + * instead inline there a store-fenced array slot write. + */ + + /** + * CASes slot i of array q from t to null. Caller must ensure q is + * non-null and index is in range. + */ + private static final boolean casSlotNull(ForkJoinTask[] q, int i, + ForkJoinTask t) { + return UNSAFE.compareAndSwapObject(q, (i << qShift) + qBase, t, null); + } + + /** + * Performs a volatile write of the given task at given slot of + * array q. Caller must ensure q is non-null and index is in + * range. This method is used only during resets and backouts. + */ + private static final void writeSlot(ForkJoinTask[] q, int i, + ForkJoinTask t) { + UNSAFE.putObjectVolatile(q, (i << qShift) + qBase, t); + } + + // queue methods + + /** + * Pushes a task. Call only from this thread. * * @param t the task. Caller must ensure non-null. */ final void pushTask(ForkJoinTask t) { ForkJoinTask[] q = queue; - int mask = q.length - 1; - int s = sp; - setSlot(q, s & mask, t); - storeSp(++s); - if ((s -= base) == 1) - pool.signalWork(); - else if (s >= mask) - growQueue(); + int mask = q.length - 1; // implicit assert q != null + int s = sp++; // ok to increment sp before slot write + UNSAFE.putOrderedObject(q, ((s & mask) << qShift) + qBase, t); + if ((s -= base) == 0) + pool.signalWork(); // was empty + else if (s == mask) + growQueue(); // is full } /** * Tries to take a task from the base of the queue, failing if - * either empty or contended. + * empty or contended. Note: Specializations of this code appear + * in locallyDeqTask and elsewhere. * * @return a task, or null if none or contended */ final ForkJoinTask deqTask() { ForkJoinTask t; ForkJoinTask[] q; - int i; - int b; + int b, i; if (sp != (b = base) && (q = queue) != null && // must read q after b - (t = q[i = (q.length - 1) & b]) != null && - casSlotNull(q, i, t)) { + (t = q[i = (q.length - 1) & b]) != null && base == b && + UNSAFE.compareAndSwapObject(q, (i << qShift) + qBase, t, null)) { base = b + 1; return t; } @@ -512,19 +591,20 @@ public class ForkJoinWorkerThread extends Thread { } /** - * Tries to take a task from the base of own queue, activating if - * necessary, failing only if empty. Called only by current thread. + * Tries to take a task from the base of own queue. Assumes active + * status. Called only by this thread. * * @return a task, or null if none */ final ForkJoinTask locallyDeqTask() { - int b; - while (sp != (b = base)) { - if (tryActivate()) { - ForkJoinTask[] q = queue; - int i = (q.length - 1) & b; - ForkJoinTask t = q[i]; - if (t != null && casSlotNull(q, i, t)) { + ForkJoinTask[] q = queue; + if (q != null) { + ForkJoinTask t; + int b, i; + while (sp != (b = base)) { + if ((t = q[i = (q.length - 1) & b]) != null && base == b && + UNSAFE.compareAndSwapObject(q, (i << qShift) + qBase, + t, null)) { base = b + 1; return t; } @@ -534,46 +614,50 @@ public class ForkJoinWorkerThread extends Thread { } /** - * Returns a popped task, or null if empty. Ensures active status - * if non-null. Called only by current thread. + * Returns a popped task, or null if empty. Assumes active status. + * Called only by this thread. */ - final ForkJoinTask popTask() { - int s = sp; - while (s != base) { - if (tryActivate()) { - ForkJoinTask[] q = queue; - int mask = q.length - 1; - int i = (s - 1) & mask; + private ForkJoinTask popTask() { + ForkJoinTask[] q = queue; + if (q != null) { + int s; + while ((s = sp) != base) { + int i = (q.length - 1) & --s; + long u = (i << qShift) + qBase; // raw offset ForkJoinTask t = q[i]; - if (t == null || !casSlotNull(q, i, t)) + if (t == null) // lost to stealer break; - storeSp(s - 1); - return t; + if (UNSAFE.compareAndSwapObject(q, u, t, null)) { + sp = s; // putOrderedInt may encourage more timely write + // UNSAFE.putOrderedInt(this, spOffset, s); + return t; + } } } return null; } /** - * Specialized version of popTask to pop only if - * topmost element is the given task. Called only - * by current thread while active. + * Specialized version of popTask to pop only if topmost element + * is the given task. Called only by this thread while active. * * @param t the task. Caller must ensure non-null. */ final boolean unpushTask(ForkJoinTask t) { + int s; ForkJoinTask[] q = queue; - int mask = q.length - 1; - int s = sp - 1; - if (casSlotNull(q, s & mask, t)) { - storeSp(s); + if ((s = sp) != base && q != null && + UNSAFE.compareAndSwapObject + (q, (((q.length - 1) & --s) << qShift) + qBase, t, null)) { + sp = s; // putOrderedInt may encourage more timely write + // UNSAFE.putOrderedInt(this, spOffset, s); return true; } return false; } /** - * Returns next task or null if empty or contended + * Returns next task, or null if empty or contended. */ final ForkJoinTask peekTask() { ForkJoinTask[] q = queue; @@ -606,104 +690,209 @@ public class ForkJoinWorkerThread extends Thread { ForkJoinTask t = oldQ[oldIndex]; if (t != null && !casSlotNull(oldQ, oldIndex, t)) t = null; - setSlot(newQ, b & newMask, t); + writeSlot(newQ, b & newMask, t); } while (++b != bf); pool.signalWork(); } + /** + * Computes next value for random victim probe in scan(). Scans + * don't require a very high quality generator, but also not a + * crummy one. Marsaglia xor-shift is cheap and works well enough. + * Note: This is manually inlined in scan(). + */ + private static final int xorShift(int r) { + r ^= r << 13; + r ^= r >>> 17; + return r ^ (r << 5); + } + /** * Tries to steal a task from another worker. Starts at a random * index of workers array, and probes workers until finding one * with non-empty queue or finding that all are empty. It * randomly selects the first n probes. If these are empty, it - * resorts to a full circular traversal, which is necessary to - * accurately set active status by caller. Also restarts if pool - * events occurred since last scan, which forces refresh of - * workers array, in case barrier was associated with resize. + * resorts to a circular sweep, which is necessary to accurately + * set active status. (The circular sweep uses steps of + * approximately half the array size plus 1, to avoid bias + * stemming from leftmost packing of the array in ForkJoinPool.) * * This method must be both fast and quiet -- usually avoiding * memory accesses that could disrupt cache sharing etc other than - * those needed to check for and take tasks. This accounts for, - * among other things, updating random seed in place without - * storing it until exit. + * those needed to check for and take tasks (or to activate if not + * already active). This accounts for, among other things, + * updating random seed in place without storing it until exit. * * @return a task, or null if none found */ private ForkJoinTask scan() { - ForkJoinTask t = null; - int r = seed; // extract once to keep scan quiet - ForkJoinWorkerThread[] ws; // refreshed on outer loop - int mask; // must be power 2 minus 1 and > 0 - outer:do { - if ((ws = pool.workers) != null && (mask = ws.length - 1) > 0) { - int idx = r; - int probes = ~mask; // use random index while negative - for (;;) { - r = xorShift(r); // update random seed - ForkJoinWorkerThread v = ws[mask & idx]; - if (v == null || v.sp == v.base) { - if (probes <= mask) - idx = (probes++ < 0) ? r : (idx + 1); - else - break; - } - else if (!tryActivate() || (t = v.deqTask()) == null) - continue outer; // restart on contention - else - break outer; - } - } - } while (pool.hasNewSyncEvent(this)); // retry on pool events - seed = r; - return t; - } - - /** - * Gets and removes a local or stolen task. - * - * @return a task, if available - */ - final ForkJoinTask pollTask() { - ForkJoinTask t = locallyFifo ? locallyDeqTask() : popTask(); - if (t == null && (t = scan()) != null) - ++stealCount; - return t; - } - - /** - * Gets a local task. - * - * @return a task, if available - */ - final ForkJoinTask pollLocalTask() { - return locallyFifo ? locallyDeqTask() : popTask(); - } - - /** - * Returns a pool submission, if one exists, activating first. - * - * @return a submission, if available - */ - private ForkJoinTask pollSubmission() { ForkJoinPool p = pool; - while (p.hasQueuedSubmissions()) { - ForkJoinTask t; - if (tryActivate() && (t = p.pollSubmission()) != null) - return t; + ForkJoinWorkerThread[] ws; // worker array + int n; // upper bound of #workers + if ((ws = p.workers) != null && (n = ws.length) > 1) { + boolean canSteal = active; // shadow active status + int r = seed; // extract seed once + int mask = n - 1; + int j = -n; // loop counter + int k = r; // worker index, random if j < 0 + for (;;) { + ForkJoinWorkerThread v = ws[k & mask]; + r ^= r << 13; r ^= r >>> 17; r ^= r << 5; // inline xorshift + ForkJoinTask[] q; ForkJoinTask t; int b, a; + if (v != null && (b = v.base) != v.sp && + (q = v.queue) != null) { + int i = (q.length - 1) & b; + long u = (i << qShift) + qBase; // raw offset + int pid = poolIndex; + if ((t = q[i]) != null) { + if (!canSteal && // inline p.tryIncrementActiveCount + UNSAFE.compareAndSwapInt(p, poolRunStateOffset, + a = p.runState, a + 1)) + canSteal = active = true; + if (canSteal && v.base == b++ && + UNSAFE.compareAndSwapObject(q, u, t, null)) { + v.base = b; + v.stealHint = pid; + UNSAFE.putOrderedObject(this, + currentStealOffset, t); + seed = r; + ++stealCount; + return t; + } + } + j = -n; + k = r; // restart on contention + } + else if (++j <= 0) + k = r; + else if (j <= n) + k += (n >>> 1) | 1; + else + break; + } } return null; } - // Methods accessed only by Pool + // Run State management + + // status check methods used mainly by ForkJoinPool + final boolean isRunning() { return runState == 0; } + final boolean isTerminating() { return (runState & TERMINATING) != 0; } + final boolean isTerminated() { return (runState & TERMINATED) != 0; } + final boolean isSuspended() { return (runState & SUSPENDED) != 0; } + final boolean isTrimmed() { return (runState & TRIMMED) != 0; } + + /** + * Sets state to TERMINATING. Does NOT unpark or interrupt + * to wake up if currently blocked. Callers must do so if desired. + */ + final void shutdown() { + for (;;) { + int s = runState; + if ((s & (TERMINATING|TERMINATED)) != 0) + break; + if ((s & SUSPENDED) != 0) { // kill and wakeup if suspended + if (UNSAFE.compareAndSwapInt(this, runStateOffset, s, + (s & ~SUSPENDED) | + (TRIMMED|TERMINATING))) + break; + } + else if (UNSAFE.compareAndSwapInt(this, runStateOffset, s, + s | TERMINATING)) + break; + } + } + + /** + * Sets state to TERMINATED. Called only by onTermination(). + */ + private void setTerminated() { + int s; + do {} while (!UNSAFE.compareAndSwapInt(this, runStateOffset, + s = runState, + s | (TERMINATING|TERMINATED))); + } + + /** + * If suspended, tries to set status to unsuspended. + * Does NOT wake up if blocked. + * + * @return true if successful + */ + final boolean tryUnsuspend() { + int s; + while (((s = runState) & SUSPENDED) != 0) { + if (UNSAFE.compareAndSwapInt(this, runStateOffset, s, + s & ~SUSPENDED)) + return true; + } + return false; + } + + /** + * Sets suspended status and blocks as spare until resumed + * or shutdown. + */ + final void suspendAsSpare() { + for (;;) { // set suspended unless terminating + int s = runState; + if ((s & TERMINATING) != 0) { // must kill + if (UNSAFE.compareAndSwapInt(this, runStateOffset, s, + s | (TRIMMED | TERMINATING))) + return; + } + else if (UNSAFE.compareAndSwapInt(this, runStateOffset, s, + s | SUSPENDED)) + break; + } + ForkJoinPool p = pool; + p.pushSpare(this); + while ((runState & SUSPENDED) != 0) { + if (p.tryAccumulateStealCount(this)) { + interrupted(); // clear/ignore interrupts + if ((runState & SUSPENDED) == 0) + break; + LockSupport.park(this); + } + } + } + + // Misc support methods for ForkJoinPool + + /** + * Returns an estimate of the number of tasks in the queue. Also + * used by ForkJoinTask. + */ + final int getQueueSize() { + int n; // external calls must read base first + return (n = -base + sp) <= 0 ? 0 : n; + } /** * Removes and cancels all tasks in queue. Can be called from any * thread. */ final void cancelTasks() { - ForkJoinTask t; - while (base != sp && (t = deqTask()) != null) - t.cancelIgnoringExceptions(); + ForkJoinTask cj = currentJoin; // try to cancel ongoing tasks + if (cj != null) { + currentJoin = null; + cj.cancelIgnoringExceptions(); + try { + this.interrupt(); // awaken wait + } catch (SecurityException ignore) { + } + } + ForkJoinTask cs = currentSteal; + if (cs != null) { + currentSteal = null; + cs.cancelIgnoringExceptions(); + } + while (base != sp) { + ForkJoinTask t = deqTask(); + if (t != null) + t.cancelIgnoringExceptions(); + } } /** @@ -713,87 +902,266 @@ public class ForkJoinWorkerThread extends Thread { */ final int drainTasksTo(Collection> c) { int n = 0; - ForkJoinTask t; - while (base != sp && (t = deqTask()) != null) { - c.add(t); - ++n; - } - return n; - } - - /** - * Gets and clears steal count for accumulation by pool. Called - * only when known to be idle (in pool.sync and termination). - */ - final int getAndClearStealCount() { - int sc = stealCount; - stealCount = 0; - return sc; - } - - /** - * Returns {@code true} if at least one worker in the given array - * appears to have at least one queued task. - * - * @param ws array of workers - */ - static boolean hasQueuedTasks(ForkJoinWorkerThread[] ws) { - if (ws != null) { - int len = ws.length; - for (int j = 0; j < 2; ++j) { // need two passes for clean sweep - for (int i = 0; i < len; ++i) { - ForkJoinWorkerThread w = ws[i]; - if (w != null && w.sp != w.base) - return true; - } + while (base != sp) { + ForkJoinTask t = deqTask(); + if (t != null) { + c.add(t); + ++n; } } - return false; + return n; } // Support methods for ForkJoinTask /** - * Returns an estimate of the number of tasks in the queue. + * Gets and removes a local task. + * + * @return a task, if available */ - final int getQueueSize() { - // suppress momentarily negative values - return Math.max(0, sp - base); + final ForkJoinTask pollLocalTask() { + ForkJoinPool p = pool; + while (sp != base) { + int a; // inline p.tryIncrementActiveCount + if (active || + (active = UNSAFE.compareAndSwapInt(p, poolRunStateOffset, + a = p.runState, a + 1))) + return locallyFifo ? locallyDeqTask() : popTask(); + } + return null; } /** - * Returns an estimate of the number of tasks, offset by a - * function of number of idle workers. + * Gets and removes a local or stolen task. + * + * @return a task, if available */ - final int getEstimatedSurplusTaskCount() { - // The halving approximates weighting idle vs non-idle workers - return (sp - base) - (pool.getIdleThreadCount() >>> 1); - } - - /** - * Scans, returning early if joinMe done. - */ - final ForkJoinTask scanWhileJoining(ForkJoinTask joinMe) { - ForkJoinTask t = pollTask(); - if (t != null && joinMe.status < 0 && sp == base) { - pushTask(t); // unsteal if done and this task would be stealable - t = null; + final ForkJoinTask pollTask() { + ForkJoinTask t = pollLocalTask(); + if (t == null) { + t = scan(); + // cannot retain/track/help steal + UNSAFE.putOrderedObject(this, currentStealOffset, null); } return t; } + /** + * Possibly runs some tasks and/or blocks, until task is done. + * + * @param joinMe the task to join + */ + final void joinTask(ForkJoinTask joinMe) { + // currentJoin only written by this thread; only need ordered store + ForkJoinTask prevJoin = currentJoin; + UNSAFE.putOrderedObject(this, currentJoinOffset, joinMe); + if (sp != base) + localHelpJoinTask(joinMe); + if (joinMe.status >= 0) + pool.awaitJoin(joinMe, this); + UNSAFE.putOrderedObject(this, currentJoinOffset, prevJoin); + } + + /** + * Run tasks in local queue until given task is done. + * + * @param joinMe the task to join + */ + private void localHelpJoinTask(ForkJoinTask joinMe) { + int s; + ForkJoinTask[] q; + while (joinMe.status >= 0 && (s = sp) != base && (q = queue) != null) { + int i = (q.length - 1) & --s; + long u = (i << qShift) + qBase; // raw offset + ForkJoinTask t = q[i]; + if (t == null) // lost to a stealer + break; + if (UNSAFE.compareAndSwapObject(q, u, t, null)) { + /* + * This recheck (and similarly in helpJoinTask) + * handles cases where joinMe is independently + * cancelled or forced even though there is other work + * available. Back out of the pop by putting t back + * into slot before we commit by writing sp. + */ + if (joinMe.status < 0) { + UNSAFE.putObjectVolatile(q, u, t); + break; + } + sp = s; + // UNSAFE.putOrderedInt(this, spOffset, s); + t.quietlyExec(); + } + } + } + + /** + * Unless terminating, tries to locate and help perform tasks for + * a stealer of the given task, or in turn one of its stealers. + * Traces currentSteal->currentJoin links looking for a thread + * working on a descendant of the given task and with a non-empty + * queue to steal back and execute tasks from. + * + * The implementation is very branchy to cope with potential + * inconsistencies or loops encountering chains that are stale, + * unknown, or of length greater than MAX_HELP_DEPTH links. All + * of these cases are dealt with by just returning back to the + * caller, who is expected to retry if other join mechanisms also + * don't work out. + * + * @param joinMe the task to join + */ + final void helpJoinTask(ForkJoinTask joinMe) { + ForkJoinWorkerThread[] ws; + int n; + if (joinMe.status < 0) // already done + return; + if ((runState & TERMINATING) != 0) { // cancel if shutting down + joinMe.cancelIgnoringExceptions(); + return; + } + if ((ws = pool.workers) == null || (n = ws.length) <= 1) + return; // need at least 2 workers + + ForkJoinTask task = joinMe; // base of chain + ForkJoinWorkerThread thread = this; // thread with stolen task + for (int d = 0; d < MAX_HELP_DEPTH; ++d) { // chain length + // Try to find v, the stealer of task, by first using hint + ForkJoinWorkerThread v = ws[thread.stealHint & (n - 1)]; + if (v == null || v.currentSteal != task) { + for (int j = 0; ; ++j) { // search array + if (j < n) { + ForkJoinTask vs; + if ((v = ws[j]) != null && + (vs = v.currentSteal) != null) { + if (joinMe.status < 0 || task.status < 0) + return; // stale or done + if (vs == task) { + thread.stealHint = j; + break; // save hint for next time + } + } + } + else + return; // no stealer + } + } + for (;;) { // Try to help v, using specialized form of deqTask + if (joinMe.status < 0) + return; + int b = v.base; + ForkJoinTask[] q = v.queue; + if (b == v.sp || q == null) + break; + int i = (q.length - 1) & b; + long u = (i << qShift) + qBase; + ForkJoinTask t = q[i]; + int pid = poolIndex; + ForkJoinTask ps = currentSteal; + if (task.status < 0) + return; // stale or done + if (t != null && v.base == b++ && + UNSAFE.compareAndSwapObject(q, u, t, null)) { + if (joinMe.status < 0) { + UNSAFE.putObjectVolatile(q, u, t); + return; // back out on cancel + } + v.base = b; + v.stealHint = pid; + UNSAFE.putOrderedObject(this, currentStealOffset, t); + t.quietlyExec(); + UNSAFE.putOrderedObject(this, currentStealOffset, ps); + } + } + // Try to descend to find v's stealer + ForkJoinTask next = v.currentJoin; + if (task.status < 0 || next == null || next == task || + joinMe.status < 0) + return; + task = next; + thread = v; + } + } + + /** + * Implements ForkJoinTask.getSurplusQueuedTaskCount(). + * Returns an estimate of the number of tasks, offset by a + * function of number of idle workers. + * + * This method provides a cheap heuristic guide for task + * partitioning when programmers, frameworks, tools, or languages + * have little or no idea about task granularity. In essence by + * offering this method, we ask users only about tradeoffs in + * overhead vs expected throughput and its variance, rather than + * how finely to partition tasks. + * + * In a steady state strict (tree-structured) computation, each + * thread makes available for stealing enough tasks for other + * threads to remain active. Inductively, if all threads play by + * the same rules, each thread should make available only a + * constant number of tasks. + * + * The minimum useful constant is just 1. But using a value of 1 + * would require immediate replenishment upon each steal to + * maintain enough tasks, which is infeasible. Further, + * partitionings/granularities of offered tasks should minimize + * steal rates, which in general means that threads nearer the top + * of computation tree should generate more than those nearer the + * bottom. In perfect steady state, each thread is at + * approximately the same level of computation tree. However, + * producing extra tasks amortizes the uncertainty of progress and + * diffusion assumptions. + * + * So, users will want to use values larger, but not much larger + * than 1 to both smooth over transient shortages and hedge + * against uneven progress; as traded off against the cost of + * extra task overhead. We leave the user to pick a threshold + * value to compare with the results of this call to guide + * decisions, but recommend values such as 3. + * + * When all threads are active, it is on average OK to estimate + * surplus strictly locally. In steady-state, if one thread is + * maintaining say 2 surplus tasks, then so are others. So we can + * just use estimated queue length (although note that (sp - base) + * can be an overestimate because of stealers lagging increments + * of base). However, this strategy alone leads to serious + * mis-estimates in some non-steady-state conditions (ramp-up, + * ramp-down, other stalls). We can detect many of these by + * further considering the number of "idle" threads, that are + * known to have zero queued tasks, so compensate by a factor of + * (#idle/#active) threads. + */ + final int getEstimatedSurplusTaskCount() { + return sp - base - pool.idlePerActive(); + } + /** * Runs tasks until {@code pool.isQuiescent()}. */ final void helpQuiescePool() { + ForkJoinTask ps = currentSteal; // to restore below for (;;) { - ForkJoinTask t = pollTask(); - if (t != null) + ForkJoinTask t = pollLocalTask(); + if (t != null || (t = scan()) != null) t.quietlyExec(); - else if (tryInactivate() && pool.isQuiescent()) - break; + else { + ForkJoinPool p = pool; + int a; // to inline CASes + if (active) { + if (!UNSAFE.compareAndSwapInt + (p, poolRunStateOffset, a = p.runState, a - 1)) + continue; // retry later + active = false; // inactivate + UNSAFE.putOrderedObject(this, currentStealOffset, ps); + } + if (p.isQuiescent()) { + active = true; // re-activate + do {} while (!UNSAFE.compareAndSwapInt + (p, poolRunStateOffset, a = p.runState, a+1)); + return; + } + } } - do {} while (!tryActivate()); // re-activate on exit } // Unsafe mechanics @@ -803,15 +1171,23 @@ public class ForkJoinWorkerThread extends Thread { objectFieldOffset("sp", ForkJoinWorkerThread.class); private static final long runStateOffset = objectFieldOffset("runState", ForkJoinWorkerThread.class); - private static final long qBase; + private static final long currentJoinOffset = + objectFieldOffset("currentJoin", ForkJoinWorkerThread.class); + private static final long currentStealOffset = + objectFieldOffset("currentSteal", ForkJoinWorkerThread.class); + private static final long qBase = + UNSAFE.arrayBaseOffset(ForkJoinTask[].class); + private static final long poolRunStateOffset = // to inline CAS + objectFieldOffset("runState", ForkJoinPool.class); + private static final int qShift; static { - qBase = UNSAFE.arrayBaseOffset(ForkJoinTask[].class); int s = UNSAFE.arrayIndexScale(ForkJoinTask[].class); if ((s & (s-1)) != 0) throw new Error("data type scale not a power of two"); qShift = 31 - Integer.numberOfLeadingZeros(s); + MAXIMUM_QUEUE_CAPACITY = 1 << (31 - qShift); } private static long objectFieldOffset(String field, Class klazz) { diff --git a/jdk/src/share/classes/java/util/concurrent/LinkedTransferQueue.java b/jdk/src/share/classes/java/util/concurrent/LinkedTransferQueue.java index ae327cabf36..82bed929072 100644 --- a/jdk/src/share/classes/java/util/concurrent/LinkedTransferQueue.java +++ b/jdk/src/share/classes/java/util/concurrent/LinkedTransferQueue.java @@ -42,6 +42,7 @@ import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Queue; import java.util.concurrent.locks.LockSupport; + /** * An unbounded {@link TransferQueue} based on linked nodes. * This queue orders elements FIFO (first-in-first-out) with respect @@ -233,24 +234,6 @@ public class LinkedTransferQueue extends AbstractQueue * additional GC bookkeeping ("write barriers") that are sometimes * more costly than the writes themselves because of contention). * - * Removal of interior nodes (due to timed out or interrupted - * waits, or calls to remove(x) or Iterator.remove) can use a - * scheme roughly similar to that described in Scherer, Lea, and - * Scott's SynchronousQueue. Given a predecessor, we can unsplice - * any node except the (actual) tail of the queue. To avoid - * build-up of cancelled trailing nodes, upon a request to remove - * a trailing node, it is placed in field "cleanMe" to be - * unspliced upon the next call to unsplice any other node. - * Situations needing such mechanics are not common but do occur - * in practice; for example when an unbounded series of short - * timed calls to poll repeatedly time out but never otherwise - * fall off the list because of an untimed call to take at the - * front of the queue. Note that maintaining field cleanMe does - * not otherwise much impact garbage retention even if never - * cleared by some other call because the held node will - * eventually either directly or indirectly lead to a self-link - * once off the list. - * * *** Overview of implementation *** * * We use a threshold-based approach to updates, with a slack @@ -266,15 +249,10 @@ public class LinkedTransferQueue extends AbstractQueue * per-thread one available, but even ThreadLocalRandom is too * heavy for these purposes. * - * With such a small slack threshold value, it is rarely - * worthwhile to augment this with path short-circuiting; i.e., - * unsplicing nodes between head and the first unmatched node, or - * similarly for tail, rather than advancing head or tail - * proper. However, it is used (in awaitMatch) immediately before - * a waiting thread starts to block, as a final bit of helping at - * a point when contention with others is extremely unlikely - * (since if other threads that could release it are operating, - * then the current thread wouldn't be blocking). + * With such a small slack threshold value, it is not worthwhile + * to augment this with path short-circuiting (i.e., unsplicing + * interior nodes) except in the case of cancellation/removal (see + * below). * * We allow both the head and tail fields to be null before any * nodes are enqueued; initializing upon first append. This @@ -356,6 +334,70 @@ public class LinkedTransferQueue extends AbstractQueue * versa) compared to their predecessors receive additional * chained spins, reflecting longer paths typically required to * unblock threads during phase changes. + * + * + * ** Unlinking removed interior nodes ** + * + * In addition to minimizing garbage retention via self-linking + * described above, we also unlink removed interior nodes. These + * may arise due to timed out or interrupted waits, or calls to + * remove(x) or Iterator.remove. Normally, given a node that was + * at one time known to be the predecessor of some node s that is + * to be removed, we can unsplice s by CASing the next field of + * its predecessor if it still points to s (otherwise s must + * already have been removed or is now offlist). But there are two + * situations in which we cannot guarantee to make node s + * unreachable in this way: (1) If s is the trailing node of list + * (i.e., with null next), then it is pinned as the target node + * for appends, so can only be removed later after other nodes are + * appended. (2) We cannot necessarily unlink s given a + * predecessor node that is matched (including the case of being + * cancelled): the predecessor may already be unspliced, in which + * case some previous reachable node may still point to s. + * (For further explanation see Herlihy & Shavit "The Art of + * Multiprocessor Programming" chapter 9). Although, in both + * cases, we can rule out the need for further action if either s + * or its predecessor are (or can be made to be) at, or fall off + * from, the head of list. + * + * Without taking these into account, it would be possible for an + * unbounded number of supposedly removed nodes to remain + * reachable. Situations leading to such buildup are uncommon but + * can occur in practice; for example when a series of short timed + * calls to poll repeatedly time out but never otherwise fall off + * the list because of an untimed call to take at the front of the + * queue. + * + * When these cases arise, rather than always retraversing the + * entire list to find an actual predecessor to unlink (which + * won't help for case (1) anyway), we record a conservative + * estimate of possible unsplice failures (in "sweepVotes"). + * We trigger a full sweep when the estimate exceeds a threshold + * ("SWEEP_THRESHOLD") indicating the maximum number of estimated + * removal failures to tolerate before sweeping through, unlinking + * cancelled nodes that were not unlinked upon initial removal. + * We perform sweeps by the thread hitting threshold (rather than + * background threads or by spreading work to other threads) + * because in the main contexts in which removal occurs, the + * caller is already timed-out, cancelled, or performing a + * potentially O(n) operation (e.g. remove(x)), none of which are + * time-critical enough to warrant the overhead that alternatives + * would impose on other threads. + * + * Because the sweepVotes estimate is conservative, and because + * nodes become unlinked "naturally" as they fall off the head of + * the queue, and because we allow votes to accumulate even while + * sweeps are in progress, there are typically significantly fewer + * such nodes than estimated. Choice of a threshold value + * balances the likelihood of wasted effort and contention, versus + * providing a worst-case bound on retention of interior nodes in + * quiescent queues. The value defined below was chosen + * empirically to balance these under various timeout scenarios. + * + * Note that we cannot self-link unlinked interior nodes during + * sweeps. However, the associated garbage chains terminate when + * some successor ultimately falls off the head of the list and is + * self-linked. */ /** True if on multiprocessor */ @@ -381,12 +423,20 @@ public class LinkedTransferQueue extends AbstractQueue */ private static final int CHAINED_SPINS = FRONT_SPINS >>> 1; + /** + * The maximum number of estimated removal failures (sweepVotes) + * to tolerate before sweeping through the queue unlinking + * cancelled nodes that were not unlinked upon initial + * removal. See above for explanation. The value must be at least + * two to avoid useless sweeps when removing trailing nodes. + */ + static final int SWEEP_THRESHOLD = 32; + /** * Queue nodes. Uses Object, not E, for items to allow forgetting * them after use. Relies heavily on Unsafe mechanics to minimize - * unnecessary ordering constraints: Writes that intrinsically - * precede or follow CASes use simple relaxed forms. Other - * cleanups use releasing/lazy writes. + * unnecessary ordering constraints: Writes that are intrinsically + * ordered wrt other accesses or CASes use simple relaxed forms. */ static final class Node { final boolean isData; // false if this is a request node @@ -400,13 +450,13 @@ public class LinkedTransferQueue extends AbstractQueue } final boolean casItem(Object cmp, Object val) { - // assert cmp == null || cmp.getClass() != Node.class; + // assert cmp == null || cmp.getClass() != Node.class; return UNSAFE.compareAndSwapObject(this, itemOffset, cmp, val); } /** - * Creates a new node. Uses relaxed write because item can only - * be seen if followed by CAS. + * Constructs a new node. Uses relaxed write because item can + * only be seen after publication via casNext. */ Node(Object item, boolean isData) { UNSAFE.putObject(this, itemOffset, item); // relaxed write @@ -422,13 +472,17 @@ public class LinkedTransferQueue extends AbstractQueue } /** - * Sets item to self (using a releasing/lazy write) and waiter - * to null, to avoid garbage retention after extracting or - * cancelling. + * Sets item to self and waiter to null, to avoid garbage + * retention after matching or cancelling. Uses relaxed writes + * because order is already constrained in the only calling + * contexts: item is forgotten only after volatile/atomic + * mechanics that extract items. Similarly, clearing waiter + * follows either CAS or return from park (if ever parked; + * else we don't care). */ final void forgetContents() { - UNSAFE.putOrderedObject(this, itemOffset, this); - UNSAFE.putOrderedObject(this, waiterOffset, null); + UNSAFE.putObject(this, itemOffset, this); + UNSAFE.putObject(this, waiterOffset, null); } /** @@ -462,7 +516,7 @@ public class LinkedTransferQueue extends AbstractQueue * Tries to artificially match a data node -- used by remove. */ final boolean tryMatchData() { - // assert isData; + // assert isData; Object x = item; if (x != null && x != this && casItem(x, null)) { LockSupport.unpark(waiter); @@ -486,12 +540,12 @@ public class LinkedTransferQueue extends AbstractQueue /** head of the queue; null until first enqueue */ transient volatile Node head; - /** predecessor of dangling unspliceable node */ - private transient volatile Node cleanMe; // decl here reduces contention - /** tail of the queue; null until first append */ private transient volatile Node tail; + /** The number of apparent failures to unsplice removed nodes */ + private transient volatile int sweepVotes; + // CAS methods for fields private boolean casTail(Node cmp, Node val) { return UNSAFE.compareAndSwapObject(this, tailOffset, cmp, val); @@ -501,8 +555,8 @@ public class LinkedTransferQueue extends AbstractQueue return UNSAFE.compareAndSwapObject(this, headOffset, cmp, val); } - private boolean casCleanMe(Node cmp, Node val) { - return UNSAFE.compareAndSwapObject(this, cleanMeOffset, cmp, val); + private boolean casSweepVotes(int cmp, int val) { + return UNSAFE.compareAndSwapInt(this, sweepVotesOffset, cmp, val); } /* @@ -515,7 +569,7 @@ public class LinkedTransferQueue extends AbstractQueue @SuppressWarnings("unchecked") static E cast(Object item) { - // assert item == null || item.getClass() != Node.class; + // assert item == null || item.getClass() != Node.class; return (E) item; } @@ -544,10 +598,8 @@ public class LinkedTransferQueue extends AbstractQueue break; if (p.casItem(item, e)) { // match for (Node q = p; q != h;) { - Node n = q.next; // update head by 2 - if (n != null) // unless singleton - q = n; - if (head == h && casHead(h, q)) { + Node n = q.next; // update by 2 unless singleton + if (head == h && casHead(h, n == null? q : n)) { h.forgetNext(); break; } // advance and retry @@ -632,12 +684,12 @@ public class LinkedTransferQueue extends AbstractQueue for (;;) { Object item = s.item; if (item != e) { // matched - // assert item != s; + // assert item != s; s.forgetContents(); // avoid garbage return this.cast(item); } if ((w.isInterrupted() || (timed && nanos <= 0)) && - s.casItem(e, s)) { // cancel + s.casItem(e, s)) { // cancel unsplice(pred, s); return e; } @@ -647,9 +699,8 @@ public class LinkedTransferQueue extends AbstractQueue randomYields = ThreadLocalRandom.current(); } else if (spins > 0) { // spin - if (--spins == 0) - shortenHeadPath(); // reduce slack before blocking - else if (randomYields.nextInt(CHAINED_SPINS) == 0) + --spins; + if (randomYields.nextInt(CHAINED_SPINS) == 0) Thread.yield(); // occasionally yield } else if (s.waiter == null) { @@ -663,8 +714,6 @@ public class LinkedTransferQueue extends AbstractQueue } else { LockSupport.park(this); - s.waiter = null; - spins = -1; // spin if front upon wakeup } } } @@ -685,27 +734,6 @@ public class LinkedTransferQueue extends AbstractQueue return 0; } - /** - * Tries (once) to unsplice nodes between head and first unmatched - * or trailing node; failing on contention. - */ - private void shortenHeadPath() { - Node h, hn, p, q; - if ((p = h = head) != null && h.isMatched() && - (q = hn = h.next) != null) { - Node n; - while ((n = q.next) != q) { - if (n == null || !q.isMatched()) { - if (hn != q && h.next == hn) - h.casNext(hn, q); - break; - } - p = q; - q = n; - } - } - } - /* -------------- Traversal methods -------------- */ /** @@ -818,7 +846,8 @@ public class LinkedTransferQueue extends AbstractQueue public final void remove() { Node p = lastRet; if (p == null) throw new IllegalStateException(); - findAndRemoveDataNode(lastPred, p); + if (p.tryMatchData()) + unsplice(lastPred, p); } } @@ -828,99 +857,68 @@ public class LinkedTransferQueue extends AbstractQueue * Unsplices (now or later) the given deleted/cancelled node with * the given predecessor. * - * @param pred predecessor of node to be unspliced + * @param pred a node that was at one time known to be the + * predecessor of s, or null or s itself if s is/was at head * @param s the node to be unspliced */ - private void unsplice(Node pred, Node s) { - s.forgetContents(); // clear unneeded fields + final void unsplice(Node pred, Node s) { + s.forgetContents(); // forget unneeded fields /* - * At any given time, exactly one node on list cannot be - * unlinked -- the last inserted node. To accommodate this, if - * we cannot unlink s, we save its predecessor as "cleanMe", - * processing the previously saved version first. Because only - * one node in the list can have a null next, at least one of - * node s or the node previously saved can always be - * processed, so this always terminates. + * See above for rationale. Briefly: if pred still points to + * s, try to unlink s. If s cannot be unlinked, because it is + * trailing node or pred might be unlinked, and neither pred + * nor s are head or offlist, add to sweepVotes, and if enough + * votes have accumulated, sweep. */ - if (pred != null && pred != s) { - while (pred.next == s) { - Node oldpred = (cleanMe == null) ? null : reclean(); - Node n = s.next; - if (n != null) { - if (n != s) - pred.casNext(s, n); - break; + if (pred != null && pred != s && pred.next == s) { + Node n = s.next; + if (n == null || + (n != s && pred.casNext(s, n) && pred.isMatched())) { + for (;;) { // check if at, or could be, head + Node h = head; + if (h == pred || h == s || h == null) + return; // at head or list empty + if (!h.isMatched()) + break; + Node hn = h.next; + if (hn == null) + return; // now empty + if (hn != h && casHead(h, hn)) + h.forgetNext(); // advance head } - if (oldpred == pred || // Already saved - ((oldpred == null || oldpred.next == s) && - casCleanMe(oldpred, pred))) { - break; + if (pred.next != pred && s.next != s) { // recheck if offlist + for (;;) { // sweep now if enough votes + int v = sweepVotes; + if (v < SWEEP_THRESHOLD) { + if (casSweepVotes(v, v + 1)) + break; + } + else if (casSweepVotes(v, 0)) { + sweep(); + break; + } + } } } } } /** - * Tries to unsplice the deleted/cancelled node held in cleanMe - * that was previously uncleanable because it was at tail. - * - * @return current cleanMe node (or null) + * Unlinks matched (typically cancelled) nodes encountered in a + * traversal from head. */ - private Node reclean() { - /* - * cleanMe is, or at one time was, predecessor of a cancelled - * node s that was the tail so could not be unspliced. If it - * is no longer the tail, try to unsplice if necessary and - * make cleanMe slot available. This differs from similar - * code in unsplice() because we must check that pred still - * points to a matched node that can be unspliced -- if not, - * we can (must) clear cleanMe without unsplicing. This can - * loop only due to contention. - */ - Node pred; - while ((pred = cleanMe) != null) { - Node s = pred.next; - Node n; - if (s == null || s == pred || !s.isMatched()) - casCleanMe(pred, null); // already gone - else if ((n = s.next) != null) { - if (n != s) - pred.casNext(s, n); - casCleanMe(pred, null); - } - else + private void sweep() { + for (Node p = head, s, n; p != null && (s = p.next) != null; ) { + if (!s.isMatched()) + // Unmatched nodes are never self-linked + p = s; + else if ((n = s.next) == null) // trailing node is pinned break; - } - return pred; - } - - /** - * Main implementation of Iterator.remove(). Finds - * and unsplices the given data node. - * - * @param possiblePred possible predecessor of s - * @param s the node to remove - */ - final void findAndRemoveDataNode(Node possiblePred, Node s) { - // assert s.isData; - if (s.tryMatchData()) { - if (possiblePred != null && possiblePred.next == s) - unsplice(possiblePred, s); // was actual predecessor - else { - for (Node pred = null, p = head; p != null; ) { - if (p == s) { - unsplice(pred, p); - break; - } - if (p.isUnmatchedRequest()) - break; - pred = p; - if ((p = p.next) == pred) { // stale - pred = null; - p = head; - } - } - } + else if (s == n) // stale + // No need to also check for p == s, since that implies s == n + p = head; + else + p.casNext(s, n); } } @@ -1158,7 +1156,11 @@ public class LinkedTransferQueue extends AbstractQueue * @return {@code true} if this queue contains no elements */ public boolean isEmpty() { - return firstOfMode(true) == null; + for (Node p = head; p != null; p = succ(p)) { + if (!p.isMatched()) + return !p.isData; + } + return true; } public boolean hasWaitingConsumer() { @@ -1252,8 +1254,8 @@ public class LinkedTransferQueue extends AbstractQueue objectFieldOffset(UNSAFE, "head", LinkedTransferQueue.class); private static final long tailOffset = objectFieldOffset(UNSAFE, "tail", LinkedTransferQueue.class); - private static final long cleanMeOffset = - objectFieldOffset(UNSAFE, "cleanMe", LinkedTransferQueue.class); + private static final long sweepVotesOffset = + objectFieldOffset(UNSAFE, "sweepVotes", LinkedTransferQueue.class); static long objectFieldOffset(sun.misc.Unsafe UNSAFE, String field, Class klazz) { @@ -1266,5 +1268,4 @@ public class LinkedTransferQueue extends AbstractQueue throw error; } } - } diff --git a/jdk/src/share/classes/java/util/concurrent/Phaser.java b/jdk/src/share/classes/java/util/concurrent/Phaser.java index 7bf643cdfdb..623f46e41ed 100644 --- a/jdk/src/share/classes/java/util/concurrent/Phaser.java +++ b/jdk/src/share/classes/java/util/concurrent/Phaser.java @@ -898,7 +898,7 @@ public class Phaser { boolean doWait() { if (thread != null) { try { - ForkJoinPool.managedBlock(this, false); + ForkJoinPool.managedBlock(this); } catch (InterruptedException ie) { } } diff --git a/jdk/src/share/classes/java/util/spi/LocaleNameProvider.java b/jdk/src/share/classes/java/util/spi/LocaleNameProvider.java index b54195932e0..8c3639e171a 100644 --- a/jdk/src/share/classes/java/util/spi/LocaleNameProvider.java +++ b/jdk/src/share/classes/java/util/spi/LocaleNameProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, 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,22 +44,23 @@ public abstract class LocaleNameProvider extends LocaleServiceProvider { } /** - * Returns a localized name for the given ISO 639 language code and the - * given locale that is appropriate for display to the user. + * Returns a localized name for the given + * IETF BCP47 language code and the given locale that is appropriate for + * display to the user. * For example, if languageCode is "fr" and locale * is en_US, getDisplayLanguage() will return "French"; if languageCode * is "en" and locale is fr_FR, getDisplayLanguage() will return "anglais". * If the name returned cannot be localized according to locale, * (say, the provider does not have a Japanese name for Croatian), * this method returns null. - * @param languageCode the ISO 639 language code string in the form of two + * @param languageCode the language code string in the form of two to eight * lower-case letters between 'a' (U+0061) and 'z' (U+007A) * @param locale the desired locale * @return the name of the given language code for the specified locale, or null if it's not * available. * @exception NullPointerException if languageCode or locale is null * @exception IllegalArgumentException if languageCode is not in the form of - * two lower-case letters, or locale isn't + * two or three lower-case letters, or locale isn't * one of the locales returned from * {@link java.util.spi.LocaleServiceProvider#getAvailableLocales() * getAvailableLocales()}. @@ -68,22 +69,52 @@ public abstract class LocaleNameProvider extends LocaleServiceProvider { public abstract String getDisplayLanguage(String languageCode, Locale locale); /** - * Returns a localized name for the given ISO 3166 country code and the - * given locale that is appropriate for display to the user. + * Returns a localized name for the given + * IETF BCP47 script code and the given locale that is appropriate for + * display to the user. + * For example, if scriptCode is "Latn" and locale + * is en_US, getDisplayScript() will return "Latin"; if scriptCode + * is "Cyrl" and locale is fr_FR, getDisplayScript() will return "cyrillique". + * If the name returned cannot be localized according to locale, + * (say, the provider does not have a Japanese name for Cyrillic), + * this method returns null. + * @param scriptCode the four letter script code string in the form of title-case + * letters (the first letter is upper-case character between 'A' (U+0041) and + * 'Z' (U+005A) followed by three lower-case character between 'a' (U+0061) + * and 'z' (U+007A)). + * @param locale the desired locale + * @return the name of the given script code for the specified locale, or null if it's not + * available. + * @exception NullPointerException if scriptCode or locale is null + * @exception IllegalArgumentException if scriptCode is not in the form of + * four title case letters, or locale isn't + * one of the locales returned from + * {@link java.util.spi.LocaleServiceProvider#getAvailableLocales() + * getAvailableLocales()}. + * @see java.util.Locale#getDisplayScript(java.util.Locale) + * @since 1.7 + */ + public abstract String getDisplayScript(String scriptCode, Locale locale); + + /** + * Returns a localized name for the given + * IETF BCP47 region code (either ISO 3166 country code or UN M.49 area + * codes) and the given locale that is appropriate for display to the user. * For example, if countryCode is "FR" and locale * is en_US, getDisplayCountry() will return "France"; if countryCode * is "US" and locale is fr_FR, getDisplayCountry() will return "Etats-Unis". * If the name returned cannot be localized according to locale, * (say, the provider does not have a Japanese name for Croatia), * this method returns null. - * @param countryCode the ISO 3166 country code string in the form of two - * upper-case letters between 'A' (U+0041) and 'Z' (U+005A) + * @param countryCode the country(region) code string in the form of two + * upper-case letters between 'A' (U+0041) and 'Z' (U+005A) or the UN M.49 area code + * in the form of three digit letters between '0' (U+0030) and '9' (U+0039). * @param locale the desired locale * @return the name of the given country code for the specified locale, or null if it's not * available. * @exception NullPointerException if countryCode or locale is null * @exception IllegalArgumentException if countryCode is not in the form of - * two upper-case letters, or locale isn't + * two upper-case letters or three digit letters, or locale isn't * one of the locales returned from * {@link java.util.spi.LocaleServiceProvider#getAvailableLocales() * getAvailableLocales()}. diff --git a/jdk/src/share/classes/java/util/spi/LocaleServiceProvider.java b/jdk/src/share/classes/java/util/spi/LocaleServiceProvider.java index 567e89271a8..02626e35e95 100644 --- a/jdk/src/share/classes/java/util/spi/LocaleServiceProvider.java +++ b/jdk/src/share/classes/java/util/spi/LocaleServiceProvider.java @@ -86,18 +86,19 @@ import java.util.Locale; * Otherwise, they call the getAvailableLocales() methods of * installed providers for the appropriate interface to find one that * supports the requested locale. If such a provider is found, its other - * methods are called to obtain the requested object or name. If neither - * the Java runtime environment itself nor an installed provider supports - * the requested locale, a fallback locale is constructed by replacing the - * first of the variant, country, or language strings of the locale that's - * not an empty string with an empty string, and the lookup process is - * restarted. In the case that the variant contains one or more '_'s, the - * fallback locale is constructed by replacing the variant with a new variant - * which eliminates the last '_' and the part following it. Even if a - * fallback occurs, methods that return requested objects or name are - * invoked with the original locale before the fallback.The Java runtime - * environment must support the root locale for all locale sensitive services - * in order to guarantee that this process terminates. + * methods are called to obtain the requested object or name. When checking + * whether a locale is supported, the locale's extensions are ignored. + * If neither the Java runtime environment itself nor an installed provider + * supports the requested locale, the methods go through a list of candidate + * locales and repeat the availability check for each until a match is found. + * The algorithm used for creating a list of candidate locales is same as + * the one used by ResourceBunlde by default (see + * {@link java.util.ResourceBundle.Control#getCandidateLocales getCandidateLocales} + * for the details). Even if a locale is resolved from the candidate list, + * methods that return requested objects or names are invoked with the original + * requested locale including extensions. The Java runtime environment must + * support the root locale for all locale sensitive services in order to + * guarantee that this process terminates. *

    * Providers of names (but not providers of other objects) are allowed to * return null for some name requests even for locales that they claim to @@ -124,6 +125,11 @@ public abstract class LocaleServiceProvider { /** * Returns an array of all locales for which this locale service provider * can provide localized objects or names. + *

    + * Note: Extensions in a Locale are ignored during + * service provider lookup. So the array returned by this method should + * not include two or more Locale objects only differing in + * their extensions. * * @return An array of all locales for which this locale service provider * can provide localized objects or names. diff --git a/jdk/src/share/classes/javax/sound/midi/MidiDevice.java b/jdk/src/share/classes/javax/sound/midi/MidiDevice.java index 0a8fed47855..1e9f225d943 100644 --- a/jdk/src/share/classes/javax/sound/midi/MidiDevice.java +++ b/jdk/src/share/classes/javax/sound/midi/MidiDevice.java @@ -204,6 +204,9 @@ public interface MidiDevice extends AutoCloseable { * MIDI data. The returned receiver must be closed when the application * has finished using it. * + *

    Usually the returned receiver implements + * the {@code MidiDeviceReceiver} interface. + * *

    Obtaining a Receiver with this method does not * open the device. To be able to use the device, it has to be * opened explicitly by calling {@link #open}. Also, closing the @@ -223,6 +226,10 @@ public interface MidiDevice extends AutoCloseable { * connected with this MidiDevice. * A receiver can be removed * from the device by closing it. + * + *

    Usually the returned receivers implement + * the {@code MidiDeviceReceiver} interface. + * * @return an unmodifiable list of the open receivers * @since 1.5 */ @@ -234,6 +241,9 @@ public interface MidiDevice extends AutoCloseable { * MIDI data The returned transmitter must be closed when the application * has finished using it. * + *

    Usually the returned transmitter implements + * the {@code MidiDeviceTransmitter} interface. + * *

    Obtaining a Transmitter with this method does not * open the device. To be able to use the device, it has to be * opened explicitly by calling {@link #open}. Also, closing the @@ -253,6 +263,10 @@ public interface MidiDevice extends AutoCloseable { * connected with this MidiDevice. * A transmitter can be removed * from the device by closing it. + * + *

    Usually the returned transmitters implement + * the {@code MidiDeviceTransmitter} interface. + * * @return an unmodifiable list of the open transmitters * @since 1.5 */ diff --git a/jdk/src/share/classes/com/sun/media/sound/MidiDeviceReceiver.java b/jdk/src/share/classes/javax/sound/midi/MidiDeviceReceiver.java similarity index 78% rename from jdk/src/share/classes/com/sun/media/sound/MidiDeviceReceiver.java rename to jdk/src/share/classes/javax/sound/midi/MidiDeviceReceiver.java index 9c76783db60..9ea1df7c38e 100644 --- a/jdk/src/share/classes/com/sun/media/sound/MidiDeviceReceiver.java +++ b/jdk/src/share/classes/javax/sound/midi/MidiDeviceReceiver.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 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 @@ -22,20 +22,18 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -package com.sun.media.sound; -import javax.sound.midi.MidiDevice; -import javax.sound.midi.Receiver; +package javax.sound.midi; /** - * A Receiver with reference to it's MidiDevice object. + *

    {@code MidiDeviceReceiver} is a {@code Receiver} which represents + * a MIDI input connector of a {@code MidiDevice} + * (see {@link MidiDevice#getReceiver()}). * - * @author Karl Helgason + * @since 1.7 */ public interface MidiDeviceReceiver extends Receiver { - - /** Obtains the MidiDevice object associated with this Receiver. + /** Obtains a MidiDevice object which is an owner of this Receiver. */ public MidiDevice getMidiDevice(); - } diff --git a/jdk/src/share/classes/javax/sound/midi/MidiDeviceTransmitter.java b/jdk/src/share/classes/javax/sound/midi/MidiDeviceTransmitter.java new file mode 100644 index 00000000000..b6a827188e2 --- /dev/null +++ b/jdk/src/share/classes/javax/sound/midi/MidiDeviceTransmitter.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 javax.sound.midi; + + +/** + *

    {@code MidiDeviceTransmitter} is a {@code Transmitter} which represents + * a MIDI input connector of a {@code MidiDevice} + * (see {@link MidiDevice#getTransmitter()}). + * + * @since 1.7 + */ +public interface MidiDeviceTransmitter extends Transmitter { + + /** Obtains a MidiDevice object which is an owner of this Transmitter. + */ + public MidiDevice getMidiDevice(); +} diff --git a/jdk/src/share/classes/javax/sound/midi/MidiSystem.java b/jdk/src/share/classes/javax/sound/midi/MidiSystem.java index f865d92eb8a..8c0b5d9ebb5 100644 --- a/jdk/src/share/classes/javax/sound/midi/MidiSystem.java +++ b/jdk/src/share/classes/javax/sound/midi/MidiSystem.java @@ -47,6 +47,8 @@ import javax.sound.midi.spi.MidiDeviceProvider; import com.sun.media.sound.JDK13Services; import com.sun.media.sound.ReferenceCountingDevice; import com.sun.media.sound.AutoConnectSequencer; +import com.sun.media.sound.MidiDeviceReceiverEnvelope; +import com.sun.media.sound.MidiDeviceTransmitterEnvelope; /** @@ -225,6 +227,8 @@ public class MidiSystem { /** * Obtains a MIDI receiver from an external MIDI port * or other default device. + * The returned receiver always implements + * the {@code MidiDeviceReceiver} interface. * *

    If the system property * javax.sound.midi.Receiver @@ -261,6 +265,9 @@ public class MidiSystem { } else { receiver = device.getReceiver(); } + if (!(receiver instanceof MidiDeviceReceiver)) { + receiver = new MidiDeviceReceiverEnvelope(device, receiver); + } return receiver; } @@ -268,6 +275,8 @@ public class MidiSystem { /** * Obtains a MIDI transmitter from an external MIDI port * or other default source. + * The returned transmitter always implements + * the {@code MidiDeviceTransmitter} interface. * *

    If the system property * javax.sound.midi.Transmitter @@ -301,6 +310,9 @@ public class MidiSystem { } else { transmitter = device.getTransmitter(); } + if (!(transmitter instanceof MidiDeviceReceiver)) { + transmitter = new MidiDeviceTransmitterEnvelope(device, transmitter); + } return transmitter; } diff --git a/jdk/src/share/classes/javax/sound/sampled/AudioFormat.java b/jdk/src/share/classes/javax/sound/sampled/AudioFormat.java index 02f96577126..7457f8220eb 100644 --- a/jdk/src/share/classes/javax/sound/sampled/AudioFormat.java +++ b/jdk/src/share/classes/javax/sound/sampled/AudioFormat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2010, 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 @@ -431,34 +431,36 @@ public class AudioFormat { /** - * Indicates whether this format matches the one specified. To match, - * two formats must have the same encoding, the same number of channels, - * and the same number of bits per sample and bytes per frame. - * The two formats must also have the same sample rate, - * unless the specified format has the sample rate value AudioSystem.NOT_SPECIFIED, - * which any sample rate will match. The frame rates must - * similarly be equal, unless the specified format has the frame rate - * value AudioSystem.NOT_SPECIFIED. The byte order (big-endian or little-endian) - * must match if the sample size is greater than one byte. + * Indicates whether this format matches the one specified. + * To match, two formats must have the same encoding, + * and consistent values of the number of channels, sample rate, sample size, + * frame rate, and frame size. + * The values of the property are consistent if they are equal + * or the specified format has the property value + * {@code AudioSystem.NOT_SPECIFIED}. + * The byte order (big-endian or little-endian) must be the same + * if the sample size is greater than one byte. * * @param format format to test for match - * @return true if this format matches the one specified, - * false otherwise. - */ - /* - * $$kk: 04.20.99: i changed the semantics of this. + * @return {@code true} if this format matches the one specified, + * {@code false} otherwise. */ public boolean matches(AudioFormat format) { - - if (format.getEncoding().equals(getEncoding()) && - ( (format.getSampleRate() == (float)AudioSystem.NOT_SPECIFIED) || (format.getSampleRate() == getSampleRate()) ) && - (format.getSampleSizeInBits() == getSampleSizeInBits()) && - (format.getChannels() == getChannels() && - (format.getFrameSize() == getFrameSize()) && - ( (format.getFrameRate() == (float)AudioSystem.NOT_SPECIFIED) || (format.getFrameRate() == getFrameRate()) ) && - ( (format.getSampleSizeInBits() <= 8) || (format.isBigEndian() == isBigEndian()) ) ) ) + if (format.getEncoding().equals(getEncoding()) + && (format.getChannels() == AudioSystem.NOT_SPECIFIED + || format.getChannels() == getChannels()) + && (format.getSampleRate() == (float)AudioSystem.NOT_SPECIFIED + || format.getSampleRate() == getSampleRate()) + && (format.getSampleSizeInBits() == AudioSystem.NOT_SPECIFIED + || format.getSampleSizeInBits() == getSampleSizeInBits()) + && (format.getFrameRate() == (float)AudioSystem.NOT_SPECIFIED + || format.getFrameRate() == getFrameRate()) + && (format.getFrameSize() == AudioSystem.NOT_SPECIFIED + || format.getFrameSize() == getFrameSize()) + && (getSampleSizeInBits() <= 8 + || format.isBigEndian() == isBigEndian())) { return true; - + } return false; } @@ -552,14 +554,14 @@ public class AudioFormat { * which is simply a linear (proportional) representation of the sound * waveform. With PCM, the number stored in each sample is proportional * to the instantaneous amplitude of the sound pressure at that point in - * time. The numbers are frequently signed or unsigned integers. + * time. The numbers may be signed or unsigned integers or floats. * Besides PCM, other encodings include mu-law and a-law, which are nonlinear * mappings of the sound amplitude that are often used for recording speech. *

    * You can use a predefined encoding by referring to one of the static * objects created by this class, such as PCM_SIGNED or * PCM_UNSIGNED. Service providers can create new encodings, such as - * compressed audio formats or floating-point PCM samples, and make + * compressed audio formats, and make * these available through the {@link AudioSystem} class. *

    * The Encoding class is static, so that all @@ -589,6 +591,13 @@ public class AudioFormat { */ public static final Encoding PCM_UNSIGNED = new Encoding("PCM_UNSIGNED"); + /** + * Specifies floating-point PCM data. + * + * @since 1.7 + */ + public static final Encoding PCM_FLOAT = new Encoding("PCM_FLOAT"); + /** * Specifies u-law encoded data. */ diff --git a/jdk/src/share/classes/javax/sql/CommonDataSource.java b/jdk/src/share/classes/javax/sql/CommonDataSource.java index 8d06bd63745..25b40686d87 100644 --- a/jdk/src/share/classes/javax/sql/CommonDataSource.java +++ b/jdk/src/share/classes/javax/sql/CommonDataSource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2010, 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 @@ -27,6 +27,8 @@ package javax.sql; import java.sql.SQLException; import java.io.PrintWriter; +import java.sql.SQLFeatureNotSupportedException; +import java.util.logging.Logger; /** * Interface that defines the methods which are common between DataSource, @@ -35,79 +37,93 @@ import java.io.PrintWriter; */ public interface CommonDataSource { - /** - *

    Retrieves the log writer for this DataSource - * object. - * - *

    The log writer is a character output stream to which all logging - * and tracing messages for this data source will be - * printed. This includes messages printed by the methods of this - * object, messages printed by methods of other objects manufactured - * by this object, and so on. Messages printed to a data source - * specific log writer are not printed to the log writer associated - * with the java.sql.DriverManager class. When a - * DataSource object is - * created, the log writer is initially null; in other words, the - * default is for logging to be disabled. - * - * @return the log writer for this data source or null if - * logging is disabled - * @exception java.sql.SQLException if a database access error occurs - * @see #setLogWriter - * @since 1.4 - */ - java.io.PrintWriter getLogWriter() throws SQLException; + /** + *

    Retrieves the log writer for this DataSource + * object. + * + *

    The log writer is a character output stream to which all logging + * and tracing messages for this data source will be + * printed. This includes messages printed by the methods of this + * object, messages printed by methods of other objects manufactured + * by this object, and so on. Messages printed to a data source + * specific log writer are not printed to the log writer associated + * with the java.sql.DriverManager class. When a + * DataSource object is + * created, the log writer is initially null; in other words, the + * default is for logging to be disabled. + * + * @return the log writer for this data source or null if + * logging is disabled + * @exception java.sql.SQLException if a database access error occurs + * @see #setLogWriter + * @since 1.4 + */ + java.io.PrintWriter getLogWriter() throws SQLException; - /** - *

    Sets the log writer for this DataSource - * object to the given java.io.PrintWriter object. - * - *

    The log writer is a character output stream to which all logging - * and tracing messages for this data source will be - * printed. This includes messages printed by the methods of this - * object, messages printed by methods of other objects manufactured - * by this object, and so on. Messages printed to a data source- - * specific log writer are not printed to the log writer associated - * with the java.sql.DriverManager class. When a - * DataSource object is created the log writer is - * initially null; in other words, the default is for logging to be - * disabled. - * - * @param out the new log writer; to disable logging, set to null - * @exception SQLException if a database access error occurs - * @see #getLogWriter - * @since 1.4 - */ - void setLogWriter(java.io.PrintWriter out) throws SQLException; + /** + *

    Sets the log writer for this DataSource + * object to the given java.io.PrintWriter object. + * + *

    The log writer is a character output stream to which all logging + * and tracing messages for this data source will be + * printed. This includes messages printed by the methods of this + * object, messages printed by methods of other objects manufactured + * by this object, and so on. Messages printed to a data source- + * specific log writer are not printed to the log writer associated + * with the java.sql.DriverManager class. When a + * DataSource object is created the log writer is + * initially null; in other words, the default is for logging to be + * disabled. + * + * @param out the new log writer; to disable logging, set to null + * @exception SQLException if a database access error occurs + * @see #getLogWriter + * @since 1.4 + */ + void setLogWriter(java.io.PrintWriter out) throws SQLException; - /** - *

    Sets the maximum time in seconds that this data source will wait - * while attempting to connect to a database. A value of zero - * specifies that the timeout is the default system timeout - * if there is one; otherwise, it specifies that there is no timeout. - * When a DataSource object is created, the login timeout is - * initially zero. - * - * @param seconds the data source login time limit - * @exception SQLException if a database access error occurs. - * @see #getLoginTimeout - * @since 1.4 - */ - void setLoginTimeout(int seconds) throws SQLException; + /** + *

    Sets the maximum time in seconds that this data source will wait + * while attempting to connect to a database. A value of zero + * specifies that the timeout is the default system timeout + * if there is one; otherwise, it specifies that there is no timeout. + * When a DataSource object is created, the login timeout is + * initially zero. + * + * @param seconds the data source login time limit + * @exception SQLException if a database access error occurs. + * @see #getLoginTimeout + * @since 1.4 + */ + void setLoginTimeout(int seconds) throws SQLException; - /** - * Gets the maximum time in seconds that this data source can wait - * while attempting to connect to a database. A value of zero - * means that the timeout is the default system timeout - * if there is one; otherwise, it means that there is no timeout. - * When a DataSource object is created, the login timeout is - * initially zero. - * - * @return the data source login time limit - * @exception SQLException if a database access error occurs. - * @see #setLoginTimeout - * @since 1.4 - */ - int getLoginTimeout() throws SQLException; + /** + * Gets the maximum time in seconds that this data source can wait + * while attempting to connect to a database. A value of zero + * means that the timeout is the default system timeout + * if there is one; otherwise, it means that there is no timeout. + * When a DataSource object is created, the login timeout is + * initially zero. + * + * @return the data source login time limit + * @exception SQLException if a database access error occurs. + * @see #setLoginTimeout + * @since 1.4 + */ + int getLoginTimeout() throws SQLException; + //------------------------- JDBC 4.1 ----------------------------------- + + /** + * Return the parent Logger of all the Loggers used by this data source. This + * should be the Logger farthest from the root Logger that is + * still an ancestor of all of the Loggers used by this data source. Configuring + * this Logger will affect all of the log messages generated by the data source. + * In the worst case, this may be the root Logger. + * + * @return the parent Logger for this data source + * @throws SQLFeatureNotSupportedException if the data source does not use java.util.logging. + * @since 1.7 + */ + public Logger getParentLogger() throws SQLFeatureNotSupportedException; } diff --git a/jdk/src/share/classes/javax/sql/rowset/CachedRowSet.java b/jdk/src/share/classes/javax/sql/rowset/CachedRowSet.java index c03d5534345..2a60bb3b7e7 100644 --- a/jdk/src/share/classes/javax/sql/rowset/CachedRowSet.java +++ b/jdk/src/share/classes/javax/sql/rowset/CachedRowSet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2010, 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 @@ -644,10 +644,10 @@ public interface CachedRowSet extends RowSet, Joinable { * of execute that takes a ResultSet object. * * @param data the ResultSet object containing the data - * to be read into this CachedRowSet object + * to be read into this CachedRowSet object * @throws SQLException if a null ResultSet object is supplied - * or this CachedRowSet object cannot - * retrieve the associated ResultSetMetaData object + * or this CachedRowSet object cannot + * retrieve the associated ResultSetMetaData object * @see #execute * @see java.sql.ResultSet * @see java.sql.ResultSetMetaData @@ -674,10 +674,10 @@ public interface CachedRowSet extends RowSet, Joinable { * to commit outstanding updates, those updates are lost. * * @param conn a standard JDBC Connection object with valid - * properties + * properties * @throws SQLException if an invalid Connection object is supplied - * or an error occurs in establishing the connection to the - * data source + * or an error occurs in establishing the connection to the + * data source * @see #populate * @see java.sql.Connection */ @@ -736,8 +736,8 @@ public interface CachedRowSet extends RowSet, Joinable { * * @throws SQLException if the cursor is on the insert row * @throws SyncProviderException if the underlying - * synchronization provider's writer fails to write the updates - * back to the data source + * synchronization provider's writer fails to write the updates + * back to the data source * @see #acceptChanges(java.sql.Connection) * @see javax.sql.RowSetWriter * @see javax.sql.rowset.spi.SyncFactory @@ -807,8 +807,8 @@ public interface CachedRowSet extends RowSet, Joinable { * @param con a standard JDBC Connection object * @throws SQLException if the cursor is on the insert row * @throws SyncProviderException if the underlying - * synchronization provider's writer fails to write the updates - * back to the data source + * synchronization provider's writer fails to write the updates + * back to the data source * @see #acceptChanges() * @see javax.sql.RowSetWriter * @see javax.sql.rowset.spi.SyncFactory @@ -867,7 +867,7 @@ public interface CachedRowSet extends RowSet, Joinable { * the rowset's Java VM resources. * * @throws SQLException if an error occurs flushing the contents of this - * CachedRowSet object + * CachedRowSet object * @see javax.sql.RowSetListener#rowSetChanged * @see java.sql.ResultSet#close */ @@ -948,9 +948,9 @@ public interface CachedRowSet extends RowSet, Joinable { * * @param idx an int identifying the column to be checked for updates * @return true if the designated column has been visibly updated; - * false otherwise + * false otherwise * @throws SQLException if the cursor is on the insert row, before the first row, - * or after the last row + * or after the last row * @see java.sql.DatabaseMetaData#updatesAreDetected */ public boolean columnUpdated(int idx) throws SQLException; @@ -963,9 +963,9 @@ public interface CachedRowSet extends RowSet, Joinable { * @param columnName a String object giving the name of the * column to be checked for updates * @return true if the column has been visibly updated; - * false otherwise + * false otherwise * @throws SQLException if the cursor is on the insert row, before the first row, - * or after the last row + * or after the last row * @see java.sql.DatabaseMetaData#updatesAreDetected */ public boolean columnUpdated(String columnName) throws SQLException; @@ -1003,7 +1003,7 @@ public interface CachedRowSet extends RowSet, Joinable { *

    * * @return a Collection object that contains the values in - * each row in this CachedRowSet object + * each row in this CachedRowSet object * @throws SQLException if an error occurs generating the collection * @see #toCollection(int) * @see #toCollection(String) @@ -1030,10 +1030,10 @@ public interface CachedRowSet extends RowSet, Joinable { * @param column an int indicating the column whose values * are to be represented in a Collection object * @return a Collection object that contains the values - * stored in the specified column of this CachedRowSet - * object + * stored in the specified column of this CachedRowSet + * object * @throws SQLException if an error occurs generating the collection or - * an invalid column id is provided + * an invalid column id is provided * @see #toCollection * @see #toCollection(String) */ @@ -1059,10 +1059,10 @@ public interface CachedRowSet extends RowSet, Joinable { * @param column a String object giving the name of the * column whose values are to be represented in a collection * @return a Collection object that contains the values - * stored in the specified column of this CachedRowSet - * object + * stored in the specified column of this CachedRowSet + * object * @throws SQLException if an error occurs generating the collection or - * an invalid column id is provided + * an invalid column id is provided * @see #toCollection * @see #toCollection(int) */ @@ -1100,7 +1100,7 @@ public interface CachedRowSet extends RowSet, Joinable { * @return the SyncProvider object that was set when the rowset * was instantiated, or if none was was set, the default provider * @throws SQLException if an error occurs while returning the - * SyncProvider object + * SyncProvider object * @see #setSyncProvider */ public SyncProvider getSyncProvider() throws SQLException; @@ -1127,7 +1127,7 @@ public interface CachedRowSet extends RowSet, Joinable { * @param provider a String object giving the fully qualified class * name of a SyncProvider implementation * @throws SQLException if an error occurs while attempting to reset the - * SyncProvider implementation + * SyncProvider implementation * @see #getSyncProvider */ public void setSyncProvider(String provider) throws SQLException; @@ -1152,9 +1152,9 @@ public interface CachedRowSet extends RowSet, Joinable { * object to the rowset. * * @param md a RowSetMetaData object containing - * metadata about the columns in this CachedRowSet object + * metadata about the columns in this CachedRowSet object * @throws SQLException if invalid metadata is supplied to the - * rowset + * rowset */ public void setMetaData(RowSetMetaData md) throws SQLException; @@ -1183,7 +1183,7 @@ public interface CachedRowSet extends RowSet, Joinable { * @return a ResultSet object that contains the original value for * this CachedRowSet object * @throws SQLException if an error occurs producing the - * ResultSet object + * ResultSet object */ public ResultSet getOriginal() throws SQLException; @@ -1217,7 +1217,7 @@ public interface CachedRowSet extends RowSet, Joinable { * A call to setOriginalRow is irreversible. * * @throws SQLException if there is no current row or an error is - * encountered resetting the contents of the original row + * encountered resetting the contents of the original row * @see #getOriginalRow */ public void setOriginalRow() throws SQLException; @@ -1326,7 +1326,7 @@ public interface CachedRowSet extends RowSet, Joinable { * as this CachedRowSet object and that has a cursor over * the same data * @throws SQLException if an error occurs or cloning is not - * supported in the underlying platform + * supported in the underlying platform * @see javax.sql.RowSetEvent * @see javax.sql.RowSetListener */ @@ -1344,10 +1344,10 @@ public interface CachedRowSet extends RowSet, Joinable { * established must be maintained. * * @return a new RowSet object that is a deep copy - * of this CachedRowSet object and is - * completely independent of this CachedRowSet object + * of this CachedRowSet object and is + * completely independent of this CachedRowSet object * @throws SQLException if an error occurs in generating the copy of - * the of this CachedRowSet object + * the of this CachedRowSet object * @see #createShared * @see #createCopySchema * @see #createCopyNoConstraints @@ -1396,10 +1396,10 @@ public interface CachedRowSet extends RowSet, Joinable { * in the copy. * * @return a new CachedRowSet object that is a deep copy - * of this CachedRowSet object and is - * completely independent of this CachedRowSet object + * of this CachedRowSet object and is + * completely independent of this CachedRowSet object * @throws SQLException if an error occurs in generating the copy of - * the of this CachedRowSet object + * the of this CachedRowSet object * @see #createCopy * @see #createShared * @see #createCopySchema @@ -1445,7 +1445,7 @@ public interface CachedRowSet extends RowSet, Joinable { * @return true if deleted rows are visible; * false otherwise * @throws SQLException if a rowset implementation is unable to - * to determine whether rows marked for deletion are visible + * to determine whether rows marked for deletion are visible * @see #setShowDeleted */ public boolean getShowDeleted() throws SQLException; @@ -1467,7 +1467,7 @@ public interface CachedRowSet extends RowSet, Joinable { * @param b true if deleted rows should be shown; * false otherwise * @exception SQLException if a rowset implementation is unable to - * to reset whether deleted rows should be visible + * to reset whether deleted rows should be visible * @see #getShowDeleted */ public void setShowDeleted(boolean b) throws SQLException; @@ -1523,9 +1523,12 @@ public interface CachedRowSet extends RowSet, Joinable { * set to false, the changes will not be committed until one of the * CachedRowSet interface transaction methods is called. * + * @deprecated Because this field is final (it is part of an interface), + * its value cannot be changed. * @see #commit * @see #rollback */ + @Deprecated public static final boolean COMMIT_ON_ACCEPT_CHANGES = true; /** @@ -1562,10 +1565,10 @@ public interface CachedRowSet extends RowSet, Joinable { * @param startRow the position in the ResultSet from where to start * populating the records in this CachedRowSet * @param rs the ResultSet object containing the data - * to be read into this CachedRowSet object + * to be read into this CachedRowSet object * @throws SQLException if a null ResultSet object is supplied - * or this CachedRowSet object cannot - * retrieve the associated ResultSetMetaData object + * or this CachedRowSet object cannot + * retrieve the associated ResultSetMetaData object * @see #execute * @see #populate(ResultSet) * @see java.sql.ResultSet @@ -1620,3 +1623,4 @@ public interface CachedRowSet extends RowSet, Joinable { public boolean previousPage() throws SQLException; } + diff --git a/jdk/src/share/classes/javax/sql/rowset/RowSetFactory.java b/jdk/src/share/classes/javax/sql/rowset/RowSetFactory.java new file mode 100644 index 00000000000..71d2ec531cf --- /dev/null +++ b/jdk/src/share/classes/javax/sql/rowset/RowSetFactory.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 javax.sql.rowset; + +import java.sql.SQLException; + +/** + * An interface that defines the implementation of a factory that is used + * to obtain different types of {@code RowSet} implementations. + * + * @author Lance Andersen + * @since 1.7 + */ +public interface RowSetFactory{ + + /** + *

    Creates a new instance of a CachedRowSet.

    + * + * @return A new instance of a CachedRowSet. + * + * @throws SQLException if a CachedRowSet cannot + * be created. + * + * @since 1.7 + */ + public CachedRowSet createCachedRowSet() throws SQLException; + + /** + *

    Creates a new instance of a FilteredRowSet.

    + * + * @return A new instance of a FilteredRowSet. + * + * @throws SQLException if a FilteredRowSet cannot + * be created. + * + * @since 1.7 + */ + public FilteredRowSet createFilteredRowSet() throws SQLException; + + /** + *

    Creates a new instance of a JdbcRowSet.

    + * + * @return A new instance of a JdbcRowSet. + * + * @throws SQLException if a JdbcRowSet cannot + * be created. + * + * @since 1.7 + */ + public JdbcRowSet createJdbcRowSet() throws SQLException; + + /** + *

    Creates a new instance of a JoinRowSet.

    + * + * @return A new instance of a JoinRowSet. + * + * @throws SQLException if a JoinRowSet cannot + * be created. + * + * @since 1.7 + */ + public JoinRowSet createJoinRowSet() throws SQLException; + + /** + *

    Creates a new instance of a WebRowSet.

    + * + * @return A new instance of a WebRowSet. + * + * @throws SQLException if a WebRowSet cannot + * be created. + * + * @since 1.7 + */ + public WebRowSet createWebRowSet() throws SQLException; + +} \ No newline at end of file diff --git a/jdk/src/share/classes/javax/sql/rowset/RowSetProvider.java b/jdk/src/share/classes/javax/sql/rowset/RowSetProvider.java new file mode 100644 index 00000000000..1a84161ce15 --- /dev/null +++ b/jdk/src/share/classes/javax/sql/rowset/RowSetProvider.java @@ -0,0 +1,305 @@ +/* + * Copyright (c) 2010, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 javax.sql.rowset; + +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.sql.SQLException; +import java.util.ServiceLoader; +import javax.sql.rowset.RowSetFactory; + +/** + * A factory API that enables applications to obtain a + * {@code RowSetFactory} implementation that can be used to create different + * types of {@code RowSet} implementations. + *

    + * Example: + *

    + *
    + * RowSetFactory aFactory = RowSetProvider.newFactory();
    + * CachedRowSet crs = aFactory.createCachedRowSet();
    + * ...
    + * RowSetFactory rsf = RowSetProvider.newFactory("com.sun.rowset.RowSetFactoryImpl", null);
    + * WebRowSet wrs = rsf.createWebRowSet();
    + * 
    + *

    + * Tracing of this class may be enabled by setting the System property + * {@code javax.sql.rowset.RowSetFactory.debug} to any value but {@code false}. + *

    + * + * @author Lance Andersen + * @since 1.7 + */ +public class RowSetProvider { + + private static final String ROWSET_DEBUG_PROPERTY = "javax.sql.rowset.RowSetProvider.debug"; + private static final String ROWSET_FACTORY_IMPL = "com.sun.rowset.RowSetFactoryImpl"; + private static final String ROWSET_FACTORY_NAME = "javax.sql.rowset.RowSetFactory"; + /** + * Internal debug flag. + */ + private static boolean debug = true; + + + static { + // Check to see if the debug property is set + String val = getSystemProperty(ROWSET_DEBUG_PROPERTY); + // Allow simply setting the prop to turn on debug + debug = val != null && !"false".equals(val); + } + + + protected RowSetProvider () { + } + + /** + *

    Creates a new instance of a RowSetFactory + * implementation. This method uses the following + * look up order to determine + * the RowSetFactory implementation class to load:

    + *
      + *
    • + * The System property {@code javax.sql.rowset.RowsetFactory}. For example: + *
        + *
      • + * -Djavax.sql.rowset.RowsetFactory=com.sun.rowset.RowSetFactoryImpl + *
      • + *
      + *
    • + * The ServiceLocator API. The ServiceLocator API will look + * for a classname in the file + * {@code META-INF/services/javax.sql.rowset.RowSetFactory} + * in jars available to the runtime. For example, to have the the RowSetFactory + * implementation {@code com.sun.rowset.RowSetFactoryImpl } loaded, the + * entry in {@code META-INF/services/javax.sql.rowset.RowSetFactory} would be: + *
        + *
      • + * {@code com.sun.rowset.RowSetFactoryImpl } + *
      • + *
      + *
    • + *
    • + * Platform default RowSetFactory instance. + *
    • + *
    + * + *

    Once an application has obtained a reference to a {@code RowSetFactory}, + * it can use the factory to obtain RowSet instances.

    + * + * @return New instance of a RowSetFactory + * + * @throws SQLException if the default factory class cannot be loaded, + * instantiated. The cause will be set to actual Exception + * + * @see ServiceLoader + * @since 1.7 + */ + public static RowSetFactory newFactory() + throws SQLException { + // Use the system property first + RowSetFactory factory = null; + String factoryClassName = null; + try { + trace("Checking for Rowset System Property..."); + factoryClassName = getSystemProperty(ROWSET_FACTORY_NAME); + if (factoryClassName != null) { + trace("Found system property, value=" + factoryClassName); + factory = (RowSetFactory) getFactoryClass(factoryClassName, null, true).newInstance(); + } + } catch (ClassNotFoundException e) { + throw new SQLException( + "RowSetFactory: " + factoryClassName + " not found", e); + } catch (Exception e) { + throw new SQLException( + "RowSetFactory: " + factoryClassName + " could not be instantiated: " + e, + e); + } + + // Check to see if we found the RowSetFactory via a System property + if (factory == null) { + // If the RowSetFactory is not found via a System Property, now + // look it up via the ServiceLoader API and if not found, use the + // Java SE default. + factory = loadViaServiceLoader(); + factory = + factory == null ? newFactory(ROWSET_FACTORY_IMPL, null) : factory; + } + return (factory); + } + + /** + *

    Creates a new instance of a RowSetFactory from the + * specified factory class name. + * This function is useful when there are multiple providers in the classpath. + * It gives more control to the application as it can specify which provider + * should be loaded.

    + * + *

    Once an application has obtained a reference to a RowSetFactory + * it can use the factory to obtain RowSet instances.

    + * + * @param factoryClassName fully qualified factory class name that + * provides an implementation of javax.sql.rowset.RowSetFactory. + * + * @param cl ClassLoader used to load the factory + * class. If null current Thread's context + * classLoader is used to load the factory class. + * + * @return New instance of a RowSetFactory + * + * @throws SQLException if factoryClassName is + * null, or the factory class cannot be loaded, instantiated. + * + * @see #newFactory() + * + * @since 1.7 + */ + public static RowSetFactory newFactory(String factoryClassName, ClassLoader cl) + throws SQLException { + + trace("***In newInstance()"); + try { + Class providerClass = getFactoryClass(factoryClassName, cl, false); + RowSetFactory instance = (RowSetFactory) providerClass.newInstance(); + if (debug) { + trace("Created new instance of " + providerClass + + " using ClassLoader: " + cl); + } + return instance; + } catch (ClassNotFoundException x) { + throw new SQLException( + "Provider " + factoryClassName + " not found", x); + } catch (Exception x) { + throw new SQLException( + "Provider " + factoryClassName + " could not be instantiated: " + x, + x); + } + } + + /* + * Returns the class loader to be used. + * @return The ClassLoader to use. + * + */ + static private ClassLoader getContextClassLoader() throws SecurityException { + return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() { + + public Object run() { + ClassLoader cl = null; + + cl = Thread.currentThread().getContextClassLoader(); + + if (cl == null) { + cl = ClassLoader.getSystemClassLoader(); + } + + return cl; + } + }); + } + + /** + * Attempt to load a class using the class loader supplied. If that fails + * and fall back is enabled, the current (i.e. bootstrap) class loader is + * tried. + * + * If the class loader supplied is null, first try using the + * context class loader followed by the current class loader. + * @return The class which was loaded + */ + static private Class getFactoryClass(String factoryClassName, ClassLoader cl, + boolean doFallback) throws ClassNotFoundException { + try { + if (cl == null) { + cl = getContextClassLoader(); + if (cl == null) { + throw new ClassNotFoundException(); + } else { + return cl.loadClass(factoryClassName); + } + } else { + return cl.loadClass(factoryClassName); + } + } catch (ClassNotFoundException e) { + if (doFallback) { + // Use current class loader + return Class.forName(factoryClassName, true, RowSetFactory.class.getClassLoader()); + } else { + throw e; + } + } + } + + /** + * Use the ServiceLoader mechanism to load the default RowSetFactory + * @return default RowSetFactory Implementation + */ + static private RowSetFactory loadViaServiceLoader() { + RowSetFactory theFactory = null; + trace("***in loadViaServiceLoader()"); + for (RowSetFactory factory : ServiceLoader.load(javax.sql.rowset.RowSetFactory.class)) { + trace(" Loading done by the java.util.ServiceLoader :" + factory.getClass().getName()); + theFactory = factory; + break; + } + return theFactory; + + } + + /** + * Returns the requested System Property. If a {@code SecurityException} + * occurs, just return NULL + * @param propName - System property to retreive + * @return The System property value or NULL if the property does not exist + * or a {@code SecurityException} occurs. + */ + static private String getSystemProperty(final String propName) { + String property = null; + try { + property = (String) AccessController.doPrivileged(new PrivilegedAction() { + + public Object run() { + return System.getProperty(propName); + } + }); + } catch (SecurityException se) { + if (debug) { + se.printStackTrace(); + } + } + return property; + } + + /** + * Debug routine which will output tracing if the System Property + * -Djavax.sql.rowset.RowSetFactory.debug is set + * @param msg - The debug message to display + */ + private static void trace(String msg) { + if (debug) { + System.err.println("###RowSets: " + msg); + } + } +} diff --git a/jdk/src/share/classes/javax/sql/rowset/package.html b/jdk/src/share/classes/javax/sql/rowset/package.html index 41d00d565b5..8b905cd63aa 100644 --- a/jdk/src/share/classes/javax/sql/rowset/package.html +++ b/jdk/src/share/classes/javax/sql/rowset/package.html @@ -5,7 +5,7 @@