comparison src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp @ 2007:5ddfcf4b079e

7003554: (tiered) assert(is_null_object() || handle() != NULL) failed: cannot embed null pointer Summary: C1 with profiling doesn't check whether the MDO has been really allocated, which can silently fail if the perm gen is full. The solution is to check if the allocation failed and bailout out of inlining or compilation. Reviewed-by: kvn, never
author iveresov
date Thu, 02 Dec 2010 17:21:12 -0800
parents ac637b7220d1
children 7601ab0e1e33
comparison
equal deleted inserted replaced
2006:bbefa3ca1543 2007:5ddfcf4b079e
2417 } 2417 }
2418 2418
2419 2419
2420 void LIR_Assembler::setup_md_access(ciMethod* method, int bci, 2420 void LIR_Assembler::setup_md_access(ciMethod* method, int bci,
2421 ciMethodData*& md, ciProfileData*& data, int& mdo_offset_bias) { 2421 ciMethodData*& md, ciProfileData*& data, int& mdo_offset_bias) {
2422 md = method->method_data(); 2422 md = method->method_data_or_null();
2423 if (md == NULL) { 2423 assert(md != NULL, "Sanity");
2424 bailout("out of memory building methodDataOop");
2425 return;
2426 }
2427 data = md->bci_to_data(bci); 2424 data = md->bci_to_data(bci);
2428 assert(data != NULL, "need data for checkcast"); 2425 assert(data != NULL, "need data for checkcast");
2429 assert(data->is_ReceiverTypeData(), "need ReceiverTypeData for type check"); 2426 assert(data->is_ReceiverTypeData(), "need ReceiverTypeData for type check");
2430 if (!Assembler::is_simm13(md->byte_offset_of_slot(data, DataLayout::header_offset()) + data->size_in_bytes())) { 2427 if (!Assembler::is_simm13(md->byte_offset_of_slot(data, DataLayout::header_offset()) + data->size_in_bytes())) {
2431 // The offset is large so bias the mdo by the base of the slot so 2428 // The offset is large so bias the mdo by the base of the slot so
2819 void LIR_Assembler::emit_profile_call(LIR_OpProfileCall* op) { 2816 void LIR_Assembler::emit_profile_call(LIR_OpProfileCall* op) {
2820 ciMethod* method = op->profiled_method(); 2817 ciMethod* method = op->profiled_method();
2821 int bci = op->profiled_bci(); 2818 int bci = op->profiled_bci();
2822 2819
2823 // Update counter for all call types 2820 // Update counter for all call types
2824 ciMethodData* md = method->method_data(); 2821 ciMethodData* md = method->method_data_or_null();
2825 if (md == NULL) { 2822 assert(md != NULL, "Sanity");
2826 bailout("out of memory building methodDataOop");
2827 return;
2828 }
2829 ciProfileData* data = md->bci_to_data(bci); 2823 ciProfileData* data = md->bci_to_data(bci);
2830 assert(data->is_CounterData(), "need CounterData for calls"); 2824 assert(data->is_CounterData(), "need CounterData for calls");
2831 assert(op->mdo()->is_single_cpu(), "mdo must be allocated"); 2825 assert(op->mdo()->is_single_cpu(), "mdo must be allocated");
2832 Register mdo = op->mdo()->as_register(); 2826 Register mdo = op->mdo()->as_register();
2833 #ifdef _LP64 2827 #ifdef _LP64