305 void skip_prefixed_method_and_wrappers(); 306 307 public: 308 // Constructor 309 vframeStreamCommon(JavaThread* thread) : _reg_map(thread, false) { 310 _thread = thread; 311 } 312 313 // Accessors 314 Method* method() const { return _method; } 315 int bci() const { return _bci; } 316 intptr_t* frame_id() const { return _frame.id(); } 317 address frame_pc() const { return _frame.pc(); } 318 319 CodeBlob* cb() const { return _frame.cb(); } 320 nmethod* nm() const { 321 assert( cb() != NULL && cb()->is_nmethod(), "usage"); 322 return (nmethod*) cb(); 323 } 324 325 // Frame type 326 bool is_interpreted_frame() const { return _frame.is_interpreted_frame(); } 327 bool is_entry_frame() const { return _frame.is_entry_frame(); } 328 329 // Iteration 330 void next() { 331 // handle frames with inlining 332 if (_mode == compiled_mode && fill_in_compiled_inlined_sender()) return; 333 334 // handle general case 335 do { 336 _frame = _frame.sender(&_reg_map); 337 } while (!fill_from_frame()); 338 } 339 void security_next(); 340 341 bool at_end() const { return _mode == at_end_mode; } 342 343 // Implements security traversal. Skips depth no. of frame including 344 // special security frames and prefixed native methods | 305 void skip_prefixed_method_and_wrappers(); 306 307 public: 308 // Constructor 309 vframeStreamCommon(JavaThread* thread) : _reg_map(thread, false) { 310 _thread = thread; 311 } 312 313 // Accessors 314 Method* method() const { return _method; } 315 int bci() const { return _bci; } 316 intptr_t* frame_id() const { return _frame.id(); } 317 address frame_pc() const { return _frame.pc(); } 318 319 CodeBlob* cb() const { return _frame.cb(); } 320 nmethod* nm() const { 321 assert( cb() != NULL && cb()->is_nmethod(), "usage"); 322 return (nmethod*) cb(); 323 } 324 325 frame* frame_pointer() { return &_frame; } 326 JavaThread* thread() const { return _thread; } 327 328 // Frame type 329 bool is_interpreted_frame() const { return _frame.is_interpreted_frame(); } 330 bool is_entry_frame() const { return _frame.is_entry_frame(); } 331 332 // Iteration 333 void next() { 334 // handle frames with inlining 335 if (_mode == compiled_mode && fill_in_compiled_inlined_sender()) return; 336 337 // handle general case 338 do { 339 _frame = _frame.sender(&_reg_map); 340 } while (!fill_from_frame()); 341 } 342 void security_next(); 343 344 bool at_end() const { return _mode == at_end_mode; } 345 346 // Implements security traversal. Skips depth no. of frame including 347 // special security frames and prefixed native methods |