Mercurial > hg > truffle
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; |