提交 12ade74f 编写于 作者: C cfang

6848466: frame::frame_size() assertion failure with -XX:+DebugDeoptimization

Summary: add a RegisterMap* argument to frame::frame_size() to correctly compute the sender frame
Reviewed-by: never
上级 7ad906d8
...@@ -59,7 +59,7 @@ inline bool frame::is_younger(intptr_t* id) const { assert(this->id() != NULL && ...@@ -59,7 +59,7 @@ inline bool frame::is_younger(intptr_t* id) const { assert(this->id() != NULL &&
inline bool frame::is_older(intptr_t* id) const { assert(this->id() != NULL && id != NULL, "NULL frame id"); inline bool frame::is_older(intptr_t* id) const { assert(this->id() != NULL && id != NULL, "NULL frame id");
return this->id() > id ; } return this->id() > id ; }
inline int frame::frame_size() const { return sender_sp() - sp(); } inline int frame::frame_size(RegisterMap* map) const { return sender_sp() - sp(); }
inline intptr_t* frame::link() const { return (intptr_t *)(fp()[FP->sp_offset_in_saved_window()] + STACK_BIAS); } inline intptr_t* frame::link() const { return (intptr_t *)(fp()[FP->sp_offset_in_saved_window()] + STACK_BIAS); }
......
...@@ -237,9 +237,8 @@ bool frame::is_interpreted_frame() const { ...@@ -237,9 +237,8 @@ bool frame::is_interpreted_frame() const {
return Interpreter::contains(pc()); return Interpreter::contains(pc());
} }
int frame::frame_size() const { int frame::frame_size(RegisterMap* map) const {
RegisterMap map(JavaThread::current(), false); frame sender = this->sender(map);
frame sender = this->sender(&map);
return sender.sp() - sp(); return sender.sp() - sp();
} }
......
...@@ -117,7 +117,7 @@ class frame VALUE_OBJ_CLASS_SPEC { ...@@ -117,7 +117,7 @@ class frame VALUE_OBJ_CLASS_SPEC {
bool can_be_deoptimized() const; bool can_be_deoptimized() const;
// returns the frame size in stack slots // returns the frame size in stack slots
int frame_size() const; int frame_size(RegisterMap* map) const;
// returns the sending frame // returns the sending frame
frame sender(RegisterMap* map) const; frame sender(RegisterMap* map) const;
......
...@@ -559,7 +559,8 @@ void javaVFrame::print_value() const { ...@@ -559,7 +559,8 @@ void javaVFrame::print_value() const {
} }
// Check frame size and print warning if it looks suspiciously large // Check frame size and print warning if it looks suspiciously large
if (fr().sp() != NULL) { if (fr().sp() != NULL) {
uint size = fr().frame_size(); RegisterMap map = *register_map();
uint size = fr().frame_size(&map);
#ifdef _LP64 #ifdef _LP64
if (size > 8*K) warning("SUSPICIOUSLY LARGE FRAME (%d)", size); if (size > 8*K) warning("SUSPICIOUSLY LARGE FRAME (%d)", size);
#else #else
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册