annotate src/cpu/zero/vm/stack_zero.cpp @ 9790:6b515c453646

CompilationTask: print exception of compilation also when we don't exit the VM for example, this is useful for CTW, in order to see on which methods the compiler bails out
author Bernhard Urban <bernhard.urban@jku.at>
date Wed, 22 May 2013 16:28:12 +0200
parents d17bd0b18663
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1383
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
1 /*
3843
d17bd0b18663 7066143: JSR 292: Zero support after regressions from 7009923 and 7009309
twisti
parents: 1972
diff changeset
2 * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
1383
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
3 * Copyright 2010 Red Hat, Inc.
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
5 *
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
6 * This code is free software; you can redistribute it and/or modify it
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
7 * under the terms of the GNU General Public License version 2 only, as
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
8 * published by the Free Software Foundation.
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
9 *
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
10 * This code is distributed in the hope that it will be useful, but WITHOUT
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
13 * version 2 for more details (a copy is included in the LICENSE file that
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
14 * accompanied this code).
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
15 *
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License version
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
17 * 2 along with this work; if not, write to the Free Software Foundation,
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
19 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1511
diff changeset
20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1511
diff changeset
21 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1511
diff changeset
22 * questions.
1383
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
23 *
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
24 */
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
25
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
26 #include "precompiled.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
27 #include "interpreter/interpreterRuntime.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
28 #include "stack_zero.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1552
diff changeset
29 #include "stack_zero.inline.hpp"
1383
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
30
1511
348346af6676 6950178: Zero stack improvements
twisti
parents: 1505
diff changeset
31 int ZeroStack::suggest_size(Thread *thread) const {
348346af6676 6950178: Zero stack improvements
twisti
parents: 1505
diff changeset
32 assert(needs_setup(), "already set up");
348346af6676 6950178: Zero stack improvements
twisti
parents: 1505
diff changeset
33 return align_size_down(abi_stack_available(thread) / 2, wordSize);
348346af6676 6950178: Zero stack improvements
twisti
parents: 1505
diff changeset
34 }
348346af6676 6950178: Zero stack improvements
twisti
parents: 1505
diff changeset
35
1383
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
36 void ZeroStack::handle_overflow(TRAPS) {
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
37 JavaThread *thread = (JavaThread *) THREAD;
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
38
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
39 // Set up the frame anchor if it isn't already
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
40 bool has_last_Java_frame = thread->has_last_Java_frame();
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
41 if (!has_last_Java_frame) {
1505
0c5b3cf3c1f5 6939182: Zero JNI handles fix
twisti
parents: 1383
diff changeset
42 intptr_t *sp = thread->zero_stack()->sp();
1383
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
43 ZeroFrame *frame = thread->top_zero_frame();
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
44 while (frame) {
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
45 if (frame->is_shark_frame())
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
46 break;
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
47
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
48 if (frame->is_interpreter_frame()) {
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
49 interpreterState istate =
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
50 frame->as_interpreter_frame()->interpreter_state();
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
51 if (istate->self_link() == istate)
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
52 break;
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
53 }
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
54
1505
0c5b3cf3c1f5 6939182: Zero JNI handles fix
twisti
parents: 1383
diff changeset
55 sp = ((intptr_t *) frame) + 1;
1383
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
56 frame = frame->next();
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
57 }
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
58
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
59 if (frame == NULL)
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
60 fatal("unrecoverable stack overflow");
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
61
1505
0c5b3cf3c1f5 6939182: Zero JNI handles fix
twisti
parents: 1383
diff changeset
62 thread->set_last_Java_frame(frame, sp);
1383
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
63 }
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
64
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
65 // Throw the exception
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
66 switch (thread->thread_state()) {
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
67 case _thread_in_Java:
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
68 InterpreterRuntime::throw_StackOverflowError(thread);
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
69 break;
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
70
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
71 case _thread_in_vm:
3843
d17bd0b18663 7066143: JSR 292: Zero support after regressions from 7009923 and 7009309
twisti
parents: 1972
diff changeset
72 Exceptions::throw_stack_overflow_exception(thread, __FILE__, __LINE__,
d17bd0b18663 7066143: JSR 292: Zero support after regressions from 7009923 and 7009309
twisti
parents: 1972
diff changeset
73 methodHandle());
1383
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
74 break;
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
75
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
76 default:
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
77 ShouldNotReachHere();
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
78 }
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
79
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
80 // Reset the frame anchor if necessary
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
81 if (!has_last_Java_frame)
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
82 thread->reset_last_Java_frame();
aa9c266de52a 6944473: 6941224 misses new files
twisti
parents:
diff changeset
83 }
1505
0c5b3cf3c1f5 6939182: Zero JNI handles fix
twisti
parents: 1383
diff changeset
84
0c5b3cf3c1f5 6939182: Zero JNI handles fix
twisti
parents: 1383
diff changeset
85 #ifndef PRODUCT
0c5b3cf3c1f5 6939182: Zero JNI handles fix
twisti
parents: 1383
diff changeset
86 void ZeroStack::zap(int c) {
0c5b3cf3c1f5 6939182: Zero JNI handles fix
twisti
parents: 1383
diff changeset
87 memset(_base, c, available_words() * wordSize);
0c5b3cf3c1f5 6939182: Zero JNI handles fix
twisti
parents: 1383
diff changeset
88 }
0c5b3cf3c1f5 6939182: Zero JNI handles fix
twisti
parents: 1383
diff changeset
89 #endif // PRODUCT