Mercurial > hg > truffle
comparison src/share/vm/code/nmethod.cpp @ 14265:3e2b76368121
Merge
author | morris |
---|---|
date | Fri, 17 Jan 2014 10:43:43 -0800 |
parents | 3aaa4b9966f6 |
children | e6195383bcaf abec000618bf |
comparison
equal
deleted
inserted
replaced
14256:99331f31a971 | 14265:3e2b76368121 |
---|---|
2159 return NULL; | 2159 return NULL; |
2160 } | 2160 } |
2161 } | 2161 } |
2162 | 2162 |
2163 | 2163 |
2164 bool nmethod::check_all_dependencies() { | 2164 void nmethod::check_all_dependencies(DepChange& changes) { |
2165 bool found_check = false; | 2165 // Checked dependencies are allocated into this ResourceMark |
2166 // wholesale check of all dependencies | 2166 ResourceMark rm; |
2167 for (Dependencies::DepStream deps(this); deps.next(); ) { | 2167 |
2168 if (deps.check_dependency() != NULL) { | 2168 // Turn off dependency tracing while actually testing dependencies. |
2169 found_check = true; | 2169 NOT_PRODUCT( FlagSetting fs(TraceDependencies, false) ); |
2170 NOT_DEBUG(break); | 2170 |
2171 } | 2171 // 'dep_signature_buffers' caches already checked dependencies. |
2172 } | 2172 DependencySignatureBuffer dep_signature_buffers; |
2173 return found_check; // tell caller if we found anything | 2173 |
2174 // Iterate over live nmethods and check dependencies of all nmethods that are not | |
2175 // marked for deoptimization. A particular dependency is only checked once. | |
2176 for(nmethod* nm = CodeCache::alive_nmethod(CodeCache::first()); nm != NULL; nm = CodeCache::alive_nmethod(CodeCache::next(nm))) { | |
2177 if (!nm->is_marked_for_deoptimization()) { | |
2178 for (Dependencies::DepStream deps(nm); deps.next(); ) { | |
2179 // Construct abstraction of a dependency. | |
2180 const DependencySignature* current_sig = new DependencySignature(deps); | |
2181 // Determine if 'deps' is already checked. If it is not checked, | |
2182 // 'add_if_missing()' adds the dependency signature and returns | |
2183 // false. | |
2184 if (!dep_signature_buffers.add_if_missing(*current_sig)) { | |
2185 if (deps.check_dependency() != NULL) { | |
2186 // Dependency checking failed. Print out information about the failed | |
2187 // dependency and finally fail with an assert. We can fail here, since | |
2188 // dependency checking is never done in a product build. | |
2189 ResourceMark rm; | |
2190 changes.print(); | |
2191 nm->print(); | |
2192 nm->print_dependencies(); | |
2193 assert(false, "Should have been marked for deoptimization"); | |
2194 } | |
2195 } | |
2196 } | |
2197 } | |
2198 } | |
2174 } | 2199 } |
2175 | 2200 |
2176 bool nmethod::check_dependency_on(DepChange& changes) { | 2201 bool nmethod::check_dependency_on(DepChange& changes) { |
2177 // What has happened: | 2202 // What has happened: |
2178 // 1) a new class dependee has been added | 2203 // 1) a new class dependee has been added |