This commit is contained in:
Michael Fang 2012-03-28 16:22:31 -07:00
commit 9b2d299d84
155 changed files with 6203 additions and 3009 deletions

View File

@ -152,3 +152,4 @@ c51754cddc037b9609e202b9ed38363d8683e7a8 jdk8-b27
16ba58282d117247f480aae7a79b88141ade52a3 jdk8-b28 16ba58282d117247f480aae7a79b88141ade52a3 jdk8-b28
e070119aa56ee4dc5506c19d2c4d2eecab8ad429 jdk8-b29 e070119aa56ee4dc5506c19d2c4d2eecab8ad429 jdk8-b29
23da7804aca0c9c4e6e86532a1453125a76d95ee jdk8-b30 23da7804aca0c9c4e6e86532a1453125a76d95ee jdk8-b30
bac81e9f7d57b75fba5ab31b571f3fe0dc08af69 jdk8-b31

View File

@ -152,3 +152,4 @@ cc771d92284f71765eca14d6d08703c4af254c04 jdk8-b21
6e2541d60f4e342b5b67140271d7611643929dc3 jdk8-b28 6e2541d60f4e342b5b67140271d7611643929dc3 jdk8-b28
41460de042580bc4a4ce3f863779c66f39cb8578 jdk8-b29 41460de042580bc4a4ce3f863779c66f39cb8578 jdk8-b29
6cea54809b51db92979c22fd8aa8fcb1cb13d12e jdk8-b30 6cea54809b51db92979c22fd8aa8fcb1cb13d12e jdk8-b30
0b66f43b89a6c0ac1c15d7ec51992c541cdc9089 jdk8-b31

View File

@ -152,3 +152,4 @@ e45d6b406d5f91ff5256a5c82456ab1e7eb8becd jdk8-b25
2082eb35d49a9c2aab90b8d4fd31cefb7a23b82e jdk8-b28 2082eb35d49a9c2aab90b8d4fd31cefb7a23b82e jdk8-b28
6117395d422682f89d228347e319fcaac7edc729 jdk8-b29 6117395d422682f89d228347e319fcaac7edc729 jdk8-b29
4605f8418bf562e78be79b25b6b8a5110281acae jdk8-b30 4605f8418bf562e78be79b25b6b8a5110281acae jdk8-b30
1954151dfae8f73db24e396380f7c02bdd47c486 jdk8-b31

View File

@ -232,3 +232,5 @@ b45b5c564098c58ea69e7cff3f7d341f0254dd1d jdk8-b29
d61761bf305031c94f7f8eca49abd978b7d3c5da jdk8-b30 d61761bf305031c94f7f8eca49abd978b7d3c5da jdk8-b30
dfae0140457cfb2c381d7679735fbedbae862c62 hs24-b03 dfae0140457cfb2c381d7679735fbedbae862c62 hs24-b03
f4767e53d6e0d5da7e3f1775904076cce54247c1 hs24-b04 f4767e53d6e0d5da7e3f1775904076cce54247c1 hs24-b04
0cd147eaa673d1642b2f466f5dc257cf192db524 jdk8-b31
27863e4586de38be7dd17da4163f542038f4d1d7 hs24-b05

View File

