comparison src/cpu/x86/vm/frame_x86.cpp @ 1488:615a9d95d265

6946056: assert((intptr_t) sp()<=(intptr_t) result,"result must>=than stack pointer"), frame_x86.cpp:295 Summary: frame::interpreter_frame_monitor_end() will spuriously assert for a frame that spans 0x80000000. Cast values to intptr_t* (rather than intptr_t) so that an unsigned pointer compare is performed. Reviewed-by: never, jcoomes, pbk
author johnc
date Tue, 27 Apr 2010 18:13:47 -0700
parents 18a389214829
children df736661d0c8
comparison
equal deleted inserted replaced
1395:454ff03c0daf 1488:615a9d95d265
289 } 289 }
290 290
291 BasicObjectLock* frame::interpreter_frame_monitor_end() const { 291 BasicObjectLock* frame::interpreter_frame_monitor_end() const {
292 BasicObjectLock* result = (BasicObjectLock*) *addr_at(interpreter_frame_monitor_block_top_offset); 292 BasicObjectLock* result = (BasicObjectLock*) *addr_at(interpreter_frame_monitor_block_top_offset);
293 // make sure the pointer points inside the frame 293 // make sure the pointer points inside the frame
294 assert((intptr_t) fp() > (intptr_t) result, "result must < than frame pointer"); 294 assert(sp() <= (intptr_t*) result, "monitor end should be above the stack pointer");
295 assert((intptr_t) sp() <= (intptr_t) result, "result must >= than stack pointer"); 295 assert((intptr_t*) result < fp(), "monitor end should be strictly below the frame pointer");
296 return result; 296 return result;
297 } 297 }
298 298
299 void frame::interpreter_frame_set_monitor_end(BasicObjectLock* value) { 299 void frame::interpreter_frame_set_monitor_end(BasicObjectLock* value) {
300 *((BasicObjectLock**)addr_at(interpreter_frame_monitor_block_top_offset)) = value; 300 *((BasicObjectLock**)addr_at(interpreter_frame_monitor_block_top_offset)) = value;