hotspot/src/share/vm/oops/constMethodOop.hpp
changeset 12937 0032fb2caff6
parent 7397 5b173b4ca846
child 13282 9872915dd78d
equal deleted inserted replaced
12929:99204ff08403 12937:0032fb2caff6
     1 /*
     1 /*
     2  * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
    39 // | header                                               |
    39 // | header                                               |
    40 // | klass                                                |
    40 // | klass                                                |
    41 // |------------------------------------------------------|
    41 // |------------------------------------------------------|
    42 // | fingerprint 1                                        |
    42 // | fingerprint 1                                        |
    43 // | fingerprint 2                                        |
    43 // | fingerprint 2                                        |
    44 // | method                         (oop)                 |
    44 // | constants                      (oop)                 |
    45 // | stackmap_data                  (oop)                 |
    45 // | stackmap_data                  (oop)                 |
    46 // | exception_table                (oop)                 |
    46 // | exception_table                (oop)                 |
    47 // | constMethod_size                                     |
    47 // | constMethod_size                                     |
    48 // | interp_kind  | flags    | code_size                  |
    48 // | interp_kind  | flags    | code_size                  |
    49 // | name index              | signature index            |
    49 // | name index              | signature index            |
   111   // multiple threads, so is volatile.
   111   // multiple threads, so is volatile.
   112   volatile uint64_t _fingerprint;
   112   volatile uint64_t _fingerprint;
   113   volatile bool     _is_conc_safe; // if true, safe for concurrent GC processing
   113   volatile bool     _is_conc_safe; // if true, safe for concurrent GC processing
   114 
   114 
   115 public:
   115 public:
   116   oop* oop_block_beg() const { return adr_method(); }
   116   oop* oop_block_beg() const { return adr_constants(); }
   117   oop* oop_block_end() const { return adr_exception_table() + 1; }
   117   oop* oop_block_end() const { return adr_exception_table() + 1; }
   118 
   118 
   119 private:
   119 private:
   120   //
   120   //
   121   // The oop block.  See comment in klass.hpp before making changes.
   121   // The oop block.  See comment in klass.hpp before making changes.
   122   //
   122   //
   123 
   123 
   124   // Backpointer to non-const methodOop (needed for some JVMTI operations)
   124   constantPoolOop   _constants;                  // Constant pool
   125   methodOop         _method;
       
   126 
   125 
   127   // Raw stackmap data for the method
   126   // Raw stackmap data for the method
   128   typeArrayOop      _stackmap_data;
   127   typeArrayOop      _stackmap_data;
   129 
   128 
   130   // The exception handler table. 4-tuples of ints [start_pc, end_pc,
   129   // The exception handler table. 4-tuples of ints [start_pc, end_pc,
   165     { return (_flags & _has_localvariable_table) != 0; }
   164     { return (_flags & _has_localvariable_table) != 0; }
   166 
   165 
   167   void set_interpreter_kind(int kind)      { _interpreter_kind = kind; }
   166   void set_interpreter_kind(int kind)      { _interpreter_kind = kind; }
   168   int  interpreter_kind(void) const        { return _interpreter_kind; }
   167   int  interpreter_kind(void) const        { return _interpreter_kind; }
   169 
   168 
   170   // backpointer to non-const methodOop
   169   // constant pool
   171   methodOop method() const                 { return _method; }
   170   constantPoolOop constants() const        { return _constants; }
   172   void set_method(methodOop m)             { oop_store_without_check((oop*)&_method, (oop) m); }
   171   void set_constants(constantPoolOop c)    {
   173 
   172     oop_store_without_check((oop*)&_constants, (oop)c);
       
   173   }
       
   174 
       
   175   methodOop method() const;
   174 
   176 
   175   // stackmap table data
   177   // stackmap table data
   176   typeArrayOop stackmap_data() const { return _stackmap_data; }
   178   typeArrayOop stackmap_data() const { return _stackmap_data; }
   177   void set_stackmap_data(typeArrayOop sd) {
   179   void set_stackmap_data(typeArrayOop sd) {
   178     oop_store_without_check((oop*)&_stackmap_data, (oop)sd);
   180     oop_store_without_check((oop*)&_stackmap_data, (oop)sd);
   276   // Offset to bytecodes
   278   // Offset to bytecodes
   277   static ByteSize codes_offset()
   279   static ByteSize codes_offset()
   278                             { return in_ByteSize(sizeof(constMethodOopDesc)); }
   280                             { return in_ByteSize(sizeof(constMethodOopDesc)); }
   279 
   281 
   280   // interpreter support
   282   // interpreter support
       
   283   static ByteSize constants_offset()
       
   284                { return byte_offset_of(constMethodOopDesc, _constants); }
   281   static ByteSize exception_table_offset()
   285   static ByteSize exception_table_offset()
   282                { return byte_offset_of(constMethodOopDesc, _exception_table); }
   286                { return byte_offset_of(constMethodOopDesc, _exception_table); }
   283 
   287 
   284   // Garbage collection support
   288   // Garbage collection support
   285   oop*  adr_method() const             { return (oop*)&_method;          }
   289   oop*  adr_constants() const          { return (oop*)&_constants; }
   286   oop*  adr_stackmap_data() const      { return (oop*)&_stackmap_data;   }
   290   oop*  adr_stackmap_data() const      { return (oop*)&_stackmap_data;   }
   287   oop*  adr_exception_table() const    { return (oop*)&_exception_table; }
   291   oop*  adr_exception_table() const    { return (oop*)&_exception_table; }
   288   bool is_conc_safe() { return _is_conc_safe; }
   292   bool is_conc_safe() { return _is_conc_safe; }
   289   void set_is_conc_safe(bool v) { _is_conc_safe = v; }
   293   void set_is_conc_safe(bool v) { _is_conc_safe = v; }
   290 
   294