Mercurial > hg > truffle
comparison agent/src/share/classes/sun/jvm/hotspot/code/PCDesc.java @ 3908:7588156f5cf9
7051798: SA-JDI: NPE in Frame.addressOfStackSlot(Frame.java:244)
Reviewed-by: kvn
author | never |
---|---|
date | Mon, 05 Sep 2011 17:09:05 -0700 |
parents | 3e8fbc61cee8 |
children |
comparison
equal
deleted
inserted
replaced
3907:7b5c767f229c | 3908:7588156f5cf9 |
---|---|
36 public class PCDesc extends VMObject { | 36 public class PCDesc extends VMObject { |
37 private static CIntegerField pcOffsetField; | 37 private static CIntegerField pcOffsetField; |
38 private static CIntegerField scopeDecodeOffsetField; | 38 private static CIntegerField scopeDecodeOffsetField; |
39 private static CIntegerField objDecodeOffsetField; | 39 private static CIntegerField objDecodeOffsetField; |
40 private static CIntegerField pcFlagsField; | 40 private static CIntegerField pcFlagsField; |
41 private static int reexecuteMask; | |
42 private static int isMethodHandleInvokeMask; | |
43 private static int returnOopMask; | |
41 | 44 |
42 static { | 45 static { |
43 VM.registerVMInitializedObserver(new Observer() { | 46 VM.registerVMInitializedObserver(new Observer() { |
44 public void update(Observable o, Object data) { | 47 public void update(Observable o, Object data) { |
45 initialize(VM.getVM().getTypeDataBase()); | 48 initialize(VM.getVM().getTypeDataBase()); |
52 | 55 |
53 pcOffsetField = type.getCIntegerField("_pc_offset"); | 56 pcOffsetField = type.getCIntegerField("_pc_offset"); |
54 scopeDecodeOffsetField = type.getCIntegerField("_scope_decode_offset"); | 57 scopeDecodeOffsetField = type.getCIntegerField("_scope_decode_offset"); |
55 objDecodeOffsetField = type.getCIntegerField("_obj_decode_offset"); | 58 objDecodeOffsetField = type.getCIntegerField("_obj_decode_offset"); |
56 pcFlagsField = type.getCIntegerField("_flags"); | 59 pcFlagsField = type.getCIntegerField("_flags"); |
60 | |
61 reexecuteMask = db.lookupIntConstant("PcDesc::PCDESC_reexecute"); | |
62 isMethodHandleInvokeMask = db.lookupIntConstant("PcDesc::PCDESC_is_method_handle_invoke"); | |
63 returnOopMask = db.lookupIntConstant("PcDesc::PCDESC_return_oop"); | |
57 } | 64 } |
58 | 65 |
59 public PCDesc(Address addr) { | 66 public PCDesc(Address addr) { |
60 super(addr); | 67 super(addr); |
61 } | 68 } |
79 } | 86 } |
80 | 87 |
81 | 88 |
82 public boolean getReexecute() { | 89 public boolean getReexecute() { |
83 int flags = (int)pcFlagsField.getValue(addr); | 90 int flags = (int)pcFlagsField.getValue(addr); |
84 return ((flags & 0x1)== 1); //first is the reexecute bit | 91 return (flags & reexecuteMask) != 0; |
92 } | |
93 | |
94 public boolean isMethodHandleInvoke() { | |
95 int flags = (int)pcFlagsField.getValue(addr); | |
96 return (flags & isMethodHandleInvokeMask) != 0; | |
85 } | 97 } |
86 | 98 |
87 public void print(NMethod code) { | 99 public void print(NMethod code) { |
88 printOn(System.out, code); | 100 printOn(System.out, code); |
89 } | 101 } |