Mercurial > hg > truffle
comparison agent/src/share/classes/sun/jvm/hotspot/runtime/CompiledVFrame.java @ 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 | 9ee9cf798b59 |
children | bd02caa94611 |
comparison
equal
deleted
inserted
replaced
793:eacd97c88873 | 818:b109e761e927 |
---|---|
129 return new ArrayList(); | 129 return new ArrayList(); |
130 } | 130 } |
131 List result = new ArrayList(monitors.size()); | 131 List result = new ArrayList(monitors.size()); |
132 for (int i = 0; i < monitors.size(); i++) { | 132 for (int i = 0; i < monitors.size(); i++) { |
133 MonitorValue mv = (MonitorValue) monitors.get(i); | 133 MonitorValue mv = (MonitorValue) monitors.get(i); |
134 StackValue ownerSV = createStackValue(mv.owner()); // it is an oop | 134 ScopeValue ov = mv.owner(); |
135 result.add(new MonitorInfo(ownerSV.getObject(), resolveMonitorLock(mv.basicLock()))); | 135 StackValue ownerSV = createStackValue(ov); // it is an oop |
136 if (ov.isObject()) { // The owner object was scalar replaced | |
137 Assert.that(mv.eliminated() && ownerSV.objIsScalarReplaced(), "monitor should be eliminated for scalar replaced object"); | |
138 // Put klass for scalar replaced object. | |
139 ScopeValue kv = ((ObjectValue)ov).getKlass(); | |
140 Assert.that(kv.isConstantOop(), "klass should be oop constant for scalar replaced object"); | |
141 OopHandle k = ((ConstantOopReadValue)kv).getValue(); | |
142 result.add(new MonitorInfo(k, resolveMonitorLock(mv.basicLock()), mv.eliminated(), true)); | |
143 } else { | |
144 result.add(new MonitorInfo(ownerSV.getObject(), resolveMonitorLock(mv.basicLock()), mv.eliminated(), false)); | |
145 } | |
136 } | 146 } |
137 return result; | 147 return result; |
138 } | 148 } |
139 | 149 |
140 public int getBCI() { | 150 public int getBCI() { |
210 if (loc.isRegister() && VM.getVM().isBigEndian()) { | 220 if (loc.isRegister() && VM.getVM().isBigEndian()) { |
211 // The callee has no clue whether the register holds an narrow oop, | 221 // The callee has no clue whether the register holds an narrow oop, |
212 // long or is unused. He always saves a long. Here we know | 222 // long or is unused. He always saves a long. Here we know |
213 // a long was saved, but we only want an narrow oop back. Narrow the | 223 // a long was saved, but we only want an narrow oop back. Narrow the |
214 // saved long to the narrow oop that the JVM wants. | 224 // saved long to the narrow oop that the JVM wants. |
215 return new StackValue(valueAddr.getCompOopHandleAt(VM.getVM().getIntSize())); | 225 return new StackValue(valueAddr.getCompOopHandleAt(VM.getVM().getIntSize()), 0); |
216 } else { | 226 } else { |
217 return new StackValue(valueAddr.getCompOopHandleAt(0)); | 227 return new StackValue(valueAddr.getCompOopHandleAt(0), 0); |
218 } | 228 } |
219 } else if( loc.holdsOop() ) { // Holds an oop? | 229 } else if( loc.holdsOop() ) { // Holds an oop? |
220 return new StackValue(valueAddr.getOopHandleAt(0)); | 230 return new StackValue(valueAddr.getOopHandleAt(0), 0); |
221 } else if( loc.holdsDouble() ) { | 231 } else if( loc.holdsDouble() ) { |
222 // Double value in a single stack slot | 232 // Double value in a single stack slot |
223 return new StackValue(valueAddr.getJIntAt(0) & 0xFFFFFFFF); | 233 return new StackValue(valueAddr.getJIntAt(0) & 0xFFFFFFFF); |
224 } else if(loc.holdsAddr()) { | 234 } else if(loc.holdsAddr()) { |
225 if (Assert.ASSERTS_ENABLED) { | 235 if (Assert.ASSERTS_ENABLED) { |
275 } else if (sv.isConstantInt()) { | 285 } else if (sv.isConstantInt()) { |
276 // Constant int: treat same as register int. | 286 // Constant int: treat same as register int. |
277 return new StackValue(((ConstantIntValue) sv).getValue() & 0xFFFFFFFF); | 287 return new StackValue(((ConstantIntValue) sv).getValue() & 0xFFFFFFFF); |
278 } else if (sv.isConstantOop()) { | 288 } else if (sv.isConstantOop()) { |
279 // constant oop | 289 // constant oop |
280 return new StackValue(((ConstantOopReadValue) sv).getValue()); | 290 return new StackValue(((ConstantOopReadValue) sv).getValue(), 0); |
281 } else if (sv.isConstantDouble()) { | 291 } else if (sv.isConstantDouble()) { |
282 // Constant double in a single stack slot | 292 // Constant double in a single stack slot |
283 double d = ((ConstantDoubleValue) sv).getValue(); | 293 double d = ((ConstantDoubleValue) sv).getValue(); |
284 return new StackValue(Double.doubleToLongBits(d) & 0xFFFFFFFF); | 294 return new StackValue(Double.doubleToLongBits(d) & 0xFFFFFFFF); |
285 } else if (VM.getVM().isLP64() && sv.isConstantLong()) { | 295 } else if (VM.getVM().isLP64() && sv.isConstantLong()) { |
286 // Constant long in a single stack slot | 296 // Constant long in a single stack slot |
287 return new StackValue(((ConstantLongValue) sv).getValue() & 0xFFFFFFFF); | 297 return new StackValue(((ConstantLongValue) sv).getValue() & 0xFFFFFFFF); |
298 } else if (sv.isObject()) { | |
299 // Scalar replaced object in compiled frame | |
300 return new StackValue(((ObjectValue)sv).getValue(), 1); | |
288 } | 301 } |
289 | 302 |
290 // Unknown ScopeValue type | 303 // Unknown ScopeValue type |
291 Assert.that(false, "Should not reach here"); | 304 Assert.that(false, "Should not reach here"); |
292 return new StackValue(0); // dummy | 305 return new StackValue(0); // dummy |