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 }