Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 23 additions & 23 deletions src/hotspot/share/code/codeBlob.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -690,22 +690,22 @@ void CodeBlob::verify() {
}
}

void CodeBlob::print_on_v(outputStream* st) const {
void CodeBlob::print_on(outputStream* st) const {
vptr()->print_on(this, st);
}

void CodeBlob::print() const { print_on_v(tty); }
void CodeBlob::print() const { print_on(tty); }

void CodeBlob::print_value_on_v(outputStream* st) const {
vptr()->print_value_on(this, st);;
void CodeBlob::print_value_on(outputStream* st) const {
vptr()->print_value_on(this, st);
}

void CodeBlob::print_on_nv(outputStream* st) const {
void CodeBlob::print_on_impl(outputStream* st) const {
st->print_cr("[CodeBlob (" INTPTR_FORMAT ")]", p2i(this));
st->print_cr("Framesize: %d", _frame_size);
}

void CodeBlob::print_value_on_nv(outputStream* st) const {
void CodeBlob::print_value_on_impl(outputStream* st) const {
st->print_cr("[CodeBlob]");
}

Expand Down Expand Up @@ -776,60 +776,60 @@ void CodeBlob::dump_for_addr(address addr, outputStream* st, bool verbose) const
// verbose is only ever true when called from findpc in debug.cpp
nm->print_nmethod(true);
} else {
nm->print_on_v(st);
nm->print_on(st);
}
return;
}
st->print_cr(INTPTR_FORMAT " is at code_begin+%d in ", p2i(addr), (int)(addr - code_begin()));
print_on_v(st);
print_on(st);
}

void BufferBlob::print_on(outputStream* st) const {
RuntimeBlob::print_on_nv(st);
print_value_on(st);
void BufferBlob::print_on_impl(outputStream* st) const {
RuntimeBlob::print_on_impl(st);
print_value_on_impl(st);
}

void BufferBlob::print_value_on(outputStream* st) const {
void BufferBlob::print_value_on_impl(outputStream* st) const {
st->print_cr("BufferBlob (" INTPTR_FORMAT ") used for %s", p2i(this), name());
}

void RuntimeStub::print_on(outputStream* st) const {
void RuntimeStub::print_on_impl(outputStream* st) const {
ttyLocker ttyl;
RuntimeBlob::print_on_nv(st);
RuntimeBlob::print_on_impl(st);
st->print("Runtime Stub (" INTPTR_FORMAT "): ", p2i(this));
st->print_cr("%s", name());
Disassembler::decode((RuntimeBlob*)this, st);
}

void RuntimeStub::print_value_on(outputStream* st) const {
void RuntimeStub::print_value_on_impl(outputStream* st) const {
st->print("RuntimeStub (" INTPTR_FORMAT "): ", p2i(this)); st->print("%s", name());
}

void SingletonBlob::print_on(outputStream* st) const {
void SingletonBlob::print_on_impl(outputStream* st) const {
ttyLocker ttyl;
RuntimeBlob::print_on_nv(st);
RuntimeBlob::print_on_impl(st);
st->print_cr("%s", name());
Disassembler::decode((RuntimeBlob*)this, st);
}

void SingletonBlob::print_value_on(outputStream* st) const {
void SingletonBlob::print_value_on_impl(outputStream* st) const {
st->print_cr("%s", name());
}

void DeoptimizationBlob::print_value_on(outputStream* st) const {
void DeoptimizationBlob::print_value_on_impl(outputStream* st) const {
st->print_cr("Deoptimization (frame not available)");
}

void UpcallStub::print_on(outputStream* st) const {
RuntimeBlob::print_on_nv(st);
print_value_on(st);
void UpcallStub::print_on_impl(outputStream* st) const {
RuntimeBlob::print_on_impl(st);
print_value_on_impl(st);
st->print_cr("Frame data offset: %d", (int) _frame_data_offset);
oop recv = JNIHandles::resolve(_receiver);
st->print("Receiver MH=");
recv->print_on(st);
Disassembler::decode((RuntimeBlob*)this, st);
}

void UpcallStub::print_value_on(outputStream* st) const {
void UpcallStub::print_value_on_impl(outputStream* st) const {
st->print_cr("UpcallStub (" INTPTR_FORMAT ") used for %s", p2i(this), name());
}
78 changes: 40 additions & 38 deletions src/hotspot/share/code/codeBlob.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,13 +130,13 @@ class CodeBlob {
DbgStrings _dbg_strings;
#endif

struct Vptr {
virtual void print_on(const CodeBlob* instance, outputStream* st) const {
instance->print_on_nv(st);
}
virtual void print_value_on(const CodeBlob* instance, outputStream* st) const {
instance->print_value_on_nv(st);
}
void print_on_impl(outputStream* st) const;
void print_value_on_impl(outputStream* st) const;

class Vptr {
public:
virtual void print_on(const CodeBlob* instance, outputStream* st) const = 0;
virtual void print_value_on(const CodeBlob* instance, outputStream* st) const = 0;
};

const Vptr* vptr() const;
Expand Down Expand Up @@ -183,7 +183,7 @@ class CodeBlob {
// Casting
nmethod* as_nmethod_or_null() const { return is_nmethod() ? (nmethod*) this : nullptr; }
nmethod* as_nmethod() const { assert(is_nmethod(), "must be nmethod"); return (nmethod*) this; }
CodeBlob* as_codeblob_or_null() const { return (CodeBlob*) this; }
CodeBlob* as_codeblob() const { return (CodeBlob*) this; }
UpcallStub* as_upcall_stub() const { assert(is_upcall_stub(), "must be upcall stub"); return (UpcallStub*) this; }
RuntimeStub* as_runtime_stub() const { assert(is_runtime_stub(), "must be runtime blob"); return (RuntimeStub*) this; }

Expand Down Expand Up @@ -253,10 +253,10 @@ class CodeBlob {
// Debugging
void verify();
void print() const;
void print_on_v(outputStream* st) const;
void print_value_on_v(outputStream* st) const;
void print_on_nv(outputStream* st) const;
void print_value_on_nv(outputStream* st) const;
void print_on(outputStream* st) const;
void print_value_on(outputStream* st) const;
// void print_on_impl(outputStream* st) const;
// void print_value_on_impl(outputStream* st) const;

void dump_for_addr(address addr, outputStream* st, bool verbose) const;
void print_code_on(outputStream* st);
Expand Down Expand Up @@ -305,6 +305,9 @@ class RuntimeBlob : public CodeBlob {

// Deal with Disassembler, VTune, Forte, JvmtiExport, MemoryService.
static void trace_new_stub(RuntimeBlob* blob, const char* name1, const char* name2 = "");

class Vptr : public CodeBlob::Vptr {
};
Comment on lines +306 to +308
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was this needed for some compiler? Or is it to be more explicit about the type hierarchy?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you, @xmas92, for review and suggestions.

It is second (explicit type hierarchy). I think it should be explicitly declared (even empty) because it is referenced in subclasses to avoid confusion. And it could be useful in a future if we need other virtual methods.

Local build with gcc on Linux passed without it but I did not try to build on other platforms.

};

class WhiteBox;
Expand Down Expand Up @@ -333,15 +336,15 @@ class BufferBlob: public RuntimeBlob {

static void free(BufferBlob* buf);

void print_on(outputStream* st) const;
void print_value_on(outputStream* st) const;
void print_on_impl(outputStream* st) const;
void print_value_on_impl(outputStream* st) const;

class Vptr : public CodeBlob::Vptr {
class Vptr : public RuntimeBlob::Vptr {
void print_on(const CodeBlob* instance, outputStream* st) const override {
((const BufferBlob*)instance)->print_on(st);
((const BufferBlob*)instance)->print_on_impl(st);
}
void print_value_on(const CodeBlob* instance, outputStream* st) const override {
((const BufferBlob*)instance)->print_value_on(st);
((const BufferBlob*)instance)->print_value_on_impl(st);
}
};

Expand Down Expand Up @@ -419,17 +422,17 @@ class RuntimeStub: public RuntimeBlob {

static void free(RuntimeStub* stub) { RuntimeBlob::free(stub); }

address entry_point() const { return code_begin(); }
address entry_point() const { return code_begin(); }

void print_on(outputStream* st) const;
void print_value_on(outputStream* st) const;
void print_on_impl(outputStream* st) const;
void print_value_on_impl(outputStream* st) const;

class Vptr : public CodeBlob::Vptr {
class Vptr : public RuntimeBlob::Vptr {
void print_on(const CodeBlob* instance, outputStream* st) const override {
instance->as_runtime_stub()->print_on(st);
instance->as_runtime_stub()->print_on_impl(st);
}
void print_value_on(const CodeBlob* instance, outputStream* st) const override {
instance->as_runtime_stub()->print_value_on(st);
instance->as_runtime_stub()->print_value_on_impl(st);
}
};

Expand Down Expand Up @@ -461,15 +464,15 @@ class SingletonBlob: public RuntimeBlob {

address entry_point() { return code_begin(); }

void print_on(outputStream* st) const;
void print_value_on(outputStream* st) const;
void print_on_impl(outputStream* st) const;
void print_value_on_impl(outputStream* st) const;

class Vptr : public CodeBlob::Vptr {
class Vptr : public RuntimeBlob::Vptr {
void print_on(const CodeBlob* instance, outputStream* st) const override {
((const SingletonBlob*)instance)->print_on(st);
((const SingletonBlob*)instance)->print_on_impl(st);
}
void print_value_on(const CodeBlob* instance, outputStream* st) const override {
((const SingletonBlob*)instance)->print_value_on(st);
((const SingletonBlob*)instance)->print_value_on_impl(st);
}
};

Expand Down Expand Up @@ -548,11 +551,11 @@ class DeoptimizationBlob: public SingletonBlob {
address implicit_exception_uncommon_trap() const { return code_begin() + _implicit_exception_uncommon_trap_offset; }
#endif // INCLUDE_JVMCI

void print_value_on(outputStream* st) const;
void print_value_on_impl(outputStream* st) const;

class Vptr : public CodeBlob::Vptr {
class Vptr : public SingletonBlob::Vptr {
void print_value_on(const CodeBlob* instance, outputStream* st) const override {
((const DeoptimizationBlob*)instance)->print_value_on(st);
((const DeoptimizationBlob*)instance)->print_value_on_impl(st);
}
};

Expand Down Expand Up @@ -665,23 +668,22 @@ class UpcallStub: public RuntimeBlob {

static void free(UpcallStub* blob);

jobject receiver() { return _receiver; }
ByteSize frame_data_offset() { return _frame_data_offset; }
jobject receiver() { return _receiver; }

JavaFrameAnchor* jfa_for_frame(const frame& frame) const;

// GC support
void oops_do(OopClosure* f, const frame& frame);

void print_on(outputStream* st) const;
void print_value_on(outputStream* st) const;
void print_on_impl(outputStream* st) const;
void print_value_on_impl(outputStream* st) const;

class Vptr : public CodeBlob::Vptr {
class Vptr : public RuntimeBlob::Vptr {
void print_on(const CodeBlob* instance, outputStream* st) const override {
instance->as_upcall_stub()->print_on(st);
instance->as_upcall_stub()->print_on_impl(st);
}
void print_value_on(const CodeBlob* instance, outputStream* st) const override {
instance->as_upcall_stub()->print_value_on(st);
instance->as_upcall_stub()->print_value_on_impl(st);
}
};

Expand Down
2 changes: 1 addition & 1 deletion src/hotspot/share/code/dependencies.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -878,7 +878,7 @@ void Dependencies::DepStream::print_dependency(outputStream* st, Klass* witness,
if (verbose) {
if (_code != nullptr) {
st->print(" code: ");
_code->print_value_on_v(st);
_code->print_value_on(st);
st->cr();
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/hotspot/share/code/dependencyContext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ void DependencyContext::mark_dependent_nmethods(DeoptimizationScope* deopt_scope
LogStream ls(&lt);
ls.print_cr("Marked for deoptimization");
changes.print_on(&ls);
nm->print_on_v(&ls);
nm->print_on(&ls);
nm->print_dependencies_on(&ls);
}
deopt_scope->mark(nm, !changes.is_call_site_change());
Expand Down Expand Up @@ -218,7 +218,7 @@ void DependencyContext::print_dependent_nmethods(bool verbose) {
nmethod* nm = b->get_nmethod();
tty->print("[%d] { ", idx++);
if (!verbose) {
nm->print_on(tty, "nmethod");
nm->print_on_with_msg(tty, "nmethod");
tty->print_cr(" } ");
} else {
nm->print();
Expand Down
20 changes: 10 additions & 10 deletions src/hotspot/share/code/nmethod.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -952,7 +952,7 @@ address nmethod::continuation_for_implicit_exception(address pc, bool for_div0_c
// Keep tty output consistent. To avoid ttyLocker, we buffer in stream, and print all at once.
stringStream ss;
ss.print_cr("implicit exception happened at " INTPTR_FORMAT, p2i(pc));
print_on_v(&ss);
print_on(&ss);
method()->print_codes_on(&ss);
print_code_on(&ss);
print_pcs_on(&ss);
Expand Down Expand Up @@ -1619,7 +1619,7 @@ void nmethod::log_new_nmethod() const {


// Print out more verbose output usually for a newly created nmethod.
void nmethod::print_on(outputStream* st, const char* msg) const {
void nmethod::print_on_with_msg(outputStream* st, const char* msg) const {
if (st != nullptr) {
ttyLocker ttyl;
if (WizardMode) {
Expand Down Expand Up @@ -1971,7 +1971,7 @@ void nmethod::log_state_change() const {

CompileTask::print_ul(this, "made not entrant");
if (PrintCompilation) {
print_on(tty, "made not entrant");
print_on_with_msg(tty, "made not entrant");
}
}

Expand Down Expand Up @@ -3029,7 +3029,7 @@ void nmethod::verify_scopes() {
// -----------------------------------------------------------------------------
// Printing operations

void nmethod::print_on(outputStream* st) const {
void nmethod::print_on_impl(outputStream* st) const {
ResourceMark rm;

st->print("Compiled method ");
Expand All @@ -3044,7 +3044,7 @@ void nmethod::print_on(outputStream* st) const {
st->print("(n/a) ");
}

print_on(st, nullptr);
print_on_with_msg(st, nullptr);

if (WizardMode) {
st->print("((nmethod*) " INTPTR_FORMAT ") ", p2i(this));
Expand Down Expand Up @@ -3395,7 +3395,7 @@ void nmethod::decode2(outputStream* ost) const {
#endif

st->cr();
this->print_on_v(st);
this->print_on(st);
st->cr();

#if defined(SUPPORT_ASSEMBLY)
Expand Down Expand Up @@ -3944,12 +3944,12 @@ address nmethod::call_instruction_address(address pc) const {
return nullptr;
}

void nmethod::print_value_on_impl(outputStream* st) const {
st->print_cr("nmethod");
#if defined(SUPPORT_DATA_STRUCTS)
void nmethod::print_value_on(outputStream* st) const {
st->print("nmethod");
print_on(st, nullptr);
}
print_on_with_msg(st, nullptr);
#endif
}

#ifndef PRODUCT

Expand Down
Loading