OpenJDK / aarch32-port / jdk8u / hotspot
changeset 8906:8b4e37a274de jdk8u192-b12-aarch32-181022
Merge
line wrap: on
line diff
--- a/.hgtags Thu Oct 25 12:52:42 2018 +0300 +++ b/.hgtags Thu Oct 25 14:53:24 2018 +0300 @@ -1220,3 +1220,17 @@ 055e1c867479452dd5d8c08905f7475aab25fcc1 jdk8u191-b25 12e4de4b2499e9d9a1ae4fb0b63ca277cca150f4 jdk8u191-b11 f38b47a322eb8b8b6aec7e26e567be56ccefb987 jdk8u191-b12-aarch32-181022 +c19c5b73704e3d188bedfe52a473b408ca39009f jdk8u182-b00 +0341fa6dbb363ee4dc5dbf5bfc4f820523400a72 jdk8u192-b00 +5792d995ed26eec0417d96a2423446bbcd6951a9 jdk8u192-b01 +792ccf73293ac2a93cf19cb827d06bcaa896caea jdk8u192-b02 +1c0a59cee0e4e680dd0973f022b86de5637b9b75 jdk8u192-b03 +a8d61d7f13b0de755da1335c15b72c53c59e92b5 jdk8u192-b04 +65409bcab2ad83d7043d508448a04fe18cf1c262 jdk8u192-b05 +7070edbacb29f03b9a77dbe09425da2c888625f1 jdk8u192-b06 +cd19ee45aa6b6c81dbf981fd71abed7b7888d499 jdk8u192-b07 +c8010d92392ff0081edd6bfd1882ec1f3397a6db jdk8u192-b08 +79ba5ca0aabb29480dd94c6d32d22dceac019700 jdk8u192-b09 +b675533489ae1dc55469885471c9a29eca584d38 jdk8u192-b10 +338c85978b2283a975b762eead2fccc6d25a2bc2 jdk8u192-b25 +8df818c645d6081a387cf4fe9b9c14c0b5b639b1 jdk8u192-b11
--- a/make/aix/makefiles/jsig.make Thu Oct 25 12:52:42 2018 +0300 +++ b/make/aix/makefiles/jsig.make Thu Oct 25 14:53:24 2018 +0300 @@ -45,7 +45,7 @@ # cause problems with interposing. See CR: 6466665 # LFLAGS_JSIG += $(MAPFLAG:FILENAME=$(LIBJSIG_MAPFILE)) -LFLAGS_JSIG += -D_GNU_SOURCE -D_REENTRANT $(LDFLAGS_HASH_STYLE) +LFLAGS_JSIG += -D_GNU_SOURCE -D_REENTRANT $(LDFLAGS_HASH_STYLE) $(EXTRA_LDFLAGS) LFLAGS_JSIG += $(BIN_UTILS)
--- a/make/aix/makefiles/saproc.make Thu Oct 25 12:52:42 2018 +0300 +++ b/make/aix/makefiles/saproc.make Thu Oct 25 14:53:24 2018 +0300 @@ -66,7 +66,7 @@ endif -SA_LFLAGS = $(MAPFLAG:FILENAME=$(SAMAPFILE)) $(LDFLAGS_HASH_STYLE) +SA_LFLAGS = $(MAPFLAG:FILENAME=$(SAMAPFILE)) $(LDFLAGS_HASH_STYLE) $(EXTRA_LDFLAGS) $(LIBSAPROC): $(SASRCFILES) $(SAMAPFILE) $(QUIETLY) if [ "$(BOOT_JAVA_HOME)" = "" ]; then \
--- a/make/aix/makefiles/vm.make Thu Oct 25 12:52:42 2018 +0300 +++ b/make/aix/makefiles/vm.make Thu Oct 25 14:53:24 2018 +0300 @@ -117,7 +117,7 @@ # Extra flags from gnumake's invocation or environment CFLAGS += $(EXTRA_CFLAGS) -LFLAGS += $(EXTRA_CFLAGS) +LFLAGS += $(EXTRA_CFLAGS) $(EXTRA_LDFLAGS) # Don't set excutable bit on stack segment # the same could be done by separate execstack command
--- a/make/bsd/makefiles/jsig.make Thu Oct 25 12:52:42 2018 +0300 +++ b/make/bsd/makefiles/jsig.make Thu Oct 25 14:53:24 2018 +0300 @@ -52,7 +52,7 @@ # cause problems with interposing. See CR: 6466665 # LFLAGS_JSIG += $(MAPFLAG:FILENAME=$(LIBJSIG_MAPFILE)) -LFLAGS_JSIG += -D_GNU_SOURCE -pthread $(LDFLAGS_HASH_STYLE) +LFLAGS_JSIG += -D_GNU_SOURCE -pthread $(LDFLAGS_HASH_STYLE) $(EXTRA_LDFLAGS) # DEBUG_BINARIES overrides everything, use full -g debug information ifeq ($(DEBUG_BINARIES), true) @@ -62,7 +62,7 @@ $(LIBJSIG): $(JSIGSRCDIR)/jsig.c $(LIBJSIG_MAPFILE) @echo Making signal interposition lib... $(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) $(SHARED_FLAG) $(PICFLAG) \ - $(LFLAGS_JSIG) $(JSIG_DEBUG_CFLAGS) -o $@ $< + $(LFLAGS_JSIG) $(JSIG_DEBUG_CFLAGS) $(EXTRA_CFLAGS) -o $@ $< ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) ifeq ($(OS_VENDOR), Darwin) $(DSYMUTIL) $@
--- a/make/bsd/makefiles/saproc.make Thu Oct 25 12:52:42 2018 +0300 +++ b/make/bsd/makefiles/saproc.make Thu Oct 25 14:53:24 2018 +0300 @@ -114,7 +114,7 @@ # bring in minimum version argument or we'll fail on OSX 10.10 SA_LFLAGS = $(LFLAGS) endif -SA_LFLAGS += $(LDFLAGS_HASH_STYLE) +SA_LFLAGS += $(LDFLAGS_HASH_STYLE) $(EXTRA_LDFLAGS) BOOT_JAVA_INCLUDES = -I$(BOOT_JAVA_HOME)/include \ -I$(BOOT_JAVA_HOME)/include/$(shell uname -s | tr "[:upper:]" "[:lower:]")
--- a/make/bsd/makefiles/vm.make Thu Oct 25 12:52:42 2018 +0300 +++ b/make/bsd/makefiles/vm.make Thu Oct 25 14:53:24 2018 +0300 @@ -119,7 +119,7 @@ # Extra flags from gnumake's invocation or environment CFLAGS += $(EXTRA_CFLAGS) -LFLAGS += $(EXTRA_CFLAGS) +LFLAGS += $(EXTRA_CFLAGS) $(EXTRA_LDFLAGS) # Don't set excutable bit on stack segment # the same could be done by separate execstack command
--- a/make/linux/makefiles/defs.make Thu Oct 25 12:52:42 2018 +0300 +++ b/make/linux/makefiles/defs.make Thu Oct 25 14:53:24 2018 +0300 @@ -247,10 +247,12 @@ # client and server subdirectories have symbolic links to ../libjsig.so EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.$(LIBRARY_SUFFIX) ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - ifeq ($(ZIP_DEBUGINFO_FILES),1) - EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.diz - else - EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.debuginfo + ifneq ($(STRIP_POLICY),no_strip) + ifeq ($(ZIP_DEBUGINFO_FILES),1) + EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.diz + else + EXPORT_LIST += $(EXPORT_JRE_LIB_ARCH_DIR)/libjsig.debuginfo + endif endif endif EXPORT_SERVER_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/server @@ -261,10 +263,12 @@ EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.$(LIBRARY_SUFFIX) ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - ifeq ($(ZIP_DEBUGINFO_FILES),1) - EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.diz - else - EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.debuginfo + ifneq ($(STRIP_POLICY),no_strip) + ifeq ($(ZIP_DEBUGINFO_FILES),1) + EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.diz + else + EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.debuginfo + endif endif endif endif @@ -273,10 +277,12 @@ EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.$(LIBRARY_SUFFIX) ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - ifeq ($(ZIP_DEBUGINFO_FILES),1) - EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.diz - else - EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.debuginfo + ifneq ($(STRIP_POLICY),no_strip) + ifeq ($(ZIP_DEBUGINFO_FILES),1) + EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.diz + else + EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.debuginfo + endif endif endif endif @@ -286,10 +292,12 @@ EXPORT_LIST += $(EXPORT_MINIMAL_DIR)/libjvm.$(LIBRARY_SUFFIX) ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - ifeq ($(ZIP_DEBUGINFO_FILES),1) - EXPORT_LIST += $(EXPORT_MINIMAL_DIR)/libjvm.diz - else - EXPORT_LIST += $(EXPORT_MINIMAL_DIR)/libjvm.debuginfo + ifneq ($(STRIP_POLICY),no_strip) + ifeq ($(ZIP_DEBUGINFO_FILES),1) + EXPORT_LIST += $(EXPORT_MINIMAL_DIR)/libjvm.diz + else + EXPORT_LIST += $(EXPORT_MINIMAL_DIR)/libjvm.debuginfo + endif endif endif endif @@ -301,12 +309,14 @@ ADD_SA_BINARIES/sparc = $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.$(LIBRARY_SUFFIX) \ $(EXPORT_LIB_DIR)/sa-jdi.jar ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) - ifeq ($(ZIP_DEBUGINFO_FILES),1) - ADD_SA_BINARIES/x86 += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.diz - ADD_SA_BINARIES/sparc += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.diz - else - ADD_SA_BINARIES/x86 += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.debuginfo - ADD_SA_BINARIES/sparc += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.debuginfo + ifneq ($(STRIP_POLICY),no_strip) + ifeq ($(ZIP_DEBUGINFO_FILES),1) + ADD_SA_BINARIES/x86 += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.diz + ADD_SA_BINARIES/sparc += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.diz + else + ADD_SA_BINARIES/x86 += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.debuginfo + ADD_SA_BINARIES/sparc += $(EXPORT_JRE_LIB_ARCH_DIR)/libsaproc.debuginfo + endif endif endif ADD_SA_BINARIES/ppc =
--- a/make/linux/makefiles/jsig.make Thu Oct 25 12:52:42 2018 +0300 +++ b/make/linux/makefiles/jsig.make Thu Oct 25 14:53:24 2018 +0300 @@ -44,7 +44,7 @@ # cause problems with interposing. See CR: 6466665 # LFLAGS_JSIG += $(MAPFLAG:FILENAME=$(LIBJSIG_MAPFILE)) -LFLAGS_JSIG += -D_GNU_SOURCE -D_REENTRANT $(LDFLAGS_HASH_STYLE) $(LDFLAGS_NO_EXEC_STACK) +LFLAGS_JSIG += -D_GNU_SOURCE -D_REENTRANT $(LDFLAGS_HASH_STYLE) $(LDFLAGS_NO_EXEC_STACK) $(EXTRA_LDFLAGS) # DEBUG_BINARIES overrides everything, use full -g debug information ifeq ($(DEBUG_BINARIES), true) @@ -56,19 +56,23 @@ $(QUIETLY) $(CC) $(SYMFLAG) $(ARCHFLAG) $(SHARED_FLAG) $(PICFLAG) \ $(LFLAGS_JSIG) $(JSIG_DEBUG_CFLAGS) $(EXTRA_CFLAGS) -o $@ $< -ldl ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) + ifneq ($(STRIP_POLICY),no_strip) $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJSIG_DEBUGINFO) $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJSIG_DEBUGINFO) $@ + endif ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else ifeq ($(STRIP_POLICY),min_strip) $(QUIETLY) $(STRIP) -g $@ + endif # implied else here is no stripping at all - endif endif - ifeq ($(ZIP_DEBUGINFO_FILES),1) + ifneq ($(STRIP_POLICY),no_strip) + ifeq ($(ZIP_DEBUGINFO_FILES),1) $(ZIPEXE) -q -y $(LIBJSIG_DIZ) $(LIBJSIG_DEBUGINFO) $(RM) $(LIBJSIG_DEBUGINFO) + endif endif endif
--- a/make/linux/makefiles/saproc.make Thu Oct 25 12:52:42 2018 +0300 +++ b/make/linux/makefiles/saproc.make Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ # -# Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2005, 2018, 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 @@ -73,7 +73,8 @@ else ALT_SAINCDIR= endif -SA_LFLAGS = $(MAPFLAG:FILENAME=$(SAMAPFILE)) $(LDFLAGS_HASH_STYLE) +SA_LFLAGS = $(MAPFLAG:FILENAME=$(SAMAPFILE)) $(LDFLAGS_HASH_STYLE) \ + $(LDFLAGS_NO_EXEC_STACK) $(EXTRA_LDFLAGS) SAARCH ?= $(BUILDARCH) @@ -98,19 +99,23 @@ -o $@ \ -lthread_db ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) + ifneq ($(STRIP_POLICY),no_strip) $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBSAPROC_DEBUGINFO) $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBSAPROC_DEBUGINFO) $@ + endif ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else ifeq ($(STRIP_POLICY),min_strip) $(QUIETLY) $(STRIP) -g $@ + endif # implied else here is no stripping at all - endif endif - ifeq ($(ZIP_DEBUGINFO_FILES),1) + ifneq ($(STRIP_POLICY),no_strip) + ifeq ($(ZIP_DEBUGINFO_FILES),1) $(ZIPEXE) -q -y $(LIBSAPROC_DIZ) $(LIBSAPROC_DEBUGINFO) $(RM) $(LIBSAPROC_DEBUGINFO) + endif endif endif
--- a/make/linux/makefiles/vm.make Thu Oct 25 12:52:42 2018 +0300 +++ b/make/linux/makefiles/vm.make Thu Oct 25 14:53:24 2018 +0300 @@ -122,7 +122,7 @@ # Extra flags from gnumake's invocation or environment CFLAGS += $(EXTRA_CFLAGS) -LFLAGS += $(EXTRA_CFLAGS) +LFLAGS += $(EXTRA_CFLAGS) $(EXTRA_LDFLAGS) # Don't set excutable bit on stack segment # the same could be done by separate execstack command @@ -357,19 +357,23 @@ } ifeq ($(ENABLE_FULL_DEBUG_SYMBOLS),1) + ifneq ($(STRIP_POLICY),no_strip) $(QUIETLY) $(OBJCOPY) --only-keep-debug $@ $(LIBJVM_DEBUGINFO) $(QUIETLY) $(OBJCOPY) --add-gnu-debuglink=$(LIBJVM_DEBUGINFO) $@ + endif ifeq ($(STRIP_POLICY),all_strip) $(QUIETLY) $(STRIP) $@ else ifeq ($(STRIP_POLICY),min_strip) $(QUIETLY) $(STRIP) -g $@ + endif # implied else here is no stripping at all - endif endif - ifeq ($(ZIP_DEBUGINFO_FILES),1) + ifneq ($(STRIP_POLICY),no_strip) + ifeq ($(ZIP_DEBUGINFO_FILES),1) $(ZIPEXE) -q -y $(LIBJVM_DIZ) $(LIBJVM_DEBUGINFO) $(RM) $(LIBJVM_DEBUGINFO) + endif endif endif
--- a/make/solaris/makefiles/adlc.make Thu Oct 25 12:52:42 2018 +0300 +++ b/make/solaris/makefiles/adlc.make Thu Oct 25 14:53:24 2018 +0300 @@ -76,6 +76,11 @@ ifeq ($(shell expr $(COMPILER_REV_NUMERIC) \>= 509), 1) CFLAGS_WARN = +w -errwarn endif +# When using compiler version 5.13 (Solaris Studio 12.4), calls to explicitly +# instantiated template functions trigger this warning when +w is active. +ifeq ($(shell expr $(COMPILER_REV_NUMERIC) \>= 513), 1) + CFLAGS_WARN += -erroff=notemsource +endif CFLAGS += $(CFLAGS_WARN) ifeq ("${Platform_compiler}", "sparcWorks")
--- a/make/windows/makefiles/compile.make Thu Oct 25 12:52:42 2018 +0300 +++ b/make/windows/makefiles/compile.make Thu Oct 25 14:53:24 2018 +0300 @@ -147,6 +147,15 @@ !if "$(MSC_VER)" == "1700" COMPILER_NAME=VS2012 !endif +!if "$(MSC_VER)" == "1800" +COMPILER_NAME=VS2013 +!endif +!if "$(MSC_VER)" == "1900" +COMPILER_NAME=VS2015 +!endif +!if "$(MSC_VER)" == "1912" +COMPILER_NAME=VS2017 +!endif !endif # By default, we do not want to use the debug version of the msvcrt.dll file @@ -250,6 +259,52 @@ SAFESEH_FLAG = /SAFESEH !endif +!if "$(COMPILER_NAME)" == "VS2013" +PRODUCT_OPT_OPTION = /O2 /Oy- +FASTDEBUG_OPT_OPTION = /O2 /Oy- +DEBUG_OPT_OPTION = /Od +GX_OPTION = /EHsc +LD_FLAGS = /manifest $(LD_FLAGS) +MP_FLAG = /MP +# Manifest Tool - used in VS2005 and later to adjust manifests stored +# as resources inside build artifacts. +!if "x$(MT)" == "x" +MT=mt.exe +!endif +SAFESEH_FLAG = /SAFESEH +!endif + + +!if "$(COMPILER_NAME)" == "VS2015" +PRODUCT_OPT_OPTION = /O2 /Oy- +FASTDEBUG_OPT_OPTION = /O2 /Oy- +DEBUG_OPT_OPTION = /Od +GX_OPTION = /EHsc +LD_FLAGS = /manifest $(LD_FLAGS) +MP_FLAG = /MP +# Manifest Tool - used in VS2005 and later to adjust manifests stored +# as resources inside build artifacts. +!if "x$(MT)" == "x" +MT=mt.exe +!endif +SAFESEH_FLAG = /SAFESEH +!endif + +!if "$(COMPILER_NAME)" == "VS2017" +PRODUCT_OPT_OPTION = /O2 /Oy- +FASTDEBUG_OPT_OPTION = /O2 /Oy- +DEBUG_OPT_OPTION = /Od +GX_OPTION = /EHsc +LD_FLAGS = /manifest $(LD_FLAGS) +MP_FLAG = /MP +# Manifest Tool - used in VS2005 and later to adjust manifests stored +# as resources inside build artifacts. +!if "x$(MT)" == "x" +MT=mt.exe +!endif +SAFESEH_FLAG = /SAFESEH +!endif + !if "$(BUILDARCH)" == "i486" LD_FLAGS = $(SAFESEH_FLAG) $(LD_FLAGS) !endif
--- a/make/windows/makefiles/sanity.make Thu Oct 25 12:52:42 2018 +0300 +++ b/make/windows/makefiles/sanity.make Thu Oct 25 14:53:24 2018 +0300 @@ -28,8 +28,15 @@ checkCL: @ if "$(MSC_VER)" NEQ "1310" if "$(MSC_VER)" NEQ "1399" if "$(MSC_VER)" NEQ "1400" if "$(MSC_VER)" NEQ "1500" if "$(MSC_VER)" NEQ "1600" if "$(MSC_VER)" NEQ "1700" \ + if "$(MSC_VER)" NEQ "1800" \ + if "$(MSC_VER)" NEQ "1900" \ + if "$(MSC_VER)" NEQ "1912" \ echo *** WARNING *** unrecognized cl.exe version $(MSC_VER) ($(RAW_MSC_VER)). Use FORCE_MSC_VER to override automatic detection. checkLink: @ if "$(LD_VER)" NEQ "710" if "$(LD_VER)" NEQ "800" if "$(LD_VER)" NEQ "900" if "$(LD_VER)" NEQ "1000" if "$(LD_VER)" NEQ "1100" \ + if "$(LD_VER)" NEQ "1200" \ + if "$(LD_VER)" NEQ "1300" \ + if "$(LD_VER)" NEQ "1400" \ + if "$(LD_VER)" NEQ "1412" \ echo *** WARNING *** unrecognized link.exe version $(LD_VER) ($(RAW_LD_VER)). Use FORCE_LD_VER to override automatic detection.
--- a/make/windows/makefiles/vm.make Thu Oct 25 12:52:42 2018 +0300 +++ b/make/windows/makefiles/vm.make Thu Oct 25 14:53:24 2018 +0300 @@ -128,8 +128,8 @@ !if "$(USE_PRECOMPILED_HEADER)" != "0" CXX_USE_PCH=/Fp"vm.pch" /Yu"precompiled.hpp" -!if "$(COMPILER_NAME)" == "VS2012" -# VS2012 requires this object file to be listed: +!if "$(COMPILER_NAME)" == "VS2012" || "$(COMPILER_NAME)" == "VS2013" || "$(COMPILER_NAME)" == "VS2015" || "$(COMPILER_NAME)" == "VS2017" +# VS2012 and later require this object file to be listed: LD_FLAGS=$(LD_FLAGS) _build_pch_file.obj !endif !else
--- a/src/cpu/aarch32/vm/vtableStubs_aarch32.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/cpu/aarch32/vm/vtableStubs_aarch32.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -107,7 +107,7 @@ __ flush(); if (PrintMiscellaneous && (WizardMode || Verbose)) { - tty->print_cr("vtable #%d at "PTR_FORMAT"[%d] left over: %d", + tty->print_cr("vtable #%d at " PTR_FORMAT "[%d] left over: %d", vtable_index, p2i(s->entry_point()), (int)(s->code_end() - s->entry_point()), (int)(s->code_end() - __ pc()));
--- a/src/cpu/ppc/vm/methodHandles_ppc.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/cpu/ppc/vm/methodHandles_ppc.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -463,7 +463,7 @@ bool has_mh = (strstr(adaptername, "/static") == NULL && strstr(adaptername, "linkTo") == NULL); // static linkers don't have MH const char* mh_reg_name = has_mh ? "R23_method_handle" : "G23"; - tty->print_cr("MH %s %s="INTPTR_FORMAT " sp=" INTPTR_FORMAT, + tty->print_cr("MH %s %s=" INTPTR_FORMAT " sp=" INTPTR_FORMAT, adaptername, mh_reg_name, (intptr_t) mh, (intptr_t) entry_sp); if (Verbose) {
--- a/src/cpu/ppc/vm/ppc.ad Thu Oct 25 12:52:42 2018 +0300 +++ b/src/cpu/ppc/vm/ppc.ad Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ // -// Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. +// Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. // Copyright (c) 2012, 2017 SAP SE. All rights reserved. // DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. // @@ -2174,12 +2174,12 @@ } // Vector ideal reg. -const int Matcher::vector_ideal_reg(int size) { +const uint Matcher::vector_ideal_reg(int size) { assert(MaxVectorSize == 8 && size == 8, ""); return Op_RegL; } -const int Matcher::vector_shift_count_ideal_reg(int size) { +const uint Matcher::vector_shift_count_ideal_reg(int size) { fatal("vector shift is not supported"); return Node::NotAMachineReg; }
--- a/src/cpu/sparc/vm/methodHandles_sparc.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/cpu/sparc/vm/methodHandles_sparc.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -481,7 +481,7 @@ bool has_mh = (strstr(adaptername, "/static") == NULL && strstr(adaptername, "linkTo") == NULL); // static linkers don't have MH const char* mh_reg_name = has_mh ? "G3_mh" : "G3"; - tty->print_cr("MH %s %s="INTPTR_FORMAT " saved_sp=" INTPTR_FORMAT " args=" INTPTR_FORMAT, + tty->print_cr("MH %s %s=" INTPTR_FORMAT " saved_sp=" INTPTR_FORMAT " args=" INTPTR_FORMAT, adaptername, mh_reg_name, (intptr_t) mh, saved_sp, args);
--- a/src/cpu/sparc/vm/sparc.ad Thu Oct 25 12:52:42 2018 +0300 +++ b/src/cpu/sparc/vm/sparc.ad Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ // -// Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. +// Copyright (c) 1998, 2018, 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 @@ -1877,12 +1877,12 @@ } // Vector ideal reg -const int Matcher::vector_ideal_reg(int size) { +const uint Matcher::vector_ideal_reg(int size) { assert(MaxVectorSize == 8, ""); return Op_RegD; } -const int Matcher::vector_shift_count_ideal_reg(int size) { +const uint Matcher::vector_shift_count_ideal_reg(int size) { fatal("vector shift is not supported"); return Node::NotAMachineReg; }
--- a/src/cpu/sparc/vm/vm_version_sparc.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/cpu/sparc/vm/vm_version_sparc.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -140,10 +140,17 @@ if (is_niagara_plus()) { if (has_blk_init() && (cache_line_size > 0) && UseTLAB && FLAG_IS_DEFAULT(AllocatePrefetchInstr)) { - // Use BIS instruction for TLAB allocation prefetch. - FLAG_SET_ERGO(intx, AllocatePrefetchInstr, 1); - if (FLAG_IS_DEFAULT(AllocatePrefetchStyle)) { - FLAG_SET_ERGO(intx, AllocatePrefetchStyle, 3); + if (!has_sparc5_instr()) { + // Use BIS instruction for TLAB allocation prefetch + // on Niagara plus processors other than those based on CoreS4. + FLAG_SET_DEFAULT(AllocatePrefetchInstr, 1); + } else { + // On CoreS4 processors use prefetch instruction + // to avoid partial RAW issue, also use prefetch style 3. + FLAG_SET_DEFAULT(AllocatePrefetchInstr, 0); + if (FLAG_IS_DEFAULT(AllocatePrefetchStyle)) { + FLAG_SET_DEFAULT(AllocatePrefetchStyle, 3); + } } if (FLAG_IS_DEFAULT(AllocatePrefetchDistance)) { // Use smaller prefetch distance with BIS @@ -165,6 +172,11 @@ FLAG_SET_DEFAULT(AllocatePrefetchDistance, 256); } if (AllocatePrefetchInstr == 1) { + + // Use allocation prefetch style 3 because BIS instructions + // require aligned memory addresses. + FLAG_SET_DEFAULT(AllocatePrefetchStyle, 3); + // Need a space at the end of TLAB for BIS since it // will fault when accessing memory outside of heap.
--- a/src/cpu/sparc/vm/vtableStubs_sparc.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/cpu/sparc/vm/vtableStubs_sparc.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -111,7 +111,7 @@ masm->flush(); if (PrintMiscellaneous && (WizardMode || Verbose)) { - tty->print_cr("vtable #%d at "PTR_FORMAT"[%d] left over: %d", + tty->print_cr("vtable #%d at " PTR_FORMAT "[%d] left over: %d", vtable_index, s->entry_point(), (int)(s->code_end() - s->entry_point()), (int)(s->code_end() - __ pc())); @@ -219,7 +219,7 @@ masm->flush(); if (PrintMiscellaneous && (WizardMode || Verbose)) { - tty->print_cr("itable #%d at "PTR_FORMAT"[%d] left over: %d", + tty->print_cr("itable #%d at " PTR_FORMAT "[%d] left over: %d", itable_index, s->entry_point(), (int)(s->code_end() - s->entry_point()), (int)(s->code_end() - __ pc()));
--- a/src/cpu/x86/vm/c1_Runtime1_x86.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/cpu/x86/vm/c1_Runtime1_x86.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2018, 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 @@ -1667,31 +1667,15 @@ __ jmp(done); __ bind(runtime); - __ push(rcx); -#ifdef _LP64 - __ push(r8); - __ push(r9); - __ push(r10); - __ push(r11); -# ifndef _WIN64 - __ push(rdi); - __ push(rsi); -# endif -#endif + + save_live_registers(sasm, 3); + // load the pre-value f.load_argument(0, rcx); __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::g1_wb_pre), rcx, thread); -#ifdef _LP64 -# ifndef _WIN64 - __ pop(rsi); - __ pop(rdi); -# endif - __ pop(r11); - __ pop(r10); - __ pop(r9); - __ pop(r8); -#endif - __ pop(rcx); + + restore_live_registers(sasm); + __ bind(done); __ pop(rdx); @@ -1773,27 +1757,13 @@ __ bind(runtime); __ push(rdx); -#ifdef _LP64 - __ push(r8); - __ push(r9); - __ push(r10); - __ push(r11); -# ifndef _WIN64 - __ push(rdi); - __ push(rsi); -# endif -#endif + + save_live_registers(sasm, 3); + __ call_VM_leaf(CAST_FROM_FN_PTR(address, SharedRuntime::g1_wb_post), card_addr, thread); -#ifdef _LP64 -# ifndef _WIN64 - __ pop(rsi); - __ pop(rdi); -# endif - __ pop(r11); - __ pop(r10); - __ pop(r9); - __ pop(r8); -#endif + + restore_live_registers(sasm); + __ pop(rdx); __ bind(done);
--- a/src/cpu/x86/vm/interpreterRT_x86_64.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/cpu/x86/vm/interpreterRT_x86_64.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2018, 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 @@ -346,8 +346,9 @@ _from -= Interpreter::stackElementSize; if (_num_args < Argument::n_float_register_parameters_c-1) { + assert((_num_args*2) < BitsPerWord, "_num_args*2 is out of range"); *_reg_args++ = from_obj; - *_fp_identifiers |= (intptr_t)(0x01 << (_num_args*2)); // mark as float + *_fp_identifiers |= ((intptr_t)0x01 << (_num_args*2)); // mark as float _num_args++; } else { *_to++ = from_obj; @@ -360,8 +361,9 @@ _from -= 2*Interpreter::stackElementSize; if (_num_args < Argument::n_float_register_parameters_c-1) { + assert((_num_args*2) < BitsPerWord, "_num_args*2 is out of range"); *_reg_args++ = from_obj; - *_fp_identifiers |= (intptr_t)(0x3 << (_num_args*2)); // mark as double + *_fp_identifiers |= ((intptr_t)0x3 << (_num_args*2)); // mark as double _num_args++; } else { *_to++ = from_obj;
--- a/src/cpu/x86/vm/macroAssembler_x86.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/cpu/x86/vm/macroAssembler_x86.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -5217,7 +5217,7 @@ { ResourceMark rm; stringStream ss; - ss.print("DelayedValue="INTPTR_FORMAT, delayed_value_addr[1]); + ss.print("DelayedValue=" INTPTR_FORMAT, delayed_value_addr[1]); buf = code_string(ss.as_string()); } jcc(Assembler::notZero, L);
--- a/src/cpu/x86/vm/methodHandles_x86.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/cpu/x86/vm/methodHandles_x86.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -483,7 +483,7 @@ bool has_mh = (strstr(adaptername, "/static") == NULL && strstr(adaptername, "linkTo") == NULL); // static linkers don't have MH const char* mh_reg_name = has_mh ? "rcx_mh" : "rcx"; - tty->print_cr("MH %s %s="PTR_FORMAT" sp="PTR_FORMAT, + tty->print_cr("MH %s %s=" PTR_FORMAT " sp=" PTR_FORMAT, adaptername, mh_reg_name, (void *)mh, entry_sp);
--- a/src/cpu/x86/vm/vtableStubs_x86_32.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/cpu/x86/vm/vtableStubs_x86_32.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -118,7 +118,7 @@ masm->flush(); if (PrintMiscellaneous && (WizardMode || Verbose)) { - tty->print_cr("vtable #%d at "PTR_FORMAT"[%d] left over: %d", + tty->print_cr("vtable #%d at " PTR_FORMAT "[%d] left over: %d", vtable_index, p2i(s->entry_point()), (int)(s->code_end() - s->entry_point()), (int)(s->code_end() - __ pc())); @@ -217,7 +217,7 @@ __ flush(); if (PrintMiscellaneous && (WizardMode || Verbose)) { - tty->print_cr("itable #%d at "PTR_FORMAT"[%d] left over: %d", + tty->print_cr("itable #%d at " PTR_FORMAT "[%d] left over: %d", itable_index, p2i(s->entry_point()), (int)(s->code_end() - s->entry_point()), (int)(s->code_end() - __ pc()));
--- a/src/cpu/x86/vm/vtableStubs_x86_64.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/cpu/x86/vm/vtableStubs_x86_64.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -113,7 +113,7 @@ __ flush(); if (PrintMiscellaneous && (WizardMode || Verbose)) { - tty->print_cr("vtable #%d at "PTR_FORMAT"[%d] left over: %d", + tty->print_cr("vtable #%d at " PTR_FORMAT "[%d] left over: %d", vtable_index, s->entry_point(), (int)(s->code_end() - s->entry_point()), (int)(s->code_end() - __ pc())); @@ -220,7 +220,7 @@ __ flush(); if (PrintMiscellaneous && (WizardMode || Verbose)) { - tty->print_cr("itable #%d at "PTR_FORMAT"[%d] left over: %d", + tty->print_cr("itable #%d at " PTR_FORMAT "[%d] left over: %d", itable_index, s->entry_point(), (int)(s->code_end() - s->entry_point()), (int)(s->code_end() - __ pc()));
--- a/src/cpu/x86/vm/x86.ad Thu Oct 25 12:52:42 2018 +0300 +++ b/src/cpu/x86/vm/x86.ad Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ // -// Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +// Copyright (c) 2011, 2018, 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 @@ -683,7 +683,7 @@ } // Vector ideal reg corresponding to specidied size in bytes -const int Matcher::vector_ideal_reg(int size) { +const uint Matcher::vector_ideal_reg(int size) { assert(MaxVectorSize >= size, ""); switch(size) { case 4: return Op_VecS; @@ -696,7 +696,7 @@ } // Only lowest bits of xmm reg are used for vector shift count. -const int Matcher::vector_shift_count_ideal_reg(int size) { +const uint Matcher::vector_shift_count_ideal_reg(int size) { return Op_VecS; }
--- a/src/os/aix/vm/os_aix.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/os/aix/vm/os_aix.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved. * Copyright 2012, 2014 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -410,7 +410,7 @@ // thread (because primordial thread's stack may have different page size than // pthread thread stacks). Running a VM on the primordial thread won't work for a // number of reasons so we may just as well guarantee it here - guarantee(!os::Aix::is_primordial_thread(), "Must not be called for primordial thread"); + guarantee(!os::is_primordial_thread(), "Must not be called for primordial thread"); // query stack page size { @@ -3835,7 +3835,7 @@ ThreadCritical::initialize(); - // Main_thread points to the aboriginal thread. + // _main_thread points to the thread that created/loaded the JVM. Aix::_main_thread = pthread_self(); initial_time_count = os::elapsed_counter(); @@ -4521,7 +4521,7 @@ } } -bool os::Aix::is_primordial_thread() { +bool os::is_primordial_thread(void) { if (pthread_self() == (pthread_t)1) { return true; } else { @@ -4656,7 +4656,7 @@ // This only works when invoked on a pthread. As we agreed not to use // primordial threads anyway, I assert here - guarantee(!os::Aix::is_primordial_thread(), "not allowed on the primordial thread"); + guarantee(!os::is_primordial_thread(), "not allowed on the primordial thread"); // information about this api can be found (a) in the pthread.h header and // (b) in http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.basetechref/doc/basetrf1/pthread_getthrds_np.htm
--- a/src/os/aix/vm/os_aix.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/os/aix/vm/os_aix.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved. * Copyright 2013 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -170,12 +170,6 @@ // Given an address, returns the size of the page backing that address static size_t query_pagesize(void* p); - // Return `true' if the calling thread is the primordial thread. The - // primordial thread is the thread which contains the main function, - // *not* necessarily the thread which initialized the VM by calling - // JNI_CreateJavaVM. - static bool is_primordial_thread(void); - static int page_size(void) { assert(_page_size != -1, "not initialized"); return _page_size;
--- a/src/os/bsd/vm/os_bsd.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/os/bsd/vm/os_bsd.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2018, 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 @@ -3611,7 +3611,7 @@ Bsd::initialize_system_info(); - // main_thread points to the aboriginal thread + // _main_thread points to the thread that created/loaded the JVM. Bsd::_main_thread = pthread_self(); Bsd::clock_init();
--- a/src/os/bsd/vm/os_bsd.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/os/bsd/vm/os_bsd.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2018, 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 @@ -92,7 +92,6 @@ static void hotspot_sigmask(Thread* thread); - static bool is_initial_thread(void); static pid_t gettid(); static int page_size(void) { return _page_size; }
--- a/src/os/linux/vm/os_linux.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/os/linux/vm/os_linux.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2018, 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 @@ -1004,8 +1004,8 @@ } } - if (os::Linux::is_initial_thread()) { - // If current thread is initial thread, its stack is mapped on demand, + if (os::is_primordial_thread()) { + // If current thread is primordial thread, its stack is mapped on demand, // see notes about MAP_GROWSDOWN. Here we try to force kernel to map // the entire stack region to avoid SEGV in stack banging. // It is also useful to get around the heap-stack-gap problem on SuSE @@ -1090,21 +1090,24 @@ } ////////////////////////////////////////////////////////////////////////////// -// initial thread - -// Check if current thread is the initial thread, similar to Solaris thr_main. -bool os::Linux::is_initial_thread(void) { +// primordial thread + +// Check if current thread is the primordial thread, similar to Solaris thr_main. +bool os::is_primordial_thread(void) { char dummy; // If called before init complete, thread stack bottom will be null. // Can be called if fatal error occurs before initialization. - if (initial_thread_stack_bottom() == NULL) return false; - assert(initial_thread_stack_bottom() != NULL && - initial_thread_stack_size() != 0, - "os::init did not locate initial thread's stack region"); - if ((address)&dummy >= initial_thread_stack_bottom() && - (address)&dummy < initial_thread_stack_bottom() + initial_thread_stack_size()) + if (os::Linux::initial_thread_stack_bottom() == NULL) return false; + assert(os::Linux::initial_thread_stack_bottom() != NULL && + os::Linux::initial_thread_stack_size() != 0, + "os::init did not locate primordial thread's stack region"); + if ((address)&dummy >= os::Linux::initial_thread_stack_bottom() && + (address)&dummy < os::Linux::initial_thread_stack_bottom() + + os::Linux::initial_thread_stack_size()) { return true; - else return false; + } else { + return false; + } } // Find the virtual memory area that contains addr @@ -1131,7 +1134,7 @@ return false; } -// Locate initial thread stack. This special handling of initial thread stack +// Locate primordial thread stack. This special handling of primordial thread stack // is needed because pthread_getattr_np() on most (all?) Linux distros returns // bogus value for the primordial process thread. While the launcher has created // the VM in a new thread since JDK 6, we still have to allow for the use of the @@ -1155,7 +1158,10 @@ // 6308388: a bug in ld.so will relocate its own .data section to the // lower end of primordial stack; reduce ulimit -s value a little bit // so we won't install guard page on ld.so's data section. - stack_size -= 2 * page_size(); + // But ensure we don't underflow the stack size - allow 1 page spare + if (stack_size >= (size_t)(3 * page_size())) { + stack_size -= 2 * page_size(); + } // Try to figure out where the stack base (top) is. This is harder. // @@ -1276,16 +1282,16 @@ if (i != 28 - 2) { assert(false, "Bad conversion from /proc/self/stat"); - // product mode - assume we are the initial thread, good luck in the + // product mode - assume we are the primordial thread, good luck in the // embedded case. - warning("Can't detect initial thread stack location - bad conversion"); + warning("Can't detect primordial thread stack location - bad conversion"); stack_start = (uintptr_t) &rlim; } } else { // For some reason we can't open /proc/self/stat (for example, running on // FreeBSD with a Linux emulator, or inside chroot), this should work for // most cases, so don't abort: - warning("Can't detect initial thread stack location - no /proc/self/stat"); + warning("Can't detect primordial thread stack location - no /proc/self/stat"); stack_start = (uintptr_t) &rlim; } } @@ -1305,7 +1311,7 @@ stack_top = (uintptr_t)high; } else { // failed, likely because /proc/self/maps does not exist - warning("Can't detect initial thread stack location - find_vma failed"); + warning("Can't detect primordial thread stack location - find_vma failed"); // best effort: stack_start is normally within a few pages below the real // stack top, use it as stack top, and reduce stack size so we won't put // guard page outside stack. @@ -3181,11 +3187,11 @@ // where we're going to put our guard pages, truncate the mapping at // that point by munmap()ping it. This ensures that when we later // munmap() the guard pages we don't leave a hole in the stack -// mapping. This only affects the main/initial thread +// mapping. This only affects the main/primordial thread bool os::pd_create_stack_guard_pages(char* addr, size_t size) { - if (os::Linux::is_initial_thread()) { + if (os::is_primordial_thread()) { // As we manually grow stack up to bottom inside create_attached_thread(), // it's likely that os::Linux::initial_thread_stack_bottom is mapped and // we don't need to do anything special. @@ -3210,14 +3216,14 @@ // If this is a growable mapping, remove the guard pages entirely by // munmap()ping them. If not, just call uncommit_memory(). This only -// affects the main/initial thread, but guard against future OS changes -// It's safe to always unmap guard pages for initial thread because we -// always place it right after end of the mapped region +// affects the main/primordial thread, but guard against future OS changes. +// It's safe to always unmap guard pages for primordial thread because we +// always place it right after end of the mapped region. bool os::remove_stack_guard_pages(char* addr, size_t size) { uintptr_t stack_extent, stack_base; - if (os::Linux::is_initial_thread()) { + if (os::is_primordial_thread()) { return ::munmap(addr, size) == 0; } @@ -4992,10 +4998,9 @@ } } -// this is called _before_ the most of global arguments have been parsed +// this is called _before_ most of the global arguments have been parsed void os::init(void) { char dummy; /* used to get a guess on initial stack address */ -// first_hrtime = gethrtime(); // With LinuxThreads the JavaMain thread pid (primordial thread) // is different than the pid of the java launcher thread. @@ -5022,7 +5027,7 @@ Linux::initialize_system_info(); - // main_thread points to the aboriginal thread + // _main_thread points to the thread that created/loaded the JVM. Linux::_main_thread = pthread_self(); Linux::clock_init();
--- a/src/os/linux/vm/os_linux.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/os/linux/vm/os_linux.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2018, 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 @@ -142,7 +142,6 @@ static address initial_thread_stack_bottom(void) { return _initial_thread_stack_bottom; } static uintptr_t initial_thread_stack_size(void) { return _initial_thread_stack_size; } - static bool is_initial_thread(void); static int page_size(void) { return _page_size; } static void set_page_size(int val) { _page_size = val; }
--- a/src/os/solaris/vm/os_solaris.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/os/solaris/vm/os_solaris.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -200,17 +200,21 @@ return st; } -address os::current_stack_base() { +bool os::is_primordial_thread(void) { int r = thr_main() ; guarantee (r == 0 || r == 1, "CR6501650 or CR6493689") ; - bool is_primordial_thread = r; + return r == 1; +} + +address os::current_stack_base() { + bool _is_primordial_thread = is_primordial_thread(); // Workaround 4352906, avoid calls to thr_stksegment by // thr_main after the first one (it looks like we trash // some data, causing the value for ss_sp to be incorrect). - if (!is_primordial_thread || os::Solaris::_main_stack_base == NULL) { + if (!_is_primordial_thread || os::Solaris::_main_stack_base == NULL) { stack_t st = get_stack_info(); - if (is_primordial_thread) { + if (_is_primordial_thread) { // cache initial value of stack base os::Solaris::_main_stack_base = (address)st.ss_sp; } @@ -224,9 +228,7 @@ size_t os::current_stack_size() { size_t size; - int r = thr_main() ; - guarantee (r == 0 || r == 1, "CR6501650 or CR6493689") ; - if(!r) { + if (!is_primordial_thread()) { size = get_stack_info().ss_size; } else { struct rlimit limits; @@ -1287,9 +1289,7 @@ // First crack at OS-specific initialization, from inside the new thread. void os::initialize_thread(Thread* thr) { - int r = thr_main() ; - guarantee (r == 0 || r == 1, "CR6501650 or CR6493689") ; - if (r) { + if (is_primordial_thread()) { JavaThread* jt = (JavaThread *)thr; assert(jt != NULL,"Sanity check"); size_t stack_size; @@ -4914,6 +4914,7 @@ // (Solaris only) this switches to calls that actually do locking. ThreadCritical::initialize(); + // main_thread points to the thread that created/loaded the JVM. main_thread = thr_self(); // Constant minimum stack size allowed. It must be at least
--- a/src/os/windows/vm/os_windows.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/os/windows/vm/os_windows.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -2197,13 +2197,6 @@ // Windows Vista/2008 heap corruption check #define EXCEPTION_HEAP_CORRUPTION 0xC0000374 -#define def_excpt(val) #val, val - -struct siglabel { - char *name; - int number; -}; - // All Visual C++ exceptions thrown from code generated by the Microsoft Visual // C++ compiler contain this error code. Because this is a compiler-generated // error, the code is not listed in the Win32 API header files. @@ -2213,8 +2206,9 @@ #define EXCEPTION_UNCAUGHT_CXX_EXCEPTION 0xE06D7363 - -struct siglabel exceptlabels[] = { +#define def_excpt(val) { #val, (val) } + +static const struct { char* name; uint number; } exceptlabels[] = { def_excpt(EXCEPTION_ACCESS_VIOLATION), def_excpt(EXCEPTION_DATATYPE_MISALIGNMENT), def_excpt(EXCEPTION_BREAKPOINT), @@ -2239,16 +2233,16 @@ def_excpt(EXCEPTION_GUARD_PAGE), def_excpt(EXCEPTION_INVALID_HANDLE), def_excpt(EXCEPTION_UNCAUGHT_CXX_EXCEPTION), - def_excpt(EXCEPTION_HEAP_CORRUPTION), + def_excpt(EXCEPTION_HEAP_CORRUPTION) #ifdef _M_IA64 - def_excpt(EXCEPTION_REG_NAT_CONSUMPTION), + , def_excpt(EXCEPTION_REG_NAT_CONSUMPTION) #endif - NULL, 0 }; const char* os::exception_name(int exception_code, char *buf, size_t size) { - for (int i = 0; exceptlabels[i].name != NULL; i++) { - if (exceptlabels[i].number == exception_code) { + uint code = static_cast<uint>(exception_code); + for (uint i = 0; i < ARRAY_SIZE(exceptlabels); ++i) { + if (exceptlabels[i].number == code) { jio_snprintf(buf, size, "%s", exceptlabels[i].name); return buf; } @@ -2271,9 +2265,9 @@ assert((pc[1] & ~0x7) == 0xF8, "cannot handle non-register operands"); assert(ctx->Rax == min_jint, "unexpected idiv exception"); // set correct result values and continue after idiv instruction - ctx->Rip = (DWORD)pc + 2; // idiv reg, reg is 2 bytes - ctx->Rax = (DWORD)min_jint; // result - ctx->Rdx = (DWORD)0; // remainder + ctx->Rip = (DWORD64)pc + 2; // idiv reg, reg is 2 bytes + ctx->Rax = (DWORD64)min_jint; // result + ctx->Rdx = (DWORD64)0; // remainder // Continue the execution #else PCONTEXT ctx = exceptionInfo->ContextRecord; @@ -5792,7 +5786,7 @@ char* result = os::reserve_memory_special(large_allocation_size, os::large_page_size(), NULL, false); if (result == NULL) { if (VerboseInternalVMTests) { - gclog_or_tty->print("Failed to allocate control block with size "SIZE_FORMAT". Skipping remainder of test.", + gclog_or_tty->print("Failed to allocate control block with size " SIZE_FORMAT ". Skipping remainder of test.", large_allocation_size); } } else { @@ -5805,7 +5799,7 @@ char* actual_location = os::reserve_memory_special(expected_allocation_size, os::large_page_size(), expected_location, false); if (actual_location == NULL) { if (VerboseInternalVMTests) { - gclog_or_tty->print("Failed to allocate any memory at "PTR_FORMAT" size "SIZE_FORMAT". Skipping remainder of test.", + gclog_or_tty->print("Failed to allocate any memory at " PTR_FORMAT " size " SIZE_FORMAT ". Skipping remainder of test.", expected_location, large_allocation_size); } } else { @@ -5813,7 +5807,7 @@ os::release_memory_special(actual_location, expected_allocation_size); // only now check, after releasing any memory to avoid any leaks. assert(actual_location == expected_location, - err_msg("Failed to allocate memory at requested location "PTR_FORMAT" of size "SIZE_FORMAT", is "PTR_FORMAT" instead", + err_msg("Failed to allocate memory at requested location " PTR_FORMAT " of size " SIZE_FORMAT ", is " PTR_FORMAT " instead", expected_location, expected_allocation_size, actual_location)); } }
--- a/src/os_cpu/linux_aarch32/vm/os_linux_aarch32.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/os_cpu/linux_aarch32/vm/os_linux_aarch32.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -517,8 +517,8 @@ // pthread_attr_getstack() static void current_stack_region(address * bottom, size_t * size) { - if (os::Linux::is_initial_thread()) { - // initial thread needs special handling because pthread_getattr_np() + if (os::is_primordial_thread()) { + // primordial thread needs special handling because pthread_getattr_np() // may return bogus value. *bottom = os::Linux::initial_thread_stack_bottom(); *size = os::Linux::initial_thread_stack_size();
--- a/src/os_cpu/linux_ppc/vm/os_linux_ppc.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/os_cpu/linux_ppc/vm/os_linux_ppc.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. * Copyright 2012, 2015 SAP AG. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -510,8 +510,8 @@ // pthread_attr_getstack() static void current_stack_region(address * bottom, size_t * size) { - if (os::Linux::is_initial_thread()) { - // initial thread needs special handling because pthread_getattr_np() + if (os::is_primordial_thread()) { + // primordial thread needs special handling because pthread_getattr_np() // may return bogus value. *bottom = os::Linux::initial_thread_stack_bottom(); *size = os::Linux::initial_thread_stack_size();
--- a/src/os_cpu/linux_sparc/vm/os_linux_sparc.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/os_cpu/linux_sparc/vm/os_linux_sparc.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2018, 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 @@ -162,8 +162,8 @@ } static void current_stack_region(address* bottom, size_t* size) { - if (os::Linux::is_initial_thread()) { - // initial thread needs special handling because pthread_getattr_np() + if (os::is_primordial_thread()) { + // primordial thread needs special handling because pthread_getattr_np() // may return bogus value. *bottom = os::Linux::initial_thread_stack_bottom(); *size = os::Linux::initial_thread_stack_size();
--- a/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/os_cpu/linux_x86/vm/os_linux_x86.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2018, 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 @@ -712,8 +712,8 @@ // pthread_attr_getstack() static void current_stack_region(address * bottom, size_t * size) { - if (os::Linux::is_initial_thread()) { - // initial thread needs special handling because pthread_getattr_np() + if (os::is_primordial_thread()) { + // primordial thread needs special handling because pthread_getattr_np() // may return bogus value. *bottom = os::Linux::initial_thread_stack_bottom(); *size = os::Linux::initial_thread_stack_size();
--- a/src/os_cpu/linux_zero/vm/os_linux_zero.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/os_cpu/linux_zero/vm/os_linux_zero.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. * Copyright 2007, 2008, 2009, 2010 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -360,7 +360,7 @@ // The initial thread has a growable stack, and the size reported // by pthread_attr_getstack is the maximum size it could possibly // be given what currently mapped. This can be huge, so we cap it. - if (os::Linux::is_initial_thread()) { + if (os::is_primordial_thread()) { stack_bytes = stack_top - stack_bottom; if (stack_bytes > JavaThread::stack_size_at_create()) @@ -408,6 +408,7 @@ extern "C" { int SpinPause() { + return 0; // Shouldn't matter. }
--- a/src/os_cpu/linux_zero/vm/os_linux_zero.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/os_cpu/linux_zero/vm/os_linux_zero.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -36,18 +36,24 @@ // Atomically copy 64 bits of data static void atomic_copy64(volatile void *src, volatile void *dst) { -#if defined(PPC32) +#if defined(PPC32) && !defined(__SPE__) double tmp; - asm volatile ("lfd %0, 0(%1)\n" - "stfd %0, 0(%2)\n" - : "=f"(tmp) - : "b"(src), "b"(dst)); + asm volatile ("lfd %0, %2\n" + "stfd %0, %1\n" + : "=&f"(tmp), "=Q"(*(volatile double*)dst) + : "Q"(*(volatile double*)src)); +#elif defined(PPC32) && defined(__SPE__) + long tmp; + asm volatile ("evldd %0, %2\n" + "evstdd %0, %1\n" + : "=&r"(tmp), "=Q"(*(volatile long*)dst) + : "Q"(*(volatile long*)src)); #elif defined(S390) && !defined(_LP64) double tmp; - asm volatile ("ld %0, 0(%1)\n" - "std %0, 0(%2)\n" - : "=r"(tmp) - : "a"(src), "a"(dst)); + asm volatile ("ld %0, %2\n" + "std %0, %1\n" + : "=&f"(tmp), "=Q"(*(volatile double*)dst) + : "Q"(*(volatile double*)src)); #else *(jlong *) dst = *(jlong *) src; #endif
--- a/src/os_cpu/windows_x86/vm/os_windows_x86.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/os_cpu/windows_x86/vm/os_windows_x86.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -454,11 +454,18 @@ // Returns an estimate of the current stack pointer. Result must be guaranteed // to point into the calling threads stack, and be no lower than the current // stack pointer. +#if defined(_MSC_VER) && _MSC_VER >= 1900 +// warning C4172: returning address of local variable or temporary: dummy +#pragma warning(disable: 4172) +#endif address os::current_stack_pointer() { int dummy; address sp = (address)&dummy; return sp; } +#if defined(_MSC_VER) && _MSC_VER >= 1900 +#pragma warning(default: 4172) +#endif #else // Returns the current stack pointer. Accurate value needed for // os::verify_stack_alignment().
--- a/src/share/vm/adlc/arena.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/adlc/arena.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2018, 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,11 @@ //------------------------------Chunk------------------------------------------ // Linked list of raw memory chunks class Chunk: public CHeapObj { + private: + // This ordinary operator delete is needed even though not used, so the + // below two-argument operator delete will be treated as a placement + // delete rather than an ordinary sized delete; see C++14 3.7.4.2/p2. + void operator delete(void* p); public: void* operator new(size_t size, size_t length) throw(); void operator delete(void* p, size_t length);
--- a/src/share/vm/adlc/output_c.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/adlc/output_c.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2018, 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 @@ -4177,11 +4177,11 @@ fprintf(fp_cpp,"%s\n", _frame->_c_calling_convention); fprintf(fp_cpp,"}\n\n"); // Java Return Value Location - fprintf(fp_cpp,"OptoRegPair Matcher::return_value(int ideal_reg, bool is_outgoing) {\n"); + fprintf(fp_cpp,"OptoRegPair Matcher::return_value(uint ideal_reg, bool is_outgoing) {\n"); fprintf(fp_cpp,"%s\n", _frame->_return_value); fprintf(fp_cpp,"}\n\n"); // Native Return Value Location - fprintf(fp_cpp,"OptoRegPair Matcher::c_return_value(int ideal_reg, bool is_outgoing) {\n"); + fprintf(fp_cpp,"OptoRegPair Matcher::c_return_value(uint ideal_reg, bool is_outgoing) {\n"); fprintf(fp_cpp,"%s\n", _frame->_c_return_value); fprintf(fp_cpp,"}\n\n");
--- a/src/share/vm/c1/c1_CFGPrinter.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/c1/c1_CFGPrinter.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -161,7 +161,7 @@ print("name \"%s\"", method_name(_compilation->method(), true)); print("method \"%s\"", method_name(_compilation->method())); - print("date "INT64_FORMAT, (int64_t) os::javaTimeMillis()); + print("date " INT64_FORMAT, (int64_t) os::javaTimeMillis()); print_end("compilation"); }
--- a/src/share/vm/classfile/altHashing.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/classfile/altHashing.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2018, 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 @@ -224,7 +224,7 @@ static const jbyte THREE_BYTE[] = { (jbyte) 0x80, (jbyte) 0x81, (jbyte) 0x82}; static const jbyte FOUR_BYTE[] = { (jbyte) 0x80, (jbyte) 0x81, (jbyte) 0x82, (jbyte) 0x83}; static const jchar TWO_CHAR[] = { (jchar) 0x8180, (jchar) 0x8382}; -static const jint ONE_INT[] = { 0x83828180}; +static const jint ONE_INT[] = { (jint) 0x83828180}; static const jbyte SIX_BYTE[] = { (jbyte) 0x80, (jbyte) 0x81, (jbyte) 0x82, (jbyte) 0x83, (jbyte) 0x84, (jbyte) 0x85}; static const jchar THREE_CHAR[] = { (jchar) 0x8180, (jchar) 0x8382, (jchar) 0x8584}; static const jbyte EIGHT_BYTE[] = { @@ -235,7 +235,7 @@ (jchar) 0x8180, (jchar) 0x8382, (jchar) 0x8584, (jchar) 0x8786}; -static const jint TWO_INT[] = { 0x83828180, 0x87868584}; +static const jint TWO_INT[] = { (jint) 0x83828180, (jint) 0x87868584}; static const juint MURMUR3_32_X86_CHECK_VALUE = 0xB0F57EE3;
--- a/src/share/vm/classfile/classFileParser.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/classfile/classFileParser.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -275,7 +275,7 @@ char* str = java_lang_String::as_utf8_string(patch()); // (could use java_lang_String::as_symbol instead, but might as well batch them) utf8_buffer = (u1*) str; - utf8_length = (int) strlen(str); + utf8_length = (u2) strlen(str); } unsigned int hash;
--- a/src/share/vm/classfile/classLoaderData.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/classfile/classLoaderData.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -502,7 +502,7 @@ void ClassLoaderData::dump(outputStream * const out) { ResourceMark rm; - out->print("ClassLoaderData CLD: "PTR_FORMAT", loader: "PTR_FORMAT", loader_klass: "PTR_FORMAT" %s {", + out->print("ClassLoaderData CLD: " PTR_FORMAT ", loader: " PTR_FORMAT ", loader_klass: " PTR_FORMAT " %s {", p2i(this), p2i((void *)class_loader()), p2i(class_loader() != NULL ? class_loader()->klass() : NULL), loader_name()); if (claimed()) out->print(" claimed "); @@ -520,7 +520,7 @@ ResourceMark rm; Klass* k = _klasses; while (k != NULL) { - out->print_cr("klass "PTR_FORMAT", %s, CT: %d, MUT: %d", k, k->name()->as_C_string(), + out->print_cr("klass " PTR_FORMAT ", %s, CT: %d, MUT: %d", k, k->name()->as_C_string(), k->has_modified_oops(), k->has_accumulated_modified_oops()); assert(k != k->next_link(), "no loops!"); k = k->next_link();
--- a/src/share/vm/classfile/dictionary.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/classfile/dictionary.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -568,7 +568,7 @@ } void ProtectionDomainCacheEntry::print() { - tty->print_cr("entry "PTR_FORMAT" value "PTR_FORMAT" strongly_reachable %d next "PTR_FORMAT, + tty->print_cr("entry " PTR_FORMAT " value " PTR_FORMAT " strongly_reachable %d next " PTR_FORMAT, this, (void*)literal(), _strongly_reachable, next()); } #endif
--- a/src/share/vm/classfile/dictionary.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/classfile/dictionary.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -373,7 +373,7 @@ void print_on(outputStream* st) const { symbol()->print_value_on(st); - st->print("/mode="INTX_FORMAT, symbol_mode()); + st->print("/mode=" INTX_FORMAT, symbol_mode()); st->print(" -> "); bool printed = false; if (method() != NULL) {
--- a/src/share/vm/classfile/javaClasses.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/classfile/javaClasses.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1209,7 +1209,7 @@ static oop target( oop site) { return site->obj_field( _target_offset); } static void set_target( oop site, oop target) { site->obj_field_put( _target_offset, target); } - static volatile oop target_volatile(oop site) { return site->obj_field_volatile( _target_offset); } + static volatile oop target_volatile(oop site) { return oop((oopDesc *)(site->obj_field_volatile(_target_offset))); } static void set_target_volatile(oop site, oop target) { site->obj_field_put_volatile(_target_offset, target); } // Testers
--- a/src/share/vm/classfile/vmSymbols.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/classfile/vmSymbols.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -418,6 +418,7 @@ template(getProtectionDomain_name, "getProtectionDomain") \ template(getProtectionDomain_signature, "(Ljava/security/CodeSource;)Ljava/security/ProtectionDomain;") \ template(url_code_signer_array_void_signature, "(Ljava/net/URL;[Ljava/security/CodeSigner;)V") \ + template(resolved_references_name, "<resolved_references>") \ template(referencequeue_null_name, "NULL") \ template(referencequeue_enqueued_name, "ENQUEUED") \ \ @@ -508,6 +509,7 @@ template(class_array_signature, "[Ljava/lang/Class;") \ template(classloader_signature, "Ljava/lang/ClassLoader;") \ template(object_signature, "Ljava/lang/Object;") \ + template(object_array_signature, "[Ljava/lang/Object;") \ template(class_signature, "Ljava/lang/Class;") \ template(string_signature, "Ljava/lang/String;") \ template(reference_signature, "Ljava/lang/ref/Reference;") \
--- a/src/share/vm/code/exceptionHandlerTable.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/code/exceptionHandlerTable.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -186,7 +186,7 @@ void ImplicitExceptionTable::print(address base) const { tty->print("{"); for( uint i=0; i<len(); i++ ) - tty->print("< "INTPTR_FORMAT", "INTPTR_FORMAT" > ",base + *adr(i), base + *(adr(i)+1)); + tty->print("< " INTPTR_FORMAT ", " INTPTR_FORMAT " > ",base + *adr(i), base + *(adr(i)+1)); tty->print_cr("}"); }
--- a/src/share/vm/code/nmethod.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/code/nmethod.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -2323,7 +2323,7 @@ void maybe_print(oop* p) { if (_print_nm == NULL) return; if (!_detected_scavenge_root) _print_nm->print_on(tty, "new scavenge root"); - tty->print_cr(""PTR_FORMAT"[offset=%d] detected scavengable oop "PTR_FORMAT" (found at "PTR_FORMAT")", + tty->print_cr("" PTR_FORMAT "[offset=%d] detected scavengable oop " PTR_FORMAT " (found at " PTR_FORMAT ")", _print_nm, (int)((intptr_t)p - (intptr_t)_print_nm), (void *)(*p), (intptr_t)p); (*p)->print(); @@ -2704,7 +2704,7 @@ _nm->print_nmethod(true); _ok = false; } - tty->print_cr("*** non-oop "PTR_FORMAT" found at "PTR_FORMAT" (offset %d)", + tty->print_cr("*** non-oop " PTR_FORMAT " found at " PTR_FORMAT " (offset %d)", (void *)(*p), (intptr_t)p, (int)((intptr_t)p - (intptr_t)_nm)); } virtual void do_oop(narrowOop* p) { ShouldNotReachHere(); } @@ -2828,7 +2828,7 @@ _nm->print_nmethod(true); _ok = false; } - tty->print_cr("*** scavengable oop "PTR_FORMAT" found at "PTR_FORMAT" (offset %d)", + tty->print_cr("*** scavengable oop " PTR_FORMAT " found at " PTR_FORMAT " (offset %d)", (void *)(*p), (intptr_t)p, (int)((intptr_t)p - (intptr_t)_nm)); (*p)->print(); } @@ -2873,7 +2873,7 @@ print_on(tty, NULL); if (WizardMode) { - tty->print("((nmethod*) "INTPTR_FORMAT ") ", this); + tty->print("((nmethod*) " INTPTR_FORMAT ") ", this); tty->print(" for method " INTPTR_FORMAT , (address)method()); tty->print(" { "); if (is_in_use()) tty->print("in_use ");
--- a/src/share/vm/compiler/compileBroker.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/compiler/compileBroker.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -203,7 +203,7 @@ } void log_nmethod(JavaThread* thread, nmethod* nm) { - log(thread, "nmethod %d%s " INTPTR_FORMAT " code ["INTPTR_FORMAT ", " INTPTR_FORMAT "]", + log(thread, "nmethod %d%s " INTPTR_FORMAT " code [" INTPTR_FORMAT ", " INTPTR_FORMAT "]", nm->compile_id(), nm->is_osr_method() ? "%" : "", p2i(nm), p2i(nm->code_begin()), p2i(nm->code_end())); }
--- a/src/share/vm/compiler/disassembler.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/compiler/disassembler.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -63,7 +63,7 @@ Disassembler::decode_func_virtual Disassembler::_decode_instructions_virtual = NULL; Disassembler::decode_func Disassembler::_decode_instructions = NULL; -static const char hsdis_library_name[] = "hsdis-"HOTSPOT_LIB_ARCH; +static const char hsdis_library_name[] = "hsdis-" HOTSPOT_LIB_ARCH; static const char decode_instructions_virtual_name[] = "decode_instructions_virtual"; static const char decode_instructions_name[] = "decode_instructions"; static bool use_new_version = true;
--- a/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2018, 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 @@ -838,18 +838,18 @@ GenCollectedHeap* gch = GenCollectedHeap::heap(); if (PrintGCDetails) { if (Verbose) { - gclog_or_tty->print("[%d %s-%s: "SIZE_FORMAT"("SIZE_FORMAT")]", + gclog_or_tty->print("[%d %s-%s: " SIZE_FORMAT "(" SIZE_FORMAT ")]", level(), short_name(), s, used(), capacity()); } else { - gclog_or_tty->print("[%d %s-%s: "SIZE_FORMAT"K("SIZE_FORMAT"K)]", + gclog_or_tty->print("[%d %s-%s: " SIZE_FORMAT "K(" SIZE_FORMAT "K)]", level(), short_name(), s, used() / K, capacity() / K); } } if (Verbose) { - gclog_or_tty->print(" "SIZE_FORMAT"("SIZE_FORMAT")", + gclog_or_tty->print(" " SIZE_FORMAT "(" SIZE_FORMAT ")", gch->used(), gch->capacity()); } else { - gclog_or_tty->print(" "SIZE_FORMAT"K("SIZE_FORMAT"K)", + gclog_or_tty->print(" " SIZE_FORMAT "K(" SIZE_FORMAT "K)", gch->used() / K, gch->capacity() / K); } } @@ -879,8 +879,8 @@ bool res = (available >= av_promo) || (available >= max_promotion_in_bytes); if (Verbose && PrintGCDetails) { gclog_or_tty->print_cr( - "CMS: promo attempt is%s safe: available("SIZE_FORMAT") %s av_promo("SIZE_FORMAT")," - "max_promo("SIZE_FORMAT")", + "CMS: promo attempt is%s safe: available(" SIZE_FORMAT ") %s av_promo(" SIZE_FORMAT ")," + "max_promo(" SIZE_FORMAT ")", res? "":" not", available, res? ">=":"<", av_promo, max_promotion_in_bytes); } @@ -966,8 +966,8 @@ desired_free_percentage); gclog_or_tty->print_cr(" Maximum free fraction %f", maximum_free_percentage); - gclog_or_tty->print_cr(" Capactiy "SIZE_FORMAT, capacity()/1000); - gclog_or_tty->print_cr(" Desired capacity "SIZE_FORMAT, + gclog_or_tty->print_cr(" Capactiy " SIZE_FORMAT, capacity()/1000); + gclog_or_tty->print_cr(" Desired capacity " SIZE_FORMAT, desired_capacity/1000); int prev_level = level() - 1; if (prev_level >= 0) { @@ -975,14 +975,14 @@ GenCollectedHeap* gch = GenCollectedHeap::heap(); Generation* prev_gen = gch->_gens[prev_level]; prev_size = prev_gen->capacity(); - gclog_or_tty->print_cr(" Younger gen size "SIZE_FORMAT, + gclog_or_tty->print_cr(" Younger gen size " SIZE_FORMAT, prev_size/1000); } - gclog_or_tty->print_cr(" unsafe_max_alloc_nogc "SIZE_FORMAT, + gclog_or_tty->print_cr(" unsafe_max_alloc_nogc " SIZE_FORMAT, unsafe_max_alloc_nogc()/1000); - gclog_or_tty->print_cr(" contiguous available "SIZE_FORMAT, + gclog_or_tty->print_cr(" contiguous available " SIZE_FORMAT, contiguous_available()/1000); - gclog_or_tty->print_cr(" Expand by "SIZE_FORMAT" (bytes)", + gclog_or_tty->print_cr(" Expand by " SIZE_FORMAT " (bytes)", expand_bytes); } // safe if expansion fails @@ -1513,8 +1513,8 @@ stats().print_on(gclog_or_tty); gclog_or_tty->print_cr("time_until_cms_gen_full %3.7f", stats().time_until_cms_gen_full()); - gclog_or_tty->print_cr("free="SIZE_FORMAT, _cmsGen->free()); - gclog_or_tty->print_cr("contiguous_available="SIZE_FORMAT, + gclog_or_tty->print_cr("free=" SIZE_FORMAT, _cmsGen->free()); + gclog_or_tty->print_cr("contiguous_available=" SIZE_FORMAT, _cmsGen->contiguous_available()); gclog_or_tty->print_cr("promotion_rate=%g", stats().promotion_rate()); gclog_or_tty->print_cr("cms_allocation_rate=%g", stats().cms_allocation_rate()); @@ -2792,8 +2792,8 @@ assert(_numObjectsPromoted == 0, "check"); assert(_numWordsPromoted == 0, "check"); if (Verbose && PrintGC) { - gclog_or_tty->print("Allocated "SIZE_FORMAT" objects, " - SIZE_FORMAT" bytes concurrently", + gclog_or_tty->print("Allocated " SIZE_FORMAT " objects, " + SIZE_FORMAT " bytes concurrently", _numObjectsAllocated, _numWordsAllocated*sizeof(HeapWord)); } _numObjectsAllocated = 0; @@ -2879,8 +2879,8 @@ assert(_numObjectsAllocated == 0, "check"); assert(_numWordsAllocated == 0, "check"); if (Verbose && PrintGC) { - gclog_or_tty->print("Promoted "SIZE_FORMAT" objects, " - SIZE_FORMAT" bytes", + gclog_or_tty->print("Promoted " SIZE_FORMAT " objects, " + SIZE_FORMAT " bytes", _numObjectsPromoted, _numWordsPromoted*sizeof(HeapWord)); } _numObjectsPromoted = 0; @@ -2890,7 +2890,7 @@ if (PrintGC && Verbose) { // Call down the chain in contiguous_available needs the freelistLock // so print this out before releasing the freeListLock. - gclog_or_tty->print(" Contiguous available "SIZE_FORMAT" bytes ", + gclog_or_tty->print(" Contiguous available " SIZE_FORMAT " bytes ", contiguous_available()); } } @@ -2978,7 +2978,7 @@ HeapWord* addr = _marks->offsetToHeapWord(offset); if (!_marks->isMarked(addr)) { oop(addr)->print_on(gclog_or_tty); - gclog_or_tty->print_cr(" ("INTPTR_FORMAT" should have been marked)", addr); + gclog_or_tty->print_cr(" (" INTPTR_FORMAT " should have been marked)", addr); _failed = true; } return true; @@ -5039,7 +5039,7 @@ SpecializationStats::clear(); if (PrintGCDetails) { - gclog_or_tty->print("[YG occupancy: "SIZE_FORMAT" K ("SIZE_FORMAT" K)]", + gclog_or_tty->print("[YG occupancy: " SIZE_FORMAT " K (" SIZE_FORMAT " K)]", _young_gen->used() / K, _young_gen->capacity() / K); } @@ -5172,8 +5172,8 @@ if (ser_ovflw > 0) { if (PrintCMSStatistics != 0) { gclog_or_tty->print_cr("Marking stack overflow (benign) " - "(pmc_pc="SIZE_FORMAT", pmc_rm="SIZE_FORMAT", kac="SIZE_FORMAT - ", kac_preclean="SIZE_FORMAT")", + "(pmc_pc=" SIZE_FORMAT ", pmc_rm=" SIZE_FORMAT ", kac=" SIZE_FORMAT + ", kac_preclean=" SIZE_FORMAT ")", _ser_pmc_preclean_ovflw, _ser_pmc_remark_ovflw, _ser_kac_ovflw, _ser_kac_preclean_ovflw); } @@ -5186,7 +5186,7 @@ if (_par_pmc_remark_ovflw > 0 || _par_kac_ovflw > 0) { if (PrintCMSStatistics != 0) { gclog_or_tty->print_cr("Work queue overflow (benign) " - "(pmc_rm="SIZE_FORMAT", kac="SIZE_FORMAT")", + "(pmc_rm=" SIZE_FORMAT ", kac=" SIZE_FORMAT ")", _par_pmc_remark_ovflw, _par_kac_ovflw); } _par_pmc_remark_ovflw = 0; @@ -5194,12 +5194,12 @@ } if (PrintCMSStatistics != 0) { if (_markStack._hit_limit > 0) { - gclog_or_tty->print_cr(" (benign) Hit max stack size limit ("SIZE_FORMAT")", + gclog_or_tty->print_cr(" (benign) Hit max stack size limit (" SIZE_FORMAT ")", _markStack._hit_limit); } if (_markStack._failed_double > 0) { - gclog_or_tty->print_cr(" (benign) Failed stack doubling ("SIZE_FORMAT")," - " current capacity "SIZE_FORMAT, + gclog_or_tty->print_cr(" (benign) Failed stack doubling (" SIZE_FORMAT ")," + " current capacity " SIZE_FORMAT, _markStack._failed_double, _markStack.capacity()); } @@ -5963,7 +5963,7 @@ &markFromDirtyCardsClosure); verify_work_stacks_empty(); if (PrintCMSStatistics != 0) { - gclog_or_tty->print(" (re-scanned "SIZE_FORMAT" dirty cards in cms gen) ", + gclog_or_tty->print(" (re-scanned " SIZE_FORMAT " dirty cards in cms gen) ", markFromDirtyCardsClosure.num_dirty_cards()); } } @@ -6829,7 +6829,7 @@ size_t start_ofs = heapWordToOffset(mr.start()); // Make sure that end() is appropriately aligned assert(mr.end() == (HeapWord*)round_to((intptr_t)mr.end(), - (1 << (_shifter+LogHeapWordSize))), + ((intptr_t) 1 << (_shifter+LogHeapWordSize))), "Misaligned mr.end()"); size_t end_ofs = heapWordToOffset(mr.end()); assert(end_ofs > start_ofs, "Should mark at least one bit"); @@ -6893,8 +6893,8 @@ } else if (_failed_double++ == 0 && !CMSConcurrentMTEnabled && PrintGCDetails) { // Failed to double capacity, continue; // we print a detail message only once per CMS cycle. - gclog_or_tty->print(" (benign) Failed to expand marking stack from "SIZE_FORMAT"K to " - SIZE_FORMAT"K", + gclog_or_tty->print(" (benign) Failed to expand marking stack from " SIZE_FORMAT "K to " + SIZE_FORMAT "K", _capacity / K, new_capacity / K); } } @@ -8216,25 +8216,25 @@ ShouldNotReachHere(); } if (Verbose && PrintGC) { - gclog_or_tty->print("Collected "SIZE_FORMAT" objects, " SIZE_FORMAT " bytes", + gclog_or_tty->print("Collected " SIZE_FORMAT " objects, " SIZE_FORMAT " bytes", _numObjectsFreed, _numWordsFreed*sizeof(HeapWord)); - gclog_or_tty->print_cr("\nLive "SIZE_FORMAT" objects, " - SIZE_FORMAT" bytes " - "Already free "SIZE_FORMAT" objects, "SIZE_FORMAT" bytes", + gclog_or_tty->print_cr("\nLive " SIZE_FORMAT " objects, " + SIZE_FORMAT " bytes " + "Already free " SIZE_FORMAT " objects, " SIZE_FORMAT " bytes", _numObjectsLive, _numWordsLive*sizeof(HeapWord), _numObjectsAlreadyFree, _numWordsAlreadyFree*sizeof(HeapWord)); size_t totalBytes = (_numWordsFreed + _numWordsLive + _numWordsAlreadyFree) * sizeof(HeapWord); - gclog_or_tty->print_cr("Total sweep: "SIZE_FORMAT" bytes", totalBytes); + gclog_or_tty->print_cr("Total sweep: " SIZE_FORMAT " bytes", totalBytes); if (PrintCMSStatistics && CMSVerifyReturnedBytes) { size_t indexListReturnedBytes = _sp->sumIndexedFreeListArrayReturnedBytes(); size_t dict_returned_bytes = _sp->dictionary()->sum_dict_returned_bytes(); size_t returned_bytes = indexListReturnedBytes + dict_returned_bytes; - gclog_or_tty->print("Returned "SIZE_FORMAT" bytes", returned_bytes); - gclog_or_tty->print(" Indexed List Returned "SIZE_FORMAT" bytes", + gclog_or_tty->print("Returned " SIZE_FORMAT " bytes", returned_bytes); + gclog_or_tty->print(" Indexed List Returned " SIZE_FORMAT " bytes", indexListReturnedBytes); - gclog_or_tty->print_cr(" Dictionary Returned "SIZE_FORMAT" bytes", + gclog_or_tty->print_cr(" Dictionary Returned " SIZE_FORMAT " bytes", dict_returned_bytes); } } @@ -8313,13 +8313,13 @@ // coalesced chunk to the appropriate free list. if (inFreeRange()) { assert(freeFinger() >= _sp->bottom() && freeFinger() < _limit, - err_msg("freeFinger() " PTR_FORMAT" is out-of-bounds", freeFinger())); + err_msg("freeFinger() " PTR_FORMAT " is out-of-bounds", freeFinger())); flush_cur_free_chunk(freeFinger(), pointer_delta(addr, freeFinger())); if (CMSTraceSweeper) { gclog_or_tty->print("Sweep: last chunk: "); - gclog_or_tty->print("put_free_blk 0x%x ("SIZE_FORMAT") " - "[coalesced:"SIZE_FORMAT"]\n", + gclog_or_tty->print("put_free_blk 0x%x (" SIZE_FORMAT ") " + "[coalesced:" SIZE_FORMAT "]\n", freeFinger(), pointer_delta(addr, freeFinger()), lastFreeRangeCoalesced()); }
--- a/src/share/vm/gc_implementation/g1/collectionSetChooser.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/collectionSetChooser.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -117,7 +117,7 @@ } guarantee(sum_of_reclaimable_bytes == _remaining_reclaimable_bytes, err_msg("reclaimable bytes inconsistent, " - "remaining: "SIZE_FORMAT" sum: "SIZE_FORMAT, + "remaining: " SIZE_FORMAT " sum: " SIZE_FORMAT, _remaining_reclaimable_bytes, sum_of_reclaimable_bytes)); } #endif // !PRODUCT
--- a/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/collectionSetChooser.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -92,7 +92,7 @@ regions_at_put(_curr_index, NULL); assert(hr->reclaimable_bytes() <= _remaining_reclaimable_bytes, err_msg("remaining reclaimable bytes inconsistent " - "from region: "SIZE_FORMAT" remaining: "SIZE_FORMAT, + "from region: " SIZE_FORMAT " remaining: " SIZE_FORMAT, hr->reclaimable_bytes(), _remaining_reclaimable_bytes)); _remaining_reclaimable_bytes -= hr->reclaimable_bytes(); _curr_index += 1;
--- a/src/share/vm/gc_implementation/g1/concurrentMark.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/concurrentMark.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -284,7 +284,7 @@ if (PrintGCDetails && Verbose) { // Failed to double capacity, continue; gclog_or_tty->print(" (benign) Failed to expand marking stack capacity from " - SIZE_FORMAT"K to " SIZE_FORMAT"K", + SIZE_FORMAT "K to " SIZE_FORMAT "K", _capacity / K, new_capacity / K); } } @@ -581,7 +581,7 @@ _verbose_level = verbose_level; if (verbose_low()) { - gclog_or_tty->print_cr("[global] init, heap start = "PTR_FORMAT", " + gclog_or_tty->print_cr("[global] init, heap start = " PTR_FORMAT", " "heap end = " INTPTR_FORMAT, p2i(_heap_start), p2i(_heap_end)); } @@ -837,7 +837,7 @@ // in a STW phase. assert(!concurrent_marking_in_progress(), "invariant"); assert(out_of_regions(), - err_msg("only way to get here: _finger: "PTR_FORMAT", _heap_end: "PTR_FORMAT, + err_msg("only way to get here: _finger: " PTR_FORMAT ", _heap_end: " PTR_FORMAT, p2i(_finger), p2i(_heap_end))); } } @@ -1452,7 +1452,7 @@ assert(start <= hr->end() && start <= ntams && ntams <= hr->end(), err_msg("Preconditions not met - " - "start: "PTR_FORMAT", ntams: "PTR_FORMAT", end: "PTR_FORMAT, + "start: " PTR_FORMAT ", ntams: " PTR_FORMAT ", end: " PTR_FORMAT, p2i(start), p2i(ntams), p2i(hr->end()))); // Find the first marked object at or after "start". @@ -1769,10 +1769,10 @@ } assert(end_idx <= _card_bm->size(), - err_msg("oob: end_idx= "SIZE_FORMAT", bitmap size= "SIZE_FORMAT, + err_msg("oob: end_idx= " SIZE_FORMAT ", bitmap size= " SIZE_FORMAT, end_idx, _card_bm->size())); assert(start_idx < _card_bm->size(), - err_msg("oob: start_idx= "SIZE_FORMAT", bitmap size= "SIZE_FORMAT, + err_msg("oob: start_idx= " SIZE_FORMAT ", bitmap size= " SIZE_FORMAT, start_idx, _card_bm->size())); _cm->set_card_bitmap_range(_card_bm, start_idx, end_idx, true /* is_par */); @@ -2277,7 +2277,7 @@ oop obj = oopDesc::load_decode_heap_oop(p); if (_cm->verbose_high()) { gclog_or_tty->print_cr("\t[%u] we're looking at location " - "*"PTR_FORMAT" = "PTR_FORMAT, + "*" PTR_FORMAT " = " PTR_FORMAT, _task->worker_id(), p2i(p), p2i((void*) obj)); } @@ -2846,7 +2846,7 @@ } } - _out->print_cr(" "PTR_FORMAT": "PTR_FORMAT"%s%s", + _out->print_cr(" " PTR_FORMAT ": " PTR_FORMAT "%s%s", p2i(p), p2i((void*) obj), str, str2); } }; @@ -2873,7 +2873,7 @@ bool print_it = _all || over_tams || marked; if (print_it) { - _out->print_cr(" "PTR_FORMAT"%s", + _out->print_cr(" " PTR_FORMAT "%s", p2i((void *)o), (over_tams) ? " >" : (marked) ? " M" : ""); PrintReachableOopClosure oopCl(_out, _vo, _all); o->oop_iterate_no_header(&oopCl); @@ -2894,7 +2894,7 @@ HeapWord* e = hr->end(); HeapWord* t = hr->top(); HeapWord* p = _g1h->top_at_mark_start(hr, _vo); - _out->print_cr("** ["PTR_FORMAT", "PTR_FORMAT"] top: "PTR_FORMAT" " + _out->print_cr("** [" PTR_FORMAT ", " PTR_FORMAT "] top: " PTR_FORMAT " " "TAMS: " PTR_FORMAT, p2i(b), p2i(e), p2i(t), p2i(p)); _out->cr(); @@ -3018,9 +3018,9 @@ HeapWord* limit = curr_region->next_top_at_mark_start(); if (verbose_low()) { - gclog_or_tty->print_cr("[%u] curr_region = "PTR_FORMAT" " - "["PTR_FORMAT", "PTR_FORMAT"), " - "limit = "PTR_FORMAT, + gclog_or_tty->print_cr("[%u] curr_region = " PTR_FORMAT " " + "[" PTR_FORMAT ", " PTR_FORMAT "), " + "limit = " PTR_FORMAT, worker_id, p2i(curr_region), p2i(bottom), p2i(end), p2i(limit)); } @@ -3035,7 +3035,7 @@ if (limit > bottom) { if (verbose_low()) { - gclog_or_tty->print_cr("[%u] region "PTR_FORMAT" is not empty, " + gclog_or_tty->print_cr("[%u] region " PTR_FORMAT " is not empty, " "returning it ", worker_id, p2i(curr_region)); } return curr_region; @@ -3043,7 +3043,7 @@ assert(limit == bottom, "the region limit should be at bottom"); if (verbose_low()) { - gclog_or_tty->print_cr("[%u] region "PTR_FORMAT" is empty, " + gclog_or_tty->print_cr("[%u] region " PTR_FORMAT " is empty, " "returning NULL", worker_id, p2i(curr_region)); } // we return NULL and the caller should try calling @@ -3055,13 +3055,13 @@ if (verbose_low()) { if (curr_region == NULL) { gclog_or_tty->print_cr("[%u] found uncommitted region, moving finger, " - "global finger = "PTR_FORMAT", " - "our finger = "PTR_FORMAT, + "global finger = " PTR_FORMAT ", " + "our finger = " PTR_FORMAT, worker_id, p2i(_finger), p2i(finger)); } else { gclog_or_tty->print_cr("[%u] somebody else moved the finger, " - "global finger = "PTR_FORMAT", " - "our finger = "PTR_FORMAT, + "global finger = " PTR_FORMAT ", " + "our finger = " PTR_FORMAT, worker_id, p2i(_finger), p2i(finger)); } } @@ -3097,7 +3097,7 @@ void do_object_work(oop obj) { guarantee(!_g1h->obj_in_cs(obj), - err_msg("obj: "PTR_FORMAT" in CSet, phase: %s, info: %d", + err_msg("obj: " PTR_FORMAT " in CSet, phase: %s, info: %d", p2i((void*) obj), phase_str(), _info)); } @@ -3158,7 +3158,7 @@ // here. HeapRegion* global_hr = _g1h->heap_region_containing_raw(global_finger); guarantee(global_hr == NULL || global_finger == global_hr->bottom(), - err_msg("global finger: "PTR_FORMAT" region: "HR_FORMAT, + err_msg("global finger: " PTR_FORMAT " region: " HR_FORMAT, p2i(global_finger), HR_FORMAT_PARAMS(global_hr))); } @@ -3172,7 +3172,7 @@ HeapRegion* task_hr = _g1h->heap_region_containing_raw(task_finger); guarantee(task_hr == NULL || task_finger == task_hr->bottom() || !task_hr->in_collection_set(), - err_msg("task finger: "PTR_FORMAT" region: "HR_FORMAT, + err_msg("task finger: " PTR_FORMAT " region: " HR_FORMAT, p2i(task_finger), HR_FORMAT_PARAMS(task_hr))); } } @@ -3214,8 +3214,8 @@ assert(start <= limit && limit <= hr->top() && hr->top() <= hr->end(), err_msg("Preconditions not met - " - "start: "PTR_FORMAT", limit: "PTR_FORMAT", " - "top: "PTR_FORMAT", end: "PTR_FORMAT, + "start: " PTR_FORMAT ", limit: " PTR_FORMAT ", " + "top: " PTR_FORMAT ", end: " PTR_FORMAT, p2i(start), p2i(limit), p2i(hr->top()), p2i(hr->end()))); assert(hr->next_marked_bytes() == 0, "Precondition"); @@ -3494,7 +3494,7 @@ #ifndef PRODUCT // for debugging purposes void ConcurrentMark::print_finger() { - gclog_or_tty->print_cr("heap ["PTR_FORMAT", "PTR_FORMAT"), global finger = "PTR_FORMAT, + gclog_or_tty->print_cr("heap [" PTR_FORMAT ", " PTR_FORMAT "), global finger = " PTR_FORMAT, p2i(_heap_start), p2i(_heap_end), p2i(_finger)); for (uint i = 0; i < _max_worker_id; ++i) { gclog_or_tty->print(" %u: " PTR_FORMAT, i, p2i(_tasks[i]->finger())); @@ -3579,7 +3579,7 @@ "claim_region() should have filtered out continues humongous regions"); if (_cm->verbose_low()) { - gclog_or_tty->print_cr("[%u] setting up for region "PTR_FORMAT, + gclog_or_tty->print_cr("[%u] setting up for region " PTR_FORMAT, _worker_id, p2i(hr)); } @@ -3596,7 +3596,7 @@ if (limit == bottom) { if (_cm->verbose_low()) { gclog_or_tty->print_cr("[%u] found an empty region " - "["PTR_FORMAT", "PTR_FORMAT")", + "[" PTR_FORMAT ", " PTR_FORMAT ")", _worker_id, p2i(bottom), p2i(limit)); } // The region was collected underneath our feet. @@ -3628,7 +3628,7 @@ void CMTask::giveup_current_region() { assert(_curr_region != NULL, "invariant"); if (_cm->verbose_low()) { - gclog_or_tty->print_cr("[%u] giving up region "PTR_FORMAT, + gclog_or_tty->print_cr("[%u] giving up region " PTR_FORMAT, _worker_id, p2i(_curr_region)); } clear_region_fields(); @@ -3750,7 +3750,7 @@ if (_cm->verbose_medium()) { gclog_or_tty->print_cr("[%u] regular clock, interval = %1.2lfms, " - "scanned = "SIZE_FORMAT"%s, refs reached = "SIZE_FORMAT"%s", + "scanned = " SIZE_FORMAT "%s, refs reached = " SIZE_FORMAT "%s", _worker_id, last_interval_ms, _words_scanned, (_words_scanned >= _words_scanned_limit) ? " (*)" : "", @@ -3919,7 +3919,7 @@ statsOnly( ++_local_pops ); if (_cm->verbose_high()) { - gclog_or_tty->print_cr("[%u] popped "PTR_FORMAT, _worker_id, + gclog_or_tty->print_cr("[%u] popped " PTR_FORMAT, _worker_id, p2i((void*) obj)); } @@ -4272,8 +4272,8 @@ if (_cm->verbose_low()) { gclog_or_tty->print_cr("[%u] we're scanning part " - "["PTR_FORMAT", "PTR_FORMAT") " - "of region "HR_FORMAT, + "[" PTR_FORMAT ", " PTR_FORMAT ") " + "of region " HR_FORMAT, _worker_id, p2i(_finger), p2i(_region_limit), HR_FORMAT_PARAMS(_curr_region)); } @@ -4360,7 +4360,7 @@ if (_cm->verbose_low()) { gclog_or_tty->print_cr("[%u] we successfully claimed " - "region "PTR_FORMAT, + "region " PTR_FORMAT, _worker_id, p2i(claimed_region)); } @@ -4421,7 +4421,7 @@ if (_cm->try_stealing(_worker_id, &_hash_seed, obj)) { if (_cm->verbose_medium()) { - gclog_or_tty->print_cr("[%u] stolen "PTR_FORMAT" successfully", + gclog_or_tty->print_cr("[%u] stolen " PTR_FORMAT " successfully", _worker_id, p2i((void*) obj)); } @@ -4629,7 +4629,7 @@ // identify them easily in a large log file. #define G1PPRL_LINE_PREFIX "###" -#define G1PPRL_ADDR_BASE_FORMAT " "PTR_FORMAT"-"PTR_FORMAT +#define G1PPRL_ADDR_BASE_FORMAT " " PTR_FORMAT "-" PTR_FORMAT #ifdef _LP64 #define G1PPRL_ADDR_BASE_H_FORMAT " %37s" #else // _LP64 @@ -4639,16 +4639,16 @@ // For per-region info #define G1PPRL_TYPE_FORMAT " %-4s" #define G1PPRL_TYPE_H_FORMAT " %4s" -#define G1PPRL_BYTE_FORMAT " "SIZE_FORMAT_W(9) +#define G1PPRL_BYTE_FORMAT " " SIZE_FORMAT_W(9) #define G1PPRL_BYTE_H_FORMAT " %9s" #define G1PPRL_DOUBLE_FORMAT " %14.1f" #define G1PPRL_DOUBLE_H_FORMAT " %14s" // For summary info -#define G1PPRL_SUM_ADDR_FORMAT(tag) " "tag":"G1PPRL_ADDR_BASE_FORMAT -#define G1PPRL_SUM_BYTE_FORMAT(tag) " "tag": "SIZE_FORMAT -#define G1PPRL_SUM_MB_FORMAT(tag) " "tag": %1.2f MB" -#define G1PPRL_SUM_MB_PERC_FORMAT(tag) G1PPRL_SUM_MB_FORMAT(tag)" / %1.2f %%" +#define G1PPRL_SUM_ADDR_FORMAT(tag) " " tag ":" G1PPRL_ADDR_BASE_FORMAT +#define G1PPRL_SUM_BYTE_FORMAT(tag) " " tag ": " SIZE_FORMAT +#define G1PPRL_SUM_MB_FORMAT(tag) " " tag ": %1.2f MB" +#define G1PPRL_SUM_MB_PERC_FORMAT(tag) G1PPRL_SUM_MB_FORMAT(tag) " / %1.2f %%" G1PrintRegionLivenessInfoClosure:: G1PrintRegionLivenessInfoClosure(outputStream* out, const char* phase_name)
--- a/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/concurrentMark.inline.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -196,8 +196,8 @@ assert(_bmStartWord <= (addr) && (addr) < (_bmStartWord + _bmWordSize), \ "outside underlying space?"); \ assert(G1CollectedHeap::heap()->is_in_exact(addr), \ - err_msg("Trying to access not available bitmap "PTR_FORMAT \ - " corresponding to "PTR_FORMAT" (%u)", \ + err_msg("Trying to access not available bitmap " PTR_FORMAT \ + " corresponding to " PTR_FORMAT " (%u)", \ p2i(this), p2i(addr), G1CollectedHeap::heap()->addr_to_region(addr))); inline void CMBitMap::mark(HeapWord* addr) { @@ -343,7 +343,7 @@ inline void CMTask::deal_with_reference(oop obj) { if (_cm->verbose_high()) { - gclog_or_tty->print_cr("[%u] we're dealing with reference = "PTR_FORMAT, + gclog_or_tty->print_cr("[%u] we're dealing with reference = " PTR_FORMAT, _worker_id, p2i((void*) obj)); } @@ -392,7 +392,7 @@ // assert that word_size is under an upper bound which is its // containing region's capacity. assert(word_size * HeapWordSize <= hr->capacity(), - err_msg("size: "SIZE_FORMAT" capacity: "SIZE_FORMAT" "HR_FORMAT, + err_msg("size: " SIZE_FORMAT " capacity: " SIZE_FORMAT " " HR_FORMAT, word_size * HeapWordSize, hr->capacity(), HR_FORMAT_PARAMS(hr)));
--- a/src/share/vm/gc_implementation/g1/g1AllocRegion.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1AllocRegion.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -140,7 +140,7 @@ } void G1AllocRegion::fill_in_ext_msg(ar_ext_msg* msg, const char* message) { - msg->append("[%s] %s c: %u b: %s r: "PTR_FORMAT" u: "SIZE_FORMAT, + msg->append("[%s] %s c: %u b: %s r: " PTR_FORMAT " u: " SIZE_FORMAT, _name, message, _count, BOOL_TO_STR(_bot_updates), p2i(_alloc_region), _used_bytes_before); } @@ -217,7 +217,7 @@ if (G1_ALLOC_REGION_TRACING > 1) { if (result != NULL) { - jio_snprintf(rest_buffer, buffer_length, SIZE_FORMAT" "PTR_FORMAT, + jio_snprintf(rest_buffer, buffer_length, SIZE_FORMAT " " PTR_FORMAT, word_size, result); } else if (word_size != 0) { jio_snprintf(rest_buffer, buffer_length, SIZE_FORMAT, word_size);
--- a/src/share/vm/gc_implementation/g1/g1Allocator.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1Allocator.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -73,7 +73,7 @@ void decrease_used(size_t bytes) { assert(_summary_bytes_used >= bytes, - err_msg("invariant: _summary_bytes_used: "SIZE_FORMAT" should be >= bytes: "SIZE_FORMAT, + err_msg("invariant: _summary_bytes_used: " SIZE_FORMAT " should be >= bytes: " SIZE_FORMAT, _summary_bytes_used, bytes)); _summary_bytes_used -= bytes; }
--- a/src/share/vm/gc_implementation/g1/g1BiasedArray.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1BiasedArray.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -36,19 +36,19 @@ #ifndef PRODUCT void G1BiasedMappedArrayBase::verify_index(idx_t index) const { guarantee(_base != NULL, "Array not initialized"); - guarantee(index < length(), err_msg("Index out of bounds index: "SIZE_FORMAT" length: "SIZE_FORMAT, index, length())); + guarantee(index < length(), err_msg("Index out of bounds index: " SIZE_FORMAT " length: " SIZE_FORMAT, index, length())); } void G1BiasedMappedArrayBase::verify_biased_index(idx_t biased_index) const { guarantee(_biased_base != NULL, "Array not initialized"); guarantee(biased_index >= bias() && biased_index < (bias() + length()), - err_msg("Biased index out of bounds, index: "SIZE_FORMAT" bias: "SIZE_FORMAT" length: "SIZE_FORMAT, biased_index, bias(), length())); + err_msg("Biased index out of bounds, index: " SIZE_FORMAT " bias: " SIZE_FORMAT " length: " SIZE_FORMAT, biased_index, bias(), length())); } void G1BiasedMappedArrayBase::verify_biased_index_inclusive_end(idx_t biased_index) const { guarantee(_biased_base != NULL, "Array not initialized"); guarantee(biased_index >= bias() && biased_index <= (bias() + length()), - err_msg("Biased index out of inclusive bounds, index: "SIZE_FORMAT" bias: "SIZE_FORMAT" length: "SIZE_FORMAT, biased_index, bias(), length())); + err_msg("Biased index out of inclusive bounds, index: " SIZE_FORMAT " bias: " SIZE_FORMAT " length: " SIZE_FORMAT, biased_index, bias(), length())); } class TestMappedArray : public G1BiasedMappedArray<int> {
--- a/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1BlockOffsetTable.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -385,11 +385,11 @@ HeapWord* card_addr = _array->address_for_index(card); HeapWord* block_start = block_start_const(card_addr); if (block_start != obj_start) { - gclog_or_tty->print_cr("block start: "PTR_FORMAT" is incorrect - " - "card index: "SIZE_FORMAT" " - "card addr: "PTR_FORMAT" BOT entry: %u " - "obj: "PTR_FORMAT" word size: "SIZE_FORMAT" " - "cards: ["SIZE_FORMAT","SIZE_FORMAT"]", + gclog_or_tty->print_cr("block start: " PTR_FORMAT " is incorrect - " + "card index: " SIZE_FORMAT " " + "card addr: " PTR_FORMAT " BOT entry: %u " + "obj: " PTR_FORMAT " word size: " SIZE_FORMAT " " + "cards: [" SIZE_FORMAT "," SIZE_FORMAT "]", block_start, card, card_addr, _array->offset_array(card), obj_start, word_size, first_card, last_card); @@ -404,11 +404,11 @@ G1BlockOffsetArray::print_on(outputStream* out) { size_t from_index = _array->index_for(_bottom); size_t to_index = _array->index_for(_end); - out->print_cr(">> BOT for area ["PTR_FORMAT","PTR_FORMAT") " - "cards ["SIZE_FORMAT","SIZE_FORMAT")", + out->print_cr(">> BOT for area [" PTR_FORMAT "," PTR_FORMAT ") " + "cards [" SIZE_FORMAT "," SIZE_FORMAT ")", _bottom, _end, from_index, to_index); for (size_t i = from_index; i < to_index; ++i) { - out->print_cr(" entry "SIZE_FORMAT_W(8)" | "PTR_FORMAT" : %3u", + out->print_cr(" entry " SIZE_FORMAT_W(8) " | " PTR_FORMAT " : %3u", i, _array->address_for_index(i), (uint) _array->offset_array(i)); } @@ -488,7 +488,7 @@ void G1BlockOffsetArrayContigSpace::print_on(outputStream* out) { G1BlockOffsetArray::print_on(out); - out->print_cr(" next offset threshold: "PTR_FORMAT, _next_offset_threshold); - out->print_cr(" next offset index: "SIZE_FORMAT, _next_offset_index); + out->print_cr(" next offset threshold: " PTR_FORMAT, _next_offset_threshold); + out->print_cr(" next offset index: " SIZE_FORMAT, _next_offset_index); } #endif // !PRODUCT
--- a/src/share/vm/gc_implementation/g1/g1CardCounts.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1CardCounts.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -44,7 +44,7 @@ void G1CardCounts::clear_range(size_t from_card_num, size_t to_card_num) { if (has_count_table()) { assert(from_card_num < to_card_num, - err_msg("Wrong order? from: " SIZE_FORMAT ", to: "SIZE_FORMAT, + err_msg("Wrong order? from: " SIZE_FORMAT ", to: " SIZE_FORMAT, from_card_num, to_card_num)); Copy::fill_to_bytes(&_card_counts[from_card_num], (to_card_num - from_card_num)); } @@ -87,7 +87,7 @@ if (has_count_table()) { size_t card_num = ptr_2_card_num(card_ptr); assert(card_num < _reserved_max_card_num, - err_msg("Card "SIZE_FORMAT" outside of card counts table (max size "SIZE_FORMAT")", + err_msg("Card " SIZE_FORMAT " outside of card counts table (max size " SIZE_FORMAT ")", card_num, _reserved_max_card_num)); count = (uint) _card_counts[card_num]; if (count < G1ConcRSHotCardLimit) {
--- a/src/share/vm/gc_implementation/g1/g1CardCounts.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1CardCounts.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -91,7 +91,7 @@ jbyte* card_num_2_ptr(size_t card_num) { assert(card_num >= 0 && card_num < _reserved_max_card_num, - err_msg("card num out of range: "SIZE_FORMAT, card_num)); + err_msg("card num out of range: " SIZE_FORMAT, card_num)); return (jbyte*) (_ct_bot + card_num); }
--- a/src/share/vm/gc_implementation/g1/g1CodeCacheRemSet.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1CodeCacheRemSet.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -352,11 +352,11 @@ assert(set1.is_empty(), "Code root set must be initially empty but is not."); assert(G1CodeRootSet::static_mem_size() == sizeof(void*), - err_msg("The code root set's static memory usage is incorrect, "SIZE_FORMAT" bytes", G1CodeRootSet::static_mem_size())); + err_msg("The code root set's static memory usage is incorrect, " SIZE_FORMAT " bytes", G1CodeRootSet::static_mem_size())); set1.add((nmethod*)1); assert(set1.length() == 1, err_msg("Added exactly one element, but set contains " - SIZE_FORMAT" elements", set1.length())); + SIZE_FORMAT " elements", set1.length())); const size_t num_to_add = (size_t)G1CodeRootSet::Threshold + 1; @@ -365,14 +365,14 @@ } assert(set1.length() == 1, err_msg("Duplicate detection should not have increased the set size but " - "is "SIZE_FORMAT, set1.length())); + "is " SIZE_FORMAT, set1.length())); for (size_t i = 2; i <= num_to_add; i++) { set1.add((nmethod*)(uintptr_t)(i)); } assert(set1.length() == num_to_add, - err_msg("After adding in total "SIZE_FORMAT" distinct code roots, they " - "need to be in the set, but there are only "SIZE_FORMAT, + err_msg("After adding in total " SIZE_FORMAT " distinct code roots, they " + "need to be in the set, but there are only " SIZE_FORMAT, num_to_add, set1.length())); assert(CodeRootSetTable::_purge_list != NULL, "should have grown to large hashtable"); @@ -387,7 +387,7 @@ } } assert(num_popped == num_to_add, - err_msg("Managed to pop "SIZE_FORMAT" code roots, but only "SIZE_FORMAT" " + err_msg("Managed to pop " SIZE_FORMAT " code roots, but only " SIZE_FORMAT " " "were added", num_popped, num_to_add)); assert(CodeRootSetTable::_purge_list != NULL, "should have grown to large hashtable");
--- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -230,7 +230,7 @@ HeapRegion* last = NULL; while (curr != NULL) { if (!curr->is_young()) { - gclog_or_tty->print_cr("### YOUNG REGION "PTR_FORMAT"-"PTR_FORMAT" " + gclog_or_tty->print_cr("### YOUNG REGION " PTR_FORMAT "-" PTR_FORMAT " " "incorrectly tagged (y: %d, surv: %d)", curr->bottom(), curr->end(), curr->is_young(), curr->is_survivor()); @@ -359,7 +359,7 @@ if (curr == NULL) gclog_or_tty->print_cr(" empty"); while (curr != NULL) { - gclog_or_tty->print_cr(" "HR_FORMAT", P: "PTR_FORMAT ", N: "PTR_FORMAT", age: %4d", + gclog_or_tty->print_cr(" " HR_FORMAT ", P: " PTR_FORMAT ", N: " PTR_FORMAT ", age: %4d", HR_FORMAT_PARAMS(curr), curr->prev_top_at_mark_start(), curr->next_top_at_mark_start(), @@ -490,7 +490,7 @@ gclog_or_tty->print_cr("Log entries = %d, dirty cards = %d.", clear.num_processed(), orig_count); guarantee(redirty.num_processed() == clear.num_processed(), - err_msg("Redirtied "SIZE_FORMAT" cards, bug cleared "SIZE_FORMAT, + err_msg("Redirtied " SIZE_FORMAT " cards, bug cleared " SIZE_FORMAT, redirty.num_processed(), clear.num_processed())); CountNonCleanMemRegionClosure count3(this); @@ -528,7 +528,7 @@ HeapRegion* res = _hrm.allocate_free_region(is_old); if (G1ConcRegionFreeingVerbose) { gclog_or_tty->print_cr("G1ConcRegionFreeing [region alloc] : " - "allocated "HR_FORMAT" from secondary_free_list", + "allocated " HR_FORMAT " from secondary_free_list", HR_FORMAT_PARAMS(res)); } return res; @@ -1597,8 +1597,8 @@ // This assert only makes sense here, before we adjust them // with respect to the min and max heap size. assert(minimum_desired_capacity <= maximum_desired_capacity, - err_msg("minimum_desired_capacity = "SIZE_FORMAT", " - "maximum_desired_capacity = "SIZE_FORMAT, + err_msg("minimum_desired_capacity = " SIZE_FORMAT ", " + "maximum_desired_capacity = " SIZE_FORMAT, minimum_desired_capacity, maximum_desired_capacity)); // Should not be greater than the heap max size. No need to adjust @@ -2256,7 +2256,7 @@ virtual bool doHeapRegion(HeapRegion* hr) { unsigned region_gc_time_stamp = hr->get_gc_time_stamp(); if (_gc_time_stamp != region_gc_time_stamp) { - gclog_or_tty->print_cr("Region "HR_FORMAT" has GC time stamp = %d, " + gclog_or_tty->print_cr("Region " HR_FORMAT " has GC time stamp = %d, " "expected %d", HR_FORMAT_PARAMS(hr), region_gc_time_stamp, _gc_time_stamp); _failures = true; @@ -2679,7 +2679,7 @@ } else if (r->continuesHumongous()) { if (r->humongous_start_region() != _sh_region) { gclog_or_tty->print_cr("Region " HR_FORMAT ", " - "HS = "PTR_FORMAT", should be "PTR_FORMAT, + "HS = " PTR_FORMAT ", should be " PTR_FORMAT, HR_FORMAT_PARAMS(r), r->humongous_start_region(), _sh_region); @@ -2991,10 +2991,10 @@ if (!oopDesc::is_null(heap_oop)) { oop obj = oopDesc::decode_heap_oop_not_null(heap_oop); if (_g1h->is_obj_dead_cond(obj, _vo)) { - gclog_or_tty->print_cr("Root location "PTR_FORMAT" " - "points to dead obj "PTR_FORMAT, p, (void*) obj); + gclog_or_tty->print_cr("Root location " PTR_FORMAT " " + "points to dead obj " PTR_FORMAT, p, (void*) obj); if (_vo == VerifyOption_G1UseMarkWord) { - gclog_or_tty->print_cr(" Mark word: "PTR_FORMAT, (void*)(obj->mark())); + gclog_or_tty->print_cr(" Mark word: " PTR_FORMAT, (void*)(obj->mark())); } obj->print_on(gclog_or_tty); _failures = true; @@ -3041,9 +3041,9 @@ // Verify that the strong code root list for this region // contains the nmethod if (!hrrs->strong_code_roots_list_contains(_nm)) { - gclog_or_tty->print_cr("Code root location "PTR_FORMAT" " - "from nmethod "PTR_FORMAT" not in strong " - "code roots for region ["PTR_FORMAT","PTR_FORMAT")", + gclog_or_tty->print_cr("Code root location " PTR_FORMAT " " + "from nmethod " PTR_FORMAT " not in strong " + "code roots for region [" PTR_FORMAT "," PTR_FORMAT ")", p, _nm, hr->bottom(), hr->end()); _failures = true; } @@ -3173,7 +3173,7 @@ if (o != NULL) { HeapWord *start = (HeapWord *) o; size_t word_sz = o->size(); - gclog_or_tty->print("\nPrinting obj "PTR_FORMAT" of size " SIZE_FORMAT + gclog_or_tty->print("\nPrinting obj " PTR_FORMAT " of size " SIZE_FORMAT " isMarkedPrev %d isMarkedNext %d isAllocSince %d\n", (void*) o, word_sz, _g1->isMarkedPrev(o), @@ -3184,7 +3184,7 @@ int *val; for (cur = start; cur < end; cur++) { val = (int *) cur; - gclog_or_tty->print("\t "PTR_FORMAT":"PTR_FORMAT"\n", val, *val); + gclog_or_tty->print("\t " PTR_FORMAT ":" PTR_FORMAT "\n", val, *val); } } } @@ -3219,9 +3219,9 @@ r->object_iterate(¬_dead_yet_cl); if (_vo != VerifyOption_G1UseNextMarking) { if (r->max_live_bytes() < not_dead_yet_cl.live_bytes()) { - gclog_or_tty->print_cr("["PTR_FORMAT","PTR_FORMAT"] " - "max_live_bytes "SIZE_FORMAT" " - "< calculated "SIZE_FORMAT, + gclog_or_tty->print_cr("[" PTR_FORMAT "," PTR_FORMAT "] " + "max_live_bytes " SIZE_FORMAT " " + "< calculated " SIZE_FORMAT, r->bottom(), r->end(), r->max_live_bytes(), not_dead_yet_cl.live_bytes()); @@ -3533,7 +3533,7 @@ size_t occupied = hrrs->occupied(); _occupied_sum += occupied; - gclog_or_tty->print_cr("Printing RSet for region "HR_FORMAT, + gclog_or_tty->print_cr("Printing RSet for region " HR_FORMAT, HR_FORMAT_PARAMS(r)); if (occupied == 0) { gclog_or_tty->print_cr(" RSet is empty"); @@ -3552,7 +3552,7 @@ } ~PrintRSetsClosure() { - gclog_or_tty->print_cr("Occupied Sum: "SIZE_FORMAT, _occupied_sum); + gclog_or_tty->print_cr("Occupied Sum: " SIZE_FORMAT, _occupied_sum); gclog_or_tty->print_cr("========================================"); gclog_or_tty->cr(); } @@ -4416,7 +4416,7 @@ G1CollectedHeap::handle_evacuation_failure_par(G1ParScanThreadState* _par_scan_state, oop old) { assert(obj_in_cs(old), - err_msg("obj: "PTR_FORMAT" should still be in the CSet", + err_msg("obj: " PTR_FORMAT " should still be in the CSet", (HeapWord*) old)); markOop m = old->mark(); oop forward_ptr = old->forward_to_atomic(old); @@ -4450,7 +4450,7 @@ // space for this object (old != forward_ptr) or they beat us in // self-forwarding it (old == forward_ptr). assert(old == forward_ptr || !obj_in_cs(forward_ptr), - err_msg("obj: "PTR_FORMAT" forwarded to: "PTR_FORMAT" " + err_msg("obj: " PTR_FORMAT " forwarded to: " PTR_FORMAT " " "should not be in the CSet", (HeapWord*) old, (HeapWord*) forward_ptr)); return forward_ptr; @@ -4837,16 +4837,16 @@ ~G1StringSymbolTableUnlinkTask() { guarantee(!_process_strings || !_do_in_parallel || StringTable::parallel_claimed_index() >= _initial_string_table_size, - err_msg("claim value "INT32_FORMAT" after unlink less than initial string table size "INT32_FORMAT, + err_msg("claim value " INT32_FORMAT " after unlink less than initial string table size " INT32_FORMAT, StringTable::parallel_claimed_index(), _initial_string_table_size)); guarantee(!_process_symbols || !_do_in_parallel || SymbolTable::parallel_claimed_index() >= _initial_symbol_table_size, - err_msg("claim value "INT32_FORMAT" after unlink less than initial symbol table size "INT32_FORMAT, + err_msg("claim value " INT32_FORMAT " after unlink less than initial symbol table size " INT32_FORMAT, SymbolTable::parallel_claimed_index(), _initial_symbol_table_size)); if (G1TraceStringSymbolTableScrubbing) { gclog_or_tty->print_cr("Cleaned string and symbol table, " - "strings: "SIZE_FORMAT" processed, "SIZE_FORMAT" removed, " - "symbols: "SIZE_FORMAT" processed, "SIZE_FORMAT" removed", + "strings: " SIZE_FORMAT " processed, " SIZE_FORMAT " removed, " + "symbols: " SIZE_FORMAT " processed, " SIZE_FORMAT " removed", strings_processed(), strings_removed(), symbols_processed(), symbols_removed()); } @@ -6029,13 +6029,13 @@ bool G1CollectedHeap::verify_no_bits_over_tams(const char* bitmap_name, CMBitMapRO* bitmap, HeapWord* tams, HeapWord* end) { guarantee(tams <= end, - err_msg("tams: "PTR_FORMAT" end: "PTR_FORMAT, tams, end)); + err_msg("tams: " PTR_FORMAT " end: " PTR_FORMAT, tams, end)); HeapWord* result = bitmap->getNextMarkedWordAddress(tams, end); if (result < end) { gclog_or_tty->cr(); - gclog_or_tty->print_cr("## wrong marked address on %s bitmap: "PTR_FORMAT, + gclog_or_tty->print_cr("## wrong marked address on %s bitmap: " PTR_FORMAT, bitmap_name, result); - gclog_or_tty->print_cr("## %s tams: "PTR_FORMAT" end: "PTR_FORMAT, + gclog_or_tty->print_cr("## %s tams: " PTR_FORMAT " end: " PTR_FORMAT, bitmap_name, tams, end); return false; } @@ -6061,7 +6061,7 @@ res_n = verify_no_bits_over_tams("next", next_bitmap, ntams, end); } if (!res_p || !res_n) { - gclog_or_tty->print_cr("#### Bitmap verification failed for "HR_FORMAT, + gclog_or_tty->print_cr("#### Bitmap verification failed for " HR_FORMAT, HR_FORMAT_PARAMS(hr)); gclog_or_tty->print_cr("#### Caller: %s", caller); return false; @@ -6373,7 +6373,7 @@ !r->rem_set()->is_empty()) { if (G1TraceEagerReclaimHumongousObjects) { - gclog_or_tty->print_cr("Live humongous region %u size "SIZE_FORMAT" start "PTR_FORMAT" length "UINT32_FORMAT" with remset "SIZE_FORMAT" code roots "SIZE_FORMAT" is marked %d reclaim candidate %d type array %d", + gclog_or_tty->print_cr("Live humongous region %u size " SIZE_FORMAT " start " PTR_FORMAT " length " UINT32_FORMAT " with remset " SIZE_FORMAT " code roots " SIZE_FORMAT " is marked %d reclaim candidate %d type array %d", region_idx, obj->size()*HeapWordSize, r->bottom(), @@ -6395,7 +6395,7 @@ r->bottom())); if (G1TraceEagerReclaimHumongousObjects) { - gclog_or_tty->print_cr("Dead humongous region %u size "SIZE_FORMAT" start "PTR_FORMAT" length "UINT32_FORMAT" with remset "SIZE_FORMAT" code roots "SIZE_FORMAT" is marked %d reclaim candidate %d type array %d", + gclog_or_tty->print_cr("Dead humongous region %u size " SIZE_FORMAT " start " PTR_FORMAT " length " UINT32_FORMAT " with remset " SIZE_FORMAT " code roots " SIZE_FORMAT " is marked %d reclaim candidate %d type array %d", region_idx, obj->size()*HeapWordSize, r->bottom(), @@ -6551,7 +6551,7 @@ NoYoungRegionsClosure() : _success(true) { } bool doHeapRegion(HeapRegion* r) { if (r->is_young()) { - gclog_or_tty->print_cr("Region ["PTR_FORMAT", "PTR_FORMAT") tagged as young", + gclog_or_tty->print_cr("Region [" PTR_FORMAT ", " PTR_FORMAT ") tagged as young", r->bottom(), r->end()); _success = false; } @@ -6680,7 +6680,7 @@ } assert(_allocator->used_unlocked() == recalculate_used(), err_msg("inconsistent _allocator->used_unlocked(), " - "value: "SIZE_FORMAT" recalculated: "SIZE_FORMAT, + "value: " SIZE_FORMAT " recalculated: " SIZE_FORMAT, _allocator->used_unlocked(), recalculate_used())); } @@ -6901,8 +6901,8 @@ oop obj = oopDesc::decode_heap_oop_not_null(heap_oop); HeapRegion* hr = _g1h->heap_region_containing(obj); assert(!hr->continuesHumongous(), - err_msg("trying to add code root "PTR_FORMAT" in continuation of humongous region "HR_FORMAT - " starting at "HR_FORMAT, + err_msg("trying to add code root " PTR_FORMAT " in continuation of humongous region " HR_FORMAT + " starting at " HR_FORMAT, _nm, HR_FORMAT_PARAMS(hr), HR_FORMAT_PARAMS(hr->humongous_start_region()))); // HeapRegion::add_strong_code_root_locked() avoids adding duplicate entries. @@ -6928,8 +6928,8 @@ oop obj = oopDesc::decode_heap_oop_not_null(heap_oop); HeapRegion* hr = _g1h->heap_region_containing(obj); assert(!hr->continuesHumongous(), - err_msg("trying to remove code root "PTR_FORMAT" in continuation of humongous region "HR_FORMAT - " starting at "HR_FORMAT, + err_msg("trying to remove code root " PTR_FORMAT " in continuation of humongous region " HR_FORMAT + " starting at " HR_FORMAT, _nm, HR_FORMAT_PARAMS(hr), HR_FORMAT_PARAMS(hr->humongous_start_region()))); hr->remove_strong_code_root(_nm);
--- a/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1CollectedHeap.inline.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -81,7 +81,7 @@ inline uint G1CollectedHeap::addr_to_region(HeapWord* addr) const { assert(is_in_reserved(addr), - err_msg("Cannot calculate region index for address "PTR_FORMAT" that is outside of the heap ["PTR_FORMAT", "PTR_FORMAT")", + err_msg("Cannot calculate region index for address " PTR_FORMAT " that is outside of the heap [" PTR_FORMAT ", " PTR_FORMAT ")", p2i(addr), p2i(_reserved.start()), p2i(_reserved.end()))); return (uint)(pointer_delta(addr, _reserved.start(), sizeof(uint8_t)) >> HeapRegion::LogOfHRGrainBytes); } @@ -94,7 +94,7 @@ inline HeapRegion* G1CollectedHeap::heap_region_containing_raw(const T addr) const { assert(addr != NULL, "invariant"); assert(is_in_g1_reserved((const void*) addr), - err_msg("Address "PTR_FORMAT" is outside of the heap ranging from ["PTR_FORMAT" to "PTR_FORMAT")", + err_msg("Address " PTR_FORMAT " is outside of the heap ranging from [" PTR_FORMAT " to " PTR_FORMAT ")", p2i((void*)addr), p2i(g1_reserved().start()), p2i(g1_reserved().end()))); return _hrm.addr_to_region((HeapWord*) addr); }
--- a/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1CollectorPolicy.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -199,7 +199,7 @@ const size_t region_size = HeapRegion::GrainWords; if (YoungPLABSize > region_size || OldPLABSize > region_size) { char buffer[128]; - jio_snprintf(buffer, sizeof(buffer), "%sPLABSize should be at most "SIZE_FORMAT, + jio_snprintf(buffer, sizeof(buffer), "%sPLABSize should be at most " SIZE_FORMAT, OldPLABSize > region_size ? "Old" : "Young", region_size); vm_exit_during_initialization(buffer); } @@ -846,7 +846,7 @@ update_survivors_policy(); assert(_g1->used() == _g1->recalculate_used(), - err_msg("sanity, used: "SIZE_FORMAT" recalculate_used: "SIZE_FORMAT, + err_msg("sanity, used: " SIZE_FORMAT " recalculate_used: " SIZE_FORMAT, _g1->used(), _g1->recalculate_used())); double s_w_t_ms = (start_time_sec - _stop_world_start) * 1000.0; @@ -1231,10 +1231,10 @@ (_young_list_target_length * HeapRegion::GrainBytes) - survivor_used_bytes_after_gc; gclog_or_tty->print( - " [Eden: "EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")->"EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT") " - "Survivors: "EXT_SIZE_FORMAT"->"EXT_SIZE_FORMAT" " - "Heap: "EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")->" - EXT_SIZE_FORMAT"("EXT_SIZE_FORMAT")]", + " [Eden: " EXT_SIZE_FORMAT "(" EXT_SIZE_FORMAT ")->" EXT_SIZE_FORMAT "(" EXT_SIZE_FORMAT ") " + "Survivors: " EXT_SIZE_FORMAT "->" EXT_SIZE_FORMAT " " + "Heap: " EXT_SIZE_FORMAT "(" EXT_SIZE_FORMAT ")->" + EXT_SIZE_FORMAT "(" EXT_SIZE_FORMAT ")]", EXT_SIZE_PARAMS(_eden_used_bytes_before_gc), EXT_SIZE_PARAMS(_eden_capacity_bytes_before_gc), EXT_SIZE_PARAMS(eden_used_bytes_after_gc), @@ -1851,7 +1851,7 @@ while (csr != NULL) { HeapRegion* next = csr->next_in_collection_set(); assert(csr->in_collection_set(), "bad CS"); - st->print_cr(" "HR_FORMAT", P: "PTR_FORMAT "N: "PTR_FORMAT", age: %4d", + st->print_cr(" " HR_FORMAT ", P: " PTR_FORMAT "N: " PTR_FORMAT ", age: %4d", HR_FORMAT_PARAMS(csr), csr->prev_top_at_mark_start(), csr->next_top_at_mark_start(), csr->age_in_surv_rate_group_cond());
--- a/src/share/vm/gc_implementation/g1/g1ErgoVerbose.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1ErgoVerbose.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -121,15 +121,15 @@ // Single parameter format strings #define ergo_format_str(_name_) ", " _name_ ": %s" #define ergo_format_region(_name_) ", " _name_ ": %u regions" -#define ergo_format_byte(_name_) ", " _name_ ": "SIZE_FORMAT" bytes" +#define ergo_format_byte(_name_) ", " _name_ ": " SIZE_FORMAT " bytes" #define ergo_format_double(_name_) ", " _name_ ": %1.2f" #define ergo_format_perc(_name_) ", " _name_ ": %1.2f %%" #define ergo_format_ms(_name_) ", " _name_ ": %1.2f ms" -#define ergo_format_size(_name_) ", " _name_ ": "SIZE_FORMAT +#define ergo_format_size(_name_) ", " _name_ ": " SIZE_FORMAT // Double parameter format strings #define ergo_format_byte_perc(_name_) \ - ", " _name_ ": "SIZE_FORMAT" bytes (%1.2f %%)" + ", " _name_ ": " SIZE_FORMAT " bytes (%1.2f %%)" // Generates the format string #define ergo_format(_extra_format_) \
--- a/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1GCPhaseTimes.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -332,7 +332,7 @@ } void G1GCPhaseTimes::print_stats(int level, const char* str, size_t value) { - LineBuffer(level).append_and_print_cr("[%s: "SIZE_FORMAT"]", str, value); + LineBuffer(level).append_and_print_cr("[%s: " SIZE_FORMAT "]", str, value); } void G1GCPhaseTimes::print_stats(int level, const char* str, double value, uint workers) { @@ -452,7 +452,7 @@ if (phase->_thread_work_items != NULL) { LineBuffer buf2(phase->_thread_work_items->_indent_level); - buf2.append_and_print_cr("[%s: "SIZE_FORMAT"]", phase->_thread_work_items->_title, _phase_times->sum_thread_work_items(phase_id)); + buf2.append_and_print_cr("[%s: " SIZE_FORMAT "]", phase->_thread_work_items->_title, _phase_times->sum_thread_work_items(phase_id)); } }
--- a/src/share/vm/gc_implementation/g1/g1HRPrinter.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1HRPrinter.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -84,18 +84,18 @@ if (type_str != NULL) { if (top != NULL) { - gclog_or_tty->print_cr(G1HR_PREFIX" %s(%s) "PTR_FORMAT" "PTR_FORMAT, + gclog_or_tty->print_cr(G1HR_PREFIX " %s(%s) " PTR_FORMAT " " PTR_FORMAT, action_str, type_str, bottom, top); } else { - gclog_or_tty->print_cr(G1HR_PREFIX" %s(%s) "PTR_FORMAT, + gclog_or_tty->print_cr(G1HR_PREFIX " %s(%s) " PTR_FORMAT, action_str, type_str, bottom); } } else { if (top != NULL) { - gclog_or_tty->print_cr(G1HR_PREFIX" %s "PTR_FORMAT" "PTR_FORMAT, + gclog_or_tty->print_cr(G1HR_PREFIX " %s " PTR_FORMAT " " PTR_FORMAT, action_str, bottom, top); } else { - gclog_or_tty->print_cr(G1HR_PREFIX" %s "PTR_FORMAT, + gclog_or_tty->print_cr(G1HR_PREFIX " %s " PTR_FORMAT, action_str, bottom); } } @@ -104,11 +104,11 @@ void G1HRPrinter::print(ActionType action, HeapWord* bottom, HeapWord* end) { const char* action_str = action_name(action); - gclog_or_tty->print_cr(G1HR_PREFIX" %s ["PTR_FORMAT","PTR_FORMAT"]", + gclog_or_tty->print_cr(G1HR_PREFIX " %s [" PTR_FORMAT "," PTR_FORMAT "]", action_str, bottom, end); } void G1HRPrinter::print(PhaseType phase, size_t phase_num) { const char* phase_str = phase_name(phase); - gclog_or_tty->print_cr(G1HR_PREFIX" #%s "SIZE_FORMAT, phase_str, phase_num); + gclog_or_tty->print_cr(G1HR_PREFIX " #%s " SIZE_FORMAT, phase_str, phase_num); }
--- a/src/share/vm/gc_implementation/g1/g1InCSetState.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1InCSetState.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -103,7 +103,7 @@ public: void set_humongous(uintptr_t index) { assert(get_by_index(index).is_default(), - err_msg("State at index " INTPTR_FORMAT" should be default but is " CSETSTATE_FORMAT, index, get_by_index(index).value())); + err_msg("State at index " INTPTR_FORMAT " should be default but is " CSETSTATE_FORMAT, index, get_by_index(index).value())); set_by_index(index, InCSetState::Humongous); } @@ -113,13 +113,13 @@ void set_in_young(uintptr_t index) { assert(get_by_index(index).is_default(), - err_msg("State at index " INTPTR_FORMAT" should be default but is " CSETSTATE_FORMAT, index, get_by_index(index).value())); + err_msg("State at index " INTPTR_FORMAT " should be default but is " CSETSTATE_FORMAT, index, get_by_index(index).value())); set_by_index(index, InCSetState::Young); } void set_in_old(uintptr_t index) { assert(get_by_index(index).is_default(), - err_msg("State at index " INTPTR_FORMAT" should be default but is " CSETSTATE_FORMAT, index, get_by_index(index).value())); + err_msg("State at index " INTPTR_FORMAT " should be default but is " CSETSTATE_FORMAT, index, get_by_index(index).value())); set_by_index(index, InCSetState::Old); }
--- a/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1MarkSweep.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2018, 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 @@ -135,9 +135,16 @@ MarkingCodeBlobClosure follow_code_closure(&GenMarkSweep::follow_root_closure, !CodeBlobToOopClosure::FixRelocations); { G1RootProcessor root_processor(g1h); - root_processor.process_strong_roots(&GenMarkSweep::follow_root_closure, - &GenMarkSweep::follow_cld_closure, - &follow_code_closure); + if (ClassUnloading) { + root_processor.process_strong_roots(&GenMarkSweep::follow_root_closure, + &GenMarkSweep::follow_cld_closure, + &follow_code_closure); + } else { + root_processor.process_all_roots_no_string_table( + &GenMarkSweep::follow_root_closure, + &GenMarkSweep::follow_cld_closure, + &follow_code_closure); + } } // Process reference objects found during marking @@ -158,15 +165,17 @@ // This is the point where the entire marking should have completed. assert(GenMarkSweep::_marking_stack.is_empty(), "Marking should have completed"); - // Unload classes and purge the SystemDictionary. - bool purged_class = SystemDictionary::do_unloading(&GenMarkSweep::is_alive); + if (ClassUnloading) { - // Unload nmethods. - CodeCache::do_unloading(&GenMarkSweep::is_alive, purged_class); + // Unload classes and purge the SystemDictionary. + bool purged_class = SystemDictionary::do_unloading(&GenMarkSweep::is_alive); - // Prune dead klasses from subklass/sibling/implementor lists. - Klass::clean_weak_klass_links(&GenMarkSweep::is_alive); + // Unload nmethods. + CodeCache::do_unloading(&GenMarkSweep::is_alive, purged_class); + // Prune dead klasses from subklass/sibling/implementor lists. + Klass::clean_weak_klass_links(&GenMarkSweep::is_alive); + } // Delete entries for dead interned string and clean up unreferenced symbols in symbol table. G1CollectedHeap::heap()->unlink_string_and_symbol_table(&GenMarkSweep::is_alive);
--- a/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1OopClosures.inline.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -118,7 +118,7 @@ oop obj = oopDesc::load_decode_heap_oop(p); if (_cm->verbose_high()) { gclog_or_tty->print_cr("[%u] we're looking at location " - "*"PTR_FORMAT" = "PTR_FORMAT, + "*" PTR_FORMAT " = " PTR_FORMAT, _task->worker_id(), p2i(p), p2i((void*) obj)); } _task->deal_with_reference(obj);
--- a/src/share/vm/gc_implementation/g1/g1RemSet.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1RemSet.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -442,7 +442,7 @@ bool G1RemSet::refine_card(jbyte* card_ptr, uint worker_i, bool check_for_refs_into_cset) { assert(_g1->is_in_exact(_ct_bs->addr_for(card_ptr)), - err_msg("Card at "PTR_FORMAT" index "SIZE_FORMAT" representing heap at "PTR_FORMAT" (%u) must be in committed heap", + err_msg("Card at " PTR_FORMAT " index " SIZE_FORMAT " representing heap at " PTR_FORMAT " (%u) must be in committed heap", p2i(card_ptr), _ct_bs->index_for(_ct_bs->addr_for(card_ptr)), _ct_bs->addr_for(card_ptr),
--- a/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1RemSetSummary.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -183,26 +183,26 @@ size_t code_root_elems() const { return _code_root_elems; } void print_rs_mem_info_on(outputStream * out, size_t total) { - out->print_cr(" "SIZE_FORMAT_W(8) "%s (%5.1f%%) by "SIZE_FORMAT" %s regions", + out->print_cr(" " SIZE_FORMAT_W(8) "%s (%5.1f%%) by " SIZE_FORMAT " %s regions", byte_size_in_proper_unit(rs_mem_size()), proper_unit_for_byte_size(rs_mem_size()), rs_mem_size_percent_of(total), amount(), _name); } void print_cards_occupied_info_on(outputStream * out, size_t total) { - out->print_cr(" "SIZE_FORMAT_W(8)" (%5.1f%%) entries by "SIZE_FORMAT" %s regions", + out->print_cr(" " SIZE_FORMAT_W(8) " (%5.1f%%) entries by " SIZE_FORMAT " %s regions", cards_occupied(), cards_occupied_percent_of(total), amount(), _name); } void print_code_root_mem_info_on(outputStream * out, size_t total) { - out->print_cr(" "SIZE_FORMAT_W(8) "%s (%5.1f%%) by "SIZE_FORMAT" %s regions", + out->print_cr(" " SIZE_FORMAT_W(8) "%s (%5.1f%%) by " SIZE_FORMAT " %s regions", byte_size_in_proper_unit(code_root_mem_size()), proper_unit_for_byte_size(code_root_mem_size()), code_root_mem_size_percent_of(total), amount(), _name); } void print_code_root_elems_info_on(outputStream * out, size_t total) { - out->print_cr(" "SIZE_FORMAT_W(8)" (%5.1f%%) elements by "SIZE_FORMAT" %s regions", + out->print_cr(" " SIZE_FORMAT_W(8) " (%5.1f%%) elements by " SIZE_FORMAT " %s regions", code_root_elems(), code_root_elems_percent_of(total), amount(), _name); } }; @@ -298,7 +298,7 @@ byte_size_in_proper_unit(HeapRegionRemSet::fl_mem_size()), proper_unit_for_byte_size(HeapRegionRemSet::fl_mem_size())); - out->print_cr(" "SIZE_FORMAT" occupied cards represented.", + out->print_cr(" " SIZE_FORMAT " occupied cards represented.", total_cards_occupied()); for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) { (*current)->print_cards_occupied_info_on(out, total_cards_occupied()); @@ -306,8 +306,8 @@ // Largest sized rem set region statistics HeapRegionRemSet* rem_set = max_rs_mem_sz_region()->rem_set(); - out->print_cr(" Region with largest rem set = "HR_FORMAT", " - "size = "SIZE_FORMAT "%s, occupied = "SIZE_FORMAT "%s.", + out->print_cr(" Region with largest rem set = " HR_FORMAT ", " + "size = " SIZE_FORMAT "%s, occupied = " SIZE_FORMAT "%s.", HR_FORMAT_PARAMS(max_rs_mem_sz_region()), byte_size_in_proper_unit(rem_set->mem_size()), proper_unit_for_byte_size(rem_set->mem_size()), @@ -326,14 +326,14 @@ (*current)->print_code_root_mem_info_on(out, total_code_root_mem_sz()); } - out->print_cr(" "SIZE_FORMAT" code roots represented.", + out->print_cr(" " SIZE_FORMAT " code roots represented.", total_code_root_elems()); for (RegionTypeCounter** current = &counters[0]; *current != NULL; current++) { (*current)->print_code_root_elems_info_on(out, total_code_root_elems()); } - out->print_cr(" Region with largest amount of code roots = "HR_FORMAT", " - "size = "SIZE_FORMAT "%s, num_elems = "SIZE_FORMAT".", + out->print_cr(" Region with largest amount of code roots = " HR_FORMAT ", " + "size = " SIZE_FORMAT "%s, num_elems = " SIZE_FORMAT ".", HR_FORMAT_PARAMS(max_code_root_mem_sz_region()), byte_size_in_proper_unit(max_code_root_rem_set->strong_code_roots_mem_size()), proper_unit_for_byte_size(max_code_root_rem_set->strong_code_roots_mem_size()), @@ -344,16 +344,16 @@ void G1RemSetSummary::print_on(outputStream* out) { out->print_cr("\n Recent concurrent refinement statistics"); - out->print_cr(" Processed "SIZE_FORMAT" cards", + out->print_cr(" Processed " SIZE_FORMAT " cards", num_concurrent_refined_cards()); - out->print_cr(" Of "SIZE_FORMAT" completed buffers:", num_processed_buf_total()); - out->print_cr(" "SIZE_FORMAT_W(8)" (%5.1f%%) by concurrent RS threads.", + out->print_cr(" Of " SIZE_FORMAT " completed buffers:", num_processed_buf_total()); + out->print_cr(" " SIZE_FORMAT_W(8) " (%5.1f%%) by concurrent RS threads.", num_processed_buf_total(), percent_of(num_processed_buf_rs_threads(), num_processed_buf_total())); - out->print_cr(" "SIZE_FORMAT_W(8)" (%5.1f%%) by mutator threads.", + out->print_cr(" " SIZE_FORMAT_W(8) " (%5.1f%%) by mutator threads.", num_processed_buf_mutator(), percent_of(num_processed_buf_mutator(), num_processed_buf_total())); - out->print_cr(" Did "SIZE_FORMAT" coarsenings.", num_coarsenings()); + out->print_cr(" Did " SIZE_FORMAT " coarsenings.", num_coarsenings()); out->print_cr(" Concurrent RS threads times (s)"); out->print(" "); for (uint i = 0; i < _num_vtimes; i++) {
--- a/src/share/vm/gc_implementation/g1/g1RootProcessor.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1RootProcessor.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -156,7 +156,7 @@ } process_vm_roots(strong_roots, weak_roots, phase_times, worker_i); - + process_string_table_roots(weak_roots, phase_times, worker_i); { // Now the CM ref_processor roots. G1GCParPhaseTimesTracker x(phase_times, G1GCPhaseTimes::CMRefRoots, worker_i); @@ -223,18 +223,34 @@ void G1RootProcessor::process_all_roots(OopClosure* oops, CLDClosure* clds, - CodeBlobClosure* blobs) { + CodeBlobClosure* blobs, + bool process_string_table) { process_java_roots(oops, NULL, clds, clds, NULL, NULL, 0); process_vm_roots(oops, oops, NULL, 0); - if (!_process_strong_tasks.is_task_claimed(G1RP_PS_CodeCache_oops_do)) { - CodeCache::blobs_do(blobs); - } + if (process_string_table) { + process_string_table_roots(oops, NULL, 0); + } + process_code_cache_roots(blobs, NULL, 0); _process_strong_tasks.all_tasks_completed(); } +void G1RootProcessor::process_all_roots(OopClosure* oops, + CLDClosure* clds, + CodeBlobClosure* blobs) { + process_all_roots(oops, clds, blobs, true); +} + +void G1RootProcessor::process_all_roots_no_string_table(OopClosure* oops, + CLDClosure* clds, + CodeBlobClosure* blobs) { + assert(!ClassUnloading, "Should only be used when class unloading is disabled"); + process_all_roots(oops, clds, blobs, false); +} + + void G1RootProcessor::process_java_roots(OopClosure* strong_roots, CLDClosure* thread_stack_clds, CLDClosure* strong_clds, @@ -311,14 +327,23 @@ SystemDictionary::roots_oops_do(strong_roots, weak_roots); } } +} - { - G1GCParPhaseTimesTracker x(phase_times, G1GCPhaseTimes::StringTableRoots, worker_i); - // All threads execute the following. A specific chunk of buckets - // from the StringTable are the individual tasks. - if (weak_roots != NULL) { - StringTable::possibly_parallel_oops_do(weak_roots); - } +void G1RootProcessor::process_string_table_roots(OopClosure* weak_roots, G1GCPhaseTimes* phase_times, + uint worker_i) { + assert(weak_roots != NULL, "Should only be called when all roots are processed"); + + G1GCParPhaseTimesTracker x(phase_times, G1GCPhaseTimes::StringTableRoots, worker_i); + // All threads execute the following. A specific chunk of buckets + // from the StringTable are the individual tasks. + StringTable::possibly_parallel_oops_do(weak_roots); +} + +void G1RootProcessor::process_code_cache_roots(CodeBlobClosure* code_closure, + G1GCPhaseTimes* phase_times, + uint worker_i) { + if (!_process_strong_tasks.is_task_claimed(G1RP_PS_CodeCache_oops_do)) { + CodeCache::blobs_do(code_closure); } }
--- a/src/share/vm/gc_implementation/g1/g1RootProcessor.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1RootProcessor.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2018, 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,6 +34,7 @@ class G1CollectedHeap; class G1GCPhaseTimes; class G1ParPushHeapRSClosure; +class G1RootClosures; class Monitor; class OopClosure; class SubTasksDone; @@ -71,6 +72,11 @@ void worker_has_discovered_all_strong_classes(); void wait_until_all_strong_classes_discovered(); + void process_all_roots(OopClosure* oops, + CLDClosure* clds, + CodeBlobClosure* blobs, + bool process_string_table); + void process_java_roots(OopClosure* scan_non_heap_roots, CLDClosure* thread_stack_clds, CLDClosure* scan_strong_clds, @@ -84,6 +90,14 @@ G1GCPhaseTimes* phase_times, uint worker_i); + void process_string_table_roots(OopClosure* scan_non_heap_weak_roots, + G1GCPhaseTimes* phase_times, + uint worker_i); + + void process_code_cache_roots(CodeBlobClosure* code_closure, + G1GCPhaseTimes* phase_times, + uint worker_i); + public: G1RootProcessor(G1CollectedHeap* g1h); @@ -114,6 +128,13 @@ OopClosure* scan_non_heap_weak_roots, uint worker_i); + // Apply oops, clds and blobs to strongly and weakly reachable roots in the system, + // the only thing different from process_all_roots is that we skip the string table + // to avoid keeping every string live when doing class unloading. + void process_all_roots_no_string_table(OopClosure* oops, + CLDClosure* clds, + CodeBlobClosure* blobs); + // Inform the root processor about the number of worker threads void set_num_workers(int active_workers); };
--- a/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1StringDedupQueue.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -151,7 +151,7 @@ void G1StringDedupQueue::print_statistics(outputStream* st) { st->print_cr( " [Queue]\n" - " [Dropped: "UINTX_FORMAT"]", _queue->_dropped); + " [Dropped: " UINTX_FORMAT "]", _queue->_dropped); } void G1StringDedupQueue::verify() {
--- a/src/share/vm/gc_implementation/g1/g1StringDedupStat.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1StringDedupStat.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -80,8 +80,8 @@ st->stamp(PrintGCTimeStamps); st->print_cr( "[GC concurrent-string-deduplication, " - G1_STRDEDUP_BYTES_FORMAT_NS"->"G1_STRDEDUP_BYTES_FORMAT_NS"("G1_STRDEDUP_BYTES_FORMAT_NS"), avg " - G1_STRDEDUP_PERCENT_FORMAT_NS", "G1_STRDEDUP_TIME_FORMAT"]", + G1_STRDEDUP_BYTES_FORMAT_NS "->" G1_STRDEDUP_BYTES_FORMAT_NS "(" G1_STRDEDUP_BYTES_FORMAT_NS "), avg " + G1_STRDEDUP_PERCENT_FORMAT_NS ", " G1_STRDEDUP_TIME_FORMAT "]", G1_STRDEDUP_BYTES_PARAM(last_stat._new_bytes), G1_STRDEDUP_BYTES_PARAM(last_stat._new_bytes - last_stat._deduped_bytes), G1_STRDEDUP_BYTES_PARAM(last_stat._deduped_bytes), @@ -135,22 +135,22 @@ if (total) { st->print_cr( - " [Total Exec: "UINTX_FORMAT"/"G1_STRDEDUP_TIME_FORMAT", Idle: "UINTX_FORMAT"/"G1_STRDEDUP_TIME_FORMAT", Blocked: "UINTX_FORMAT"/"G1_STRDEDUP_TIME_FORMAT"]", + " [Total Exec: " UINTX_FORMAT "/" G1_STRDEDUP_TIME_FORMAT ", Idle: " UINTX_FORMAT "/" G1_STRDEDUP_TIME_FORMAT ", Blocked: " UINTX_FORMAT "/" G1_STRDEDUP_TIME_FORMAT "]", stat._exec, stat._exec_elapsed, stat._idle, stat._idle_elapsed, stat._block, stat._block_elapsed); } else { st->print_cr( - " [Last Exec: "G1_STRDEDUP_TIME_FORMAT", Idle: "G1_STRDEDUP_TIME_FORMAT", Blocked: "UINTX_FORMAT"/"G1_STRDEDUP_TIME_FORMAT"]", + " [Last Exec: " G1_STRDEDUP_TIME_FORMAT ", Idle: " G1_STRDEDUP_TIME_FORMAT ", Blocked: " UINTX_FORMAT "/" G1_STRDEDUP_TIME_FORMAT "]", stat._exec_elapsed, stat._idle_elapsed, stat._block, stat._block_elapsed); } st->print_cr( - " [Inspected: "G1_STRDEDUP_OBJECTS_FORMAT"]\n" - " [Skipped: "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]\n" - " [Hashed: "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]\n" - " [Known: "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]\n" - " [New: "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT") "G1_STRDEDUP_BYTES_FORMAT"]\n" - " [Deduplicated: "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT") "G1_STRDEDUP_BYTES_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]\n" - " [Young: "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT") "G1_STRDEDUP_BYTES_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]\n" - " [Old: "G1_STRDEDUP_OBJECTS_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT") "G1_STRDEDUP_BYTES_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT")]", + " [Inspected: " G1_STRDEDUP_OBJECTS_FORMAT "]\n" + " [Skipped: " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n" + " [Hashed: " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n" + " [Known: " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n" + " [New: " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ") " G1_STRDEDUP_BYTES_FORMAT "]\n" + " [Deduplicated: " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ") " G1_STRDEDUP_BYTES_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n" + " [Young: " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ") " G1_STRDEDUP_BYTES_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]\n" + " [Old: " G1_STRDEDUP_OBJECTS_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ") " G1_STRDEDUP_BYTES_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT ")]", stat._inspected, stat._skipped, skipped_percent, stat._hashed, hashed_percent,
--- a/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/g1StringDedupTable.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -596,12 +596,12 @@ void G1StringDedupTable::print_statistics(outputStream* st) { st->print_cr( " [Table]\n" - " [Memory Usage: "G1_STRDEDUP_BYTES_FORMAT_NS"]\n" - " [Size: "SIZE_FORMAT", Min: "SIZE_FORMAT", Max: "SIZE_FORMAT"]\n" - " [Entries: "UINTX_FORMAT", Load: "G1_STRDEDUP_PERCENT_FORMAT_NS", Cached: " UINTX_FORMAT ", Added: "UINTX_FORMAT", Removed: "UINTX_FORMAT"]\n" - " [Resize Count: "UINTX_FORMAT", Shrink Threshold: "UINTX_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT_NS"), Grow Threshold: "UINTX_FORMAT"("G1_STRDEDUP_PERCENT_FORMAT_NS")]\n" - " [Rehash Count: "UINTX_FORMAT", Rehash Threshold: "UINTX_FORMAT", Hash Seed: 0x%x]\n" - " [Age Threshold: "UINTX_FORMAT"]", + " [Memory Usage: " G1_STRDEDUP_BYTES_FORMAT_NS "]\n" + " [Size: " SIZE_FORMAT ", Min: " SIZE_FORMAT ", Max: " SIZE_FORMAT "]\n" + " [Entries: " UINTX_FORMAT ", Load: " G1_STRDEDUP_PERCENT_FORMAT_NS ", Cached: " UINTX_FORMAT ", Added: " UINTX_FORMAT ", Removed: " UINTX_FORMAT "]\n" + " [Resize Count: " UINTX_FORMAT ", Shrink Threshold: " UINTX_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT_NS "), Grow Threshold: " UINTX_FORMAT "(" G1_STRDEDUP_PERCENT_FORMAT_NS ")]\n" + " [Rehash Count: " UINTX_FORMAT ", Rehash Threshold: " UINTX_FORMAT ", Hash Seed: 0x%x]\n" + " [Age Threshold: " UINTX_FORMAT "]", G1_STRDEDUP_BYTES_PARAM(_table->_size * sizeof(G1StringDedupEntry*) + (_table->_entries + _entry_cache->size()) * sizeof(G1StringDedupEntry)), _table->_size, _min_size, _max_size, _table->_entries, (double)_table->_entries / (double)_table->_size * 100.0, _entry_cache->size(), _entries_added, _entries_removed,
--- a/src/share/vm/gc_implementation/g1/heapRegion.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/heapRegion.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -333,7 +333,7 @@ bool during_conc_mark, size_t marked_bytes) { assert(0 <= marked_bytes && marked_bytes <= used(), - err_msg("marked: "SIZE_FORMAT" used: "SIZE_FORMAT, + err_msg("marked: " SIZE_FORMAT " used: " SIZE_FORMAT, marked_bytes, used())); _prev_top_at_mark_start = top(); _prev_marked_bytes = marked_bytes; @@ -514,9 +514,9 @@ // Object is in the region. Check that its less than top if (_hr->top() <= (HeapWord*)obj) { // Object is above top - gclog_or_tty->print_cr("Object "PTR_FORMAT" in region " - "["PTR_FORMAT", "PTR_FORMAT") is above " - "top "PTR_FORMAT, + gclog_or_tty->print_cr("Object " PTR_FORMAT " in region " + "[" PTR_FORMAT ", " PTR_FORMAT ") is above " + "top " PTR_FORMAT, (void *)obj, _hr->bottom(), _hr->end(), _hr->top()); _failures = true; return; @@ -550,22 +550,22 @@ if (nm != NULL) { // Verify that the nemthod is live if (!nm->is_alive()) { - gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] has dead nmethod " - PTR_FORMAT" in its strong code roots", + gclog_or_tty->print_cr("region [" PTR_FORMAT "," PTR_FORMAT "] has dead nmethod " + PTR_FORMAT " in its strong code roots", _hr->bottom(), _hr->end(), nm); _failures = true; } else { VerifyStrongCodeRootOopClosure oop_cl(_hr, nm); nm->oops_do(&oop_cl); if (!oop_cl.has_oops_in_region()) { - gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] has nmethod " - PTR_FORMAT" in its strong code roots " + gclog_or_tty->print_cr("region [" PTR_FORMAT "," PTR_FORMAT "] has nmethod " + PTR_FORMAT " in its strong code roots " "with no pointers into region", _hr->bottom(), _hr->end(), nm); _failures = true; } else if (oop_cl.failures()) { - gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] has other " - "failures for nmethod "PTR_FORMAT, + gclog_or_tty->print_cr("region [" PTR_FORMAT "," PTR_FORMAT "] has other " + "failures for nmethod " PTR_FORMAT, _hr->bottom(), _hr->end(), nm); _failures = true; } @@ -599,8 +599,8 @@ // on its strong code root list if (is_empty()) { if (strong_code_roots_length > 0) { - gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] is empty " - "but has "SIZE_FORMAT" code root entries", + gclog_or_tty->print_cr("region [" PTR_FORMAT "," PTR_FORMAT "] is empty " + "but has " SIZE_FORMAT " code root entries", bottom(), end(), strong_code_roots_length); *failures = true; } @@ -609,8 +609,8 @@ if (continuesHumongous()) { if (strong_code_roots_length > 0) { - gclog_or_tty->print_cr("region "HR_FORMAT" is a continuation of a humongous " - "region but has "SIZE_FORMAT" code root entries", + gclog_or_tty->print_cr("region " HR_FORMAT " is a continuation of a humongous " + "region but has " SIZE_FORMAT " code root entries", HR_FORMAT_PARAMS(this), strong_code_roots_length); *failures = true; } @@ -634,7 +634,7 @@ else st->print(" "); st->print(" TS %5d", _gc_time_stamp); - st->print(" PTAMS "PTR_FORMAT" NTAMS "PTR_FORMAT, + st->print(" PTAMS " PTR_FORMAT " NTAMS " PTR_FORMAT, prev_top_at_mark_start(), next_top_at_mark_start()); G1OffsetTableContigSpace::print_on(st); } @@ -708,25 +708,25 @@ } if (!_g1h->is_in_closed_subset(obj)) { HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p); - gclog_or_tty->print_cr("Field "PTR_FORMAT - " of live obj "PTR_FORMAT" in region " - "["PTR_FORMAT", "PTR_FORMAT")", + gclog_or_tty->print_cr("Field " PTR_FORMAT + " of live obj " PTR_FORMAT " in region " + "[" PTR_FORMAT ", " PTR_FORMAT ")", p, (void*) _containing_obj, from->bottom(), from->end()); print_object(gclog_or_tty, _containing_obj); - gclog_or_tty->print_cr("points to obj "PTR_FORMAT" not in the heap", + gclog_or_tty->print_cr("points to obj " PTR_FORMAT " not in the heap", (void*) obj); } else { HeapRegion* from = _g1h->heap_region_containing((HeapWord*)p); HeapRegion* to = _g1h->heap_region_containing((HeapWord*)obj); - gclog_or_tty->print_cr("Field "PTR_FORMAT - " of live obj "PTR_FORMAT" in region " - "["PTR_FORMAT", "PTR_FORMAT")", + gclog_or_tty->print_cr("Field " PTR_FORMAT + " of live obj " PTR_FORMAT " in region " + "[" PTR_FORMAT ", " PTR_FORMAT ")", p, (void*) _containing_obj, from->bottom(), from->end()); print_object(gclog_or_tty, _containing_obj); - gclog_or_tty->print_cr("points to dead obj "PTR_FORMAT" in region " - "["PTR_FORMAT", "PTR_FORMAT")", + gclog_or_tty->print_cr("points to dead obj " PTR_FORMAT " in region " + "[" PTR_FORMAT ", " PTR_FORMAT ")", (void*) obj, to->bottom(), to->end()); print_object(gclog_or_tty, obj); } @@ -784,14 +784,14 @@ gclog_or_tty->print_cr("----------"); } gclog_or_tty->print_cr("Missing rem set entry:"); - gclog_or_tty->print_cr("Field "PTR_FORMAT" " - "of obj "PTR_FORMAT", " - "in region "HR_FORMAT, + gclog_or_tty->print_cr("Field " PTR_FORMAT " " + "of obj " PTR_FORMAT ", " + "in region " HR_FORMAT, p, (void*) _containing_obj, HR_FORMAT_PARAMS(from)); _containing_obj->print_on(gclog_or_tty); - gclog_or_tty->print_cr("points to obj "PTR_FORMAT" " - "in region "HR_FORMAT, + gclog_or_tty->print_cr("points to obj " PTR_FORMAT " " + "in region " HR_FORMAT, (void*) obj, HR_FORMAT_PARAMS(to)); if (obj->is_oop()) { @@ -830,8 +830,8 @@ if (is_humongous != g1->isHumongous(obj_size) && !g1->is_obj_dead(obj, this)) { // Dead objects may have bigger block_size since they span several objects. - gclog_or_tty->print_cr("obj "PTR_FORMAT" is of %shumongous size (" - SIZE_FORMAT" words) in a %shumongous region", + gclog_or_tty->print_cr("obj " PTR_FORMAT " is of %shumongous size (" + SIZE_FORMAT " words) in a %shumongous region", p, g1->isHumongous(obj_size) ? "" : "non-", obj_size, is_humongous ? "" : "non-"); *failures = true; @@ -854,12 +854,12 @@ (vo == VerifyOption_G1UsePrevMarking && ClassLoaderDataGraph::unload_list_contains(klass)); if (!is_metaspace_object) { - gclog_or_tty->print_cr("klass "PTR_FORMAT" of object "PTR_FORMAT" " + gclog_or_tty->print_cr("klass " PTR_FORMAT " of object " PTR_FORMAT " " "not metadata", klass, (void *)obj); *failures = true; return; } else if (!klass->is_klass()) { - gclog_or_tty->print_cr("klass "PTR_FORMAT" of object "PTR_FORMAT" " + gclog_or_tty->print_cr("klass " PTR_FORMAT " of object " PTR_FORMAT " " "not a klass", klass, (void *)obj); *failures = true; return; @@ -891,7 +891,7 @@ } } } else { - gclog_or_tty->print_cr(PTR_FORMAT" not an oop", (void *)obj); + gclog_or_tty->print_cr(PTR_FORMAT " not an oop", (void *)obj); *failures = true; return; } @@ -901,8 +901,8 @@ } if (p != top()) { - gclog_or_tty->print_cr("end of last object "PTR_FORMAT" " - "does not match top "PTR_FORMAT, p, top()); + gclog_or_tty->print_cr("end of last object " PTR_FORMAT " " + "does not match top " PTR_FORMAT, p, top()); *failures = true; return; } @@ -917,8 +917,8 @@ HeapWord* addr_1 = p; HeapWord* b_start_1 = _offsets.block_start_const(addr_1); if (b_start_1 != p) { - gclog_or_tty->print_cr("BOT look up for top: "PTR_FORMAT" " - " yielded "PTR_FORMAT", expecting "PTR_FORMAT, + gclog_or_tty->print_cr("BOT look up for top: " PTR_FORMAT " " + " yielded " PTR_FORMAT ", expecting " PTR_FORMAT, addr_1, b_start_1, p); *failures = true; return; @@ -929,8 +929,8 @@ if (addr_2 < the_end) { HeapWord* b_start_2 = _offsets.block_start_const(addr_2); if (b_start_2 != p) { - gclog_or_tty->print_cr("BOT look up for top + 1: "PTR_FORMAT" " - " yielded "PTR_FORMAT", expecting "PTR_FORMAT, + gclog_or_tty->print_cr("BOT look up for top + 1: " PTR_FORMAT " " + " yielded " PTR_FORMAT ", expecting " PTR_FORMAT, addr_2, b_start_2, p); *failures = true; return; @@ -943,8 +943,8 @@ if (addr_3 < the_end) { HeapWord* b_start_3 = _offsets.block_start_const(addr_3); if (b_start_3 != p) { - gclog_or_tty->print_cr("BOT look up for top + diff: "PTR_FORMAT" " - " yielded "PTR_FORMAT", expecting "PTR_FORMAT, + gclog_or_tty->print_cr("BOT look up for top + diff: " PTR_FORMAT " " + " yielded " PTR_FORMAT ", expecting " PTR_FORMAT, addr_3, b_start_3, p); *failures = true; return; @@ -955,8 +955,8 @@ HeapWord* addr_4 = the_end - 1; HeapWord* b_start_4 = _offsets.block_start_const(addr_4); if (b_start_4 != p) { - gclog_or_tty->print_cr("BOT look up for end - 1: "PTR_FORMAT" " - " yielded "PTR_FORMAT", expecting "PTR_FORMAT, + gclog_or_tty->print_cr("BOT look up for end - 1: " PTR_FORMAT " " + " yielded " PTR_FORMAT ", expecting " PTR_FORMAT, addr_4, b_start_4, p); *failures = true; return; @@ -964,8 +964,8 @@ } if (is_humongous && object_num > 1) { - gclog_or_tty->print_cr("region ["PTR_FORMAT","PTR_FORMAT"] is humongous " - "but has "SIZE_FORMAT", objects", + gclog_or_tty->print_cr("region [" PTR_FORMAT "," PTR_FORMAT "] is humongous " + "but has " SIZE_FORMAT ", objects", bottom(), end(), object_num); *failures = true; return;
--- a/src/share/vm/gc_implementation/g1/heapRegion.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/heapRegion.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -52,7 +52,7 @@ class HeapRegionSetBase; class nmethod; -#define HR_FORMAT "%u:(%s)["PTR_FORMAT","PTR_FORMAT","PTR_FORMAT"]" +#define HR_FORMAT "%u:(%s)[" PTR_FORMAT "," PTR_FORMAT "," PTR_FORMAT "]" #define HR_FORMAT_PARAMS(_hr_) \ (_hr_)->hrm_index(), \ (_hr_)->get_short_type_str(), \ @@ -534,8 +534,8 @@ void set_containing_set(HeapRegionSetBase* containing_set) { assert((containing_set == NULL && _containing_set != NULL) || (containing_set != NULL && _containing_set == NULL), - err_msg("containing_set: "PTR_FORMAT" " - "_containing_set: "PTR_FORMAT, + err_msg("containing_set: " PTR_FORMAT " " + "_containing_set: " PTR_FORMAT, p2i(containing_set), p2i(_containing_set))); _containing_set = containing_set;
--- a/src/share/vm/gc_implementation/g1/heapRegion.inline.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/heapRegion.inline.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -112,7 +112,7 @@ assert(ClassUnloadingWithConcurrentMark, err_msg("All blocks should be objects if G1 Class Unloading isn't used. " - "HR: ["PTR_FORMAT", "PTR_FORMAT", "PTR_FORMAT") " + "HR: [" PTR_FORMAT ", " PTR_FORMAT ", " PTR_FORMAT ") " "addr: " PTR_FORMAT, p2i(bottom()), p2i(top()), p2i(end()), p2i(addr)));
--- a/src/share/vm/gc_implementation/g1/heapRegionManager.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/heapRegionManager.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -432,7 +432,7 @@ HeapRegion* hr = _regions.get_by_index(i); guarantee(hr != NULL, err_msg("invariant: i: %u", i)); guarantee(!prev_committed || hr->bottom() == prev_end, - err_msg("invariant i: %u "HR_FORMAT" prev_end: "PTR_FORMAT, + err_msg("invariant i: %u " HR_FORMAT " prev_end: " PTR_FORMAT, i, HR_FORMAT_PARAMS(hr), p2i(prev_end))); guarantee(hr->hrm_index() == i, err_msg("invariant: i: %u hrm_index(): %u", i, hr->hrm_index()));
--- a/src/share/vm/gc_implementation/g1/heapRegionManager.inline.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/heapRegionManager.inline.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -31,9 +31,9 @@ inline HeapRegion* HeapRegionManager::addr_to_region(HeapWord* addr) const { assert(addr < heap_end(), - err_msg("addr: "PTR_FORMAT" end: "PTR_FORMAT, p2i(addr), p2i(heap_end()))); + err_msg("addr: " PTR_FORMAT " end: " PTR_FORMAT, p2i(addr), p2i(heap_end()))); assert(addr >= heap_bottom(), - err_msg("addr: "PTR_FORMAT" bottom: "PTR_FORMAT, p2i(addr), p2i(heap_bottom()))); + err_msg("addr: " PTR_FORMAT " bottom: " PTR_FORMAT, p2i(addr), p2i(heap_bottom()))); HeapRegion* hr = _regions.get_by_address(addr); return hr;
--- a/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/heapRegionRemSet.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -381,7 +381,7 @@ void FromCardCache::invalidate(uint start_idx, size_t new_num_regions) { guarantee((size_t)start_idx + new_num_regions <= max_uintx, - err_msg("Trying to invalidate beyond maximum region, from %u size "SIZE_FORMAT, + err_msg("Trying to invalidate beyond maximum region, from %u size " SIZE_FORMAT, start_idx, new_num_regions)); for (uint i = 0; i < HeapRegionRemSet::num_par_rem_sets(); i++) { uint end_idx = (start_idx + (uint)new_num_regions); @@ -396,7 +396,7 @@ void FromCardCache::print(outputStream* out) { for (uint i = 0; i < HeapRegionRemSet::num_par_rem_sets(); i++) { for (uint j = 0; j < _max_regions; j++) { - out->print_cr("_from_card_cache["UINT32_FORMAT"]["UINT32_FORMAT"] = "INT32_FORMAT".", + out->print_cr("_from_card_cache[" UINT32_FORMAT "][" UINT32_FORMAT "] = " INT32_FORMAT ".", i, j, at(i, j)); } } @@ -436,7 +436,7 @@ int from_card = (int)(uintptr_t(from) >> CardTableModRefBS::card_shift); if (G1TraceHeapRegionRememberedSet) { - gclog_or_tty->print_cr("Table for [" PTR_FORMAT "...): card %d (cache = "INT32_FORMAT")", + gclog_or_tty->print_cr("Table for [" PTR_FORMAT "...): card %d (cache = " INT32_FORMAT ")", hr()->bottom(), from_card, FromCardCache::at((uint)tid, cur_hrm_ind)); } @@ -650,13 +650,13 @@ assert(_coarse_map.size() == region_bm->size(), "Precondition"); if (G1RSScrubVerbose) { - gclog_or_tty->print(" Coarse map: before = "SIZE_FORMAT"...", + gclog_or_tty->print(" Coarse map: before = " SIZE_FORMAT "...", _n_coarse_entries); } _coarse_map.set_intersection(*region_bm); _n_coarse_entries = _coarse_map.count_one_bits(); if (G1RSScrubVerbose) { - gclog_or_tty->print_cr(" after = "SIZE_FORMAT".", _n_coarse_entries); + gclog_or_tty->print_cr(" after = " SIZE_FORMAT ".", _n_coarse_entries); } // Now do the fine-grained maps. @@ -1052,7 +1052,7 @@ card_index = _cur_region_card_offset + _cur_card_in_prt; guarantee(_cur_card_in_prt < HeapRegion::CardsPerRegion, - err_msg("Card index "SIZE_FORMAT" must be within the region", _cur_card_in_prt)); + err_msg("Card index " SIZE_FORMAT " must be within the region", _cur_card_in_prt)); return true; } @@ -1221,8 +1221,8 @@ size_t min_prt_size = sizeof(void*) + dummy->bm()->size_in_words() * HeapWordSize; assert(dummy->mem_size() > min_prt_size, - err_msg("PerRegionTable memory usage is suspiciously small, only has "SIZE_FORMAT" bytes. " - "Should be at least "SIZE_FORMAT" bytes.", dummy->mem_size(), min_prt_size)); + err_msg("PerRegionTable memory usage is suspiciously small, only has " SIZE_FORMAT " bytes. " + "Should be at least " SIZE_FORMAT " bytes.", dummy->mem_size(), min_prt_size)); free(dummy); guarantee(dummy->mem_size() == fl_mem_size(), "fl_mem_size() does not return the correct element size"); // try to reset the state
--- a/src/share/vm/gc_implementation/g1/heapRegionSet.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/heapRegionSet.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -32,7 +32,7 @@ uint FreeRegionList::_unrealistically_long_length = 0; void HeapRegionSetBase::fill_in_ext_msg(hrs_ext_msg* msg, const char* message) { - msg->append("[%s] %s ln: %u cy: "SIZE_FORMAT, + msg->append("[%s] %s ln: %u cy: " SIZE_FORMAT, name(), message, length(), total_capacity_bytes()); fill_in_ext_msg_extra(msg); } @@ -84,13 +84,13 @@ void HeapRegionSetBase::print_on(outputStream* out, bool print_contents) { out->cr(); - out->print_cr("Set: %s ("PTR_FORMAT")", name(), this); + out->print_cr("Set: %s (" PTR_FORMAT ")", name(), this); out->print_cr(" Region Assumptions"); out->print_cr(" humongous : %s", BOOL_TO_STR(regions_humongous())); out->print_cr(" free : %s", BOOL_TO_STR(regions_free())); out->print_cr(" Attributes"); out->print_cr(" length : %14u", length()); - out->print_cr(" total capacity : "SIZE_FORMAT_W(14)" bytes", + out->print_cr(" total capacity : " SIZE_FORMAT_W(14) " bytes", total_capacity_bytes()); } @@ -106,7 +106,7 @@ } void FreeRegionList::fill_in_ext_msg_extra(hrs_ext_msg* msg) { - msg->append(" hd: "PTR_FORMAT" tl: "PTR_FORMAT, _head, _tail); + msg->append(" hd: " PTR_FORMAT " tl: " PTR_FORMAT, _head, _tail); } void FreeRegionList::remove_all() { @@ -277,8 +277,8 @@ void FreeRegionList::print_on(outputStream* out, bool print_contents) { HeapRegionSetBase::print_on(out, print_contents); out->print_cr(" Linking"); - out->print_cr(" head : "PTR_FORMAT, _head); - out->print_cr(" tail : "PTR_FORMAT, _tail); + out->print_cr(" head : " PTR_FORMAT, _head); + out->print_cr(" tail : " PTR_FORMAT, _tail); if (print_contents) { out->print_cr(" Contents"); @@ -306,7 +306,7 @@ count++; guarantee(count < _unrealistically_long_length, - hrs_err_msg("[%s] the calculated length: %u seems very long, is there maybe a cycle? curr: "PTR_FORMAT" prev0: "PTR_FORMAT" " "prev1: "PTR_FORMAT" length: %u", name(), count, curr, prev0, prev1, length())); + hrs_err_msg("[%s] the calculated length: %u seems very long, is there maybe a cycle? curr: " PTR_FORMAT " prev0: " PTR_FORMAT " " "prev1: " PTR_FORMAT " length: %u", name(), count, curr, prev0, prev1, length())); if (curr->next() != NULL) { guarantee(curr->next()->prev() == curr, "Next or prev pointers messed up");
--- a/src/share/vm/gc_implementation/g1/satbQueue.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/g1/satbQueue.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -202,8 +202,8 @@ void ObjPtrQueue::print(const char* name, void** buf, size_t index, size_t sz) { - gclog_or_tty->print_cr(" SATB BUFFER [%s] buf: "PTR_FORMAT" " - "index: "SIZE_FORMAT" sz: "SIZE_FORMAT, + gclog_or_tty->print_cr(" SATB BUFFER [%s] buf: " PTR_FORMAT " " + "index: " SIZE_FORMAT " sz: " SIZE_FORMAT, name, buf, index, sz); } #endif // PRODUCT
--- a/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/parallelScavenge/gcTaskManager.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2018, 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 @@ -1035,7 +1035,7 @@ if (monitor() != NULL) { MonitorSupply::release(monitor()); } - _monitor = (Monitor*) 0xDEAD000F; + _monitor = (Monitor*) (uintptr_t) 0xDEAD000F; } void WaitForBarrierGCTask::do_it(GCTaskManager* manager, uint which) {
--- a/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/gc_implementation/shared/mutableNUMASpace.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -86,7 +86,7 @@ while (words_left_to_fill > 0) { size_t words_to_fill = MIN2(words_left_to_fill, CollectedHeap::filler_array_max_size()); assert(words_to_fill >= CollectedHeap::min_fill_size(), - err_msg("Remaining size ("SIZE_FORMAT ") is too small to fill (based on " SIZE_FORMAT " and " SIZE_FORMAT ")", + err_msg("Remaining size (" SIZE_FORMAT ") is too small to fill (based on " SIZE_FORMAT " and " SIZE_FORMAT ")", words_to_fill, words_left_to_fill, CollectedHeap::filler_array_max_size())); CollectedHeap::fill_with_object((HeapWord*)cur_top, words_to_fill); if (!os::numa_has_static_binding()) {
--- a/src/share/vm/interpreter/interpreterRuntime.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/interpreter/interpreterRuntime.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -323,6 +323,8 @@ Handle exception = get_preinitialized_exception( SystemDictionary::StackOverflowError_klass(), CHECK); + // Increment counter for hs_err file reporting + Atomic::inc(&Exceptions::_stack_overflow_errors); THROW_HANDLE(exception); IRT_END
--- a/src/share/vm/interpreter/oopMapCache.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/interpreter/oopMapCache.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -426,9 +426,9 @@ #ifndef PRODUCT -static long _total_memory_usage = 0; +static size_t _total_memory_usage = 0; -long OopMapCache::memory_usage() { +size_t OopMapCache::memory_usage() { return _total_memory_usage; }
--- a/src/share/vm/interpreter/oopMapCache.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/interpreter/oopMapCache.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -176,7 +176,7 @@ static void compute_one_oop_map(methodHandle method, int bci, InterpreterOopMap* entry); // Returns total no. of bytes allocated as part of OopMapCache's - static long memory_usage() PRODUCT_RETURN0; + static size_t memory_usage() PRODUCT_RETURN0; }; #endif // SHARE_VM_INTERPRETER_OOPMAPCACHE_HPP
--- a/src/share/vm/memory/allocation.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/memory/allocation.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -749,7 +749,7 @@ julong AllocStats::resource_bytes() { return Arena::_bytes_allocated - start_res_bytes; } void AllocStats::print() { tty->print_cr(UINT64_FORMAT " mallocs (" UINT64_FORMAT "MB), " - UINT64_FORMAT" frees (" UINT64_FORMAT "MB), " UINT64_FORMAT "MB resrc", + UINT64_FORMAT " frees (" UINT64_FORMAT "MB), " UINT64_FORMAT "MB resrc", num_mallocs(), alloc_bytes()/M, num_frees(), free_bytes()/M, resource_bytes()/M); }
--- a/src/share/vm/memory/barrierSet.inline.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/memory/barrierSet.inline.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -69,7 +69,7 @@ assert(UseCompressedOops || (aligned_start == start && aligned_end == end), "Expected heap word alignment of start and end"); #if 0 - warning("Post:\t" INTPTR_FORMAT "[" SIZE_FORMAT "] : [" INTPTR_FORMAT","INTPTR_FORMAT")\t", + warning("Post:\t" INTPTR_FORMAT "[" SIZE_FORMAT "] : [" INTPTR_FORMAT "," INTPTR_FORMAT ")\t", start, count, aligned_start, aligned_end); #endif write_ref_array_work(MemRegion(aligned_start, aligned_end));
--- a/src/share/vm/memory/blockOffsetTable.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/memory/blockOffsetTable.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -560,7 +560,7 @@ q = n; n += _sp->block_size(n); assert(n > q, - err_msg("Looping at n = " PTR_FORMAT " with last = " PTR_FORMAT"," + err_msg("Looping at n = " PTR_FORMAT " with last = " PTR_FORMAT "," " while querying blk_start(" PTR_FORMAT ")" " on _sp = [" PTR_FORMAT "," PTR_FORMAT ")", p2i(n), p2i(last), p2i(addr), p2i(_sp->bottom()), p2i(_sp->end())));
--- a/src/share/vm/memory/cardTableModRefBS.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/memory/cardTableModRefBS.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -678,7 +678,7 @@ (val_equals) ? "" : "not ", val); failures = true; } - tty->print_cr("== card "PTR_FORMAT" ["PTR_FORMAT","PTR_FORMAT"], " + tty->print_cr("== card " PTR_FORMAT " [" PTR_FORMAT "," PTR_FORMAT "], " "val: %d", p2i(curr), p2i(addr_for(curr)), p2i((HeapWord*) (((size_t) addr_for(curr)) + card_size)), (int) curr_val);
--- a/src/share/vm/memory/cardTableModRefBS.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/memory/cardTableModRefBS.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -158,8 +158,8 @@ // Mapping from address to card marking array entry jbyte* byte_for(const void* p) const { assert(_whole_heap.contains(p), - err_msg("Attempt to access p = "PTR_FORMAT" out of bounds of " - " card marking array's _whole_heap = ["PTR_FORMAT","PTR_FORMAT")", + err_msg("Attempt to access p = " PTR_FORMAT " out of bounds of " + " card marking array's _whole_heap = [" PTR_FORMAT "," PTR_FORMAT ")", p2i(p), p2i(_whole_heap.start()), p2i(_whole_heap.end()))); jbyte* result = &byte_map_base[uintptr_t(p) >> card_shift]; assert(result >= _byte_map && result < _byte_map + _byte_map_size, @@ -436,8 +436,8 @@ size_t delta = pointer_delta(p, byte_map_base, sizeof(jbyte)); HeapWord* result = (HeapWord*) (delta << card_shift); assert(_whole_heap.contains(result), - err_msg("Returning result = "PTR_FORMAT" out of bounds of " - " card marking array's _whole_heap = ["PTR_FORMAT","PTR_FORMAT")", + err_msg("Returning result = " PTR_FORMAT " out of bounds of " + " card marking array's _whole_heap = [" PTR_FORMAT "," PTR_FORMAT ")", p2i(result), p2i(_whole_heap.start()), p2i(_whole_heap.end()))); return result; } @@ -445,8 +445,8 @@ // Mapping from address to card marking array index. size_t index_for(void* p) { assert(_whole_heap.contains(p), - err_msg("Attempt to access p = "PTR_FORMAT" out of bounds of " - " card marking array's _whole_heap = ["PTR_FORMAT","PTR_FORMAT")", + err_msg("Attempt to access p = " PTR_FORMAT " out of bounds of " + " card marking array's _whole_heap = [" PTR_FORMAT "," PTR_FORMAT ")", p2i(p), p2i(_whole_heap.start()), p2i(_whole_heap.end()))); return byte_for(p) - _byte_map; }
--- a/src/share/vm/memory/generation.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/memory/generation.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -187,7 +187,7 @@ bool res = (available >= max_promotion_in_bytes); if (PrintGC && Verbose) { gclog_or_tty->print_cr( - "Generation: promo attempt is%s safe: available("SIZE_FORMAT") %s max_promo("SIZE_FORMAT")", + "Generation: promo attempt is%s safe: available(" SIZE_FORMAT ") %s max_promo(" SIZE_FORMAT ")", res? "":" not", available, res? ">=":"<", max_promotion_in_bytes); }
--- a/src/share/vm/memory/guardedMemory.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/memory/guardedMemory.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2018, 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 @@ -84,6 +84,8 @@ #ifndef PRODUCT +#define GEN_PURPOSE_TAG ((void *) ((uintptr_t)0xf000f000)) + static void guarded_memory_test_check(void* p, size_t sz, void* tag) { assert(p != NULL, "NULL pointer given to check"); u_char* c = (u_char*) p; @@ -100,12 +102,12 @@ assert(total_sz > 1 && total_sz >= (sizeof(GuardHeader) + 1 + sizeof(Guard)), "Unexpected size"); u_char* basep = (u_char*) os::malloc(total_sz, mtInternal); - GuardedMemory guarded(basep, 1, (void*)0xf000f000); + GuardedMemory guarded(basep, 1, GEN_PURPOSE_TAG); assert(*basep == badResourceValue, "Expected guard in the form of badResourceValue"); u_char* userp = guarded.get_user_ptr(); assert(*userp == uninitBlockPad, "Expected uninitialized data in the form of uninitBlockPad"); - guarded_memory_test_check(userp, 1, (void*)0xf000f000); + guarded_memory_test_check(userp, 1, GEN_PURPOSE_TAG); void* freep = guarded.release_for_freeing(); assert((u_char*)freep == basep, "Expected the same pointer guard was ");
--- a/src/share/vm/memory/metaspace.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/memory/metaspace.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -3098,13 +3098,24 @@ initialize_class_space(metaspace_rs); if (PrintCompressedOopsMode || (PrintMiscellaneous && Verbose)) { - gclog_or_tty->print_cr("Narrow klass base: " PTR_FORMAT ", Narrow klass shift: " SIZE_FORMAT, - Universe::narrow_klass_base(), Universe::narrow_klass_shift()); - gclog_or_tty->print_cr("Compressed class space size: " SIZE_FORMAT " Address: " PTR_FORMAT " Req Addr: " PTR_FORMAT, - compressed_class_space_size(), metaspace_rs.base(), requested_addr); + print_compressed_class_space(gclog_or_tty, requested_addr); } } +void Metaspace::print_compressed_class_space(outputStream* st, const char* requested_addr) { + st->print_cr("Narrow klass base: " PTR_FORMAT ", Narrow klass shift: %d", + p2i(Universe::narrow_klass_base()), Universe::narrow_klass_shift()); + if (_class_space_list != NULL) { + address base = (address)_class_space_list->current_virtual_space()->bottom(); + st->print("Compressed class space size: " SIZE_FORMAT " Address: " PTR_FORMAT, + compressed_class_space_size(), p2i(base)); + if (requested_addr != 0) { + st->print(" Req Addr: " PTR_FORMAT, p2i(requested_addr)); + } + st->cr(); + } + } + // For UseCompressedClassPointers the class space is reserved above the top of // the Java heap. The argument passed in is at the base of the compressed space. void Metaspace::initialize_class_space(ReservedSpace rs) {
--- a/src/share/vm/memory/metaspace.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/memory/metaspace.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2018, 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 @@ -259,6 +259,8 @@ // Debugging support void verify(); + static void print_compressed_class_space(outputStream* st, const char* requested_addr = 0); + class AllocRecordClosure : public StackObj { public: virtual void doit(address ptr, MetaspaceObj::Type type, int byte_size) = 0;
--- a/src/share/vm/memory/tenuredGeneration.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/memory/tenuredGeneration.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -294,8 +294,8 @@ bool res = (available >= av_promo) || (available >= max_promotion_in_bytes); if (PrintGC && Verbose) { gclog_or_tty->print_cr( - "Tenured: promo attempt is%s safe: available("SIZE_FORMAT") %s av_promo("SIZE_FORMAT")," - "max_promo("SIZE_FORMAT")", + "Tenured: promo attempt is%s safe: available(" SIZE_FORMAT ") %s av_promo(" SIZE_FORMAT ")," + "max_promo(" SIZE_FORMAT ")", res? "":" not", available, res? ">=":"<", av_promo, max_promotion_in_bytes); }
--- a/src/share/vm/memory/threadLocalAllocBuffer.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/memory/threadLocalAllocBuffer.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2018, 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 @@ -200,7 +200,7 @@ set_desired_size(initial_desired_size()); - // Following check is needed because at startup the main (primordial) + // Following check is needed because at startup the main // thread is initialized before the heap is. The initialization for // this thread is redone in startup_initialization below. if (Universe::heap() != NULL) { @@ -223,7 +223,7 @@ _global_stats = new GlobalTLABStats(); - // During jvm startup, the main (primordial) thread is initialized + // During jvm startup, the main thread is initialized // before the heap is initialized. So reinitialize it now. guarantee(Thread::current()->is_Java_thread(), "tlab initialization thread not Java thread"); Thread::current()->tlab().initialize();
--- a/src/share/vm/memory/threadLocalAllocBuffer.inline.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/memory/threadLocalAllocBuffer.inline.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -94,10 +94,10 @@ if (PrintTLAB && Verbose) { Thread* thrd = myThread(); - gclog_or_tty->print("TLAB: %s thread: "INTPTR_FORMAT" [id: %2d]" - " obj: "SIZE_FORMAT - " free: "SIZE_FORMAT - " waste: "SIZE_FORMAT"\n", + gclog_or_tty->print("TLAB: %s thread: " INTPTR_FORMAT " [id: %2d]" + " obj: " SIZE_FORMAT + " free: " SIZE_FORMAT + " waste: " SIZE_FORMAT "\n", "slow", p2i(thrd), thrd->osthread()->thread_id(), obj_size, free(), refill_waste_limit()); }
--- a/src/share/vm/memory/universe.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/memory/universe.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -882,7 +882,7 @@ Universe::set_narrow_ptrs_base(Universe::narrow_oop_base()); if (PrintCompressedOopsMode || (PrintMiscellaneous && Verbose)) { - Universe::print_compressed_oops_mode(); + Universe::print_compressed_oops_mode(tty); } } // Universe::narrow_oop_base() is one page below the heap. @@ -904,29 +904,27 @@ return JNI_OK; } -void Universe::print_compressed_oops_mode() { - tty->cr(); - tty->print("heap address: " PTR_FORMAT ", size: " SIZE_FORMAT " MB", +void Universe::print_compressed_oops_mode(outputStream* st) { + st->print("heap address: " PTR_FORMAT ", size: " SIZE_FORMAT " MB", Universe::heap()->base(), Universe::heap()->reserved_region().byte_size()/M); - tty->print(", Compressed Oops mode: %s", narrow_oop_mode_to_string(narrow_oop_mode())); + st->print(", Compressed Oops mode: %s", narrow_oop_mode_to_string(narrow_oop_mode())); if (Universe::narrow_oop_base() != 0) { - tty->print(":" PTR_FORMAT, Universe::narrow_oop_base()); + st->print(":" PTR_FORMAT, Universe::narrow_oop_base()); } if (Universe::narrow_oop_shift() != 0) { - tty->print(", Oop shift amount: %d", Universe::narrow_oop_shift()); + st->print(", Oop shift amount: %d", Universe::narrow_oop_shift()); } - tty->cr(); - tty->cr(); + st->cr(); } // Reserve the Java heap, which is now the same for all GCs. ReservedSpace Universe::reserve_heap(size_t heap_size, size_t alignment) { assert(alignment <= Arguments::conservative_max_heap_alignment(), - err_msg("actual alignment "SIZE_FORMAT" must be within maximum heap alignment "SIZE_FORMAT, + err_msg("actual alignment " SIZE_FORMAT " must be within maximum heap alignment " SIZE_FORMAT, alignment, Arguments::conservative_max_heap_alignment())); size_t total_reserved = align_size_up(heap_size, alignment); assert(!UseCompressedOops || (total_reserved <= (OopEncodingHeapMax - os::vm_page_size())),
--- a/src/share/vm/memory/universe.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/memory/universe.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -375,7 +375,7 @@ static void set_narrow_ptrs_base(address a) { _narrow_ptrs_base = a; } static address narrow_ptrs_base() { return _narrow_ptrs_base; } - static void print_compressed_oops_mode(); + static void print_compressed_oops_mode(outputStream* st); // this is set in vm_version on sparc (and then reset in universe afaict) static void set_narrow_oop_shift(int shift) {
--- a/src/share/vm/oops/constantPool.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/oops/constantPool.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -109,6 +109,16 @@ return (objArrayOop)JNIHandles::resolve(_resolved_references); } +// Called from outside constant pool resolution where a resolved_reference array +// may not be present. +objArrayOop ConstantPool::resolved_references_or_null() const { + if (_cache == NULL) { + return NULL; + } else { + return (objArrayOop)JNIHandles::resolve(_resolved_references); + } +} + // Create resolved_references array and mapping array for original cp indexes // The ldc bytecode was rewritten to have the resolved reference array index so need a way // to map it back for resolving and some unlikely miscellaneous uses. @@ -1494,7 +1504,7 @@ } case JVM_CONSTANT_Long: { u8 val = Bytes::get_Java_u8(bytes); - printf("long "INT64_FORMAT, (int64_t) *(jlong *) &val); + printf("long " INT64_FORMAT, (int64_t) *(jlong *) &val); ent_size = 8; idx++; // Long takes two cpool slots break;
--- a/src/share/vm/oops/constantPool.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/oops/constantPool.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -203,6 +203,7 @@ // resolved strings, methodHandles and callsite objects from the constant pool objArrayOop resolved_references() const; + objArrayOop resolved_references_or_null() const; // mapping resolved object array indexes to cp indexes and back. int object_to_cp_index(int index) { return _reference_map->at(index); } int cp_to_object_index(int index);
--- a/src/share/vm/oops/cpCache.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/oops/cpCache.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -314,7 +314,7 @@ adapter->size_of_parameters()); if (TraceInvokeDynamic) { - tty->print_cr("set_method_handle bc=%d appendix="PTR_FORMAT"%s method_type="PTR_FORMAT"%s method="PTR_FORMAT" ", + tty->print_cr("set_method_handle bc=%d appendix=" PTR_FORMAT "%s method_type=" PTR_FORMAT "%s method=" PTR_FORMAT " ", invoke_code, (void *)appendix(), (has_appendix ? "" : " (unused)"), (void *)method_type(), (has_method_type ? "" : " (unused)"), @@ -528,12 +528,12 @@ // print separator if (index == 0) st->print_cr(" -------------"); // print entry - st->print("%3d ("PTR_FORMAT") ", index, (intptr_t)this); + st->print("%3d (" PTR_FORMAT ") ", index, (intptr_t)this); st->print_cr("[%02x|%02x|%5d]", bytecode_2(), bytecode_1(), constant_pool_index()); - st->print_cr(" [ "PTR_FORMAT"]", (intptr_t)_f1); - st->print_cr(" [ "PTR_FORMAT"]", (intptr_t)_f2); - st->print_cr(" [ "PTR_FORMAT"]", (intptr_t)_flags); + st->print_cr(" [ " PTR_FORMAT "]", (intptr_t)_f1); + st->print_cr(" [ " PTR_FORMAT "]", (intptr_t)_f2); + st->print_cr(" [ " PTR_FORMAT "]", (intptr_t)_flags); st->print_cr(" -------------"); }
--- a/src/share/vm/oops/markOop.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/oops/markOop.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -49,7 +49,7 @@ st->print("monitor=NULL"); else { BasicLock * bl = (BasicLock *) mon->owner(); - st->print("monitor={count="INTPTR_FORMAT",waiters="INTPTR_FORMAT",recursions="INTPTR_FORMAT",owner="INTPTR_FORMAT"}", + st->print("monitor={count=" INTPTR_FORMAT ",waiters=" INTPTR_FORMAT ",recursions=" INTPTR_FORMAT ",owner=" INTPTR_FORMAT "}", mon->count(), mon->waiters(), mon->recursions(), p2i(bl)); } } else {
--- a/src/share/vm/oops/method.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/oops/method.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1969,9 +1969,9 @@ assert(is_method(), "must be method"); st->print_cr("%s", internal_name()); // get the effect of PrintOopAddress, always, for methods: - st->print_cr(" - this oop: "INTPTR_FORMAT, (intptr_t)this); + st->print_cr(" - this oop: " INTPTR_FORMAT, (intptr_t)this); st->print (" - method holder: "); method_holder()->print_value_on(st); st->cr(); - st->print (" - constants: "INTPTR_FORMAT" ", (address)constants()); + st->print (" - constants: " INTPTR_FORMAT " ", (address)constants()); constants()->print_value_on(st); st->cr(); st->print (" - access: 0x%x ", access_flags().as_int()); access_flags().print_on(st); st->cr(); st->print (" - name: "); name()->print_value_on(st); st->cr();
--- a/src/share/vm/oops/objArrayKlass.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/oops/objArrayKlass.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -657,7 +657,7 @@ if (i > max_objArray_print_length) { st->print("..."); break; } - st->print(" "INTPTR_FORMAT, (intptr_t)(void*)objArrayOop(obj)->obj_at(i)); + st->print(" " INTPTR_FORMAT, (intptr_t)(void*)objArrayOop(obj)->obj_at(i)); } st->print(" }"); }
--- a/src/share/vm/oops/oop.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/oops/oop.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -46,7 +46,7 @@ void oopDesc::print_address_on(outputStream* st) const { if (PrintOopAddress) { - st->print("{"INTPTR_FORMAT"}", this); + st->print("{" INTPTR_FORMAT "}", this); } }
--- a/src/share/vm/oops/oopsHierarchy.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/oops/oopsHierarchy.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2014, 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 @@ -112,9 +112,7 @@ // Assignment oop& operator=(const oop& o) { _o = o.obj(); return *this; } -#ifndef SOLARIS volatile oop& operator=(const oop& o) volatile { _o = o.obj(); return *this; } -#endif volatile oop& operator=(const volatile oop& o) volatile { _o = o.obj(); return *this; } // Explict user conversions @@ -123,11 +121,10 @@ operator void* () const volatile { return (void *)obj(); } #endif operator HeapWord* () const { return (HeapWord*)obj(); } - operator oopDesc* () const { return obj(); } + operator oopDesc* () const volatile { return obj(); } operator intptr_t* () const { return (intptr_t*)obj(); } operator PromotedObject* () const { return (PromotedObject*)obj(); } - operator markOop () const { return markOop(obj()); } - + operator markOop () const volatile { return markOop(obj()); } operator address () const { return (address)obj(); } // from javaCalls.cpp @@ -161,11 +158,10 @@ oop::operator=(o); \ return *this; \ } \ - NOT_SOLARIS( \ volatile type##Oop& operator=(const type##Oop& o) volatile { \ (void)const_cast<oop&>(oop::operator=(o)); \ return *this; \ - }) \ + } \ volatile type##Oop& operator=(const volatile type##Oop& o) volatile {\ (void)const_cast<oop&>(oop::operator=(o)); \ return *this; \
--- a/src/share/vm/oops/typeArrayOop.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/oops/typeArrayOop.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -129,7 +129,7 @@ Metadata* metadata_at(int which) const { return (Metadata*)*long_at_addr(which); } void metadata_at_put(int which, Metadata* contents) { - *long_at_addr(which) = (long)contents; + *long_at_addr(which) = (jlong)contents; } #else Metadata* metadata_at(int which) const {
--- a/src/share/vm/opto/buildOopMap.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/opto/buildOopMap.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2018, 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 @@ -632,7 +632,7 @@ // last block as his only undone child, we can move the OopFlow from the // pred to this block. Otherwise we have to grab a new OopFlow. OopFlow *flow = NULL; // Flag for finding optimized flow - Block *pred = (Block*)0xdeadbeef; + Block *pred = (Block*)((intptr_t)0xdeadbeef); // Scan this block's preds to find a done predecessor for (uint j = 1; j < b->num_preds(); j++) { Block* p = _cfg->get_block_for_node(b->pred(j));
--- a/src/share/vm/opto/callnode.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/opto/callnode.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -340,7 +340,7 @@ const Type *t = n->bottom_type(); switch (t->base()) { case Type::Int: - st->print(" %s%d]=#"INT32_FORMAT,msg,i,t->is_int()->get_con()); + st->print(" %s%d]=#" INT32_FORMAT,msg,i,t->is_int()->get_con()); break; case Type::AnyPtr: assert( t == TypePtr::NULL_PTR || n->in_dump(), "" ); @@ -369,7 +369,7 @@ st->print(" %s%d]=#%fF",msg,i,t->is_float_constant()->_f); break; case Type::Long: - st->print(" %s%d]=#"INT64_FORMAT,msg,i,(int64_t)(t->is_long()->get_con())); + st->print(" %s%d]=#" INT64_FORMAT,msg,i,(int64_t)(t->is_long()->get_con())); break; case Type::Half: case Type::Top:
--- a/src/share/vm/opto/chaitin.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/opto/chaitin.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2018, 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 @@ -755,7 +755,7 @@ const RegMask &rm = n->out_RegMask(); lrg.AND( rm ); - int ireg = n->ideal_reg(); + uint ireg = n->ideal_reg(); assert( !n->bottom_type()->isa_oop_ptr() || ireg == Op_RegP, "oops must be in Op_RegP's" ); @@ -961,7 +961,7 @@ // Check for bound register masks const RegMask &lrgmask = lrg.mask(); - int kreg = n->in(k)->ideal_reg(); + uint kreg = n->in(k)->ideal_reg(); bool is_vect = RegMask::is_vector(kreg); assert(n->in(k)->bottom_type()->isa_vect() == NULL || is_vect || kreg == Op_RegD || kreg == Op_RegL,
--- a/src/share/vm/opto/compile.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/opto/compile.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -2394,8 +2394,8 @@ print_method(PHASE_FINAL_CODE); // He's dead, Jim. - _cfg = (PhaseCFG*)0xdeadbeef; - _regalloc = (PhaseChaitin*)0xdeadbeef; + _cfg = (PhaseCFG*)((intptr_t)0xdeadbeef); + _regalloc = (PhaseChaitin*)((intptr_t)0xdeadbeef); } @@ -3482,7 +3482,7 @@ _root->verify_edges(visited); if (no_dead_code) { // Now make sure that no visited node is used by an unvisited node. - bool dead_nodes = 0; + bool dead_nodes = false; Unique_Node_List checked(area); while (visited.size() > 0) { Node* n = visited.pop(); @@ -3493,14 +3493,16 @@ if (visited.member(use)) continue; // already in the graph if (use->is_Con()) continue; // a dead ConNode is OK // At this point, we have found a dead node which is DU-reachable. - if (dead_nodes++ == 0) + if (!dead_nodes) { tty->print_cr("*** Dead nodes reachable via DU edges:"); + dead_nodes = true; + } use->dump(2); tty->print_cr("---"); checked.push(use); // No repeats; pretend it is now checked. } } - assert(dead_nodes == 0, "using nodes must be reachable from root"); + assert(!dead_nodes, "using nodes must be reachable from root"); } } }
--- a/src/share/vm/opto/escape.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/opto/escape.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -2016,8 +2016,10 @@ // Check for unsafe oop field access for (DUIterator_Fast imax, i = n->fast_outs(imax); i < imax; i++) { int opcode = n->fast_out(i)->Opcode(); - if (opcode == Op_StoreP || opcode == Op_LoadP || - opcode == Op_StoreN || opcode == Op_LoadN) { + if (opcode == Op_StoreP || opcode == Op_StoreN || + opcode == Op_LoadP || opcode == Op_LoadN || + opcode == Op_GetAndSetP || opcode == Op_GetAndSetN || + opcode == Op_CompareAndSwapP || opcode == Op_CompareAndSwapN) { bt = T_OBJECT; (*unsafe) = true; break; @@ -2037,8 +2039,10 @@ // Allocation initialization, ThreadLocal field access, unsafe access for (DUIterator_Fast imax, i = n->fast_outs(imax); i < imax; i++) { int opcode = n->fast_out(i)->Opcode(); - if (opcode == Op_StoreP || opcode == Op_LoadP || - opcode == Op_StoreN || opcode == Op_LoadN) { + if (opcode == Op_StoreP || opcode == Op_StoreN || + opcode == Op_LoadP || opcode == Op_LoadN || + opcode == Op_GetAndSetP || opcode == Op_GetAndSetN || + opcode == Op_CompareAndSwapP || opcode == Op_CompareAndSwapN) { bt = T_OBJECT; break; }
--- a/src/share/vm/opto/gcm.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/opto/gcm.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -1377,7 +1377,7 @@ } #endif // Dead. - _node_latency = (GrowableArray<uint> *)0xdeadbeef; + _node_latency = (GrowableArray<uint> *)((intptr_t)0xdeadbeef); } bool PhaseCFG::do_global_code_motion() {
--- a/src/share/vm/opto/idealGraphPrinter.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/opto/idealGraphPrinter.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2018, 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 @@ -612,7 +612,7 @@ } #endif - if (_chaitin && _chaitin != (PhaseChaitin *)0xdeadbeef) { + if (_chaitin && _chaitin != (PhaseChaitin *)((intptr_t)0xdeadbeef)) { buffer[0] = 0; _chaitin->dump_register(node, buffer); print_prop("reg", buffer);
--- a/src/share/vm/opto/macro.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/opto/macro.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2018, 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 @@ -1775,7 +1775,7 @@ i_o = pf_phi_abio; } else if( UseTLAB && AllocatePrefetchStyle == 3 ) { // Insert a prefetch for each allocation. - // This code is used for Sparc with BIS. + // This code is used to generate 1 prefetch instruction per cache line. Node *pf_region = new (C) RegionNode(3); Node *pf_phi_rawmem = new (C) PhiNode( pf_region, Type::MEMORY, TypeRawPtr::BOTTOM ); @@ -1791,6 +1791,8 @@ transform_later(cache_adr); cache_adr = new (C) CastP2XNode(needgc_false, cache_adr); transform_later(cache_adr); + // Address is aligned to execute prefetch to the beginning of cache line size + // (it is important when BIS instruction is used on SPARC as prefetch). Node* mask = _igvn.MakeConX(~(intptr_t)(step_size-1)); cache_adr = new (C) AndXNode(cache_adr, mask); transform_later(cache_adr);
--- a/src/share/vm/opto/matcher.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/opto/matcher.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -195,7 +195,7 @@ const TypeTuple *range = C->tf()->range(); if( range->cnt() > TypeFunc::Parms ) { // If not a void function // Get ideal-register return type - int ireg = range->field_at(TypeFunc::Parms)->ideal_reg(); + uint ireg = range->field_at(TypeFunc::Parms)->ideal_reg(); // Get machine return register uint sop = C->start()->Opcode(); OptoRegPair regs = return_value(ireg, false);
--- a/src/share/vm/opto/matcher.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/opto/matcher.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -283,8 +283,8 @@ } // Vector ideal reg - static const int vector_ideal_reg(int len); - static const int vector_shift_count_ideal_reg(int len); + static const uint vector_ideal_reg(int len); + static const uint vector_shift_count_ideal_reg(int len); // CPU supports misaligned vectors store/load. static const bool misaligned_vectors_ok(); @@ -326,8 +326,8 @@ virtual OptoReg::Name return_addr() const; RegMask _return_addr_mask; // Return value register. On Intel it is EAX. On Sparc i0/o0. - static OptoRegPair return_value(int ideal_reg, bool is_outgoing); - static OptoRegPair c_return_value(int ideal_reg, bool is_outgoing); + static OptoRegPair return_value(uint ideal_reg, bool is_outgoing); + static OptoRegPair c_return_value(uint ideal_reg, bool is_outgoing); RegMask _return_value_mask; // Inline Cache Register static OptoReg::Name inline_cache_reg();
--- a/src/share/vm/opto/output.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/opto/output.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2018, 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 @@ -2687,7 +2687,7 @@ } Node *kill = def; // Rename 'def' to more descriptive 'kill' - debug_only( def = (Node*)0xdeadbeef; ) + debug_only( def = (Node*)((intptr_t)0xdeadbeef); ) // After some number of kills there _may_ be a later def Node *later_def = NULL;
--- a/src/share/vm/opto/reg_split.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/opto/reg_split.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2018, 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 @@ -59,7 +59,7 @@ // If ideal reg doesn't exist we've got a bad schedule happening // that is forcing us to spill something that isn't spillable. // Bail rather than abort - int ireg = def->ideal_reg(); + uint ireg = def->ideal_reg(); if( ireg == 0 || ireg == Op_RegFlags ) { assert(false, "attempted to spill a non-spillable item"); C->record_method_not_compilable("attempted to spill a non-spillable item"); @@ -1163,7 +1163,7 @@ // Grab UP info for DEF const RegMask &dmask = n->out_RegMask(); bool defup = dmask.is_UP(); - int ireg = n->ideal_reg(); + uint ireg = n->ideal_reg(); bool is_vect = RegMask::is_vector(ireg); // Only split at Def if this is a HRP block or bound (and spilled once) if( !n->rematerialize() &&
--- a/src/share/vm/opto/split_if.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/opto/split_if.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2018, 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 @@ -255,7 +255,7 @@ Node *PhaseIdealLoop::spinup( Node *iff_dom, Node *new_false, Node *new_true, Node *use_blk, Node *def, small_cache *cache ) { if (use_blk->is_top()) // Handle dead uses return use_blk; - Node *prior_n = (Node*)0xdeadbeef; + Node *prior_n = (Node*)((intptr_t)0xdeadbeef); Node *n = use_blk; // Get path input assert( use_blk != iff_dom, "" ); // Here's the "spinup" the dominator tree loop. Do a cache-check @@ -302,7 +302,7 @@ } // Update cache everywhere - prior_n = (Node*)0xdeadbeef; // Reset IDOM walk + prior_n = (Node*)((intptr_t)0xdeadbeef); // Reset IDOM walk n = use_blk; // Get path input // Spin-up the idom tree again, basically doing path-compression. // Insert cache entries along the way, so that if we ever hit this
--- a/src/share/vm/opto/type.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/opto/type.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2017, 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 @@ -51,7 +51,7 @@ Dict* Type::_shared_type_dict = NULL; // Array which maps compiler types to Basic Types -Type::TypeInfo Type::_type_info[Type::lastype] = { +const Type::TypeInfo Type::_type_info[Type::lastype] = { { Bad, T_ILLEGAL, "bad", false, Node::NotAMachineReg, relocInfo::none }, // Bad { Control, T_ILLEGAL, "control", false, 0, relocInfo::none }, // Control { Bottom, T_VOID, "top", false, 0, relocInfo::none }, // Top
--- a/src/share/vm/opto/type.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/opto/type.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -130,17 +130,17 @@ private: typedef struct { - const TYPES dual_type; - const BasicType basic_type; - const char* msg; - const bool isa_oop; - const int ideal_reg; - const relocInfo::relocType reloc; + TYPES dual_type; + BasicType basic_type; + const char* msg; + bool isa_oop; + uint ideal_reg; + relocInfo::relocType reloc; } TypeInfo; // Dictionary of types shared among compilations. static Dict* _shared_type_dict; - static TypeInfo _type_info[]; + static const TypeInfo _type_info[]; static int uhash( const Type *const t ); // Structural equality check. Assumes that cmp() has already compared @@ -407,7 +407,7 @@ // Mapping from compiler type to VM BasicType BasicType basic_type() const { return _type_info[_base].basic_type; } - int ideal_reg() const { return _type_info[_base].ideal_reg; } + uint ideal_reg() const { return _type_info[_base].ideal_reg; } const char* msg() const { return _type_info[_base].msg; } bool isa_oop_ptr() const { return _type_info[_base].isa_oop; } relocInfo::relocType reloc() const { return _type_info[_base].reloc; }
--- a/src/share/vm/prims/jvmtiTagMap.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/prims/jvmtiTagMap.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2018, 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 @@ -47,6 +47,7 @@ #include "services/serviceUtil.hpp" #include "utilities/macros.hpp" #if INCLUDE_ALL_GCS +#include "gc_implementation/g1/g1SATBCardTableModRefBS.hpp" #include "gc_implementation/parallelScavenge/parallelScavengeHeap.hpp" #endif // INCLUDE_ALL_GCS @@ -1519,6 +1520,14 @@ if (_tags[i] == entry->tag()) { oop o = entry->object(); assert(o != NULL && Universe::heap()->is_in_reserved(o), "sanity check"); +#if INCLUDE_ALL_GCS + if (UseG1GC) { + // The reference in this tag map could be the only (implicitly weak) + // reference to that object. If we hand it out, we need to keep it live wrt + // SATB marking similar to other j.l.ref.Reference referents. + G1SATBCardTableModRefBS::enqueue(o); + } +#endif jobject ref = JNIHandles::make_local(JavaThread::current(), o); _object_results->append(ref); _tag_results->append((uint64_t)entry->tag());
--- a/src/share/vm/prims/methodHandles.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/prims/methodHandles.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1329,40 +1329,40 @@ #define LANG "Ljava/lang/" #define JLINV "Ljava/lang/invoke/" -#define OBJ LANG"Object;" -#define CLS LANG"Class;" -#define STRG LANG"String;" -#define CS JLINV"CallSite;" -#define MT JLINV"MethodType;" -#define MH JLINV"MethodHandle;" -#define MEM JLINV"MemberName;" +#define OBJ LANG "Object;" +#define CLS LANG "Class;" +#define STRG LANG "String;" +#define CS JLINV "CallSite;" +#define MT JLINV "MethodType;" +#define MH JLINV "MethodHandle;" +#define MEM JLINV "MemberName;" #define CC (char*) /*cast a literal from (const char*)*/ #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &f) // These are the native methods on java.lang.invoke.MethodHandleNatives. static JNINativeMethod MHN_methods[] = { - {CC"init", CC"("MEM""OBJ")V", FN_PTR(MHN_init_Mem)}, - {CC"expand", CC"("MEM")V", FN_PTR(MHN_expand_Mem)}, - {CC"resolve", CC"("MEM""CLS")"MEM, FN_PTR(MHN_resolve_Mem)}, - {CC"getConstant", CC"(I)I", FN_PTR(MHN_getConstant)}, + {CC "init", CC "(" MEM "" OBJ ")V", FN_PTR(MHN_init_Mem)}, + {CC"expand", CC "(" MEM ")V", FN_PTR(MHN_expand_Mem)}, + {CC "resolve", CC "(" MEM "" CLS ")" MEM, FN_PTR(MHN_resolve_Mem)}, + {CC "getConstant", CC "(I)I", FN_PTR(MHN_getConstant)}, // static native int getNamedCon(int which, Object[] name) - {CC"getNamedCon", CC"(I["OBJ")I", FN_PTR(MHN_getNamedCon)}, + {CC "getNamedCon", CC "(I[" OBJ ")I", FN_PTR(MHN_getNamedCon)}, // static native int getMembers(Class<?> defc, String matchName, String matchSig, // int matchFlags, Class<?> caller, int skip, MemberName[] results); - {CC"getMembers", CC"("CLS""STRG""STRG"I"CLS"I["MEM")I", FN_PTR(MHN_getMembers)}, - {CC"objectFieldOffset", CC"("MEM")J", FN_PTR(MHN_objectFieldOffset)}, - {CC"setCallSiteTargetNormal", CC"("CS""MH")V", FN_PTR(MHN_setCallSiteTargetNormal)}, - {CC"setCallSiteTargetVolatile", CC"("CS""MH")V", FN_PTR(MHN_setCallSiteTargetVolatile)}, - {CC"staticFieldOffset", CC"("MEM")J", FN_PTR(MHN_staticFieldOffset)}, - {CC"staticFieldBase", CC"("MEM")"OBJ, FN_PTR(MHN_staticFieldBase)}, - {CC"getMemberVMInfo", CC"("MEM")"OBJ, FN_PTR(MHN_getMemberVMInfo)} + {CC "getMembers", CC "(" CLS "" STRG "" STRG "I" CLS "I[" MEM ")I", FN_PTR(MHN_getMembers)}, + {CC "objectFieldOffset", CC "(" MEM ")J", FN_PTR(MHN_objectFieldOffset)}, + {CC "setCallSiteTargetNormal", CC "(" CS "" MH ")V", FN_PTR(MHN_setCallSiteTargetNormal)}, + {CC "setCallSiteTargetVolatile", CC "(" CS "" MH ")V", FN_PTR(MHN_setCallSiteTargetVolatile)}, + {CC "staticFieldOffset", CC "(" MEM ")J", FN_PTR(MHN_staticFieldOffset)}, + {CC "staticFieldBase", CC "(" MEM ")" OBJ, FN_PTR(MHN_staticFieldBase)}, + {CC "getMemberVMInfo", CC "(" MEM ")" OBJ, FN_PTR(MHN_getMemberVMInfo)} }; static JNINativeMethod MH_methods[] = { // UnsupportedOperationException throwers - {CC"invoke", CC"(["OBJ")"OBJ, FN_PTR(MH_invoke_UOE)}, - {CC"invokeExact", CC"(["OBJ")"OBJ, FN_PTR(MH_invokeExact_UOE)} + {CC "invoke", CC "([" OBJ ")" OBJ, FN_PTR(MH_invoke_UOE)}, + {CC "invokeExact", CC "([" OBJ ")" OBJ, FN_PTR(MH_invokeExact_UOE)} }; /**
--- a/src/share/vm/prims/perf.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/prims/perf.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -290,17 +290,17 @@ #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &f) #define BB "Ljava/nio/ByteBuffer;" #define JLS "Ljava/lang/String;" -#define CL_ARGS CC"("JLS"IIJ)"BB -#define CBA_ARGS CC"("JLS"II[BI)"BB +#define CL_ARGS CC "(" JLS "IIJ)" BB +#define CBA_ARGS CC "(" JLS "II[BI)" BB static JNINativeMethod perfmethods[] = { - {CC"attach", CC"("JLS"II)"BB, FN_PTR(Perf_Attach)}, - {CC"detach", CC"("BB")V", FN_PTR(Perf_Detach)}, - {CC"createLong", CL_ARGS, FN_PTR(Perf_CreateLong)}, - {CC"createByteArray", CBA_ARGS, FN_PTR(Perf_CreateByteArray)}, - {CC"highResCounter", CC"()J", FN_PTR(Perf_HighResCounter)}, - {CC"highResFrequency", CC"()J", FN_PTR(Perf_HighResFrequency)} + {CC "attach", CC "(" JLS "II)" BB, FN_PTR(Perf_Attach)}, + {CC "detach", CC "(" BB ")V", FN_PTR(Perf_Detach)}, + {CC "createLong", CL_ARGS, FN_PTR(Perf_CreateLong)}, + {CC "createByteArray", CBA_ARGS, FN_PTR(Perf_CreateByteArray)}, + {CC "highResCounter", CC "()J", FN_PTR(Perf_HighResCounter)}, + {CC "highResFrequency", CC "()J", FN_PTR(Perf_HighResFrequency)} }; #undef CBA_ARGS
--- a/src/share/vm/prims/unsafe.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/prims/unsafe.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -199,37 +199,40 @@ // Get/SetObject must be special-cased, since it works with handles. +// We could be accessing the referent field in a reference +// object. If G1 is enabled then we need to register non-null +// referent with the SATB barrier. + +#if INCLUDE_ALL_GCS +static bool is_java_lang_ref_Reference_access(oop o, jlong offset) { + if (offset == java_lang_ref_Reference::referent_offset && o != NULL) { + Klass* k = o->klass(); + if (InstanceKlass::cast(k)->reference_type() != REF_NONE) { + assert(InstanceKlass::cast(k)->is_subclass_of(SystemDictionary::Reference_klass()), "sanity"); + return true; + } + } + return false; +} +#endif + +static void ensure_satb_referent_alive(oop o, jlong offset, oop v) { +#if INCLUDE_ALL_GCS + if (UseG1GC && v != NULL && is_java_lang_ref_Reference_access(o, offset)) { + G1SATBCardTableModRefBS::enqueue(v); + } +#endif +} + // The xxx140 variants for backward compatibility do not allow a full-width offset. UNSAFE_ENTRY(jobject, Unsafe_GetObject140(JNIEnv *env, jobject unsafe, jobject obj, jint offset)) UnsafeWrapper("Unsafe_GetObject"); if (obj == NULL) THROW_0(vmSymbols::java_lang_NullPointerException()); GET_OOP_FIELD(obj, offset, v) - jobject ret = JNIHandles::make_local(env, v); -#if INCLUDE_ALL_GCS - // We could be accessing the referent field in a reference - // object. If G1 is enabled then we need to register a non-null - // referent with the SATB barrier. - if (UseG1GC) { - bool needs_barrier = false; - if (ret != NULL) { - if (offset == java_lang_ref_Reference::referent_offset) { - oop o = JNIHandles::resolve_non_null(obj); - Klass* k = o->klass(); - if (InstanceKlass::cast(k)->reference_type() != REF_NONE) { - assert(InstanceKlass::cast(k)->is_subclass_of(SystemDictionary::Reference_klass()), "sanity"); - needs_barrier = true; - } - } - } + ensure_satb_referent_alive(p, offset, v); - if (needs_barrier) { - oop referent = JNIHandles::resolve(ret); - G1SATBCardTableModRefBS::enqueue(referent); - } - } -#endif // INCLUDE_ALL_GCS - return ret; + return JNIHandles::make_local(env, v); UNSAFE_END UNSAFE_ENTRY(void, Unsafe_SetObject140(JNIEnv *env, jobject unsafe, jobject obj, jint offset, jobject x_h)) @@ -262,32 +265,10 @@ UNSAFE_ENTRY(jobject, Unsafe_GetObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) UnsafeWrapper("Unsafe_GetObject"); GET_OOP_FIELD(obj, offset, v) - jobject ret = JNIHandles::make_local(env, v); -#if INCLUDE_ALL_GCS - // We could be accessing the referent field in a reference - // object. If G1 is enabled then we need to register non-null - // referent with the SATB barrier. - if (UseG1GC) { - bool needs_barrier = false; - if (ret != NULL) { - if (offset == java_lang_ref_Reference::referent_offset && obj != NULL) { - oop o = JNIHandles::resolve(obj); - Klass* k = o->klass(); - if (InstanceKlass::cast(k)->reference_type() != REF_NONE) { - assert(InstanceKlass::cast(k)->is_subclass_of(SystemDictionary::Reference_klass()), "sanity"); - needs_barrier = true; - } - } - } + ensure_satb_referent_alive(p, offset, v); - if (needs_barrier) { - oop referent = JNIHandles::resolve(ret); - G1SATBCardTableModRefBS::enqueue(referent); - } - } -#endif // INCLUDE_ALL_GCS - return ret; + return JNIHandles::make_local(env, v); UNSAFE_END UNSAFE_ENTRY(void, Unsafe_SetObject(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jobject x_h)) @@ -312,6 +293,9 @@ } else { (void)const_cast<oop&>(v = *(volatile oop*) addr); } + + ensure_satb_referent_alive(p, offset, v); + OrderAccess::acquire(); return JNIHandles::make_local(env, v); UNSAFE_END @@ -1366,47 +1350,47 @@ #define LANG "Ljava/lang/" -#define OBJ LANG"Object;" -#define CLS LANG"Class;" -#define CTR LANG"reflect/Constructor;" -#define FLD LANG"reflect/Field;" -#define MTH LANG"reflect/Method;" -#define THR LANG"Throwable;" +#define OBJ LANG "Object;" +#define CLS LANG "Class;" +#define CTR LANG "reflect/Constructor;" +#define FLD LANG "reflect/Field;" +#define MTH LANG "reflect/Method;" +#define THR LANG "Throwable;" -#define DC0_Args LANG"String;[BII" -#define DC_Args DC0_Args LANG"ClassLoader;" "Ljava/security/ProtectionDomain;" +#define DC0_Args LANG "String;[BII" +#define DC_Args DC0_Args LANG "ClassLoader;" "Ljava/security/ProtectionDomain;" #define CC (char*) /*cast a literal from (const char*)*/ #define FN_PTR(f) CAST_FROM_FN_PTR(void*, &f) // define deprecated accessors for compabitility with 1.4.0 #define DECLARE_GETSETOOP_140(Boolean, Z) \ - {CC"get"#Boolean, CC"("OBJ"I)"#Z, FN_PTR(Unsafe_Get##Boolean##140)}, \ - {CC"put"#Boolean, CC"("OBJ"I"#Z")V", FN_PTR(Unsafe_Set##Boolean##140)} + {CC "get" #Boolean, CC "(" OBJ "I)" #Z, FN_PTR(Unsafe_Get##Boolean##140)}, \ + {CC "put" #Boolean, CC "(" OBJ "I" #Z ")V", FN_PTR(Unsafe_Set##Boolean##140)} // Note: In 1.4.1, getObject and kin take both int and long offsets. #define DECLARE_GETSETOOP_141(Boolean, Z) \ - {CC"get"#Boolean, CC"("OBJ"J)"#Z, FN_PTR(Unsafe_Get##Boolean)}, \ - {CC"put"#Boolean, CC"("OBJ"J"#Z")V", FN_PTR(Unsafe_Set##Boolean)} + {CC "get" #Boolean, CC "(" OBJ "J)" #Z, FN_PTR(Unsafe_Get##Boolean)}, \ + {CC "put" #Boolean, CC "(" OBJ "J" #Z ")V", FN_PTR(Unsafe_Set##Boolean)} // Note: In 1.5.0, there are volatile versions too #define DECLARE_GETSETOOP(Boolean, Z) \ - {CC"get"#Boolean, CC"("OBJ"J)"#Z, FN_PTR(Unsafe_Get##Boolean)}, \ - {CC"put"#Boolean, CC"("OBJ"J"#Z")V", FN_PTR(Unsafe_Set##Boolean)}, \ - {CC"get"#Boolean"Volatile", CC"("OBJ"J)"#Z, FN_PTR(Unsafe_Get##Boolean##Volatile)}, \ - {CC"put"#Boolean"Volatile", CC"("OBJ"J"#Z")V", FN_PTR(Unsafe_Set##Boolean##Volatile)} + {CC "get" #Boolean, CC "(" OBJ "J)" #Z, FN_PTR(Unsafe_Get##Boolean)}, \ + {CC "put" #Boolean, CC "(" OBJ "J" #Z ")V", FN_PTR(Unsafe_Set##Boolean)}, \ + {CC "get" #Boolean "Volatile", CC "(" OBJ "J)" #Z, FN_PTR(Unsafe_Get##Boolean##Volatile)}, \ + {CC "put" #Boolean "Volatile", CC "(" OBJ "J" #Z ")V", FN_PTR(Unsafe_Set##Boolean##Volatile)} #define DECLARE_GETSETNATIVE(Byte, B) \ - {CC"get"#Byte, CC"("ADR")"#B, FN_PTR(Unsafe_GetNative##Byte)}, \ - {CC"put"#Byte, CC"("ADR#B")V", FN_PTR(Unsafe_SetNative##Byte)} + {CC "get" #Byte, CC "(" ADR ")" #B, FN_PTR(Unsafe_GetNative##Byte)}, \ + {CC "put" #Byte, CC "(" ADR#B ")V", FN_PTR(Unsafe_SetNative##Byte)} // These are the methods for 1.4.0 static JNINativeMethod methods_140[] = { - {CC"getObject", CC"("OBJ"I)"OBJ"", FN_PTR(Unsafe_GetObject140)}, - {CC"putObject", CC"("OBJ"I"OBJ")V", FN_PTR(Unsafe_SetObject140)}, + {CC "getObject", CC "(" OBJ "I)" OBJ "", FN_PTR(Unsafe_GetObject140)}, + {CC "putObject", CC "(" OBJ "I" OBJ ")V", FN_PTR(Unsafe_SetObject140)}, DECLARE_GETSETOOP_140(Boolean, Z), DECLARE_GETSETOOP_140(Byte, B), @@ -1425,33 +1409,33 @@ DECLARE_GETSETNATIVE(Float, F), DECLARE_GETSETNATIVE(Double, D), - {CC"getAddress", CC"("ADR")"ADR, FN_PTR(Unsafe_GetNativeAddress)}, - {CC"putAddress", CC"("ADR""ADR")V", FN_PTR(Unsafe_SetNativeAddress)}, + {CC "getAddress", CC "(" ADR ")" ADR, FN_PTR(Unsafe_GetNativeAddress)}, + {CC "putAddress", CC "(" ADR "" ADR ")V", FN_PTR(Unsafe_SetNativeAddress)}, - {CC"allocateMemory", CC"(J)"ADR, FN_PTR(Unsafe_AllocateMemory)}, - {CC"reallocateMemory", CC"("ADR"J)"ADR, FN_PTR(Unsafe_ReallocateMemory)}, - {CC"freeMemory", CC"("ADR")V", FN_PTR(Unsafe_FreeMemory)}, + {CC "allocateMemory", CC "(J)" ADR, FN_PTR(Unsafe_AllocateMemory)}, + {CC "reallocateMemory", CC "(" ADR "J)" ADR, FN_PTR(Unsafe_ReallocateMemory)}, + {CC "freeMemory", CC "(" ADR ")V", FN_PTR(Unsafe_FreeMemory)}, - {CC"fieldOffset", CC"("FLD")I", FN_PTR(Unsafe_FieldOffset)}, - {CC"staticFieldBase", CC"("CLS")"OBJ, FN_PTR(Unsafe_StaticFieldBaseFromClass)}, - {CC"ensureClassInitialized",CC"("CLS")V", FN_PTR(Unsafe_EnsureClassInitialized)}, - {CC"arrayBaseOffset", CC"("CLS")I", FN_PTR(Unsafe_ArrayBaseOffset)}, - {CC"arrayIndexScale", CC"("CLS")I", FN_PTR(Unsafe_ArrayIndexScale)}, - {CC"addressSize", CC"()I", FN_PTR(Unsafe_AddressSize)}, - {CC"pageSize", CC"()I", FN_PTR(Unsafe_PageSize)}, + {CC "fieldOffset", CC "(" FLD ")I", FN_PTR(Unsafe_FieldOffset)}, + {CC "staticFieldBase", CC "(" CLS ")" OBJ, FN_PTR(Unsafe_StaticFieldBaseFromClass)}, + {CC "ensureClassInitialized",CC "(" CLS ")V", FN_PTR(Unsafe_EnsureClassInitialized)}, + {CC "arrayBaseOffset", CC "(" CLS ")I", FN_PTR(Unsafe_ArrayBaseOffset)}, + {CC "arrayIndexScale", CC "(" CLS ")I", FN_PTR(Unsafe_ArrayIndexScale)}, + {CC "addressSize", CC "()I", FN_PTR(Unsafe_AddressSize)}, + {CC "pageSize", CC "()I", FN_PTR(Unsafe_PageSize)}, - {CC"defineClass", CC"("DC0_Args")"CLS, FN_PTR(Unsafe_DefineClass0)}, - {CC"defineClass", CC"("DC_Args")"CLS, FN_PTR(Unsafe_DefineClass)}, - {CC"allocateInstance", CC"("CLS")"OBJ, FN_PTR(Unsafe_AllocateInstance)}, - {CC"monitorEnter", CC"("OBJ")V", FN_PTR(Unsafe_MonitorEnter)}, - {CC"monitorExit", CC"("OBJ")V", FN_PTR(Unsafe_MonitorExit)}, - {CC"throwException", CC"("THR")V", FN_PTR(Unsafe_ThrowException)} + {CC "defineClass", CC "(" DC0_Args ")" CLS, FN_PTR(Unsafe_DefineClass0)}, + {CC "defineClass", CC "(" DC_Args ")" CLS, FN_PTR(Unsafe_DefineClass)}, + {CC "allocateInstance", CC "(" CLS ")" OBJ, FN_PTR(Unsafe_AllocateInstance)}, + {CC "monitorEnter", CC "(" OBJ ")V", FN_PTR(Unsafe_MonitorEnter)}, + {CC "monitorExit", CC "(" OBJ ")V", FN_PTR(Unsafe_MonitorExit)}, + {CC "throwException", CC "(" THR ")V", FN_PTR(Unsafe_ThrowException)} }; // These are the methods prior to the JSR 166 changes in 1.5.0 static JNINativeMethod methods_141[] = { - {CC"getObject", CC"("OBJ"J)"OBJ"", FN_PTR(Unsafe_GetObject)}, - {CC"putObject", CC"("OBJ"J"OBJ")V", FN_PTR(Unsafe_SetObject)}, + {CC "getObject", CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObject)}, + {CC "putObject", CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetObject)}, DECLARE_GETSETOOP_141(Boolean, Z), DECLARE_GETSETOOP_141(Byte, B), @@ -1470,37 +1454,37 @@ DECLARE_GETSETNATIVE(Float, F), DECLARE_GETSETNATIVE(Double, D), - {CC"getAddress", CC"("ADR")"ADR, FN_PTR(Unsafe_GetNativeAddress)}, - {CC"putAddress", CC"("ADR""ADR")V", FN_PTR(Unsafe_SetNativeAddress)}, + {CC "getAddress", CC "(" ADR ")" ADR, FN_PTR(Unsafe_GetNativeAddress)}, + {CC "putAddress", CC "(" ADR "" ADR ")V", FN_PTR(Unsafe_SetNativeAddress)}, - {CC"allocateMemory", CC"(J)"ADR, FN_PTR(Unsafe_AllocateMemory)}, - {CC"reallocateMemory", CC"("ADR"J)"ADR, FN_PTR(Unsafe_ReallocateMemory)}, - {CC"freeMemory", CC"("ADR")V", FN_PTR(Unsafe_FreeMemory)}, + {CC "allocateMemory", CC "(J)" ADR, FN_PTR(Unsafe_AllocateMemory)}, + {CC "reallocateMemory", CC "(" ADR "J)" ADR, FN_PTR(Unsafe_ReallocateMemory)}, + {CC "freeMemory", CC "(" ADR ")V", FN_PTR(Unsafe_FreeMemory)}, - {CC"objectFieldOffset", CC"("FLD")J", FN_PTR(Unsafe_ObjectFieldOffset)}, - {CC"staticFieldOffset", CC"("FLD")J", FN_PTR(Unsafe_StaticFieldOffset)}, - {CC"staticFieldBase", CC"("FLD")"OBJ, FN_PTR(Unsafe_StaticFieldBaseFromField)}, - {CC"ensureClassInitialized",CC"("CLS")V", FN_PTR(Unsafe_EnsureClassInitialized)}, - {CC"arrayBaseOffset", CC"("CLS")I", FN_PTR(Unsafe_ArrayBaseOffset)}, - {CC"arrayIndexScale", CC"("CLS")I", FN_PTR(Unsafe_ArrayIndexScale)}, - {CC"addressSize", CC"()I", FN_PTR(Unsafe_AddressSize)}, - {CC"pageSize", CC"()I", FN_PTR(Unsafe_PageSize)}, + {CC "objectFieldOffset", CC "(" FLD ")J", FN_PTR(Unsafe_ObjectFieldOffset)}, + {CC "staticFieldOffset", CC "(" FLD ")J", FN_PTR(Unsafe_StaticFieldOffset)}, + {CC "staticFieldBase", CC "(" FLD ")" OBJ, FN_PTR(Unsafe_StaticFieldBaseFromField)}, + {CC "ensureClassInitialized",CC "(" CLS ")V", FN_PTR(Unsafe_EnsureClassInitialized)}, + {CC "arrayBaseOffset", CC "(" CLS ")I", FN_PTR(Unsafe_ArrayBaseOffset)}, + {CC "arrayIndexScale", CC "(" CLS ")I", FN_PTR(Unsafe_ArrayIndexScale)}, + {CC "addressSize", CC "()I", FN_PTR(Unsafe_AddressSize)}, + {CC "pageSize", CC "()I", FN_PTR(Unsafe_PageSize)}, - {CC"defineClass", CC"("DC0_Args")"CLS, FN_PTR(Unsafe_DefineClass0)}, - {CC"defineClass", CC"("DC_Args")"CLS, FN_PTR(Unsafe_DefineClass)}, - {CC"allocateInstance", CC"("CLS")"OBJ, FN_PTR(Unsafe_AllocateInstance)}, - {CC"monitorEnter", CC"("OBJ")V", FN_PTR(Unsafe_MonitorEnter)}, - {CC"monitorExit", CC"("OBJ")V", FN_PTR(Unsafe_MonitorExit)}, - {CC"throwException", CC"("THR")V", FN_PTR(Unsafe_ThrowException)} + {CC "defineClass", CC "(" DC0_Args ")" CLS, FN_PTR(Unsafe_DefineClass0)}, + {CC "defineClass", CC "(" DC_Args ")" CLS, FN_PTR(Unsafe_DefineClass)}, + {CC "allocateInstance", CC "(" CLS ")" OBJ, FN_PTR(Unsafe_AllocateInstance)}, + {CC "monitorEnter", CC "(" OBJ ")V", FN_PTR(Unsafe_MonitorEnter)}, + {CC "monitorExit", CC "(" OBJ ")V", FN_PTR(Unsafe_MonitorExit)}, + {CC "throwException", CC "(" THR ")V", FN_PTR(Unsafe_ThrowException)} }; // These are the methods prior to the JSR 166 changes in 1.6.0 static JNINativeMethod methods_15[] = { - {CC"getObject", CC"("OBJ"J)"OBJ"", FN_PTR(Unsafe_GetObject)}, - {CC"putObject", CC"("OBJ"J"OBJ")V", FN_PTR(Unsafe_SetObject)}, - {CC"getObjectVolatile",CC"("OBJ"J)"OBJ"", FN_PTR(Unsafe_GetObjectVolatile)}, - {CC"putObjectVolatile",CC"("OBJ"J"OBJ")V", FN_PTR(Unsafe_SetObjectVolatile)}, + {CC "getObject", CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObject)}, + {CC "putObject", CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetObject)}, + {CC "getObjectVolatile",CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObjectVolatile)}, + {CC "putObjectVolatile",CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetObjectVolatile)}, DECLARE_GETSETOOP(Boolean, Z), @@ -1520,42 +1504,42 @@ DECLARE_GETSETNATIVE(Float, F), DECLARE_GETSETNATIVE(Double, D), - {CC"getAddress", CC"("ADR")"ADR, FN_PTR(Unsafe_GetNativeAddress)}, - {CC"putAddress", CC"("ADR""ADR")V", FN_PTR(Unsafe_SetNativeAddress)}, + {CC "getAddress", CC "(" ADR ")" ADR, FN_PTR(Unsafe_GetNativeAddress)}, + {CC "putAddress", CC "(" ADR "" ADR ")V", FN_PTR(Unsafe_SetNativeAddress)}, - {CC"allocateMemory", CC"(J)"ADR, FN_PTR(Unsafe_AllocateMemory)}, - {CC"reallocateMemory", CC"("ADR"J)"ADR, FN_PTR(Unsafe_ReallocateMemory)}, - {CC"freeMemory", CC"("ADR")V", FN_PTR(Unsafe_FreeMemory)}, + {CC "allocateMemory", CC "(J)" ADR, FN_PTR(Unsafe_AllocateMemory)}, + {CC "reallocateMemory", CC "(" ADR "J)" ADR, FN_PTR(Unsafe_ReallocateMemory)}, + {CC "freeMemory", CC "(" ADR ")V", FN_PTR(Unsafe_FreeMemory)}, - {CC"objectFieldOffset", CC"("FLD")J", FN_PTR(Unsafe_ObjectFieldOffset)}, - {CC"staticFieldOffset", CC"("FLD")J", FN_PTR(Unsafe_StaticFieldOffset)}, - {CC"staticFieldBase", CC"("FLD")"OBJ, FN_PTR(Unsafe_StaticFieldBaseFromField)}, - {CC"ensureClassInitialized",CC"("CLS")V", FN_PTR(Unsafe_EnsureClassInitialized)}, - {CC"arrayBaseOffset", CC"("CLS")I", FN_PTR(Unsafe_ArrayBaseOffset)}, - {CC"arrayIndexScale", CC"("CLS")I", FN_PTR(Unsafe_ArrayIndexScale)}, - {CC"addressSize", CC"()I", FN_PTR(Unsafe_AddressSize)}, - {CC"pageSize", CC"()I", FN_PTR(Unsafe_PageSize)}, + {CC "objectFieldOffset", CC "(" FLD ")J", FN_PTR(Unsafe_ObjectFieldOffset)}, + {CC "staticFieldOffset", CC "(" FLD ")J", FN_PTR(Unsafe_StaticFieldOffset)}, + {CC "staticFieldBase", CC "(" FLD ")" OBJ, FN_PTR(Unsafe_StaticFieldBaseFromField)}, + {CC "ensureClassInitialized",CC "(" CLS ")V", FN_PTR(Unsafe_EnsureClassInitialized)}, + {CC "arrayBaseOffset", CC "(" CLS ")I", FN_PTR(Unsafe_ArrayBaseOffset)}, + {CC "arrayIndexScale", CC "(" CLS ")I", FN_PTR(Unsafe_ArrayIndexScale)}, + {CC "addressSize", CC "()I", FN_PTR(Unsafe_AddressSize)}, + {CC "pageSize", CC "()I", FN_PTR(Unsafe_PageSize)}, - {CC"defineClass", CC"("DC0_Args")"CLS, FN_PTR(Unsafe_DefineClass0)}, - {CC"defineClass", CC"("DC_Args")"CLS, FN_PTR(Unsafe_DefineClass)}, - {CC"allocateInstance", CC"("CLS")"OBJ, FN_PTR(Unsafe_AllocateInstance)}, - {CC"monitorEnter", CC"("OBJ")V", FN_PTR(Unsafe_MonitorEnter)}, - {CC"monitorExit", CC"("OBJ")V", FN_PTR(Unsafe_MonitorExit)}, - {CC"throwException", CC"("THR")V", FN_PTR(Unsafe_ThrowException)}, - {CC"compareAndSwapObject", CC"("OBJ"J"OBJ""OBJ")Z", FN_PTR(Unsafe_CompareAndSwapObject)}, - {CC"compareAndSwapInt", CC"("OBJ"J""I""I"")Z", FN_PTR(Unsafe_CompareAndSwapInt)}, - {CC"compareAndSwapLong", CC"("OBJ"J""J""J"")Z", FN_PTR(Unsafe_CompareAndSwapLong)}, - {CC"park", CC"(ZJ)V", FN_PTR(Unsafe_Park)}, - {CC"unpark", CC"("OBJ")V", FN_PTR(Unsafe_Unpark)} + {CC "defineClass", CC "(" DC0_Args ")" CLS, FN_PTR(Unsafe_DefineClass0)}, + {CC "defineClass", CC "(" DC_Args ")" CLS, FN_PTR(Unsafe_DefineClass)}, + {CC "allocateInstance", CC "(" CLS ")" OBJ, FN_PTR(Unsafe_AllocateInstance)}, + {CC "monitorEnter", CC "(" OBJ ")V", FN_PTR(Unsafe_MonitorEnter)}, + {CC "monitorExit", CC "(" OBJ ")V", FN_PTR(Unsafe_MonitorExit)}, + {CC "throwException", CC "(" THR ")V", FN_PTR(Unsafe_ThrowException)}, + {CC "compareAndSwapObject", CC "(" OBJ "J" OBJ "" OBJ ")Z", FN_PTR(Unsafe_CompareAndSwapObject)}, + {CC "compareAndSwapInt", CC "(" OBJ "J""I""I"")Z", FN_PTR(Unsafe_CompareAndSwapInt)}, + {CC "compareAndSwapLong", CC "(" OBJ "J""J""J"")Z", FN_PTR(Unsafe_CompareAndSwapLong)}, + {CC "park", CC "(ZJ)V", FN_PTR(Unsafe_Park)}, + {CC "unpark", CC "(" OBJ ")V", FN_PTR(Unsafe_Unpark)} }; // These are the methods for 1.6.0 and 1.7.0 static JNINativeMethod methods_16[] = { - {CC"getObject", CC"("OBJ"J)"OBJ"", FN_PTR(Unsafe_GetObject)}, - {CC"putObject", CC"("OBJ"J"OBJ")V", FN_PTR(Unsafe_SetObject)}, - {CC"getObjectVolatile",CC"("OBJ"J)"OBJ"", FN_PTR(Unsafe_GetObjectVolatile)}, - {CC"putObjectVolatile",CC"("OBJ"J"OBJ")V", FN_PTR(Unsafe_SetObjectVolatile)}, + {CC "getObject", CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObject)}, + {CC "putObject", CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetObject)}, + {CC "getObjectVolatile",CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObjectVolatile)}, + {CC "putObjectVolatile",CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetObjectVolatile)}, DECLARE_GETSETOOP(Boolean, Z), DECLARE_GETSETOOP(Byte, B), @@ -1574,45 +1558,45 @@ DECLARE_GETSETNATIVE(Float, F), DECLARE_GETSETNATIVE(Double, D), - {CC"getAddress", CC"("ADR")"ADR, FN_PTR(Unsafe_GetNativeAddress)}, - {CC"putAddress", CC"("ADR""ADR")V", FN_PTR(Unsafe_SetNativeAddress)}, + {CC "getAddress", CC "(" ADR ")" ADR, FN_PTR(Unsafe_GetNativeAddress)}, + {CC "putAddress", CC "(" ADR "" ADR ")V", FN_PTR(Unsafe_SetNativeAddress)}, - {CC"allocateMemory", CC"(J)"ADR, FN_PTR(Unsafe_AllocateMemory)}, - {CC"reallocateMemory", CC"("ADR"J)"ADR, FN_PTR(Unsafe_ReallocateMemory)}, - {CC"freeMemory", CC"("ADR")V", FN_PTR(Unsafe_FreeMemory)}, + {CC "allocateMemory", CC "(J)" ADR, FN_PTR(Unsafe_AllocateMemory)}, + {CC "reallocateMemory", CC "(" ADR "J)" ADR, FN_PTR(Unsafe_ReallocateMemory)}, + {CC "freeMemory", CC "(" ADR ")V", FN_PTR(Unsafe_FreeMemory)}, - {CC"objectFieldOffset", CC"("FLD")J", FN_PTR(Unsafe_ObjectFieldOffset)}, - {CC"staticFieldOffset", CC"("FLD")J", FN_PTR(Unsafe_StaticFieldOffset)}, - {CC"staticFieldBase", CC"("FLD")"OBJ, FN_PTR(Unsafe_StaticFieldBaseFromField)}, - {CC"ensureClassInitialized",CC"("CLS")V", FN_PTR(Unsafe_EnsureClassInitialized)}, - {CC"arrayBaseOffset", CC"("CLS")I", FN_PTR(Unsafe_ArrayBaseOffset)}, - {CC"arrayIndexScale", CC"("CLS")I", FN_PTR(Unsafe_ArrayIndexScale)}, - {CC"addressSize", CC"()I", FN_PTR(Unsafe_AddressSize)}, - {CC"pageSize", CC"()I", FN_PTR(Unsafe_PageSize)}, + {CC "objectFieldOffset", CC "(" FLD ")J", FN_PTR(Unsafe_ObjectFieldOffset)}, + {CC "staticFieldOffset", CC "(" FLD ")J", FN_PTR(Unsafe_StaticFieldOffset)}, + {CC "staticFieldBase", CC "(" FLD ")" OBJ, FN_PTR(Unsafe_StaticFieldBaseFromField)}, + {CC "ensureClassInitialized",CC "(" CLS ")V", FN_PTR(Unsafe_EnsureClassInitialized)}, + {CC "arrayBaseOffset", CC "(" CLS ")I", FN_PTR(Unsafe_ArrayBaseOffset)}, + {CC "arrayIndexScale", CC "(" CLS ")I", FN_PTR(Unsafe_ArrayIndexScale)}, + {CC "addressSize", CC "()I", FN_PTR(Unsafe_AddressSize)}, + {CC "pageSize", CC "()I", FN_PTR(Unsafe_PageSize)}, - {CC"defineClass", CC"("DC0_Args")"CLS, FN_PTR(Unsafe_DefineClass0)}, - {CC"defineClass", CC"("DC_Args")"CLS, FN_PTR(Unsafe_DefineClass)}, - {CC"allocateInstance", CC"("CLS")"OBJ, FN_PTR(Unsafe_AllocateInstance)}, - {CC"monitorEnter", CC"("OBJ")V", FN_PTR(Unsafe_MonitorEnter)}, - {CC"monitorExit", CC"("OBJ")V", FN_PTR(Unsafe_MonitorExit)}, - {CC"tryMonitorEnter", CC"("OBJ")Z", FN_PTR(Unsafe_TryMonitorEnter)}, - {CC"throwException", CC"("THR")V", FN_PTR(Unsafe_ThrowException)}, - {CC"compareAndSwapObject", CC"("OBJ"J"OBJ""OBJ")Z", FN_PTR(Unsafe_CompareAndSwapObject)}, - {CC"compareAndSwapInt", CC"("OBJ"J""I""I"")Z", FN_PTR(Unsafe_CompareAndSwapInt)}, - {CC"compareAndSwapLong", CC"("OBJ"J""J""J"")Z", FN_PTR(Unsafe_CompareAndSwapLong)}, - {CC"putOrderedObject", CC"("OBJ"J"OBJ")V", FN_PTR(Unsafe_SetOrderedObject)}, - {CC"putOrderedInt", CC"("OBJ"JI)V", FN_PTR(Unsafe_SetOrderedInt)}, - {CC"putOrderedLong", CC"("OBJ"JJ)V", FN_PTR(Unsafe_SetOrderedLong)}, - {CC"park", CC"(ZJ)V", FN_PTR(Unsafe_Park)}, - {CC"unpark", CC"("OBJ")V", FN_PTR(Unsafe_Unpark)} + {CC "defineClass", CC "(" DC0_Args ")" CLS, FN_PTR(Unsafe_DefineClass0)}, + {CC "defineClass", CC "(" DC_Args ")" CLS, FN_PTR(Unsafe_DefineClass)}, + {CC "allocateInstance", CC "(" CLS ")" OBJ, FN_PTR(Unsafe_AllocateInstance)}, + {CC "monitorEnter", CC "(" OBJ ")V", FN_PTR(Unsafe_MonitorEnter)}, + {CC "monitorExit", CC "(" OBJ ")V", FN_PTR(Unsafe_MonitorExit)}, + {CC "tryMonitorEnter", CC "(" OBJ ")Z", FN_PTR(Unsafe_TryMonitorEnter)}, + {CC "throwException", CC "(" THR ")V", FN_PTR(Unsafe_ThrowException)}, + {CC "compareAndSwapObject", CC "(" OBJ "J" OBJ "" OBJ ")Z", FN_PTR(Unsafe_CompareAndSwapObject)}, + {CC "compareAndSwapInt", CC "(" OBJ "J""I""I"")Z", FN_PTR(Unsafe_CompareAndSwapInt)}, + {CC "compareAndSwapLong", CC "(" OBJ "J""J""J"")Z", FN_PTR(Unsafe_CompareAndSwapLong)}, + {CC "putOrderedObject", CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetOrderedObject)}, + {CC "putOrderedInt", CC "(" OBJ "JI)V", FN_PTR(Unsafe_SetOrderedInt)}, + {CC "putOrderedLong", CC "(" OBJ "JJ)V", FN_PTR(Unsafe_SetOrderedLong)}, + {CC "park", CC "(ZJ)V", FN_PTR(Unsafe_Park)}, + {CC "unpark", CC "(" OBJ ")V", FN_PTR(Unsafe_Unpark)} }; // These are the methods for 1.8.0 static JNINativeMethod methods_18[] = { - {CC"getObject", CC"("OBJ"J)"OBJ"", FN_PTR(Unsafe_GetObject)}, - {CC"putObject", CC"("OBJ"J"OBJ")V", FN_PTR(Unsafe_SetObject)}, - {CC"getObjectVolatile",CC"("OBJ"J)"OBJ"", FN_PTR(Unsafe_GetObjectVolatile)}, - {CC"putObjectVolatile",CC"("OBJ"J"OBJ")V", FN_PTR(Unsafe_SetObjectVolatile)}, + {CC "getObject", CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObject)}, + {CC "putObject", CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetObject)}, + {CC "getObjectVolatile",CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObjectVolatile)}, + {CC "putObjectVolatile",CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetObjectVolatile)}, DECLARE_GETSETOOP(Boolean, Z), DECLARE_GETSETOOP(Byte, B), @@ -1631,71 +1615,71 @@ DECLARE_GETSETNATIVE(Float, F), DECLARE_GETSETNATIVE(Double, D), - {CC"getAddress", CC"("ADR")"ADR, FN_PTR(Unsafe_GetNativeAddress)}, - {CC"putAddress", CC"("ADR""ADR")V", FN_PTR(Unsafe_SetNativeAddress)}, + {CC "getAddress", CC "(" ADR ")" ADR, FN_PTR(Unsafe_GetNativeAddress)}, + {CC "putAddress", CC "(" ADR "" ADR ")V", FN_PTR(Unsafe_SetNativeAddress)}, - {CC"allocateMemory", CC"(J)"ADR, FN_PTR(Unsafe_AllocateMemory)}, - {CC"reallocateMemory", CC"("ADR"J)"ADR, FN_PTR(Unsafe_ReallocateMemory)}, - {CC"freeMemory", CC"("ADR")V", FN_PTR(Unsafe_FreeMemory)}, + {CC "allocateMemory", CC "(J)" ADR, FN_PTR(Unsafe_AllocateMemory)}, + {CC "reallocateMemory", CC "(" ADR "J)" ADR, FN_PTR(Unsafe_ReallocateMemory)}, + {CC "freeMemory", CC "(" ADR ")V", FN_PTR(Unsafe_FreeMemory)}, - {CC"objectFieldOffset", CC"("FLD")J", FN_PTR(Unsafe_ObjectFieldOffset)}, - {CC"staticFieldOffset", CC"("FLD")J", FN_PTR(Unsafe_StaticFieldOffset)}, - {CC"staticFieldBase", CC"("FLD")"OBJ, FN_PTR(Unsafe_StaticFieldBaseFromField)}, - {CC"ensureClassInitialized",CC"("CLS")V", FN_PTR(Unsafe_EnsureClassInitialized)}, - {CC"arrayBaseOffset", CC"("CLS")I", FN_PTR(Unsafe_ArrayBaseOffset)}, - {CC"arrayIndexScale", CC"("CLS")I", FN_PTR(Unsafe_ArrayIndexScale)}, - {CC"addressSize", CC"()I", FN_PTR(Unsafe_AddressSize)}, - {CC"pageSize", CC"()I", FN_PTR(Unsafe_PageSize)}, + {CC "objectFieldOffset", CC "(" FLD ")J", FN_PTR(Unsafe_ObjectFieldOffset)}, + {CC "staticFieldOffset", CC "(" FLD ")J", FN_PTR(Unsafe_StaticFieldOffset)}, + {CC "staticFieldBase", CC "(" FLD ")" OBJ, FN_PTR(Unsafe_StaticFieldBaseFromField)}, + {CC "ensureClassInitialized",CC "(" CLS ")V", FN_PTR(Unsafe_EnsureClassInitialized)}, + {CC "arrayBaseOffset", CC "(" CLS ")I", FN_PTR(Unsafe_ArrayBaseOffset)}, + {CC "arrayIndexScale", CC "(" CLS ")I", FN_PTR(Unsafe_ArrayIndexScale)}, + {CC "addressSize", CC "()I", FN_PTR(Unsafe_AddressSize)}, + {CC "pageSize", CC "()I", FN_PTR(Unsafe_PageSize)}, - {CC"defineClass", CC"("DC_Args")"CLS, FN_PTR(Unsafe_DefineClass)}, - {CC"allocateInstance", CC"("CLS")"OBJ, FN_PTR(Unsafe_AllocateInstance)}, - {CC"monitorEnter", CC"("OBJ")V", FN_PTR(Unsafe_MonitorEnter)}, - {CC"monitorExit", CC"("OBJ")V", FN_PTR(Unsafe_MonitorExit)}, - {CC"tryMonitorEnter", CC"("OBJ")Z", FN_PTR(Unsafe_TryMonitorEnter)}, - {CC"throwException", CC"("THR")V", FN_PTR(Unsafe_ThrowException)}, - {CC"compareAndSwapObject", CC"("OBJ"J"OBJ""OBJ")Z", FN_PTR(Unsafe_CompareAndSwapObject)}, - {CC"compareAndSwapInt", CC"("OBJ"J""I""I"")Z", FN_PTR(Unsafe_CompareAndSwapInt)}, - {CC"compareAndSwapLong", CC"("OBJ"J""J""J"")Z", FN_PTR(Unsafe_CompareAndSwapLong)}, - {CC"putOrderedObject", CC"("OBJ"J"OBJ")V", FN_PTR(Unsafe_SetOrderedObject)}, - {CC"putOrderedInt", CC"("OBJ"JI)V", FN_PTR(Unsafe_SetOrderedInt)}, - {CC"putOrderedLong", CC"("OBJ"JJ)V", FN_PTR(Unsafe_SetOrderedLong)}, - {CC"park", CC"(ZJ)V", FN_PTR(Unsafe_Park)}, - {CC"unpark", CC"("OBJ")V", FN_PTR(Unsafe_Unpark)} + {CC "defineClass", CC "(" DC_Args ")" CLS, FN_PTR(Unsafe_DefineClass)}, + {CC "allocateInstance", CC "(" CLS ")" OBJ, FN_PTR(Unsafe_AllocateInstance)}, + {CC "monitorEnter", CC "(" OBJ ")V", FN_PTR(Unsafe_MonitorEnter)}, + {CC "monitorExit", CC "(" OBJ ")V", FN_PTR(Unsafe_MonitorExit)}, + {CC "tryMonitorEnter", CC "(" OBJ ")Z", FN_PTR(Unsafe_TryMonitorEnter)}, + {CC "throwException", CC "(" THR ")V", FN_PTR(Unsafe_ThrowException)}, + {CC "compareAndSwapObject", CC "(" OBJ "J" OBJ "" OBJ ")Z", FN_PTR(Unsafe_CompareAndSwapObject)}, + {CC "compareAndSwapInt", CC "(" OBJ "J""I""I"")Z", FN_PTR(Unsafe_CompareAndSwapInt)}, + {CC "compareAndSwapLong", CC "(" OBJ "J""J""J"")Z", FN_PTR(Unsafe_CompareAndSwapLong)}, + {CC "putOrderedObject", CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetOrderedObject)}, + {CC "putOrderedInt", CC "(" OBJ "JI)V", FN_PTR(Unsafe_SetOrderedInt)}, + {CC "putOrderedLong", CC "(" OBJ "JJ)V", FN_PTR(Unsafe_SetOrderedLong)}, + {CC "park", CC "(ZJ)V", FN_PTR(Unsafe_Park)}, + {CC "unpark", CC "(" OBJ ")V", FN_PTR(Unsafe_Unpark)} }; JNINativeMethod loadavg_method[] = { - {CC"getLoadAverage", CC"([DI)I", FN_PTR(Unsafe_Loadavg)} + {CC "getLoadAverage", CC "([DI)I", FN_PTR(Unsafe_Loadavg)} }; JNINativeMethod prefetch_methods[] = { - {CC"prefetchRead", CC"("OBJ"J)V", FN_PTR(Unsafe_PrefetchRead)}, - {CC"prefetchWrite", CC"("OBJ"J)V", FN_PTR(Unsafe_PrefetchWrite)}, - {CC"prefetchReadStatic", CC"("OBJ"J)V", FN_PTR(Unsafe_PrefetchRead)}, - {CC"prefetchWriteStatic",CC"("OBJ"J)V", FN_PTR(Unsafe_PrefetchWrite)} + {CC "prefetchRead", CC "(" OBJ "J)V", FN_PTR(Unsafe_PrefetchRead)}, + {CC "prefetchWrite", CC "(" OBJ "J)V", FN_PTR(Unsafe_PrefetchWrite)}, + {CC "prefetchReadStatic", CC "(" OBJ "J)V", FN_PTR(Unsafe_PrefetchRead)}, + {CC "prefetchWriteStatic",CC "(" OBJ "J)V", FN_PTR(Unsafe_PrefetchWrite)} }; JNINativeMethod memcopy_methods_17[] = { - {CC"copyMemory", CC"("OBJ"J"OBJ"JJ)V", FN_PTR(Unsafe_CopyMemory2)}, - {CC"setMemory", CC"("OBJ"JJB)V", FN_PTR(Unsafe_SetMemory2)} + {CC "copyMemory", CC "(" OBJ "J" OBJ "JJ)V", FN_PTR(Unsafe_CopyMemory2)}, + {CC "setMemory", CC "(" OBJ "JJB)V", FN_PTR(Unsafe_SetMemory2)} }; JNINativeMethod memcopy_methods_15[] = { - {CC"setMemory", CC"("ADR"JB)V", FN_PTR(Unsafe_SetMemory)}, - {CC"copyMemory", CC"("ADR ADR"J)V", FN_PTR(Unsafe_CopyMemory)} + {CC "setMemory", CC "(" ADR "JB)V", FN_PTR(Unsafe_SetMemory)}, + {CC "copyMemory", CC "(" ADR ADR "J)V", FN_PTR(Unsafe_CopyMemory)} }; JNINativeMethod anonk_methods[] = { - {CC"defineAnonymousClass", CC"("DAC_Args")"CLS, FN_PTR(Unsafe_DefineAnonymousClass)}, + {CC "defineAnonymousClass", CC "(" DAC_Args ")" CLS, FN_PTR(Unsafe_DefineAnonymousClass)}, }; JNINativeMethod lform_methods[] = { - {CC"shouldBeInitialized",CC"("CLS")Z", FN_PTR(Unsafe_ShouldBeInitialized)}, + {CC "shouldBeInitialized",CC "(" CLS ")Z", FN_PTR(Unsafe_ShouldBeInitialized)}, }; JNINativeMethod fence_methods[] = { - {CC"loadFence", CC"()V", FN_PTR(Unsafe_LoadFence)}, - {CC"storeFence", CC"()V", FN_PTR(Unsafe_StoreFence)}, - {CC"fullFence", CC"()V", FN_PTR(Unsafe_FullFence)}, + {CC "loadFence", CC "()V", FN_PTR(Unsafe_LoadFence)}, + {CC "storeFence", CC "()V", FN_PTR(Unsafe_StoreFence)}, + {CC "fullFence", CC "()V", FN_PTR(Unsafe_FullFence)}, }; #undef CC
--- a/src/share/vm/prims/whitebox.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/prims/whitebox.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -170,8 +170,8 @@ WB_ENTRY(void, WB_PrintHeapSizes(JNIEnv* env, jobject o)) { CollectorPolicy * p = Universe::heap()->collector_policy(); - gclog_or_tty->print_cr("Minimum heap "SIZE_FORMAT" Initial heap " - SIZE_FORMAT" Maximum heap "SIZE_FORMAT" Min alignment "SIZE_FORMAT" Max alignment "SIZE_FORMAT, + gclog_or_tty->print_cr("Minimum heap " SIZE_FORMAT " Initial heap " + SIZE_FORMAT" Maximum heap " SIZE_FORMAT " Min alignment " SIZE_FORMAT " Max alignment " SIZE_FORMAT, p->min_heap_byte_size(), p->initial_heap_byte_size(), p->max_heap_byte_size(), p->space_alignment(), p->heap_alignment()); } @@ -206,8 +206,8 @@ Universe::narrow_oop_use_implicit_null_checks() )) { tty->print_cr("WB_ReadFromNoaccessArea method is useless:\n " "\tUseCompressedOops is %d\n" - "\trhs.base() is "PTR_FORMAT"\n" - "\tUniverse::narrow_oop_base() is "PTR_FORMAT"\n" + "\trhs.base() is " PTR_FORMAT "\n" + "\tUniverse::narrow_oop_base() is " PTR_FORMAT "\n" "\tUniverse::narrow_oop_use_implicit_null_checks() is %d", UseCompressedOops, rhs.base(), @@ -260,8 +260,8 @@ WB_ENTRY(jint, WB_StressVirtualSpaceResize(JNIEnv* env, jobject o, jlong reserved_space_size, jlong magnitude, jlong iterations)) - tty->print_cr("reservedSpaceSize="JLONG_FORMAT", magnitude="JLONG_FORMAT", " - "iterations="JLONG_FORMAT"\n", reserved_space_size, magnitude, + tty->print_cr("reservedSpaceSize=" JLONG_FORMAT ", magnitude=" JLONG_FORMAT ", " + "iterations=" JLONG_FORMAT "\n", reserved_space_size, magnitude, iterations); if (reserved_space_size < 0 || magnitude < 0 || iterations < 0) { tty->print_cr("One of variables printed above is negative. Can't proceed.\n");
--- a/src/share/vm/runtime/arguments.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/runtime/arguments.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1377,11 +1377,6 @@ CFLS_LAB::modify_initialization(OldPLABSize, OldPLABWeight); } - if (!ClassUnloading) { - FLAG_SET_CMDLINE(bool, CMSClassUnloadingEnabled, false); - FLAG_SET_CMDLINE(bool, ExplicitGCInvokesConcurrentAndUnloadsClasses, false); - } - if (PrintGCDetails && Verbose) { tty->print_cr("MarkStackSize: %uk MarkStackSizeMax: %uk", (unsigned int) (MarkStackSize / K), (uint) (MarkStackSizeMax / K)); @@ -1748,6 +1743,13 @@ // Keeping the heap 100% free is hard ;-) so limit it to 99%. FLAG_SET_ERGO(uintx, MinHeapFreeRatio, 99); } + + // If class unloading is disabled, also disable concurrent class unloading. + if (!ClassUnloading) { + FLAG_SET_CMDLINE(bool, CMSClassUnloadingEnabled, false); + FLAG_SET_CMDLINE(bool, ClassUnloadingWithConcurrentMark, false); + FLAG_SET_CMDLINE(bool, ExplicitGCInvokesConcurrentAndUnloadsClasses, false); + } #else // INCLUDE_ALL_GCS assert(verify_serial_gc_flags(), "SerialGC unset"); #endif // INCLUDE_ALL_GCS
--- a/src/share/vm/runtime/deoptimization.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/runtime/deoptimization.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1378,7 +1378,7 @@ ttyLocker ttyl; char buf[100]; if (xtty != NULL) { - xtty->begin_head("uncommon_trap thread='" UINTX_FORMAT"' %s", + xtty->begin_head("uncommon_trap thread='" UINTX_FORMAT "' %s", os::current_thread_id(), format_trap_request(buf, sizeof(buf), trap_request)); nm->log_identity(xtty);
--- a/src/share/vm/runtime/globals.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/runtime/globals.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -1137,6 +1137,10 @@ "Use detached threads that are recycled upon termination " \ "(for Solaris only)") \ \ + experimental(bool, DisablePrimordialThreadGuardPages, false, \ + "Disable the use of stack guard pages if the JVM is loaded " \ + "on the primordial process thread") \ + \ product(bool, UseLWPSynchronization, true, \ "Use LWP-based instead of libthread-based synchronization " \ "(SPARC only)") \
--- a/src/share/vm/runtime/memprofiler.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/runtime/memprofiler.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2018, 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 @@ -126,7 +126,7 @@ fprintf(_log_fp, UINTX_FORMAT_W(6) ",", CodeCache::capacity() / K); - fprintf(_log_fp, UINTX_FORMAT_W(6) "," UINTX_FORMAT_W(6) ",%6ld\n", + fprintf(_log_fp, UINTX_FORMAT_W(6) "," UINTX_FORMAT_W(6) "," UINTX_FORMAT_W(6) "\n", handles_memory_usage / K, resource_memory_usage / K, OopMapCache::memory_usage() / K);
--- a/src/share/vm/runtime/os.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/runtime/os.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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,6 +96,18 @@ os::init_globals(); } +static time_t get_timezone(const struct tm* time_struct) { +#if defined(_ALLBSD_SOURCE) + return time_struct->tm_gmtoff; +#elif defined(_WINDOWS) + long zone; + _get_timezone(&zone); + return static_cast<time_t>(zone); +#else + return timezone; +#endif +} + // Fill in buffer with current local time as an ISO-8601 string. // E.g., yyyy-mm-ddThh:mm:ss-zzzz. // Returns buffer, or NULL if it failed. @@ -134,11 +146,7 @@ assert(false, "Failed localtime_pd"); return NULL; } -#if defined(_ALLBSD_SOURCE) - const time_t zone = (time_t) time_struct.tm_gmtoff; -#else - const time_t zone = timezone; -#endif + const time_t zone = get_timezone(&time_struct); // If daylight savings time is in effect, // we are 1 hour East of our time zone @@ -847,7 +855,7 @@ pd_print_cpu_info(st); } -void os::print_date_and_time(outputStream *st) { +void os::print_date_and_time(outputStream *st, char* buf, size_t buflen) { const int secs_per_day = 86400; const int secs_per_hour = 3600; const int secs_per_min = 60; @@ -856,6 +864,12 @@ (void)time(&tloc); st->print("time: %s", ctime(&tloc)); // ctime adds newline. + struct tm tz; + if (localtime_pd(&tloc, &tz) != NULL) { + ::strftime(buf, buflen, "%Z", &tz); + st->print_cr("timezone: %s", buf); + } + double t = os::elapsedTime(); // NOTE: It tends to crash after a SEGV if we want to printf("%f",...) in // Linux. Must be a bug in glibc ? Workaround is to round "t" to int
--- a/src/share/vm/runtime/os.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/runtime/os.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -457,7 +457,24 @@ static bool create_thread(Thread* thread, ThreadType thr_type, size_t stack_size = 0); + + // The "main thread", also known as "starting thread", is the thread + // that loads/creates the JVM via JNI_CreateJavaVM. static bool create_main_thread(JavaThread* thread); + + // The primordial thread is the initial process thread. The java + // launcher never uses the primordial thread as the main thread, but + // applications that host the JVM directly may do so. Some platforms + // need special-case handling of the primordial thread if it attaches + // to the VM. + static bool is_primordial_thread(void) +#if defined(_WINDOWS) || defined(BSD) + // No way to identify the primordial thread. + { return false; } +#else + ; +#endif + static bool create_attached_thread(JavaThread* thread); static void pd_start_thread(Thread* thread); static void start_thread(Thread* thread); @@ -612,7 +629,7 @@ static void print_register_info(outputStream* st, void* context); static void print_siginfo(outputStream* st, void* siginfo); static void print_signal_handlers(outputStream* st, char* buf, size_t buflen); - static void print_date_and_time(outputStream* st); + static void print_date_and_time(outputStream* st, char* buf, size_t buflen); static void print_location(outputStream* st, intptr_t x, bool verbose = false); static size_t lasterror(char *buf, size_t len);
--- a/src/share/vm/runtime/safepoint.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/runtime/safepoint.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -918,7 +918,7 @@ case _running: default: - tty->print_cr("restart thread "INTPTR_FORMAT" with state %d", + tty->print_cr("restart thread " INTPTR_FORMAT " with state %d", _thread, _type); _thread->print(); ShouldNotReachHere(); @@ -1217,7 +1217,7 @@ sstats = &_safepoint_stats[index]; tty->print("%.3f: ", sstats->_time_stamp); tty->print("%-26s [" - INT32_FORMAT_W(8)INT32_FORMAT_W(11)INT32_FORMAT_W(15) + INT32_FORMAT_W(8) INT32_FORMAT_W(11) INT32_FORMAT_W(15) " ] ", sstats->_vmop_type == -1 ? "no vm operation" : VM_Operation::name(sstats->_vmop_type), @@ -1226,9 +1226,9 @@ sstats->_nof_threads_wait_to_block); // "/ MICROUNITS " is to convert the unit from nanos to millis. tty->print(" [" - INT64_FORMAT_W(6)INT64_FORMAT_W(6) - INT64_FORMAT_W(6)INT64_FORMAT_W(6) - INT64_FORMAT_W(6)" ] ", + INT64_FORMAT_W(6) INT64_FORMAT_W(6) + INT64_FORMAT_W(6) INT64_FORMAT_W(6) + INT64_FORMAT_W(6) " ] ", sstats->_time_to_spin / MICROUNITS, sstats->_time_to_wait_to_block / MICROUNITS, sstats->_time_to_sync / MICROUNITS, @@ -1236,9 +1236,9 @@ sstats->_time_to_exec_vmop / MICROUNITS); if (need_to_track_page_armed_status) { - tty->print(INT32_FORMAT" ", sstats->_page_armed); + tty->print(INT32_FORMAT " ", sstats->_page_armed); } - tty->print_cr(INT32_FORMAT" ", sstats->_nof_threads_hit_page_trap); + tty->print_cr(INT32_FORMAT " ", sstats->_nof_threads_hit_page_trap); } } @@ -1275,17 +1275,17 @@ for (int index = 0; index < VM_Operation::VMOp_Terminating; index++) { if (_safepoint_reasons[index] != 0) { - tty->print_cr("%-26s"UINT64_FORMAT_W(10), VM_Operation::name(index), + tty->print_cr("%-26s" UINT64_FORMAT_W(10), VM_Operation::name(index), _safepoint_reasons[index]); } } - tty->print_cr(UINT64_FORMAT_W(5)" VM operations coalesced during safepoint", + tty->print_cr(UINT64_FORMAT_W(5) " VM operations coalesced during safepoint", _coalesced_vmop_count); - tty->print_cr("Maximum sync time "INT64_FORMAT_W(5)" ms", + tty->print_cr("Maximum sync time " INT64_FORMAT_W(5) " ms", _max_sync_time / MICROUNITS); tty->print_cr("Maximum vm operation time (except for Exit VM operation) " - INT64_FORMAT_W(5)" ms", + INT64_FORMAT_W(5) " ms", _max_vmop_time / MICROUNITS); }
--- a/src/share/vm/runtime/sharedRuntime.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/runtime/sharedRuntime.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -763,6 +763,8 @@ if (StackTraceInThrowable) { java_lang_Throwable::fill_in_stack_trace(exception); } + // Increment counter for hs_err file reporting + Atomic::inc(&Exceptions::_stack_overflow_errors); throw_and_post_jvmti_exception(thread, exception); JRT_END
--- a/src/share/vm/runtime/stubCodeGenerator.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/runtime/stubCodeGenerator.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -34,12 +34,12 @@ // Implementation of StubCodeDesc -StubCodeDesc* StubCodeDesc::_list = NULL; -int StubCodeDesc::_count = 0; +StubCodeDesc* volatile StubCodeDesc::_list = NULL; +int StubCodeDesc::_count = 0; StubCodeDesc* StubCodeDesc::desc_for(address pc) { - StubCodeDesc* p = _list; + StubCodeDesc* p = (StubCodeDesc*)OrderAccess::load_ptr_acquire(&_list); while (p != NULL && !p->contains(pc)) p = p->_next; // p == NULL || p->contains(pc) return p; @@ -47,7 +47,7 @@ StubCodeDesc* StubCodeDesc::desc_for_index(int index) { - StubCodeDesc* p = _list; + StubCodeDesc* p = (StubCodeDesc*)OrderAccess::load_ptr_acquire(&_list); while (p != NULL && p->index() != index) p = p->_next; return p; }
--- a/src/share/vm/runtime/stubCodeGenerator.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/runtime/stubCodeGenerator.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -38,7 +38,7 @@ class StubCodeDesc: public CHeapObj<mtCode> { protected: - static StubCodeDesc* _list; // the list of all descriptors + static StubCodeDesc* volatile _list; // the list of all descriptors static int _count; // length of list StubCodeDesc* _next; // the next element in the linked list @@ -69,13 +69,13 @@ StubCodeDesc(const char* group, const char* name, address begin) { assert(name != NULL, "no name specified"); - _next = _list; + _next = (StubCodeDesc*)OrderAccess::load_ptr_acquire(&_list); _group = group; _name = name; _index = ++_count; // (never zero) _begin = begin; _end = NULL; - _list = this; + OrderAccess::release_store_ptr(&_list, this); }; const char* group() const { return _group; }
--- a/src/share/vm/runtime/thread.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/runtime/thread.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -1451,7 +1451,7 @@ _in_deopt_handler = 0; _doing_unsafe_access = false; _stack_guard_state = stack_guard_unused; - (void)const_cast<oop&>(_exception_oop = NULL); + (void)const_cast<oop&>(_exception_oop = oop(NULL)); _exception_pc = 0; _exception_handler_pc = 0; _is_method_handle_return = 0; @@ -2485,7 +2485,15 @@ } void JavaThread::create_stack_guard_pages() { - if (! os::uses_stack_guard_pages() || _stack_guard_state != stack_guard_unused) return; + if (!os::uses_stack_guard_pages() || + _stack_guard_state != stack_guard_unused || + (DisablePrimordialThreadGuardPages && os::is_primordial_thread())) { + if (TraceThreadEvents) { + tty->print_cr("Stack guard page creation for thread " + UINTX_FORMAT " disabled", os::current_thread_id()); + } + return; + } address low_addr = stack_base() - stack_size(); size_t len = (StackYellowPages + StackRedPages) * os::vm_page_size();
--- a/src/share/vm/runtime/thread.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/runtime/thread.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, 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 @@ -1802,7 +1802,8 @@ inline bool JavaThread::stack_yellow_zone_enabled() { #ifdef ASSERT - if (os::uses_stack_guard_pages()) { + if (os::uses_stack_guard_pages() && + !(DisablePrimordialThreadGuardPages && os::is_primordial_thread())) { assert(_stack_guard_state != stack_guard_unused, "guard pages must be in use"); } #endif
--- a/src/share/vm/runtime/unhandledOops.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/runtime/unhandledOops.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -105,7 +105,7 @@ _level --; if (unhandled_oop_print) { for (int i=0; i<_level; i++) tty->print(" "); - tty->print_cr("u "INTPTR_FORMAT, op); + tty->print_cr("u " INTPTR_FORMAT, op); } int i = _oop_list->find_from_end(op, match_oop_entry);
--- a/src/share/vm/runtime/vm_version.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/runtime/vm_version.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -222,6 +222,12 @@ #define HOTSPOT_BUILD_COMPILER "MS VC++ 10.0 (VS2010)" #elif _MSC_VER == 1700 #define HOTSPOT_BUILD_COMPILER "MS VC++ 11.0 (VS2012)" + #elif _MSC_VER == 1800 + #define HOTSPOT_BUILD_COMPILER "MS VC++ 12.0 (VS2013)" + #elif _MSC_VER == 1900 + #define HOTSPOT_BUILD_COMPILER "MS VC++ 14.0 (VS2015)" + #elif _MSC_VER == 1912 + #define HOTSPOT_BUILD_COMPILER "MS VC++ 15.5 (VS2017)" #else #define HOTSPOT_BUILD_COMPILER "unknown MS VC++:" XSTR(_MSC_VER) #endif
--- a/src/share/vm/services/attachListener.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/services/attachListener.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -466,15 +466,39 @@ } } +bool AttachListener::has_init_error(TRAPS) { + if (HAS_PENDING_EXCEPTION) { + tty->print_cr("Exception in VM (AttachListener::init) : "); + java_lang_Throwable::print(PENDING_EXCEPTION, tty); + tty->cr(); + + CLEAR_PENDING_EXCEPTION; + + return true; + } else { + return false; + } +} + // Starts the Attach Listener thread void AttachListener::init() { EXCEPTION_MARK; - Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, CHECK); + Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_Thread(), true, THREAD); + if (has_init_error(THREAD)) { + return; + } + instanceKlassHandle klass (THREAD, k); - instanceHandle thread_oop = klass->allocate_instance_handle(CHECK); + instanceHandle thread_oop = klass->allocate_instance_handle(THREAD); + if (has_init_error(THREAD)) { + return; + } const char thread_name[] = "Attach Listener"; - Handle string = java_lang_String::create_from_str(thread_name, CHECK); + Handle string = java_lang_String::create_from_str(thread_name, THREAD); + if (has_init_error(THREAD)) { + return; + } // Initialize thread_oop to put it into the system threadGroup Handle thread_group (THREAD, Universe::system_thread_group()); @@ -487,13 +511,7 @@ string, THREAD); - if (HAS_PENDING_EXCEPTION) { - tty->print_cr("Exception in VM (AttachListener::init) : "); - java_lang_Throwable::print(PENDING_EXCEPTION, tty); - tty->cr(); - - CLEAR_PENDING_EXCEPTION; - + if (has_init_error(THREAD)) { return; } @@ -505,14 +523,7 @@ vmSymbols::thread_void_signature(), thread_oop, // ARG 1 THREAD); - - if (HAS_PENDING_EXCEPTION) { - tty->print_cr("Exception in VM (AttachListener::init) : "); - java_lang_Throwable::print(PENDING_EXCEPTION, tty); - tty->cr(); - - CLEAR_PENDING_EXCEPTION; - + if (has_init_error(THREAD)) { return; }
--- a/src/share/vm/services/attachListener.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/services/attachListener.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -94,6 +94,9 @@ // dequeue the next operation static AttachOperation* dequeue(); #endif // !INCLUDE_SERVICES + + private: + static bool has_init_error(TRAPS); }; #if INCLUDE_SERVICES
--- a/src/share/vm/services/diagnosticArgument.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/services/diagnosticArgument.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -89,7 +89,7 @@ size_t len, TRAPS) { int scanned = -1; if (str == NULL - || sscanf(str, JLONG_FORMAT"%n", &_value, &scanned) != 1 + || sscanf(str, JLONG_FORMAT "%n", &_value, &scanned) != 1 || (size_t)scanned != len) { ResourceMark rm;
--- a/src/share/vm/services/heapDumper.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/services/heapDumper.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2018, 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 @@ -815,6 +815,28 @@ for (FieldStream fldc(ikh, true, true); !fldc.eos(); fldc.next()) { if (fldc.access_flags().is_static()) field_count++; } + // Add in resolved_references which is referenced by the cpCache + // The resolved_references is an array per InstanceKlass holding the + // strings and other oops resolved from the constant pool. + oop resolved_references = ikh->constants()->resolved_references_or_null(); + if (resolved_references != NULL) { + field_count++; + + // Add in the resolved_references of the used previous versions of the class + // in the case of RedefineClasses + InstanceKlass* prev = ikh->previous_versions(); + while (prev != NULL && prev->constants()->resolved_references_or_null() != NULL) { + field_count++; + prev = prev->previous_versions(); + } + } + + // Also provide a pointer to the init_lock if present, so there aren't unreferenced int[0] + // arrays. + oop init_lock = ikh->init_lock(); + if (init_lock != NULL) { + field_count++; + } writer->write_u2(field_count); @@ -833,6 +855,29 @@ dump_field_value(writer, sig->byte_at(0), addr); } } + + // Add resolved_references for each class that has them + if (resolved_references != NULL) { + writer->write_symbolID(vmSymbols::resolved_references_name()); // name + writer->write_u1(sig2tag(vmSymbols::object_array_signature())); // type + writer->write_objectID(resolved_references); + + // Also write any previous versions + InstanceKlass* prev = ikh->previous_versions(); + while (prev != NULL && prev->constants()->resolved_references_or_null() != NULL) { + writer->write_symbolID(vmSymbols::resolved_references_name()); // name + writer->write_u1(sig2tag(vmSymbols::object_array_signature())); // type + writer->write_objectID(prev->constants()->resolved_references()); + prev = prev->previous_versions(); + } + } + + // Add init lock to the end if the class is not yet initialized + if (init_lock != NULL) { + writer->write_symbolID(vmSymbols::init_lock_name()); // name + writer->write_u1(sig2tag(vmSymbols::int_array_signature())); // type + writer->write_objectID(init_lock); + } } // dump the raw values of the instance fields of the given object @@ -868,7 +913,7 @@ if (!fld.access_flags().is_static()) { Symbol* sig = fld.signature(); - writer->write_symbolID(fld.name()); // name + writer->write_symbolID(fld.name()); // name writer->write_u1(sig2tag(sig)); // type } } @@ -1758,6 +1803,8 @@ // HPROF_GC_ROOT_JNI_GLOBAL JNIGlobalsDumper jni_dumper(writer()); JNIHandles::oops_do(&jni_dumper); + Universe::oops_do(&jni_dumper); // technically not jni roots, but global roots + // for things like preallocated throwable backtraces check_segment_length(); // HPROF_GC_ROOT_STICKY_CLASS
--- a/src/share/vm/services/mallocSiteTable.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/services/mallocSiteTable.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -136,7 +136,7 @@ MallocSite* MallocSiteTable::lookup_or_add(const NativeCallStack& key, size_t* bucket_idx, size_t* pos_idx, MEMFLAGS flags) { assert(flags != mtNone, "Should have a real memory type"); - int index = hash_to_index(key.hash()); + unsigned int index = hash_to_index(key.hash()); assert(index >= 0, "Negative index"); *bucket_idx = (size_t)index; *pos_idx = 0;
--- a/src/share/vm/services/mallocSiteTable.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/services/mallocSiteTable.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -245,8 +245,7 @@ static MallocSite* malloc_site(size_t bucket_idx, size_t pos_idx); static bool walk(MallocSiteWalker* walker); - static inline int hash_to_index(int hash) { - hash = (hash > 0) ? hash : (-hash); + static inline unsigned int hash_to_index(unsigned int hash) { return (hash % table_size); }
--- a/src/share/vm/services/memoryManager.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/services/memoryManager.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -46,7 +46,7 @@ MemoryManager::MemoryManager() { _num_pools = 0; - (void)const_cast<instanceOop&>(_memory_mgr_obj = NULL); + (void)const_cast<instanceOop&>(_memory_mgr_obj = instanceOop(NULL)); } void MemoryManager::add_pool(MemoryPool* pool) {
--- a/src/share/vm/services/memoryPool.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/services/memoryPool.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2014, 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 @@ -46,7 +46,7 @@ _name = name; _initial_size = init_size; _max_size = max_size; - (void)const_cast<instanceOop&>(_memory_pool_obj = NULL); + (void)const_cast<instanceOop&>(_memory_pool_obj = instanceOop(NULL)); _available_for_allocation = true; _num_managers = 0; _type = type;
--- a/src/share/vm/services/threadService.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/services/threadService.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -889,7 +889,7 @@ st->print(" waiting to lock monitor " INTPTR_FORMAT, waitingToLockMonitor); oop obj = (oop)waitingToLockMonitor->object(); if (obj != NULL) { - st->print(" (object "INTPTR_FORMAT ", a %s)", (address)obj, + st->print(" (object " INTPTR_FORMAT ", a %s)", (address)obj, (InstanceKlass::cast(obj->klass()))->external_name()); if (!currentThread->current_pending_monitor_is_from_java()) {
--- a/src/share/vm/trace/traceStream.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/trace/traceStream.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -40,31 +40,31 @@ TraceStream(outputStream& stream): _st(stream) {} void print_val(const char* label, u1 val) { - _st.print("%s = "UINT32_FORMAT, label, val); + _st.print("%s = " UINT32_FORMAT, label, val); } void print_val(const char* label, u2 val) { - _st.print("%s = "UINT32_FORMAT, label, val); + _st.print("%s = " UINT32_FORMAT, label, val); } void print_val(const char* label, s2 val) { - _st.print("%s = "INT32_FORMAT, label, val); + _st.print("%s = " INT32_FORMAT, label, val); } void print_val(const char* label, u4 val) { - _st.print("%s = "UINT32_FORMAT, label, val); + _st.print("%s = " UINT32_FORMAT, label, val); } void print_val(const char* label, s4 val) { - _st.print("%s = "INT32_FORMAT, label, val); + _st.print("%s = " INT32_FORMAT, label, val); } void print_val(const char* label, u8 val) { - _st.print("%s = "UINT64_FORMAT, label, val); + _st.print("%s = " UINT64_FORMAT, label, val); } void print_val(const char* label, s8 val) { - _st.print("%s = "INT64_FORMAT, label, (int64_t) val); + _st.print("%s = " INT64_FORMAT, label, (int64_t) val); } void print_val(const char* label, bool val) {
--- a/src/share/vm/utilities/exceptions.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/utilities/exceptions.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2018, 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 @@ -154,6 +154,10 @@ return; } + if (h_exception->is_a(SystemDictionary::OutOfMemoryError_klass())) { + count_out_of_memory_exceptions(h_exception); + } + assert(h_exception->is_a(SystemDictionary::Throwable_klass()), "exception is not a subclass of java/lang/Throwable"); // set the pending exception @@ -228,6 +232,8 @@ if (StackTraceInThrowable) { java_lang_Throwable::fill_in_stack_trace(exception, method()); } + // Increment counter for hs_err file reporting + Atomic::inc(&Exceptions::_stack_overflow_errors); } else { // if prior exception, throw that one instead exception = Handle(THREAD, THREAD->pending_exception()); @@ -404,6 +410,44 @@ h_prot, to_utf8_safe); } + +// Exception counting for hs_err file +volatile int Exceptions::_stack_overflow_errors = 0; +volatile int Exceptions::_out_of_memory_error_java_heap_errors = 0; +volatile int Exceptions::_out_of_memory_error_metaspace_errors = 0; +volatile int Exceptions::_out_of_memory_error_class_metaspace_errors = 0; + +void Exceptions::count_out_of_memory_exceptions(Handle exception) { + if (exception() == Universe::out_of_memory_error_metaspace()) { + Atomic::inc(&_out_of_memory_error_metaspace_errors); + } else if (exception() == Universe::out_of_memory_error_class_metaspace()) { + Atomic::inc(&_out_of_memory_error_class_metaspace_errors); + } else { + // everything else reported as java heap OOM + Atomic::inc(&_out_of_memory_error_java_heap_errors); + } +} + +void print_oom_count(outputStream* st, const char *err, int count) { + if (count > 0) { + st->print_cr("OutOfMemoryError %s=%d", err, count); + } +} + +bool Exceptions::has_exception_counts() { + return (_stack_overflow_errors + _out_of_memory_error_java_heap_errors + + _out_of_memory_error_metaspace_errors + _out_of_memory_error_class_metaspace_errors) > 0; +} + +void Exceptions::print_exception_counts_on_error(outputStream* st) { + print_oom_count(st, "java_heap_errors", _out_of_memory_error_java_heap_errors); + print_oom_count(st, "metaspace_errors", _out_of_memory_error_metaspace_errors); + print_oom_count(st, "class_metaspace_errors", _out_of_memory_error_class_metaspace_errors); + if (_stack_overflow_errors > 0) { + st->print_cr("StackOverflowErrors=%d", _stack_overflow_errors); + } +} + // Implementation of ExceptionMark ExceptionMark::ExceptionMark(Thread*& thread) {
--- a/src/share/vm/utilities/exceptions.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/utilities/exceptions.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2018, 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 @@ -102,6 +102,11 @@ class Exceptions { static bool special_exception(Thread *thread, const char* file, int line, Handle exception); static bool special_exception(Thread* thread, const char* file, int line, Symbol* name, const char* message); + + // Count out of memory errors that are interesting in error diagnosis + static volatile int _out_of_memory_error_java_heap_errors; + static volatile int _out_of_memory_error_metaspace_errors; + static volatile int _out_of_memory_error_class_metaspace_errors; public: // this enum is defined to indicate whether it is safe to // ignore the encoding scheme of the original message string. @@ -160,6 +165,14 @@ static void throw_stack_overflow_exception(Thread* thread, const char* file, int line, methodHandle method); + // Exception counting for error files of interesting exceptions that may have + // caused a problem for the jvm + static volatile int _stack_overflow_errors; + + static bool has_exception_counts(); + static void count_out_of_memory_exceptions(Handle exception); + static void print_exception_counts_on_error(outputStream* st); + // for AbortVMOnException flag NOT_PRODUCT(static void debug_check_abort(Handle exception, const char* message = NULL);) NOT_PRODUCT(static void debug_check_abort(const char *value_string, const char* message = NULL);)
--- a/src/share/vm/utilities/globalDefinitions.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/utilities/globalDefinitions.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -1041,8 +1041,8 @@ // Special constants for debugging const jint badInt = -3; // generic "bad int" value -const long badAddressVal = -2; // generic "bad address" value -const long badOopVal = -1; // generic "bad oop" value +const intptr_t badAddressVal = -2; // generic "bad address" value +const intptr_t badOopVal = -1; // generic "bad oop" value const intptr_t badHeapOopVal = (intptr_t) CONST64(0x2BAD4B0BBAADBABE); // value used to zap heap after GC const int badHandleValue = 0xBC; // value used to zap vm handle area const int badResourceValue = 0xAB; // value used to zap resource area
--- a/src/share/vm/utilities/nativeCallStack.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/utilities/nativeCallStack.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -55,6 +55,7 @@ for (; index < NMT_TrackingStackDepth; index ++) { _stack[index] = NULL; } + _hash_value = 0; } // number of stack frames captured @@ -69,19 +70,16 @@ } // Hash code. Any better algorithm? -int NativeCallStack::hash() const { - long hash_val = _hash_value; +unsigned int NativeCallStack::hash() const { + uintptr_t hash_val = _hash_value; if (hash_val == 0) { - long pc; - int index; - for (index = 0; index < NMT_TrackingStackDepth; index ++) { - pc = (long)_stack[index]; - if (pc == 0) break; - hash_val += pc; + for (int index = 0; index < NMT_TrackingStackDepth; index++) { + if (_stack[index] == NULL) break; + hash_val += (uintptr_t)_stack[index]; } NativeCallStack* p = const_cast<NativeCallStack*>(this); - p->_hash_value = (int)(hash_val & 0xFFFFFFFF); + p->_hash_value = (unsigned int)(hash_val & 0xFFFFFFFF); } return _hash_value; }
--- a/src/share/vm/utilities/nativeCallStack.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/utilities/nativeCallStack.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -56,8 +56,8 @@ static const NativeCallStack EMPTY_STACK; private: - address _stack[NMT_TrackingStackDepth]; - int _hash_value; + address _stack[NMT_TrackingStackDepth]; + unsigned int _hash_value; public: NativeCallStack(int toSkip = 0, bool fillStack = false); @@ -89,7 +89,7 @@ } // Hash code. Any better algorithm? - int hash() const; + unsigned int hash() const; void print_on(outputStream* out) const; void print_on(outputStream* out, int indent) const;
--- a/src/share/vm/utilities/ostream.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/utilities/ostream.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -277,7 +277,7 @@ size_t limit = (len + 16) / 16 * 16; for (size_t i = 0; i < limit; ++i) { if (i % 16 == 0) { - indent().print(SIZE_FORMAT_HEX_W(07)":", i); + indent().print(SIZE_FORMAT_HEX_W(07) ":", i); } if (i % 2 == 0) { print(" "); @@ -945,7 +945,7 @@ // %%% Should be: jlong time_ms = os::start_time_milliseconds(), if // we ever get round to introduce that method on the os class xs->head("hotspot_log version='%d %d'" - " process='%d' time_ms='"INT64_FORMAT"'", + " process='%d' time_ms='" INT64_FORMAT "'", LOG_MAJOR_VERSION, LOG_MINOR_VERSION, os::current_process_id(), (int64_t)time_ms); // Write VM version header immediately.
--- a/src/share/vm/utilities/stack.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/utilities/stack.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -96,11 +96,16 @@ public: friend class StackIterator<E, F>; + // Number of elements that fit in 4K bytes minus the size of two pointers + // (link field and malloc header). + static const size_t _default_segment_size = (4096 - 2 * sizeof(E*)) / sizeof(E); + static size_t default_segment_size() { return _default_segment_size; } + // 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(), + inline Stack(size_t segment_size = _default_segment_size, size_t max_cache_size = 4, size_t max_size = 0); inline ~Stack() { clear(true); } @@ -122,8 +127,6 @@ // 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
--- a/src/share/vm/utilities/stack.inline.hpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/utilities/stack.inline.hpp Thu Oct 25 14:53:24 2018 +0300 @@ -86,14 +86,6 @@ } template <class E, MEMFLAGS F> -size_t Stack<E, F>::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 <class E, MEMFLAGS F> size_t Stack<E, F>::adjust_segment_size(size_t seg_size) { const size_t elem_sz = sizeof(E);
--- a/src/share/vm/utilities/vmError.cpp Thu Oct 25 12:52:42 2018 +0300 +++ b/src/share/vm/utilities/vmError.cpp Thu Oct 25 14:53:24 2018 +0300 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2018, 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 @@ -304,6 +304,47 @@ #endif // ZERO } +static void print_oom_reasons(outputStream* st) { + st->print_cr("# Possible reasons:"); + st->print_cr("# The system is out of physical RAM or swap space"); + if (UseCompressedOops) { + st->print_cr("# The process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap"); + } + if (LogBytesPerWord == 2) { + st->print_cr("# In 32 bit mode, the process size limit was hit"); + } + st->print_cr("# Possible solutions:"); + st->print_cr("# Reduce memory load on the system"); + st->print_cr("# Increase physical memory or swap space"); + st->print_cr("# Check if swap backing store is full"); + if (LogBytesPerWord == 2) { + st->print_cr("# Use 64 bit Java on a 64 bit OS"); + } + st->print_cr("# Decrease Java heap size (-Xmx/-Xms)"); + st->print_cr("# Decrease number of Java threads"); + st->print_cr("# Decrease Java thread stack sizes (-Xss)"); + st->print_cr("# Set larger code cache with -XX:ReservedCodeCacheSize="); + if (UseCompressedOops) { + switch (Universe::narrow_oop_mode()) { + case Universe::UnscaledNarrowOop: + st->print_cr("# JVM is running with Unscaled Compressed Oops mode in which the Java heap is"); + st->print_cr("# placed in the first 4GB address space. The Java Heap base address is the"); + st->print_cr("# maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress"); + st->print_cr("# to set the Java Heap base and to place the Java Heap above 4GB virtual address."); + break; + case Universe::ZeroBasedNarrowOop: + st->print_cr("# JVM is running with Zero Based Compressed Oops mode in which the Java heap is"); + st->print_cr("# placed in the first 32GB address space. The Java Heap base address is the"); + st->print_cr("# maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress"); + st->print_cr("# to set the Java Heap base and to place the Java Heap above 32GB virtual address."); + break; + default: + break; + } + } + st->print_cr("# This output file may be truncated or incomplete."); +} + // This is the main function to report a fatal error. Only one thread can // call this function, so we don't need to worry about MT-safety. But it's // possible that the error handler itself may crash or die on an internal @@ -375,19 +416,7 @@ } // In error file give some solutions if (_verbose) { - st->print_cr("# Possible reasons:"); - st->print_cr("# The system is out of physical RAM or swap space"); - st->print_cr("# In 32 bit mode, the process size limit was hit"); - st->print_cr("# Possible solutions:"); - st->print_cr("# Reduce memory load on the system"); - st->print_cr("# Increase physical memory or swap space"); - st->print_cr("# Check if swap backing store is full"); - st->print_cr("# Use 64 bit Java on a 64 bit OS"); - st->print_cr("# Decrease Java heap size (-Xmx/-Xms)"); - st->print_cr("# Decrease number of Java threads"); - st->print_cr("# Decrease Java thread stack sizes (-Xss)"); - st->print_cr("# Set larger code cache with -XX:ReservedCodeCacheSize="); - st->print_cr("# This output file may be truncated or incomplete."); + print_oom_reasons(st); } else { return; // that's enough for the screen } @@ -675,6 +704,24 @@ st->cr(); } + STEP(182, "(printing number of OutOfMemoryError and StackOverflow exceptions)") + + if (_verbose && Exceptions::has_exception_counts()) { + st->print_cr("OutOfMemory and StackOverflow Exception counts:"); + Exceptions::print_exception_counts_on_error(st); + st->cr(); + } + + STEP(185, "(printing compressed oops mode") + + if (_verbose && UseCompressedOops) { + Universe::print_compressed_oops_mode(st); + if (UseCompressedClassPointers) { + Metaspace::print_compressed_class_space(st); + } + st->cr(); + } + STEP(190, "(printing heap information)" ) if (_verbose && Universe::is_fully_initialized()) { @@ -780,7 +827,7 @@ STEP(280, "(printing date and time)" ) if (_verbose) { - os::print_date_and_time(st); + os::print_date_and_time(st, buf, sizeof(buf)); st->cr(); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/compiler/gcbarriers/PreserveFPRegistersTest.java Thu Oct 25 14:53:24 2018 +0300 @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2016, 2018, 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 8148175 + * @requires vm.gc=="G1" | vm.gc=="null" + * @library /testlibrary /testlibrary/whitebox + * @run main/bootclasspath/othervm -Xbatch -XX:+UnlockDiagnosticVMOptions + * -XX:+WhiteBoxAPI -Xmx300m -XX:+UseG1GC PreserveFPRegistersTest + */ + +import sun.hotspot.WhiteBox; + +public class PreserveFPRegistersTest { + + public static void main(String... args) throws InterruptedException { + new PreserveFPRegistersTest().go(); + } + + private static WhiteBox wb = WhiteBox.getWhiteBox(); + + public final Object[][] storage; + + /** + * Number of objects per region. + */ + public final int K = 10; + + /** + * Length of object array: sizeOf(Object[N]) ~= regionSize / K . + */ + public final int N; + + /** + * How many regions involved into testing. + */ + public final int regionCount; + + PreserveFPRegistersTest() { + long regionSize = wb.g1RegionSize(); + Runtime rt = Runtime.getRuntime(); + long used = rt.totalMemory() - rt.freeMemory(); + long totalFree = rt.maxMemory() - used; + regionCount = (int) ( (totalFree / regionSize) * 0.9); + int refSize = wb.getHeapOopSize(); + N = (int) ((regionSize / K ) / refSize) - 5; + + System.out.println("%% Memory"); + System.out.println("%% used : " + used / 1024 + "M"); + System.out.println("%% available : " + totalFree / 1024 + "M"); + System.out.println("%% G1 Region Size: " + regionSize / 1024 + "M"); + System.out.println("%% region count : " + regionCount); + + System.out.println("%% Objects storage"); + System.out.println("%% N (array length) : " + N); + System.out.println("%% K (objects in regions): " + K); + System.out.println("%% Reference size : " + refSize); + + try { + storage = new Object[regionCount * K][]; + for (int i = 0; i < storage.length; i++) { + storage[i] = new Object[N]; + } + } catch(OutOfMemoryError e) { + throw new AssertionError("Test Failed with unexpected OutOfMemoryError exception"); + } + } + + public void go() throws InterruptedException { + final float FINAL = getValue(); + + for (int to = 0; to < regionCount; to++) { + Object celebrity = storage[to * K]; + for (int from = 0; from < regionCount; from++) { + for (int rn = 0; rn != 100; rn++) { + storage[getY(to, from, rn)][getX(to, from, rn)] = celebrity; + } + if (FINAL != getValue()) { + throw new AssertionError("Final value has changed: " + FINAL + " != " + getValue()); + } + } + } + + System.out.println("TEST PASSED"); + } + + public float getValue() { + return 6; + } + + private int getX(int to, int from, int rn) { + return (rn*regionCount + to) % N; + } + + private int getY(int to, int from, int rn) { + return ((rn*regionCount + to) / N + from * K) % (regionCount*K) ; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/gc/class_unloading/TestClassUnloadingDisabled.java Thu Oct 25 14:53:24 2018 +0300 @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2018, 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 + * @key gc + * @bug 8114823 + * @requires vm.gc == null + * @requires vm.opt.ExplicitGCInvokesConcurrent != true + * @requires vm.opt.ClassUnloading != true + * @library /testlibrary /testlibrary/whitebox + * @build sun.hotspot.WhiteBox + * @run main ClassFileInstaller sun.hotspot.WhiteBox + * sun.hotspot.WhiteBox$WhiteBoxPermission + * + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI + * -XX:-ClassUnloading -XX:+UseG1GC TestClassUnloadingDisabled + * + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI + * -XX:-ClassUnloading -XX:+UseSerialGC TestClassUnloadingDisabled + * + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI + * -XX:-ClassUnloading -XX:+UseParallelGC TestClassUnloadingDisabled + * + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI + * -XX:-ClassUnloading -XX:+UseConcMarkSweepGC TestClassUnloadingDisabled + */ + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import sun.hotspot.WhiteBox; + +import com.oracle.java.testlibrary.Asserts; + +public class TestClassUnloadingDisabled { + public static void main(String args[]) throws Exception { + final WhiteBox wb = WhiteBox.getWhiteBox(); + // Fetch the dir where the test class and the class + // to be loaded resides. + String classDir = TestClassUnloadingDisabled.class.getProtectionDomain().getCodeSource().getLocation().getPath(); + String className = "ClassToLoadUnload"; + + Asserts.assertFalse(wb.isClassAlive(className), "Should not be loaded yet"); + + // The NoPDClassLoader handles loading classes in the test directory + // and loads them without a protection domain, which in some cases + // keeps the class live regardless of marking state. + NoPDClassLoader nopd = new NoPDClassLoader(classDir); + nopd.loadClass(className); + + Asserts.assertTrue(wb.isClassAlive(className), "Class should be loaded"); + + // Clear the class-loader, class and object references to make + // class unloading possible. + nopd = null; + + System.gc(); + Asserts.assertTrue(wb.isClassAlive(className), "Class should not have ben unloaded"); + } +} + +class NoPDClassLoader extends ClassLoader { + String path; + + NoPDClassLoader(String path) { + this.path = path; + } + + public Class<?> loadClass(String name) throws ClassNotFoundException { + byte[] cls = null; + File f = new File(path,name + ".class"); + + // Delegate class loading if class not present in the given + // directory. + if (!f.exists()) { + return super.loadClass(name); + } + + try { + Path path = Paths.get(f.getAbsolutePath()); + cls = Files.readAllBytes(path); + } catch (IOException e) { + throw new ClassNotFoundException(name); + } + + // Define class with no protection domain and resolve it. + return defineClass(name, cls, 0, cls.length, null); + } +} + +class ClassToLoadUnload { +}