@ -271,23 +271,25 @@ KERNEL_DIR=$(KERNEL_BASE_DIR)/$(VM_SUBDIR)
ZERO_DIR=$(ZERO_BASE_DIR)/$(VM_SUBDIR) ZERO_DIR=$(ZERO_BASE_DIR)/$(VM_SUBDIR)
SHARK_DIR=$(SHARK_BASE_DIR)/$(VM_SUBDIR) SHARK_DIR=$(SHARK_BASE_DIR)/$(VM_SUBDIR)
# Misc files and generated files need to come from C1 or C2 area ifeq ($(JVM_VARIANT_SERVER), true)
ifeq ($(ZERO_BUILD), true) MISC_DIR=$(C2_DIR)
ifeq ($(SHARK_BUILD), true) GEN_DIR=$(C2_BASE_DIR)/generated
MISC_DIR=$(SHARK_DIR)
GEN_DIR=$(SHARK_BASE_DIR)/generated
else
MISC_DIR=$(ZERO_DIR)
GEN_DIR=$(ZERO_BASE_DIR)/generated
endif endif
else ifeq ($(JVM_VARIANT_CLIENT), true)
ifeq ($(ARCH_DATA_MODEL), 32) MISC_DIR=$(C1_DIR)
MISC_DIR=$(C1_DIR) GEN_DIR=$(C1_BASE_DIR)/generated
GEN_DIR=$(C1_BASE_DIR)/generated
else
MISC_DIR=$(C2_DIR)
GEN_DIR=$(C2_BASE_DIR)/generated
endif endif
ifeq ($(JVM_VARIANT_KERNEL), true)
MISC_DIR=$(C2_DIR)
GEN_DIR=$(C2_BASE_DIR)/generated
endif
ifeq ($(JVM_VARIANT_ZEROSHARK), true)
MISC_DIR=$(SHARK_DIR)
GEN_DIR=$(SHARK_BASE_DIR)/generated
endif
ifeq ($(JVM_VARIANT_ZERO), true)
MISC_DIR=$(ZERO_DIR)
GEN_DIR=$(ZERO_BASE_DIR)/generated
endif endif
# Bin files (windows) # Bin files (windows)
@ -332,46 +334,46 @@ endif
# Shared Library # Shared Library
ifneq ($(OSNAME),windows) ifneq ($(OSNAME),windows)
ifeq ($(ZERO_BUILD), true) ifeq ($(JVM_VARIANT_SERVER), true)
ifeq ($(SHARK_BUILD), true) $(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(C2_DIR)/%.$(LIBRARY_SUFFIX)
$(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(SHARK_DIR)/%.$(LIBRARY_SUFFIX) $(install-file)
$(install-file) $(EXPORT_SERVER_DIR)/%.$(LIBRARY_SUFFIX): $(C2_DIR)/%.$(LIBRARY_SUFFIX)
$(EXPORT_SERVER_DIR)/%.$(LIBRARY_SUFFIX): $(SHARK_DIR)/%.$(LIBRARY_SUFFIX) $(install-file)
$(install-file) $(EXPORT_SERVER_DIR)/64/%.$(LIBRARY_SUFFIX): $(C2_DIR)/%.$(LIBRARY_SUFFIX)
else $(install-file)
$(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(ZERO_DIR)/%.$(LIBRARY_SUFFIX) $(EXPORT_JRE_LIB_ARCH_DIR)/%.debuginfo: $(C2_DIR)/%.debuginfo
$(install-file) $(install-file)
$(EXPORT_SERVER_DIR)/%.$(LIBRARY_SUFFIX): $(ZERO_DIR)/%.$(LIBRARY_SUFFIX) $(EXPORT_SERVER_DIR)/%.debuginfo: $(C2_DIR)/%.debuginfo
$(install-file) $(install-file)
$(EXPORT_SERVER_DIR)/64/%.debuginfo: $(C2_DIR)/%.debuginfo
$(install-file)
endif
ifeq ($(JVM_VARIANT_CLIENT), true)
$(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(C1_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
$(EXPORT_CLIENT_DIR)/%.$(LIBRARY_SUFFIX): $(C1_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
$(EXPORT_CLIENT_DIR)/64/%.$(LIBRARY_SUFFIX): $(C1_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
$(EXPORT_JRE_LIB_ARCH_DIR)/%.debuginfo: $(C1_DIR)/%.debuginfo
$(install-file)
$(EXPORT_CLIENT_DIR)/%.debuginfo: $(C1_DIR)/%.debuginfo
$(install-file)
$(EXPORT_CLIENT_DIR)/64/%.debuginfo: $(C1_DIR)/%.debuginfo
$(install-file)
endif
ifeq ($(JVM_VARIANT_ZEROSHARK), true)
$(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(SHARK_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
$(EXPORT_SERVER_DIR)/%.$(LIBRARY_SUFFIX): $(SHARK_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
endif
ifeq ($(JVM_VARIANT_ZERO), true)
$(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(ZERO_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
$(EXPORT_SERVER_DIR)/%.$(LIBRARY_SUFFIX): $(ZERO_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
endif endif
else
$(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(C1_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
$(EXPORT_JRE_LIB_ARCH_DIR)/%.$(LIBRARY_SUFFIX): $(C2_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
$(EXPORT_CLIENT_DIR)/%.$(LIBRARY_SUFFIX): $(C1_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
$(EXPORT_CLIENT_DIR)/64/%.$(LIBRARY_SUFFIX): $(C1_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
$(EXPORT_SERVER_DIR)/%.$(LIBRARY_SUFFIX): $(C2_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
$(EXPORT_SERVER_DIR)/64/%.$(LIBRARY_SUFFIX): $(C2_DIR)/%.$(LIBRARY_SUFFIX)
$(install-file)
# Debug info for shared library
$(EXPORT_JRE_LIB_ARCH_DIR)/%.debuginfo: $(C1_DIR)/%.debuginfo
$(install-file)
$(EXPORT_JRE_LIB_ARCH_DIR)/%.debuginfo: $(C2_DIR)/%.debuginfo
$(install-file)
$(EXPORT_CLIENT_DIR)/%.debuginfo: $(C1_DIR)/%.debuginfo
$(install-file)
$(EXPORT_CLIENT_DIR)/64/%.debuginfo: $(C1_DIR)/%.debuginfo
$(install-file)
$(EXPORT_SERVER_DIR)/%.debuginfo: $(C2_DIR)/%.debuginfo
$(install-file)
$(EXPORT_SERVER_DIR)/64/%.debuginfo: $(C2_DIR)/%.debuginfo
$(install-file)
endif
endif endif
# Jar file (sa-jdi.jar) # Jar file (sa-jdi.jar)
@ -450,18 +452,19 @@ $(JDK_IMAGE_DIR)/jre/lib/rt.jar:
($(CD) $(JDK_IMAGE_DIR) && $(TAR) -xf -) ($(CD) $(JDK_IMAGE_DIR) && $(TAR) -xf -)
test_jdk: test_jdk:
ifeq ($(ARCH_DATA_MODEL), 32) ifeq ($(JVM_VARIANT_CLIENT), true)
ifneq ($(ZERO_BUILD), true) $(JDK_IMAGE_DIR)/bin/java -d$(ARCH_DATA_MODEL) -client -Xinternalversion
$(JDK_IMAGE_DIR)/bin/java -d32 -client -Xinternalversion $(JDK_IMAGE_DIR)/bin/java -d$(ARCH_DATA_MODEL) -client -version
$(JDK_IMAGE_DIR)/bin/java -d32 -client -version endif
endif ifeq ($(findstring true, $(JVM_VARIANT_SERVER)\
$(JDK_IMAGE_DIR)/bin/java -d32 -server -Xinternalversion $(JVM_VARIANT_ZERO)$(JVM_VARIANT_ZEROSHARK)), true)
$(JDK_IMAGE_DIR)/bin/java -d32 -server -version $(JDK_IMAGE_DIR)/bin/java -d$(ARCH_DATA_MODEL) -server -Xinternalversion
endif $(JDK_IMAGE_DIR)/bin/java -d$(ARCH_DATA_MODEL) -server -version
ifeq ($(ARCH_DATA_MODEL), 64) endif
$(JDK_IMAGE_DIR)/bin/java -d64 -server -Xinternalversion ifeq ($(JVM_VARIANT_KERNEL), true)
$(JDK_IMAGE_DIR)/bin/java -d64 -server -version $(JDK_IMAGE_DIR)/bin/java -d$(ARCH_DATA_MODEL) -kernel -Xinternalversion
endif $(JDK_IMAGE_DIR)/bin/java -d$(ARCH_DATA_MODEL) -kernel -version
endif
copy_product_jdk:: copy_product_jdk::
$(RM) -r $(JDK_IMAGE_DIR) $(RM) -r $(JDK_IMAGE_DIR)

View File

@ -188,7 +188,7 @@ VARIANTARCH = $(subst i386,i486,$(ZERO_LIBARCH))
# in the build.sh script: # in the build.sh script:
TARGETS = debug jvmg fastdebug optimized profiled product TARGETS = debug jvmg fastdebug optimized profiled product
ifeq ($(ZERO_BUILD), true) ifeq ($(findstring true, $(JVM_VARIANT_ZERO) $(JVM_VARIANT_ZEROSHARK)), true)
SUBDIR_DOCS = $(OSNAME)_$(VARIANTARCH)_docs SUBDIR_DOCS = $(OSNAME)_$(VARIANTARCH)_docs
else else
SUBDIR_DOCS = $(OSNAME)_$(BUILDARCH)_docs SUBDIR_DOCS = $(OSNAME)_$(BUILDARCH)_docs

View File

@ -69,7 +69,7 @@ QUIETLY$(MAKE_VERBOSE) = @
# For now, until the compiler is less wobbly: # For now, until the compiler is less wobbly:
TESTFLAGS = -Xbatch -showversion TESTFLAGS = -Xbatch -showversion
ifeq ($(ZERO_BUILD), true) ifeq ($(findstring true, $(JVM_VARIANT_ZERO) $(JVM_VARIANT_ZEROSHARK)), true)
PLATFORM_FILE = $(shell dirname $(shell dirname $(shell pwd)))/platform_zero PLATFORM_FILE = $(shell dirname $(shell dirname $(shell pwd)))/platform_zero
else else
ifdef USE_SUNCC ifdef USE_SUNCC

View File

@ -38,7 +38,7 @@ else
endif endif
# zero # zero
ifeq ($(ZERO_BUILD), true) ifeq ($(findstring true, $(JVM_VARIANT_ZERO) $(JVM_VARIANT_ZEROSHARK)), true)
ifeq ($(ARCH_DATA_MODEL), 64) ifeq ($(ARCH_DATA_MODEL), 64)
MAKE_ARGS += LP64=1 MAKE_ARGS += LP64=1
endif endif
@ -124,6 +124,18 @@ ifeq ($(ARCH), ppc)
HS_ARCH = ppc HS_ARCH = ppc
endif endif
# On 32 bit bsd we build server and client, on 64 bit just server.
ifeq ($(JVM_VARIANTS),)
ifeq ($(ARCH_DATA_MODEL), 32)
JVM_VARIANTS:=client,server
JVM_VARIANT_CLIENT:=true
JVM_VARIANT_SERVER:=true
else
JVM_VARIANTS:=server
JVM_VARIANT_SERVER:=true
endif
endif
JDK_INCLUDE_SUBDIR=bsd JDK_INCLUDE_SUBDIR=bsd
# Library suffix # Library suffix
@ -146,16 +158,14 @@ EXPORT_CLIENT_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/client
EXPORT_LIST += $(EXPORT_JRE_LIB_DIR)/wb.jar EXPORT_LIST += $(EXPORT_JRE_LIB_DIR)/wb.jar
ifndef BUILD_CLIENT_ONLY ifeq ($(findstring true, $(JVM_VARIANT_SERVER) $(JVM_VARIANT_ZERO) $(JVM_VARIANT_ZEROSHARK)), true)
EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.$(LIBRARY_SUFFIX) EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.$(LIBRARY_SUFFIX)
endif endif
ifneq ($(ZERO_BUILD), true) ifeq ($(JVM_VARIANT_CLIENT),true)
ifeq ($(ARCH_DATA_MODEL), 32) EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.$(LIBRARY_SUFFIX)
endif
endif endif
# Serviceability Binaries # Serviceability Binaries

View File

@ -105,11 +105,12 @@ VM_PICFLAG/LIBJVM = $(PICFLAG)
VM_PICFLAG/AOUT = VM_PICFLAG/AOUT =
VM_PICFLAG = $(VM_PICFLAG/$(LINK_INTO)) VM_PICFLAG = $(VM_PICFLAG/$(LINK_INTO))
ifeq ($(ZERO_BUILD), true) ifeq ($(JVM_VARIANT_ZERO), true)
CFLAGS += $(LIBFFI_CFLAGS) CFLAGS += $(LIBFFI_CFLAGS)
endif endif
ifeq ($(SHARK_BUILD), true) ifeq ($(JVM_VARIANT_ZEROSHARK), true)
CFLAGS += $(LLVM_CFLAGS) CFLAGS += $(LIBFFI_CFLAGS)
CFLAGS += $(LLVM_CFLAGS)
endif endif
CFLAGS += $(VM_PICFLAG) CFLAGS += $(VM_PICFLAG)
CFLAGS += -fno-rtti CFLAGS += -fno-rtti

View File

@ -42,7 +42,7 @@ DEP_DIR = $(GENERATED)/dependencies
-include $(DEP_DIR)/*.d -include $(DEP_DIR)/*.d
# read machine-specific adjustments (%%% should do this via buildtree.make?) # read machine-specific adjustments (%%% should do this via buildtree.make?)
ifeq ($(ZERO_BUILD), true) ifeq ($(findstring true, $(JVM_VARIANT_ZERO) $(JVM_VARIANT_ZEROSHARK)), true)
include $(MAKEFILES_DIR)/zeroshark.make include $(MAKEFILES_DIR)/zeroshark.make
else else
include $(MAKEFILES_DIR)/$(BUILDARCH).make include $(MAKEFILES_DIR)/$(BUILDARCH).make
@ -271,12 +271,12 @@ else
LIBS_VM += $(LIBS) LIBS_VM += $(LIBS)
endif endif
ifeq ($(ZERO_BUILD), true) ifeq ($(JVM_VARIANT_ZERO), true)
LIBS_VM += $(LIBFFI_LIBS) LIBS_VM += $(LIBFFI_LIBS)
endif endif
ifeq ($(SHARK_BUILD), true) ifeq ($(JVM_VARIANT_ZEROSHARK), true)
LIBS_VM += $(LIBFFI_LIBS) $(LLVM_LIBS)
LFLAGS_VM += $(LLVM_LDFLAGS) LFLAGS_VM += $(LLVM_LDFLAGS)
LIBS_VM += $(LLVM_LIBS)
endif endif

View File

@ -55,6 +55,27 @@ define prep-target
@$(RM) $@ @$(RM) $@
endef endef
# Default values for JVM_VARIANT* variables if configure hasn't set
# it already.
ifeq ($(JVM_VARIANTS),)
ifeq ($(ZERO_BUILD), true)
ifeq ($(SHARK_BUILD), true)
JVM_VARIANTS:=zeroshark
JVM_VARIANT_ZEROSHARK:=true
else
JVM_VARIANTS:=zero
JVM_VARIANT_ZERO:=true
endif
else
# A default is needed
ifeq ($(BUILD_CLIENT_ONLY), true)
JVM_VARIANTS:=client
JVM_VARIANT_CLIENT:=true
endif
# Further defaults are platform and arch specific
endif
endif
# Directory paths and user name # Directory paths and user name
# Unless GAMMADIR is set on the command line, search upward from # Unless GAMMADIR is set on the command line, search upward from
# the current directory for a parent directory containing "src/share/vm". # the current directory for a parent directory containing "src/share/vm".

View File

@ -35,7 +35,7 @@ HOTSPOT_VM_COPYRIGHT=Copyright 2011
HS_MAJOR_VER=24 HS_MAJOR_VER=24
HS_MINOR_VER=0 HS_MINOR_VER=0
HS_BUILD_NUMBER=04 HS_BUILD_NUMBER=05
JDK_MAJOR_VER=1 JDK_MAJOR_VER=1
JDK_MINOR_VER=8 JDK_MINOR_VER=8

View File

@ -188,7 +188,7 @@ VARIANTARCH = $(subst i386,i486,$(ZERO_LIBARCH))
# in the build.sh script: # in the build.sh script:
TARGETS = debug jvmg fastdebug optimized profiled product TARGETS = debug jvmg fastdebug optimized profiled product
ifeq ($(ZERO_BUILD), true) ifeq ($(findstring true, $(JVM_VARIANT_ZERO) $(JVM_VARIANT_ZEROSHARK)), true)
SUBDIR_DOCS = $(OSNAME)_$(VARIANTARCH)_docs SUBDIR_DOCS = $(OSNAME)_$(VARIANTARCH)_docs
else else
SUBDIR_DOCS = $(OSNAME)_$(BUILDARCH)_docs SUBDIR_DOCS = $(OSNAME)_$(BUILDARCH)_docs

View File

@ -66,7 +66,7 @@ QUIETLY$(MAKE_VERBOSE) = @
# For now, until the compiler is less wobbly: # For now, until the compiler is less wobbly:
TESTFLAGS = -Xbatch -showversion TESTFLAGS = -Xbatch -showversion
ifeq ($(ZERO_BUILD), true) ifeq ($(findstring true, $(JVM_VARIANT_ZERO) $(JVM_VARIANT_ZEROSHARK)), true)
PLATFORM_FILE = $(shell dirname $(shell dirname $(shell pwd)))/platform_zero PLATFORM_FILE = $(shell dirname $(shell dirname $(shell pwd)))/platform_zero
else else
ifdef USE_SUNCC ifdef USE_SUNCC

View File

@ -38,7 +38,7 @@ else
endif endif
# zero # zero
ifeq ($(ZERO_BUILD), true) ifeq ($(findstring true, $(JVM_VARIANT_ZERO) $(JVM_VARIANT_ZEROSHARK)), true)
ifeq ($(ARCH_DATA_MODEL), 64) ifeq ($(ARCH_DATA_MODEL), 64)
MAKE_ARGS += LP64=1 MAKE_ARGS += LP64=1
endif endif
@ -114,6 +114,18 @@ ifeq ($(ARCH), ppc)
HS_ARCH = ppc HS_ARCH = ppc
endif endif
# On 32 bit linux we build server and client, on 64 bit just server.
ifeq ($(JVM_VARIANTS),)
ifeq ($(ARCH_DATA_MODEL), 32)
JVM_VARIANTS:=client,server
JVM_VARIANT_CLIENT:=true
JVM_VARIANT_SERVER:=true
else
JVM_VARIANTS:=server
JVM_VARIANT_SERVER:=true
endif
endif
# determine if HotSpot is being built in JDK6 or earlier version # determine if HotSpot is being built in JDK6 or earlier version
JDK6_OR_EARLIER=0 JDK6_OR_EARLIER=0
ifeq "$(shell expr \( '$(JDK_MAJOR_VERSION)' != '' \& '$(JDK_MINOR_VERSION)' != '' \& '$(JDK_MICRO_VERSION)' != '' \))" "1" ifeq "$(shell expr \( '$(JDK_MAJOR_VERSION)' != '' \& '$(JDK_MINOR_VERSION)' != '' \& '$(JDK_MICRO_VERSION)' != '' \))" "1"
@ -195,22 +207,20 @@ EXPORT_CLIENT_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/client
EXPORT_LIST += $(EXPORT_JRE_LIB_DIR)/wb.jar EXPORT_LIST += $(EXPORT_JRE_LIB_DIR)/wb.jar
ifndef BUILD_CLIENT_ONLY ifeq ($(findstring true, $(JVM_VARIANT_SERVER) $(JVM_VARIANT_ZERO) $(JVM_VARIANT_ZEROSHARK)), true)
EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.$(LIBRARY_SUFFIX) EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.$(LIBRARY_SUFFIX)
ifneq ($(OBJCOPY),) ifneq ($(OBJCOPY),)
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.debuginfo EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.debuginfo
endif endif
endif endif
ifneq ($(ZERO_BUILD), true) ifeq ($(JVM_VARIANT_CLIENT),true)
ifeq ($(ARCH_DATA_MODEL), 32) EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.$(LIBRARY_SUFFIX) ifneq ($(OBJCOPY),)
ifneq ($(OBJCOPY),) EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.debuginfo
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.debuginfo endif
endif
endif
endif endif
# Serviceability Binaries # Serviceability Binaries

View File

@ -72,10 +72,11 @@ VM_PICFLAG/LIBJVM = $(PICFLAG)
VM_PICFLAG/AOUT = VM_PICFLAG/AOUT =
VM_PICFLAG = $(VM_PICFLAG/$(LINK_INTO)) VM_PICFLAG = $(VM_PICFLAG/$(LINK_INTO))
ifeq ($(ZERO_BUILD), true) ifeq ($(JVM_VARIANT_ZERO), true)
CFLAGS += $(LIBFFI_CFLAGS) CFLAGS += $(LIBFFI_CFLAGS)
endif endif
ifeq ($(SHARK_BUILD), true) ifeq ($(JVM_VARIANT_ZEROSHARK), true)
CFLAGS += $(LIBFFI_CFLAGS)
CFLAGS += $(LLVM_CFLAGS) CFLAGS += $(LLVM_CFLAGS)
endif endif
CFLAGS += $(VM_PICFLAG) CFLAGS += $(VM_PICFLAG)

View File

@ -42,7 +42,7 @@ DEP_DIR = $(GENERATED)/dependencies
-include $(DEP_DIR)/*.d -include $(DEP_DIR)/*.d
# read machine-specific adjustments (%%% should do this via buildtree.make?) # read machine-specific adjustments (%%% should do this via buildtree.make?)
ifeq ($(ZERO_BUILD), true) ifeq ($(findstring true, $(JVM_VARIANT_ZERO) $(JVM_VARIANT_ZEROSHARK)), true)
include $(MAKEFILES_DIR)/zeroshark.make include $(MAKEFILES_DIR)/zeroshark.make
else else
include $(MAKEFILES_DIR)/$(BUILDARCH).make include $(MAKEFILES_DIR)/$(BUILDARCH).make
@ -236,7 +236,7 @@ mapfile_reorder : mapfile $(REORDERFILE)
vm.def: $(Res_Files) $(Obj_Files) vm.def: $(Res_Files) $(Obj_Files)
sh $(GAMMADIR)/make/linux/makefiles/build_vm_def.sh *.o > $@ sh $(GAMMADIR)/make/linux/makefiles/build_vm_def.sh *.o > $@
ifeq ($(SHARK_BUILD), true) ifeq ($(JVM_VARIANT_ZEROSHARK), true)
STATIC_CXX = false STATIC_CXX = false
else else
ifeq ($(ZERO_LIBARCH), ppc64) ifeq ($(ZERO_LIBARCH), ppc64)
@ -268,12 +268,12 @@ else
LIBS_VM += $(LIBS) LIBS_VM += $(LIBS)
endif endif
ifeq ($(ZERO_BUILD), true) ifeq ($(JVM_VARIANT_ZERO), true)
LIBS_VM += $(LIBFFI_LIBS) LIBS_VM += $(LIBFFI_LIBS)
endif endif
ifeq ($(SHARK_BUILD), true) ifeq ($(JVM_VARIANT_ZEROSHARK), true)
LIBS_VM += $(LIBFFI_LIBS) $(LLVM_LIBS)
LFLAGS_VM += $(LLVM_LDFLAGS) LFLAGS_VM += $(LLVM_LDFLAGS)
LIBS_VM += $(LLVM_LIBS)
endif endif
LINK_VM = $(LINK_LIB.CC) LINK_VM = $(LINK_LIB.CC)

View File

@ -59,6 +59,18 @@ else
endif endif
endif endif
# On 32 bit solaris we build server and client, on 64 bit just server.
ifeq ($(JVM_VARIANTS),)
ifeq ($(ARCH_DATA_MODEL), 32)
JVM_VARIANTS:=client,server
JVM_VARIANT_CLIENT:=true
JVM_VARIANT_SERVER:=true
else
JVM_VARIANTS:=server
JVM_VARIANT_SERVER:=true
endif
endif
# determine if HotSpot is being built in JDK6 or earlier version # determine if HotSpot is being built in JDK6 or earlier version
JDK6_OR_EARLIER=0 JDK6_OR_EARLIER=0
ifeq "$(shell expr \( '$(JDK_MAJOR_VERSION)' != '' \& '$(JDK_MINOR_VERSION)' != '' \& '$(JDK_MICRO_VERSION)' != '' \))" "1" ifeq "$(shell expr \( '$(JDK_MAJOR_VERSION)' != '' \& '$(JDK_MINOR_VERSION)' != '' \& '$(JDK_MICRO_VERSION)' != '' \))" "1"
@ -153,37 +165,37 @@ EXPORT_LIST += $(EXPORT_JRE_LIB_DIR)/wb.jar
EXPORT_SERVER_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/server EXPORT_SERVER_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/server
EXPORT_CLIENT_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/client EXPORT_CLIENT_DIR = $(EXPORT_JRE_LIB_ARCH_DIR)/client
ifneq ($(BUILD_CLIENT_ONLY),true) ifeq ($(JVM_VARIANT_SERVER),true)
EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.$(LIBRARY_SUFFIX) EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_db.$(LIBRARY_SUFFIX) EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_db.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_dtrace.$(LIBRARY_SUFFIX) EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_dtrace.$(LIBRARY_SUFFIX)
ifeq ($(ARCH_DATA_MODEL),32)
EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_db.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_dtrace.$(LIBRARY_SUFFIX)
endif
ifneq ($(OBJCOPY),) ifneq ($(OBJCOPY),)
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.debuginfo EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm.debuginfo
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_db.debuginfo EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_db.debuginfo
EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_dtrace.debuginfo EXPORT_LIST += $(EXPORT_SERVER_DIR)/libjvm_dtrace.debuginfo
endif endif
endif endif
ifeq ($(ARCH_DATA_MODEL), 32) ifeq ($(JVM_VARIANT_CLIENT),true)
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.$(LIBRARY_SUFFIX) EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_db.$(LIBRARY_SUFFIX) EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_db.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_dtrace.$(LIBRARY_SUFFIX) EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_dtrace.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_db.$(LIBRARY_SUFFIX) ifeq ($(ARCH_DATA_MODEL),32)
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_dtrace.$(LIBRARY_SUFFIX) EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_db.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_dtrace.$(LIBRARY_SUFFIX)
endif
ifneq ($(OBJCOPY),) ifneq ($(OBJCOPY),)
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.debuginfo EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm.debuginfo
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_db.debuginfo EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_db.debuginfo
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_dtrace.debuginfo EXPORT_LIST += $(EXPORT_CLIENT_DIR)/libjvm_dtrace.debuginfo
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_db.debuginfo ifeq ($(ARCH_DATA_MODEL),32)
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_dtrace.debuginfo EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_db.debuginfo
endif EXPORT_LIST += $(EXPORT_CLIENT_DIR)/64/libjvm_dtrace.debuginfo
ifneq ($(BUILD_CLIENT_ONLY), true)
EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_db.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_dtrace.$(LIBRARY_SUFFIX)
ifneq ($(OBJCOPY),)
EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_db.debuginfo
EXPORT_LIST += $(EXPORT_SERVER_DIR)/64/libjvm_dtrace.debuginfo
endif endif
endif endif
endif endif

View File

@ -107,6 +107,19 @@ ifneq ($(shell $(ECHO) $(PROCESSOR_IDENTIFIER) | $(GREP) EM64T),)
endif endif
endif endif
# On 32 bit windows we build server, client and kernel, on 64 bit just server.
ifeq ($(JVM_VARIANTS),)
ifeq ($(ARCH_DATA_MODEL), 32)
JVM_VARIANTS:=client,server,kernel
JVM_VARIANT_CLIENT:=true
JVM_VARIANT_SERVER:=true
JVM_VARIANT_KERNEL:=true
else
JVM_VARIANTS:=server
JVM_VARIANT_SERVER:=true
endif
endif
JDK_INCLUDE_SUBDIR=win32 JDK_INCLUDE_SUBDIR=win32
# Library suffix # Library suffix
@ -177,17 +190,20 @@ EXPORT_SERVER_DIR = $(EXPORT_JRE_BIN_DIR)/server
EXPORT_CLIENT_DIR = $(EXPORT_JRE_BIN_DIR)/client EXPORT_CLIENT_DIR = $(EXPORT_JRE_BIN_DIR)/client
EXPORT_KERNEL_DIR = $(EXPORT_JRE_BIN_DIR)/kernel EXPORT_KERNEL_DIR = $(EXPORT_JRE_BIN_DIR)/kernel
EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt ifeq ($(JVM_VARIANT_SERVER),true)
EXPORT_LIST += $(EXPORT_SERVER_DIR)/jvm.$(LIBRARY_SUFFIX) EXPORT_LIST += $(EXPORT_SERVER_DIR)/Xusage.txt
EXPORT_LIST += $(EXPORT_SERVER_DIR)/jvm.pdb EXPORT_LIST += $(EXPORT_SERVER_DIR)/jvm.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_SERVER_DIR)/jvm.map EXPORT_LIST += $(EXPORT_SERVER_DIR)/jvm.pdb
EXPORT_LIST += $(EXPORT_LIB_DIR)/jvm.lib EXPORT_LIST += $(EXPORT_SERVER_DIR)/jvm.map
ifeq ($(ARCH_DATA_MODEL), 32) EXPORT_LIST += $(EXPORT_LIB_DIR)/jvm.lib
endif
ifeq ($(JVM_VARIANT_CLIENT),true)
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt EXPORT_LIST += $(EXPORT_CLIENT_DIR)/Xusage.txt
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/jvm.$(LIBRARY_SUFFIX) EXPORT_LIST += $(EXPORT_CLIENT_DIR)/jvm.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/jvm.pdb EXPORT_LIST += $(EXPORT_CLIENT_DIR)/jvm.pdb
EXPORT_LIST += $(EXPORT_CLIENT_DIR)/jvm.map EXPORT_LIST += $(EXPORT_CLIENT_DIR)/jvm.map
# kernel vm endif
ifeq ($(JVM_VARIANT_KERNEL),true)
EXPORT_LIST += $(EXPORT_KERNEL_DIR)/Xusage.txt EXPORT_LIST += $(EXPORT_KERNEL_DIR)/Xusage.txt
EXPORT_LIST += $(EXPORT_KERNEL_DIR)/jvm.$(LIBRARY_SUFFIX) EXPORT_LIST += $(EXPORT_KERNEL_DIR)/jvm.$(LIBRARY_SUFFIX)
EXPORT_LIST += $(EXPORT_KERNEL_DIR)/jvm.pdb EXPORT_LIST += $(EXPORT_KERNEL_DIR)/jvm.pdb

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -206,10 +206,15 @@ int BsdAttachListener::init() {
// put in listen mode, set permissions, and rename into place // put in listen mode, set permissions, and rename into place
res = ::listen(listener, 5); res = ::listen(listener, 5);
if (res == 0) { if (res == 0) {
RESTARTABLE(::chmod(initial_path, S_IREAD|S_IWRITE), res); RESTARTABLE(::chmod(initial_path, S_IREAD|S_IWRITE), res);
if (res == 0) {
// make sure the file is owned by the effective user and effective group
// (this is the default on linux, but not on mac os)
RESTARTABLE(::chown(initial_path, geteuid(), getegid()), res);
if (res == 0) { if (res == 0) {
res = ::rename(initial_path, path); res = ::rename(initial_path, path);
} }
}
} }
if (res == -1) { if (res == -1) {
RESTARTABLE(::close(listener), res); RESTARTABLE(::close(listener), res);

View File

@ -257,6 +257,18 @@ const char* InlineTree::should_not_inline(ciMethod *callee_method, ciMethod* cal
return "exception method"; return "exception method";
} }
if (callee_method->should_not_inline()) {
return "disallowed by CompilerOracle";
}
if (UseStringCache) {
// Do not inline StringCache::profile() method used only at the beginning.
if (callee_method->name() == ciSymbol::profile_name() &&
callee_method->holder()->name() == ciSymbol::java_lang_StringCache()) {
return "profiling method";
}
}
// use frequency-based objections only for non-trivial methods // use frequency-based objections only for non-trivial methods
if (callee_method->code_size_for_inlining() <= MaxTrivialSize) return NULL; if (callee_method->code_size_for_inlining() <= MaxTrivialSize) return NULL;
@ -278,18 +290,6 @@ const char* InlineTree::should_not_inline(ciMethod *callee_method, ciMethod* cal
} }
} }
if (callee_method->should_not_inline()) {
return "disallowed by CompilerOracle";
}
if (UseStringCache) {
// Do not inline StringCache::profile() method used only at the beginning.
if (callee_method->name() == ciSymbol::profile_name() &&
callee_method->holder()->name() == ciSymbol::java_lang_StringCache()) {
return "profiling method";
}
}
return NULL; return NULL;
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -465,6 +465,9 @@
notproduct(bool, PrintOptimizePtrCompare, false, \ notproduct(bool, PrintOptimizePtrCompare, false, \
"Print information about optimized pointers compare") \ "Print information about optimized pointers compare") \
\ \
notproduct(bool, VerifyConnectionGraph , true, \
"Verify Connection Graph construction in Escape Analysis") \
\
product(bool, UseOptoBiasInlining, true, \ product(bool, UseOptoBiasInlining, true, \
"Generate biased locking code in C2 ideal graph") \ "Generate biased locking code in C2 ideal graph") \
\ \

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -1538,10 +1538,7 @@ Node *LockNode::Ideal(PhaseGVN *phase, bool can_reshape) {
// If we are locking an unescaped object, the lock/unlock is unnecessary // If we are locking an unescaped object, the lock/unlock is unnecessary
// //
ConnectionGraph *cgr = phase->C->congraph(); ConnectionGraph *cgr = phase->C->congraph();
PointsToNode::EscapeState es = PointsToNode::GlobalEscape; if (cgr != NULL && cgr->not_global_escape(obj_node())) {
if (cgr != NULL)
es = cgr->escape_state(obj_node());
if (es != PointsToNode::UnknownEscape && es != PointsToNode::GlobalEscape) {
assert(!is_eliminated() || is_coarsened(), "sanity"); assert(!is_eliminated() || is_coarsened(), "sanity");
// The lock could be marked eliminated by lock coarsening // The lock could be marked eliminated by lock coarsening
// code during first IGVN before EA. Replace coarsened flag // code during first IGVN before EA. Replace coarsened flag
@ -1680,10 +1677,7 @@ Node *UnlockNode::Ideal(PhaseGVN *phase, bool can_reshape) {
// If we are unlocking an unescaped object, the lock/unlock is unnecessary. // If we are unlocking an unescaped object, the lock/unlock is unnecessary.
// //
ConnectionGraph *cgr = phase->C->congraph(); ConnectionGraph *cgr = phase->C->congraph();
PointsToNode::EscapeState es = PointsToNode::GlobalEscape; if (cgr != NULL && cgr->not_global_escape(obj_node())) {
if (cgr != NULL)
es = cgr->escape_state(obj_node());
if (es != PointsToNode::UnknownEscape && es != PointsToNode::GlobalEscape) {
assert(!is_eliminated() || is_coarsened(), "sanity"); assert(!is_eliminated() || is_coarsened(), "sanity");
// The lock could be marked eliminated by lock coarsening // The lock could be marked eliminated by lock coarsening
// code during first IGVN before EA. Replace coarsened flag // code during first IGVN before EA. Replace coarsened flag

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -546,6 +546,12 @@ public:
// or result projection is there are several CheckCastPP // or result projection is there are several CheckCastPP
// or returns NULL if there is no one. // or returns NULL if there is no one.
Node *result_cast(); Node *result_cast();
// Does this node returns pointer?
bool returns_pointer() const {
const TypeTuple *r = tf()->range();
return (r->cnt() > TypeFunc::Parms &&
r->field_at(TypeFunc::Parms)->isa_ptr());
}
// Collect all the interesting edges from a call for use in // Collect all the interesting edges from a call for use in
// replacing the call by something else. Used by macro expansion // replacing the call by something else. Used by macro expansion

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -1707,7 +1707,6 @@ void Compile::Optimize() {
if (major_progress()) print_method("PhaseIdealLoop before EA", 2); if (major_progress()) print_method("PhaseIdealLoop before EA", 2);
if (failing()) return; if (failing()) return;
} }
TracePhase t2("escapeAnalysis", &_t_escapeAnalysis, true);
ConnectionGraph::do_analysis(this, &igvn); ConnectionGraph::do_analysis(this, &igvn);
if (failing()) return; if (failing()) return;
@ -1719,6 +1718,7 @@ void Compile::Optimize() {
if (failing()) return; if (failing()) return;
if (congraph() != NULL && macro_count() > 0) { if (congraph() != NULL && macro_count() > 0) {
NOT_PRODUCT( TracePhase t2("macroEliminate", &_t_macroEliminate, TimeCompiler); )
PhaseMacroExpand mexp(igvn); PhaseMacroExpand mexp(igvn);
mexp.eliminate_macro_nodes(); mexp.eliminate_macro_nodes();
igvn.set_delay_transform(false); igvn.set_delay_transform(false);
@ -1875,10 +1875,10 @@ void Compile::Code_Gen() {
cfg.Estimate_Block_Frequency(); cfg.Estimate_Block_Frequency();
cfg.GlobalCodeMotion(m,unique(),proj_list); cfg.GlobalCodeMotion(m,unique(),proj_list);
if (failing()) return;
print_method("Global code motion", 2); print_method("Global code motion", 2);
if (failing()) return;
NOT_PRODUCT( verify_graph_edges(); ) NOT_PRODUCT( verify_graph_edges(); )
debug_only( cfg.verify(); ) debug_only( cfg.verify(); )

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -115,18 +115,36 @@ class Node;
class CallNode; class CallNode;
class PhiNode; class PhiNode;
class PhaseTransform; class PhaseTransform;
class PointsToNode;
class Type; class Type;
class TypePtr; class TypePtr;
class VectorSet; class VectorSet;
class PointsToNode { class JavaObjectNode;
friend class ConnectionGraph; class LocalVarNode;
class FieldNode;
class ArraycopyNode;
// ConnectionGraph nodes
class PointsToNode : public ResourceObj {
GrowableArray<PointsToNode*> _edges; // List of nodes this node points to
GrowableArray<PointsToNode*> _uses; // List of nodes which point to this node
const u1 _type; // NodeType
u1 _flags; // NodeFlags
u1 _escape; // EscapeState of object
u1 _fields_escape; // EscapeState of object's fields
Node* const _node; // Ideal node corresponding to this PointsTo node.
const int _idx; // Cached ideal node's _idx
public: public:
typedef enum { typedef enum {
UnknownType = 0, UnknownType = 0,
JavaObject = 1, JavaObject = 1,
LocalVar = 2, LocalVar = 2,
Field = 3 Field = 3,
Arraycopy = 4
} NodeType; } NodeType;
typedef enum { typedef enum {
@ -140,178 +158,387 @@ public:
} EscapeState; } EscapeState;
typedef enum { typedef enum {
UnknownEdge = 0, ScalarReplaceable = 1, // Not escaped object could be replaced with scalar
PointsToEdge = 1, PointsToUnknown = 2, // Has edge to phantom_object
DeferredEdge = 2, ArraycopySrc = 4, // Has edge from Arraycopy node
FieldEdge = 3 ArraycopyDst = 8 // Has edge to Arraycopy node
} EdgeType; } NodeFlags;
private:
enum {
EdgeMask = 3,
EdgeShift = 2,
INITIAL_EDGE_COUNT = 4
};
NodeType _type;
EscapeState _escape;
GrowableArray<uint>* _edges; // outgoing edges
Node* _node; // Ideal node corresponding to this PointsTo node.
int _offset; // Object fields offsets.
bool _scalar_replaceable; // Not escaped object could be replaced with scalar
bool _has_unknown_ptr; // Has edge to phantom_object
public:
PointsToNode():
_type(UnknownType),
_escape(UnknownEscape),
_edges(NULL),
_node(NULL),
_offset(-1),
_has_unknown_ptr(false),
_scalar_replaceable(true) {}
EscapeState escape_state() const { return _escape; } PointsToNode(Compile *C, Node* n, EscapeState es, NodeType type):
NodeType node_type() const { return _type;} _edges(C->comp_arena(), 2, 0, NULL),
int offset() { return _offset;} _uses (C->comp_arena(), 2, 0, NULL),
bool scalar_replaceable() { return _scalar_replaceable;} _node(n),
bool has_unknown_ptr() { return _has_unknown_ptr;} _idx(n->_idx),
_type((u1)type),
void set_offset(int offs) { _offset = offs;} _escape((u1)es),
void set_escape_state(EscapeState state) { _escape = state; } _fields_escape((u1)es),
void set_node_type(NodeType ntype) { _flags(ScalarReplaceable) {
assert(_type == UnknownType || _type == ntype, "Can't change node type"); assert(n != NULL && es != UnknownEscape, "sanity");
_type = ntype;
}
void set_scalar_replaceable(bool v) { _scalar_replaceable = v; }
void set_has_unknown_ptr() { _has_unknown_ptr = true; }
// count of outgoing edges
uint edge_count() const { return (_edges == NULL) ? 0 : _edges->length(); }
// node index of target of outgoing edge "e"
uint edge_target(uint e) const {
assert(_edges != NULL, "valid edge index");
return (_edges->at(e) >> EdgeShift);
}
// type of outgoing edge "e"
EdgeType edge_type(uint e) const {
assert(_edges != NULL, "valid edge index");
return (EdgeType) (_edges->at(e) & EdgeMask);
} }
// add a edge of the specified type pointing to the specified target Node* ideal_node() const { return _node; }
void add_edge(uint targIdx, EdgeType et); int idx() const { return _idx; }
// remove an edge of the specified type pointing to the specified target bool is_JavaObject() const { return _type == (u1)JavaObject; }
void remove_edge(uint targIdx, EdgeType et); bool is_LocalVar() const { return _type == (u1)LocalVar; }
bool is_Field() const { return _type == (u1)Field; }
bool is_Arraycopy() const { return _type == (u1)Arraycopy; }
JavaObjectNode* as_JavaObject() { assert(is_JavaObject(),""); return (JavaObjectNode*)this; }
LocalVarNode* as_LocalVar() { assert(is_LocalVar(),""); return (LocalVarNode*)this; }
FieldNode* as_Field() { assert(is_Field(),""); return (FieldNode*)this; }
ArraycopyNode* as_Arraycopy() { assert(is_Arraycopy(),""); return (ArraycopyNode*)this; }
EscapeState escape_state() const { return (EscapeState)_escape; }
void set_escape_state(EscapeState state) { _escape = (u1)state; }
EscapeState fields_escape_state() const { return (EscapeState)_fields_escape; }
void set_fields_escape_state(EscapeState state) { _fields_escape = (u1)state; }
bool has_unknown_ptr() const { return (_flags & PointsToUnknown) != 0; }
void set_has_unknown_ptr() { _flags |= PointsToUnknown; }
bool arraycopy_src() const { return (_flags & ArraycopySrc) != 0; }
void set_arraycopy_src() { _flags |= ArraycopySrc; }
bool arraycopy_dst() const { return (_flags & ArraycopyDst) != 0; }
void set_arraycopy_dst() { _flags |= ArraycopyDst; }
bool scalar_replaceable() const { return (_flags & ScalarReplaceable) != 0;}
void set_scalar_replaceable(bool v) {
if (v)
_flags |= ScalarReplaceable;
else
_flags &= ~ScalarReplaceable;
}
int edge_count() const { return _edges.length(); }
PointsToNode* edge(int e) const { return _edges.at(e); }
bool add_edge(PointsToNode* edge) { return _edges.append_if_missing(edge); }
int use_count() const { return _uses.length(); }
PointsToNode* use(int e) const { return _uses.at(e); }
bool add_use(PointsToNode* use) { return _uses.append_if_missing(use); }
// Mark base edge use to distinguish from stored value edge.
bool add_base_use(FieldNode* use) { return _uses.append_if_missing((PointsToNode*)((intptr_t)use + 1)); }
static bool is_base_use(PointsToNode* use) { return (((intptr_t)use) & 1); }
static PointsToNode* get_use_node(PointsToNode* use) { return (PointsToNode*)(((intptr_t)use) & ~1); }
// Return true if this node points to specified node or nodes it points to.
bool points_to(JavaObjectNode* ptn) const;
// Return true if this node points only to non-escaping allocations.
bool non_escaping_allocation();
// Return true if one node points to an other.
bool meet(PointsToNode* ptn);
#ifndef PRODUCT #ifndef PRODUCT
NodeType node_type() const { return (NodeType)_type;}
void dump(bool print_state=true) const; void dump(bool print_state=true) const;
#endif #endif
}; };
class LocalVarNode: public PointsToNode {
public:
LocalVarNode(Compile *C, Node* n, EscapeState es):
PointsToNode(C, n, es, LocalVar) {}
};
class JavaObjectNode: public PointsToNode {
public:
JavaObjectNode(Compile *C, Node* n, EscapeState es):
PointsToNode(C, n, es, JavaObject) {
if (es > NoEscape)
set_scalar_replaceable(false);
}
};
class FieldNode: public PointsToNode {
GrowableArray<PointsToNode*> _bases; // List of JavaObject nodes which point to this node
const int _offset; // Field's offset.
const bool _is_oop; // Field points to object
bool _has_unknown_base; // Has phantom_object base
public:
FieldNode(Compile *C, Node* n, EscapeState es, int offs, bool is_oop):
PointsToNode(C, n, es, Field),
_offset(offs), _is_oop(is_oop),
_has_unknown_base(false) {}
int offset() const { return _offset;}
bool is_oop() const { return _is_oop;}
bool has_unknown_base() const { return _has_unknown_base; }
void set_has_unknown_base() { _has_unknown_base = true; }
int base_count() const { return _bases.length(); }
PointsToNode* base(int e) const { return _bases.at(e); }
bool add_base(PointsToNode* base) { return _bases.append_if_missing(base); }
#ifdef ASSERT
// Return true if bases points to this java object.
bool has_base(JavaObjectNode* ptn) const;
#endif
};
class ArraycopyNode: public PointsToNode {
public:
ArraycopyNode(Compile *C, Node* n, EscapeState es):
PointsToNode(C, n, es, Arraycopy) {}
};
// Iterators for PointsTo node's edges:
// for (EdgeIterator i(n); i.has_next(); i.next()) {
// PointsToNode* u = i.get();
class PointsToIterator: public StackObj {
protected:
const PointsToNode* node;
const int cnt;
int i;
public:
inline PointsToIterator(const PointsToNode* n, int cnt) : node(n), cnt(cnt), i(0) { }
inline bool has_next() const { return i < cnt; }
inline void next() { i++; }
PointsToNode* get() const { ShouldNotCallThis(); return NULL; }
};
class EdgeIterator: public PointsToIterator {
public:
inline EdgeIterator(const PointsToNode* n) : PointsToIterator(n, n->edge_count()) { }
inline PointsToNode* get() const { return node->edge(i); }
};
class UseIterator: public PointsToIterator {
public:
inline UseIterator(const PointsToNode* n) : PointsToIterator(n, n->use_count()) { }
inline PointsToNode* get() const { return node->use(i); }
};
class BaseIterator: public PointsToIterator {
public:
inline BaseIterator(const FieldNode* n) : PointsToIterator(n, n->base_count()) { }
inline PointsToNode* get() const { return ((PointsToNode*)node)->as_Field()->base(i); }
};
class ConnectionGraph: public ResourceObj { class ConnectionGraph: public ResourceObj {
private: private:
GrowableArray<PointsToNode> _nodes; // Connection graph nodes indexed GrowableArray<PointsToNode*> _nodes; // Map from ideal nodes to
// by ideal node index. // ConnectionGraph nodes.
Unique_Node_List _delayed_worklist; // Nodes to be processed before GrowableArray<PointsToNode*> _worklist; // Nodes to be processed
// the call build_connection_graph().
GrowableArray<MergeMemNode *> _mergemem_worklist; // List of all MergeMem nodes bool _collecting; // Indicates whether escape information
// is still being collected. If false,
// no new nodes will be processed.
VectorSet _processed; // Records which nodes have been bool _verify; // verify graph
// processed.
bool _collecting; // Indicates whether escape information JavaObjectNode* phantom_obj; // Unknown object
// is still being collected. If false, JavaObjectNode* null_obj;
// no new nodes will be processed. Node* _pcmp_neq; // ConI(#CC_GT)
Node* _pcmp_eq; // ConI(#CC_EQ)
bool _progress; // Indicates whether new Graph's edges Compile* _compile; // Compile object for current compilation
// were created. PhaseIterGVN* _igvn; // Value numbering
uint _phantom_object; // Index of globally escaping object Unique_Node_List ideal_nodes; // Used by CG construction and types splitting.
// that pointer values loaded from
// a field which has not been set
// are assumed to point to.
uint _oop_null; // ConP(#NULL)->_idx
uint _noop_null; // ConN(#NULL)->_idx
Node* _pcmp_neq; // ConI(#CC_GT)
Node* _pcmp_eq; // ConI(#CC_EQ)
Compile * _compile; // Compile object for current compilation
PhaseIterGVN * _igvn; // Value numbering
// Address of an element in _nodes. Used when the element is to be modified // Address of an element in _nodes. Used when the element is to be modified
PointsToNode *ptnode_adr(uint idx) const { PointsToNode* ptnode_adr(int idx) const {
// There should be no new ideal nodes during ConnectionGraph build, // There should be no new ideal nodes during ConnectionGraph build,
// growableArray::adr_at() will throw assert otherwise. // growableArray::at() will throw assert otherwise.
return _nodes.adr_at(idx); return _nodes.at(idx);
} }
uint nodes_size() const { return _nodes.length(); } uint nodes_size() const { return _nodes.length(); }
bool is_null_ptr(uint idx) const { return (idx == _noop_null || idx == _oop_null); } // Add nodes to ConnectionGraph.
void add_local_var(Node* n, PointsToNode::EscapeState es);
void add_java_object(Node* n, PointsToNode::EscapeState es);
void add_field(Node* n, PointsToNode::EscapeState es, int offset);
void add_arraycopy(Node* n, PointsToNode::EscapeState es, PointsToNode* src, PointsToNode* dst);
// Add node to ConnectionGraph. // Compute the escape state for arguments to a call.
void add_node(Node *n, PointsToNode::NodeType nt, PointsToNode::EscapeState es, bool done); void process_call_arguments(CallNode *call);
// Add PointsToNode node corresponding to a call
void add_call_node(CallNode* call);
// Map ideal node to existing PointsTo node (usually phantom_object).
void map_ideal_node(Node *n, PointsToNode* ptn) {
assert(ptn != NULL, "only existing PointsTo node");
_nodes.at_put(n->_idx, ptn);
}
// Create PointsToNode node and add it to Connection Graph.
void add_node_to_connection_graph(Node *n, Unique_Node_List *delayed_worklist);
// Add final simple edges to graph.
void add_final_edges(Node *n);
// Finish Graph construction.
bool complete_connection_graph(GrowableArray<PointsToNode*>& ptnodes_worklist,
GrowableArray<JavaObjectNode*>& non_escaped_worklist,
GrowableArray<JavaObjectNode*>& java_objects_worklist,
GrowableArray<FieldNode*>& oop_fields_worklist);
#ifdef ASSERT
void verify_connection_graph(GrowableArray<PointsToNode*>& ptnodes_worklist,
GrowableArray<JavaObjectNode*>& non_escaped_worklist,
GrowableArray<JavaObjectNode*>& java_objects_worklist,
GrowableArray<Node*>& addp_worklist);
#endif
// Add all references to this JavaObject node.
int add_java_object_edges(JavaObjectNode* jobj, bool populate_worklist);
// Put node on worklist if it is (or was) not there.
void add_to_worklist(PointsToNode* pt) {
_worklist.push(pt);
return;
}
// Put on worklist all uses of this node.
void add_uses_to_worklist(PointsToNode* pt) {
for (UseIterator i(pt); i.has_next(); i.next())
_worklist.push(i.get());
}
// Put on worklist all field's uses and related field nodes.
void add_field_uses_to_worklist(FieldNode* field);
// Put on worklist all related field nodes.
void add_fields_to_worklist(FieldNode* field, PointsToNode* base);
// Find fields which have unknown value.
int find_field_value(FieldNode* field);
// Find fields initializing values for allocations.
int find_init_values(JavaObjectNode* ptn, PointsToNode* init_val, PhaseTransform* phase);
// Set the escape state of an object and its fields.
void set_escape_state(PointsToNode* ptn, PointsToNode::EscapeState esc) {
// Don't change non-escaping state of NULL pointer.
if (ptn != null_obj) {
if (ptn->escape_state() < esc)
ptn->set_escape_state(esc);
if (ptn->fields_escape_state() < esc)
ptn->set_fields_escape_state(esc);
}
}
void set_fields_escape_state(PointsToNode* ptn, PointsToNode::EscapeState esc) {
// Don't change non-escaping state of NULL pointer.
if (ptn != null_obj) {
if (ptn->fields_escape_state() < esc)
ptn->set_fields_escape_state(esc);
}
}
// Propagate GlobalEscape and ArgEscape escape states to all nodes
// and check that we still have non-escaping java objects.
bool find_non_escaped_objects(GrowableArray<PointsToNode*>& ptnodes_worklist,
GrowableArray<JavaObjectNode*>& non_escaped_worklist);
// Adjust scalar_replaceable state after Connection Graph is built.
void adjust_scalar_replaceable_state(JavaObjectNode* jobj);
// Optimize ideal graph.
void optimize_ideal_graph(GrowableArray<Node*>& ptr_cmp_worklist,
GrowableArray<Node*>& storestore_worklist);
// Optimize objects compare.
Node* optimize_ptr_compare(Node* n);
// Returns unique corresponding java object or NULL.
JavaObjectNode* unique_java_object(Node *n);
// Add an edge of the specified type pointing to the specified target.
bool add_edge(PointsToNode* from, PointsToNode* to) {
assert(!from->is_Field() || from->as_Field()->is_oop(), "sanity");
if (to == phantom_obj) {
if (from->has_unknown_ptr()) {
return false; // already points to phantom_obj
}
from->set_has_unknown_ptr();
}
bool is_new = from->add_edge(to);
assert(to != phantom_obj || is_new, "sanity");
if (is_new) { // New edge?
assert(!_verify, "graph is incomplete");
is_new = to->add_use(from);
assert(is_new, "use should be also new");
}
return is_new;
}
// Add an edge from Field node to its base and back.
bool add_base(FieldNode* from, PointsToNode* to) {
assert(!to->is_Arraycopy(), "sanity");
if (to == phantom_obj) {
if (from->has_unknown_base()) {
return false; // already has phantom_obj base
}
from->set_has_unknown_base();
}
bool is_new = from->add_base(to);
assert(to != phantom_obj || is_new, "sanity");
if (is_new) { // New edge?
assert(!_verify, "graph is incomplete");
if (to == null_obj)
return is_new; // Don't add fields to NULL pointer.
if (to->is_JavaObject()) {
is_new = to->add_edge(from);
} else {
is_new = to->add_base_use(from);
}
assert(is_new, "use should be also new");
}
return is_new;
}
// Add LocalVar node and edge if possible
void add_local_var_and_edge(Node* n, PointsToNode::EscapeState es, Node* to,
Unique_Node_List *delayed_worklist) {
PointsToNode* ptn = ptnode_adr(to->_idx);
if (delayed_worklist != NULL) { // First iteration of CG construction
add_local_var(n, es);
if (ptn == NULL) {
delayed_worklist->push(n);
return; // Process it later.
}
} else {
assert(ptn != NULL, "node should be registered");
}
add_edge(ptnode_adr(n->_idx), ptn);
}
// Helper functions
bool is_oop_field(Node* n, int offset);
static Node* get_addp_base(Node *addp);
static Node* find_second_addp(Node* addp, Node* n);
// offset of a field reference // offset of a field reference
int address_offset(Node* adr, PhaseTransform *phase); int address_offset(Node* adr, PhaseTransform *phase);
// compute the escape state for arguments to a call
void process_call_arguments(CallNode *call, PhaseTransform *phase);
// compute the escape state for the return value of a call // Propagate unique types created for unescaped allocated objects
void process_call_result(ProjNode *resproj, PhaseTransform *phase); // through the graph
void split_unique_types(GrowableArray<Node *> &alloc_worklist);
// Populate Connection Graph with Ideal nodes. // Helper methods for unique types split.
void record_for_escape_analysis(Node *n, PhaseTransform *phase); bool split_AddP(Node *addp, Node *base);
// Build Connection Graph and set nodes escape state. PhiNode *create_split_phi(PhiNode *orig_phi, int alias_idx, GrowableArray<PhiNode *> &orig_phi_worklist, bool &new_created);
void build_connection_graph(Node *n, PhaseTransform *phase); PhiNode *split_memory_phi(PhiNode *orig_phi, int alias_idx, GrowableArray<PhiNode *> &orig_phi_worklist);
// walk the connection graph starting at the node corresponding to "n" and void move_inst_mem(Node* n, GrowableArray<PhiNode *> &orig_phis);
// add the index of everything it could point to, to "ptset". This may cause Node* find_inst_mem(Node* mem, int alias_idx,GrowableArray<PhiNode *> &orig_phi_worklist);
// Phi's encountered to get (re)processed (which requires "phase".) Node* step_through_mergemem(MergeMemNode *mmem, int alias_idx, const TypeOopPtr *toop);
VectorSet* PointsTo(Node * n);
// Reused structures for PointsTo().
VectorSet pt_ptset;
VectorSet pt_visited;
GrowableArray<uint> pt_worklist;
// Edge manipulation. The "from_i" and "to_i" arguments are the
// node indices of the source and destination of the edge
void add_pointsto_edge(uint from_i, uint to_i);
void add_deferred_edge(uint from_i, uint to_i);
void add_field_edge(uint from_i, uint to_i, int offs);
// Add an edge of the specified type pointing to the specified target.
// Set _progress if new edge is added.
void add_edge(PointsToNode *f, uint to_i, PointsToNode::EdgeType et) {
uint e_cnt = f->edge_count();
f->add_edge(to_i, et);
_progress |= (f->edge_count() != e_cnt);
}
// Add an edge to node given by "to_i" from any field of adr_i whose offset
// matches "offset" A deferred edge is added if to_i is a LocalVar, and
// a pointsto edge is added if it is a JavaObject
void add_edge_from_fields(uint adr, uint to_i, int offs);
// Add a deferred edge from node given by "from_i" to any field
// of adr_i whose offset matches "offset"
void add_deferred_edge_to_fields(uint from_i, uint adr, int offs);
// Remove outgoing deferred edges from the node referenced by "ni". GrowableArray<MergeMemNode*> _mergemem_worklist; // List of all MergeMem nodes
// Any outgoing edges from the target of the deferred edge are copied
// to "ni".
void remove_deferred(uint ni, GrowableArray<uint>* deferred_edges, VectorSet* visited);
Node_Array _node_map; // used for bookeeping during type splitting Node_Array _node_map; // used for bookeeping during type splitting
// Used for the following purposes: // Used for the following purposes:
@ -320,21 +547,18 @@ private:
// MemNode - new memory input for this node // MemNode - new memory input for this node
// ChecCastPP - allocation that this is a cast of // ChecCastPP - allocation that this is a cast of
// allocation - CheckCastPP of the allocation // allocation - CheckCastPP of the allocation
bool split_AddP(Node *addp, Node *base, PhaseGVN *igvn);
PhiNode *create_split_phi(PhiNode *orig_phi, int alias_idx, GrowableArray<PhiNode *> &orig_phi_worklist, PhaseGVN *igvn, bool &new_created);
PhiNode *split_memory_phi(PhiNode *orig_phi, int alias_idx, GrowableArray<PhiNode *> &orig_phi_worklist, PhaseGVN *igvn);
void move_inst_mem(Node* n, GrowableArray<PhiNode *> &orig_phis, PhaseGVN *igvn);
Node *find_inst_mem(Node *mem, int alias_idx,GrowableArray<PhiNode *> &orig_phi_worklist, PhaseGVN *igvn);
// Propagate unique types created for unescaped allocated objects
// through the graph
void split_unique_types(GrowableArray<Node *> &alloc_worklist);
// manage entries in _node_map // manage entries in _node_map
void set_map(int idx, Node *n) { _node_map.map(idx, n); }
Node *get_map(int idx) { return _node_map[idx]; } void set_map(Node* from, Node* to) {
PhiNode *get_map_phi(int idx) { ideal_nodes.push(from);
Node *phi = _node_map[idx]; _node_map.map(from->_idx, to);
}
Node* get_map(int idx) { return _node_map[idx]; }
PhiNode* get_map_phi(int idx) {
Node* phi = _node_map[idx];
return (phi == NULL) ? NULL : phi->as_Phi(); return (phi == NULL) ? NULL : phi->as_Phi();
} }
@ -344,23 +568,6 @@ private:
_igvn->add_users_to_worklist(n); _igvn->add_users_to_worklist(n);
} }
// Set the escape state of a node
void set_escape_state(uint ni, PointsToNode::EscapeState es);
// Find fields initializing values for allocations.
void find_init_values(Node* n, VectorSet* visited, PhaseTransform* phase);
// Adjust escape state after Connection Graph is built.
void adjust_escape_state(Node* n);
// Propagate escape states to referenced nodes.
bool propagate_escape_state(GrowableArray<int>* cg_worklist,
GrowableArray<uint>* worklist,
PointsToNode::EscapeState esc_state);
// Optimize objects compare.
Node* optimize_ptr_compare(Node* n);
// Compute the escape information // Compute the escape information
bool compute_escape(); bool compute_escape();
@ -373,11 +580,10 @@ public:
// Perform escape analysis // Perform escape analysis
static void do_analysis(Compile *C, PhaseIterGVN *igvn); static void do_analysis(Compile *C, PhaseIterGVN *igvn);
// escape state of a node bool not_global_escape(Node *n);
PointsToNode::EscapeState escape_state(Node *n);
#ifndef PRODUCT #ifndef PRODUCT
void dump(); void dump(GrowableArray<PointsToNode*>& ptnodes_worklist);
#endif #endif
}; };

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -39,8 +39,9 @@ elapsedTimer Phase::_t_stubCompilation;
// The next timers used for LogCompilation // The next timers used for LogCompilation
elapsedTimer Phase::_t_parser; elapsedTimer Phase::_t_parser;
elapsedTimer Phase::_t_escapeAnalysis;
elapsedTimer Phase::_t_optimizer; elapsedTimer Phase::_t_optimizer;
elapsedTimer Phase::_t_escapeAnalysis;
elapsedTimer Phase::_t_connectionGraph;
elapsedTimer Phase::_t_idealLoop; elapsedTimer Phase::_t_idealLoop;
elapsedTimer Phase::_t_ccp; elapsedTimer Phase::_t_ccp;
elapsedTimer Phase::_t_matcher; elapsedTimer Phase::_t_matcher;
@ -51,6 +52,7 @@ elapsedTimer Phase::_t_output;
elapsedTimer Phase::_t_graphReshaping; elapsedTimer Phase::_t_graphReshaping;
elapsedTimer Phase::_t_scheduler; elapsedTimer Phase::_t_scheduler;
elapsedTimer Phase::_t_blockOrdering; elapsedTimer Phase::_t_blockOrdering;
elapsedTimer Phase::_t_macroEliminate;
elapsedTimer Phase::_t_macroExpand; elapsedTimer Phase::_t_macroExpand;
elapsedTimer Phase::_t_peephole; elapsedTimer Phase::_t_peephole;
elapsedTimer Phase::_t_codeGeneration; elapsedTimer Phase::_t_codeGeneration;
@ -104,6 +106,8 @@ void Phase::print_timers() {
if (DoEscapeAnalysis) { if (DoEscapeAnalysis) {
// EA is part of Optimizer. // EA is part of Optimizer.
tty->print_cr (" escape analysis: %3.3f sec", Phase::_t_escapeAnalysis.seconds()); tty->print_cr (" escape analysis: %3.3f sec", Phase::_t_escapeAnalysis.seconds());
tty->print_cr (" connection graph: %3.3f sec", Phase::_t_connectionGraph.seconds());
tty->print_cr (" macroEliminate : %3.3f sec", Phase::_t_macroEliminate.seconds());
} }
tty->print_cr (" iterGVN : %3.3f sec", Phase::_t_iterGVN.seconds()); tty->print_cr (" iterGVN : %3.3f sec", Phase::_t_iterGVN.seconds());
tty->print_cr (" idealLoop : %3.3f sec", Phase::_t_idealLoop.seconds()); tty->print_cr (" idealLoop : %3.3f sec", Phase::_t_idealLoop.seconds());
@ -112,9 +116,10 @@ void Phase::print_timers() {
tty->print_cr (" iterGVN2 : %3.3f sec", Phase::_t_iterGVN2.seconds()); tty->print_cr (" iterGVN2 : %3.3f sec", Phase::_t_iterGVN2.seconds());
tty->print_cr (" macroExpand : %3.3f sec", Phase::_t_macroExpand.seconds()); tty->print_cr (" macroExpand : %3.3f sec", Phase::_t_macroExpand.seconds());
tty->print_cr (" graphReshape : %3.3f sec", Phase::_t_graphReshaping.seconds()); tty->print_cr (" graphReshape : %3.3f sec", Phase::_t_graphReshaping.seconds());
double optimizer_subtotal = Phase::_t_iterGVN.seconds() + double optimizer_subtotal = Phase::_t_iterGVN.seconds() + Phase::_t_iterGVN2.seconds() +
Phase::_t_escapeAnalysis.seconds() + Phase::_t_macroEliminate.seconds() +
Phase::_t_idealLoop.seconds() + Phase::_t_ccp.seconds() + Phase::_t_idealLoop.seconds() + Phase::_t_ccp.seconds() +
Phase::_t_graphReshaping.seconds(); Phase::_t_macroExpand.seconds() + Phase::_t_graphReshaping.seconds();
double percent_of_optimizer = ((optimizer_subtotal == 0.0) ? 0.0 : (optimizer_subtotal / Phase::_t_optimizer.seconds() * 100.0)); double percent_of_optimizer = ((optimizer_subtotal == 0.0) ? 0.0 : (optimizer_subtotal / Phase::_t_optimizer.seconds() * 100.0));
tty->print_cr (" subtotal : %3.3f sec, %3.2f %%", optimizer_subtotal, percent_of_optimizer); tty->print_cr (" subtotal : %3.3f sec, %3.2f %%", optimizer_subtotal, percent_of_optimizer);
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -72,8 +72,12 @@ protected:
// The next timers used for LogCompilation // The next timers used for LogCompilation
static elapsedTimer _t_parser; static elapsedTimer _t_parser;
static elapsedTimer _t_escapeAnalysis;
static elapsedTimer _t_optimizer; static elapsedTimer _t_optimizer;
public:
// ConnectionGraph can't be Phase since it is used after EA done.
static elapsedTimer _t_escapeAnalysis;
static elapsedTimer _t_connectionGraph;
protected:
static elapsedTimer _t_idealLoop; static elapsedTimer _t_idealLoop;
static elapsedTimer _t_ccp; static elapsedTimer _t_ccp;
static elapsedTimer _t_matcher; static elapsedTimer _t_matcher;
@ -84,6 +88,7 @@ protected:
static elapsedTimer _t_graphReshaping; static elapsedTimer _t_graphReshaping;
static elapsedTimer _t_scheduler; static elapsedTimer _t_scheduler;
static elapsedTimer _t_blockOrdering; static elapsedTimer _t_blockOrdering;
static elapsedTimer _t_macroEliminate;
static elapsedTimer _t_macroExpand; static elapsedTimer _t_macroExpand;
static elapsedTimer _t_peephole; static elapsedTimer _t_peephole;
static elapsedTimer _t_codeGeneration; static elapsedTimer _t_codeGeneration;

View File

@ -816,8 +816,21 @@ bool Arguments::process_argument(const char* arg,
return true; return true;
} }
jio_fprintf(defaultStream::error_stream(), // For locked flags, report a custom error message if available.
"Unrecognized VM option '%s'\n", argname); // Otherwise, report the standard unrecognized VM option.
Flag* locked_flag = Flag::find_flag((char*)argname, strlen(argname), true);
if (locked_flag != NULL) {
char locked_message_buf[BUFLEN];
locked_flag->get_locked_message(locked_message_buf, BUFLEN);
if (strlen(locked_message_buf) == 0) {
jio_fprintf(defaultStream::error_stream(),
"Unrecognized VM option '%s'\n", argname);
} else {
jio_fprintf(defaultStream::error_stream(), "%s", locked_message_buf);
}
}
// allow for commandline "commenting out" options like -XX:#+Verbose // allow for commandline "commenting out" options like -XX:#+Verbose
return arg[0] == '#'; return arg[0] == '#';
} }
@ -2523,15 +2536,6 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args,
// was arrived at by experimenting with specjbb. // was arrived at by experimenting with specjbb.
FLAG_SET_CMDLINE(uintx, OldPLABSize, 8*K); // Note: this is in words FLAG_SET_CMDLINE(uintx, OldPLABSize, 8*K); // Note: this is in words
// CompilationPolicyChoice=0 causes the server compiler to adopt
// a more conservative which-method-do-I-compile policy when one
// of the counters maintained by the interpreter trips. The
// result is reduced startup time and improved specjbb and
// alacrity performance. Zero is the default, but we set it
// explicitly here in case the default changes.
// See runtime/compilationPolicy.*.
FLAG_SET_CMDLINE(intx, CompilationPolicyChoice, 0);
// Enable parallel GC and adaptive generation sizing // Enable parallel GC and adaptive generation sizing
FLAG_SET_CMDLINE(bool, UseParallelGC, true); FLAG_SET_CMDLINE(bool, UseParallelGC, true);
FLAG_SET_DEFAULT(ParallelGCThreads, FLAG_SET_DEFAULT(ParallelGCThreads,

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -81,6 +81,12 @@ bool Flag::is_unlocked() const {
} }
} }
// Get custom message for this locked flag, or return NULL if
// none is available.
void Flag::get_locked_message(char* buf, int buflen) const {
get_locked_message_ext(buf, buflen);
}
bool Flag::is_writeable() const { bool Flag::is_writeable() const {
return strcmp(kind, "{manageable}") == 0 || return strcmp(kind, "{manageable}") == 0 ||
strcmp(kind, "{product rw}") == 0 || strcmp(kind, "{product rw}") == 0 ||
@ -260,17 +266,22 @@ inline bool str_equal(const char* s, char* q, size_t len) {
return strncmp(s, q, len) == 0; return strncmp(s, q, len) == 0;
} }
Flag* Flag::find_flag(char* name, size_t length) { // Search the flag table for a named flag
for (Flag* current = &flagTable[0]; current->name; current++) { Flag* Flag::find_flag(char* name, size_t length, bool allow_locked) {
for (Flag* current = &flagTable[0]; current->name != NULL; current++) {
if (str_equal(current->name, name, length)) { if (str_equal(current->name, name, length)) {
// Found a matching entry. Report locked flags only if allowed.
if (!(current->is_unlocked() || current->is_unlocker())) { if (!(current->is_unlocked() || current->is_unlocker())) {
// disable use of diagnostic or experimental flags until they if (!allow_locked) {
// are explicitly unlocked // disable use of locked flags, e.g. diagnostic, experimental,
return NULL; // commercial... until they are explicitly unlocked
return NULL;
}
} }
return current; return current;
} }
} }
// Flag name is not in the flag table
return NULL; return NULL;
} }

View File

@ -222,7 +222,7 @@ struct Flag {
// number of flags // number of flags
static size_t numFlags; static size_t numFlags;
static Flag* find_flag(char* name, size_t length); static Flag* find_flag(char* name, size_t length, bool allow_locked = false);
bool is_bool() const { return strcmp(type, "bool") == 0; } bool is_bool() const { return strcmp(type, "bool") == 0; }
bool get_bool() const { return *((bool*) addr); } bool get_bool() const { return *((bool*) addr); }
@ -259,6 +259,9 @@ struct Flag {
bool is_writeable_ext() const; bool is_writeable_ext() const;
bool is_external_ext() const; bool is_external_ext() const;
void get_locked_message(char*, int) const;
void get_locked_message_ext(char*, int) const;
void print_on(outputStream* st, bool withComments = false ); void print_on(outputStream* st, bool withComments = false );
void print_as_flag(outputStream* st); void print_as_flag(outputStream* st);
}; };

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2011 Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -61,4 +61,9 @@ inline bool Flag::is_external_ext() const {
return false; return false;
} }
inline void Flag::get_locked_message_ext(char* buf, int buflen) const {
assert(buf != NULL, "Buffer cannot be NULL");
buf[0] = '\0';
}
#endif // SHARE_VM_RUNTIME_GLOBALS_EXT_HPP #endif // SHARE_VM_RUNTIME_GLOBALS_EXT_HPP

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -198,8 +198,11 @@ template<class E> class GrowableArray : public GenericGrowableArray {
return idx; return idx;
} }
void append_if_missing(const E& elem) { bool append_if_missing(const E& elem) {
if (!contains(elem)) append(elem); // Returns TRUE if elem is added.
bool missed = !contains(elem);
if (missed) append(elem);
return missed;
} }
E at(int i) const { E at(int i) const {
@ -292,12 +295,22 @@ template<class E> class GrowableArray : public GenericGrowableArray {
ShouldNotReachHere(); ShouldNotReachHere();
} }
// The order is preserved.
void remove_at(int index) { void remove_at(int index) {
assert(0 <= index && index < _len, "illegal index"); assert(0 <= index && index < _len, "illegal index");
for (int j = index + 1; j < _len; j++) _data[j-1] = _data[j]; for (int j = index + 1; j < _len; j++) _data[j-1] = _data[j];
_len--; _len--;
} }
// The order is changed.
void delete_at(int index) {
assert(0 <= index && index < _len, "illegal index");
if (index < --_len) {
// Replace removed element with last one.
_data[index] = _data[_len];
}
}
// inserts the given element before the element at index i // inserts the given element before the element at index i
void insert_before(const int idx, const E& elem) { void insert_before(const int idx, const E& elem) {
check_nesting(); check_nesting();

View File

@ -152,3 +152,4 @@ dbb7283c197b27da1fc12ae8a83785c851b68c12 jdk8-b26
f3244c1f04864d35c41fa8d13669faf4f65b81e2 jdk8-b28 f3244c1f04864d35c41fa8d13669faf4f65b81e2 jdk8-b28
25099a745e1a43579b6af86b3e052b2e50958753 jdk8-b29 25099a745e1a43579b6af86b3e052b2e50958753 jdk8-b29
3be30c25a8255803652b5c466336055d36e2ba21 jdk8-b30 3be30c25a8255803652b5c466336055d36e2ba21 jdk8-b30
94aabe098916440ae7911866311c9617d8481a36 jdk8-b31

View File

@ -152,3 +152,4 @@ b376d901e006cd9e0c59733c84e190aace23eec6 jdk8-b25
88b85470e72ce48515c802d2158f61cad198b935 jdk8-b28 88b85470e72ce48515c802d2158f61cad198b935 jdk8-b28
4897d9d2d04838e3479745efa238a99bacd939c9 jdk8-b29 4897d9d2d04838e3479745efa238a99bacd939c9 jdk8-b29
6882b10e85d6f6ba110dbb50926d6fe2222cc7ad jdk8-b30 6882b10e85d6f6ba110dbb50926d6fe2222cc7ad jdk8-b30
4c41c6d0e15de3b56919a5ba0a0f248a2d07f2b2 jdk8-b31

View File

@ -152,3 +152,4 @@ c68342532e2e7deb3a25fc04ed3e4c142278f747 jdk8-b27
1e1d41daaded291ab3a370ca6a27f7325701978e jdk8-b28 1e1d41daaded291ab3a370ca6a27f7325701978e jdk8-b28
c5b882dce0fe27e05dc64debc92b1fb9ebf880ec jdk8-b29 c5b882dce0fe27e05dc64debc92b1fb9ebf880ec jdk8-b29
cdbb33303ea344d5e9013e2dd642e7a6e7768db6 jdk8-b30 cdbb33303ea344d5e9013e2dd642e7a6e7768db6 jdk8-b30
27f0c08c427c65fcab6917edf646f59058e59524 jdk8-b31

View File

@ -348,7 +348,13 @@ ifneq ($(PLATFORM), windows)
" Try setting LANG to 'C'. \n" \ " Try setting LANG to 'C'. \n" \
"" >> $(WARNING_FILE) ; \ "" >> $(WARNING_FILE) ; \
fi fi
ifeq ($(PLATFORM), macosx)
@if [ "$(LANG)" = "" ]; then \
$(ECHO) "ERROR: LANG must be set on Mac OS X. Recommended value is \"C\"" >> $(ERROR_FILE) ; \
fi
endif endif
endif
###################################################### ######################################################
# Check the Windows cygwin version # Check the Windows cygwin version

View File

@ -64,7 +64,7 @@ ACTIVE_JSR_PKGS= \
javax.management.* \ javax.management.* \
javax.script \ javax.script \
javax.sql.* \ javax.sql.* \
javax.tools \ javax.tools.* \
javax.xml.* \ javax.xml.* \
org.w3c.* \ org.w3c.* \
org.xml.sax org.xml.sax
@ -218,6 +218,7 @@ CORE_PKGS = \
javax.swing.plaf.nimbus \ javax.swing.plaf.nimbus \
javax.swing.plaf.synth \ javax.swing.plaf.synth \
javax.tools \ javax.tools \
javax.tools.annotation \
javax.transaction \ javax.transaction \
javax.transaction.xa \ javax.transaction.xa \
javax.xml.parsers \ javax.xml.parsers \

View File

@ -159,7 +159,9 @@ ifeq ($(NATIVE_ECC_AVAILABLE), true)
$(PKGDIR)/ECDSASignature.java \ $(PKGDIR)/ECDSASignature.java \
$(PKGDIR)/ECKeyPairGenerator.java $(PKGDIR)/ECKeyPairGenerator.java
JAVAHFLAGS += -Xbootclasspath/p:$(CLASSDESTDIR) JAVAHFLAGS = -bootclasspath \
"$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)"
# #
# C and C++ files # C and C++ files

View File

@ -1,5 +1,5 @@
# #
# Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. # Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # This code is free software; you can redistribute it and/or modify it
@ -149,7 +149,8 @@ OTHER_INCLUDES += \
# Rules # Rules
# #
CLASSDESTDIR = $(TEMPDIR)/classes CLASSDESTDIR = $(TEMPDIR)/classes
JAVAHFLAGS += -Xbootclasspath/p:$(CLASSDESTDIR) JAVAHFLAGS = -bootclasspath \
"$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)"
include $(BUILDDIR)/common/Mapfile-vers.gmk include $(BUILDDIR)/common/Mapfile-vers.gmk

View File

@ -150,7 +150,8 @@ OTHER_INCLUDES += \
# Rules # Rules
# #
CLASSDESTDIR = $(TEMPDIR)/classes CLASSDESTDIR = $(TEMPDIR)/classes
JAVAHFLAGS = -bootclasspath "$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)" JAVAHFLAGS = -bootclasspath \
"$(CLASSDESTDIR)$(CLASSPATH_SEPARATOR)$(CLASSBINDIR)"
include $(BUILDDIR)/common/Mapfile-vers.gmk include $(BUILDDIR)/common/Mapfile-vers.gmk

View File

@ -522,11 +522,6 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
postEvent(targetToAppContext(event.getSource()), event); postEvent(targetToAppContext(event.getSource()), event);
} }
/*
* Returns true if the application (one of its windows) owns keyboard focus.
*/
public abstract boolean isApplicationActive();
// use peer's back buffer to implement non-opaque windows. // use peer's back buffer to implement non-opaque windows.
@Override @Override
public boolean needUpdateWindow() { public boolean needUpdateWindow() {

View File

@ -1067,11 +1067,7 @@ public class LWWindowPeer
return false; return false;
} }
// Cross-app activation requests are not allowed. if (platformWindow.rejectFocusRequest(cause)) {
if (cause != CausedFocusEvent.Cause.MOUSE_EVENT &&
!((LWToolkit)Toolkit.getDefaultToolkit()).isApplicationActive())
{
focusLog.fine("the app is inactive, so the request is rejected");
return false; return false;
} }

View File

@ -27,6 +27,7 @@ package sun.lwawt;
import java.awt.*; import java.awt.*;
import sun.awt.CausedFocusEvent;
import sun.java2d.SurfaceData; import sun.java2d.SurfaceData;
// TODO Is it worth to generify this interface, like that: // TODO Is it worth to generify this interface, like that:
@ -117,6 +118,8 @@ public interface PlatformWindow {
public void updateFocusableWindowState(); public void updateFocusableWindowState();
public boolean rejectFocusRequest(CausedFocusEvent.Cause cause);
public boolean requestWindowFocus(); public boolean requestWindowFocus();
/* /*

View File

@ -38,6 +38,8 @@ import java.awt.event.*;
public class CEmbeddedFrame extends EmbeddedFrame { public class CEmbeddedFrame extends EmbeddedFrame {
private CPlatformResponder responder; private CPlatformResponder responder;
private boolean focused = true;
private boolean parentWindowActive = true;
public CEmbeddedFrame() { public CEmbeddedFrame() {
show(); show();
@ -94,4 +96,31 @@ public class CEmbeddedFrame extends EmbeddedFrame {
public void handleInputEvent(String text) { public void handleInputEvent(String text) {
new RuntimeException("Not implemented"); new RuntimeException("Not implemented");
} }
public void handleFocusEvent(boolean focused) {
this.focused = focused;
updateOverlayWindowActiveState();
}
public void handleWindowFocusEvent(boolean parentWindowActive) {
this.parentWindowActive = parentWindowActive;
updateOverlayWindowActiveState();
}
public boolean isParentWindowActive() {
return parentWindowActive;
}
/*
* May change appearance of contents of window, and generate a
* WINDOW_ACTIVATED event.
*/
private void updateOverlayWindowActiveState() {
final boolean showAsFocused = parentWindowActive && focused;
dispatchEvent(
new FocusEvent(this, showAsFocused ?
FocusEvent.FOCUS_GAINED :
FocusEvent.FOCUS_LOST));
}
} }

View File

@ -33,17 +33,23 @@ import sun.java2d.SurfaceData;
import sun.awt.CGraphicsConfig; import sun.awt.CGraphicsConfig;
import sun.awt.CGraphicsDevice; import sun.awt.CGraphicsDevice;
import sun.awt.CausedFocusEvent;
import java.awt.*; import java.awt.*;
import java.awt.BufferCapabilities.FlipContents; import java.awt.BufferCapabilities.FlipContents;
import sun.util.logging.PlatformLogger;
/* /*
* Provides a lightweight implementation of the EmbeddedFrame. * Provides a lightweight implementation of the EmbeddedFrame.
*/ */
public class CPlatformEmbeddedFrame implements PlatformWindow { public class CPlatformEmbeddedFrame implements PlatformWindow {
private static final PlatformLogger focusLogger = PlatformLogger.getLogger("sun.lwawt.macosx.focus.CPlatformEmbeddedFrame");
private CGLLayer windowLayer; private CGLLayer windowLayer;
private LWWindowPeer peer; private LWWindowPeer peer;
private CEmbeddedFrame target;
private volatile int screenX = 0; private volatile int screenX = 0;
private volatile int screenY = 0; private volatile int screenY = 0;
@ -52,6 +58,7 @@ public class CPlatformEmbeddedFrame implements PlatformWindow {
public void initialize(Window target, final LWWindowPeer peer, PlatformWindow owner) { public void initialize(Window target, final LWWindowPeer peer, PlatformWindow owner) {
this.peer = peer; this.peer = peer;
this.windowLayer = new CGLLayer(peer); this.windowLayer = new CGLLayer(peer);
this.target = (CEmbeddedFrame)target;
} }
@Override @Override
@ -148,6 +155,18 @@ public class CPlatformEmbeddedFrame implements PlatformWindow {
@Override @Override
public void updateFocusableWindowState() {} public void updateFocusableWindowState() {}
@Override
public boolean rejectFocusRequest(CausedFocusEvent.Cause cause) {
// Cross-app activation requests are not allowed.
if (cause != CausedFocusEvent.Cause.MOUSE_EVENT &&
!target.isParentWindowActive())
{
focusLogger.fine("the embedder is inactive, so the request is rejected");
return true;
}
return false;
}
@Override @Override
public boolean requestWindowFocus() { public boolean requestWindowFocus() {
return true; return true;

View File

@ -65,6 +65,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
// Loger to report issues happened during execution but that do not affect functionality // Loger to report issues happened during execution but that do not affect functionality
private static final PlatformLogger logger = PlatformLogger.getLogger("sun.lwawt.macosx.CPlatformWindow"); private static final PlatformLogger logger = PlatformLogger.getLogger("sun.lwawt.macosx.CPlatformWindow");
private static final PlatformLogger focusLogger = PlatformLogger.getLogger("sun.lwawt.macosx.focus.CPlatformWindow");
// for client properties // for client properties
public static final String WINDOW_BRUSH_METAL_LOOK = "apple.awt.brushMetalLook"; public static final String WINDOW_BRUSH_METAL_LOOK = "apple.awt.brushMetalLook";
@ -112,6 +113,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
static final int MINIMIZABLE = 1 << 8; static final int MINIMIZABLE = 1 << 8;
static final int RESIZABLE = 1 << 9; // both a style bit and prop bit static final int RESIZABLE = 1 << 9; // both a style bit and prop bit
static final int NONACTIVATING = 1 << 24;
static final int _STYLE_PROP_BITMASK = DECORATED | TEXTURED | UNIFIED | UTILITY | HUD | SHEET | CLOSEABLE | MINIMIZABLE | RESIZABLE; static final int _STYLE_PROP_BITMASK = DECORATED | TEXTURED | UNIFIED | UTILITY | HUD | SHEET | CLOSEABLE | MINIMIZABLE | RESIZABLE;
@ -127,9 +129,6 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
static final int _METHOD_PROP_BITMASK = RESIZABLE | HAS_SHADOW | ZOOMABLE | ALWAYS_ON_TOP | HIDES_ON_DEACTIVATE | DRAGGABLE_BACKGROUND | DOCUMENT_MODIFIED | FULLSCREENABLE; static final int _METHOD_PROP_BITMASK = RESIZABLE | HAS_SHADOW | ZOOMABLE | ALWAYS_ON_TOP | HIDES_ON_DEACTIVATE | DRAGGABLE_BACKGROUND | DOCUMENT_MODIFIED | FULLSCREENABLE;
// not sure
static final int POPUP = 1 << 14;
// corresponds to callback-based properties // corresponds to callback-based properties
static final int SHOULD_BECOME_KEY = 1 << 12; static final int SHOULD_BECOME_KEY = 1 << 12;
static final int SHOULD_BECOME_MAIN = 1 << 13; static final int SHOULD_BECOME_MAIN = 1 << 13;
@ -264,10 +263,6 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
// defaults style bits // defaults style bits
int styleBits = DECORATED | HAS_SHADOW | CLOSEABLE | MINIMIZABLE | ZOOMABLE | RESIZABLE; int styleBits = DECORATED | HAS_SHADOW | CLOSEABLE | MINIMIZABLE | ZOOMABLE | RESIZABLE;
if (target.getName() == "###overrideRedirect###") {
styleBits = SET(styleBits, POPUP, true);
}
if (isNativelyFocusableWindow()) { if (isNativelyFocusableWindow()) {
styleBits = SET(styleBits, SHOULD_BECOME_KEY, true); styleBits = SET(styleBits, SHOULD_BECOME_KEY, true);
styleBits = SET(styleBits, SHOULD_BECOME_MAIN, true); styleBits = SET(styleBits, SHOULD_BECOME_MAIN, true);
@ -275,6 +270,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
final boolean isFrame = (target instanceof Frame); final boolean isFrame = (target instanceof Frame);
final boolean isDialog = (target instanceof Dialog); final boolean isDialog = (target instanceof Dialog);
final boolean isPopup = (target.getType() == Window.Type.POPUP);
if (isDialog) { if (isDialog) {
styleBits = SET(styleBits, MINIMIZABLE, false); styleBits = SET(styleBits, MINIMIZABLE, false);
} }
@ -304,8 +300,10 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
} }
// If the target is a dialog, popup or tooltip we want it to ignore the brushed metal look. // If the target is a dialog, popup or tooltip we want it to ignore the brushed metal look.
if (!isDialog && IS(styleBits, POPUP)) { if (isPopup) {
styleBits = SET(styleBits, TEXTURED, true); styleBits = SET(styleBits, TEXTURED, true);
// Popups in applets don't activate applet's process
styleBits = SET(styleBits, NONACTIVATING, true);
} }
if (target instanceof javax.swing.RootPaneContainer) { if (target instanceof javax.swing.RootPaneContainer) {
@ -498,12 +496,19 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
// If it ain't blocked, or is being hidden, go regular way // If it ain't blocked, or is being hidden, go regular way
if (visible) { if (visible) {
CWrapper.NSWindow.makeFirstResponder(nsWindowPtr, contentView.getAWTView()); CWrapper.NSWindow.makeFirstResponder(nsWindowPtr, contentView.getAWTView());
boolean isKeyWindow = CWrapper.NSWindow.isKeyWindow(nsWindowPtr);
if (!isKeyWindow) { boolean isPopup = (target.getType() == Window.Type.POPUP);
CWrapper.NSWindow.makeKeyAndOrderFront(nsWindowPtr); if (isPopup) {
// Popups in applets don't activate applet's process
CWrapper.NSWindow.orderFrontRegardless(nsWindowPtr);
} else { } else {
CWrapper.NSWindow.orderFront(nsWindowPtr); CWrapper.NSWindow.orderFront(nsWindowPtr);
} }
boolean isKeyWindow = CWrapper.NSWindow.isKeyWindow(nsWindowPtr);
if (!isKeyWindow) {
CWrapper.NSWindow.makeKeyWindow(nsWindowPtr);
}
} else { } else {
CWrapper.NSWindow.orderOut(nsWindowPtr); CWrapper.NSWindow.orderOut(nsWindowPtr);
} }
@ -599,8 +604,21 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
nativeSetNSWindowMinMax(nsWindowPtr, min.getWidth(), min.getHeight(), max.getWidth(), max.getHeight()); nativeSetNSWindowMinMax(nsWindowPtr, min.getWidth(), min.getHeight(), max.getWidth(), max.getHeight());
} }
@Override
public boolean rejectFocusRequest(CausedFocusEvent.Cause cause) {
// Cross-app activation requests are not allowed.
if (cause != CausedFocusEvent.Cause.MOUSE_EVENT &&
!((LWCToolkit)Toolkit.getDefaultToolkit()).isApplicationActive())
{
focusLogger.fine("the app is inactive, so the request is rejected");
return true;
}
return false;
}
@Override @Override
public boolean requestWindowFocus() { public boolean requestWindowFocus() {
long ptr = getNSWindowPtr(); long ptr = getNSWindowPtr();
if (CWrapper.NSWindow.canBecomeMainWindow(ptr)) { if (CWrapper.NSWindow.canBecomeMainWindow(ptr)) {
CWrapper.NSWindow.makeMainWindow(ptr); CWrapper.NSWindow.makeMainWindow(ptr);
@ -751,6 +769,11 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
* Callbacks from the AWTWindow and AWTView objc classes. * Callbacks from the AWTWindow and AWTView objc classes.
*************************************************************/ *************************************************************/
private void deliverWindowFocusEvent(boolean gained){ private void deliverWindowFocusEvent(boolean gained){
// Fix for 7150349: ingore "gained" notifications when the app is inactive.
if (gained && !((LWCToolkit)Toolkit.getDefaultToolkit()).isApplicationActive()) {
focusLogger.fine("the app is inactive, so the notification is ignored");
return;
}
peer.notifyActivation(gained); peer.notifyActivation(gained);
} }

View File

@ -47,6 +47,7 @@ public final class CWrapper {
public static native void setLevel(long window, int level); public static native void setLevel(long window, int level);
public static native void makeKeyAndOrderFront(long window); public static native void makeKeyAndOrderFront(long window);
public static native void makeKeyWindow(long window);
public static native void makeMainWindow(long window); public static native void makeMainWindow(long window);
public static native boolean canBecomeMainWindow(long window); public static native boolean canBecomeMainWindow(long window);
public static native boolean isKeyWindow(long window); public static native boolean isKeyWindow(long window);

View File

@ -686,7 +686,10 @@ public class LWCToolkit extends LWToolkit {
return sunAwtDisableCALayers.booleanValue(); return sunAwtDisableCALayers.booleanValue();
} }
@Override
/*
* Returns true if the application (one of its windows) owns keyboard focus.
*/
public native boolean isApplicationActive(); public native boolean isApplicationActive();
/************************ /************************

View File

@ -812,7 +812,7 @@ JNF_CLASS_CACHE(jc_CInputMethod, "sun/lwawt/macosx/CInputMethod");
// Unicode value. // Unicode value.
NSUInteger utf8Length = [aString lengthOfBytesUsingEncoding:NSUTF8StringEncoding]; NSUInteger utf8Length = [aString lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
if ([self hasMarkedText] || !fProcessingKeystroke || (utf8Length > 2)) { if ([self hasMarkedText] || !fProcessingKeystroke || (utf8Length > 1)) {
JNIEnv *env = [ThreadUtilities getJNIEnv]; JNIEnv *env = [ThreadUtilities getJNIEnv];
static JNF_MEMBER_CACHE(jm_selectPreviousGlyph, jc_CInputMethod, "selectPreviousGlyph", "()V"); static JNF_MEMBER_CACHE(jm_selectPreviousGlyph, jc_CInputMethod, "selectPreviousGlyph", "()V");

View File

@ -102,11 +102,12 @@ static JNF_CLASS_CACHE(jc_CPlatformWindow, "sun/lwawt/macosx/CPlatformWindow");
type |= NSBorderlessWindowMask; type |= NSBorderlessWindowMask;
} }
if (IS(styleBits, TEXTURED)) type |= NSTexturedBackgroundWindowMask; if (IS(styleBits, TEXTURED)) type |= NSTexturedBackgroundWindowMask;
if (IS(styleBits, UNIFIED)) type |= NSUnifiedTitleAndToolbarWindowMask; if (IS(styleBits, UNIFIED)) type |= NSUnifiedTitleAndToolbarWindowMask;
if (IS(styleBits, UTILITY)) type |= NSUtilityWindowMask; if (IS(styleBits, UTILITY)) type |= NSUtilityWindowMask;
if (IS(styleBits, HUD)) type |= NSHUDWindowMask; if (IS(styleBits, HUD)) type |= NSHUDWindowMask;
if (IS(styleBits, SHEET)) type |= NSDocModalWindowMask; if (IS(styleBits, SHEET)) type |= NSDocModalWindowMask;
if (IS(styleBits, NONACTIVATING)) type |= NSNonactivatingPanelMask;
return type; return type;
} }

View File

@ -74,6 +74,26 @@ JNF_COCOA_ENTER(env);
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
/*
* Class: sun_lwawt_macosx_CWrapper$NSWindow
* Method: makeKeyWindow
* Signature: (J)V
*/
JNIEXPORT void JNICALL
Java_sun_lwawt_macosx_CWrapper_00024NSWindow_makeKeyWindow
(JNIEnv *env, jclass cls, jlong windowPtr)
{
JNF_COCOA_ENTER(env);
NSWindow *window = (NSWindow *)jlong_to_ptr(windowPtr);
[JNFRunLoop performOnMainThread:@selector(makeKeyWindow)
on:window
withObject:nil
waitUntilDone:NO];
JNF_COCOA_EXIT(env);
}
/* /*
* Class: sun_lwawt_macosx_CWrapper$NSWindow * Class: sun_lwawt_macosx_CWrapper$NSWindow
* Method: makeMainWindow * Method: makeMainWindow

View File

@ -401,18 +401,21 @@ JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_LWCToolkit_isCapsLockOn
JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_LWCToolkit_isApplicationActive JNIEXPORT jboolean JNICALL Java_sun_lwawt_macosx_LWCToolkit_isApplicationActive
(JNIEnv *env, jclass clazz) (JNIEnv *env, jclass clazz)
{ {
__block jboolean active = JNI_FALSE; __block jboolean active = JNI_FALSE;
AWT_ASSERT_NOT_APPKIT_THREAD;
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
if ([NSThread isMainThread]) {
active = (jboolean)[NSRunningApplication currentApplication].active;
} else {
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^() { [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^() {
active = (jboolean)[NSRunningApplication currentApplication].active; active = (jboolean)[NSRunningApplication currentApplication].active;
}]; }];
}
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
return active; return active;
} }

View File

@ -31,33 +31,31 @@
#import <JavaRuntimeSupport/JavaRuntimeSupport.h> #import <JavaRuntimeSupport/JavaRuntimeSupport.h>
// returns 10.7 for Lion, 10.6 for SnowLeopard etc. // returns 107 for Lion, 106 for SnowLeopard etc.
double getOSXMajorVersion() { int getOSXMajorVersion() {
char *version = JRSCopyOSVersion(); char *ver = JRSCopyOSVersion();
if (ver == NULL) {
if (version == NULL) return 0.0; return 0;
char temp[32];
strlcpy(temp, version, sizeof(temp));
free(version);
if (strlen(temp) < 3) {
return 0.0;
} }
if (temp[2] != '.') { // Third char must be a '.' int len = strlen(ver);
return 0.0; int v = 0;
// Third char must be a '.'
if (len >= 3 && ver[2] == '.') {
int i;
v = (ver[0] - '0') * 10 + (ver[1] - '0');
for (i = 3; i < len && isdigit(ver[i]); ++i) {
v = v * 10 + (ver[i] - '0');
}
} }
char *ptr = strchr(temp+3, '.'); // remove the second . if one exists. free(ver);
if (ptr != NULL) {
*ptr = 0; return v;
}
return atof(temp);
} }
BOOL isSnowLeopardOrLower() { BOOL isSnowLeopardOrLower() {
return (getOSXMajorVersion() < 10.7); return (getOSXMajorVersion() < 107);
} }

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1997, 2009, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -33,6 +33,7 @@ import java.security.InvalidKeyException;
import java.security.Key; import java.security.Key;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.security.ProviderException;
import java.security.spec.AlgorithmParameterSpec; import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.InvalidKeySpecException; import java.security.spec.InvalidKeySpecException;
import javax.crypto.KeyAgreementSpi; import javax.crypto.KeyAgreementSpi;
@ -234,31 +235,14 @@ extends KeyAgreementSpi {
protected byte[] engineGenerateSecret() protected byte[] engineGenerateSecret()
throws IllegalStateException throws IllegalStateException
{ {
if (generateSecret == false) { int expectedLen = (init_p.bitLength() + 7) >>> 3;
throw new IllegalStateException byte[] result = new byte[expectedLen];
("Key agreement has not been completed yet"); try {
} engineGenerateSecret(result, 0);
} catch (ShortBufferException sbe) {
// Reset the key agreement here (in case anything goes wrong) // should never happen since length are identical
generateSecret = false;
// get the modulus
BigInteger modulus = init_p;
BigInteger tmpResult = y.modPow(x, modulus);
byte[] secret = tmpResult.toByteArray();
/*
* BigInteger.toByteArray will sometimes put a sign byte up front, but
* we NEVER want one.
*/
if ((tmpResult.bitLength() % 8) == 0) {
byte retval[] = new byte[secret.length - 1];
System.arraycopy(secret, 1, retval, 0, retval.length);
return retval;
} else {
return secret;
} }
return result;
} }
/** /**
@ -301,39 +285,51 @@ extends KeyAgreementSpi {
} }
BigInteger modulus = init_p; BigInteger modulus = init_p;
byte[] secret = this.y.modPow(this.x, modulus).toByteArray(); int expectedLen = (modulus.bitLength() + 7) >>> 3;
if ((sharedSecret.length - offset) < expectedLen) {
// BigInteger.toByteArray will sometimes put a sign byte up front, throw new ShortBufferException
// but we NEVER want one.
if ((secret.length << 3) != modulus.bitLength()) {
if ((sharedSecret.length - offset) < (secret.length - 1)) {
throw new ShortBufferException
("Buffer too short for shared secret"); ("Buffer too short for shared secret");
}
System.arraycopy(secret, 1, sharedSecret, offset,
secret.length - 1);
// Reset the key agreement here (not earlier!), so that people
// can recover from ShortBufferException above without losing
// internal state
generateSecret = false;
return secret.length - 1;
} else {
if ((sharedSecret.length - offset) < secret.length) {
throw new ShortBufferException
("Buffer too short to hold shared secret");
}
System.arraycopy(secret, 0, sharedSecret, offset, secret.length);
// Reset the key agreement here (not earlier!), so that people
// can recover from ShortBufferException above without losing
// internal state
generateSecret = false;
return secret.length;
} }
// Reset the key agreement after checking for ShortBufferException
// above, so user can recover w/o losing internal state
generateSecret = false;
/*
* NOTE: BigInteger.toByteArray() returns a byte array containing
* the two's-complement representation of this BigInteger with
* the most significant byte is in the zeroth element. This
* contains the minimum number of bytes required to represent
* this BigInteger, including at least one sign bit whose value
* is always 0.
*
* Keys are always positive, and the above sign bit isn't
* actually used when representing keys. (i.e. key = new
* BigInteger(1, byteArray)) To obtain an array containing
* exactly expectedLen bytes of magnitude, we strip any extra
* leading 0's, or pad with 0's in case of a "short" secret.
*/
byte[] secret = this.y.modPow(this.x, modulus).toByteArray();
if (secret.length == expectedLen) {
System.arraycopy(secret, 0, sharedSecret, offset,
secret.length);
} else {
// Array too short, pad it w/ leading 0s
if (secret.length < expectedLen) {
System.arraycopy(secret, 0, sharedSecret,
offset + (expectedLen - secret.length),
secret.length);
} else {
// Array too long, check and trim off the excess
if ((secret.length == (expectedLen+1)) && secret[0] == 0) {
// ignore the leading sign byte
System.arraycopy(secret, 1, sharedSecret, offset, expectedLen);
} else {
throw new ProviderException("Generated secret is out-of-range");
}
}
}
return expectedLen;
} }
/** /**

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -42,7 +42,7 @@ import javax.management.StandardMBean;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.TreeSet; import java.util.HashSet;
import java.security.AccessController; import java.security.AccessController;
import java.security.Permission; import java.security.Permission;
import java.security.PrivilegedAction; import java.security.PrivilegedAction;
@ -787,7 +787,7 @@ public class ManagementFactory {
getPlatformManagementInterfaces() getPlatformManagementInterfaces()
{ {
Set<Class<? extends PlatformManagedObject>> result = Set<Class<? extends PlatformManagedObject>> result =
new TreeSet<>(); new HashSet<>();
for (PlatformComponent component: PlatformComponent.values()) { for (PlatformComponent component: PlatformComponent.values()) {
result.add(component.getMXBeanInterface()); result.add(component.getMXBeanInterface());
} }

View File

@ -207,6 +207,9 @@ class InMemoryCookieStore implements CookieStore {
public boolean removeAll() { public boolean removeAll() {
lock.lock(); lock.lock();
try { try {
if (cookieJar.isEmpty()) {
return false;
}
cookieJar.clear(); cookieJar.clear();
domainIndex.clear(); domainIndex.clear();
uriIndex.clear(); uriIndex.clear();

View File

@ -34,6 +34,8 @@ import java.io.IOException;
import java.io.Serializable; import java.io.Serializable;
import java.security.AccessController; import java.security.AccessController;
import java.security.PrivilegedAction; import java.security.PrivilegedAction;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.regex.Matcher; import java.util.regex.Matcher;
@ -99,7 +101,7 @@ public final class Currency implements Serializable {
// class data: instance map // class data: instance map
private static HashMap<String, Currency> instances = new HashMap<String, Currency>(7); private static ConcurrentMap<String, Currency> instances = new ConcurrentHashMap<>(7);
private static HashSet<Currency> available; private static HashSet<Currency> available;
@ -284,7 +286,6 @@ public final class Currency implements Serializable {
private static Currency getInstance(String currencyCode, int defaultFractionDigits, private static Currency getInstance(String currencyCode, int defaultFractionDigits,
int numericCode) { int numericCode) {
synchronized (instances) {
// Try to look up the currency code in the instances table. // Try to look up the currency code in the instances table.
// This does the null pointer check as a side effect. // This does the null pointer check as a side effect.
// Also, if there already is an entry, the currencyCode must be valid. // Also, if there already is an entry, the currencyCode must be valid.
@ -322,10 +323,9 @@ public final class Currency implements Serializable {
} }
} }
instance = new Currency(currencyCode, defaultFractionDigits, numericCode); instance = instances.putIfAbsent(currencyCode,
instances.put(currencyCode, instance); new Currency(currencyCode, defaultFractionDigits, numericCode));
return instance; return (instance != null ? instance : instances.get(currencyCode));
}
} }
/** /**

View File

@ -400,6 +400,8 @@ public class Manifest implements Cloneable {
public byte peek() throws IOException { public byte peek() throws IOException {
if (pos == count) if (pos == count)
fill(); fill();
if (pos == count)
return -1; // nothing left in buffer
return buf[pos]; return buf[pos];
} }

View File

@ -252,6 +252,10 @@ public class DefaultListSelectionModel implements ListSelectionModel, Cloneable,
// Updates first and last change indices // Updates first and last change indices
private void markAsDirty(int r) { private void markAsDirty(int r) {
if (r == -1) {
return;
}
firstAdjustedIndex = Math.min(firstAdjustedIndex, r); firstAdjustedIndex = Math.min(firstAdjustedIndex, r);
lastAdjustedIndex = Math.max(lastAdjustedIndex, r); lastAdjustedIndex = Math.max(lastAdjustedIndex, r);
} }
@ -358,16 +362,12 @@ public class DefaultListSelectionModel implements ListSelectionModel, Cloneable,
private void updateLeadAnchorIndices(int anchorIndex, int leadIndex) { private void updateLeadAnchorIndices(int anchorIndex, int leadIndex) {
if (leadAnchorNotificationEnabled) { if (leadAnchorNotificationEnabled) {
if (this.anchorIndex != anchorIndex) { if (this.anchorIndex != anchorIndex) {
if (this.anchorIndex != -1) { // The unassigned state. markAsDirty(this.anchorIndex);
markAsDirty(this.anchorIndex);
}
markAsDirty(anchorIndex); markAsDirty(anchorIndex);
} }
if (this.leadIndex != leadIndex) { if (this.leadIndex != leadIndex) {
if (this.leadIndex != -1) { // The unassigned state. markAsDirty(this.leadIndex);
markAsDirty(this.leadIndex);
}
markAsDirty(leadIndex); markAsDirty(leadIndex);
} }
} }

View File

@ -160,7 +160,7 @@ public class BatchEnvironment extends sun.tools.javac.BatchEnvironment {
} }
/** list of generated source files created in this environment */ /** list of generated source files created in this environment */
private Vector generatedFiles = new Vector(); private Vector<File> generatedFiles = new Vector<>();
/** /**
* Remember a generated source file generated so that it * Remember a generated source file generated so that it
@ -177,9 +177,9 @@ public class BatchEnvironment extends sun.tools.javac.BatchEnvironment {
*/ */
public void deleteGeneratedFiles() { public void deleteGeneratedFiles() {
synchronized(generatedFiles) { synchronized(generatedFiles) {
Enumeration enumeration = generatedFiles.elements(); Enumeration<File> enumeration = generatedFiles.elements();
while (enumeration.hasMoreElements()) { while (enumeration.hasMoreElements()) {
File file = (File) enumeration.nextElement(); File file = enumeration.nextElement();
file.delete(); file.delete();
} }
generatedFiles.removeAllElements(); generatedFiles.removeAllElements();

View File

@ -73,14 +73,15 @@ public class Main implements sun.rmi.rmic.Constants {
File destDir; File destDir;
int flags; int flags;
long tm; long tm;
Vector classes; Vector<String> classes;
boolean nowrite; boolean nowrite;
boolean nocompile; boolean nocompile;
boolean keepGenerated; boolean keepGenerated;
boolean status; boolean status;
String[] generatorArgs; String[] generatorArgs;
Vector generators; Vector<Generator> generators;
Class environmentClass = BatchEnvironment.class; Class<? extends BatchEnvironment> environmentClass =
BatchEnvironment.class;
boolean iiopGeneration = false; boolean iiopGeneration = false;
/** /**
@ -183,7 +184,7 @@ public class Main implements sun.rmi.rmic.Constants {
destDir = null; destDir = null;
flags = F_WARNINGS; flags = F_WARNINGS;
tm = System.currentTimeMillis(); tm = System.currentTimeMillis();
classes = new Vector(); classes = new Vector<>();
nowrite = false; nowrite = false;
nocompile = false; nocompile = false;
keepGenerated = false; keepGenerated = false;
@ -191,7 +192,7 @@ public class Main implements sun.rmi.rmic.Constants {
if (generatorArgs == null) { if (generatorArgs == null) {
return false; return false;
} }
generators = new Vector(); generators = new Vector<>();
// Pre-process command line for @file arguments // Pre-process command line for @file arguments
try { try {
@ -411,7 +412,7 @@ public class Main implements sun.rmi.rmic.Constants {
// Get the environment required by this generator... // Get the environment required by this generator...
Class envClass = BatchEnvironment.class; Class<?> envClass = BatchEnvironment.class;
String env = getString("generator.env." + arg); String env = getString("generator.env." + arg);
if (env != null) { if (env != null) {
try { try {
@ -423,7 +424,7 @@ public class Main implements sun.rmi.rmic.Constants {
// Yes, so switch to the new one... // Yes, so switch to the new one...
environmentClass = envClass; environmentClass = envClass.asSubclass(BatchEnvironment.class);
} else { } else {
@ -495,8 +496,9 @@ public class Main implements sun.rmi.rmic.Constants {
try { try {
Class[] ctorArgTypes = {OutputStream.class,ClassPath.class,Main.class}; Class[] ctorArgTypes = {OutputStream.class,ClassPath.class,Main.class};
Object[] ctorArgs = {out,classPath,this}; Object[] ctorArgs = {out,classPath,this};
Constructor constructor = environmentClass.getConstructor(ctorArgTypes); Constructor<? extends BatchEnvironment> constructor =
result = (BatchEnvironment) constructor.newInstance(ctorArgs); environmentClass.getConstructor(ctorArgTypes);
result = constructor.newInstance(ctorArgs);
result.reset(); result.reset();
} }
catch (Exception e) { catch (Exception e) {
@ -530,7 +532,7 @@ public class Main implements sun.rmi.rmic.Constants {
*/ */
for (int i = classes.size()-1; i >= 0; i-- ) { for (int i = classes.size()-1; i >= 0; i-- ) {
Identifier implClassName = Identifier implClassName =
Identifier.lookup((String)classes.elementAt(i)); Identifier.lookup(classes.elementAt(i));
/* /*
* Fix bugid 4049354: support using '.' as an inner class * Fix bugid 4049354: support using '.' as an inner class
@ -558,7 +560,7 @@ public class Main implements sun.rmi.rmic.Constants {
try { try {
ClassDefinition def = decl.getClassDefinition(env); ClassDefinition def = decl.getClassDefinition(env);
for (int j = 0; j < generators.size(); j++) { for (int j = 0; j < generators.size(); j++) {
Generator gen = (Generator)generators.elementAt(j); Generator gen = generators.elementAt(j);
gen.generate(env, def, destDir); gen.generate(env, def, destDir);
} }
} catch (ClassNotFound ex) { } catch (ClassNotFound ex) {
@ -673,7 +675,7 @@ public class Main implements sun.rmi.rmic.Constants {
do { do {
done = true; done = true;
for (Enumeration e = env.getClasses() ; e.hasMoreElements() ; ) { for (Enumeration<?> e = env.getClasses() ; e.hasMoreElements() ; ) {
ClassDeclaration c = (ClassDeclaration)e.nextElement(); ClassDeclaration c = (ClassDeclaration)e.nextElement();
done = compileClass(c,buf,env); done = compileClass(c,buf,env);
} }
@ -682,7 +684,9 @@ public class Main implements sun.rmi.rmic.Constants {
/* /*
* Compile a single class. * Compile a single class.
* Fallthrough is intentional
*/ */
@SuppressWarnings("fallthrough")
public boolean compileClass (ClassDeclaration c, public boolean compileClass (ClassDeclaration c,
ByteArrayOutputStream buf, ByteArrayOutputStream buf,
BatchEnvironment env) BatchEnvironment env)
@ -879,6 +883,6 @@ public class Main implements sun.rmi.rmic.Constants {
args[1] = (arg1 != null ? arg1.toString() : "null"); args[1] = (arg1 != null ? arg1.toString() : "null");
args[2] = (arg2 != null ? arg2.toString() : "null"); args[2] = (arg2 != null ? arg2.toString() : "null");
return java.text.MessageFormat.format(format, args); return java.text.MessageFormat.format(format, (Object[]) args);
} }
} }

View File

@ -61,7 +61,7 @@ import com.sun.corba.se.impl.util.Utility;
*/ */
public class RMIGenerator implements RMIConstants, Generator { public class RMIGenerator implements RMIConstants, Generator {
private static final Hashtable versionOptions = new Hashtable(); private static final Hashtable<String, Integer> versionOptions = new Hashtable<>();
static { static {
versionOptions.put("-v1.1", new Integer(STUB_VERSION_1_1)); versionOptions.put("-v1.1", new Integer(STUB_VERSION_1_1));
versionOptions.put("-vcompat", new Integer(STUB_VERSION_FAT)); versionOptions.put("-vcompat", new Integer(STUB_VERSION_FAT));
@ -96,7 +96,7 @@ public class RMIGenerator implements RMIConstants, Generator {
return false; return false;
} }
explicitVersion = arg; explicitVersion = arg;
version = ((Integer) versionOptions.get(arg)).intValue(); version = versionOptions.get(arg);
argv[i] = null; argv[i] = null;
} }
} }
@ -519,7 +519,7 @@ public class RMIGenerator implements RMIConstants, Generator {
* follows a previous catch of it or of one of its superclasses. * follows a previous catch of it or of one of its superclasses.
* The following method invocation takes care of these details. * The following method invocation takes care of these details.
*/ */
Vector catchList = computeUniqueCatchList(exceptions); Vector<ClassDefinition> catchList = computeUniqueCatchList(exceptions);
/* /*
* If we need to catch any particular exceptions (i.e. this method * If we need to catch any particular exceptions (i.e. this method
@ -615,10 +615,10 @@ public class RMIGenerator implements RMIConstants, Generator {
* UnexpectedException, and end the try block. * UnexpectedException, and end the try block.
*/ */
if (catchList.size() > 0) { if (catchList.size() > 0) {
for (Enumeration enumeration = catchList.elements(); for (Enumeration<ClassDefinition> enumeration = catchList.elements();
enumeration.hasMoreElements();) enumeration.hasMoreElements();)
{ {
ClassDefinition def = (ClassDefinition) enumeration.nextElement(); ClassDefinition def = enumeration.nextElement();
p.pOlnI("} catch (" + def.getName() + " e) {"); p.pOlnI("} catch (" + def.getName() + " e) {");
p.pln("throw e;"); p.pln("throw e;");
} }
@ -650,8 +650,8 @@ public class RMIGenerator implements RMIConstants, Generator {
* of its superclasses is in the throws clause of the method, indicating * of its superclasses is in the throws clause of the method, indicating
* that no exceptions need to be caught. * that no exceptions need to be caught.
*/ */
private Vector computeUniqueCatchList(ClassDeclaration[] exceptions) { private Vector<ClassDefinition> computeUniqueCatchList(ClassDeclaration[] exceptions) {
Vector uniqueList = new Vector(); // unique exceptions to catch Vector<ClassDefinition> uniqueList = new Vector<>(); // unique exceptions to catch
uniqueList.addElement(defRuntimeException); uniqueList.addElement(defRuntimeException);
uniqueList.addElement(defRemoteException); uniqueList.addElement(defRemoteException);
@ -682,8 +682,7 @@ public class RMIGenerator implements RMIConstants, Generator {
* exceptions that need to be caught: * exceptions that need to be caught:
*/ */
for (int j = 0; j < uniqueList.size();) { for (int j = 0; j < uniqueList.size();) {
ClassDefinition def = ClassDefinition def = uniqueList.elementAt(j);
(ClassDefinition) uniqueList.elementAt(j);
if (def.superClassOf(env, decl)) { if (def.superClassOf(env, decl)) {
/* /*
* If a superclass of this exception is already on * If a superclass of this exception is already on

View File

@ -455,7 +455,7 @@ public class Main {
BatchEnvironment env; BatchEnvironment env;
try { try {
Constructor<? extends BatchEnvironment> cons = Constructor<? extends BatchEnvironment> cons =
batch.envClass.getConstructor(new Class[] { RootDoc.class }); batch.envClass.getConstructor(new Class<?>[] { RootDoc.class });
env = cons.newInstance(rootDoc); env = cons.newInstance(rootDoc);
} catch (NoSuchMethodException e) { } catch (NoSuchMethodException e) {
throw new AssertionError(e); throw new AssertionError(e);

View File

@ -69,7 +69,7 @@ public final class Resources {
format = "missing resource key: key = \"" + key + "\", " + format = "missing resource key: key = \"" + key + "\", " +
"arguments = \"{0}\", \"{1}\", \"{2}\""; "arguments = \"{0}\", \"{1}\", \"{2}\"";
} }
return MessageFormat.format(format, args); return MessageFormat.format(format, (Object[]) args);
} }
/** /**

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -198,8 +198,22 @@ final class P11KeyAgreement extends KeyAgreementSpi {
token.p11.C_GetAttributeValue(session.id(), keyID, attributes); token.p11.C_GetAttributeValue(session.id(), keyID, attributes);
byte[] secret = attributes[0].getByteArray(); byte[] secret = attributes[0].getByteArray();
token.p11.C_DestroyObject(session.id(), keyID); token.p11.C_DestroyObject(session.id(), keyID);
// trim leading 0x00 bytes per JCE convention // Some vendors, e.g. NSS, trim off the leading 0x00 byte(s) from
return P11Util.trimZeroes(secret); // the generated secret. Thus, we need to check the secret length
// and trim/pad it so the returned value has the same length as
// the modulus size
if (secret.length == secretLen) {
return secret;
} else {
if (secret.length > secretLen) {
// Shouldn't happen; but check just in case
throw new ProviderException("generated secret is out-of-range");
}
byte[] newSecret = new byte[secretLen];
System.arraycopy(secret, 0, newSecret, secretLen - secret.length,
secret.length);
return newSecret;
}
} catch (PKCS11Exception e) { } catch (PKCS11Exception e) {
throw new ProviderException("Could not derive key", e); throw new ProviderException("Could not derive key", e);
} finally { } finally {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -96,9 +96,9 @@ getPathName(const char *dir, const char *name) {
/* /*
* Scans the specified directory and its subdirectories to find a * Scans the specified directory and its subdirectories to find a
* zoneinfo file which has the same content as /etc/localtime on Linux * zoneinfo file which has the same content as /etc/localtime on Linux
* or /usr/share/lib/zoneinfo/localtime (most likely a symbolic link) * or /usr/share/lib/zoneinfo/localtime on Solaris given in 'buf'.
* on Solaris given in 'buf'. Returns a zone ID if found, otherwise, * If file is symbolic link, then the contents it points to are in buf.
* NULL is returned. * Returns a zone ID if found, otherwise, NULL is returned.
*/ */
static char * static char *
findZoneinfoFile(char *buf, size_t size, const char *dir) findZoneinfoFile(char *buf, size_t size, const char *dir)
@ -280,21 +280,27 @@ getPlatformTimeZoneID()
tz = getZoneName(linkbuf); tz = getZoneName(linkbuf);
if (tz != NULL) { if (tz != NULL) {
tz = strdup(tz); tz = strdup(tz);
return tz;
} }
return tz;
} }
/* /*
* If it's a regular file, we need to find out the same zoneinfo file * If it's a regular file, we need to find out the same zoneinfo file
* that has been copied as /etc/localtime. * that has been copied as /etc/localtime.
* If initial symbolic link resolution failed, we should treat target
* file as a regular file.
*/ */
if ((fd = open(DEFAULT_ZONEINFO_FILE, O_RDONLY)) == -1) {
return NULL;
}
if (fstat(fd, &statbuf) == -1) {
(void) close(fd);
return NULL;
}
size = (size_t) statbuf.st_size; size = (size_t) statbuf.st_size;
buf = (char *) malloc(size); buf = (char *) malloc(size);
if (buf == NULL) { if (buf == NULL) {
return NULL; (void) close(fd);
}
if ((fd = open(DEFAULT_ZONEINFO_FILE, O_RDONLY)) == -1) {
free((void *) buf);
return NULL; return NULL;
} }

View File

@ -541,6 +541,8 @@ XImage* X11SD_CreateSharedImage(X11SDOps *xsdo,
J2dRlsTraceLn1(J2D_TRACE_ERROR, J2dRlsTraceLn1(J2D_TRACE_ERROR,
"X11SD_SetupSharedSegment shmget has failed: %s", "X11SD_SetupSharedSegment shmget has failed: %s",
strerror(errno)); strerror(errno));
free((void *)shminfo);
XDestroyImage(img);
return NULL; return NULL;
} }
@ -550,6 +552,8 @@ XImage* X11SD_CreateSharedImage(X11SDOps *xsdo,
J2dRlsTraceLn1(J2D_TRACE_ERROR, J2dRlsTraceLn1(J2D_TRACE_ERROR,
"X11SD_SetupSharedSegment shmat has failed: %s", "X11SD_SetupSharedSegment shmat has failed: %s",
strerror(errno)); strerror(errno));
free((void *)shminfo);
XDestroyImage(img);
return NULL; return NULL;
} }
@ -570,6 +574,9 @@ XImage* X11SD_CreateSharedImage(X11SDOps *xsdo,
J2dRlsTraceLn1(J2D_TRACE_ERROR, J2dRlsTraceLn1(J2D_TRACE_ERROR,
"X11SD_SetupSharedSegment XShmAttach has failed: %s", "X11SD_SetupSharedSegment XShmAttach has failed: %s",
strerror(errno)); strerror(errno));
shmdt(shminfo->shmaddr);
free((void *)shminfo);
XDestroyImage(img);
return NULL; return NULL;
} }
@ -1345,13 +1352,10 @@ void X11SD_DisposeXImage(XImage * image) {
#ifdef MITSHM #ifdef MITSHM
if (image->obdata != NULL) { if (image->obdata != NULL) {
X11SD_DropSharedSegment((XShmSegmentInfo*)image->obdata); X11SD_DropSharedSegment((XShmSegmentInfo*)image->obdata);
} else { image->obdata = NULL;
free(image->data);
} }
#else
free(image->data);
#endif /* MITSHM */ #endif /* MITSHM */
XFree(image); XDestroyImage(image);
} }
} }

View File

@ -36,6 +36,7 @@
#include <sys/socket.h> #include <sys/socket.h>
#include "nio_util.h" #include "nio_util.h"
#include <limits.h>
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_sun_nio_ch_DatagramDispatcher_read0(JNIEnv *env, jclass clazz, Java_sun_nio_ch_DatagramDispatcher_read0(JNIEnv *env, jclass clazz,
@ -60,23 +61,14 @@ Java_sun_nio_ch_DatagramDispatcher_readv0(JNIEnv *env, jclass clazz,
ssize_t result = 0; ssize_t result = 0;
struct iovec *iov = (struct iovec *)jlong_to_ptr(address); struct iovec *iov = (struct iovec *)jlong_to_ptr(address);
struct msghdr m; struct msghdr m;
if (len > 16) { if (len > IOV_MAX) {
len = 16; len = IOV_MAX;
} }
m.msg_name = NULL; // initialize the message
m.msg_namelen = 0; memset(&m, 0, sizeof(m));
m.msg_iov = iov; m.msg_iov = iov;
m.msg_iovlen = len; m.msg_iovlen = len;
#ifdef __solaris__
m.msg_accrights = NULL;
m.msg_accrightslen = 0;
#endif
#if defined(__linux__) || defined(_ALLBSD_SOURCE)
m.msg_control = NULL;
m.msg_controllen = 0;
#endif
result = recvmsg(fd, &m, 0); result = recvmsg(fd, &m, 0);
if (result < 0 && errno == ECONNREFUSED) { if (result < 0 && errno == ECONNREFUSED) {
@ -108,23 +100,14 @@ Java_sun_nio_ch_DatagramDispatcher_writev0(JNIEnv *env, jclass clazz,
struct iovec *iov = (struct iovec *)jlong_to_ptr(address); struct iovec *iov = (struct iovec *)jlong_to_ptr(address);
struct msghdr m; struct msghdr m;
ssize_t result = 0; ssize_t result = 0;
if (len > 16) { if (len > IOV_MAX) {
len = 16; len = IOV_MAX;
} }
m.msg_name = NULL; // initialize the message
m.msg_namelen = 0; memset(&m, 0, sizeof(m));
m.msg_iov = iov; m.msg_iov = iov;
m.msg_iovlen = len; m.msg_iovlen = len;
#ifdef __solaris__
m.msg_accrights = NULL;
m.msg_accrightslen = 0;
#endif
#if defined(__linux__) || defined(_ALLBSD_SOURCE)
m.msg_control = NULL;
m.msg_controllen = 0;
#endif
result = sendmsg(fd, &m, 0); result = sendmsg(fd, &m, 0);
if (result < 0 && errno == ECONNREFUSED) { if (result < 0 && errno == ECONNREFUSED) {

View File

@ -30,9 +30,6 @@
#include <stdlib.h> #include <stdlib.h>
#include <dlfcn.h> #include <dlfcn.h>
#ifndef __APPLE__
#include <link.h>
#endif
#ifdef __solaris__ #ifdef __solaris__
#include <strings.h> #include <strings.h>

View File

@ -26,9 +26,6 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <dlfcn.h> #include <dlfcn.h>
#ifndef __APPLE__
#include <link.h>
#endif
#include "NativeFunc.h" #include "NativeFunc.h"
/* standard GSS method names (ordering is from mapfile) */ /* standard GSS method names (ordering is from mapfile) */

View File

@ -28,9 +28,6 @@
#include <string.h> #include <string.h>
#include <dlfcn.h> #include <dlfcn.h>
#ifndef __APPLE__
#include <link.h>
#endif
#include <jni_util.h> #include <jni_util.h>

View File

@ -64,9 +64,6 @@
#include <assert.h> #include <assert.h>
#include <dlfcn.h> #include <dlfcn.h>
#ifndef __APPLE__
#include <link.h>
#endif
#include <jni.h> #include <jni.h>

View File

@ -29,9 +29,6 @@
#include <assert.h> #include <assert.h>
#include <dlfcn.h> #include <dlfcn.h>
#ifndef __APPLE__
#include <link.h>
#endif
#include <winscard.h> #include <winscard.h>

View File

@ -32,9 +32,6 @@
#include <string.h> #include <string.h>
#include <errno.h> #include <errno.h>
#include <dlfcn.h> #include <dlfcn.h>
#ifndef __APPLE__
#include <link.h>
#endif
#include <jvm_md.h> #include <jvm_md.h>
#define NPT_LIBNAME "npt" #define NPT_LIBNAME "npt"

View File

@ -302,6 +302,7 @@ void AwtComponent::Dispose()
delete m_childList; delete m_childList;
DestroyDropTarget(); DestroyDropTarget();
ReleaseDragCapture(0);
if (m_myControlID != 0) { if (m_myControlID != 0) {
AwtComponent* parent = GetParent(); AwtComponent* parent = GetParent();

View File

@ -212,7 +212,7 @@ java/io/File/MaxPathLength.java windows-all
# 7076644 # 7076644
java/io/File/Basic.java windows-all java/io/File/Basic.java windows-all
# Test needs AWT window server, does not work headless # 7145435 - Test needs AWT window server, does not work headless
java/io/Serializable/resolveClass/deserializeButton/run.sh macosx-all java/io/Serializable/resolveClass/deserializeButton/run.sh macosx-all
############################################################################ ############################################################################
@ -225,9 +225,6 @@ java/nio/channels/Selector/Wakeup.java windows-all
# 7052549 # 7052549
java/nio/channels/FileChannel/ReleaseOnCloseDeadlock.java windows-all java/nio/channels/FileChannel/ReleaseOnCloseDeadlock.java windows-all
# 6963118
java/nio/channels/Selector/Wakeup.java windows-all
# 7133499, 7133497 # 7133499, 7133497
java/nio/channels/AsyncCloseAndInterrupt.java macosx-all java/nio/channels/AsyncCloseAndInterrupt.java macosx-all
java/nio/channels/AsynchronousFileChannel/Lock.java macosx-all java/nio/channels/AsynchronousFileChannel/Lock.java macosx-all
@ -259,9 +256,6 @@ java/rmi/registry/readTest/readTest.sh windows-all
# jdk_security # jdk_security
# 7145024
sun/security/ssl/com/sun/net/ssl/internal/ssl/GenSSLConfigs/main.java solaris-all
# 7147060 # 7147060
com/sun/org/apache/xml/internal/security/transforms/ClassLoaderTest.java generic-all com/sun/org/apache/xml/internal/security/transforms/ClassLoaderTest.java generic-all
@ -305,9 +299,6 @@ sun/security/ssl/sanity/interop/ClientJSSEServerJSSE.java generic-all
# 7079203 sun/security/tools/keytool/printssl.sh fails on solaris with timeout # 7079203 sun/security/tools/keytool/printssl.sh fails on solaris with timeout
sun/security/tools/keytool/printssl.sh solaris-all sun/security/tools/keytool/printssl.sh solaris-all
# 7081817
sun/security/provider/certpath/X509CertPath/IllegalCertiticates.java generic-all
# 7041639, Solaris DSA keypair generation bug (Note: jdk_util also affected) # 7041639, Solaris DSA keypair generation bug (Note: jdk_util also affected)
java/security/KeyPairGenerator/SolarisShortDSA.java solaris-all java/security/KeyPairGenerator/SolarisShortDSA.java solaris-all
sun/security/tools/jarsigner/onlymanifest.sh solaris-all sun/security/tools/jarsigner/onlymanifest.sh solaris-all

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1997, 2007, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -23,7 +23,7 @@
/* /*
* @test * @test
* @bug 0000000 * @bug 7146728
* @summary DHKeyAgreement2 * @summary DHKeyAgreement2
* @author Jan Luehe * @author Jan Luehe
*/ */
@ -52,15 +52,12 @@ import sun.misc.HexDumpEncoder;
public class DHKeyAgreement2 { public class DHKeyAgreement2 {
private static final String SUNJCE = "SunJCE";
private DHKeyAgreement2() {} private DHKeyAgreement2() {}
public static void main(String argv[]) throws Exception { public static void main(String argv[]) throws Exception {
String mode = "USE_SKIP_DH_PARAMS"; String mode = "USE_SKIP_DH_PARAMS";
// Add JCE to the list of providers
SunJCE jce = new SunJCE();
Security.addProvider(jce);
DHKeyAgreement2 keyAgree = new DHKeyAgreement2(); DHKeyAgreement2 keyAgree = new DHKeyAgreement2();
if (argv.length > 1) { if (argv.length > 1) {
@ -86,7 +83,7 @@ public class DHKeyAgreement2 {
// Some central authority creates new DH parameters // Some central authority creates new DH parameters
System.err.println("Creating Diffie-Hellman parameters ..."); System.err.println("Creating Diffie-Hellman parameters ...");
AlgorithmParameterGenerator paramGen AlgorithmParameterGenerator paramGen
= AlgorithmParameterGenerator.getInstance("DH"); = AlgorithmParameterGenerator.getInstance("DH", SUNJCE);
paramGen.init(512); paramGen.init(512);
AlgorithmParameters params = paramGen.generateParameters(); AlgorithmParameters params = paramGen.generateParameters();
dhSkipParamSpec = (DHParameterSpec)params.getParameterSpec dhSkipParamSpec = (DHParameterSpec)params.getParameterSpec
@ -103,7 +100,7 @@ public class DHKeyAgreement2 {
* above * above
*/ */
System.err.println("ALICE: Generate DH keypair ..."); System.err.println("ALICE: Generate DH keypair ...");
KeyPairGenerator aliceKpairGen = KeyPairGenerator.getInstance("DH"); KeyPairGenerator aliceKpairGen = KeyPairGenerator.getInstance("DH", SUNJCE);
aliceKpairGen.initialize(dhSkipParamSpec); aliceKpairGen.initialize(dhSkipParamSpec);
KeyPair aliceKpair = aliceKpairGen.generateKeyPair(); KeyPair aliceKpair = aliceKpairGen.generateKeyPair();
System.out.println("Alice DH public key:\n" + System.out.println("Alice DH public key:\n" +
@ -112,14 +109,14 @@ public class DHKeyAgreement2 {
aliceKpair.getPrivate().toString()); aliceKpair.getPrivate().toString());
DHParameterSpec dhParamSpec = DHParameterSpec dhParamSpec =
((DHPublicKey)aliceKpair.getPublic()).getParams(); ((DHPublicKey)aliceKpair.getPublic()).getParams();
AlgorithmParameters algParams = AlgorithmParameters.getInstance("DH"); AlgorithmParameters algParams = AlgorithmParameters.getInstance("DH", SUNJCE);
algParams.init(dhParamSpec); algParams.init(dhParamSpec);
System.out.println("Alice DH parameters:\n" System.out.println("Alice DH parameters:\n"
+ algParams.toString()); + algParams.toString());
// Alice executes Phase1 of her version of the DH protocol // Alice executes Phase1 of her version of the DH protocol
System.err.println("ALICE: Execute PHASE1 ..."); System.err.println("ALICE: Execute PHASE1 ...");
KeyAgreement aliceKeyAgree = KeyAgreement.getInstance("DH"); KeyAgreement aliceKeyAgree = KeyAgreement.getInstance("DH", SUNJCE);
aliceKeyAgree.init(aliceKpair.getPrivate()); aliceKeyAgree.init(aliceKpair.getPrivate());
// Alice encodes her public key, and sends it over to Bob. // Alice encodes her public key, and sends it over to Bob.
@ -130,7 +127,7 @@ public class DHKeyAgreement2 {
* in encoded format. * in encoded format.
* He instantiates a DH public key from the encoded key material. * He instantiates a DH public key from the encoded key material.
*/ */
KeyFactory bobKeyFac = KeyFactory.getInstance("DH"); KeyFactory bobKeyFac = KeyFactory.getInstance("DH", SUNJCE);
X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec
(alicePubKeyEnc); (alicePubKeyEnc);
PublicKey alicePubKey = bobKeyFac.generatePublic(x509KeySpec); PublicKey alicePubKey = bobKeyFac.generatePublic(x509KeySpec);
@ -144,7 +141,7 @@ public class DHKeyAgreement2 {
// Bob creates his own DH key pair // Bob creates his own DH key pair
System.err.println("BOB: Generate DH keypair ..."); System.err.println("BOB: Generate DH keypair ...");
KeyPairGenerator bobKpairGen = KeyPairGenerator.getInstance("DH"); KeyPairGenerator bobKpairGen = KeyPairGenerator.getInstance("DH", SUNJCE);
bobKpairGen.initialize(dhParamSpec); bobKpairGen.initialize(dhParamSpec);
KeyPair bobKpair = bobKpairGen.generateKeyPair(); KeyPair bobKpair = bobKpairGen.generateKeyPair();
System.out.println("Bob DH public key:\n" + System.out.println("Bob DH public key:\n" +
@ -154,7 +151,7 @@ public class DHKeyAgreement2 {
// Bob executes Phase1 of his version of the DH protocol // Bob executes Phase1 of his version of the DH protocol
System.err.println("BOB: Execute PHASE1 ..."); System.err.println("BOB: Execute PHASE1 ...");
KeyAgreement bobKeyAgree = KeyAgreement.getInstance("DH"); KeyAgreement bobKeyAgree = KeyAgreement.getInstance("DH", SUNJCE);
bobKeyAgree.init(bobKpair.getPrivate()); bobKeyAgree.init(bobKpair.getPrivate());
// Bob encodes his public key, and sends it over to Alice. // Bob encodes his public key, and sends it over to Alice.
@ -166,7 +163,7 @@ public class DHKeyAgreement2 {
* Before she can do so, she has to instanticate a DH public key * Before she can do so, she has to instanticate a DH public key
* from Bob's encoded key material. * from Bob's encoded key material.
*/ */
KeyFactory aliceKeyFac = KeyFactory.getInstance("DH"); KeyFactory aliceKeyFac = KeyFactory.getInstance("DH", SUNJCE);
x509KeySpec = new X509EncodedKeySpec(bobPubKeyEnc); x509KeySpec = new X509EncodedKeySpec(bobPubKeyEnc);
PublicKey bobPubKey = aliceKeyFac.generatePublic(x509KeySpec); PublicKey bobPubKey = aliceKeyFac.generatePublic(x509KeySpec);
System.err.println("ALICE: Execute PHASE2 ..."); System.err.println("ALICE: Execute PHASE2 ...");
@ -187,50 +184,33 @@ public class DHKeyAgreement2 {
byte[] aliceSharedSecret = aliceKeyAgree.generateSecret(); byte[] aliceSharedSecret = aliceKeyAgree.generateSecret();
int aliceLen = aliceSharedSecret.length; int aliceLen = aliceSharedSecret.length;
// check if alice's key agreement has been reset afterwards
try {
aliceKeyAgree.generateSecret();
throw new Exception("Error: alice's KeyAgreement not reset");
} catch (IllegalStateException e) {
System.out.println("EXPECTED: " + e.getMessage());
}
byte[] bobSharedSecret = new byte[aliceLen]; byte[] bobSharedSecret = new byte[aliceLen];
int bobLen; int bobLen;
try { try {
// provide output buffer that is too short // provide output buffer that is too short
bobLen = bobKeyAgree.generateSecret(bobSharedSecret, 1); bobLen = bobKeyAgree.generateSecret(bobSharedSecret, 1);
/*
* Gatekeeper's note:
* We should not be getting here, but every so often, we
* get a failure, either a "ShortBufferException" or
* "Key agreement has not been completed yet" in the
* generateSecret(bobSharedSecret, 0) below.
*
* This will help to figure out why we're dropping through
* and not failing.
*/
System.out.println("NIGHTLY: Should *NOT* be here!!!\n" +
"aliceLen = " + aliceLen + "\n" +
"Alice's shared secret");
try {
HexDumpEncoder hd = new HexDumpEncoder();
hd.encodeBuffer(
new ByteArrayInputStream(aliceSharedSecret), System.out);
} catch (IOException e) { }
System.out.println("bobLen = " + bobLen);
try {
HexDumpEncoder hd = new HexDumpEncoder();
hd.encodeBuffer(
new ByteArrayInputStream(bobSharedSecret), System.out);
} catch (IOException e) { }
throw new Exception("Shouldn't be succeeding.");
} catch (ShortBufferException e) { } catch (ShortBufferException e) {
System.out.println("EXPECTED: " + e.getMessage()); System.out.println("EXPECTED: " + e.getMessage());
} }
// retry w/ output buffer of required size
// provide output buffer of required size
bobLen = bobKeyAgree.generateSecret(bobSharedSecret, 0); bobLen = bobKeyAgree.generateSecret(bobSharedSecret, 0);
// check if bob's key agreement has been reset afterwards
try {
bobKeyAgree.generateSecret(bobSharedSecret, 0);
throw new Exception("Error: bob's KeyAgreement not reset");
} catch (IllegalStateException e) {
System.out.println("EXPECTED: " + e.getMessage());
}
System.out.println("Alice secret: " + toHexString(aliceSharedSecret)); System.out.println("Alice secret: " + toHexString(aliceSharedSecret));
System.out.println("Bob secret: " + toHexString(bobSharedSecret)); System.out.println("Bob secret: " + toHexString(bobSharedSecret));

View File

@ -292,7 +292,9 @@ public class EarlyReturnTest extends TestScaffold {
private String[] excludes = { private String[] excludes = {
"javax.*", "javax.*",
"sun.*", "sun.*",
"com.sun.*"}; "com.sun.*",
"com.oracle.*",
"oracle.*"};
static VirtualMachineManager vmm ; static VirtualMachineManager vmm ;
ClassType targetClass; ClassType targetClass;

View File

@ -114,7 +114,8 @@ public class MethodEntryExitEvents extends TestScaffold {
* http://java.sun.com/javase/technologies/core/toolsapis/jpda/ * http://java.sun.com/javase/technologies/core/toolsapis/jpda/
*/ */
private String[] excludes = {"java.*", "javax.*", "sun.*", private String[] excludes = {"java.*", "javax.*", "sun.*",
"com.sun.*"}; "com.sun.*", "com.oracle.*",
"oracle.*"};
MethodEntryExitEvents (String args[]) { MethodEntryExitEvents (String args[]) {
super(args); super(args);

View File

@ -218,7 +218,9 @@ public class MethodExitReturnValuesTest extends TestScaffold {
private String[] excludes = { private String[] excludes = {
"javax.*", "javax.*",
"sun.*", "sun.*",
"com.sun.*"}; "com.sun.*",
"com.oracle.*",
"oracle.*"};
static VirtualMachineManager vmm ; static VirtualMachineManager vmm ;
ClassType targetClass; ClassType targetClass;

View File

@ -0,0 +1,107 @@
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
@test
@bug 7128738
@summary dragged dialog freezes system on dispose
@author Oleg Pekhovskiy: area=awt.toplevel
@library ../../regtesthelpers
@run main WindowDragTest
*/
import java.awt.Frame;
import java.awt.event.InputEvent;
import java.awt.AWTException;
import test.java.awt.regtesthelpers.Util;
import java.awt.Robot;
import java.awt.Point;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class WindowDragTest {
static boolean passed = false;
public static void main(String[] args) {
try {
Robot robot = new Robot();
robot.setAutoDelay(1000);
Frame frame1 = new Frame();
frame1.setBounds(50, 50, 300, 200);
frame1.setVisible(true);
frame1.toFront();
frame1.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// Clicking frame1 succeeded - mouse is not captured
passed = true;
}
});
robot.delay(1000);
Frame frame2 = new Frame();
frame2.setBounds(100, 100, 300, 200);
frame2.setVisible(true);
frame2.toFront();
robot.delay(1000);
Point p = frame2.getLocationOnScreen();
Dimension d = frame2.getSize();
// Move cursor to frame2 title bar to drag
robot.mouseMove(p.x + (int)(d.getWidth() / 2), p.y + (int)frame2.getInsets().top / 2);
Util.waitForIdle(robot);
// Start window dragging
robot.mousePress(InputEvent.BUTTON1_MASK);
Util.waitForIdle(robot);
// Dispose window being dragged
frame2.dispose();
Util.waitForIdle(robot);
// Release mouse button to be able to get MOUSE_CLICKED event on Util.clickOnComp()
robot.mouseRelease(InputEvent.BUTTON1_MASK);
Util.waitForIdle(robot);
// Click frame1 to check whether mouse is not captured by frame2
Util.clickOnComp(frame1, robot);
Util.waitForIdle(robot);
frame1.dispose();
if (passed) {
System.out.println("Test passed.");
}
else {
System.out.println("Test failed.");
throw new RuntimeException("Test failed.");
}
}
catch (AWTException e) {
throw new RuntimeException("AWTException occurred - problem creating robot!");
}
}
}

View File

@ -1,2 +0,0 @@
<!---->
<applet code=Applet.class width=100 height=100></applet>

View File

@ -22,7 +22,6 @@
*/ */
/* @test /* @test
* @clean A B Container ReplacerObjectOutputStream
* @summary Verify that ClassCastException is thrown when deserializing * @summary Verify that ClassCastException is thrown when deserializing
* an object and one of its object fields is incompatibly replaced * an object and one of its object fields is incompatibly replaced
* by either replaceObject/resolveObject. * by either replaceObject/resolveObject.

View File

@ -22,7 +22,6 @@
*/ */
/* @test /* @test
* @clean A SubstituteObjectOutputStream SubstituteObjectInputStream
* @bug 4099013 * @bug 4099013
* @summary Enable substitution of String and Array by ObjectStreams. * @summary Enable substitution of String and Array by ObjectStreams.
*/ */

View File

@ -23,7 +23,6 @@
/* @test /* @test
* @bug 4065313 * @bug 4065313
* @clean A ReplaceWithNull MyObjectOutputStream
* @summary Ensure that it is okay to replace an object with null. * @summary Ensure that it is okay to replace an object with null.
*/ */
import java.io.*; import java.io.*;

View File

@ -22,7 +22,6 @@
*/ */
/* @test /* @test
* @clean A
* @bug 4146453 * @bug 4146453
* @summary Test that regrow of object/handle table of ObjectOutputStream works. * @summary Test that regrow of object/handle table of ObjectOutputStream works.
*/ */

View File

@ -0,0 +1,76 @@
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 7074616
* @summary Basic unit test of the
* ManagementFactory.getPlatformManagementInterfaces() method
* @author Frederic Parain
*
* @run main GetPlatformManagementInterfaces
*/
import java.lang.management.*;
import java.io.IOException;
import java.util.*;
import javax.management.*;
import static java.lang.management.ManagementFactory.*;
public class GetPlatformManagementInterfaces {
private static enum ManagementInterfaces {
CLASS_LOADING_MXBEAN(ClassLoadingMXBean.class),
COMPILATION_MXBEAN(CompilationMXBean.class),
MEMORY_MXBEAN(MemoryMXBean.class),
OPERATING_SYSTEM_MXBEAN(OperatingSystemMXBean.class),
RUNTIME_MXBEAN(RuntimeMXBean.class),
THREAD_MXBEAN(ThreadMXBean.class),
GARBAGE_COLLECTOR_MXBEAN(GarbageCollectorMXBean.class),
MEMORY_MANAGER_MXBEAN(MemoryManagerMXBean.class),
MEMORY_POOL_MXBEAN(MemoryPoolMXBean.class);
private final Class<? extends PlatformManagedObject> managementInterface;
private ManagementInterfaces(Class<? extends PlatformManagedObject> minterface) {
managementInterface = minterface;
}
public Class<? extends PlatformManagedObject> getManagementInterface() {
return managementInterface;
}
};
public static void main(String[] args) {
Set<Class<? extends PlatformManagedObject>> interfaces =
ManagementFactory.getPlatformManagementInterfaces();
for(Class<? extends PlatformManagedObject> pom : interfaces) {
List<? extends PlatformManagedObject> list =
ManagementFactory.getPlatformMXBeans(pom);
}
for(ManagementInterfaces mi : ManagementInterfaces.values()) {
if(!interfaces.contains(mi.getManagementInterface())) {
throw new RuntimeException(mi.getManagementInterface() + " not in ManagementInterfaces set");
}
}
}
}

View File

@ -23,8 +23,9 @@
/* /*
* @test * @test
* @bug 6953455 * @bug 6953455 7045655
* @summary CookieStore.add() cannot handle null URI parameter * @summary CookieStore.add() cannot handle null URI parameter
* and An empty InMemoryCookieStore should not return true for removeAll
*/ */
import java.net.CookieManager; import java.net.CookieManager;
@ -44,6 +45,11 @@ public class NullUriCookieTest {
static void checkCookieNullUri() throws Exception { static void checkCookieNullUri() throws Exception {
//get a cookie store implementation and add a cookie to the store with null URI //get a cookie store implementation and add a cookie to the store with null URI
CookieStore cookieStore = (new CookieManager()).getCookieStore(); CookieStore cookieStore = (new CookieManager()).getCookieStore();
//Check if removeAll() retrurns false on an empty CookieStore
if (cookieStore.removeAll()) {
fail = true;
}
checkFail("removeAll on empty store should return false");
HttpCookie cookie = new HttpCookie("MY_COOKIE", "MY_COOKIE_VALUE"); HttpCookie cookie = new HttpCookie("MY_COOKIE", "MY_COOKIE_VALUE");
cookie.setDomain("foo.com"); cookie.setDomain("foo.com");
cookieStore.add(null, cookie); cookieStore.add(null, cookie);

View File

@ -22,13 +22,14 @@
*/ */
import java.net.*; import java.net.*;
import java.io.*; import java.io.*;
import java.util.HashMap;
public class SocksServer extends Thread { public class SocksServer extends Thread {
// Some useful SOCKS constant // Some useful SOCKS constant
static final int PROTO_VERS4 = 4; static final int PROTO_VERS4 = 4;
static final int PROTO_VERS = 5; static final int PROTO_VERS = 5;
static final int DEFAULT_PORT = 1080; static final int DEFAULT_PORT = 1080;
static final int NO_AUTH = 0; static final int NO_AUTH = 0;
static final int GSSAPI = 1; static final int GSSAPI = 1;
@ -36,28 +37,28 @@ public class SocksServer extends Thread {
static final int NO_METHODS = -1; static final int NO_METHODS = -1;
static final int CONNECT = 1; static final int CONNECT = 1;
static final int BIND = 2; static final int BIND = 2;
static final int UDP_ASSOC = 3; static final int UDP_ASSOC = 3;
static final int IPV4 = 1; static final int IPV4 = 1;
static final int DOMAIN_NAME = 3; static final int DOMAIN_NAME = 3;
static final int IPV6 = 4; static final int IPV6 = 4;
static final int REQUEST_OK = 0; static final int REQUEST_OK = 0;
static final int GENERAL_FAILURE = 1; static final int GENERAL_FAILURE = 1;
static final int NOT_ALLOWED = 2; static final int NOT_ALLOWED = 2;
static final int NET_UNREACHABLE = 3; static final int NET_UNREACHABLE = 3;
static final int HOST_UNREACHABLE = 4; static final int HOST_UNREACHABLE = 4;
static final int CONN_REFUSED = 5; static final int CONN_REFUSED = 5;
static final int TTL_EXPIRED = 6; static final int TTL_EXPIRED = 6;
static final int CMD_NOT_SUPPORTED = 7; static final int CMD_NOT_SUPPORTED = 7;
static final int ADDR_TYPE_NOT_SUP = 8; static final int ADDR_TYPE_NOT_SUP = 8;
private int port; private int port;
private ServerSocket server; private ServerSocket server;
private boolean useV4 = false; private boolean useV4 = false;
private java.util.Hashtable users = new java.util.Hashtable(); private HashMap<String,String> users = new HashMap<>();
private boolean done = false; private volatile boolean done = false;
// Inner class to handle protocol with client // Inner class to handle protocol with client
// This is the bulk of the work (protocol handler) // This is the bulk of the work (protocol handler)
class ClientHandler extends Thread { class ClientHandler extends Thread {
@ -136,7 +137,7 @@ public class SocksServer extends Thread {
System.err.println("User: '" + uname); System.err.println("User: '" + uname);
System.err.println("PSWD: '" + password); System.err.println("PSWD: '" + password);
if (users.containsKey(uname)) { if (users.containsKey(uname)) {
String p1 = (String) users.get(uname); String p1 = users.get(uname);
System.err.println("p1 = " + p1); System.err.println("p1 = " + p1);
if (p1.equals(password)) { if (p1.equals(password)) {
out.write(PROTO_VERS); out.write(PROTO_VERS);
@ -492,7 +493,12 @@ public class SocksServer extends Thread {
public SocksServer(int port) throws IOException { public SocksServer(int port) throws IOException {
this.port = port; this.port = port;
server = new ServerSocket(); server = new ServerSocket();
server.bind(new InetSocketAddress(port)); if (port == 0) {
server.bind(null);
this.port = server.getLocalPort();
} else {
server.bind(new InetSocketAddress(port));
}
} }
public SocksServer() throws IOException { public SocksServer() throws IOException {
@ -503,8 +509,13 @@ public class SocksServer extends Thread {
users.put(user, passwd); users.put(user, passwd);
} }
public synchronized void terminate() { public int getPort() {
return port;
}
public void terminate() {
done = true; done = true;
try { server.close(); } catch (IOException unused) {}
} }
public void run() { public void run() {

View File

@ -26,23 +26,22 @@
* @bug 4727547 * @bug 4727547
* @summary SocksSocketImpl throws NullPointerException * @summary SocksSocketImpl throws NullPointerException
* @build SocksServer * @build SocksServer
* @run main SocksV4Test
*/ */
import java.net.*; import java.net.*;
import java.io.*;
public class SocksV4Test { public class SocksV4Test {
public static void main(String[] args) throws IOException { public static void main(String[] args) throws Exception {
// Create a SOCKS V4 proxy on port 8888 // Create a SOCKS V4 proxy
SocksServer srvr = new SocksServer(8888, true); SocksServer srvr = new SocksServer(0, true);
srvr.start(); srvr.start();
System.setProperty("socksProxyHost", "localhost"); Proxy sp = new Proxy(Proxy.Type.SOCKS,
System.setProperty("socksProxyPort", "8888"); new InetSocketAddress("localhost", srvr.getPort()));
// Let's create an unresolved address // Let's create an unresolved address
InetSocketAddress ad = new InetSocketAddress("doesnt.exist.name", 1234); InetSocketAddress ad = new InetSocketAddress("doesnt.exist.name", 1234);
Socket s = new Socket(); try (Socket s = new Socket(sp)) {
try { s.connect(ad, 10000);
s.connect(ad,10000);
} catch (UnknownHostException ex) { } catch (UnknownHostException ex) {
// OK, that's what we expected // OK, that's what we expected
} catch (NullPointerException npe) { } catch (NullPointerException npe) {
@ -50,7 +49,6 @@ public class SocksV4Test {
throw new RuntimeException("Got a NUllPointerException"); throw new RuntimeException("Got a NUllPointerException");
} finally { } finally {
srvr.terminate(); srvr.terminate();
srvr.interrupt();
} }
} }
} }

View File

@ -28,6 +28,7 @@
* @author Brandon Passanisi * @author Brandon Passanisi
* @library .. * @library ..
* @build CustomOptions PassThroughFileSystem * @build CustomOptions PassThroughFileSystem
* @run main CustomOptions
*/ */
import java.io.IOException; import java.io.IOException;

View File

@ -25,6 +25,7 @@
* @bug 6850113 * @bug 6850113
* @summary Verify the return value of digit() for some digits. * @summary Verify the return value of digit() for some digits.
* @compile -XDignore.symbol.file=true Bug6850113.java * @compile -XDignore.symbol.file=true Bug6850113.java
* @run main Bug6850113
*/ */
import sun.text.normalizer.UCharacter; import sun.text.normalizer.UCharacter;

View File

@ -0,0 +1,301 @@
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 7148584
* @summary Jar tools fails to generate manifest correctly when boundary condition hit
* @compile -XDignore.symbol.file=true CreateManifest.java
* @run main CreateManifest
*/
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.jar.*;
public class CreateManifest {
public static void main(String arg[]) throws Exception {
String jarFileName = "test.jar";
String ManifestName = "MANIFEST.MF";
// create the MANIFEST.MF file
Files.write(Paths.get(ManifestName), FILE_CONTENTS.getBytes());
String [] args = new String [] { "cvfm", jarFileName, ManifestName};
sun.tools.jar.Main jartool =
new sun.tools.jar.Main(System.out, System.err, "jar");
jartool.run(args);
try (JarFile jf = new JarFile(jarFileName)) {
Manifest m = jf.getManifest();
String result = m.getMainAttributes().getValue("Class-path");
if (result == null)
throw new RuntimeException("Failed to add Class-path attribute to manifest");
} finally {
Files.deleteIfExists(Paths.get(jarFileName));
Files.deleteIfExists(Paths.get(ManifestName));
}
}
private static final String FILE_CONTENTS =
"Class-path: \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-testconsole-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-testconsole-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-bmp-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-bmp-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-host-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-host-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-agent-patching-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-agent-patching-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-connector-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-connector-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-discovery-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-gccompliance-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-mos-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-mos-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-security-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-security-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-topology-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-topology-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-event-pojo.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-event-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-event-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-mext-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-mext-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-discovery-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-discovery-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ecm-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ecm-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ecm-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-event-console-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-event-console-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-event-rules-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-event-rules-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-gccompliance-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ip-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ip-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-probanalysis-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-probanalysis-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-swlib-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-installmediacomponent-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-uifwk-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-uifwk-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-discovery-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-gccompliance-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-bmp-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-host-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-agent-patching-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-connector-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-mos-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-event-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-discovery-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-gccompliance-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ip-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-probanalysis-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-testconsole-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-uifwk-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-mext-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-security-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-agentpush-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-agentpush-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-agentpush-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-selfupdate-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-selfupdate-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-selfupdate-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-agentpush-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-groups-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-groups-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-groups-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-topology-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-jobs-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-jobs-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-jobs-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-templ-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-templ-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-templ-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-metricalertserrors-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-metricalertserrors-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-metricalertserrors-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-metrics-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-metrics-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-metrics-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-tc-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-tc-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-tc-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-agentmgmt-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-agentmgmt-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-agentmgmt-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-gcharvester-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-gcharvester-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-gcharvester-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-patching-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-patching-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-patching-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ohinv-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ohinv-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ohinv-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ohagent-pojo.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ohcoherence-pojo.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ohjrockit-pojo.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-extensibility-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-mpcustom-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-selfmonitor-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ocheck-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-udmmig-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-multioms-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-postupgrade-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-postupgrade-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-postupgrade-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ppc-pojo.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ppc-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ppc-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ppc-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ppc-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-mextjmx-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-mextjmx-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-mextjmx-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ocheck-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-services-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-services-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-services-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-eventmobile-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-uifwkmobile-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-logmgmt-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-omsproperties-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-ohel-pojo.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-agentupgrade-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-lm-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-lm-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-core-lm-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-samples-regiontest-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-samples-uipatterns-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-samples-uipatterns-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-samples-uipatterns-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-samples-uielements-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-samples-uielements-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-samples-sandbox-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-samples-sandbox-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-samples-sdkcore-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-samples-sdkcore-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-samples-sdkcore-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-samples-core-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-samples-core-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-samples-core-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-adfext-bc-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-aslm-services-public-pojo.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-avail-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-charge-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-config-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-connect-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-db-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-discovery-public-entity.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-discovery-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-event-console-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-event-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-event-rules-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-extens-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-filebrowser-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-filebrowser-public-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-gccompliance-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-gccompliance-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-gccompliance-public-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-ip-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-job-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-me-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-metric-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-ecm-public-pojo.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-ecm-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-ecm-public-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-ecm-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-paf-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-security-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-swlib-public-pojo.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-swlib-public-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-templ-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-uifwk-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-uifwk-public-pojo.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-uifwk-public-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-bmp-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-bmp-public-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-bmp-public-entity.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-agent-patching-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-agent-patching-public-pojo.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-mext-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-mext-public-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-mext-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-testconsole-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-testconsole-public-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-testconsole-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-mos-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-mos-public-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-mos-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-topology-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-topology-public-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-regions-uimodel.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-regions-public-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-event-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-uifwk-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-adfext-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-agentpatching-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-avail-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-bmp-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-charge-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-config-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-connect-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-db-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-discovery-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-ecm-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-extens-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-gccompliance-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-ip-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-job-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-me-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-metric-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-paf-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-regions-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-security-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-swlib-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-templ-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-groups-public-pojo.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-groups-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-topology-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-resources-public-pojo.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-clonecomponents-public-pojo.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-clonecomponents-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-clonecomponents-public-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-clonecomponents-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-patching-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-patching-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-ohinv-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-ohinv-test.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-ppc-public-pojo.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-ppc-public-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-agentpush-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-uifwkmobile-public-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-lm-public-model.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-lm-public-ui.jar \n" +
" /ade/dtsao_re/oracle/emcore//lib/em-sdkcore-lm-test.jar \n";
}

View File

@ -26,6 +26,7 @@
* @bug 4241676 * @bug 4241676
* @summary getContinuationDirContext() should set CPE environment property. * @summary getContinuationDirContext() should set CPE environment property.
* @build DummyObjectFactory DummyContext * @build DummyObjectFactory DummyContext
* @run main/othervm GetContDirCtx
*/ */
import java.util.Hashtable; import java.util.Hashtable;

View File

@ -0,0 +1,66 @@
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* @test
@bug 7027139
@summary getFirstIndex() does not return the first index that has changed
@author Pavel Porvatov
*/
import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
public class bug7027139 {
public static void main(String[] args) throws Exception {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
JTable orderTable = new JTable(new String[][]{
{"Item 1 1", "Item 1 2"},
{"Item 2 1", "Item 2 2"},
{"Item 3 1", "Item 3 2"},
{"Item 4 1", "Item 4 2"},
},
new String[]{"Col 1", "Col 2"});
ListSelectionModel selectionModel = orderTable.getSelectionModel();
selectionModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
selectionModel.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
if (e.getValueIsAdjusting()) {
return;
}
if (e.getFirstIndex() < 0) {
throw new RuntimeException("Test bug7027139 failed");
}
}
});
orderTable.selectAll();
}
});
System.out.println("Test bug7027139 passed");
}
}

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -27,6 +27,7 @@
* @summary Basic unit test of HotspotClassLoadingMBean.getClassLoadingTime() * @summary Basic unit test of HotspotClassLoadingMBean.getClassLoadingTime()
* @author Steve Bohne * @author Steve Bohne
* @build ClassToLoad0 * @build ClassToLoad0
* @run main GetClassLoadingTime
*/ */
/* /*
@ -71,10 +72,8 @@ public class GetClassLoadingTime {
} }
long time2 = mbean.getClassLoadingTime(); long time2 = mbean.getClassLoadingTime();
long count = mbean.getLoadedClassCount();
if (trace) { if (trace) {
System.out.println("(new count is " + count + ")");
System.out.println("Class loading time2 (ms): " + time2); System.out.println("Class loading time2 (ms): " + time2);
} }
@ -93,8 +92,6 @@ public class GetClassLoadingTime {
// so we can avoid delegation and spend lots of time loading the // so we can avoid delegation and spend lots of time loading the
// same class over and over, to test the class loading timer. // same class over and over, to test the class loading timer.
class KlassLoader extends ClassLoader { class KlassLoader extends ClassLoader {
static String klassDir="";
static int index=0;
public KlassLoader() { public KlassLoader() {
super(null); super(null);
@ -102,14 +99,13 @@ class KlassLoader extends ClassLoader {
protected synchronized Class findClass(String name) protected synchronized Class findClass(String name)
throws ClassNotFoundException { throws ClassNotFoundException {
String cname = klassDir String cname =
+ (klassDir == "" ? "" : "/") name.replace('.', '/')
+name.replace('.', '/')
+".class"; +".class";
FileInputStream in; FileInputStream in;
try { try {
in=new FileInputStream(cname); in = new FileInputStream(new File(System.getProperty("test.classes", "."), cname));
if (in == null) { if (in == null) {
throw new ClassNotFoundException("getResourceAsStream(" throw new ClassNotFoundException("getResourceAsStream("
+cname+")"); +cname+")");

View File

@ -29,6 +29,7 @@
# @summary Ensure that if a cleaner throws an exception then the VM exits # @summary Ensure that if a cleaner throws an exception then the VM exits
# #
# @build ExitOnThrow # @build ExitOnThrow
# @run shell exitOnThrow.sh
# Command-line usage: sh exitOnThrow.sh /path/to/build # Command-line usage: sh exitOnThrow.sh /path/to/build

View File

@ -26,6 +26,7 @@
* @bug 6843578 * @bug 6843578
* @summary Test IBM DB charsets * @summary Test IBM DB charsets
* @build IBM930_OLD IBM933_OLD IBM935_OLD IBM937_OLD IBM939_OLD IBM942_OLD IBM943_OLD IBM948_OLD IBM949_OLD IBM950_OLD IBM970_OLD IBM942C_OLD IBM943C_OLD IBM949C_OLD IBM1381_OLD IBM1383_OLD EUC_CN_OLD EUC_KR_OLD GBK_OLD Johab_OLD MS932_OLD MS936_OLD MS949_OLD MS950_OLD * @build IBM930_OLD IBM933_OLD IBM935_OLD IBM937_OLD IBM939_OLD IBM942_OLD IBM943_OLD IBM948_OLD IBM949_OLD IBM950_OLD IBM970_OLD IBM942C_OLD IBM943C_OLD IBM949C_OLD IBM1381_OLD IBM1383_OLD EUC_CN_OLD EUC_KR_OLD GBK_OLD Johab_OLD MS932_OLD MS936_OLD MS949_OLD MS950_OLD
* @run main TestIBMDB
*/ */
import java.nio.charset.*; import java.nio.charset.*;

Some files were not shown because too many files have changed in this diff Show More