7123315: instanceKlass::_static_oop_field_count and instanceKlass::_java_fields_count should be u2 type.

Wed, 28 Dec 2011 12:15:57 -0500

author
jiangli
date
Wed, 28 Dec 2011 12:15:57 -0500
changeset 3373
cd5d8cafcc84
parent 3372
dca455dea3a7
child 3374
05de27e852c4

7123315: instanceKlass::_static_oop_field_count and instanceKlass::_java_fields_count should be u2 type.
Summary: Change instanceKlass::_static_oop_field_count and instanceKlass::_java_fields_count to u2 type.
Reviewed-by: never, bdelsart, dholmes
Contributed-by: Jiangli Zhou <jiangli.zhou@oracle.com>

src/share/vm/classfile/classFileParser.cpp file | annotate | diff | comparison | revisions
src/share/vm/classfile/classFileParser.hpp file | annotate | diff | comparison | revisions
src/share/vm/oops/instanceKlass.hpp file | annotate | diff | comparison | revisions
src/share/vm/runtime/vmStructs.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/src/share/vm/classfile/classFileParser.cpp	Tue Dec 20 12:33:05 2011 +0100
     1.2 +++ b/src/share/vm/classfile/classFileParser.cpp	Wed Dec 28 12:15:57 2011 -0500
     1.3 @@ -1050,7 +1050,7 @@
     1.4  
     1.5  class FieldAllocationCount: public ResourceObj {
     1.6   public:
     1.7 -  unsigned int count[MAX_FIELD_ALLOCATION_TYPE];
     1.8 +  u2 count[MAX_FIELD_ALLOCATION_TYPE];
     1.9  
    1.10    FieldAllocationCount() {
    1.11      for (int i = 0; i < MAX_FIELD_ALLOCATION_TYPE; i++) {
    1.12 @@ -1060,6 +1060,8 @@
    1.13  
    1.14    FieldAllocationType update(bool is_static, BasicType type) {
    1.15      FieldAllocationType atype = basic_type_to_atype(is_static, type);
    1.16 +    // Make sure there is no overflow with injected fields.
    1.17 +    assert(count[atype] < 0xFFFF, "More than 65535 fields");
    1.18      count[atype]++;
    1.19      return atype;
    1.20    }
    1.21 @@ -1070,7 +1072,7 @@
    1.22                                                constantPoolHandle cp, bool is_interface,
    1.23                                                FieldAllocationCount *fac,
    1.24                                                objArrayHandle* fields_annotations,
    1.25 -                                              int* java_fields_count_ptr, TRAPS) {
    1.26 +                                              u2* java_fields_count_ptr, TRAPS) {
    1.27    ClassFileStream* cfs = stream();
    1.28    typeArrayHandle nullHandle;
    1.29    cfs->guarantee_more(2, CHECK_(nullHandle));  // length
    1.30 @@ -2843,7 +2845,7 @@
    1.31        local_interfaces = parse_interfaces(cp, itfs_len, class_loader, protection_domain, _class_name, CHECK_(nullHandle));
    1.32      }
    1.33  
    1.34 -    int java_fields_count = 0;
    1.35 +    u2 java_fields_count = 0;
    1.36      // Fields (offsets are filled in later)
    1.37      FieldAllocationCount fac;
    1.38      objArrayHandle fields_annotations;
     2.1 --- a/src/share/vm/classfile/classFileParser.hpp	Tue Dec 20 12:33:05 2011 +0100
     2.2 +++ b/src/share/vm/classfile/classFileParser.hpp	Wed Dec 28 12:15:57 2011 -0500
     2.3 @@ -91,7 +91,7 @@
     2.4                                 constantPoolHandle cp, bool is_interface,
     2.5                                 FieldAllocationCount *fac,
     2.6                                 objArrayHandle* fields_annotations,
     2.7 -                               int* java_fields_count_ptr, TRAPS);
     2.8 +                               u2* java_fields_count_ptr, TRAPS);
     2.9  
    2.10    // Method parsing
    2.11    methodHandle parse_method(constantPoolHandle cp, bool is_interface,
     3.1 --- a/src/share/vm/oops/instanceKlass.hpp	Tue Dec 20 12:33:05 2011 +0100
     3.2 +++ b/src/share/vm/oops/instanceKlass.hpp	Wed Dec 28 12:15:57 2011 -0500
     3.3 @@ -227,9 +227,9 @@
     3.4    // (including inherited fields but after header_size()).
     3.5    int             _nonstatic_field_size;
     3.6    int             _static_field_size;    // number words used by static fields (oop and non-oop) in this klass
     3.7 -  int             _static_oop_field_count;// number of static oop fields in this klass
     3.8 +  u2              _static_oop_field_count;// number of static oop fields in this klass
     3.9 +  u2              _java_fields_count;    // The number of declared Java fields
    3.10    int             _nonstatic_oop_map_size;// size in words of nonstatic oop map blocks
    3.11 -  int             _java_fields_count;    // The number of declared Java fields
    3.12  
    3.13    u2              _minor_version;        // minor version number of class file
    3.14    u2              _major_version;        // major version number of class file
    3.15 @@ -299,8 +299,8 @@
    3.16    int static_field_size() const            { return _static_field_size; }
    3.17    void set_static_field_size(int size)     { _static_field_size = size; }
    3.18  
    3.19 -  int static_oop_field_count() const        { return _static_oop_field_count; }
    3.20 -  void set_static_oop_field_count(int size) { _static_oop_field_count = size; }
    3.21 +  int static_oop_field_count() const       { return (int)_static_oop_field_count; }
    3.22 +  void set_static_oop_field_count(u2 size) { _static_oop_field_count = size; }
    3.23  
    3.24    // Java vtable
    3.25    int  vtable_length() const               { return _vtable_len; }
    3.26 @@ -340,14 +340,14 @@
    3.27    Symbol* field_signature   (int index) const { return field(index)->signature(constants()); }
    3.28  
    3.29    // Number of Java declared fields
    3.30 -  int java_fields_count() const           { return _java_fields_count; }
    3.31 +  int java_fields_count() const           { return (int)_java_fields_count; }
    3.32  
    3.33    // Number of fields including any injected fields
    3.34    int all_fields_count() const            { return _fields->length() / sizeof(FieldInfo::field_slots); }
    3.35  
    3.36    typeArrayOop fields() const              { return _fields; }
    3.37  
    3.38 -  void set_fields(typeArrayOop f, int java_fields_count) {
    3.39 +  void set_fields(typeArrayOop f, u2 java_fields_count) {
    3.40      oop_store_without_check((oop*) &_fields, (oop) f);
    3.41      _java_fields_count = java_fields_count;
    3.42    }
     4.1 --- a/src/share/vm/runtime/vmStructs.cpp	Tue Dec 20 12:33:05 2011 +0100
     4.2 +++ b/src/share/vm/runtime/vmStructs.cpp	Wed Dec 28 12:15:57 2011 -0500
     4.3 @@ -295,7 +295,7 @@
     4.4    nonstatic_field(instanceKlass,               _nof_implementors,                             int)                                   \
     4.5    nonstatic_field(instanceKlass,               _implementors[0],                              klassOop)                              \
     4.6    nonstatic_field(instanceKlass,               _fields,                                       typeArrayOop)                          \
     4.7 -  nonstatic_field(instanceKlass,               _java_fields_count,                             int)                                   \
     4.8 +  nonstatic_field(instanceKlass,               _java_fields_count,                            u2)                                    \
     4.9    nonstatic_field(instanceKlass,               _constants,                                    constantPoolOop)                       \
    4.10    nonstatic_field(instanceKlass,               _class_loader,                                 oop)                                   \
    4.11    nonstatic_field(instanceKlass,               _protection_domain,                            oop)                                   \
    4.12 @@ -305,7 +305,7 @@
    4.13    nonstatic_field(instanceKlass,               _inner_classes,                                typeArrayOop)                          \
    4.14    nonstatic_field(instanceKlass,               _nonstatic_field_size,                         int)                                   \
    4.15    nonstatic_field(instanceKlass,               _static_field_size,                            int)                                   \
    4.16 -  nonstatic_field(instanceKlass,               _static_oop_field_count,                       int)                                   \
    4.17 +  nonstatic_field(instanceKlass,               _static_oop_field_count,                       u2)                                   \
    4.18    nonstatic_field(instanceKlass,               _nonstatic_oop_map_size,                       int)                                   \
    4.19    nonstatic_field(instanceKlass,               _misc_flags,                                   u1)                                    \
    4.20    nonstatic_field(instanceKlass,               _minor_version,                                u2)                                    \

mercurial