< prev index next >
src/cpu/sparc/vm/sparc.ad
Print this page
@@ -1773,13 +1773,15 @@
int HandlerImpl::emit_exception_handler(CodeBuffer& cbuf) {
Register temp_reg = G3;
AddressLiteral exception_blob(OptoRuntime::exception_blob()->entry_point());
MacroAssembler _masm(&cbuf);
- address base =
- __ start_a_stub(size_exception_handler());
- if (base == NULL) return 0; // CodeBuffer::expand failed
+ address base = __ start_a_stub(size_exception_handler());
+ if (base == NULL) {
+ ciEnv::current()->record_failure("CodeCache is full");
+ return 0; // CodeBuffer::expand failed
+ }
int offset = __ offset();
__ JUMP(exception_blob, temp_reg, 0); // sethi;jmp
__ delayed()->nop();
@@ -1796,13 +1798,15 @@
// at a poll and everything (including G3) can be live.
Register temp_reg = L0;
AddressLiteral deopt_blob(SharedRuntime::deopt_blob()->unpack());
MacroAssembler _masm(&cbuf);
- address base =
- __ start_a_stub(size_deopt_handler());
- if (base == NULL) return 0; // CodeBuffer::expand failed
+ address base = __ start_a_stub(size_deopt_handler());
+ if (base == NULL) {
+ ciEnv::current()->record_failure("CodeCache is full");
+ return 0; // CodeBuffer::expand failed
+ }
int offset = __ offset();
__ save_frame(0);
__ JUMP(deopt_blob, temp_reg, 0); // sethi;jmp
__ delayed()->restore();
@@ -2599,11 +2603,16 @@
emit_call_reloc(cbuf, $meth$$method, relocInfo::opt_virtual_call_type);
} else {
emit_call_reloc(cbuf, $meth$$method, relocInfo::static_call_type);
}
if (_method) { // Emit stub for static call.
- CompiledStaticCall::emit_to_interp_stub(cbuf);
+ address stub = CompiledStaticCall::emit_to_interp_stub(cbuf);
+ // Stub does not fit into scratch buffer if TraceJumps is enabled
+ if (stub == NULL && !(TraceJumps && Compile::current()->in_scratch_emit_size())) {
+ ciEnv::current()->record_failure("CodeCache is full");
+ return;
+ }
}
%}
enc_class Java_Dynamic_Call (method meth) %{ // JAVA DYNAMIC CALL
MacroAssembler _masm(&cbuf);
< prev index next >