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