8006403: Regression: jstack failed due to the FieldInfo regression in SA

Wed, 16 Jan 2013 16:30:04 +0100

author
sla
date
Wed, 16 Jan 2013 16:30:04 +0100
changeset 4462
e94ed1591b42
parent 4434
c793367610c1
child 4463
557bda927cc2
child 4465
203f64878aab

8006403: Regression: jstack failed due to the FieldInfo regression in SA
Reviewed-by: sla, dholmes
Contributed-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>

agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java file | annotate | diff | comparison | revisions
src/share/vm/runtime/vmStructs.cpp file | annotate | diff | comparison | revisions
     1.1 --- a/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java	Tue Jan 15 17:05:53 2013 -0500
     1.2 +++ b/agent/src/share/classes/sun/jvm/hotspot/oops/InstanceKlass.java	Wed Jan 16 16:30:04 2013 +0100
     1.3 @@ -53,6 +53,7 @@
     1.4    private static int HIGH_OFFSET;
     1.5    private static int FIELD_SLOTS;
     1.6    private static short FIELDINFO_TAG_SIZE;
     1.7 +  private static short FIELDINFO_TAG_MASK;
     1.8    private static short FIELDINFO_TAG_OFFSET;
     1.9  
    1.10    // ClassState constants
    1.11 @@ -102,6 +103,7 @@
    1.12      HIGH_OFFSET                    = db.lookupIntConstant("FieldInfo::high_packed_offset").intValue();
    1.13      FIELD_SLOTS                    = db.lookupIntConstant("FieldInfo::field_slots").intValue();
    1.14      FIELDINFO_TAG_SIZE             = db.lookupIntConstant("FIELDINFO_TAG_SIZE").shortValue();
    1.15 +    FIELDINFO_TAG_MASK             = db.lookupIntConstant("FIELDINFO_TAG_MASK").shortValue();
    1.16      FIELDINFO_TAG_OFFSET           = db.lookupIntConstant("FIELDINFO_TAG_OFFSET").shortValue();
    1.17  
    1.18      // read ClassState constants
    1.19 @@ -321,7 +323,7 @@
    1.20      U2Array fields = getFields();
    1.21      short lo = fields.at(index * FIELD_SLOTS + LOW_OFFSET);
    1.22      short hi = fields.at(index * FIELD_SLOTS + HIGH_OFFSET);
    1.23 -    if ((lo & FIELDINFO_TAG_SIZE) == FIELDINFO_TAG_OFFSET) {
    1.24 +    if ((lo & FIELDINFO_TAG_MASK) == FIELDINFO_TAG_OFFSET) {
    1.25        return VM.getVM().buildIntFromShorts(lo, hi) >> FIELDINFO_TAG_SIZE;
    1.26      }
    1.27      throw new RuntimeException("should not reach here");
     2.1 --- a/src/share/vm/runtime/vmStructs.cpp	Tue Jan 15 17:05:53 2013 -0500
     2.2 +++ b/src/share/vm/runtime/vmStructs.cpp	Wed Jan 16 16:30:04 2013 +0100
     2.3 @@ -2292,6 +2292,7 @@
     2.4    /*************************************/                                 \
     2.5                                                                            \
     2.6    declare_preprocessor_constant("FIELDINFO_TAG_SIZE", FIELDINFO_TAG_SIZE) \
     2.7 +  declare_preprocessor_constant("FIELDINFO_TAG_MASK", FIELDINFO_TAG_MASK) \
     2.8    declare_preprocessor_constant("FIELDINFO_TAG_OFFSET", FIELDINFO_TAG_OFFSET) \
     2.9                                                                            \
    2.10    /************************************************/                      \

mercurial