Mercurial > hg > graal-jvmci-8
comparison src/share/vm/ci/ciEnv.cpp @ 780:c96bf21b756f
6788527: Server vm intermittently fails with assertion "live value must not be garbage" with fastdebug bits
Summary: Cache Jvmti and DTrace flags used by Compiler.
Reviewed-by: never
author | kvn |
---|---|
date | Fri, 08 May 2009 10:44:20 -0700 |
parents | ad8c8ca4ab0f |
children | bd02caa94611 |
comparison
equal
deleted
inserted
replaced
779:d0e0d6d824d8 | 780:c96bf21b756f |
---|---|
166 } | 166 } |
167 | 167 |
168 ciEnv::~ciEnv() { | 168 ciEnv::~ciEnv() { |
169 CompilerThread* current_thread = CompilerThread::current(); | 169 CompilerThread* current_thread = CompilerThread::current(); |
170 current_thread->set_env(NULL); | 170 current_thread->set_env(NULL); |
171 } | |
172 | |
173 // ------------------------------------------------------------------ | |
174 // Cache Jvmti state | |
175 void ciEnv::cache_jvmti_state() { | |
176 VM_ENTRY_MARK; | |
177 // Get Jvmti capabilities under lock to get consistant values. | |
178 MutexLocker mu(JvmtiThreadState_lock); | |
179 _jvmti_can_hotswap_or_post_breakpoint = JvmtiExport::can_hotswap_or_post_breakpoint(); | |
180 _jvmti_can_examine_or_deopt_anywhere = JvmtiExport::can_examine_or_deopt_anywhere(); | |
181 _jvmti_can_access_local_variables = JvmtiExport::can_access_local_variables(); | |
182 _jvmti_can_post_exceptions = JvmtiExport::can_post_exceptions(); | |
183 } | |
184 | |
185 // ------------------------------------------------------------------ | |
186 // Cache DTrace flags | |
187 void ciEnv::cache_dtrace_flags() { | |
188 // Need lock? | |
189 _dtrace_extended_probes = ExtendedDTraceProbes; | |
190 if (_dtrace_extended_probes) { | |
191 _dtrace_monitor_probes = true; | |
192 _dtrace_method_probes = true; | |
193 _dtrace_alloc_probes = true; | |
194 } else { | |
195 _dtrace_monitor_probes = DTraceMonitorProbes; | |
196 _dtrace_method_probes = DTraceMethodProbes; | |
197 _dtrace_alloc_probes = DTraceAllocProbes; | |
198 } | |
171 } | 199 } |
172 | 200 |
173 // ------------------------------------------------------------------ | 201 // ------------------------------------------------------------------ |
174 // helper for lazy exception creation | 202 // helper for lazy exception creation |
175 ciInstance* ciEnv::get_or_create_exception(jobject& handle, symbolHandle name) { | 203 ciInstance* ciEnv::get_or_create_exception(jobject& handle, symbolHandle name) { |
808 | 836 |
809 // Prevent SystemDictionary::add_to_hierarchy from running | 837 // Prevent SystemDictionary::add_to_hierarchy from running |
810 // and invalidating our dependencies until we install this method. | 838 // and invalidating our dependencies until we install this method. |
811 MutexLocker ml(Compile_lock); | 839 MutexLocker ml(Compile_lock); |
812 | 840 |
813 if (log() != NULL) { | 841 // Change in Jvmti state may invalidate compilation. |
814 // Log the dependencies which this compilation declares. | 842 if (!failing() && |
815 dependencies()->log_all_dependencies(); | 843 ( (!jvmti_can_hotswap_or_post_breakpoint() && |
816 } | 844 JvmtiExport::can_hotswap_or_post_breakpoint()) || |
817 | 845 (!jvmti_can_examine_or_deopt_anywhere() && |
818 // Encode the dependencies now, so we can check them right away. | 846 JvmtiExport::can_examine_or_deopt_anywhere()) || |
819 dependencies()->encode_content_bytes(); | 847 (!jvmti_can_access_local_variables() && |
820 | 848 JvmtiExport::can_access_local_variables()) || |
821 // Check for {class loads, evolution, breakpoints} during compilation | 849 (!jvmti_can_post_exceptions() && |
822 check_for_system_dictionary_modification(target); | 850 JvmtiExport::can_post_exceptions()) )) { |
851 record_failure("Jvmti state change invalidated dependencies"); | |
852 } | |
853 | |
854 // Change in DTrace flags may invalidate compilation. | |
855 if (!failing() && | |
856 ( (!dtrace_extended_probes() && ExtendedDTraceProbes) || | |
857 (!dtrace_method_probes() && DTraceMethodProbes) || | |
858 (!dtrace_alloc_probes() && DTraceAllocProbes) )) { | |
859 record_failure("DTrace flags change invalidated dependencies"); | |
860 } | |
861 | |
862 if (!failing()) { | |
863 if (log() != NULL) { | |
864 // Log the dependencies which this compilation declares. | |
865 dependencies()->log_all_dependencies(); | |
866 } | |
867 | |
868 // Encode the dependencies now, so we can check them right away. | |
869 dependencies()->encode_content_bytes(); | |
870 | |
871 // Check for {class loads, evolution, breakpoints} during compilation | |
872 check_for_system_dictionary_modification(target); | |
873 } | |
823 | 874 |
824 methodHandle method(THREAD, target->get_methodOop()); | 875 methodHandle method(THREAD, target->get_methodOop()); |
825 | 876 |
826 if (failing()) { | 877 if (failing()) { |
827 // While not a true deoptimization, it is a preemptive decompile. | 878 // While not a true deoptimization, it is a preemptive decompile. |