nmethod.cpp revision 1668
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * This code is free software; you can redistribute it and/or modify it
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * under the terms of the GNU General Public License version 2 only, as
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * published by the Free Software Foundation.
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * This code is distributed in the hope that it will be useful, but WITHOUT
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * version 2 for more details (a copy is included in the LICENSE file that
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * accompanied this code).
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * You should have received a copy of the GNU General Public License version
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * 2 along with this work; if not, write to the Free Software Foundation,
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift * or visit www.oracle.com if you need additional information or have any
65e99be301d5a19db33f25841f671756e8dbb9b5ludovicp# include "incls/_precompiled.incl"
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift# include "incls/_nmethod.cpp.incl"
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift// Only bother with this argument setup if dtrace is available
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftHS_DTRACE_PROBE_DECL8(hotspot, compiled__method__load,
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift const char*, int, const char*, int, const char*, int, void*, size_t);
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftHS_DTRACE_PROBE_DECL6(hotspot, compiled__method__unload,
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift char*, int, char*, int, char*, int);
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (m != NULL) { \
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift HS_DTRACE_PROBE6(hotspot, compiled__method__unload, \
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift klass_name->bytes(), klass_name->utf8_length(), \
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift signature->bytes(), signature->utf8_length()); \
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift#else // ndef DTRACE_ENABLED
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (compiler() == NULL || method() == NULL) return false; // can happen during debug printing
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (is_native_method()) return false;
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (compiler() == NULL || method() == NULL) return false; // can happen during debug printing
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (is_native_method()) return false;
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (is_native_method()) return false;
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift//---------------------------------------------------------------------------------
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift// NMethod statistics
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift// They are printed under various flags, including:
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift// PrintC1Statistics, PrintOptoStatistics, LogVMOutput, and LogCompilation.
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift// (In the latter two cases, they like other stats are printed to the log only.)
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift// These variables are put into one block to reduce relocations
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift// and make it simpler to print from the debugger.
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift handler_table_size += nm->handler_table_size();
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift nul_chk_table_size += nm->nul_chk_table_size();
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (nmethod_count == 0) return;
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift tty->print_cr("Statistics for %d bytecoded nmethods:", nmethod_count);
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (total_size != 0) tty->print_cr(" total in heap = %d", total_size);
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (relocation_size != 0) tty->print_cr(" relocation = %d", relocation_size);
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (insts_size != 0) tty->print_cr(" main code = %d", insts_size);
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (stub_size != 0) tty->print_cr(" stub code = %d", stub_size);
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (consts_size != 0) tty->print_cr(" constants = %d", consts_size);
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (oops_size != 0) tty->print_cr(" oops = %d", oops_size);
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (scopes_data_size != 0) tty->print_cr(" scopes data = %d", scopes_data_size);
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (scopes_pcs_size != 0) tty->print_cr(" scopes pcs = %d", scopes_pcs_size);
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (dependencies_size != 0) tty->print_cr(" dependencies = %d", dependencies_size);
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (handler_table_size != 0) tty->print_cr(" handler table = %d", handler_table_size);
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (nul_chk_table_size != 0) tty->print_cr(" nul chk table = %d", nul_chk_table_size);
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift native_relocation_size += nm->relocation_size();
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (native_nmethod_count == 0) return;
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift tty->print_cr("Statistics for %d native nmethods:", native_nmethod_count);
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift if (native_total_size != 0) tty->print_cr(" N. total size = %d", native_total_size);
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift if (native_relocation_size != 0) tty->print_cr(" N. relocation = %d", native_relocation_size);
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift if (native_insts_size != 0) tty->print_cr(" N. main code = %d", native_insts_size);
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift if (native_oops_size != 0) tty->print_cr(" N. oops = %d", native_oops_size);
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift int pc_desc_resets; // number of resets (= number of caches)
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift int pc_desc_queries; // queries to nmethod::find_pc_desc
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift int pc_desc_approx; // number of those which have approximate true
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift int pc_desc_repeats; // number of _last_pc_desc hits
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift int pc_desc_tests; // total number of PcDesc examinations
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift int pc_desc_searches; // total number of quasi-binary search steps
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift int pc_desc_adds; // number of LUR cache insertions
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift tty->print_cr("PcDesc Statistics: %d queries, %.2f comparisons per query",
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift tty->print_cr(" caches=%d queries=%d/%d, hits=%d+%d, tests=%d+%d, adds=%d",
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift pc_desc_tests, pc_desc_searches, pc_desc_adds);
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift#endif //PRODUCT
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift//---------------------------------------------------------------------------------
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift// The _unwind_handler is a special marker address, which says that
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift// for given exception oop and address, the frame should be removed
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift// as the tuple cannot be caught in the nmethod
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swiftaddress ExceptionCache::_unwind_handler = (address) -1;
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swiftExceptionCache::ExceptionCache(Handle exception, address pc, address handler) {
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift assert(exception.not_null(), "Must be non null");
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swiftaddress ExceptionCache::match(Handle exception, address pc) {
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift assert(exception.not_null(),"Must be non null");
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swiftbool ExceptionCache::match_exception_with_space(Handle exception) {
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift assert(exception.not_null(),"Must be non null");
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift if (exception->klass() == exception_type() && count() < cache_size) {
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift return false;
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swiftaddress ExceptionCache::test_address(address addr) {
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift for (int i=0; i<count(); i++) {
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swiftbool ExceptionCache::add_address_and_handler(address addr, address handler) {
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift if (test_address(addr) == handler) return true;
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift return false;
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift// private method for handling exception cache
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift// These methods are private, and used to manipulate the exception cache
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swiftExceptionCache* nmethod::exception_cache_entry_for_exception(Handle exception) {
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift if (ec->match_exception_with_space(exception)) {
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift//-----------------------------------------------------------------------------
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift// Helper used by both find_pc_desc methods.
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swiftstatic inline bool match_desc(PcDesc* pc, int pc_offset, bool approximate) {
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift return (pc-1)->pc_offset() < pc_offset && pc_offset <= pc->pc_offset();
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swiftvoid PcDescCache::reset_to(PcDesc* initial_pc_desc) {
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift // reset the cache by filling it with benign (non-null) values
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift assert(initial_pc_desc->pc_offset() < 0, "must be sentinel");
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift _last_pc_desc = initial_pc_desc + 1; // first valid one is after sentinel
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift for (int i = 0; i < cache_size; i++)
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swiftPcDesc* PcDescCache::find_pc_desc(int pc_offset, bool approximate) {
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift NOT_PRODUCT(if (approximate) ++nmethod_stats.pc_desc_approx);
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift // In order to prevent race conditions do not load cache elements
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift // repeatedly, but use a local copy:
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift // Step one: Check the most recently returned value.
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (res == NULL) return NULL; // native method; no PcDescs at all
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (match_desc(res, pc_offset, approximate)) {
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift // Step two: Check the LRU cache.
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift for (int i = 0; i < cache_size; i++) {
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (res->pc_offset() < 0) break; // optimization: skip empty cache
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if (match_desc(res, pc_offset, approximate)) {
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift _last_pc_desc = res; // record this cache hit in case of repeat
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift // Report failure.
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftvoid PcDescCache::add_pc_desc(PcDesc* pc_desc) {
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift // Update the LRU cache by shifting pc_desc forward:
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift for (int i = 0; i < cache_size; i++) {
4a622c45ad6426287954754f34fc3ab8a4b9c2c5matthew_swift // Note: Do not update _last_pc_desc. It fronts for the LRU cache.
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift// adjust pcs_size so that it is a multiple of both oopSize and
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift// sizeof(PcDesc) (assumes that if sizeof(PcDesc) is not a multiple
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift// of oopSize, then 2*sizeof(PcDesc) is)
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift assert((nsize % oopSize) == 0, "correct alignment");
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift//-----------------------------------------------------------------------------
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftvoid nmethod::add_exception_cache_entry(ExceptionCache* new_entry) {
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift assert(ExceptionCache_lock->owned_by_self(),"Must hold the ExceptionCache_lock");
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift assert(new_entry->next() == NULL, "Must be null");
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftvoid nmethod::remove_from_exception_cache(ExceptionCache* ec) {
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift // find the previous and next entry of ec
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift assert(curr != NULL, "ExceptionCache not found");
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift // now: curr == ec
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift// public method for accessing the exception cache
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift// These are the public access methods.
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swiftaddress nmethod::handler_for_exception_and_pc(Handle exception, address pc) {
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift // We never grab a lock to read the exception cache, so we may
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift // have false negatives. This is okay, as it can only happen during
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift // the first few exception lookups for a given nmethod.
bb8874d71cdd8e5288297b9727703437c6dfcfedmatthew_swift if ((ret_val = ec->match(exception,pc)) != NULL) {
return NULL;
insts_size() +
stub_size() +
consts_size() +
scopes_data_size() +
scopes_pcs_size() +
return NULL;
_has_unsafe_access = 0;
_lock_count = 0;
#ifdef ASSERT
_oops_are_stale = false;
_scavenge_root_state = 0;
#ifdef HAVE_DTRACE_H
_trap_offset = 0;
int vep_offset,
int frame_complete,
int frame_size,
oop_maps);
return nm;
#ifdef HAVE_DTRACE_H
int vep_offset,
int trap_offset,
int frame_complete,
int frame_size) {
return nm;
int compile_id,
int entry_bci,
int orig_pc_offset,
int comp_level
int nmethod_size =
return nm;
int nmethod_size,
int frame_size,
_exception_offset = 0;
_deoptimize_offset = 0;
_orig_pc_offset = 0;
print();
if (PrintNativeNMethods) {
print_code();
if (PrintRelocations) {
#ifdef HAVE_DTRACE_H
int nmethod_size,
int frame_size)
_exception_offset = 0;
_deoptimize_offset = 0;
_orig_pc_offset = 0;
print();
if (PrintNMethods) {
print_code();
if (PrintRelocations) {
int nmethod_size,
int compile_id,
int entry_bci,
int orig_pc_offset,
int frame_size,
int comp_level
if (printnmethods || PrintDebugInfo || PrintRelocations || PrintDependencies || PrintExceptionHandlers) {
#ifdef TIERED
bool do_nl = false;
compile_id(),
#ifdef TIERED
if (is_osr_method())
print();
if (printmethod) {
print_code();
print_pcs();
if (PrintDebugInfo) {
print_scopes();
if (PrintRelocations) {
if (PrintDependencies) {
if (PrintExceptionHandlers) {
if (is_zombie()) {
if (!is_in_use()) {
// Tell if a non-entrant method can be converted to a zombie (i.e., there is no activations on the stack)
if (m == NULL) return;
// There is a benign race here. See comments in methodDataOop.hpp.
if (is_osr_method()) {
if (is_in_use()) {
if (LogCompilation) {
if (is_zombie()) {
if (is_osr_method()) {
if (is_in_use()) {
#ifdef ASSERT
_oops_are_stale = true;
if (TraceCreateZombies) {
tty->print_cr("nmethod <" INTPTR_FORMAT "> code made %s", this, (state == not_entrant) ? "not entrant" : "zombie");
assert(is_marked_for_reclamation() || (is_osr_method() && is_unloaded()), "must be marked for reclamation");
if (PrintMethodFlushing) {
tty->print_cr("*flushing nmethod %3d/" INTPTR_FORMAT ". Live blobs:" UINT32_FORMAT "/Free CodeCache:" SIZE_FORMAT "Kb",
delete ec;
if (on_scavenge_root_list()) {
if (is_speculatively_disconnected()) {
#ifdef SHARK
if (!has_flushed_dependencies()) {
return _jmethod_id;
if (unload_reported()) {
if (is_not_entrant()) {
// to no longer be true. See jvmtiExport.hpp for details.
if (a_class_was_redefined) {
unloading_occurred = true;
if (unloading_occurred) {
#ifndef PRODUCT
if (is_not_entrant()) {
if (!do_strong_roots_only) {
f->do_oop(p);
bool _detected_scavenge_root;
_detected_scavenge_root = true;
#ifndef PRODUCT
(*p)->print();
#ifndef SHARK
return NULL;
#ifdef ASSERT
for (int i = 0; i < count; i++) {
#ifdef ASSERT
res = p;
return res;
return res;
#define assert_LU_OK \
return upper;
return NULL;
bool found_check = false;
found_check = true;
NOT_DEBUG(break);
found_check = true;
NOT_DEBUG(break);
return found_check;
if (is_zombie()) {
#ifdef ASSERT
if (cont_offset == 0) {
print();
print_code();
print_pcs();
if (cont_offset == 0) {
return NULL;
void nmethod_init() {
return NULL;
if (!has_method_handle_invokes()) return false;
bool _ok;
if (_ok) {
_ok = false;
if(is_native_method() )
if (nm != this) {
if (! p->verify(this)) {
#ifndef PRODUCT
bool _ok;
if (_ok) {
_ok = false;
(*p)->print();
if (!on_scavenge_root_list()) {
if (is_compiled_by_c1()) {
} else if (is_compiled_by_c2()) {
} else if (is_compiled_by_shark()) {
if (WizardMode) {
(address)this,
size());
relocation_size());
insts_begin(),
insts_end(),
insts_size());
stub_begin(),
stub_end(),
stub_size());
consts_begin(),
consts_end(),
consts_size());
oops_begin(),
oops_end(),
oops_size());
if (scopes_data_size () > 0) tty->print_cr(" scopes data [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
scopes_data_size());
scopes_pcs_size());
if (dependencies_size () > 0) tty->print_cr(" dependencies [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
if (handler_table_size() > 0) tty->print_cr(" handler table [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
if (nul_chk_table_size() > 0) tty->print_cr(" nul chk table [" INTPTR_FORMAT "," INTPTR_FORMAT "] = %d",
oops_begin(),
oops_end(),
oops_size());
ResourceMark m;
#ifndef PRODUCT
if (UseRelocIndex) {
if (index_size > 0) {
ip[0],
p->print(this);
bool have_one = false;
have_one = true;
p->return_oop());
return NULL;
if (has_method_handle_invokes())
if (m.not_null()) {
int sig_index = 0;
if (!m->is_static())
int sig_index = 0;
bool did_old_sp = false;
bool at_old_sp = false;
if (at_this)
if (at_this) {
bool did_name = false;
did_name = true;
if (!did_name)
if (at_old_sp) {
did_old_sp = true;
if (!did_old_sp) {
switch (bc) {
if (cont_offset != 0) {
#ifndef PRODUCT