comparison src/share/vm/runtime/vframe_hp.cpp @ 818:b109e761e927

6837472: com/sun/jdi/MonitorFrameInfo.java fails with AggressiveOpts in 6u14 Summary: Disable escape analysis when jvmti/debugger is used. Add support for EA ibto SA. Reviewed-by: never
author kvn
date Tue, 09 Jun 2009 16:19:10 -0700
parents d1605aabd0a1
children bd02caa94611 9987d9d5eb0e
comparison
equal deleted inserted replaced
793:eacd97c88873 818:b109e761e927
188 // traces and tools as well 188 // traces and tools as well
189 GrowableArray<MonitorInfo*> *monitors = new GrowableArray<MonitorInfo*>(1); 189 GrowableArray<MonitorInfo*> *monitors = new GrowableArray<MonitorInfo*>(1);
190 // Casting away const 190 // Casting away const
191 frame& fr = (frame&) _fr; 191 frame& fr = (frame&) _fr;
192 MonitorInfo* info = new MonitorInfo(fr.compiled_synchronized_native_monitor_owner(nm), 192 MonitorInfo* info = new MonitorInfo(fr.compiled_synchronized_native_monitor_owner(nm),
193 fr.compiled_synchronized_native_monitor(nm), false); 193 fr.compiled_synchronized_native_monitor(nm), false, false);
194 monitors->push(info); 194 monitors->push(info);
195 return monitors; 195 return monitors;
196 } 196 }
197 GrowableArray<MonitorValue*>* monitors = scope()->monitors(); 197 GrowableArray<MonitorValue*>* monitors = scope()->monitors();
198 if (monitors == NULL) { 198 if (monitors == NULL) {
199 return new GrowableArray<MonitorInfo*>(0); 199 return new GrowableArray<MonitorInfo*>(0);
200 } 200 }
201 GrowableArray<MonitorInfo*>* result = new GrowableArray<MonitorInfo*>(monitors->length()); 201 GrowableArray<MonitorInfo*>* result = new GrowableArray<MonitorInfo*>(monitors->length());
202 for (int index = 0; index < monitors->length(); index++) { 202 for (int index = 0; index < monitors->length(); index++) {
203 MonitorValue* mv = monitors->at(index); 203 MonitorValue* mv = monitors->at(index);
204 StackValue *owner_sv = create_stack_value(mv->owner()); // it is an oop 204 ScopeValue* ov = mv->owner();
205 result->push(new MonitorInfo(owner_sv->get_obj()(), resolve_monitor_lock(mv->basic_lock()), mv->eliminated())); 205 StackValue *owner_sv = create_stack_value(ov); // it is an oop
206 if (ov->is_object() && owner_sv->obj_is_scalar_replaced()) { // The owner object was scalar replaced
207 assert(mv->eliminated(), "monitor should be eliminated for scalar replaced object");
208 // Put klass for scalar replaced object.
209 ScopeValue* kv = ((ObjectValue *)ov)->klass();
210 assert(kv->is_constant_oop(), "klass should be oop constant for scalar replaced object");
211 KlassHandle k(((ConstantOopReadValue*)kv)->value()());
212 result->push(new MonitorInfo(k->as_klassOop(), resolve_monitor_lock(mv->basic_lock()),
213 mv->eliminated(), true));
214 } else {
215 result->push(new MonitorInfo(owner_sv->get_obj()(), resolve_monitor_lock(mv->basic_lock()),
216 mv->eliminated(), false));
217 }
206 } 218 }
207 return result; 219 return result;
208 } 220 }
209 221
210 222