bytecodeTracer.cpp revision 2062
5023N/A * or visit www.oracle.com if you need additional information or have any
5023N/A#include "precompiled.hpp"
5023N/A#include "interpreter/bytecodeHistogram.hpp"
5023N/A#include "interpreter/bytecodeTracer.hpp"
5023N/A#include "interpreter/bytecodes.hpp"
5023N/A#include "interpreter/interpreter.hpp"
5023N/A#include "interpreter/interpreterRuntime.hpp"
5023N/A#include "memory/resourceArea.hpp"
5023N/A#include "oops/methodDataOop.hpp"
5023N/A#include "oops/methodOop.hpp"
5023N/A#include "runtime/mutexLocker.hpp"
5023N/A int get_index_u1_cpcache() { return get_index_u1() + constantPoolOopDesc::CPCACHE_INDEX_TAG; }
5023N/A int get_index_u2_cpcache() { int i=Bytes::get_native_u2(_next_pc); _next_pc+=2; return i + constantPoolOopDesc::CPCACHE_INDEX_TAG; }
BytecodePrinter() {
_is_wide = false;
if (is_wide()) {
if (Verbose) {
if (is_wide()) {
if (is_wide()) {
return &::std_closure;
void BytecodeTracer::trace(methodHandle method, address bcp, uintptr_t tos, uintptr_t tos2, outputStream* st) {
if (i >= 0 && i < climit) {
goto check_cache_index;
goto check_cache_index;
if (i >= 0 && i < ilimit) {
cp_index = i;
#ifdef ASSERT
i -= CPCACHE_INDEX_TAG;
if (i >= 0 && i < climit) {
goto check_cp_index;
int orig_i = i;
int orig_i = i;
bool has_klass = true;
case JVM_CONSTANT_Methodref:
case JVM_CONSTANT_Fieldref:
case JVM_CONSTANT_NameAndType:
has_klass = false;
if (has_klass) {
st->print_cr(" %d <%s.%s%s%s> ", i, klass->as_C_string(), name->as_C_string(), sep, signature->as_C_string());
switch(code) {
{ align();
for (int i = 0; i < len; i++) {
int first = true;
{ align();
for (int i = 0; i < len; i++) {
bool first = true;
{ int i = get_index_u2_cpcache();
int n = get_index_u1();
{ int i = get_index_u2();