Mon, 12 Nov 2012 14:03:53 -0800
6830717: replay of compilations would help with debugging
Summary: When java process crashed in compiler thread, repeat the compilation process will help finding root cause. This is done with using SA dump application class data and replay data from core dump, then use debug version of jvm to recompile the problematic java method.
Reviewed-by: kvn, twisti, sspitsyn
Contributed-by: yumin.qi@oracle.com
1 #
2 # Copyright (c) 2000, 2012, 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 # This guards against adding broken .java files to the directory
26 # hierarchy, but may be a pain to keep in sync
28 # Generated using the build-pkglist script
29 ifeq "x$(GAMMADIR)" "x"
30 include ../../make/defs.make
31 else
32 include $(GAMMADIR)/make/defs.make
33 endif
35 ifeq "x$(HOTSPOT_BUILD_VERSION)" "x"
36 SA_BUILD_VERSION=$(HOTSPOT_RELEASE_VERSION)
37 else
38 SA_BUILD_VERSION=$(HOTSPOT_RELEASE_VERSION)-$(HOTSPOT_BUILD_VERSION)
39 endif
41 PKGLIST = \
42 sun.jvm.hotspot \
43 sun.jvm.hotspot.asm \
44 sun.jvm.hotspot.asm.sparc \
45 sun.jvm.hotspot.bugspot \
46 sun.jvm.hotspot.bugspot.tree \
47 sun.jvm.hotspot.c1 \
48 sun.jvm.hotspot.ci \
49 sun.jvm.hotspot.code \
50 sun.jvm.hotspot.compiler \
51 sun.jvm.hotspot.debugger \
52 sun.jvm.hotspot.debugger.amd64 \
53 sun.jvm.hotspot.debugger.bsd \
54 sun.jvm.hotspot.debugger.bsd.amd64 \
55 sun.jvm.hotspot.debugger.bsd.x86 \
56 sun.jvm.hotspot.debugger.cdbg \
57 sun.jvm.hotspot.debugger.cdbg.basic \
58 sun.jvm.hotspot.debugger.cdbg.basic.amd64 \
59 sun.jvm.hotspot.debugger.cdbg.basic.x86 \
60 sun.jvm.hotspot.debugger.dummy \
61 sun.jvm.hotspot.debugger.linux \
62 sun.jvm.hotspot.debugger.linux.amd64 \
63 sun.jvm.hotspot.debugger.linux.x86 \
64 sun.jvm.hotspot.debugger.posix \
65 sun.jvm.hotspot.debugger.posix.elf \
66 sun.jvm.hotspot.debugger.proc \
67 sun.jvm.hotspot.debugger.proc.amd64 \
68 sun.jvm.hotspot.debugger.proc.sparc \
69 sun.jvm.hotspot.debugger.proc.x86 \
70 sun.jvm.hotspot.debugger.remote \
71 sun.jvm.hotspot.debugger.remote.amd64 \
72 sun.jvm.hotspot.debugger.remote.sparc \
73 sun.jvm.hotspot.debugger.remote.x86 \
74 sun.jvm.hotspot.debugger.sparc \
75 sun.jvm.hotspot.debugger.win32.coff \
76 sun.jvm.hotspot.debugger.windbg \
77 sun.jvm.hotspot.debugger.windbg.amd64 \
78 sun.jvm.hotspot.debugger.windbg.x86 \
79 sun.jvm.hotspot.debugger.x86 \
80 sun.jvm.hotspot.gc_implementation \
81 sun.jvm.hotspot.gc_implementation.g1 \
82 sun.jvm.hotspot.gc_implementation.parallelScavenge \
83 sun.jvm.hotspot.gc_implementation.shared \
84 sun.jvm.hotspot.gc_interface \
85 sun.jvm.hotspot.interpreter \
86 sun.jvm.hotspot.jdi \
87 sun.jvm.hotspot.livejvm \
88 sun.jvm.hotspot.memory \
89 sun.jvm.hotspot.opto \
90 sun.jvm.hotspot.oops \
91 sun.jvm.hotspot.prims \
92 sun.jvm.hotspot.runtime \
93 sun.jvm.hotspot.runtime.amd64 \
94 sun.jvm.hotspot.runtime.bsd \
95 sun.jvm.hotspot.runtime.bsd_amd64 \
96 sun.jvm.hotspot.runtime.bsd_x86 \
97 sun.jvm.hotspot.runtime.linux \
98 sun.jvm.hotspot.runtime.linux_amd64 \
99 sun.jvm.hotspot.runtime.linux_sparc \
100 sun.jvm.hotspot.runtime.linux_x86 \
101 sun.jvm.hotspot.runtime.posix \
102 sun.jvm.hotspot.runtime.solaris_amd64 \
103 sun.jvm.hotspot.runtime.solaris_sparc \
104 sun.jvm.hotspot.runtime.solaris_x86 \
105 sun.jvm.hotspot.runtime.sparc \
106 sun.jvm.hotspot.runtime.win32_amd64 \
107 sun.jvm.hotspot.runtime.win32_x86 \
108 sun.jvm.hotspot.runtime.x86 \
109 sun.jvm.hotspot.tools \
110 sun.jvm.hotspot.tools.jcore \
111 sun.jvm.hotspot.tools.soql \
112 sun.jvm.hotspot.types \
113 sun.jvm.hotspot.types.basic \
114 sun.jvm.hotspot.ui \
115 sun.jvm.hotspot.ui.action \
116 sun.jvm.hotspot.ui.classbrowser \
117 sun.jvm.hotspot.ui.resources \
118 sun.jvm.hotspot.ui.table \
119 sun.jvm.hotspot.ui.tree \
120 sun.jvm.hotspot.ui.treetable \
121 sun.jvm.hotspot.utilities \
122 sun.jvm.hotspot.utilities.memo \
123 sun.jvm.hotspot.utilities.soql \
124 com.sun.java.swing.action \
125 com.sun.java.swing.ui
126 #END PKGLIST
128 # Generated using the build-filelist script
129 FILELIST = \
130 sun/jvm/hotspot/*.java \
131 sun/jvm/hotspot/asm/*.java \
132 sun/jvm/hotspot/asm/sparc/*.java \
133 sun/jvm/hotspot/bugspot/*.java \
134 sun/jvm/hotspot/bugspot/tree/*.java \
135 sun/jvm/hotspot/c1/*.java \
136 sun/jvm/hotspot/ci/*.java \
137 sun/jvm/hotspot/code/*.java \
138 sun/jvm/hotspot/compiler/*.java \
139 sun/jvm/hotspot/debugger/*.java \
140 sun/jvm/hotspot/debugger/amd64/*.java \
141 sun/jvm/hotspot/debugger/bsd/*.java \
142 sun/jvm/hotspot/debugger/bsd/amd64/*.java \
143 sun/jvm/hotspot/debugger/bsd/x86/*.java \
144 sun/jvm/hotspot/debugger/cdbg/*.java \
145 sun/jvm/hotspot/debugger/cdbg/basic/*.java \
146 sun/jvm/hotspot/debugger/cdbg/basic/amd64/*.java \
147 sun/jvm/hotspot/debugger/cdbg/basic/x86/*.java \
148 sun/jvm/hotspot/debugger/dummy/*.java \
149 sun/jvm/hotspot/debugger/linux/*.java \
150 sun/jvm/hotspot/debugger/linux/x86/*.java \
151 sun/jvm/hotspot/debugger/posix/*.java \
152 sun/jvm/hotspot/debugger/posix/elf/*.java \
153 sun/jvm/hotspot/debugger/proc/*.java \
154 sun/jvm/hotspot/debugger/proc/amd64/*.java \
155 sun/jvm/hotspot/debugger/proc/sparc/*.java \
156 sun/jvm/hotspot/debugger/proc/x86/*.java \
157 sun/jvm/hotspot/debugger/remote/*.java \
158 sun/jvm/hotspot/debugger/remote/amd64/*.java \
159 sun/jvm/hotspot/debugger/remote/sparc/*.java \
160 sun/jvm/hotspot/debugger/remote/x86/*.java \
161 sun/jvm/hotspot/debugger/sparc/*.java \
162 sun/jvm/hotspot/debugger/win32/coff/*.java \
163 sun/jvm/hotspot/debugger/windbg/*.java \
164 sun/jvm/hotspot/debugger/windbg/x86/*.java \
165 sun/jvm/hotspot/debugger/x86/*.java \
166 sun/jvm/hotspot/gc_implementation/g1/*.java \
167 sun/jvm/hotspot/gc_implementation/parallelScavenge/*.java \
168 sun/jvm/hotspot/gc_implementation/shared/*.java \
169 sun/jvm/hotspot/interpreter/*.java \
170 sun/jvm/hotspot/jdi/*.java \
171 sun/jvm/hotspot/livejvm/*.java \
172 sun/jvm/hotspot/memory/*.java \
173 sun/jvm/hotspot/oops/*.java \
174 sun/jvm/hotspot/opto/*.java \
175 sun/jvm/hotspot/prims/*.java \
176 sun/jvm/hotspot/runtime/*.java \
177 sun/jvm/hotspot/runtime/amd64/*.java \
178 sun/jvm/hotspot/runtime/bsd/*.java \
179 sun/jvm/hotspot/runtime/bsd_amd64/*.java \
180 sun/jvm/hotspot/runtime/bsd_x86/*.java \
181 sun/jvm/hotspot/runtime/linux/*.java \
182 sun/jvm/hotspot/runtime/linux_amd64/*.java \
183 sun/jvm/hotspot/runtime/linux_sparc/*.java \
184 sun/jvm/hotspot/runtime/linux_x86/*.java \
185 sun/jvm/hotspot/runtime/posix/*.java \
186 sun/jvm/hotspot/runtime/solaris_amd64/*.java \
187 sun/jvm/hotspot/runtime/solaris_sparc/*.java \
188 sun/jvm/hotspot/runtime/solaris_x86/*.java \
189 sun/jvm/hotspot/runtime/sparc/*.java \
190 sun/jvm/hotspot/runtime/win32_amd64/*.java \
191 sun/jvm/hotspot/runtime/win32_x86/*.java \
192 sun/jvm/hotspot/runtime/x86/*.java \
193 sun/jvm/hotspot/tools/*.java \
194 sun/jvm/hotspot/tools/jcore/*.java \
195 sun/jvm/hotspot/tools/soql/*.java \
196 sun/jvm/hotspot/types/*.java \
197 sun/jvm/hotspot/types/basic/*.java \
198 sun/jvm/hotspot/ui/*.java \
199 sun/jvm/hotspot/ui/action/*.java \
200 sun/jvm/hotspot/ui/classbrowser/*.java \
201 sun/jvm/hotspot/ui/table/*.java \
202 sun/jvm/hotspot/ui/tree/*.java \
203 sun/jvm/hotspot/ui/treetable/*.java \
204 sun/jvm/hotspot/utilities/*.java \
205 sun/jvm/hotspot/utilities/memo/*.java \
206 sun/jvm/hotspot/utilities/soql/*.java \
207 com/sun/java/swing/action/*.java \
208 com/sun/java/swing/ui/*.java
209 #END FILELIST
211 ifneq "x$(ALT_BOOTDIR)" "x"
212 BOOTDIR := $(ALT_BOOTDIR)
213 endif
215 ifeq "x$(BOOTDIR)" "x"
216 JDK_HOME := $(shell dirname $(shell which java))/..
217 else
218 JDK_HOME := $(BOOTDIR)
219 endif
221 isUnix := $(shell test -r c:/; echo $$?)
223 ifeq "$(isUnix)" "1"
224 CPS := :
225 else
226 CPS := ";"
227 endif
229 SRC_DIR = ../src/share/classes
230 BUILD_DIR = ../build
231 OUTPUT_DIR = $(BUILD_DIR)/classes
232 DOC_DIR = $(BUILD_DIR)/doc
234 # gnumake 3.78.1 does not accept the *s,
235 # so use the shell to expand them
236 ALLFILES := $(patsubst %,$(SRC_DIR)/%,$(FILELIST))
237 ALLFILES := $(shell /bin/ls $(ALLFILES))
239 # tools.jar is used by the sa-jdi binding
240 CLASSPATH = $(JDK_HOME)/lib/tools.jar
242 CLASSPATH := $(subst \,/,$(CLASSPATH))
244 # FIXME: autogenerate call to rmic
246 SA_BUILD_VERSION_PROP = "sun.jvm.hotspot.runtime.VM.saBuildVersion=$(SA_BUILD_VERSION)"
248 SA_PROPERTIES = $(OUTPUT_DIR)/sa.properties
249 JAVAC = $(JDK_HOME)/bin/javac
250 JAVA = $(JDK_HOME)/bin/java
251 JAVADOC = $(JDK_HOME)/bin/javadoc
252 RMIC = $(JDK_HOME)/bin/rmic
254 # Tagging it on because there's no reason not to run it
255 all: filelist
256 @mkdir -p $(OUTPUT_DIR)
257 @echo "$(SA_BUILD_VERSION_PROP)" > $(SA_PROPERTIES)
258 $(JAVAC) -classpath $(CLASSPATH) -deprecation -sourcepath $(SRC_DIR) -g -d $(OUTPUT_DIR) @filelist
259 $(RMIC) -classpath $(OUTPUT_DIR) -d $(OUTPUT_DIR) sun.jvm.hotspot.debugger.remote.RemoteDebuggerServer
260 rm -f $(OUTPUT_DIR)/sun/jvm/hotspot/utilities/soql/sa.js
261 cp $(SRC_DIR)/sun/jvm/hotspot/utilities/soql/sa.js $(OUTPUT_DIR)/sun/jvm/hotspot/utilities/soql
262 mkdir -p $(OUTPUT_DIR)/sun/jvm/hotspot/ui/resources
263 rm -f $(OUTPUT_DIR)/sun/jvm/hotspot/ui/resources/*
264 cp $(SRC_DIR)/sun/jvm/hotspot/ui/resources/*.png $(OUTPUT_DIR)/sun/jvm/hotspot/ui/resources/
265 cp -r $(SRC_DIR)/images/* $(OUTPUT_DIR)/
267 allprof: filelist
268 @mkdir -p $(OUTPUT_DIR)
269 @echo "$(SA_BUILD_VERSION_PROP)" > $(SA_PROPERTIES)
270 $(JAVAC) -J-Xprof -classpath $(CLASSPATH) -deprecation -sourcepath $(SRC_DIR) -g -d $(OUTPUT_DIR) @filelist
271 $(RMIC) -classpath $(OUTPUT_DIR) -d $(OUTPUT_DIR) sun.jvm.hotspot.debugger.remote.RemoteDebuggerServer
272 rm -f $(OUTPUT_DIR)/sun/jvm/hotspot/utilities/soql/sa.js
273 cp $(SRC_DIR)/sun/jvm/hotspot/utilities/soql/sa.js $(OUTPUT_DIR)/sun/jvm/hotspot/utilities/soql
274 mkdir -p $(OUTPUT_DIR)/sun/jvm/hotspot/ui/resources
275 rm -f $(OUTPUT_DIR)/sun/jvm/hotspot/ui/resources/*
276 cp $(SRC_DIR)/sun/jvm/hotspot/ui/resources/*.png $(OUTPUT_DIR)/sun/jvm/hotspot/ui/resources/
277 cp -r $(SRC_DIR)/images/* $(OUTPUT_DIR)/
279 .PHONY: filelist
280 filelist: $(ALLFILES)
281 @if [ ! -f $(JDK_HOME)/lib/tools.jar ] ; then \
282 echo "Missing $(JDK_HOME)/lib/tools.jar file. Use 1.6.0 or later version jdk to build SA."; \
283 echo ""; \
284 exit 1; \
285 fi
286 @rm -f $@
287 @echo $(ALLFILES) > $@
289 .PHONY: natives
290 natives:
291 cd ../src/os/`$(JAVA) -classpath $(OUTPUT_DIR) sun.jvm.hotspot.utilities.PlatformInfo`; $(MAKE) all
293 .PHONY: sa-jdi.jar
294 sa-jdi.jar:
295 echo "sa-jdi.jar is built by a hotspot build."
297 docs:
298 @$(JAVADOC) -private -classpath $(CLASSPATH) -sourcepath $(SRC_DIR) -d $(DOC_DIR) $(PKGLIST)
300 sizes: $(ALLFILES)
301 wc -l $(ALLFILES)
303 cscope: $(ALLFILES)
304 rm -f java.files
305 echo $(ALLFILES) > java.files
306 cscope -b -i java.files -f java.out
307 rm -f java.files
309 .PHONY: sa.jar
310 sa.jar:
311 rm -f $(BUILD_DIR)/sa.jar
312 cd $(OUTPUT_DIR) ; jar cvf ../sa.jar *
314 clean::
315 rm -rf filelist
316 cd ../src/os/`$(JAVA) -classpath $(OUTPUT_DIR) sun.jvm.hotspot.utilities.PlatformInfo`; $(MAKE) clean
317 rm -rf $(BUILD_DIR)/*