src/share/vm/opto/library_call.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File
*** old/src/share/vm/opto/library_call.cpp	Tue Jan  5 18:46:12 2010
--- new/src/share/vm/opto/library_call.cpp	Tue Jan  5 18:46:12 2010

*** 1,7 **** --- 1,7 ---- /* ! * Copyright 1999-2009 Sun Microsystems, Inc. All Rights Reserved. ! * Copyright 1999-2010 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 3695,3719 **** --- 3695,3729 ---- return true; } // Helper routine for above bool LibraryCallKit::is_method_invoke_or_aux_frame(JVMState* jvms) { + ciMethod* method = jvms->method(); + // Is this the Method.invoke method itself? ! if (jvms->method()->intrinsic_id() == vmIntrinsics::_invoke) return true; // Is this a helper, defined somewhere underneath MethodAccessorImpl. ! ciKlass* k = jvms->method()->holder(); if (k->is_instance_klass()) { ciInstanceKlass* ik = k->as_instance_klass(); for (; ik != NULL; ik = ik->super()) { if (ik->name() == ciSymbol::sun_reflect_MethodAccessorImpl() && ik == env()->find_system_klass(ik->name())) { return true; } } } + else if ((method->name() == ciSymbol::invoke_name() && + !strcmp(k->name()->as_utf8(), "java/dyn/MethodHandle")) + || + k == env()->InvokeDynamic_klass()) { + // FIXME: Hide this match logic in methodOopDesc or MethodHandleCompiler. + // This is an internal adapter frame from the MethodHandleCompiler -- skip it + return true; + } return false; } static int value_field_offset = -1; // offset of the "value" field of AtomicLongCSImpl. This is needed by

src/share/vm/opto/library_call.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File