comparison src/share/vm/code/nmethod.cpp @ 3018:5857923e563c

Fixed an issue with frame states in exception dispatch chains (now we are correctly rethrowing the exception immediately at entering the interpreter).
author Thomas Wuerthinger <thomas@wuerthinger.net>
date Sat, 18 Jun 2011 19:13:55 +0200
parents 75a99b4f1c98
children be4ca325525a
comparison
equal deleted inserted replaced
3017:b4ba003eb11d 3018:5857923e563c
1077 1077
1078 ScopeDesc* nmethod::scope_desc_at(address pc) { 1078 ScopeDesc* nmethod::scope_desc_at(address pc) {
1079 PcDesc* pd = pc_desc_at(pc); 1079 PcDesc* pd = pc_desc_at(pc);
1080 guarantee(pd != NULL, "scope must be present"); 1080 guarantee(pd != NULL, "scope must be present");
1081 return new ScopeDesc(this, pd->scope_decode_offset(), 1081 return new ScopeDesc(this, pd->scope_decode_offset(),
1082 pd->obj_decode_offset(), pd->should_reexecute(), 1082 pd->obj_decode_offset(), pd->should_reexecute(), pd->rethrow_exception(),
1083 pd->return_oop()); 1083 pd->return_oop());
1084 } 1084 }
1085 1085
1086 1086
1087 void nmethod::clear_inline_caches() { 1087 void nmethod::clear_inline_caches() {
2265 ic = CompiledIC_at(call_site); 2265 ic = CompiledIC_at(call_site);
2266 } 2266 }
2267 PcDesc* pd = pc_desc_at(ic->end_of_call()); 2267 PcDesc* pd = pc_desc_at(ic->end_of_call());
2268 assert(pd != NULL, "PcDesc must exist"); 2268 assert(pd != NULL, "PcDesc must exist");
2269 for (ScopeDesc* sd = new ScopeDesc(this, pd->scope_decode_offset(), 2269 for (ScopeDesc* sd = new ScopeDesc(this, pd->scope_decode_offset(),
2270 pd->obj_decode_offset(), pd->should_reexecute(), 2270 pd->obj_decode_offset(), pd->should_reexecute(), pd->rethrow_exception(),
2271 pd->return_oop()); 2271 pd->return_oop());
2272 !sd->is_top(); sd = sd->sender()) { 2272 !sd->is_top(); sd = sd->sender()) {
2273 sd->verify(); 2273 sd->verify();
2274 } 2274 }
2275 } 2275 }
2531 // Return a the last scope in (begin..end] 2531 // Return a the last scope in (begin..end]
2532 ScopeDesc* nmethod::scope_desc_in(address begin, address end) { 2532 ScopeDesc* nmethod::scope_desc_in(address begin, address end) {
2533 PcDesc* p = pc_desc_near(begin+1); 2533 PcDesc* p = pc_desc_near(begin+1);
2534 if (p != NULL && p->real_pc(this) <= end) { 2534 if (p != NULL && p->real_pc(this) <= end) {
2535 return new ScopeDesc(this, p->scope_decode_offset(), 2535 return new ScopeDesc(this, p->scope_decode_offset(),
2536 p->obj_decode_offset(), p->should_reexecute(), 2536 p->obj_decode_offset(), p->should_reexecute(), p->rethrow_exception(),
2537 p->return_oop()); 2537 p->return_oop());
2538 } 2538 }
2539 return NULL; 2539 return NULL;
2540 } 2540 }
2541 2541