comparison src/share/vm/runtime/sharedRuntime.cpp @ 4944:09d00c18e323

7145537: minor tweaks to LogEvents Reviewed-by: kvn, twisti
author never
date Wed, 15 Feb 2012 10:12:55 -0800
parents 0382d2b469b2
children 33df1aeaebbf d2a62e0f25eb
comparison
equal deleted inserted replaced
4943:80107dc493db 4944:09d00c18e323
802 // and processed. 802 // and processed.
803 // For stack overflow in deoptimization blob, cleanup thread. 803 // For stack overflow in deoptimization blob, cleanup thread.
804 if (thread->deopt_mark() != NULL) { 804 if (thread->deopt_mark() != NULL) {
805 Deoptimization::cleanup_deopt_info(thread, NULL); 805 Deoptimization::cleanup_deopt_info(thread, NULL);
806 } 806 }
807 Events::log_exception(thread, "StackOverflowError at " INTPTR_FORMAT, pc);
807 return StubRoutines::throw_StackOverflowError_entry(); 808 return StubRoutines::throw_StackOverflowError_entry();
808 } 809 }
809 810
810 case IMPLICIT_NULL: { 811 case IMPLICIT_NULL: {
811 if (VtableStubs::contains(pc)) { 812 if (VtableStubs::contains(pc)) {
818 // If vt_stub is NULL, then return NULL to signal handler to report the SEGV error. 819 // If vt_stub is NULL, then return NULL to signal handler to report the SEGV error.
819 if (vt_stub == NULL) return NULL; 820 if (vt_stub == NULL) return NULL;
820 821
821 if (vt_stub->is_abstract_method_error(pc)) { 822 if (vt_stub->is_abstract_method_error(pc)) {
822 assert(!vt_stub->is_vtable_stub(), "should never see AbstractMethodErrors from vtable-type VtableStubs"); 823 assert(!vt_stub->is_vtable_stub(), "should never see AbstractMethodErrors from vtable-type VtableStubs");
824 Events::log_exception(thread, "AbstractMethodError at " INTPTR_FORMAT, pc);
823 return StubRoutines::throw_AbstractMethodError_entry(); 825 return StubRoutines::throw_AbstractMethodError_entry();
824 } else { 826 } else {
827 Events::log_exception(thread, "NullPointerException at vtable entry " INTPTR_FORMAT, pc);
825 return StubRoutines::throw_NullPointerException_at_call_entry(); 828 return StubRoutines::throw_NullPointerException_at_call_entry();
826 } 829 }
827 } else { 830 } else {
828 CodeBlob* cb = CodeCache::find_blob(pc); 831 CodeBlob* cb = CodeCache::find_blob(pc);
829 832
836 // 3. Implict null exception in nmethod 839 // 3. Implict null exception in nmethod
837 840
838 if (!cb->is_nmethod()) { 841 if (!cb->is_nmethod()) {
839 guarantee(cb->is_adapter_blob() || cb->is_method_handles_adapter_blob(), 842 guarantee(cb->is_adapter_blob() || cb->is_method_handles_adapter_blob(),
840 "exception happened outside interpreter, nmethods and vtable stubs (1)"); 843 "exception happened outside interpreter, nmethods and vtable stubs (1)");
844 Events::log_exception(thread, "NullPointerException in code blob at " INTPTR_FORMAT, pc);
841 // There is no handler here, so we will simply unwind. 845 // There is no handler here, so we will simply unwind.
842 return StubRoutines::throw_NullPointerException_at_call_entry(); 846 return StubRoutines::throw_NullPointerException_at_call_entry();
843 } 847 }
844 848
845 // Otherwise, it's an nmethod. Consult its exception handlers. 849 // Otherwise, it's an nmethod. Consult its exception handlers.
847 if (nm->inlinecache_check_contains(pc)) { 851 if (nm->inlinecache_check_contains(pc)) {
848 // exception happened inside inline-cache check code 852 // exception happened inside inline-cache check code
849 // => the nmethod is not yet active (i.e., the frame 853 // => the nmethod is not yet active (i.e., the frame
850 // is not set up yet) => use return address pushed by 854 // is not set up yet) => use return address pushed by
851 // caller => don't push another return address 855 // caller => don't push another return address
856 Events::log_exception(thread, "NullPointerException in IC check " INTPTR_FORMAT, pc);
852 return StubRoutines::throw_NullPointerException_at_call_entry(); 857 return StubRoutines::throw_NullPointerException_at_call_entry();
853 } 858 }
854 859
855 #ifndef PRODUCT 860 #ifndef PRODUCT
856 _implicit_null_throws++; 861 _implicit_null_throws++;