--- a/hotspot/src/share/vm/code/compiledIC.hpp Fri Jul 04 11:46:01 2014 +0200
+++ b/hotspot/src/share/vm/code/compiledIC.hpp Mon Jul 14 10:15:21 2014 -0400
@@ -136,6 +136,9 @@
bool _is_optimized; // an optimized virtual call (i.e., no compiled IC)
CompiledIC(nmethod* nm, NativeCall* ic_call);
+ CompiledIC(RelocIterator* iter);
+
+ void initialize_from_iter(RelocIterator* iter);
static bool is_icholder_entry(address entry);
@@ -169,6 +172,7 @@
friend CompiledIC* CompiledIC_before(nmethod* nm, address return_addr);
friend CompiledIC* CompiledIC_at(nmethod* nm, address call_site);
friend CompiledIC* CompiledIC_at(Relocation* call_site);
+ friend CompiledIC* CompiledIC_at(RelocIterator* reloc_iter);
// This is used to release CompiledICHolder*s from nmethods that
// are about to be freed. The callsite might contain other stale
@@ -249,6 +253,13 @@
return c_ic;
}
+inline CompiledIC* CompiledIC_at(RelocIterator* reloc_iter) {
+ assert(reloc_iter->type() == relocInfo::virtual_call_type ||
+ reloc_iter->type() == relocInfo::opt_virtual_call_type, "wrong reloc. info");
+ CompiledIC* c_ic = new CompiledIC(reloc_iter);
+ c_ic->verify();
+ return c_ic;
+}
//-----------------------------------------------------------------------------
// The CompiledStaticCall represents a call to a static method in the compiled