Tue, 25 Jan 2011 17:58:19 -0500
7014261: G1: RSet-related failures
Summary: A race between the concurrent cleanup thread and the VM thread while it is processing the "expanded sparse table list" causes both threads to try to free the same sparse table entry and either causes one of the threads to fail or leaves the entry in an inconsistent state. The solution is purge all entries on the expanded list that correspond go regions that are being cleaned up.
Reviewed-by: brutisso, johnc
1 #
2 # Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
3 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 #
5 # This code is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License version 2 only, as
7 # published by the Free Software Foundation.
8 #
9 # This code is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 # version 2 for more details (a copy is included in the LICENSE file that
13 # accompanied this code).
14 #
15 # You should have received a copy of the GNU General Public License version
16 # 2 along with this work; if not, write to the Free Software Foundation,
17 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 #
19 # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 # or visit www.oracle.com if you need additional information or have any
21 # questions.
22 #
23 #
25 # The common definitions for hotspot builds.
27 # Default to verbose build logs (show all compile lines):
28 MAKE_VERBOSE=y
30 # Make macros for install files or preparing targets
31 CD=cd
32 CP=cp
33 ECHO=echo
34 GREP=grep
35 MKDIR=mkdir
36 MV=mv
37 PWD=pwd
38 RM=rm -f
39 SED=sed
40 TAR=tar
41 ZIPEXE=zip
43 define install-file
44 @$(MKDIR) -p $(@D)
45 @$(RM) $@
46 $(CP) $< $@
47 endef
48 define prep-target
49 @$(MKDIR) -p $(@D)
50 @$(RM) $@
51 endef
53 # Directory paths and user name
54 # Unless GAMMADIR is set on the command line, search upward from
55 # the current directory for a parent directory containing "src/share/vm".
56 # If that fails, look for $GAMMADIR in the environment.
57 # When the tree of subdirs is built, this setting is stored in each flags.make.
58 GAMMADIR := $(shell until ([ -d dev ]&&echo $${GAMMADIR:-/GAMMADIR/}) || ([ -d src/share/vm ]&&pwd); do cd ..; done)
59 HS_SRC_DIR=$(GAMMADIR)/src
60 HS_MAKE_DIR=$(GAMMADIR)/make
61 HS_BUILD_DIR=$(GAMMADIR)/build
63 ifeq ($(USER),)
64 USER=$(USERNAME)
65 endif
67 # hotspot version definitions
68 include $(GAMMADIR)/make/hotspot_version
70 # Java versions needed
71 ifeq ($(PREVIOUS_JDK_VERSION),)
72 PREVIOUS_JDK_VERSION=$(JDK_PREVIOUS_VERSION)
73 endif
74 ifeq ($(JDK_MAJOR_VERSION),)
75 JDK_MAJOR_VERSION=$(JDK_MAJOR_VER)
76 endif
77 ifeq ($(JDK_MINOR_VERSION),)
78 JDK_MINOR_VERSION=$(JDK_MINOR_VER)
79 endif
80 ifeq ($(JDK_MICRO_VERSION),)
81 JDK_MICRO_VERSION=$(JDK_MICRO_VER)
82 endif
83 ifeq ($(JDK_MKTG_VERSION),)
84 JDK_MKTG_VERSION=$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION)
85 endif
86 ifeq ($(JDK_VERSION),)
87 JDK_VERSION=$(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION)
88 endif
89 ifeq ($(FULL_VERSION),)
90 FULL_VERSION="$(JDK_VERSION)"
91 endif
93 # FULL_VERSION is only used to define JRE_RELEASE_VERSION which is used
94 # as JRE version in VM -Xinternalversion output.
95 ifndef JRE_RELEASE_VERSION
96 JRE_RELEASE_VERSION=$(FULL_VERSION)
97 endif
99 ifndef HOTSPOT_RELEASE_VERSION
100 HOTSPOT_RELEASE_VERSION=$(HS_MAJOR_VER).$(HS_MINOR_VER)-b$(HS_BUILD_NUMBER)
101 endif
103 ifdef HOTSPOT_BUILD_VERSION
104 # specified in command line
105 else
106 ifdef COOKED_BUILD_NUMBER
107 # JRE build
108 HOTSPOT_BUILD_VERSION=
109 else
110 ifdef USER_RELEASE_SUFFIX
111 HOTSPOT_BUILD_VERSION=internal-$(USER_RELEASE_SUFFIX)
112 else
113 HOTSPOT_BUILD_VERSION=internal
114 endif
115 endif
116 endif
118 # Windows should have OS predefined
119 ifeq ($(OS),)
120 OS := $(shell uname -s)
121 HOST := $(shell uname -n)
122 endif
124 # If not SunOS and not Linux, assume Windows
125 ifneq ($(OS), Linux)
126 ifneq ($(OS), SunOS)
127 OSNAME=windows
128 else
129 OSNAME=solaris
130 endif
131 else
132 OSNAME=linux
133 endif
135 # Determinations of default make arguments and platform specific settings
136 MAKE_ARGS=
138 # ARCH_DATA_MODEL==64 is equivalent to LP64=1
139 ifeq ($(ARCH_DATA_MODEL), 64)
140 ifndef LP64
141 LP64 := 1
142 endif
143 endif
145 # Defaults set for product build
146 EXPORT_SUBDIR=
148 # Change default /java path if requested
149 ifneq ($(ALT_SLASH_JAVA),)
150 SLASH_JAVA=$(ALT_SLASH_JAVA)
151 endif
153 # Default OUTPUTDIR
154 OUTPUTDIR=$(HS_BUILD_DIR)/$(OSNAME)
155 ifneq ($(ALT_OUTPUTDIR),)
156 OUTPUTDIR=$(ALT_OUTPUTDIR)
157 endif
159 # Find latest promoted JDK area
160 JDK_IMPORT_PATH=$(SLASH_JAVA)/re/j2se/$(JDK_VERSION)/promoted/latest/binaries/$(PLATFORM)
161 ifneq ($(ALT_JDK_IMPORT_PATH),)
162 JDK_IMPORT_PATH=$(ALT_JDK_IMPORT_PATH)
163 endif
165 # Find JDK used for javac compiles
166 BOOTDIR=$(SLASH_JAVA)/re/j2se/$(PREVIOUS_JDK_VERSION)/latest/binaries/$(PLATFORM)
167 ifneq ($(ALT_BOOTDIR),)
168 BOOTDIR=$(ALT_BOOTDIR)
169 endif
171 # The platform dependent defs.make defines platform specific variable such
172 # as ARCH, EXPORT_LIST etc. We must place the include here after BOOTDIR is defined.
173 include $(GAMMADIR)/make/$(OSNAME)/makefiles/defs.make
175 # We are trying to put platform specific defintions
176 # files to make/$(OSNAME)/makefiles dictory. However
177 # some definitions are common for both linux and solaris,
178 # so we put them here.
179 ifneq ($(OSNAME),windows)
180 ABS_OUTPUTDIR := $(shell mkdir -p $(OUTPUTDIR); $(CD) $(OUTPUTDIR); $(PWD))
181 ABS_BOOTDIR := $(shell $(CD) $(BOOTDIR); $(PWD))
182 ABS_GAMMADIR := $(shell $(CD) $(GAMMADIR); $(PWD))
183 ABS_OS_MAKEFILE := $(shell $(CD) $(HS_MAKE_DIR)/$(OSNAME); $(PWD))/Makefile
185 # uname, HotSpot source directory, build directory and JDK use different names
186 # for CPU architectures.
187 # ARCH - uname output
188 # SRCARCH - where to find HotSpot cpu and os_cpu source files
189 # BUILDARCH - build directory
190 # LIBARCH - directory name in JDK/JRE
192 # Use uname output for SRCARCH, but deal with platform differences. If ARCH
193 # is not explicitly listed below, it is treated as x86.
194 SRCARCH = $(ARCH/$(filter sparc sparc64 ia64 amd64 x86_64 arm ppc zero,$(ARCH)))
195 ARCH/ = x86
196 ARCH/sparc = sparc
197 ARCH/sparc64= sparc
198 ARCH/ia64 = ia64
199 ARCH/amd64 = x86
200 ARCH/x86_64 = x86
201 ARCH/ppc64 = ppc
202 ARCH/ppc = ppc
203 ARCH/arm = arm
204 ARCH/zero = zero
206 # BUILDARCH is usually the same as SRCARCH, except for sparcv9
207 BUILDARCH = $(SRCARCH)
208 ifeq ($(BUILDARCH), x86)
209 ifdef LP64
210 BUILDARCH = amd64
211 else
212 BUILDARCH = i486
213 endif
214 endif
215 ifeq ($(BUILDARCH), sparc)
216 ifdef LP64
217 BUILDARCH = sparcv9
218 endif
219 endif
221 # LIBARCH is 1:1 mapping from BUILDARCH
222 LIBARCH = $(LIBARCH/$(BUILDARCH))
223 LIBARCH/i486 = i386
224 LIBARCH/amd64 = amd64
225 LIBARCH/sparc = sparc
226 LIBARCH/sparcv9 = sparcv9
227 LIBARCH/ia64 = ia64
228 LIBARCH/ppc64 = ppc
229 LIBARCH/ppc = ppc
230 LIBARCH/arm = arm
231 LIBARCH/zero = $(ZERO_LIBARCH)
233 LP64_ARCH = sparcv9 amd64 ia64 zero
234 endif
236 # Required make macro settings for all platforms
237 MAKE_ARGS += JAVA_HOME=$(ABS_BOOTDIR)
238 MAKE_ARGS += OUTPUTDIR=$(ABS_OUTPUTDIR)
239 MAKE_ARGS += GAMMADIR=$(ABS_GAMMADIR)
240 MAKE_ARGS += MAKE_VERBOSE=$(MAKE_VERBOSE)
241 MAKE_ARGS += HOTSPOT_RELEASE_VERSION=$(HOTSPOT_RELEASE_VERSION)
242 MAKE_ARGS += JRE_RELEASE_VERSION=$(JRE_RELEASE_VERSION)
244 # Pass HOTSPOT_BUILD_VERSION as argument to OS specific Makefile
245 # to overwrite the default definition since OS specific Makefile also
246 # includes this make/defs.make file.
247 MAKE_ARGS += HOTSPOT_BUILD_VERSION=$(HOTSPOT_BUILD_VERSION)
249 # Select name of export directory
250 EXPORT_PATH=$(OUTPUTDIR)/export-$(PLATFORM)$(EXPORT_SUBDIR)
251 ifneq ($(ALT_EXPORT_PATH),)
252 EXPORT_PATH=$(ALT_EXPORT_PATH)
253 endif
255 # Default jdk image if one is created for you with create_jdk
256 JDK_IMAGE_DIR=$(OUTPUTDIR)/jdk-$(PLATFORM)
258 # Various export sub directories
259 EXPORT_INCLUDE_DIR = $(EXPORT_PATH)/include
260 EXPORT_DOCS_DIR = $(EXPORT_PATH)/docs
261 EXPORT_LIB_DIR = $(EXPORT_PATH)/lib
262 EXPORT_JRE_DIR = $(EXPORT_PATH)/jre
263 EXPORT_JRE_BIN_DIR = $(EXPORT_JRE_DIR)/bin
264 EXPORT_JRE_LIB_DIR = $(EXPORT_JRE_DIR)/lib
265 EXPORT_JRE_LIB_ARCH_DIR = $(EXPORT_JRE_LIB_DIR)/$(LIBARCH)
267 # Common export list of files
268 EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/jvmti.h
269 EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/jvmticmlr.h
270 EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/jni.h
271 EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/$(JDK_INCLUDE_SUBDIR)/jni_md.h
272 EXPORT_LIST += $(EXPORT_INCLUDE_DIR)/jmm.h