Mercurial > hg > truffle
comparison src/share/vm/prims/jvmtiCodeBlobEvents.cpp @ 1616:38e8278318ca
6656830: assert((*p)->is_oop(),"expected an oop while scanning weak refs")
Reviewed-by: dcubed, kvn, twisti
author | never |
---|---|
date | Mon, 21 Jun 2010 14:26:17 -0700 |
parents | c18cbe5936b8 |
children | 65b0c03b165d |
comparison
equal
deleted
inserted
replaced
1615:ff38d05ea86f | 1616:38e8278318ca |
---|---|
215 | 215 |
216 // Support class to describe a nmethod in the CodeCache | 216 // Support class to describe a nmethod in the CodeCache |
217 | 217 |
218 class nmethodDesc: public CHeapObj { | 218 class nmethodDesc: public CHeapObj { |
219 private: | 219 private: |
220 methodHandle _method; | 220 jmethodID _jmethod_id; |
221 address _code_begin; | 221 address _code_begin; |
222 address _code_end; | 222 address _code_end; |
223 jvmtiAddrLocationMap* _map; | 223 jvmtiAddrLocationMap* _map; |
224 jint _map_length; | 224 jint _map_length; |
225 public: | 225 public: |
226 nmethodDesc(methodHandle method, address code_begin, address code_end, | 226 nmethodDesc(jmethodID jmethod_id, address code_begin, address code_end, |
227 jvmtiAddrLocationMap* map, jint map_length) { | 227 jvmtiAddrLocationMap* map, jint map_length) { |
228 _method = method; | 228 _jmethod_id = jmethod_id; |
229 _code_begin = code_begin; | 229 _code_begin = code_begin; |
230 _code_end = code_end; | 230 _code_end = code_end; |
231 _map = map; | 231 _map = map; |
232 _map_length = map_length; | 232 _map_length = map_length; |
233 } | 233 } |
234 methodHandle method() const { return _method; } | 234 jmethodID jmethod_id() const { return _jmethod_id; } |
235 address code_begin() const { return _code_begin; } | 235 address code_begin() const { return _code_begin; } |
236 address code_end() const { return _code_end; } | 236 address code_end() const { return _code_end; } |
237 jvmtiAddrLocationMap* map() const { return _map; } | 237 jvmtiAddrLocationMap* map() const { return _map; } |
238 jint map_length() const { return _map_length; } | 238 jint map_length() const { return _map_length; } |
239 }; | 239 }; |
321 jvmtiAddrLocationMap* map; | 321 jvmtiAddrLocationMap* map; |
322 jint map_length; | 322 jint map_length; |
323 JvmtiCodeBlobEvents::build_jvmti_addr_location_map(nm, &map, &map_length); | 323 JvmtiCodeBlobEvents::build_jvmti_addr_location_map(nm, &map, &map_length); |
324 | 324 |
325 // record the nmethod details | 325 // record the nmethod details |
326 methodHandle mh(nm->method()); | 326 nmethodDesc* snm = new nmethodDesc(nm->get_and_cache_jmethod_id(), |
327 nmethodDesc* snm = new nmethodDesc(mh, | |
328 nm->code_begin(), | 327 nm->code_begin(), |
329 nm->code_end(), | 328 nm->code_end(), |
330 map, | 329 map, |
331 map_length); | 330 map_length); |
332 _global_nmethods->append(snm); | 331 _global_nmethods->append(snm); |
365 } | 364 } |
366 | 365 |
367 // iterate over the list and post an event for each nmethod | 366 // iterate over the list and post an event for each nmethod |
368 nmethodDesc* nm_desc = collector.first(); | 367 nmethodDesc* nm_desc = collector.first(); |
369 while (nm_desc != NULL) { | 368 while (nm_desc != NULL) { |
370 methodOop method = nm_desc->method()(); | 369 jmethodID mid = nm_desc->jmethod_id(); |
371 jmethodID mid = method->jmethod_id(); | |
372 assert(mid != NULL, "checking"); | 370 assert(mid != NULL, "checking"); |
373 JvmtiExport::post_compiled_method_load(env, mid, | 371 JvmtiExport::post_compiled_method_load(env, mid, |
374 (jint)(nm_desc->code_end() - nm_desc->code_begin()), | 372 (jint)(nm_desc->code_end() - nm_desc->code_begin()), |
375 nm_desc->code_begin(), nm_desc->map_length(), | 373 nm_desc->code_begin(), nm_desc->map_length(), |
376 nm_desc->map()); | 374 nm_desc->map()); |