src/share/vm/code/nmethod.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/code

src/share/vm/code/nmethod.hpp

Print this page




 375   PcDesc* scopes_pcs_end        () const          { return (PcDesc*)(header_begin() + _dependencies_offset) ; }
 376   address dependencies_begin    () const          { return           header_begin() + _dependencies_offset  ; }
 377   address dependencies_end      () const          { return           header_begin() + _handler_table_offset ; }
 378   address handler_table_begin   () const          { return           header_begin() + _handler_table_offset ; }
 379   address handler_table_end     () const          { return           header_begin() + _nul_chk_table_offset ; }
 380   address nul_chk_table_begin   () const          { return           header_begin() + _nul_chk_table_offset ; }
 381   address nul_chk_table_end     () const          { return           header_begin() + _nmethod_end_offset   ; }
 382 
 383   // Sizes
 384   int consts_size       () const                  { return            consts_end       () -            consts_begin       (); }
 385   int insts_size        () const                  { return            insts_end        () -            insts_begin        (); }
 386   int stub_size         () const                  { return            stub_end         () -            stub_begin         (); }
 387   int oops_size         () const                  { return (address)  oops_end         () - (address)  oops_begin         (); }
 388   int metadata_size     () const                  { return (address)  metadata_end     () - (address)  metadata_begin     (); }
 389   int scopes_data_size  () const                  { return            scopes_data_end  () -            scopes_data_begin  (); }
 390   int scopes_pcs_size   () const                  { return (intptr_t) scopes_pcs_end   () - (intptr_t) scopes_pcs_begin   (); }
 391   int dependencies_size () const                  { return            dependencies_end () -            dependencies_begin (); }
 392   int handler_table_size() const                  { return            handler_table_end() -            handler_table_begin(); }
 393   int nul_chk_table_size() const                  { return            nul_chk_table_end() -            nul_chk_table_begin(); }
 394 



 395   int total_size        () const;
 396 
 397   void dec_hotness_counter()        { _hotness_counter--; }
 398   void set_hotness_counter(int val) { _hotness_counter = val; }
 399   int  hotness_counter() const      { return _hotness_counter; }
 400 
 401   // Containment
 402   bool consts_contains       (address addr) const { return consts_begin       () <= addr && addr < consts_end       (); }
 403   bool insts_contains        (address addr) const { return insts_begin        () <= addr && addr < insts_end        (); }
 404   bool stub_contains         (address addr) const { return stub_begin         () <= addr && addr < stub_end         (); }
 405   bool oops_contains         (oop*    addr) const { return oops_begin         () <= addr && addr < oops_end         (); }
 406   bool metadata_contains     (Metadata** addr) const   { return metadata_begin     () <= addr && addr < metadata_end     (); }
 407   bool scopes_data_contains  (address addr) const { return scopes_data_begin  () <= addr && addr < scopes_data_end  (); }
 408   bool scopes_pcs_contains   (PcDesc* addr) const { return scopes_pcs_begin   () <= addr && addr < scopes_pcs_end   (); }
 409   bool handler_table_contains(address addr) const { return handler_table_begin() <= addr && addr < handler_table_end(); }
 410   bool nul_chk_table_contains(address addr) const { return nul_chk_table_begin() <= addr && addr < nul_chk_table_end(); }
 411 
 412   // entry points
 413   address entry_point() const                     { return _entry_point;             } // normal entry point
 414   address verified_entry_point() const            { return _verified_entry_point;    } // if klass is correct


 474 
 475   bool  has_unsafe_access() const                 { return _has_unsafe_access; }
 476   void  set_has_unsafe_access(bool z)             { _has_unsafe_access = z; }
 477 
 478   bool  has_method_handle_invokes() const         { return _has_method_handle_invokes; }
 479   void  set_has_method_handle_invokes(bool z)     { _has_method_handle_invokes = z; }
 480 
 481   bool  is_lazy_critical_native() const           { return _lazy_critical_native; }
 482   void  set_lazy_critical_native(bool z)          { _lazy_critical_native = z; }
 483 
 484   bool  has_wide_vectors() const                  { return _has_wide_vectors; }
 485   void  set_has_wide_vectors(bool z)              { _has_wide_vectors = z; }
 486 
 487   int   comp_level() const                        { return _comp_level; }
 488 
 489   // Support for oops in scopes and relocs:
 490   // Note: index 0 is reserved for null.
 491   oop   oop_at(int index) const                   { return index == 0 ? (oop) NULL: *oop_addr_at(index); }
 492   oop*  oop_addr_at(int index) const {  // for GC
 493     // relocation indexes are biased by 1 (because 0 is reserved)
 494     assert(index > 0 && index <= oops_size(), "must be a valid non-zero index");
 495     assert(!_oops_are_stale, "oops are stale");
 496     return &oops_begin()[index - 1];
 497   }
 498 
 499   // Support for meta data in scopes and relocs:
 500   // Note: index 0 is reserved for null.
 501   Metadata*     metadata_at(int index) const      { return index == 0 ? NULL: *metadata_addr_at(index); }
 502   Metadata**  metadata_addr_at(int index) const {  // for GC
 503     // relocation indexes are biased by 1 (because 0 is reserved)
 504     assert(index > 0 && index <= metadata_size(), "must be a valid non-zero index");
 505     return &metadata_begin()[index - 1];
 506   }
 507 
 508   void copy_values(GrowableArray<jobject>* oops);
 509   void copy_values(GrowableArray<Metadata*>* metadata);
 510 


 511   // Relocation support
 512 private:
 513   void fix_oop_relocations(address begin, address end, bool initialize_immediates);
 514   inline void initialize_immediate_oop(oop* dest, jobject handle);
 515 
 516 public:
 517   void fix_oop_relocations(address begin, address end) { fix_oop_relocations(begin, end, false); }
 518   void fix_oop_relocations()                           { fix_oop_relocations(NULL, NULL, false); }
 519   void verify_oop_relocations();
 520 
 521   bool is_at_poll_return(address pc);
 522   bool is_at_poll_or_poll_return(address pc);
 523 
 524   // Scavengable oop support
 525   bool  on_scavenge_root_list() const                  { return (_scavenge_root_state & 1) != 0; }
 526  protected:
 527   enum { sl_on_list = 0x01, sl_marked = 0x10 };
 528   void  set_on_scavenge_root_list()                    { _scavenge_root_state = sl_on_list; }
 529   void  clear_on_scavenge_root_list()                  { _scavenge_root_state = 0; }
 530   // assertion-checking and pruning logic uses the bits of _scavenge_root_state


 679   // jvmti support:
 680   void post_compiled_method_load_event();
 681   jmethodID get_and_cache_jmethod_id();
 682 
 683   // verify operations
 684   void verify();
 685   void verify_scopes();
 686   void verify_interrupt_point(address interrupt_point);
 687 
 688   // printing support
 689   void print()                          const;
 690   void print_code();
 691   void print_relocations()                        PRODUCT_RETURN;
 692   void print_pcs()                                PRODUCT_RETURN;
 693   void print_scopes()                             PRODUCT_RETURN;
 694   void print_dependencies()                       PRODUCT_RETURN;
 695   void print_value_on(outputStream* st) const     PRODUCT_RETURN;
 696   void print_calls(outputStream* st)              PRODUCT_RETURN;
 697   void print_handler_table()                      PRODUCT_RETURN;
 698   void print_nul_chk_table()                      PRODUCT_RETURN;


 699   void print_nmethod(bool print_code);
 700 
 701   // need to re-define this from CodeBlob else the overload hides it
 702   virtual void print_on(outputStream* st) const { CodeBlob::print_on(st); }
 703   void print_on(outputStream* st, const char* msg) const;
 704 
 705   // Logging
 706   void log_identity(xmlStream* log) const;
 707   void log_new_nmethod() const;
 708   void log_state_change() const;
 709 
 710   // Prints block-level comments, including nmethod specific block labels:
 711   virtual void print_block_comment(outputStream* stream, address block_begin) const {
 712     print_nmethod_labels(stream, block_begin);
 713     CodeBlob::print_block_comment(stream, block_begin);
 714   }
 715   void print_nmethod_labels(outputStream* stream, address block_begin) const;
 716 
 717   // Prints a comment for one native instruction (reloc info, pc desc)
 718   void print_code_comment_on(outputStream* st, int column, address begin, address end);




 375   PcDesc* scopes_pcs_end        () const          { return (PcDesc*)(header_begin() + _dependencies_offset) ; }
 376   address dependencies_begin    () const          { return           header_begin() + _dependencies_offset  ; }
 377   address dependencies_end      () const          { return           header_begin() + _handler_table_offset ; }
 378   address handler_table_begin   () const          { return           header_begin() + _handler_table_offset ; }
 379   address handler_table_end     () const          { return           header_begin() + _nul_chk_table_offset ; }
 380   address nul_chk_table_begin   () const          { return           header_begin() + _nul_chk_table_offset ; }
 381   address nul_chk_table_end     () const          { return           header_begin() + _nmethod_end_offset   ; }
 382 
 383   // Sizes
 384   int consts_size       () const                  { return            consts_end       () -            consts_begin       (); }
 385   int insts_size        () const                  { return            insts_end        () -            insts_begin        (); }
 386   int stub_size         () const                  { return            stub_end         () -            stub_begin         (); }
 387   int oops_size         () const                  { return (address)  oops_end         () - (address)  oops_begin         (); }
 388   int metadata_size     () const                  { return (address)  metadata_end     () - (address)  metadata_begin     (); }
 389   int scopes_data_size  () const                  { return            scopes_data_end  () -            scopes_data_begin  (); }
 390   int scopes_pcs_size   () const                  { return (intptr_t) scopes_pcs_end   () - (intptr_t) scopes_pcs_begin   (); }
 391   int dependencies_size () const                  { return            dependencies_end () -            dependencies_begin (); }
 392   int handler_table_size() const                  { return            handler_table_end() -            handler_table_begin(); }
 393   int nul_chk_table_size() const                  { return            nul_chk_table_end() -            nul_chk_table_begin(); }
 394 
 395   int     oops_count() const { assert(oops_size() % oopSize == 0, "");  return (oops_size() / oopSize) + 1; }
 396   int metadata_count() const { assert(metadata_size() % wordSize == 0, ""); return (metadata_size() / wordSize) + 1; }
 397 
 398   int total_size        () const;
 399 
 400   void dec_hotness_counter()        { _hotness_counter--; }
 401   void set_hotness_counter(int val) { _hotness_counter = val; }
 402   int  hotness_counter() const      { return _hotness_counter; }
 403 
 404   // Containment
 405   bool consts_contains       (address addr) const { return consts_begin       () <= addr && addr < consts_end       (); }
 406   bool insts_contains        (address addr) const { return insts_begin        () <= addr && addr < insts_end        (); }
 407   bool stub_contains         (address addr) const { return stub_begin         () <= addr && addr < stub_end         (); }
 408   bool oops_contains         (oop*    addr) const { return oops_begin         () <= addr && addr < oops_end         (); }
 409   bool metadata_contains     (Metadata** addr) const   { return metadata_begin     () <= addr && addr < metadata_end     (); }
 410   bool scopes_data_contains  (address addr) const { return scopes_data_begin  () <= addr && addr < scopes_data_end  (); }
 411   bool scopes_pcs_contains   (PcDesc* addr) const { return scopes_pcs_begin   () <= addr && addr < scopes_pcs_end   (); }
 412   bool handler_table_contains(address addr) const { return handler_table_begin() <= addr && addr < handler_table_end(); }
 413   bool nul_chk_table_contains(address addr) const { return nul_chk_table_begin() <= addr && addr < nul_chk_table_end(); }
 414 
 415   // entry points
 416   address entry_point() const                     { return _entry_point;             } // normal entry point
 417   address verified_entry_point() const            { return _verified_entry_point;    } // if klass is correct


 477 
 478   bool  has_unsafe_access() const                 { return _has_unsafe_access; }
 479   void  set_has_unsafe_access(bool z)             { _has_unsafe_access = z; }
 480 
 481   bool  has_method_handle_invokes() const         { return _has_method_handle_invokes; }
 482   void  set_has_method_handle_invokes(bool z)     { _has_method_handle_invokes = z; }
 483 
 484   bool  is_lazy_critical_native() const           { return _lazy_critical_native; }
 485   void  set_lazy_critical_native(bool z)          { _lazy_critical_native = z; }
 486 
 487   bool  has_wide_vectors() const                  { return _has_wide_vectors; }
 488   void  set_has_wide_vectors(bool z)              { _has_wide_vectors = z; }
 489 
 490   int   comp_level() const                        { return _comp_level; }
 491 
 492   // Support for oops in scopes and relocs:
 493   // Note: index 0 is reserved for null.
 494   oop   oop_at(int index) const                   { return index == 0 ? (oop) NULL: *oop_addr_at(index); }
 495   oop*  oop_addr_at(int index) const {  // for GC
 496     // relocation indexes are biased by 1 (because 0 is reserved)
 497     assert(index > 0 && index <= oops_count(), "must be a valid non-zero index");
 498     assert(!_oops_are_stale, "oops are stale");
 499     return &oops_begin()[index - 1];
 500   }
 501 
 502   // Support for meta data in scopes and relocs:
 503   // Note: index 0 is reserved for null.
 504   Metadata*     metadata_at(int index) const      { return index == 0 ? NULL: *metadata_addr_at(index); }
 505   Metadata**  metadata_addr_at(int index) const {  // for GC
 506     // relocation indexes are biased by 1 (because 0 is reserved)
 507     assert(index > 0 && index <= metadata_count(), "must be a valid non-zero index");
 508     return &metadata_begin()[index - 1];
 509   }
 510 
 511   void copy_values(GrowableArray<jobject>* oops);
 512   void copy_values(GrowableArray<Metadata*>* metadata);
 513 
 514   Method* attached_method(address call_pc);
 515 
 516   // Relocation support
 517 private:
 518   void fix_oop_relocations(address begin, address end, bool initialize_immediates);
 519   inline void initialize_immediate_oop(oop* dest, jobject handle);
 520 
 521 public:
 522   void fix_oop_relocations(address begin, address end) { fix_oop_relocations(begin, end, false); }
 523   void fix_oop_relocations()                           { fix_oop_relocations(NULL, NULL, false); }
 524   void verify_oop_relocations();
 525 
 526   bool is_at_poll_return(address pc);
 527   bool is_at_poll_or_poll_return(address pc);
 528 
 529   // Scavengable oop support
 530   bool  on_scavenge_root_list() const                  { return (_scavenge_root_state & 1) != 0; }
 531  protected:
 532   enum { sl_on_list = 0x01, sl_marked = 0x10 };
 533   void  set_on_scavenge_root_list()                    { _scavenge_root_state = sl_on_list; }
 534   void  clear_on_scavenge_root_list()                  { _scavenge_root_state = 0; }
 535   // assertion-checking and pruning logic uses the bits of _scavenge_root_state


 684   // jvmti support:
 685   void post_compiled_method_load_event();
 686   jmethodID get_and_cache_jmethod_id();
 687 
 688   // verify operations
 689   void verify();
 690   void verify_scopes();
 691   void verify_interrupt_point(address interrupt_point);
 692 
 693   // printing support
 694   void print()                          const;
 695   void print_code();
 696   void print_relocations()                        PRODUCT_RETURN;
 697   void print_pcs()                                PRODUCT_RETURN;
 698   void print_scopes()                             PRODUCT_RETURN;
 699   void print_dependencies()                       PRODUCT_RETURN;
 700   void print_value_on(outputStream* st) const     PRODUCT_RETURN;
 701   void print_calls(outputStream* st)              PRODUCT_RETURN;
 702   void print_handler_table()                      PRODUCT_RETURN;
 703   void print_nul_chk_table()                      PRODUCT_RETURN;
 704   void print_recorded_oops()                      PRODUCT_RETURN;
 705   void print_recorded_metadata()                  PRODUCT_RETURN;
 706   void print_nmethod(bool print_code);
 707 
 708   // need to re-define this from CodeBlob else the overload hides it
 709   virtual void print_on(outputStream* st) const { CodeBlob::print_on(st); }
 710   void print_on(outputStream* st, const char* msg) const;
 711 
 712   // Logging
 713   void log_identity(xmlStream* log) const;
 714   void log_new_nmethod() const;
 715   void log_state_change() const;
 716 
 717   // Prints block-level comments, including nmethod specific block labels:
 718   virtual void print_block_comment(outputStream* stream, address block_begin) const {
 719     print_nmethod_labels(stream, block_begin);
 720     CodeBlob::print_block_comment(stream, block_begin);
 721   }
 722   void print_nmethod_labels(outputStream* stream, address block_begin) const;
 723 
 724   // Prints a comment for one native instruction (reloc info, pc desc)
 725   void print_code_comment_on(outputStream* st, int column, address begin, address end);


src/share/vm/code/nmethod.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File