Mercurial > hg > truffle
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 } |