35 : _base(NULL), _top(NULL), _sp(NULL) {
36 _shadow_pages_size = JavaThread::stack_shadow_zone_size();
37 }
38
39 int ZeroStack::suggest_size(Thread *thread) const {
40 assert(needs_setup(), "already set up");
41 int abi_available = abi_stack_available(thread);
42 assert(abi_available >= 0, "available abi stack must be >= 0");
43 return align_down(abi_available / 2, wordSize);
44 }
45
46 void ZeroStack::handle_overflow(TRAPS) {
47 JavaThread *thread = (JavaThread *) THREAD;
48
49 // Set up the frame anchor if it isn't already
50 bool has_last_Java_frame = thread->has_last_Java_frame();
51 if (!has_last_Java_frame) {
52 intptr_t *sp = thread->zero_stack()->sp();
53 ZeroFrame *frame = thread->top_zero_frame();
54 while (frame) {
55 if (frame->is_shark_frame())
56 break;
57
58 if (frame->is_interpreter_frame()) {
59 interpreterState istate =
60 frame->as_interpreter_frame()->interpreter_state();
61 if (istate->self_link() == istate)
62 break;
63 }
64
65 sp = ((intptr_t *) frame) + 1;
66 frame = frame->next();
67 }
68
69 if (frame == NULL)
70 fatal("unrecoverable stack overflow");
71
72 thread->set_last_Java_frame(frame, sp);
73 }
74
75 // Throw the exception
76 switch (thread->thread_state()) {
77 case _thread_in_Java:
|
35 : _base(NULL), _top(NULL), _sp(NULL) {
36 _shadow_pages_size = JavaThread::stack_shadow_zone_size();
37 }
38
39 int ZeroStack::suggest_size(Thread *thread) const {
40 assert(needs_setup(), "already set up");
41 int abi_available = abi_stack_available(thread);
42 assert(abi_available >= 0, "available abi stack must be >= 0");
43 return align_down(abi_available / 2, wordSize);
44 }
45
46 void ZeroStack::handle_overflow(TRAPS) {
47 JavaThread *thread = (JavaThread *) THREAD;
48
49 // Set up the frame anchor if it isn't already
50 bool has_last_Java_frame = thread->has_last_Java_frame();
51 if (!has_last_Java_frame) {
52 intptr_t *sp = thread->zero_stack()->sp();
53 ZeroFrame *frame = thread->top_zero_frame();
54 while (frame) {
55 if (frame->is_interpreter_frame()) {
56 interpreterState istate =
57 frame->as_interpreter_frame()->interpreter_state();
58 if (istate->self_link() == istate)
59 break;
60 }
61
62 sp = ((intptr_t *) frame) + 1;
63 frame = frame->next();
64 }
65
66 if (frame == NULL)
67 fatal("unrecoverable stack overflow");
68
69 thread->set_last_Java_frame(frame, sp);
70 }
71
72 // Throw the exception
73 switch (thread->thread_state()) {
74 case _thread_in_Java:
|