changeset 841:eacd97c88873

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
author cfang
date Fri, 05 Jun 2009 10:25:39 -0700
parents 085dd9ee61aa
children 7295839252de b109e761e927
files src/cpu/sparc/vm/frame_sparc.inline.hpp src/cpu/x86/vm/frame_x86.cpp src/share/vm/runtime/frame.hpp src/share/vm/runtime/vframe.cpp
diffstat 4 files changed, 6 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/sparc/vm/frame_sparc.inline.hpp	Wed Jun 03 18:15:25 2009 -0700
+++ b/src/cpu/sparc/vm/frame_sparc.inline.hpp	Fri Jun 05 10:25:39 2009 -0700
@@ -59,7 +59,7 @@
 inline bool frame::is_older(intptr_t* id) const   { assert(this->id() != NULL && id != NULL, "NULL frame 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); }
 
--- a/src/cpu/x86/vm/frame_x86.cpp	Wed Jun 03 18:15:25 2009 -0700
+++ b/src/cpu/x86/vm/frame_x86.cpp	Fri Jun 05 10:25:39 2009 -0700
@@ -237,9 +237,8 @@
   return Interpreter::contains(pc());
 }
 
-int frame::frame_size() const {
-  RegisterMap map(JavaThread::current(), false);
-  frame sender = this->sender(&map);
+int frame::frame_size(RegisterMap* map) const {
+  frame sender = this->sender(map);
   return sender.sp() - sp();
 }
 
--- a/src/share/vm/runtime/frame.hpp	Wed Jun 03 18:15:25 2009 -0700
+++ b/src/share/vm/runtime/frame.hpp	Fri Jun 05 10:25:39 2009 -0700
@@ -117,7 +117,7 @@
   bool can_be_deoptimized() const;
 
   // returns the frame size in stack slots
-  int frame_size() const;
+  int frame_size(RegisterMap* map) const;
 
   // returns the sending frame
   frame sender(RegisterMap* map) const;
--- a/src/share/vm/runtime/vframe.cpp	Wed Jun 03 18:15:25 2009 -0700
+++ b/src/share/vm/runtime/vframe.cpp	Fri Jun 05 10:25:39 2009 -0700
@@ -559,7 +559,8 @@
   }
   // Check frame size and print warning if it looks suspiciously large
   if (fr().sp() != NULL) {
-    uint size = fr().frame_size();
+    RegisterMap map = *register_map();
+    uint size = fr().frame_size(&map);
 #ifdef _LP64
     if (size > 8*K) warning("SUSPICIOUSLY LARGE FRAME (%d)", size);
 #else