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 //------------------------------------------------------------------------------------------
|