/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*
*/
#include "precompiled.hpp"
#include "oops/oop.inline.hpp"
#include "oops/symbol.hpp"
#include "prims/jvmtiRedefineClassesTrace.hpp"
#include "prims/methodComparator.hpp"
#include "runtime/handles.inline.hpp"
#include "utilities/globalDefinitions.hpp"
return false;
// RC_TRACE macro has an embedded ResourceMark
return false;
}
_switchable_test = false;
return false;
return false;
}
return true;
}
// Something has definitely been deleted in the new method, compared to the old one.
return false;
return false;
_switchable_test = true;
return false;
bool found_match = false;
do {
found_match = true;
break;
}
} while (c_new >= 0);
if (! found_match)
return false;
}
}
// Now we can test all forward jumps
RC_TRACE(0x00800000,
("Fwd jump miss: old dest = %d, calc new dest = %d, act new dest = %d",
return false;
}
}
return true;
}
// BytecodeStream returns the correct standard Java bytecodes for various "fast"
// bytecode versions, so we don't have to bother about them here..
switch (c_old) {
case Bytecodes::_instanceof : {
return false;
return false;
break;
}
case Bytecodes::_invokeinterface : {
// are the same. Indices which are really into constantpool cache (rather than constant
// pool itself) are accepted by the constantpool query routines below.
return false;
break;
}
case Bytecodes::_invokedynamic: {
// are the same. Indices which are really into constantpool cache (rather than constant
// pool itself) are accepted by the constantpool query routines below.
return false;
return false;
return false;
return false;
}
break;
}
return false;
break;
}
return false;
return false;
} else {
// Use jlong_cast to compare the bits rather than numerical values.
// This makes a difference for NaN constants.
return false;
}
break;
}
return false;
break;
return false;
break;
return false;
return false;
break;
if (_switchable_test) {
return false;
} else {
return false;
}
} else {
return false;
}
break;
}
return false;
// We could use get_index_u1 and get_constant_u1, but it's simpler to grab both bytes at once:
return false;
} else {
// We could use get_index_u2 and get_constant_u2, but it's simpler to grab all four bytes at once:
return false;
}
break;
if (_switchable_test) {
return false;
} else {
return false;
}
} else {
return false;
}
break;
}
case Bytecodes::_tableswitch : {
if (_switchable_test) {
if (npairs_old != npairs_new)
return false;
for (int i = 0; i < npairs_old; i++) {
return false;
}
return false;
return false;
}
}
} else { // !_switchable_test, can use fast rough compare
return false;
return false;
}
break;
}
}
return true;
}
return false;
return false;
} else {
// Use jint_cast to compare the bits rather than numerical values.
// This makes a difference for NaN constants.
return false;
}
return false;
return false;
// tag_old should be klass - 4881222
return false;
return false;
return false;
return false;
if ((_old_cp->uncached_klass_ref_at_noresolve(mhi_old) != _new_cp->uncached_klass_ref_at_noresolve(mhi_new)) ||
return false;
} else {
return false; // unknown tag
}
return true;
}
return 1;
return 2;
return 3;
} else return 0;
}