Mercurial > hg > shark > hotspot
changeset 1541:62259ae1ff0e
More
author | Gary Benson <gbenson@redhat.com> |
---|---|
date | Thu, 20 May 2010 08:45:55 +0100 |
parents | fc13f4012949 |
children | b94634952902 |
files | src/share/vm/shark/sharkTopLevelBlock.cpp src/share/vm/shark/sharkTopLevelBlock.hpp |
diffstat | 2 files changed, 22 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/share/vm/shark/sharkTopLevelBlock.cpp Thu May 20 08:36:44 2010 +0100 +++ b/src/share/vm/shark/sharkTopLevelBlock.cpp Thu May 20 08:45:55 2010 +0100 @@ -532,9 +532,11 @@ successor->add_incoming(current_state()); } else { - - tty->print_cr("handler_bci = %d", exc_handler(i)->handler_bci()); - Unimplemented(); + handler = make_trap( + exc_handler(i)->handler_bci(), + Deoptimization::make_trap_request( + Deoptimization::Reason_unhandled, + Deoptimization::Action_reinterpret)); } switchinst->addCase( @@ -637,6 +639,22 @@ return false; } +BasicBlock* SharkTopLevelBlock::make_trap(int trap_bci, int trap_request) { + BasicBlock *trap_block = function()->CreateBlock("trap"); + BasicBlock *orig_block = builder()->GetInsertBlock(); + builder()->SetInsertPoint(trap_block); + + int orig_bci = bci(); + iter()->force_bci(trap_bci); + + do_trap(trap_request); + + builder()->SetInsertPoint(orig_block); + iter()->force_bci(orig_bci); + + return trap_block; +} + void SharkTopLevelBlock::do_trap(int trap_request) { decache_for_trap(); builder()->CreateRet(
--- a/src/share/vm/shark/sharkTopLevelBlock.hpp Thu May 20 08:36:44 2010 +0100 +++ b/src/share/vm/shark/sharkTopLevelBlock.hpp Thu May 20 08:45:55 2010 +0100 @@ -348,6 +348,7 @@ // Traps private: + llvm::BasicBlock* make_trap(int trap_bci, int trap_request); void do_trap(int trap_request); // Returns