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