equal
deleted
inserted
replaced
69 } |
69 } |
70 } |
70 } |
71 } |
71 } |
72 #endif |
72 #endif |
73 |
73 |
|
74 void AOTCompiledMethod::oops_do(OopClosure* f) { |
|
75 if (_oop != NULL) { |
|
76 f->do_oop(&_oop); |
|
77 } |
|
78 #if 0 |
|
79 metadata_oops_do(metadata_begin(), metadata_end(), f); |
|
80 #endif |
|
81 } |
|
82 |
74 bool AOTCompiledMethod::do_unloading_oops(address low_boundary, BoolObjectClosure* is_alive, bool unloading_occurred) { |
83 bool AOTCompiledMethod::do_unloading_oops(address low_boundary, BoolObjectClosure* is_alive, bool unloading_occurred) { |
75 return false; |
84 return false; |
76 } |
85 } |
77 |
86 |
78 oop AOTCompiledMethod::oop_at(int index) const { |
87 oop AOTCompiledMethod::oop_at(int index) const { |
150 } |
159 } |
151 meta = ((intptr_t)m) | 1; |
160 meta = ((intptr_t)m) | 1; |
152 *entry = (Metadata*)meta; // Should be atomic on x64 |
161 *entry = (Metadata*)meta; // Should be atomic on x64 |
153 return (Metadata*)m; |
162 return (Metadata*)m; |
154 } |
163 } |
|
164 // need to resolve it here..., patching of GOT need to be CAS or atomic operation. |
|
165 // FIXIT: need methods for debuginfo. |
|
166 // return _method; |
155 } |
167 } |
156 ShouldNotReachHere(); return NULL; |
168 ShouldNotReachHere(); return NULL; |
157 } |
169 } |
158 |
170 |
159 bool AOTCompiledMethod::make_not_entrant_helper(int new_state) { |
171 bool AOTCompiledMethod::make_not_entrant_helper(int new_state) { |
274 if (ic->is_icholder_call()) { |
286 if (ic->is_icholder_call()) { |
275 CompiledICHolder* cichk = ic->cached_icholder(); |
287 CompiledICHolder* cichk = ic->cached_icholder(); |
276 f(cichk->holder_method()); |
288 f(cichk->holder_method()); |
277 f(cichk->holder_klass()); |
289 f(cichk->holder_klass()); |
278 } else { |
290 } else { |
279 // Get Klass* or NULL (if value is -1) from GOT cell of virtual call PLT stub. |
|
280 Metadata* ic_oop = ic->cached_metadata(); |
291 Metadata* ic_oop = ic->cached_metadata(); |
281 if (ic_oop != NULL) { |
292 if (ic_oop != NULL) { |
282 f(ic_oop); |
293 f(ic_oop); |
283 } |
294 } |
284 } |
|
285 } else if (iter.type() == relocInfo::static_call_type || |
|
286 iter.type() == relocInfo::opt_virtual_call_type){ |
|
287 // Check Method* in AOT c2i stub for other calls. |
|
288 Metadata* meta = (Metadata*)nativeLoadGot_at(nativePltCall_at(iter.addr())->plt_c2i_stub())->data(); |
|
289 if (meta != NULL) { |
|
290 f(meta); |
|
291 } |
295 } |
292 } |
296 } |
293 } |
297 } |
294 } |
298 } |
295 |
299 |
326 ttyLocker ttyl; |
330 ttyLocker ttyl; |
327 st->print("%7d ", (int) st->time_stamp().milliseconds()); |
331 st->print("%7d ", (int) st->time_stamp().milliseconds()); |
328 st->print("%4d ", _aot_id); // print compilation number |
332 st->print("%4d ", _aot_id); // print compilation number |
329 st->print(" aot[%2d]", _heap->dso_id()); |
333 st->print(" aot[%2d]", _heap->dso_id()); |
330 // Stubs have _method == NULL |
334 // Stubs have _method == NULL |
331 if (_method == NULL) { |
335 st->print(" %s", (_method == NULL ? _name : _method->name_and_sig_as_C_string())); |
332 st->print(" %s", _name); |
|
333 } else { |
|
334 ResourceMark m; |
|
335 st->print(" %s", _method->name_and_sig_as_C_string()); |
|
336 } |
|
337 if (Verbose) { |
336 if (Verbose) { |
338 st->print(" entry at " INTPTR_FORMAT, p2i(_code)); |
337 st->print(" entry at " INTPTR_FORMAT, p2i(_code)); |
339 } |
338 } |
340 if (msg != NULL) { |
339 if (msg != NULL) { |
341 st->print(" %s", msg); |
340 st->print(" %s", msg); |