/*
* 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 "classfile/stackMapFrame.hpp"
#include "classfile/verifier.hpp"
#include "memory/allocation.hpp"
#include "oops/constantPoolOop.hpp"
#include "oops/methodOop.hpp"
#include "utilities/globalDefinitions.hpp"
#ifdef TARGET_ARCH_x86
# include "bytes_x86.hpp"
#endif
#ifdef TARGET_ARCH_sparc
# include "bytes_sparc.hpp"
#endif
#ifdef TARGET_ARCH_zero
# include "bytes_zero.hpp"
#endif
#ifdef TARGET_ARCH_arm
# include "bytes_arm.hpp"
#endif
#ifdef TARGET_ARCH_ppc
# include "bytes_ppc.hpp"
#endif
class StackMapReader;
// StackMapTable class is the StackMap table used by type checker
private:
// Logically, the _frame_count (as well as many fields in the StackFrame)
// should be a u2, but if we defined the variable as that type it will
// Widening the type and making it signed will help detect these.
public:
}
// specified offset. Return true if the two frames match.
bool match_stackmap(
// specified offset and frame index. Return true if the two frames match.
bool match_stackmap(
// Check jump instructions. Make sure there are no uninitialized
// instances on backward branch.
// The following methods are only used inside this class.
// Returns the frame array index where the frame with offset is stored.
// Make sure that there's no uninitialized object exist on backward branch.
void check_new_object(
};
private:
int _index;
public:
}
}
}
}
_index += 2;
return res;
}
bool at_end() {
}
};
private:
// information about the class and method
char* _code_data;
// information get from the attribute
// Since this error could be caused someone rewriting the method
// but not knowing to update the stackmap data, we call the the
// verifier's error method, which may not throw an exception and
// failover to the old verifier instead.
"StackMapTable format error: bad type array size");
}
}
enum {
};
public:
// Constructor
methodHandle m = v->method();
if (m->has_stackmap_table()) {
} else {
// There's no stackmap table present. Frame count and size are 0.
_frame_count = 0;
}
}
}
}
};
#endif // SHARE_VM_CLASSFILE_STACKMAPTABLE_HPP