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