comparison agent/src/share/classes/sun/jvm/hotspot/code/DebugInfoReadStream.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 a61af66fc99e
children bd02caa94611 9987d9d5eb0e
comparison
equal deleted inserted replaced
793:eacd97c88873 818:b109e761e927
22 * 22 *
23 */ 23 */
24 24
25 package sun.jvm.hotspot.code; 25 package sun.jvm.hotspot.code;
26 26
27 import java.util.*;
28
27 import sun.jvm.hotspot.debugger.*; 29 import sun.jvm.hotspot.debugger.*;
28 import sun.jvm.hotspot.runtime.VM; 30 import sun.jvm.hotspot.runtime.VM;
31 import sun.jvm.hotspot.utilities.*;
29 32
30 public class DebugInfoReadStream extends CompressedReadStream { 33 public class DebugInfoReadStream extends CompressedReadStream {
31 private NMethod code; 34 private NMethod code;
32 private int InvocationEntryBCI; 35 private int InvocationEntryBCI;
36 private List objectPool; // ArrayList<ObjectValue>
33 37
34 public DebugInfoReadStream(NMethod code, int offset) { 38 public DebugInfoReadStream(NMethod code, int offset) {
35 super(code.scopesDataBegin(), offset); 39 super(code.scopesDataBegin(), offset);
36 InvocationEntryBCI = VM.getVM().getInvocationEntryBCI(); 40 InvocationEntryBCI = VM.getVM().getInvocationEntryBCI();
37 this.code = code; 41 this.code = code;
42 this.objectPool = null;
43 }
44
45 public DebugInfoReadStream(NMethod code, int offset, List objectPool) {
46 super(code.scopesDataBegin(), offset);
47 InvocationEntryBCI = VM.getVM().getInvocationEntryBCI();
48 this.code = code;
49 this.objectPool = objectPool;
38 } 50 }
39 51
40 public OopHandle readOopHandle() { 52 public OopHandle readOopHandle() {
41 return code.getOopAt(readInt()); 53 return code.getOopAt(readInt());
42 } 54 }
43 55
56 ScopeValue readObjectValue() {
57 int id = readInt();
58 if (Assert.ASSERTS_ENABLED) {
59 Assert.that(objectPool != null, "object pool does not exist");
60 for (Iterator itr = objectPool.iterator(); itr.hasNext();) {
61 ObjectValue ov = (ObjectValue) itr.next();
62 Assert.that(ov.id() != id, "should not be read twice");
63 }
64 }
65 ObjectValue result = new ObjectValue(id);
66 // Cache the object since an object field could reference it.
67 objectPool.add(result);
68 result.readObject(this);
69 return result;
70 }
71
72 ScopeValue getCachedObject() {
73 int id = readInt();
74 Assert.that(objectPool != null, "object pool does not exist");
75 for (Iterator itr = objectPool.iterator(); itr.hasNext();) {
76 ObjectValue ov = (ObjectValue) itr.next();
77 if (ov.id() == id) {
78 return ov;
79 }
80 }
81 Assert.that(false, "should not reach here");
82 return null;
83 }
84
44 public int readBCI() { 85 public int readBCI() {
45 return readInt() + InvocationEntryBCI; 86 return readInt() + InvocationEntryBCI;
46 } 87 }
47 } 88 }