Mercurial > hg > truffle
comparison src/share/vm/runtime/sharedRuntime.cpp @ 17980:0bf37f737702
8032410: compiler/uncommontrap/TestStackBangRbp.java times out on Solaris-Sparc V9
Summary: make compiled code bang the stack by the worst case size of the interpreter frame at deoptimization points.
Reviewed-by: twisti, kvn
author | roland |
---|---|
date | Tue, 01 Apr 2014 09:36:49 +0200 |
parents | 78bbf4d43a14 |
children | 52b4284cb496 07e01043ade7 |
comparison
equal
deleted
inserted
replaced
17978:ad51f24671c2 | 17980:0bf37f737702 |
---|---|
783 case STACK_OVERFLOW: { | 783 case STACK_OVERFLOW: { |
784 // Stack overflow only occurs upon frame setup; the callee is | 784 // Stack overflow only occurs upon frame setup; the callee is |
785 // going to be unwound. Dispatch to a shared runtime stub | 785 // going to be unwound. Dispatch to a shared runtime stub |
786 // which will cause the StackOverflowError to be fabricated | 786 // which will cause the StackOverflowError to be fabricated |
787 // and processed. | 787 // and processed. |
788 // For stack overflow in deoptimization blob, cleanup thread. | 788 // Stack overflow should never occur during deoptimization: |
789 if (thread->deopt_mark() != NULL) { | 789 // the compiled method bangs the stack by as much as the |
790 Deoptimization::cleanup_deopt_info(thread, NULL); | 790 // interpreter would need in case of a deoptimization. The |
791 } | 791 // deoptimization blob and uncommon trap blob bang the stack |
792 // in a debug VM to verify the correctness of the compiled | |
793 // method stack banging. | |
794 assert(thread->deopt_mark() == NULL, "no stack overflow from deopt blob/uncommon trap"); | |
792 Events::log_exception(thread, "StackOverflowError at " INTPTR_FORMAT, pc); | 795 Events::log_exception(thread, "StackOverflowError at " INTPTR_FORMAT, pc); |
793 return StubRoutines::throw_StackOverflowError_entry(); | 796 return StubRoutines::throw_StackOverflowError_entry(); |
794 } | 797 } |
795 | 798 |
796 case IMPLICIT_NULL: { | 799 case IMPLICIT_NULL: { |