src/share/vm/code/nmethod.cpp

changeset 6991
882004b9e7e1
parent 6983
9717199cb8de
child 6992
2c6ef90f030a
equal deleted inserted replaced
6990:1526a938e670 6991:882004b9e7e1
1164 RelocIterator iter(this, low_boundary); 1164 RelocIterator iter(this, low_boundary);
1165 while(iter.next()) { 1165 while(iter.next()) {
1166 switch(iter.type()) { 1166 switch(iter.type()) {
1167 case relocInfo::virtual_call_type: 1167 case relocInfo::virtual_call_type:
1168 case relocInfo::opt_virtual_call_type: { 1168 case relocInfo::opt_virtual_call_type: {
1169 CompiledIC *ic = CompiledIC_at(iter.reloc()); 1169 CompiledIC *ic = CompiledIC_at(&iter);
1170 // Ok, to lookup references to zombies here 1170 // Ok, to lookup references to zombies here
1171 CodeBlob *cb = CodeCache::find_blob_unsafe(ic->ic_destination()); 1171 CodeBlob *cb = CodeCache::find_blob_unsafe(ic->ic_destination());
1172 if( cb != NULL && cb->is_nmethod() ) { 1172 if( cb != NULL && cb->is_nmethod() ) {
1173 nmethod* nm = (nmethod*)cb; 1173 nmethod* nm = (nmethod*)cb;
1174 // Clean inline caches pointing to both zombie and not_entrant methods 1174 // Clean inline caches pointing to both zombie and not_entrant methods
1661 // iteration below. 1661 // iteration below.
1662 if (unloading_occurred) { 1662 if (unloading_occurred) {
1663 RelocIterator iter(this, low_boundary); 1663 RelocIterator iter(this, low_boundary);
1664 while(iter.next()) { 1664 while(iter.next()) {
1665 if (iter.type() == relocInfo::virtual_call_type) { 1665 if (iter.type() == relocInfo::virtual_call_type) {
1666 CompiledIC *ic = CompiledIC_at(iter.reloc()); 1666 CompiledIC *ic = CompiledIC_at(&iter);
1667 if (ic->is_icholder_call()) { 1667 if (ic->is_icholder_call()) {
1668 // The only exception is compiledICHolder oops which may 1668 // The only exception is compiledICHolder oops which may
1669 // yet be marked below. (We check this further below). 1669 // yet be marked below. (We check this further below).
1670 CompiledICHolder* cichk_oop = ic->cached_icholder(); 1670 CompiledICHolder* cichk_oop = ic->cached_icholder();
1671 if (cichk_oop->holder_method()->method_holder()->is_loader_alive(is_alive) && 1671 if (cichk_oop->holder_method()->method_holder()->is_loader_alive(is_alive) &&
1770 // static_stub_Relocations may have dangling references to 1770 // static_stub_Relocations may have dangling references to
1771 // Method*s so trim them out here. Otherwise it looks like 1771 // Method*s so trim them out here. Otherwise it looks like
1772 // compiled code is maintaining a link to dead metadata. 1772 // compiled code is maintaining a link to dead metadata.
1773 address static_call_addr = NULL; 1773 address static_call_addr = NULL;
1774 if (iter.type() == relocInfo::opt_virtual_call_type) { 1774 if (iter.type() == relocInfo::opt_virtual_call_type) {
1775 CompiledIC* cic = CompiledIC_at(iter.reloc()); 1775 CompiledIC* cic = CompiledIC_at(&iter);
1776 if (!cic->is_call_to_interpreted()) { 1776 if (!cic->is_call_to_interpreted()) {
1777 static_call_addr = iter.addr(); 1777 static_call_addr = iter.addr();
1778 } 1778 }
1779 } else if (iter.type() == relocInfo::static_call_type) { 1779 } else if (iter.type() == relocInfo::static_call_type) {
1780 CompiledStaticCall* csc = compiledStaticCall_at(iter.reloc()); 1780 CompiledStaticCall* csc = compiledStaticCall_at(iter.reloc());
1822 Metadata* md = r->metadata_value(); 1822 Metadata* md = r->metadata_value();
1823 f(md); 1823 f(md);
1824 } 1824 }
1825 } else if (iter.type() == relocInfo::virtual_call_type) { 1825 } else if (iter.type() == relocInfo::virtual_call_type) {
1826 // Check compiledIC holders associated with this nmethod 1826 // Check compiledIC holders associated with this nmethod
1827 CompiledIC *ic = CompiledIC_at(iter.reloc()); 1827 CompiledIC *ic = CompiledIC_at(&iter);
1828 if (ic->is_icholder_call()) { 1828 if (ic->is_icholder_call()) {
1829 CompiledICHolder* cichk = ic->cached_icholder(); 1829 CompiledICHolder* cichk = ic->cached_icholder();
1830 f(cichk->holder_method()); 1830 f(cichk->holder_method());
1831 f(cichk->holder_klass()); 1831 f(cichk->holder_klass());
1832 } else { 1832 } else {
2925 while (iter.next()) { 2925 while (iter.next()) {
2926 switch (iter.type()) { 2926 switch (iter.type()) {
2927 case relocInfo::virtual_call_type: 2927 case relocInfo::virtual_call_type:
2928 case relocInfo::opt_virtual_call_type: { 2928 case relocInfo::opt_virtual_call_type: {
2929 VerifyMutexLocker mc(CompiledIC_lock); 2929 VerifyMutexLocker mc(CompiledIC_lock);
2930 CompiledIC_at(iter.reloc())->print(); 2930 CompiledIC_at(&iter)->print();
2931 break; 2931 break;
2932 } 2932 }
2933 case relocInfo::static_call_type: 2933 case relocInfo::static_call_type:
2934 st->print_cr("Static call at " INTPTR_FORMAT, iter.reloc()->addr()); 2934 st->print_cr("Static call at " INTPTR_FORMAT, iter.reloc()->addr());
2935 compiledStaticCall_at(iter.reloc())->print(); 2935 compiledStaticCall_at(iter.reloc())->print();

mercurial