< prev index next >

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/memory/FileMapInfo.java

Print this page

105     long cloned_vtable_narrowPtr = get_CIntegerField(FileMapHeader_type, header, "_cloned_vtables");
106     // narrowPtr stores scaled offset units (byte_offset >> MetadataOffsetShift).
107     // Apply the left shift to convert back to byte offset.
108     metadataOffsetShift = db.lookupIntConstant("AOTCompressedPointers::MetadataOffsetShift").longValue();
109     long cloned_vtable_offset = cloned_vtable_narrowPtr << metadataOffsetShift;
110     vtablesIndex = mapped_base_address.addOffsetTo(cloned_vtable_offset);
111 
112     // CDSFileMapRegion* rw_region = &header->_region[rw];
113     // char* rwRegionBaseAddress = rw_region->_mapped_base;
114     // size_t used = rw_region->_used;
115     // char* rwRegionEndAddress = rwRegionBaseAddress + used;
116     Address rw_region = get_CDSFileMapRegion(FileMapHeader_type, header, 0);
117     rwRegionBaseAddress = get_AddressField(CDSFileMapRegion_type, rw_region, "_mapped_base");
118     long used = get_CIntegerField(CDSFileMapRegion_type, rw_region, "_used");
119     rwRegionEndAddress = rwRegionBaseAddress.addOffsetTo(used);
120 
121     populateMetadataTypeArray(db);
122   }
123 
124   private static void populateMetadataTypeArray(TypeDataBase db) {
125     metadataTypeArray = new Type[11];
126     // The order needs to match up with CPP_VTABLE_TYPES_DO in src/hotspot/share/cds/cppVtables.cpp
127 
128     metadataTypeArray[0] = db.lookupType("ConstantPool");
129     metadataTypeArray[1] = db.lookupType("InstanceKlass");
130     metadataTypeArray[2] = db.lookupType("InstanceClassLoaderKlass");
131     metadataTypeArray[3] = db.lookupType("InstanceMirrorKlass");
132     metadataTypeArray[4] = db.lookupType("InstanceRefKlass");
133     metadataTypeArray[5] = db.lookupType("InstanceStackChunkKlass");
134     metadataTypeArray[6] = db.lookupType("Method");
135     metadataTypeArray[7] = db.lookupType("MethodData");
136     metadataTypeArray[8] = db.lookupType("MethodCounters");
137     metadataTypeArray[9] = db.lookupType("ObjArrayKlass");
138     metadataTypeArray[10] = db.lookupType("TypeArrayKlass");



139   }
140 
141   public FileMapHeader getHeader() {
142     return headerObj;
143   }
144 
145   public boolean inCopiedVtableSpace(Address vptrAddress) {
146     FileMapHeader fmHeader = getHeader();
147     return fmHeader.inCopiedVtableSpace(vptrAddress);
148   }
149 
150   public Type getTypeForVptrAddress(Address vptrAddress) {
151     if (vTableTypeMap == null) {
152       getHeader().createVtableTypeMapping();
153     }
154     return vTableTypeMap.get(vptrAddress);
155   }
156 
157 
158   //------------------------------------------------------------------------------------------

105     long cloned_vtable_narrowPtr = get_CIntegerField(FileMapHeader_type, header, "_cloned_vtables");
106     // narrowPtr stores scaled offset units (byte_offset >> MetadataOffsetShift).
107     // Apply the left shift to convert back to byte offset.
108     metadataOffsetShift = db.lookupIntConstant("AOTCompressedPointers::MetadataOffsetShift").longValue();
109     long cloned_vtable_offset = cloned_vtable_narrowPtr << metadataOffsetShift;
110     vtablesIndex = mapped_base_address.addOffsetTo(cloned_vtable_offset);
111 
112     // CDSFileMapRegion* rw_region = &header->_region[rw];
113     // char* rwRegionBaseAddress = rw_region->_mapped_base;
114     // size_t used = rw_region->_used;
115     // char* rwRegionEndAddress = rwRegionBaseAddress + used;
116     Address rw_region = get_CDSFileMapRegion(FileMapHeader_type, header, 0);
117     rwRegionBaseAddress = get_AddressField(CDSFileMapRegion_type, rw_region, "_mapped_base");
118     long used = get_CIntegerField(CDSFileMapRegion_type, rw_region, "_used");
119     rwRegionEndAddress = rwRegionBaseAddress.addOffsetTo(used);
120 
121     populateMetadataTypeArray(db);
122   }
123 
124   private static void populateMetadataTypeArray(TypeDataBase db) {
125     metadataTypeArray = new Type[14];
126     // The order needs to match up with CPP_VTABLE_TYPES_DO in src/hotspot/share/cds/cppVtables.cpp
127 
128     metadataTypeArray[0] = db.lookupType("ConstantPool");
129     metadataTypeArray[1] = db.lookupType("InstanceKlass");
130     metadataTypeArray[2] = db.lookupType("InstanceClassLoaderKlass");
131     metadataTypeArray[3] = db.lookupType("InstanceMirrorKlass");
132     metadataTypeArray[4] = db.lookupType("InstanceRefKlass");
133     metadataTypeArray[5] = db.lookupType("InstanceStackChunkKlass");
134     metadataTypeArray[6] = db.lookupType("Method");
135     metadataTypeArray[7] = db.lookupType("MethodData");
136     metadataTypeArray[8] = db.lookupType("MethodCounters");
137     metadataTypeArray[9] = db.lookupType("TypeArrayKlass");
138     metadataTypeArray[10] = db.lookupType("ObjArrayKlass");
139     metadataTypeArray[11] = db.lookupType("RefArrayKlass");
140     metadataTypeArray[12] = db.lookupType("FlatArrayKlass");
141     metadataTypeArray[13] = db.lookupType("InlineKlass");
142   }
143 
144   public FileMapHeader getHeader() {
145     return headerObj;
146   }
147 
148   public boolean inCopiedVtableSpace(Address vptrAddress) {
149     FileMapHeader fmHeader = getHeader();
150     return fmHeader.inCopiedVtableSpace(vptrAddress);
151   }
152 
153   public Type getTypeForVptrAddress(Address vptrAddress) {
154     if (vTableTypeMap == null) {
155       getHeader().createVtableTypeMapping();
156     }
157     return vTableTypeMap.get(vptrAddress);
158   }
159 
160 
161   //------------------------------------------------------------------------------------------
< prev index next >