< prev index next >

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

Print this page

 99     // char* mapped_base_address = header->_mapped_base_address
100     // size_t cloned_vtable_offset = header->_cloned_vtable_offset
101     // CppVtableInfo** vtablesIndex = mapped_base_address + cloned_vtable_offset;
102     mapped_base_address = get_AddressField(FileMapHeader_type, header, "_mapped_base_address");
103     long cloned_vtable_offset = get_CIntegerField(FileMapHeader_type, header, "_cloned_vtables_offset");
104     vtablesIndex = mapped_base_address.addOffsetTo(cloned_vtable_offset);
105 
106     // CDSFileMapRegion* rw_region = &header->_region[rw];
107     // char* rwRegionBaseAddress = rw_region->_mapped_base;
108     // size_t used = rw_region->_used;
109     // char* rwRegionEndAddress = rwRegionBaseAddress + used;
110     Address rw_region = get_CDSFileMapRegion(FileMapHeader_type, header, 0);
111     rwRegionBaseAddress = get_AddressField(CDSFileMapRegion_type, rw_region, "_mapped_base");
112     long used = get_CIntegerField(CDSFileMapRegion_type, rw_region, "_used");
113     rwRegionEndAddress = rwRegionBaseAddress.addOffsetTo(used);
114 
115     populateMetadataTypeArray(db);
116   }
117 
118   private static void populateMetadataTypeArray(TypeDataBase db) {
119     metadataTypeArray = new Type[11];
120     // The order needs to match up with CPP_VTABLE_TYPES_DO in src/hotspot/share/cds/cppVtables.cpp
121 
122     metadataTypeArray[0] = db.lookupType("ConstantPool");
123     metadataTypeArray[1] = db.lookupType("InstanceKlass");
124     metadataTypeArray[2] = db.lookupType("InstanceClassLoaderKlass");
125     metadataTypeArray[3] = db.lookupType("InstanceMirrorKlass");
126     metadataTypeArray[4] = db.lookupType("InstanceRefKlass");
127     metadataTypeArray[5] = db.lookupType("InstanceStackChunkKlass");
128     metadataTypeArray[6] = db.lookupType("Method");
129     metadataTypeArray[7] = db.lookupType("MethodData");
130     metadataTypeArray[8] = db.lookupType("MethodCounters");
131     metadataTypeArray[9] = db.lookupType("ObjArrayKlass");
132     metadataTypeArray[10] = db.lookupType("TypeArrayKlass");



133   }
134 
135   public FileMapHeader getHeader() {
136     return headerObj;
137   }
138 
139   public boolean inCopiedVtableSpace(Address vptrAddress) {
140     FileMapHeader fmHeader = getHeader();
141     return fmHeader.inCopiedVtableSpace(vptrAddress);
142   }
143 
144   public Type getTypeForVptrAddress(Address vptrAddress) {
145     if (vTableTypeMap == null) {
146       getHeader().createVtableTypeMapping();
147     }
148     return vTableTypeMap.get(vptrAddress);
149   }
150 
151 
152   //------------------------------------------------------------------------------------------

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