mirror of
https://github.com/openjdk/jdk.git
synced 2026-04-04 12:08:36 +00:00
8203481: Incorrect constraint for unextended_sp in frame:safe_for_sender
Relaxed assert inside safe_for_sender Reviewed-by: aph, dpochepk
This commit is contained in:
parent
a9912bb300
commit
d705440d39
@ -71,9 +71,20 @@ bool frame::safe_for_sender(JavaThread *thread) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// unextended sp must be within the stack and above or equal sp
|
||||
bool unextended_sp_safe = (unextended_sp < thread->stack_base()) &&
|
||||
(unextended_sp >= sp);
|
||||
// When we are running interpreted code the machine stack pointer, SP, is
|
||||
// set low enough so that the Java expression stack can grow and shrink
|
||||
// without ever exceeding the machine stack bounds. So, ESP >= SP.
|
||||
|
||||
// When we call out of an interpreted method, SP is incremented so that
|
||||
// the space between SP and ESP is removed. The SP saved in the callee's
|
||||
// frame is the SP *before* this increment. So, when we walk a stack of
|
||||
// interpreter frames the sender's SP saved in a frame might be less than
|
||||
// the SP at the point of call.
|
||||
|
||||
// So unextended sp must be within the stack but we need not to check
|
||||
// that unextended sp >= sp
|
||||
|
||||
bool unextended_sp_safe = (unextended_sp < thread->stack_base());
|
||||
|
||||
if (!unextended_sp_safe) {
|
||||
return false;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user