8304387: Fix positions of shared static stubs / trampolines

Reviewed-by: adinn, fyang
(cherry picked from commit 1c04686cd6)
This commit is contained in:
Xiaolin Zheng
2023-03-21 11:27:54 +00:00
committed by Vitaly Provodin
parent 016d719397
commit fde0fc8dff
12 changed files with 20 additions and 23 deletions

View File

@@ -70,7 +70,6 @@ static bool emit_shared_trampolines(CodeBuffer* cb, CodeBuffer::SharedTrampoline
assert(requests->number_of_entries() >= 1, "at least one");
const int total_requested_size = MacroAssembler::max_trampoline_stub_size() * requests->number_of_entries();
if (cb->stubs()->maybe_expand_to_ensure_remaining(total_requested_size) && cb->blob() == NULL) {
ciEnv::current()->record_failure("CodeCache is full");
return false;
}

View File

@@ -28,9 +28,7 @@
private:
void pd_initialize() {}
bool pd_finalize_stubs() {
if (_finalize_stubs) {
Unimplemented();
}
Unimplemented();
return true;
}

View File

@@ -29,9 +29,7 @@
private:
void pd_initialize() {}
bool pd_finalize_stubs() {
if (_finalize_stubs) {
Unimplemented();
}
Unimplemented();
return true;
}

View File

@@ -72,7 +72,6 @@ static bool emit_shared_trampolines(CodeBuffer* cb, CodeBuffer::SharedTrampoline
assert(requests->number_of_entries() >= 1, "at least one");
const int total_requested_size = MacroAssembler::max_trampoline_stub_size() * requests->number_of_entries();
if (cb->stubs()->maybe_expand_to_ensure_remaining(total_requested_size) && cb->blob() == NULL) {
ciEnv::current()->record_failure("CodeCache is full");
return false;
}

View File

@@ -29,9 +29,7 @@
private:
void pd_initialize() {}
bool pd_finalize_stubs() {
if (_finalize_stubs) {
Unimplemented();
}
Unimplemented();
return true;
}

View File

@@ -29,9 +29,7 @@
private:
void pd_initialize() {}
bool pd_finalize_stubs() {
if (_finalize_stubs) {
Unimplemented();
}
Unimplemented();
return true;
}
public:

View File

@@ -1009,11 +1009,13 @@ void CodeBuffer::log_section_sizes(const char* name) {
}
}
void CodeBuffer::finalize_stubs() {
if (!pd_finalize_stubs()) {
return;
bool CodeBuffer::finalize_stubs() {
if (_finalize_stubs && !pd_finalize_stubs()) {
// stub allocation failure
return false;
}
_finalize_stubs = false;
return true;
}
void CodeBuffer::shared_stub_to_interp_for(ciMethod* callee, csize_t call_offset) {

View File

@@ -715,7 +715,7 @@ class CodeBuffer: public StackObj DEBUG_ONLY(COMMA private Scrubber) {
void log_section_sizes(const char* name);
// Make a set of stubs final. It can create/optimize stubs.
void finalize_stubs();
bool finalize_stubs();
// Request for a shared stub to the interpreter
void shared_stub_to_interp_for(ciMethod* callee, csize_t call_offset);

View File

@@ -50,7 +50,6 @@ bool emit_shared_stubs_to_interp(CodeBuffer* cb, SharedStubToInterpRequests* sha
for (int i = 0; i < shared_stub_to_interp_requests->length();) {
address stub = __ start_a_stub(CompiledStaticCall::to_interp_stub_size());
if (stub == NULL) {
ciEnv::current()->record_failure("CodeCache is full");
return false;
}

View File

@@ -286,6 +286,11 @@ void Compilation::emit_code_epilog(LIR_Assembler* assembler) {
CodeOffsets* code_offsets = assembler->offsets();
if (!code()->finalize_stubs()) {
bailout("CodeCache is full");
return;
}
// generate code or slow cases
assembler->emit_slow_case_stubs();
CHECK_BAILOUT();

View File

@@ -1112,10 +1112,6 @@ void ciEnv::register_method(ciMethod* target,
}
#endif
if (!failing()) {
code_buffer->finalize_stubs();
}
if (failing()) {
// While not a true deoptimization, it is a preemptive decompile.
MethodData* mdo = method()->method_data();

View File

@@ -1746,6 +1746,11 @@ void PhaseOutput::fill_buffer(CodeBuffer* cb, uint* blk_starts) {
}
#endif
if (!cb->finalize_stubs()) {
C->record_failure("CodeCache is full");
return;
}
BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
bs->emit_stubs(*cb);
if (C->failing()) return;