0N/A * or visit www.oracle.com if you need additional information or have any
0N/A#include "precompiled.hpp"
0N/A#include "classfile/classFileStream.hpp"
0N/A#include "classfile/javaClasses.hpp"
0N/A#include "classfile/stackMapTable.hpp"
0N/A#include "classfile/stackMapFrame.hpp"
0N/A#include "classfile/stackMapTableFormat.hpp"
0N/A#include "classfile/systemDictionary.hpp"
0N/A#include "classfile/verifier.hpp"
0N/A#include "classfile/vmSymbols.hpp"
0N/A#include "interpreter/bytecodes.hpp"
0N/A#include "interpreter/bytecodeStream.hpp"
0N/A#include "memory/oopFactory.hpp"
0N/A#include "memory/resourceArea.hpp"
0N/A#include "oops/instanceKlass.hpp"
0N/A#include "oops/oop.inline.hpp"
0N/A#include "oops/typeArrayOop.hpp"
0N/A#include "runtime/fieldDescriptor.hpp"
0N/A#include "runtime/handles.inline.hpp"
0N/A#include "runtime/interfaceSupport.hpp"
0N/A#include "runtime/javaCalls.hpp"
0N/A#include "runtime/orderAccess.hpp"
0N/A#ifdef TARGET_ARCH_x86
0N/A# include "bytes_x86.hpp"
0N/A#ifdef TARGET_ARCH_sparc
0N/A# include "bytes_sparc.hpp"
0N/A#ifdef TARGET_ARCH_zero
0N/A# include "bytes_zero.hpp"
0N/A#ifdef TARGET_ARCH_arm
0N/A# include "bytes_arm.hpp"
0N/A#ifdef TARGET_ARCH_ppc
0N/A# include "bytes_ppc.hpp"
0N/A return (void*)_verify_byte_codes_fn;
0N/A return !need_verify;
0N/Abool Verifier::verify(instanceKlassHandle klass, Verifier::Mode mode, bool should_verify_class, TRAPS) {
0N/A if (TraceClassInitialization) {
0N/A if (UseSplitVerifier &&
0N/A if (HAS_PENDING_EXCEPTION) {
0N/A if (HAS_PENDING_EXCEPTION) {
0N/Abool Verifier::is_eligible_for_verification(instanceKlassHandle klass, bool should_verify_class) {
0N/A if (VerboseVerification) {
0N/A if (_is_new_verify_byte_codes_fn) {
0N/A return TypeOrigin();
0N/A case CONST_POOL:
0N/A case FRAME_ONLY:
switch (_fault) {
case INVALID_BYTECODE:
case WRONG_TYPE:
case FLAGS_MISMATCH:
case BAD_CP_INDEX:
case BAD_LOCAL_INDEX:
case LOCALS_SIZE_MISMATCH:
case STACK_SIZE_MISMATCH:
case STACK_OVERFLOW:
case STACK_UNDERFLOW:
case MISSING_STACKMAP:
case BAD_STACKMAP:
case UNKNOWN:
s->decrement_refcount();
if (VerboseVerification) {
if (was_recursively_verified()) return;
if (was_recursively_verified())
if (VerboseVerification) {
if (m->has_localvariable_table()) {
if (VerboseVerification) {
if (was_recursively_verified()) return;
int target;
#ifndef PRODUCT
if (VerboseVerification) {
switch (opcode) {
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = true; break;
no_control_flow = true; break;
no_control_flow = true; break;
no_control_flow = true; break;
no_control_flow = true; break;
no_control_flow = true; break;
no_control_flow = true; break;
no_control_flow = true; break;
no_control_flow = true; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
no_control_flow = false; break;
for (int i = 0; i < dim; i++) {
no_control_flow = false; break;
no_control_flow = true; break;
no_control_flow = false;
if (!no_control_flow) {
return NULL;
return code_data;
void ClassVerifier::verify_exception_handler_table(u4 code_length, char* code_data, int& min, int& max, TRAPS) {
for(int i = 0; i < exlength; i++) {
if (catch_type_index != 0) {
if (!is_subclass) {
if (localvariable_table_length > 0) {
for (int i = 0; i < localvariable_table_length; i++) {
if (!matches) {
} else if (no_control_flow) {
return stackmap_index;
void ClassVerifier::verify_exception_handler_targets(u2 bci, bool this_uninit, StackMapFrame* current_frame,
for(int i = 0; i < exlength; i++) {
if (catch_type_index != 0) {
if (!matches) {
#ifdef ASSERT
true, CHECK_NULL);
bool is_method) {
if (is_method) {
unsigned int types;
if (keys < 0) {
if (keys < 0) {
for (int i = 0; i < keys; i++) {
TRAPS) {
int n = change_sig_to_verificationType(
bool is_assignable;
goto check_protected;
if (!is_assignable) {
field_sig, false)) {
if (!is_assignable) {
default: ShouldNotReachHere();
*this_uninit = true;
if (!assignable) {
if (!EnableInvokeDynamic ||
int sig_i = 0;
#ifdef ASSERT
assert(nargs <= (method_sig->utf8_length() - 3) * 2, "estimate of max size isn't conservative enough");
if (!subtype) {
if (is_protected_access(
if (!is_assignable) {
int n = change_sig_to_verificationType(
const char* from_bt[] = {
int length;
char* arr_sig_str;
if (!match) {
return sym;
return sym;