35 public: 36 SimpleScopeDesc(nmethod* code,address pc) { 37 PcDesc* pc_desc = code->pc_desc_at(pc); 38 assert(pc_desc != NULL, "Must be able to find matching PcDesc"); 39 DebugInfoReadStream buffer(code, pc_desc->scope_decode_offset()); 40 int ignore_sender = buffer.read_int(); 41 _method = methodOop(buffer.read_oop()); 42 _bci = buffer.read_bci(); 43 } 44 45 methodOop method() { return _method; } 46 int bci() { return _bci; } 47 }; 48 49 // ScopeDescs contain the information that makes source-level debugging of 50 // nmethods possible; each scopeDesc describes a method activation 51 52 class ScopeDesc : public ResourceObj { 53 public: 54 // Constructor 55 ScopeDesc(const nmethod* code, int decode_offset, int obj_decode_offset, bool reexecute); 56 57 // Calls above, giving default value of "serialized_null" to the 58 // "obj_decode_offset" argument. (We don't use a default argument to 59 // avoid a .hpp-.hpp dependency.) 60 ScopeDesc(const nmethod* code, int decode_offset, bool reexecute); 61 62 // JVM state 63 methodHandle method() const { return _method; } 64 int bci() const { return _bci; } 65 bool should_reexecute() const { return _reexecute; } 66 67 GrowableArray<ScopeValue*>* locals(); 68 GrowableArray<ScopeValue*>* expressions(); 69 GrowableArray<MonitorValue*>* monitors(); 70 GrowableArray<ScopeValue*>* objects(); 71 72 // Stack walking, returns NULL if this is the outer most scope. 73 ScopeDesc* sender() const; 74 75 // Returns where the scope was decoded 76 int decode_offset() const { return _decode_offset; } 77 78 // Tells whether sender() returns NULL 79 bool is_top() const; 80 // Tells whether sd is equal to this 81 bool is_equal(ScopeDesc* sd) const; 82 83 private: 84 // Alternative constructor 85 ScopeDesc(const ScopeDesc* parent); 86 87 // JVM state 88 methodHandle _method; 89 int _bci; 90 bool _reexecute; 91 92 // Decoding offsets 93 int _decode_offset; 94 int _sender_decode_offset; 95 int _locals_decode_offset; 96 int _expressions_decode_offset; 97 int _monitors_decode_offset; 98 99 // Object pool 100 GrowableArray<ScopeValue*>* _objects; 101 102 // Nmethod information 103 const nmethod* _code; 104 105 // Decoding operations 106 void decode_body(); 107 GrowableArray<ScopeValue*>* decode_scope_values(int decode_offset); 108 GrowableArray<MonitorValue*>* decode_monitor_values(int decode_offset); 109 GrowableArray<ScopeValue*>* decode_object_values(int decode_offset); 110 | 35 public: 36 SimpleScopeDesc(nmethod* code,address pc) { 37 PcDesc* pc_desc = code->pc_desc_at(pc); 38 assert(pc_desc != NULL, "Must be able to find matching PcDesc"); 39 DebugInfoReadStream buffer(code, pc_desc->scope_decode_offset()); 40 int ignore_sender = buffer.read_int(); 41 _method = methodOop(buffer.read_oop()); 42 _bci = buffer.read_bci(); 43 } 44 45 methodOop method() { return _method; } 46 int bci() { return _bci; } 47 }; 48 49 // ScopeDescs contain the information that makes source-level debugging of 50 // nmethods possible; each scopeDesc describes a method activation 51 52 class ScopeDesc : public ResourceObj { 53 public: 54 // Constructor 55 ScopeDesc(const nmethod* code, int decode_offset, int obj_decode_offset, bool reexecute, bool return_oop); 56 57 // Calls above, giving default value of "serialized_null" to the 58 // "obj_decode_offset" argument. (We don't use a default argument to 59 // avoid a .hpp-.hpp dependency.) 60 ScopeDesc(const nmethod* code, int decode_offset, bool reexecute, bool return_oop); 61 62 // JVM state 63 methodHandle method() const { return _method; } 64 int bci() const { return _bci; } 65 bool should_reexecute() const { return _reexecute; } 66 bool return_oop() const { return _return_oop; } 67 68 GrowableArray<ScopeValue*>* locals(); 69 GrowableArray<ScopeValue*>* expressions(); 70 GrowableArray<MonitorValue*>* monitors(); 71 GrowableArray<ScopeValue*>* objects(); 72 73 // Stack walking, returns NULL if this is the outer most scope. 74 ScopeDesc* sender() const; 75 76 // Returns where the scope was decoded 77 int decode_offset() const { return _decode_offset; } 78 79 // Tells whether sender() returns NULL 80 bool is_top() const; 81 // Tells whether sd is equal to this 82 bool is_equal(ScopeDesc* sd) const; 83 84 private: 85 // Alternative constructor 86 ScopeDesc(const ScopeDesc* parent); 87 88 // JVM state 89 methodHandle _method; 90 int _bci; 91 bool _reexecute; 92 bool _return_oop; 93 94 // Decoding offsets 95 int _decode_offset; 96 int _sender_decode_offset; 97 int _locals_decode_offset; 98 int _expressions_decode_offset; 99 int _monitors_decode_offset; 100 101 // Object pool 102 GrowableArray<ScopeValue*>* _objects; 103 104 // Nmethod information 105 const nmethod* _code; 106 107 // Decoding operations 108 void decode_body(); 109 GrowableArray<ScopeValue*>* decode_scope_values(int decode_offset); 110 GrowableArray<MonitorValue*>* decode_monitor_values(int decode_offset); 111 GrowableArray<ScopeValue*>* decode_object_values(int decode_offset); 112 |